Name: series-workflowd4w7n Phase: Succeeded StartedAt: 2026-08-21 03:19:17 +0000 UTC FinishedAt: 2026-08-21 07:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[0] Phase: Succeeded StartedAt: 2026-08-21 03:19:17 +0000 UTC FinishedAt: 2026-08-21 03:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 03:19:17 +0000 UTC FinishedAt: 2026-08-21 03:22:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "486f8908aa587ab2a213bbef39311743e4f8f57a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT_HCIUART", "BT_HCIUART_3WIRE", "SERIAL_DEV_BUS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "486f8908aa587ab2a213bbef39311743e4f8f57a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT_HCIUART", "BT_HCIUART_3WIRE", "SERIAL_DEV_BUS" ], "series_id": "784f8a66-851c-43ec-a593-62b088385af3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "device_schedule_reprobe", "device_reprobe_work_fn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUX0hDSVVBUlQmIzM0OywKICAgICYjMzQ7QlRfSENJVUFSVF8zV0lSRSYjMzQ7LAogICAgJiMzNDtTRVJJQUxfREVWX0JVUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9zY2hlZHVsZV9yZXByb2JlJiMzNDssCiAgICAmIzM0O2RldmljZV9yZXByb2JlX3dvcmtfZm4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gc3RhbmRhcmRpc2UgZGVmZXJyZWQgZGV2aWNlIHJlcHJvYmluZyBhY3Jvc3MgZHJpdmVycywgcmVwbGFjaW5nIGN1c3RvbSB3b3JrIGl0ZW1zIGluIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYC4gSXQgYWxzbyBhZGRzIGEgYHNodXRkb3duX2RvbmVgIGZsYWcgdG8gcHJldmVudCByZXByb2JpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtIHNodXRkb3duLiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIChlLmcuLCBgc3RydWN0IGRldmljZV9yZXByb2JlYCB2aWEgYGt6YWxsb2Nfb2JqYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCBrZXJuZWwgZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkcml2ZXIgYmluZGluZy91bmJpbmRpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG5ldHdvcmsgcGFja2V0IHBhcnNpbmcsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlKSwgbG9ja2luZyAoZGVhZGxvY2tzKSwgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gdGhlIGRyaXZlciBjb3JlLCB3aGljaCBhbGxvd3Mgc2NoZWR1bGluZyBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgYSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBkcml2ZXIgbW9kZWwgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyB0aGUgYGhjaV9oNWAgc2VyaWFsIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2Y2NzNmZWY3NDg2YTY5OGI5NGNmMjkxZDY1OGJlZGEwZWE1NTc0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDAzOjIxOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9iYXNlLmggYi9kcml2ZXJzL2Jhc2UvYmFzZS5oXG5pbmRleCBhNWI3YWJjMTBmZjAyLi42MjM0ZTM3ZGU3ZTk5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2Jhc2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2Jhc2UuaFxuQEAgLTEwNiw2ICYjNDM7MTA2LDEwIEBAIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZSB7XG4gICogQGRlYWQ6IFRoaXMgZGV2aWNlIGlzIGN1cnJlbnRseSBlaXRoZXIgaW4gdGhlIHByb2Nlc3Mgb2Ygb3IgaGFzIGJlZW5cbiAgKlx0ICByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQW55IGFzeW5jaHJvbm91cyBldmVudHMgc2NoZWR1bGVkIGZvciB0aGlzXG4gICpcdCAgZGV2aWNlIHNob3VsZCBleGl0IHdpdGhvdXQgdGFraW5nIGFueSBhY3Rpb24uXG4mIzQzOyAqIEBzaHV0ZG93bl9kb25lOiBTZXQgb25jZSBkZXZpY2Vfc2h1dGRvd24oKSBoYXMgcmVhY2hlZCB0aGlzIGRldmljZSwgdW5kZXJcbiYjNDM7ICpcdCAgdGhlIGRldmljZSBsb2NrLCBiZWZvcmUgYW55IHNodXRkb3duIGNhbGxiYWNrIHJ1bnMuIFJlYWQgdW5kZXIgdGhlXG4mIzQzOyAqXHQgIGRldmljZSBsb2NrLiBBIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoXG4mIzQzOyAqXHQgIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCkgbXVzdCBub3QgZGV0YWNoIHRoZSBkZXZpY2UgYW55bW9yZS5cbiAgKlxuICAqIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyIGNvcmUgc2hvdWxkIGV2ZXIgdG91Y2ggdGhlc2UgZmllbGRzLlxuICAqL1xuQEAgLTEyMCw2ICYjNDM7MTI0LDcgQEAgc3RydWN0IGRldmljZV9wcml2YXRlIHtcbiBcdGNoYXIgKmRlZmVycmVkX3Byb2JlX3JlYXNvbjtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldmljZTtcbiBcdHU4IGRlYWQ6MTtcbiYjNDM7XHR1OCBzaHV0ZG93bl9kb25lOjE7XG4gfTtcbiAjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX3BhcmVudChvYmopXHRcXFxuIFx0Y29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmNcbmluZGV4IDRkMDI2NjgyOTQ0ZjIuLjhhN2RiZTRlODM2MmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5AQCAtNDkwNiw2ICYjNDM7NDkwNiw5IEBAIHZvaWQgZGV2aWNlX3NodXRkb3duKHZvaWQpXG4gXHRcdFx0ZGV2aWNlX2xvY2socGFyZW50KTtcbiBcdFx0ZGV2aWNlX2xvY2soZGV2KTtcbiBcbiYjNDM7XHRcdGlmIChkZXYtXHUwMDNlcClcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZXAtXHUwMDNlc2h1dGRvd25fZG9uZSA9IHRydWU7XG4mIzQzO1xuIFx0XHQvKiBEb24mIzM5O3QgYWxsb3cgYW55IG1vcmUgcnVudGltZSBzdXNwZW5kcyAqL1xuIFx0XHRwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpO1xuIFx0XHRwbV9ydW50aW1lX2JhcnJpZXIoZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jXG5pbmRleCA2MGMwMDUyMjM4NDRkLi5kNzY1ZTFhZTU2MTRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2RkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9kZC5jXG5AQCAtMTQzNiwzICYjNDM7MTQzNiwxMDUgQEAgdm9pZCBkcml2ZXJfZGV0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG4gXHRcdHB1dF9kZXZpY2UoZGV2KTtcbiBcdH1cbiB9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUge1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqcGFyZW50O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmljZV9yZXByb2JlLFxuJiM0MztcdFx0XHRcdFx0XHQgd29yay53b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBycC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqcGFyZW50ID0gcnAtXHUwMDNlcGFyZW50O1xuJiM0MztcdGJvb2wgZGV0YWNoZWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRfX2RldmljZV9kcml2ZXJfbG9jayhkZXYsIHBhcmVudCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBycC1cdTAwM2VkcnYgaXMgb25seSBldmVyIGNvbXBhcmVkLCBuZXZlciBkZXJlZmVyZW5jZWQ6IHRoZSBkcml2ZXIgaXRcbiYjNDM7XHQgKiBwb2ludHMgdG8gbWF5IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGJ5IG5vdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWRldi1cdTAwM2VwLVx1MDAzZWRlYWQgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlcC1cdTAwM2VzaHV0ZG93bl9kb25lIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBkZXYtXHUwMDNlZHJpdmVyIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlZHJpdmVyID09IHJwLVx1MDAzZWRydikge1xuJiM0MztcdFx0X19kZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2LCBwYXJlbnQpO1xuJiM0MztcdFx0ZGV0YWNoZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRfX2RldmljZV9kcml2ZXJfdW5sb2NrKGRldiwgcGFyZW50KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldGFjaGVkKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZGV2aWNlX2F0dGFjaCgpIG11c3QgcnVuIHdpdGggdGhlIHBhcmVudCBsb2NrZWQgb24gYnVzZXNcbiYjNDM7XHRcdCAqIHRoYXQgcmVxdWlyZSBpdCwgbWlycm9yaW5nIGJ1c19yZXNjYW5fZGV2aWNlc19oZWxwZXIoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHBhcmVudCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWJ1cy1cdTAwM2VuZWVkX3BhcmVudF9sb2NrKVxuJiM0MztcdFx0XHRkZXZpY2VfbG9jayhwYXJlbnQpO1xuJiM0MztcdFx0cmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0ZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDtyZS1wcm9iZSBmYWlsZWQsIGRldmljZSBsZWZ0IHVuYm91bmRcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHBhcmVudCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWJ1cy1cdTAwM2VuZWVkX3BhcmVudF9sb2NrKVxuJiM0MztcdFx0XHRkZXZpY2VfdW5sb2NrKHBhcmVudCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwdXRfZGV2aWNlKGRldik7XG4mIzQzO1x0cHV0X2RldmljZShwYXJlbnQpO1xuJiM0MztcdGtmcmVlKHJwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRldmljZV9zY2hlZHVsZV9yZXByb2JlIC0gc2NoZWR1bGUgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlXG4mIzQzOyAqIEBkZXY6IGRldmljZSB0byBkZXRhY2ggYW5kIHJlLXByb2JlXG4mIzQzOyAqIEBkZWxheV9tczogZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmUtcHJvYmUgcnVuc1xuJiM0MzsgKlxuJiM0MzsgKiBTY2hlZHVsZSBhIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgQGRldiBhZnRlciBAZGVsYXlfbXMgbWlsbGlzZWNvbmRzLlxuJiM0MzsgKiBUaGUgcmUtcHJvYmUgaXMgc2tpcHBlZCBpZiwgYnkgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCB3b3JrIHJ1bnMsIHRoZVxuJiM0MzsgKiBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCwgdGhlIHN5c3RlbSBzaHV0ZG93biBzZXF1ZW5jZSBoYXMgcmVhY2hlZCB0aGVcbiYjNDM7ICogZGV2aWNlLCBvciBAZGV2IGlzIG5vIGxvbmdlciBib3VuZCB0byB0aGUgZHJpdmVyIHRoYXQgd2FzIGJvdW5kIGF0XG4mIzQzOyAqIHNjaGVkdWxpbmcgdGltZS4gSW4gcGFydGljdWxhciBhbiBhZG1pbmlzdHJhdGl2ZSB1bmJpbmQgaXMgbmV2ZXJcbiYjNDM7ICogdW5kb25lIGJ5IGEgc3RhbGUgcmUtcHJvYmUuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB3b3JrIGZ1bmN0aW9uIGlzIGJ1aWx0LWluIHRleHQsIHNvIHRoZSBib3VuZCBkcml2ZXIgbWF5IGNhbGwgdGhpc1xuJiM0MzsgKiBmcm9tIGl0cyBvd24gY29kZSB3aXRob3V0IGhvbGRpbmcgYSBtb2R1bGUgcmVmZXJlbmNlLiBJZiB0aGUgZHJpdmVyXG4mIzQzOyAqIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdvcmsgcnVucywgZHJpdmVyIHVucmVnaXN0cmF0aW9uIHVuYmluZHNcbiYjNDM7ICogQGRldiBmaXJzdCBhbmQgdGhlIHNjaGVkdWxlZCB3b3JrIGRvZXMgbm90aGluZy5cbiYjNDM7ICpcbiYjNDM7ICogTXVsdGlwbGUgcGVuZGluZyByZS1wcm9iZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhcmUgaW5kaXZpZHVhbGx5IHNhZmU7XG4mIzQzOyAqIGEgY2FsbGVyIHRoYXQgd2FudHMgYXQgbW9zdCBvbmUgcGVuZGluZyByZS1wcm9iZSBtdXN0IGdhdGUgc2NoZWR1bGluZ1xuJiM0MzsgKiBpdHNlbGYuXG4mIzQzOyAqXG4mIzQzOyAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBkZXYgaXMgbm90IGEgcmVnaXN0ZXJlZCBkZXZpY2VcbiYjNDM7ICogYm91bmQgdG8gYSBkcml2ZXIsIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5X21zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9yZXByb2JlICpycDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlYnVzIHx8ICFkZXYtXHUwMDNlcCB8fCAhZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZWRyaXZlcilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRycCA9IGt6YWxsb2Nfb2JqKCpycCk7XG4mIzQzO1x0aWYgKCFycClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRycC1cdTAwM2VkZXYgPSBnZXRfZGV2aWNlKGRldik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQaW4gdGhlIHBhcmVudCB0b286IHRoZSB3b3JrIGxvY2tzIGl0LCBhbmQgYW4gdW5yZWdpc3RlciBvZiBAZGV2XG4mIzQzO1x0ICogd291bGQgb3RoZXJ3aXNlIGRyb3AgdGhlIGxhc3QgcmVmZXJlbmNlIGJlZm9yZSB0aGUgd29yayBydW5zLlxuJiM0MztcdCAqL1xuJiM0MztcdHJwLVx1MDAzZXBhcmVudCA9IGdldF9kZXZpY2UoZGV2LVx1MDAzZXBhcmVudCk7XG4mIzQzO1x0cnAtXHUwMDNlZHJ2ID0gUkVBRF9PTkNFKGRldi1cdTAwM2Vkcml2ZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJwLVx1MDAzZXdvcmssIGRldmljZV9yZXByb2JlX3dvcmtfZm4pO1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZycC1cdTAwM2V3b3JrLFxuJiM0MztcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jXG5pbmRleCBiYWE2MjFiM2ZlZjkzLi4yOWJlMDVkNDE0Mjk4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jXG5AQCAtMzAxMiw3ICYjNDM7MzAxMiw3IEBAIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9wZXJmb3JtX3BsZHIoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhKVxuIFx0ICogQlQgbmVlZHMgcGNpX3NhdmVfc3RhdGUoKS9wY2lfcmVzdG9yZV9zdGF0ZSgpIGJlY2F1c2UgdGhlIEJUIGRyaXZlclxuIFx0ICogaXMgc3RpbGwgcGFydGlhbGx5IGF0dGFjaGVkIHdoZW4gdGhlIF9QUlIgcnVucyAoaXQgaGFzbiYjMzk7dCBiZWVuIHVuYm91bmQgeWV0KS5cbiBcdCAqIFRoZSBQQ0kgZGV2aWNlIG5lZWRzIHRvIHJlbWFpbiBtaW5pbWFsbHkgZnVuY3Rpb25hbCBzbyB0aGF0XG4tXHQgKiBkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikgY2FuIHdvcmsgYWZ0ZXJ3YXJkXG4mIzQzO1x0ICogdGhlIGRlZmVycmVkIHJlLXByb2JlIG9mIHRoZSBCVCBkZXZpY2UgY2FuIHdvcmsgYWZ0ZXJ3YXJkXG4gXHQgKi9cbiBcdHJldCA9IGJ0aW50ZWxfcGNpZV9hY3BpX3Jlc2V0X21ldGhvZChkYXRhKTtcbiBcbkBAIC0zMDIzLDE0ICYjNDM7MzAyMywxNiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdH1cbiBcbiBcdGlmICghcmV0KSB7XG4tXHRcdGlmIChkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikpXG4tXHRcdFx0QlRfRVJSKFwmIzM0O0JUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXNcJiMzNDssIHBjaV9uYW1lKHBkZXYpKTtcbiYjNDM7XHRcdGlmIChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgMCkpXG4mIzQzO1x0XHRcdEJUX0VSUihcJiMzNDtCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXNcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBwY2lfbmFtZShwZGV2KSk7XG4gXHR9XG4gfVxuIFxuIC8qXG4tICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGUgUENJXG4tICogY29yZSB2aWEgZGV2aWNlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgmIzM5O3MgY29udHJhY3QuXG4mIzQzOyAqIElzc3VlIGEgRnVuY3Rpb24gTGV2ZWwgUmVzZXQgYW5kIGhhbmQgdGVhcmRvd24vcmUtaW5pdCBvZmYgdG8gdGhlXG4mIzQzOyAqIGRyaXZlciBjb3JlIHZpYSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCYjMzk7c1xuJiM0MzsgKiBjb250cmFjdC5cbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpIGFuZCBtdXN0IGhhdmUgYWxyZWFkeVxuICAqIGRpc2FibGVkIGludGVycnVwdHMgYW5kIGRyYWluZWQgYm90aCByeF93b3JrIGFuZCBjb3JlZHVtcF93b3JrLlxuQEAgLTMwNTIsMTQgJiM0MzszMDU0LDEyIEBAIHN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3BlcmZvcm1fZmxyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdC8qIGRldmljZV9yZXByb2JlKCkgYWx3YXlzIGRldGFjaGVzIHRoZSBkcml2ZXIgZmlyc3QgKHJ1bm5pbmdcbi1cdCAqIC5yZW1vdmUoKSwgd2hpY2ggZnJlZXMgJiMzOTtkYXRhJiMzOTspOyBhbnkgcmUtcHJvYmUgZmFpbHVyZSBsZWF2ZXMgdGhlXG4tXHQgKiBkZXZpY2UgdW5ib3VuZCBidXQgJiMzOTtkYXRhJiMzOTsgaXMgYWxyZWFkeSBnb25lLCBzbyBqdXN0IGxvZyBpdC5cbi1cdCAqL1xuLVx0aWYgKGRldmljZV9yZXByb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KSlcbi1cdFx0QlRfRVJSKFwmIzM0O0JUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXNcJiMzNDssIHBjaV9uYW1lKHBkZXYpKTtcbiYjNDM7XHRlcnIgPSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdEJUX0VSUihcJiMzNDtCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXNcJiMzNDssXG4mIzQzO1x0XHQgICAgICAgcGNpX25hbWUocGRldikpO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aylcbkBAIC0zMDkwLDExICYjNDM7MzA5MCwxNSBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuIFxuIFx0YnRfZGV2X2RiZyhkYXRhLVx1MDAzZWhkZXYsIFwmIzM0O1JlbGVhc2UgYmx1ZXRvb3RoIGludGVyZmFjZVwmIzM0Oyk7XG4gXG4tXHQvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGV5XG4tXHQgKiBkZXN0cm95ICYjMzk7ZGF0YSYjMzk7IHZpYSBkZXZpY2VfcmVwcm9iZSgpIChhIGZyZXNoIHByb2JlIHJlLUlOSVRfV09SS3Ncbi1cdCAqIHRoZSBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3Rcbi1cdCAqIE5PVCBiZSBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWxcbi1cdCAqIHdpdGggJiMzOTtkYXRhJiMzOTsgc3RpbGwgYWxpdmUsIGluIHdoaWNoIGNhc2Ugd2UgYmFsYW5jZSB0aGVcbiYjNDM7XHQvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGVcbiYjNDM7XHQgKiBkZWZlcnJlZCByZS1wcm9iZSBzY2hlZHVsZWQgd2l0aCBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpXG4mIzQzO1x0ICogZGVzdHJveXMgJiMzOTtkYXRhJiMzOTsgYnkgcmUtcnVubmluZyAucHJvYmUoKSAod2hpY2ggcmUtSU5JVF9XT1JLcyB0aGVcbiYjNDM7XHQgKiBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3QgTk9UIGJlXG4mIzQzO1x0ICogY2FsbGVkIG9uIHRoZSBzdWNjZXNzIHBhdGguICYjMzk7ZGF0YSYjMzk7IHN0YXlzIGFsaXZlIHVudGlsIHRoZSBkZWZlcnJlZFxuJiM0MztcdCAqIGRldGFjaCBydW5zOyBpbiB0aGlzIHdpbmRvdyBuZXcgYWN0aXZpdHkgaXMgZmVuY2VkIGJ5XG4mIzQzO1x0ICogQlRJTlRFTF9QQ0lFX1JFQ09WRVJZX0lOX1BST0dSRVNTLCB0aGUgbWFza2VkIGludGVycnVwdHMgYW5kIHRoZVxuJiM0MztcdCAqIGRpc2FibGVkIGR1bXAgd29ya2Vycy4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwgd2l0aCBub1xuJiM0MztcdCAqIHJlLXByb2JlIHNjaGVkdWxlZCwgaW4gd2hpY2ggY2FzZSB3ZSBiYWxhbmNlIHRoZVxuIFx0ICogZGlzYWJsZV93b3JrX3N5bmMoKSBjYWxscyBhYm92ZSBzbyBhIGxhdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgaXNcbiBcdCAqIG5vdCBwZXJtYW5lbnRseSBibG9ja2VkLlxuIFx0ICpcbkBAIC0zNDYwLDEzICYjNDM7MzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2ZGF0YS1cdTAwM2Vmd3RyaWdnZXJfd29yayk7XG4gXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZkYXRhLVx1MDAzZW1ib3hfd29yayk7XG4gXG4tXHQvKiBDYW5jZWwgcGVuZGluZyByZXNldCB3b3JrLiBTa2lwIG9ubHkgd2hlbiByZW1vdmUoKSBpcyBjYWxsZWQgZnJvbVxuLVx0ICogd2l0aGluIHRoZSByZXNldCB3b3JrIGl0c2VsZiAoUExEUiBkZXZpY2VfcmVwcm9iZSBwYXRoKSB0byBhdm9pZFxuLVx0ICogZGVhZGxvY2suIGN1cnJlbnRfd29yaygpIHJldHVybnMgdGhlIHdvcmtfc3RydWN0IG9mIHRoZSBjYWxsZXIgaWZcbi1cdCAqIHdlIGFyZSBpbiBhIHdvcmtxdWV1ZSBjb250ZXh0LlxuJiM0MztcdC8qIFRoZSBkZWZlcnJlZCByZS1wcm9iZSB0cmlnZ2VycyAucmVtb3ZlKCkgZnJvbSB0aGUgZHJpdmVyIGNvcmUmIzM5O3NcbiYjNDM7XHQgKiB3b3JrIGl0ZW0sIG5ldmVyIGZyb20gcmVzZXRfd29yayBpdHNlbGYsIHNvIHRoaXMgbm8gbG9uZ2VyIHJ1bnNcbiYjNDM7XHQgKiBuZXN0ZWQgaW4gcmVzZXRfd29yazsgZGlzYWJsZV93b3JrX3N5bmMoKSBhbHNvIGd1YXJhbnRlZXMgdGhlXG4mIzQzO1x0ICogcmVzZXQgd29yayBoYXMgZnVsbHkgcmV0dXJuZWQgYmVmb3JlICYjMzk7ZGF0YSYjMzk7IGlzIGZyZWVkLlxuIFx0ICovXG4tXHRpZiAoY3VycmVudF93b3JrKCkgIT0gXHUwMDI2ZGF0YS1cdTAwM2VyZXNldF93b3JrKVxuLVx0XHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZkYXRhLVx1MDAzZXJlc2V0X3dvcmspO1xuJiM0MztcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmRhdGEtXHUwMDNlcmVzZXRfd29yayk7XG4gXG4gXHRidGludGVsX3BjaWVfZGlzYWJsZV9pbnRlcnJ1cHRzKGRhdGEpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcbmluZGV4IGIxOTk5ZTE0YWFkZWYuLjNmZGUxZDVhNWFlOTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcbkBAIC05OTAsNyAmIzQzOzk5MCw3IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc2V0dXAoc3RydWN0IGg1ICpoNSlcbiBzdGF0aWMgdm9pZCBoNV9idHJ0bF9vcGVuKHN0cnVjdCBoNSAqaDUpXG4ge1xuIFx0Lypcbi1cdCAqIFNpbmNlIGg1X2J0cnRsX3Jlc3VtZSgpIGRvZXMgYSBkZXZpY2VfcmVwcm9iZSgpIHRoZSBzdXNwZW5kIGhhbmRsaW5nXG4mIzQzO1x0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgc2NoZWR1bGVzIGEgZGV2aWNlIHJlLXByb2JlIHRoZSBzdXNwZW5kIGhhbmRsaW5nXG4gXHQgKiBkb25lIGJ5IHRoZSBoY2lfc3VzcGVuZF9ub3RpZmllciBpcyBub3QgbmVjZXNzYXJ5OyBpdCBhY3R1YWxseSBjYXVzZXNcbiBcdCAqIGRlbGF5cyBhbmQgYSBidW5jaCBvZiBlcnJvcnMgdG8gZ2V0IGxvZ2dlZCwgc28gZGlzYWJsZSBpdC5cbiBcdCAqL1xuQEAgLTEwNDksNDYgJiM0MzsxMDQ5LDE1IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc3VzcGVuZChzdHJ1Y3QgaDUgKmg1KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0cnVjdCBoNV9idHJ0bF9yZXByb2JlIHtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuLX07XG4tXG4tc3RhdGljIHZvaWQgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlLCB3b3JrKTtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBkZXZpY2VfcmVwcm9iZShyZXByb2JlLVx1MDAzZWRldik7XG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQUk9CRV9ERUZFUilcbi1cdFx0ZGV2X2VycihyZXByb2JlLVx1MDAzZWRldiwgXCYjMzQ7UmVwcm9iZSBlcnJvciAlZFxcblwmIzM0OywgcmV0KTtcbi1cbi1cdHB1dF9kZXZpY2UocmVwcm9iZS1cdTAwM2VkZXYpO1xuLVx0a2ZyZWUocmVwcm9iZSk7XG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbi19XG4tXG4gc3RhdGljIGludCBoNV9idHJ0bF9yZXN1bWUoc3RydWN0IGg1ICpoNSlcbiB7XG4tXHRpZiAodGVzdF9iaXQoSDVfV0FLRVVQX0RJU0FCTEUsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSkge1xuLVx0XHRzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdFx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcbi1cdFx0aWYgKCFyZXByb2JlKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0XHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xuJiM0MztcdGlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgXHUwMDI2aDUtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKFx1MDAyNmg1LVx1MDAzZWh1LVx1MDAzZXNlcmRldi1cdTAwM2VkZXYsIDApO1xuIFxuLVx0XHRJTklUX1dPUksoXHUwMDI2cmVwcm9iZS1cdTAwM2V3b3JrLCBoNV9idHJ0bF9yZXByb2JlX3dvcmtlcik7XG4tXHRcdHJlcHJvYmUtXHUwMDNlZGV2ID0gZ2V0X2RldmljZShcdTAwMjZoNS1cdTAwM2VodS1cdTAwM2VzZXJkZXYtXHUwMDNlZGV2KTtcbi1cdFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2cmVwcm9iZS1cdTAwM2V3b3JrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChoNS1cdTAwM2VkZXZpY2Vfd2FrZV9ncGlvLCAxKTtcbiYjNDM7XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXHUwMDNlZGV2aWNlX3dha2VfZ3BpbywgMSk7XG4gXG4tXHRcdGlmICh0ZXN0X2JpdChINV9IV19GTE9XX0NPTlRST0wsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woaDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LCB0cnVlKTtcbi1cdH1cbiYjNDM7XHRpZiAodGVzdF9iaXQoSDVfSFdfRkxPV19DT05UUk9MLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woaDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xuaW5kZXggNzNhYWUxMTI1MDQyMS4uNWFlNzM0Y2I5MDI3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmNcbkBAIC03OCw0NyAmIzQzOzc4LDExIEBAIHZvaWQgaXdsX3RyYW5zX2ZyZWVfcmVzdGFydF9saXN0KHZvaWQpXG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4tXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4tfTtcbi1cbi1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcmVwcm9iZV93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuLXtcbi1cdHN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdHJlcHJvYmUgPSBjb250YWluZXJfb2Yod2ssIHR5cGVvZigqcmVwcm9iZSksIHdvcmsud29yayk7XG4tXG4tXHRpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS1cdTAwM2VkZXYpKVxuLVx0XHRkZXZfZXJyKHJlcHJvYmUtXHUwMDNlZGV2LCBcJiMzNDtyZXByb2JlIGZhaWxlZCFcXG5cJiMzNDspO1xuLVx0cHV0X2RldmljZShyZXByb2JlLVx1MDAzZWRldik7XG4tXHRrZnJlZShyZXByb2JlKTtcbi1cdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBpd2xfdHJhbnNfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpXG4ge1xuLVx0c3RydWN0IGl3bF90cmFuc19yZXByb2JlICpyZXByb2JlO1xuLVxuLVx0Lypcbi1cdCAqIGdldCBhIG1vZHVsZSByZWZlcmVuY2UgdG8gYXZvaWQgZG9pbmcgdGhpcyB3aGlsZSB1bmxvYWRpbmdcbi1cdCAqIGFueXdheSBhbmQgdG8gYXZvaWQgc2NoZWR1bGluZyBhIHdvcmsgd2l0aCBjb2RlIHRoYXQmIzM5O3Ncbi1cdCAqIGJlaW5nIHJlbW92ZWQuXG4tXHQgKi9cbi1cdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XG4tXHRcdElXTF9FUlIodHJhbnMsIFwmIzM0O01vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAtIGFib3J0XFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcbi1cdGlmICghcmVwcm9iZSkge1xuLVx0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVx0cmVwcm9iZS1cdTAwM2VkZXYgPSBnZXRfZGV2aWNlKHRyYW5zLVx1MDAzZWRldik7XG4tXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZyZXByb2JlLVx1MDAzZXdvcmssIGl3bF90cmFuc19yZXByb2JlX3drKTtcbi1cdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZyZXByb2JlLVx1MDAzZXdvcmssIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTtcbiYjNDM7XHRpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUodHJhbnMtXHUwMDNlZGV2LCBkZWxheV9tcykpXG4mIzQzO1x0XHRJV0xfRVJSKHRyYW5zLCBcJiMzNDtDb3VsZCBub3Qgc2NoZWR1bGUgcmVwcm9iZVxcblwmIzM0Oyk7XG4gfVxuIFxuICNkZWZpbmUgSVdMX1RSQU5TX1JFU0VUX09LX1RJTUVcdDcgLyogc2Vjb25kcyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oXG5pbmRleCA3YjJiYWZmZGQyZjU1Li4xY2RkNDBhNmE0OGRhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuQEAgLTEzMTIsNiAmIzQzOzEzMTIsOCBAQCBpbnQgIF9fbXVzdF9jaGVjayBkZXZpY2VfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldik7XG4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpO1xuIHZvaWQgZGV2aWNlX2luaXRpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTtcbiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7XG4mIzQzO2ludCBfX211c3RfY2hlY2sgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkZWxheV9tcyk7XG4gXG4gYm9vbCBkZXZpY2VfaXNfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlRfSENJVUFSVCYjMzQ7LAogICAgJiMzNDtCVF9IQ0lVQVJUXzNXSVJFJiMzNDssCiAgICAmIzM0O1NFUklBTF9ERVZfQlVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUmIzM0OywKICAgICYjMzQ7ZGV2aWNlX3JlcHJvYmVfd29ya19mbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gdGhlIGRyaXZlciBjb3JlLCB3aGljaCBhbGxvd3Mgc2NoZWR1bGluZyBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgYSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBkcml2ZXIgbW9kZWwgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyB0aGUgYGhjaV9oNWAgc2VyaWFsIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2Y2NzNmZWY3NDg2YTY5OGI5NGNmMjkxZDY1OGJlZGEwZWE1NTc0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDAzOjIxOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKaW5kZXggYTViN2FiYzEwZmYwMi4uNjIzNGUzN2RlN2U5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Jhc2UuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCkBAIC0xMDYsNiAmIzQzOzEwNiwxMCBAQCBzdHJ1Y3QgZHJpdmVyX3ByaXZhdGUgewogICogQGRlYWQ6IFRoaXMgZGV2aWNlIGlzIGN1cnJlbnRseSBlaXRoZXIgaW4gdGhlIHByb2Nlc3Mgb2Ygb3IgaGFzIGJlZW4KICAqCSAgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIEFueSBhc3luY2hyb25vdXMgZXZlbnRzIHNjaGVkdWxlZCBmb3IgdGhpcwogICoJICBkZXZpY2Ugc2hvdWxkIGV4aXQgd2l0aG91dCB0YWtpbmcgYW55IGFjdGlvbi4KJiM0MzsgKiBAc2h1dGRvd25fZG9uZTogU2V0IG9uY2UgZGV2aWNlX3NodXRkb3duKCkgaGFzIHJlYWNoZWQgdGhpcyBkZXZpY2UsIHVuZGVyCiYjNDM7ICoJICB0aGUgZGV2aWNlIGxvY2ssIGJlZm9yZSBhbnkgc2h1dGRvd24gY2FsbGJhY2sgcnVucy4gUmVhZCB1bmRlciB0aGUKJiM0MzsgKgkgIGRldmljZSBsb2NrLiBBIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoCiYjNDM7ICoJICBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpIG11c3Qgbm90IGRldGFjaCB0aGUgZGV2aWNlIGFueW1vcmUuCiAgKgogICogTm90aGluZyBvdXRzaWRlIG9mIHRoZSBkcml2ZXIgY29yZSBzaG91bGQgZXZlciB0b3VjaCB0aGVzZSBmaWVsZHMuCiAgKi8KQEAgLTEyMCw2ICYjNDM7MTI0LDcgQEAgc3RydWN0IGRldmljZV9wcml2YXRlIHsKIAljaGFyICpkZWZlcnJlZF9wcm9iZV9yZWFzb247CiAJc3RydWN0IGRldmljZSAqZGV2aWNlOwogCXU4IGRlYWQ6MTsKJiM0MzsJdTggc2h1dGRvd25fZG9uZToxOwogfTsKICNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG9iaikJXAogCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfcGFyZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggNGQwMjY2ODI5NDRmMi4uOGE3ZGJlNGU4MzYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC00OTA2LDYgJiM0Mzs0OTA2LDkgQEAgdm9pZCBkZXZpY2Vfc2h1dGRvd24odm9pZCkKIAkJCWRldmljZV9sb2NrKHBhcmVudCk7CiAJCWRldmljZV9sb2NrKGRldik7CiAKJiM0MzsJCWlmIChkZXYtJmd0O3ApCiYjNDM7CQkJZGV2LSZndDtwLSZndDtzaHV0ZG93bl9kb25lID0gdHJ1ZTsKJiM0MzsKIAkJLyogRG9uJiMzOTt0IGFsbG93IGFueSBtb3JlIHJ1bnRpbWUgc3VzcGVuZHMgKi8KIAkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKIAkJcG1fcnVudGltZV9iYXJyaWVyKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jCmluZGV4IDYwYzAwNTIyMzg0NGQuLmQ3NjVlMWFlNTYxNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9kZC5jCkBAIC0xNDM2LDMgJiM0MzsxNDM2LDEwNSBAQCB2b2lkIGRyaXZlcl9kZXRhY2goY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIAkJcHV0X2RldmljZShkZXYpOwogCX0KIH0KJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgewomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IGRldmljZSAqcGFyZW50OwomIzQzOwljb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGV2aWNlX3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgKnJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZpY2VfcmVwcm9iZSwKJiM0MzsJCQkJCQkgd29yay53b3JrKTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gcnAtJmd0O2RldjsKJiM0MzsJc3RydWN0IGRldmljZSAqcGFyZW50ID0gcnAtJmd0O3BhcmVudDsKJiM0MzsJYm9vbCBkZXRhY2hlZCA9IGZhbHNlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlfX2RldmljZV9kcml2ZXJfbG9jayhkZXYsIHBhcmVudCk7CiYjNDM7CS8qCiYjNDM7CSAqIHJwLSZndDtkcnYgaXMgb25seSBldmVyIGNvbXBhcmVkLCBuZXZlciBkZXJlZmVyZW5jZWQ6IHRoZSBkcml2ZXIgaXQKJiM0MzsJICogcG9pbnRzIHRvIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGFuZCBmcmVlZCBieSBub3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldi0mZ3Q7cC0mZ3Q7ZGVhZCAmYW1wOyZhbXA7ICFkZXYtJmd0O3AtJmd0O3NodXRkb3duX2RvbmUgJmFtcDsmYW1wOwomIzQzOwkgICAgZGV2LSZndDtkcml2ZXIgJmFtcDsmYW1wOyBkZXYtJmd0O2RyaXZlciA9PSBycC0mZ3Q7ZHJ2KSB7CiYjNDM7CQlfX2RldmljZV9yZWxlYXNlX2RyaXZlcihkZXYsIHBhcmVudCk7CiYjNDM7CQlkZXRhY2hlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsJX19kZXZpY2VfZHJpdmVyX3VubG9jayhkZXYsIHBhcmVudCk7CiYjNDM7CiYjNDM7CWlmIChkZXRhY2hlZCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIGRldmljZV9hdHRhY2goKSBtdXN0IHJ1biB3aXRoIHRoZSBwYXJlbnQgbG9ja2VkIG9uIGJ1c2VzCiYjNDM7CQkgKiB0aGF0IHJlcXVpcmUgaXQsIG1pcnJvcmluZyBidXNfcmVzY2FuX2RldmljZXNfaGVscGVyKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwYXJlbnQgJmFtcDsmYW1wOyBkZXYtJmd0O2J1cy0mZ3Q7bmVlZF9wYXJlbnRfbG9jaykKJiM0MzsJCQlkZXZpY2VfbG9jayhwYXJlbnQpOwomIzQzOwkJcmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJICAgICAgJiMzNDtyZS1wcm9iZSBmYWlsZWQsIGRldmljZSBsZWZ0IHVuYm91bmRcbiYjMzQ7KTsKJiM0MzsJCWlmIChwYXJlbnQgJmFtcDsmYW1wOyBkZXYtJmd0O2J1cy0mZ3Q7bmVlZF9wYXJlbnRfbG9jaykKJiM0MzsJCQlkZXZpY2VfdW5sb2NrKHBhcmVudCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHV0X2RldmljZShkZXYpOwomIzQzOwlwdXRfZGV2aWNlKHBhcmVudCk7CiYjNDM7CWtmcmVlKHJwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUgLSBzY2hlZHVsZSBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUKJiM0MzsgKiBAZGV2OiBkZXZpY2UgdG8gZGV0YWNoIGFuZCByZS1wcm9iZQomIzQzOyAqIEBkZWxheV9tczogZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmUtcHJvYmUgcnVucwomIzQzOyAqCiYjNDM7ICogU2NoZWR1bGUgYSBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIEBkZXYgYWZ0ZXIgQGRlbGF5X21zIG1pbGxpc2Vjb25kcy4KJiM0MzsgKiBUaGUgcmUtcHJvYmUgaXMgc2tpcHBlZCBpZiwgYnkgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCB3b3JrIHJ1bnMsIHRoZQomIzQzOyAqIGRldmljZSBoYXMgYmVlbiByZW1vdmVkLCB0aGUgc3lzdGVtIHNodXRkb3duIHNlcXVlbmNlIGhhcyByZWFjaGVkIHRoZQomIzQzOyAqIGRldmljZSwgb3IgQGRldiBpcyBubyBsb25nZXIgYm91bmQgdG8gdGhlIGRyaXZlciB0aGF0IHdhcyBib3VuZCBhdAomIzQzOyAqIHNjaGVkdWxpbmcgdGltZS4gSW4gcGFydGljdWxhciBhbiBhZG1pbmlzdHJhdGl2ZSB1bmJpbmQgaXMgbmV2ZXIKJiM0MzsgKiB1bmRvbmUgYnkgYSBzdGFsZSByZS1wcm9iZS4KJiM0MzsgKgomIzQzOyAqIFRoZSB3b3JrIGZ1bmN0aW9uIGlzIGJ1aWx0LWluIHRleHQsIHNvIHRoZSBib3VuZCBkcml2ZXIgbWF5IGNhbGwgdGhpcwomIzQzOyAqIGZyb20gaXRzIG93biBjb2RlIHdpdGhvdXQgaG9sZGluZyBhIG1vZHVsZSByZWZlcmVuY2UuIElmIHRoZSBkcml2ZXIKJiM0MzsgKiBtb2R1bGUgaXMgdW5sb2FkZWQgYmVmb3JlIHRoZSB3b3JrIHJ1bnMsIGRyaXZlciB1bnJlZ2lzdHJhdGlvbiB1bmJpbmRzCiYjNDM7ICogQGRldiBmaXJzdCBhbmQgdGhlIHNjaGVkdWxlZCB3b3JrIGRvZXMgbm90aGluZy4KJiM0MzsgKgomIzQzOyAqIE11bHRpcGxlIHBlbmRpbmcgcmUtcHJvYmVzIGZvciB0aGUgc2FtZSBkZXZpY2UgYXJlIGluZGl2aWR1YWxseSBzYWZlOwomIzQzOyAqIGEgY2FsbGVyIHRoYXQgd2FudHMgYXQgbW9zdCBvbmUgcGVuZGluZyByZS1wcm9iZSBtdXN0IGdhdGUgc2NoZWR1bGluZwomIzQzOyAqIGl0c2VsZi4KJiM0MzsgKgomIzQzOyAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBAZGV2IGlzIG5vdCBhIHJlZ2lzdGVyZWQgZGV2aWNlCiYjNDM7ICogYm91bmQgdG8gYSBkcml2ZXIsIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBkZWxheV9tcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnA7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtidXMgfHwgIWRldi0mZ3Q7cCB8fCAhZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZHJpdmVyKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJwID0ga3phbGxvY19vYmooKnJwKTsKJiM0MzsJaWYgKCFycCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlycC0mZ3Q7ZGV2ID0gZ2V0X2RldmljZShkZXYpOwomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIHBhcmVudCB0b286IHRoZSB3b3JrIGxvY2tzIGl0LCBhbmQgYW4gdW5yZWdpc3RlciBvZiBAZGV2CiYjNDM7CSAqIHdvdWxkIG90aGVyd2lzZSBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZSBiZWZvcmUgdGhlIHdvcmsgcnVucy4KJiM0MzsJICovCiYjNDM7CXJwLSZndDtwYXJlbnQgPSBnZXRfZGV2aWNlKGRldi0mZ3Q7cGFyZW50KTsKJiM0MzsJcnAtJmd0O2RydiA9IFJFQURfT05DRShkZXYtJmd0O2RyaXZlcik7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cnAtJmd0O3dvcmssIGRldmljZV9yZXByb2JlX3dvcmtfZm4pOwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgJmFtcDtycC0mZ3Q7d29yaywKJiM0MzsJCQkgICBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jCmluZGV4IGJhYTYyMWIzZmVmOTMuLjI5YmUwNWQ0MTQyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jCkBAIC0zMDEyLDcgJiM0MzszMDEyLDcgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3BlcmZvcm1fcGxkcihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpCiAJICogQlQgbmVlZHMgcGNpX3NhdmVfc3RhdGUoKS9wY2lfcmVzdG9yZV9zdGF0ZSgpIGJlY2F1c2UgdGhlIEJUIGRyaXZlcgogCSAqIGlzIHN0aWxsIHBhcnRpYWxseSBhdHRhY2hlZCB3aGVuIHRoZSBfUFJSIHJ1bnMgKGl0IGhhc24mIzM5O3QgYmVlbiB1bmJvdW5kIHlldCkuCiAJICogVGhlIFBDSSBkZXZpY2UgbmVlZHMgdG8gcmVtYWluIG1pbmltYWxseSBmdW5jdGlvbmFsIHNvIHRoYXQKLQkgKiBkZXZpY2VfcmVwcm9iZSgmYW1wO3BkZXYtJmd0O2RldikgY2FuIHdvcmsgYWZ0ZXJ3YXJkCiYjNDM7CSAqIHRoZSBkZWZlcnJlZCByZS1wcm9iZSBvZiB0aGUgQlQgZGV2aWNlIGNhbiB3b3JrIGFmdGVyd2FyZAogCSAqLwogCXJldCA9IGJ0aW50ZWxfcGNpZV9hY3BpX3Jlc2V0X21ldGhvZChkYXRhKTsKIApAQCAtMzAyMywxNCAmIzQzOzMwMjMsMTYgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3BlcmZvcm1fcGxkcihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpCiAJfQogCiAJaWYgKCFyZXQpIHsKLQkJaWYgKGRldmljZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2KSkKLQkJCUJUX0VSUigmIzM0O0JUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXMmIzM0OywgcGNpX25hbWUocGRldikpOwomIzQzOwkJaWYgKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2LCAwKSkKJiM0MzsJCQlCVF9FUlIoJiMzNDtCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXMmIzM0OywKJiM0MzsJCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCX0KIH0KIAogLyoKLSAqIElzc3VlIGEgRnVuY3Rpb24gTGV2ZWwgUmVzZXQgYW5kIGhhbmQgdGVhcmRvd24vcmUtaW5pdCBvZmYgdG8gdGhlIFBDSQotICogY29yZSB2aWEgZGV2aWNlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgmIzM5O3MgY29udHJhY3QuCiYjNDM7ICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGUKJiM0MzsgKiBkcml2ZXIgY29yZSB2aWEgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgmIzM5O3MKJiM0MzsgKiBjb250cmFjdC4KICAqCiAgKiBDYWxsZXIgbXVzdCBob2xkIHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKSBhbmQgbXVzdCBoYXZlIGFscmVhZHkKICAqIGRpc2FibGVkIGludGVycnVwdHMgYW5kIGRyYWluZWQgYm90aCByeF93b3JrIGFuZCBjb3JlZHVtcF93b3JrLgpAQCAtMzA1MiwxNCAmIzQzOzMwNTQsMTIgQEAgc3RhdGljIGludCBidGludGVsX3BjaWVfcGVyZm9ybV9mbHIoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhKQogCQlyZXR1cm4gZXJyOwogCX0KIAotCS8qIGRldmljZV9yZXByb2JlKCkgYWx3YXlzIGRldGFjaGVzIHRoZSBkcml2ZXIgZmlyc3QgKHJ1bm5pbmcKLQkgKiAucmVtb3ZlKCksIHdoaWNoIGZyZWVzICYjMzk7ZGF0YSYjMzk7KTsgYW55IHJlLXByb2JlIGZhaWx1cmUgbGVhdmVzIHRoZQotCSAqIGRldmljZSB1bmJvdW5kIGJ1dCAmIzM5O2RhdGEmIzM5OyBpcyBhbHJlYWR5IGdvbmUsIHNvIGp1c3QgbG9nIGl0LgotCSAqLwotCWlmIChkZXZpY2VfcmVwcm9iZSgmYW1wO3BkZXYtJmd0O2RldikpCi0JCUJUX0VSUigmIzM0O0JUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXMmIzM0OywgcGNpX25hbWUocGRldikpOwomIzQzOwllcnIgPSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgmYW1wO3BkZXYtJmd0O2RldiwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlCVF9FUlIoJiMzNDtCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXMmIzM0OywKJiM0MzsJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aykKQEAgLTMwOTAsMTEgJiM0MzszMDkwLDE1IEBAIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spCiAKIAlidF9kZXZfZGJnKGRhdGEtJmd0O2hkZXYsICYjMzQ7UmVsZWFzZSBibHVldG9vdGggaW50ZXJmYWNlJiMzNDspOwogCi0JLyogQm90aCByZXNldCBwYXRocyBmb2xsb3cgdGhlIHNhbWUgY29udHJhY3Q6IG9uIHN1Y2Nlc3MgdGhleQotCSAqIGRlc3Ryb3kgJiMzOTtkYXRhJiMzOTsgdmlhIGRldmljZV9yZXByb2JlKCkgKGEgZnJlc2ggcHJvYmUgcmUtSU5JVF9XT1JLcwotCSAqIHRoZSBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3QKLQkgKiBOT1QgYmUgY2FsbGVkIG9uIHRoZSBzdWNjZXNzIHBhdGguIE9ubHkgdGhlIEZMUiBwYXRoIGNhbiBmYWlsCi0JICogd2l0aCAmIzM5O2RhdGEmIzM5OyBzdGlsbCBhbGl2ZSwgaW4gd2hpY2ggY2FzZSB3ZSBiYWxhbmNlIHRoZQomIzQzOwkvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGUKJiM0MzsJICogZGVmZXJyZWQgcmUtcHJvYmUgc2NoZWR1bGVkIHdpdGggZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKQomIzQzOwkgKiBkZXN0cm95cyAmIzM5O2RhdGEmIzM5OyBieSByZS1ydW5uaW5nIC5wcm9iZSgpICh3aGljaCByZS1JTklUX1dPUktzIHRoZQomIzQzOwkgKiBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3QgTk9UIGJlCiYjNDM7CSAqIGNhbGxlZCBvbiB0aGUgc3VjY2VzcyBwYXRoLiAmIzM5O2RhdGEmIzM5OyBzdGF5cyBhbGl2ZSB1bnRpbCB0aGUgZGVmZXJyZWQKJiM0MzsJICogZGV0YWNoIHJ1bnM7IGluIHRoaXMgd2luZG93IG5ldyBhY3Rpdml0eSBpcyBmZW5jZWQgYnkKJiM0MzsJICogQlRJTlRFTF9QQ0lFX1JFQ09WRVJZX0lOX1BST0dSRVNTLCB0aGUgbWFza2VkIGludGVycnVwdHMgYW5kIHRoZQomIzQzOwkgKiBkaXNhYmxlZCBkdW1wIHdvcmtlcnMuIE9ubHkgdGhlIEZMUiBwYXRoIGNhbiBmYWlsIHdpdGggbm8KJiM0MzsJICogcmUtcHJvYmUgc2NoZWR1bGVkLCBpbiB3aGljaCBjYXNlIHdlIGJhbGFuY2UgdGhlCiAJICogZGlzYWJsZV93b3JrX3N5bmMoKSBjYWxscyBhYm92ZSBzbyBhIGxhdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgaXMKIAkgKiBub3QgcGVybWFuZW50bHkgYmxvY2tlZC4KIAkgKgpAQCAtMzQ2MCwxMyAmIzQzOzM0NjQsMTIgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2RhdGEtJmd0O2Z3dHJpZ2dlcl93b3JrKTsKIAlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2RhdGEtJmd0O21ib3hfd29yayk7CiAKLQkvKiBDYW5jZWwgcGVuZGluZyByZXNldCB3b3JrLiBTa2lwIG9ubHkgd2hlbiByZW1vdmUoKSBpcyBjYWxsZWQgZnJvbQotCSAqIHdpdGhpbiB0aGUgcmVzZXQgd29yayBpdHNlbGYgKFBMRFIgZGV2aWNlX3JlcHJvYmUgcGF0aCkgdG8gYXZvaWQKLQkgKiBkZWFkbG9jay4gY3VycmVudF93b3JrKCkgcmV0dXJucyB0aGUgd29ya19zdHJ1Y3Qgb2YgdGhlIGNhbGxlciBpZgotCSAqIHdlIGFyZSBpbiBhIHdvcmtxdWV1ZSBjb250ZXh0LgomIzQzOwkvKiBUaGUgZGVmZXJyZWQgcmUtcHJvYmUgdHJpZ2dlcnMgLnJlbW92ZSgpIGZyb20gdGhlIGRyaXZlciBjb3JlJiMzOTtzCiYjNDM7CSAqIHdvcmsgaXRlbSwgbmV2ZXIgZnJvbSByZXNldF93b3JrIGl0c2VsZiwgc28gdGhpcyBubyBsb25nZXIgcnVucwomIzQzOwkgKiBuZXN0ZWQgaW4gcmVzZXRfd29yazsgZGlzYWJsZV93b3JrX3N5bmMoKSBhbHNvIGd1YXJhbnRlZXMgdGhlCiYjNDM7CSAqIHJlc2V0IHdvcmsgaGFzIGZ1bGx5IHJldHVybmVkIGJlZm9yZSAmIzM5O2RhdGEmIzM5OyBpcyBmcmVlZC4KIAkgKi8KLQlpZiAoY3VycmVudF93b3JrKCkgIT0gJmFtcDtkYXRhLSZndDtyZXNldF93b3JrKQotCQlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2RhdGEtJmd0O3Jlc2V0X3dvcmspOwomIzQzOwlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2RhdGEtJmd0O3Jlc2V0X3dvcmspOwogCiAJYnRpbnRlbF9wY2llX2Rpc2FibGVfaW50ZXJydXB0cyhkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuYwppbmRleCBiMTk5OWUxNGFhZGVmLi4zZmRlMWQ1YTVhZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuYwpAQCAtOTkwLDcgJiM0Mzs5OTAsNyBAQCBzdGF0aWMgaW50IGg1X2J0cnRsX3NldHVwKHN0cnVjdCBoNSAqaDUpCiBzdGF0aWMgdm9pZCBoNV9idHJ0bF9vcGVuKHN0cnVjdCBoNSAqaDUpCiB7CiAJLyoKLQkgKiBTaW5jZSBoNV9idHJ0bF9yZXN1bWUoKSBkb2VzIGEgZGV2aWNlX3JlcHJvYmUoKSB0aGUgc3VzcGVuZCBoYW5kbGluZwomIzQzOwkgKiBTaW5jZSBoNV9idHJ0bF9yZXN1bWUoKSBzY2hlZHVsZXMgYSBkZXZpY2UgcmUtcHJvYmUgdGhlIHN1c3BlbmQgaGFuZGxpbmcKIAkgKiBkb25lIGJ5IHRoZSBoY2lfc3VzcGVuZF9ub3RpZmllciBpcyBub3QgbmVjZXNzYXJ5OyBpdCBhY3R1YWxseSBjYXVzZXMKIAkgKiBkZWxheXMgYW5kIGEgYnVuY2ggb2YgZXJyb3JzIHRvIGdldCBsb2dnZWQsIHNvIGRpc2FibGUgaXQuCiAJICovCkBAIC0xMDQ5LDQ2ICYjNDM7MTA0OSwxNSBAQCBzdGF0aWMgaW50IGg1X2J0cnRsX3N1c3BlbmQoc3RydWN0IGg1ICpoNSkKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGg1X2J0cnRsX3JlcHJvYmUgewotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLX07Ci0KLXN0YXRpYyB2b2lkIGg1X2J0cnRsX3JlcHJvYmVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSAqcmVwcm9iZSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSwgd29yayk7Ci0JaW50IHJldDsKLQotCXJldCA9IGRldmljZV9yZXByb2JlKHJlcHJvYmUtJmd0O2Rldik7Ci0JaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRVBST0JFX0RFRkVSKQotCQlkZXZfZXJyKHJlcHJvYmUtJmd0O2RldiwgJiMzNDtSZXByb2JlIGVycm9yICVkXG4mIzM0OywgcmV0KTsKLQotCXB1dF9kZXZpY2UocmVwcm9iZS0mZ3Q7ZGV2KTsKLQlrZnJlZShyZXByb2JlKTsKLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLX0KLQogc3RhdGljIGludCBoNV9idHJ0bF9yZXN1bWUoc3RydWN0IGg1ICpoNSkKIHsKLQlpZiAodGVzdF9iaXQoSDVfV0FLRVVQX0RJU0FCTEUsICZhbXA7aDUtJmd0O2ZsYWdzKSkgewotCQlzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSAqcmVwcm9iZTsKLQotCQlyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpOwotCQlpZiAoIXJlcHJvYmUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwomIzQzOwlpZiAodGVzdF9iaXQoSDVfV0FLRVVQX0RJU0FCTEUsICZhbXA7aDUtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgmYW1wO2g1LSZndDtodS0mZ3Q7c2VyZGV2LSZndDtkZXYsIDApOwogCi0JCUlOSVRfV09SSygmYW1wO3JlcHJvYmUtJmd0O3dvcmssIGg1X2J0cnRsX3JlcHJvYmVfd29ya2VyKTsKLQkJcmVwcm9iZS0mZ3Q7ZGV2ID0gZ2V0X2RldmljZSgmYW1wO2g1LSZndDtodS0mZ3Q7c2VyZGV2LSZndDtkZXYpOwotCQlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmYW1wO3JlcHJvYmUtJmd0O3dvcmspOwotCX0gZWxzZSB7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChoNS0mZ3Q7ZGV2aWNlX3dha2VfZ3BpbywgMSk7CiYjNDM7CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChoNS0mZ3Q7ZGV2aWNlX3dha2VfZ3BpbywgMSk7CiAKLQkJaWYgKHRlc3RfYml0KEg1X0hXX0ZMT1dfQ09OVFJPTCwgJmFtcDtoNS0mZ3Q7ZmxhZ3MpKQotCQkJc2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKGg1LSZndDtodS0mZ3Q7c2VyZGV2LCB0cnVlKTsKLQl9CiYjNDM7CWlmICh0ZXN0X2JpdChINV9IV19GTE9XX0NPTlRST0wsICZhbXA7aDUtJmd0O2ZsYWdzKSkKJiM0MzsJCXNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChoNS0mZ3Q7aHUtJmd0O3NlcmRldiwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jCmluZGV4IDczYWFlMTEyNTA0MjEuLjVhZTczNGNiOTAyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuYwpAQCAtNzgsNDcgJiM0Mzs3OCwxMSBAQCB2b2lkIGl3bF90cmFuc19mcmVlX3Jlc3RhcnRfbGlzdCh2b2lkKQogCX0KIH0KIAotc3RydWN0IGl3bF90cmFuc19yZXByb2JlIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwotfTsKLQotc3RhdGljIHZvaWQgaXdsX3RyYW5zX3JlcHJvYmVfd2soc3RydWN0IHdvcmtfc3RydWN0ICp3aykKLXsKLQlzdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgKnJlcHJvYmU7Ci0KLQlyZXByb2JlID0gY29udGFpbmVyX29mKHdrLCB0eXBlb2YoKnJlcHJvYmUpLCB3b3JrLndvcmspOwotCi0JaWYgKGRldmljZV9yZXByb2JlKHJlcHJvYmUtJmd0O2RldikpCi0JCWRldl9lcnIocmVwcm9iZS0mZ3Q7ZGV2LCAmIzM0O3JlcHJvYmUgZmFpbGVkIVxuJiMzNDspOwotCXB1dF9kZXZpY2UocmVwcm9iZS0mZ3Q7ZGV2KTsKLQlrZnJlZShyZXByb2JlKTsKLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsX3RyYW5zX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBkZWxheV9tcykKIHsKLQlzdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgKnJlcHJvYmU7Ci0KLQkvKgotCSAqIGdldCBhIG1vZHVsZSByZWZlcmVuY2UgdG8gYXZvaWQgZG9pbmcgdGhpcyB3aGlsZSB1bmxvYWRpbmcKLQkgKiBhbnl3YXkgYW5kIHRvIGF2b2lkIHNjaGVkdWxpbmcgYSB3b3JrIHdpdGggY29kZSB0aGF0JiMzOTtzCi0JICogYmVpbmcgcmVtb3ZlZC4KLQkgKi8KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgewotCQlJV0xfRVJSKHRyYW5zLCAmIzM0O01vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAtIGFib3J0XG4mIzM0Oyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpOwotCWlmICghcmVwcm9iZSkgewotCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQkJcmV0dXJuOwotCX0KLQlyZXByb2JlLSZndDtkZXYgPSBnZXRfZGV2aWNlKHRyYW5zLSZndDtkZXYpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cmVwcm9iZS0mZ3Q7d29yaywgaXdsX3RyYW5zX3JlcHJvYmVfd2spOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO3JlcHJvYmUtJmd0O3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTsKJiM0MzsJaWYgKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHRyYW5zLSZndDtkZXYsIGRlbGF5X21zKSkKJiM0MzsJCUlXTF9FUlIodHJhbnMsICYjMzQ7Q291bGQgbm90IHNjaGVkdWxlIHJlcHJvYmVcbiYjMzQ7KTsKIH0KIAogI2RlZmluZSBJV0xfVFJBTlNfUkVTRVRfT0tfVElNRQk3IC8qIHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDdiMmJhZmZkZDJmNTUuLjFjZGQ0MGE2YTQ4ZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTMxMiw2ICYjNDM7MTMxMiw4IEBAIGludCAgX19tdXN0X2NoZWNrIGRldmljZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBfX211c3RfY2hlY2sgZHJpdmVyX2F0dGFjaChjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKIHZvaWQgZGV2aWNlX2luaXRpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBfX211c3RfY2hlY2sgZGV2aWNlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKJiM0MztpbnQgX19tdXN0X2NoZWNrIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpOwogCiBib29sIGRldmljZV9pc19ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCDigJMgaXQgc2VlbXMgdGhleSYjMzk7cmUgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGV5JiMzOTt2ZSBkcm9wcGVkIGN1c3RvbSByZXByb2JlIHNjaGVkdWxpbmcgaW4gZmF2b3Igb2YgdGhpcyBnZW5lcmljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZHJpdmVyIGNvcmUgKGBkcml2ZXJzL2Jhc2UvZGQuY2ApLiBUaGF0JiMzOTtzIGEgY29yZSBjaGFuZ2UsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGdvZXMgdG8gZnV6emluZzsgdGhlIGRyaXZlciBjb3JlIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBhIHByaW1lIHRhcmdldC4KClRoZSBuZXcgZnVuY3Rpb24sIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAsIGlzIHRoZSBrZXksIG9idmlvdXNseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlYWNoYWJpbGl0eSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZyb20gYSBxdWljayBzY2FuLCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgYnRpbnRlbF9wY2llLmNgLCBgaGNpX2g1LmNgLCBhbmQgYGl3bC10cmFucy5jYC4gSG1tLCBgYnRpbnRlbGAgYW5kIGBpd2x3aWZpYCBhcmUgUENJZSBkcml2ZXJzLCBzbyB0aGF0IG1ha2VzIHNlbnNlLCBidXQgYGhjaV9oNWAgaXMgYSBzZXJpYWwgZHJpdmVyLiBDYW4gSSBldmVuIGdldCB0byBgaGNpX2g1YCBmcm9tIFFFTVU/IEFoLCB5ZXMsIGBoY2lfdWFydGAuIE9rYXksIHNvIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgKmlzKiBwb3RlbnRpYWxseSByZWFjaGFibGUgZnJvbSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGFjY2Vzc2liaWxpdHkuIExldCBtZSBjaGVjayBgZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNgIGFuZCBhbHNvIGBkcml2ZXJzL2Jhc2UvZGQuY2AuIEFscmlnaHQsIGxvb2tzIGxpa2UgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBhbnkgZHJpdmVyIGNhbiBjYWxsIGl0LiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIHRoYXQmIzM5O3MgYSBjZW50cmFsIGRyaXZlciBmdW5jdGlvbi4KCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIHRoZSBjb3JlIGZ1bmN0aW9uIGl0c2VsZiwgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpcyBpbiBgZHJpdmVycy9iYXNlL2RkLmNgLCBzbyBpdCYjMzk7cyBhbHdheXMgYnVpbHQuIEZvciBgaGNpX2g1YCwgSSBuZWVkIHRvIGNoZWNrIGZvciBgQlRfSENJVUFSVF8zV0lSRWAuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ2AgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlRfSENJVUFSVF8zV0lSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0xNzU9Y29uZmlnIEJUX0hDSVVBUlRfTExcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTg3OmNvbmZpZyBCVF9IQ0lVQVJUXzNXSVJFXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7VGhyZWUtd2lyZSBVQVJUIChINSkgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERlcGVuZGVuY2llcyBvZiBCVFxfSENJVUFSVFxfM1dJUkUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBCVF9IQ0lVQVJUXzNXSVJFYCBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIFRoYXQmIzM5O3MgYSB2aXRhbCBmaXJzdCBzdGVwLCByaWdodD8gV2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIGlzIGl0IGludGltYXRlbHkgY29ubmVjdGVkIHRvPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBkZXBlbmRlbmNpZXMuIElzIGl0IGRlcGVuZGVudCBvbiBzb21lIHVuZGVybHlpbmcgaGFyZHdhcmUgYWJzdHJhY3Rpb24/IFBlcmhhcHMgc3BlY2lmaWMgVUFSVCBkcml2ZXJzIG9yIHBpbiBjb25maWd1cmF0aW9ucz8gT3IgbWF5YmUgc29tZSBvdGhlciBoaWdoZXItbGV2ZWwgQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrcz8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBhbmQgZmlndXJlIG91dCB0aGUgY2hhaW4gb2YgY29ubmVjdGlvbnMgdGhpcyB0aGluZyBoYXMgd2l0aCB0aGUgd2lkZXIgc3lzdGVtLiBJIGtub3cgdGhpcyB3aWxsIGRpY3RhdGUgdGhlIGJyb2FkZXIgc3lzdGVtIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlRfSENJVUFSVF8zV0lSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0xNzU9Y29uZmlnIEJUX0hDSVVBUlRfTExcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTg3OmNvbmZpZyBCVF9IQ0lVQVJUXzNXSVJFXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7VGhyZWUtd2lyZSBVQVJUIChINSkgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgQ2hlY2twb2ludCoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBCZWZvcmUgSSBkaXZlIGFueSBkZWVwZXIgaW50byB0aGlzLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uLiBJIGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgcHJvY2VlZDsgSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29tcG9uZW50IGlzIGFjdHVhbGx5IGJlaW5nLi4uIHdlbGwsIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBnbyByZWFkIHRoZSBLY29uZmlnIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIGdyb2sgd2hhdCB0aGUgbWFpbnRhaW5lciYjMzk7cyBvcHRpb25zIGFyZS4gV2hhdCB2YXJpYWJsZXMgYW0gSSBnb2luZyB0byBoYXZlIHRvIGNvbnNpZGVyPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHQgIEhDSUxMIChIQ0kgTG93IExldmVsKSBpcyBhIHNlcmlhbCBwcm90b2NvbCBmb3IgY29tbXVuaWNhdGlvblxuIDE4MTpcdFx0ICBiZXR3ZWVuIEJsdWV0b290aCBkZXZpY2UgYW5kIGhvc3QuIFRoaXMgcHJvdG9jb2wgaXMgcmVxdWlyZWQgZm9yXG4gMTgyOlx0XHQgIHNlcmlhbCBCbHVldG9vdGggZGV2aWNlcyB0aGF0IGFyZSBiYXNlZCBvbiBUZXhhcyBJbnN0cnVtZW50cyYjMzk7XG4gMTgzOlx0XHQgIEJSRiBjaGlwcy5cbiAxODQ6XHRcbiAxODU6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEhDSUxMIHByb3RvY29sLlxuIDE4NjpcdFxuIDE4NzpcdGNvbmZpZyBCVF9IQ0lVQVJUXzNXSVJFXG4gMTg4Olx0XHRib29sIFwmIzM0O1RocmVlLXdpcmUgVUFSVCAoSDUpIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAxODk6XHRcdGRlcGVuZHMgb24gQlRfSENJVUFSVFxuIDE5MDpcdFx0ZGVwZW5kcyBvbiBCVF9IQ0lVQVJUX1NFUkRFVlxuIDE5MTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuIDE5MjpcdFx0aGVscFxuIDE5MzpcdFx0ICBUaGUgSENJIFRocmVlLXdpcmUgVUFSVCBUcmFuc3BvcnQgTGF5ZXIgbWFrZXMgaXQgcG9zc2libGUgdG9cbiAxOTQ6XHRcdCAgdXNlciB0aGUgQmx1ZXRvb3RoIEhDSSBvdmVyIGEgc2VyaWFsIHBvcnQgaW50ZXJmYWNlLiBUaGUgSENJXG4gMTk1Olx0XHQgIFRocmVlLXdpcmUgVUFSVCBUcmFuc3BvcnQgTGF5ZXIgYXNzdW1lcyB0aGF0IHRoZSBVQVJUXG4gMTk2Olx0XHQgIGNvbW11bmljYXRpb24gbWF5IGhhdmUgYml0IGVycm9ycywgb3ZlcnJ1biBlcnJvcnMgb3IgYnVyc3RcbiAxOTc6XHRcdCAgZXJyb3JzIGFuZCB0aGVyZWJ5IG1ha2luZyBDVFMvUlRTIGxpbmVzIHVubmVjZXNzYXJ5LlxuIDE5ODpcdFxuIDE5OTpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgVGhyZWUtd2lyZSBVQVJUIHByb3RvY29sLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQmx1ZXRvb3RoIEhDSSBVQVJUIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYEJUX0hDSVVBUlRfM1dJUkVgIGlzIGJ1aWx0IG9uIHRvcCBvZiBgQlRfSENJVUFSVGAsIGFuZCB0aGF0IGluIHR1cm4gcmVsaWVzIG9uIGBCVF9IQ0lVQVJUX1NFUkRFVmAuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkOyBpdCYjMzk7cyBhIGNvbW1vbiBsYXllcmluZyBwYXR0ZXJuIGZvciBCbHVldG9vdGggSENJIFVBUlQgaW1wbGVtZW50YXRpb25zLiBTbywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIGBCVF9IQ0lVQVJUXzNXSVJFYCwgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBgQlRfSENJVUFSVGAgcHJvdmlkZXMsIGFuZCBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGZlYXR1cmUgc2V0IGFuZCBkZXNpZ24gY2hvaWNlcyBhcmUgc29saWQuIFRoYXQgd2F5LCBhbnkgaXNzdWVzIEkgdW5jb3ZlciBjYW4gYmUgcXVpY2tseSB0aWVkIGJhY2sgdG8gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJUX0hDSVVBUlQkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTkzPWNvbmZpZyBCVF9IQ0lCVFNESU9cbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTEwMy1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTA0OmNvbmZpZyBCVF9IQ0lVQVJUXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O0hDSSBVQVJUIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBCVF9IQ0lVQVJUKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYEJUX0hDSVVBUlRgIGNvZGUgYWdhaW4uIFRoaXMgbGlrZWx5IG1lYW5zIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBCbHVldG9vdGggSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBvdmVyIFVBUlQgaXMgYmVpbmcgaW1wbGVtZW50ZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgaXNzdWUgb3IgcGVyaGFwcyBJJiMzOTttIGludGVncmF0aW5nIGEgbmV3IGNvbXBvbmVudCBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIElzIGl0IGZvciBkZWJ1Z2dpbmcgYSBjb25uZWN0aW9uIHByb2JsZW0/IE1heWJlIEkmIzM5O20gb3B0aW1pemluZyBwb3dlciBjb25zdW1wdGlvbi4gVGhlIGFjcm9ueW0gaW1tZWRpYXRlbHkgYnJpbmdzIHVwIGFsbCBzb3J0cyBvZiBwb3RlbnRpYWwgYXZlbnVlcyB0byBleHBsb3JlLiBUaW1lIHRvIGdldCBteSBoZWFkIGJhY2sgaW4gdGhlIGdhbWUgYW5kIHRyYWNlIHRoZSBudWFuY2VzIG9mIHRoaXMgVUFSVC1iYXNlZCBIQ0kuIEkgZXhwZWN0IHRvIGJlIHNjcnV0aW5pemluZyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCBmcmFtaW5nLCBhbmQgZGF0YSBidWZmZXIgbWFuYWdlbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGJ1cmllZCB3aXRoaW4gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFxuIDEwMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgQmx1ZXRvb3RoIFNESU8gZGV2aWNlcyBpbnRvIHRoZVxuIDEwMjpcdFx0ICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUgKGJ0c2RpbykuXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIEJUX0hDSVVBUlRcbiAxMDU6XHRcdHRyaXN0YXRlIFwmIzM0O0hDSSBVQVJUIGRyaXZlclwmIzM0O1xuIDEwNjpcdFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVUyB8fCAhU0VSSUFMX0RFVl9CVVNcbiAxMDc6XHRcdGRlcGVuZHMgb24gTlZNRU0gfHwgIU5WTUVNXG4gMTA4Olx0XHRkZXBlbmRzIG9uIFBPV0VSX1NFUVVFTkNJTkcgfHwgIVBPV0VSX1NFUVVFTkNJTkdcbiAxMDk6XHRcdGRlcGVuZHMgb24gVFRZXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHQgIEJsdWV0b290aCBIQ0kgVUFSVCBkcml2ZXIuXG4gMTEyOlx0XHQgIFRoaXMgZHJpdmVyIGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHVzZSBCbHVldG9vdGggZGV2aWNlcyB3aXRoXG4gMTEzOlx0XHQgIHNlcmlhbCBwb3J0IGludGVyZmFjZS4gWW91IHdpbGwgYWxzbyBuZWVkIHRoaXMgZHJpdmVyIGlmIHlvdSBoYXZlXG4gMTE0Olx0XHQgIFVBUlQgYmFzZWQgQmx1ZXRvb3RoIFBDTUNJQSBhbmQgQ0YgZGV2aWNlcyBsaWtlIFhpcmNvbSBDcmVkaXQgQ2FyZFxuIDExNTpcdFx0ICBhZGFwdGVyIGFuZCBCcmFpbkJveGVzIEJsdWV0b290aCBQQyBDYXJkLlxuIDExNjpcdFxuIDExNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgQmx1ZXRvb3RoIFVBUlQgZGV2aWNlcyBpbnRvIHRoZVxuIDExODpcdFx0ICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUgKGhjaV91YXJ0KS5cbiAxMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYSBTcGVjaWZpYyBDb25maWd1cmF0aW9uIFZhcmlhYmxlKioKCkFscmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEkmIzM5O20gZGVlcCBpbnRvIHRoaXMgYW5hbHlzaXMgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgYSBzbWFsbCBkZXRhaWwgY2FuIHNvbWV0aW1lcyBiZSB0aGUgc291cmNlIG9mIGEgbGFyZ2UgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgVUFSVCBzZXJpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUgYEJUX0hDSVVBUlRfU0VSREVWYCBzZXR0aW5nIGlzIHdoYXQgSSBleHBlY3QgaXQgdG8gYmUuIFRoaXMgaW1wYWN0cyBCbHVldG9vdGggaG9zdCBjb250cm9sbGVyIGludGVyZmFjZSAoSENJKSBVQVJUIHNlcmlhbCBkZXZpY2UuIFRoYXQgaXMgYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhlIHN0YWNrLCBhbmQsIGlmIG5vdCBjb25maWd1cmVkIGNvcnJlY3RseSwgaXQgY291bGQgZXhwbGFpbiBzb21lIHdlaXJkIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCVF9IQ0lVQVJUX1NFUkRFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0xMDQ9Y29uZmlnIEJUX0hDSVVBUlRcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTExOS1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTIwOmNvbmZpZyBCVF9IQ0lVQVJUX1NFUkRFVlxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0xMjEtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZWNvZGluZyBgQlRfSENJVUFSVF9TRVJERVZgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG5vdGF0aW9uIGBCVF9IQ0lVQVJUX1NFUkRFVmAgaW1tZWRpYXRlbHkgc2NyZWFtcyBhIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3Q6IEJsdWV0b290aCwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoSENJKSwgVUFSVCBjb21tdW5pY2F0aW9uLCBhbmQgc2VyaWFsIGRldmljZSBkcml2ZXJzLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBhIEJsdWV0b290aCBjb250cm9sbGVyIChsaWtlbHkgaW50ZWdyYXRlZCBvciBleHRlcm5hbCkgYW5kIHRoZSBob3N0IHN5c3RlbSwgZm9jdXNpbmcgb24gdGhlIHNlcmlhbCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgdXNlZCB0byB0cmFuc21pdCBIQ0kgY29tbWFuZHMgYW5kIGRhdGEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uLCBob3cgaXQgaGFuZGxlcyBmcmFtaW5nIG9mIEhDSSBwYWNrZXRzIG92ZXIgdGhlIFVBUlQsIGZsb3cgY29udHJvbCBtZWNoYW5pc21zIChpZiBhbnkpLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmhhcHMgZXZlbiBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdHMuIFRoZSAmIzM0O1NFUkRFViYjMzQ7IHBvcnRpb24gZGVmaW5pdGVseSBzdWdnZXN0cyBhIHN0YW5kYXJkIExpbnV4IHNlcmlhbCBkZXZpY2UgZHJpdmVyIGludGVyZmFjZSwgbWVhbmluZyBpdCBzaG91bGQgaW50ZWdyYXRlIHJlbGF0aXZlbHkgc2VhbWxlc3NseSB3aXRoIHRoZSBicm9hZGVyIHNlcmlhbCBmcmFtZXdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgaG93IHRoaXMgZHJpdmVyIGhvb2tzIGludG8gdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBzZXJpYWwgZHJpdmVyIGxheWVyIGFuZCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0IHVzZXMgdG8gY3VzdG9taXplIHRoZSBVQVJUIGNvbW11bmljYXRpb24gZm9yIEJsdWV0b290aC4gSG9wZWZ1bGx5LCB0aGUgY29kZSBjb21tZW50cyBhcmUgdGhvcm91Z2ggZW5vdWdoIHRvIGd1aWRlIG1lIHRocm91Z2ggdGhlIGZsb3cgY29udHJvbCBtZWNoYW5pc21zIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHQgIGFkYXB0ZXIgYW5kIEJyYWluQm94ZXMgQmx1ZXRvb3RoIFBDIENhcmQuXG4gMTE2Olx0XG4gMTE3Olx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBCbHVldG9vdGggVUFSVCBkZXZpY2VzIGludG8gdGhlXG4gMTE4Olx0XHQgIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZSAoaGNpX3VhcnQpLlxuIDExOTpcdFxuIDEyMDpcdGNvbmZpZyBCVF9IQ0lVQVJUX1NFUkRFVlxuIDEyMTpcdFx0Ym9vbFxuIDEyMjpcdFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVUyBcdTAwMjZcdTAwMjYgQlRfSENJVUFSVFxuIDEyMzpcdFx0ZGVmYXVsdCB5XG4gMTI0Olx0XG4gMTI1Olx0Y29uZmlnIEJUX0hDSVVBUlRfSDRcbiAxMjY6XHRcdGJvb2wgXCYjMzQ7VUFSVCAoSDQpIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAxMjc6XHRcdGRlcGVuZHMgb24gQlRfSENJVUFSVFxuIDEyODpcdFx0aGVscFxuIDEyOTpcdFx0ICBVQVJUIChINCkgaXMgc2VyaWFsIHByb3RvY29sIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gQmx1ZXRvb3RoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGV2aWNlIFJlcHJvYmUgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGBTRVJJQUxfREVWX0JVU2AganVtcHMgb3V0IGFzIGEga2V5IGVsZW1lbnQuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMuIE5vdywgYWJvdXQgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpdHNlbGYuLi4gSXQgbGl2ZXMgaW4gYGRyaXZlcnMvYmFzZS9kZC5jYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiB0byB0aGUgZHJpdmVyIGNvcmUsIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAsIGVuYWJsaW5nIGEgZGVmZXJyZWQgZGV0YWNoIGFuZCByZS1wcm9iZS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIG1vZGVsLCBhIGRlZmluaXRlIHRhcmdldCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBkZWZpbml0ZWx5IGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgaXQmIzM5O3MgZXhwb3J0ZWQuIEFoLCB5ZXMsIGBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSk7YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IGl0JiMzOTtzIGFjY2Vzc2libGUuIFNpbmNlIGl0JiMzOTtzIGEgY29yZSBmdW5jdGlvbiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aHdoaWxlIHRvIHNwZW5kIHNvbWUgdGltZSBmdXp6aW5nIGl0LgoKSG9sZCBvbiBhIG1pbnV0ZS4uLiBMZXQgbWUgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBSaWdodCwgaXQmIzM5O3MgdXNlZCBpbiBgYnRpbnRlbF9wY2llYCwgYGhjaV9oNWAsIGFuZCBgaXdsd2lmaWAuIGBidGludGVsX3BjaWVgIGFuZCBgaXdsd2lmaWAgYXJlIGJvdGggUENJZSBkcml2ZXJzLiBBbmQgYGhjaV9oNWAgaXMgYSBzZXJpYWwgZHJpdmVyLiBPa2F5LCBjYW4gSSBhY3R1YWxseSByZWFjaCBgaGNpX2g1YCBpbnNpZGUgb2YgUUVNVT8gWWVzLCB2aWEgYGhjaV91YXJ0YCBhbmQgYHNlcmRldmAuIEV4Y2VsbGVudCwgdGhhdOKAmXMgZ3JlYXQgbmV3cyEKClNvLCB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGZvciBmdXp6aW5nIHRoaXMgd291bGQgYmUgdG8gZW5hYmxlIGBCVF9IQ0lVQVJUYCwgYEJUX0hDSVVBUlRfM1dJUkVgLCBhbmQsIG9mIGNvdXJzZSwgYFNFUklBTF9ERVZfQlVTYC4gSnVzdCB0byBiZSBzYWZlLCBsZXQgbWUgZG91YmxlLWNoZWNrIGBTRVJJQUxfREVWX0JVU2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFUklBTF9ERVZfQlVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWctNC0jXG5kcml2ZXJzL3R0eS9zZXJkZXYvS2NvbmZpZzo1Om1lbnVjb25maWcgU0VSSUFMX0RFVl9CVVNcbmRyaXZlcnMvdHR5L3NlcmRldi9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtTZXJpYWwgZGV2aWNlIGJ1c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4MwoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFByb2JlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgLiBUaGF0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgYSBrZXkgZm9jdXMuIFJpZ2h0LCBmaXJzdCB0aGluZyBpcyB0byBhZGQgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCYjMzk7cyBkb25lLgoKTm93LCBmb3IgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgaGFyZHdhcmUgaXMgZW5hYmxlZCB0byB3b3JrIHdpdGggdGhpcy4gSSYjMzk7bGwgYWRkIGBCVF9IQ0lVQVJUYCwgYEJUX0hDSVVBUlRfM1dJUkVgLCBhbmQgYFNFUklBTF9ERVZfQlVTYCB0byBgRW5hYmxlQ29uZmlnc2AgLiBQZXJmZWN0LCB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGNvbW1zLgoKTm93LCBJIGp1c3QgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIGlzIHRoZSAqb25seSogY29yZSB0aGluZyBiZWluZyBhZGRlZCBoZXJlLiBHb3R0YSBiZSBwcmVjaXNlLiBDaGVja2luZy4uLiB5ZXAsIGxvb2tzIGxpa2UgSSYjMzk7dmUgYWxzbyBnb3QgYGRldmljZV9yZXByb2JlX3dvcmtfZm5gLiBNYWtlcyBzZW5zZSAtIGl04oCZcyBwcm9iYWJseSB0aGUgd29ya2VyIHRoYXQmIzM5O3MgcnVuIGFzIGEgcmVzdWx0IG9mIHRoZSBzY2hlZHVsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSB1bmRlcnN0b29kIGJ5IHRoZSBzeXN0ZW0uIEFuZCBmb3IgdGhhdCByZWFzb24sIGJvdGggYXJlIGFsc28gZ29pbmcgdG8gYEZvY3VzU3ltYm9sc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVF9IQ0lVQVJUJiMzNDssCiAgICAmIzM0O0JUX0hDSVVBUlRfM1dJUkUmIzM0OywKICAgICYjMzQ7U0VSSUFMX0RFVl9CVVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSYjMzQ7LAogICAgJiMzNDtkZXZpY2VfcmVwcm9iZV93b3JrX2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCB0byB0aGUgZHJpdmVyIGNvcmUsIHdoaWNoIGFsbG93cyBzY2hlZHVsaW5nIGEgZGVmZXJyZWQgZGV0YWNoIGFuZCByZS1wcm9iZSBvZiBhIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGRyaXZlciBtb2RlbCB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQuIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGJ5IHNldmVyYWwgZHJpdmVycywgaW5jbHVkaW5nIHRoZSBgaGNpX2g1YCBzZXJpYWwgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUX0hDSVVBUlQmIzM0OywKICAgICYjMzQ7QlRfSENJVUFSVF8zV0lSRSYjMzQ7LAogICAgJiMzNDtTRVJJQUxfREVWX0JVUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9zY2hlZHVsZV9yZXByb2JlJiMzNDssCiAgICAmIzM0O2RldmljZV9yZXByb2JlX3dvcmtfZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHRoZSBkcml2ZXIgY29yZSwgd2hpY2ggYWxsb3dzIHNjaGVkdWxpbmcgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIGEgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZHJpdmVyIG1vZGVsIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZC4gVGhlIGZ1bmN0aW9uIGlzIHVzZWQgYnkgc2V2ZXJhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGBoY2lfaDVgIHNlcmlhbCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gc3RhbmRhcmRpc2UgZGVmZXJyZWQgZGV2aWNlIHJlcHJvYmluZyBhY3Jvc3MgZHJpdmVycywgcmVwbGFjaW5nIGN1c3RvbSB3b3JrIGl0ZW1zIGluIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYC4gSXQgYWxzbyBhZGRzIGEgYHNodXRkb3duX2RvbmVgIGZsYWcgdG8gcHJldmVudCByZXByb2JpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtIHNodXRkb3duLiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIChlLmcuLCBgc3RydWN0IGRldmljZV9yZXByb2JlYCB2aWEgYGt6YWxsb2Nfb2JqYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCBrZXJuZWwgZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkcml2ZXIgYmluZGluZy91bmJpbmRpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG5ldHdvcmsgcGFja2V0IHBhcnNpbmcsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlKSwgbG9ja2luZyAoZGVhZGxvY2tzKSwgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZjY3M2ZlZjc0ODZhNjk4Yjk0Y2YyOTFkNjU4YmVkYTBlYTU1NzRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDM6MjE6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYmFzZS5oIGIvZHJpdmVycy9iYXNlL2Jhc2UuaAppbmRleCBhNWI3YWJjMTBmZjAyLi42MjM0ZTM3ZGU3ZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYmFzZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKQEAgLTEwNiw2ICYjNDM7MTA2LDEwIEBAIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZSB7CiAgKiBAZGVhZDogVGhpcyBkZXZpY2UgaXMgY3VycmVudGx5IGVpdGhlciBpbiB0aGUgcHJvY2VzcyBvZiBvciBoYXMgYmVlbgogICoJICByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQW55IGFzeW5jaHJvbm91cyBldmVudHMgc2NoZWR1bGVkIGZvciB0aGlzCiAgKgkgIGRldmljZSBzaG91bGQgZXhpdCB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uLgomIzQzOyAqIEBzaHV0ZG93bl9kb25lOiBTZXQgb25jZSBkZXZpY2Vfc2h1dGRvd24oKSBoYXMgcmVhY2hlZCB0aGlzIGRldmljZSwgdW5kZXIKJiM0MzsgKgkgIHRoZSBkZXZpY2UgbG9jaywgYmVmb3JlIGFueSBzaHV0ZG93biBjYWxsYmFjayBydW5zLiBSZWFkIHVuZGVyIHRoZQomIzQzOyAqCSAgZGV2aWNlIGxvY2suIEEgZGVmZXJyZWQgcmUtcHJvYmUgc2NoZWR1bGVkIHdpdGgKJiM0MzsgKgkgIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCkgbXVzdCBub3QgZGV0YWNoIHRoZSBkZXZpY2UgYW55bW9yZS4KICAqCiAgKiBOb3RoaW5nIG91dHNpZGUgb2YgdGhlIGRyaXZlciBjb3JlIHNob3VsZCBldmVyIHRvdWNoIHRoZXNlIGZpZWxkcy4KICAqLwpAQCAtMTIwLDYgJiM0MzsxMjQsNyBAQCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgewogCWNoYXIgKmRlZmVycmVkX3Byb2JlX3JlYXNvbjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiAJdTggZGVhZDoxOwomIzQzOwl1OCBzaHV0ZG93bl9kb25lOjE7CiB9OwogI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQob2JqKQlcCiAJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCA0ZDAyNjY4Mjk0NGYyLi44YTdkYmU0ZTgzNjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTQ5MDYsNiAmIzQzOzQ5MDYsOSBAQCB2b2lkIGRldmljZV9zaHV0ZG93bih2b2lkKQogCQkJZGV2aWNlX2xvY2socGFyZW50KTsKIAkJZGV2aWNlX2xvY2soZGV2KTsKIAomIzQzOwkJaWYgKGRldi0mZ3Q7cCkKJiM0MzsJCQlkZXYtJmd0O3AtJmd0O3NodXRkb3duX2RvbmUgPSB0cnVlOwomIzQzOwogCQkvKiBEb24mIzM5O3QgYWxsb3cgYW55IG1vcmUgcnVudGltZSBzdXNwZW5kcyAqLwogCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOwogCQlwbV9ydW50aW1lX2JhcnJpZXIoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggNjBjMDA1MjIzODQ0ZC4uZDc2NWUxYWU1NjE0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTE0MzYsMyAmIzQzOzE0MzYsMTA1IEBAIHZvaWQgZHJpdmVyX2RldGFjaChjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogCQlwdXRfZGV2aWNlKGRldik7CiAJfQogfQomIzQzOwomIzQzO3N0cnVjdCBkZXZpY2VfcmVwcm9iZSB7CiYjNDM7CXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmljZV9yZXByb2JlLAomIzQzOwkJCQkJCSB3b3JrLndvcmspOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBycC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBycC0mZ3Q7cGFyZW50OwomIzQzOwlib29sIGRldGFjaGVkID0gZmFsc2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CV9fZGV2aWNlX2RyaXZlcl9sb2NrKGRldiwgcGFyZW50KTsKJiM0MzsJLyoKJiM0MzsJICogcnAtJmd0O2RydiBpcyBvbmx5IGV2ZXIgY29tcGFyZWQsIG5ldmVyIGRlcmVmZXJlbmNlZDogdGhlIGRyaXZlciBpdAomIzQzOwkgKiBwb2ludHMgdG8gbWF5IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGJ5IG5vdy4KJiM0MzsJICovCiYjNDM7CWlmICghZGV2LSZndDtwLSZndDtkZWFkICZhbXA7JmFtcDsgIWRldi0mZ3Q7cC0mZ3Q7c2h1dGRvd25fZG9uZSAmYW1wOyZhbXA7CiYjNDM7CSAgICBkZXYtJmd0O2RyaXZlciAmYW1wOyZhbXA7IGRldi0mZ3Q7ZHJpdmVyID09IHJwLSZndDtkcnYpIHsKJiM0MzsJCV9fZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldiwgcGFyZW50KTsKJiM0MzsJCWRldGFjaGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwlfX2RldmljZV9kcml2ZXJfdW5sb2NrKGRldiwgcGFyZW50KTsKJiM0MzsKJiM0MzsJaWYgKGRldGFjaGVkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogZGV2aWNlX2F0dGFjaCgpIG11c3QgcnVuIHdpdGggdGhlIHBhcmVudCBsb2NrZWQgb24gYnVzZXMKJiM0MzsJCSAqIHRoYXQgcmVxdWlyZSBpdCwgbWlycm9yaW5nIGJ1c19yZXNjYW5fZGV2aWNlc19oZWxwZXIoKS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHBhcmVudCAmYW1wOyZhbXA7IGRldi0mZ3Q7YnVzLSZndDtuZWVkX3BhcmVudF9sb2NrKQomIzQzOwkJCWRldmljZV9sb2NrKHBhcmVudCk7CiYjNDM7CQlyZXQgPSBkZXZpY2VfYXR0YWNoKGRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICAmIzM0O3JlLXByb2JlIGZhaWxlZCwgZGV2aWNlIGxlZnQgdW5ib3VuZFxuJiMzNDspOwomIzQzOwkJaWYgKHBhcmVudCAmYW1wOyZhbXA7IGRldi0mZ3Q7YnVzLSZndDtuZWVkX3BhcmVudF9sb2NrKQomIzQzOwkJCWRldmljZV91bmxvY2socGFyZW50KTsKJiM0MzsJfQomIzQzOwomIzQzOwlwdXRfZGV2aWNlKGRldik7CiYjNDM7CXB1dF9kZXZpY2UocGFyZW50KTsKJiM0MzsJa2ZyZWUocnApOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSAtIHNjaGVkdWxlIGEgZGVmZXJyZWQgZGV0YWNoIGFuZCByZS1wcm9iZQomIzQzOyAqIEBkZXY6IGRldmljZSB0byBkZXRhY2ggYW5kIHJlLXByb2JlCiYjNDM7ICogQGRlbGF5X21zOiBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSByZS1wcm9iZSBydW5zCiYjNDM7ICoKJiM0MzsgKiBTY2hlZHVsZSBhIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgQGRldiBhZnRlciBAZGVsYXlfbXMgbWlsbGlzZWNvbmRzLgomIzQzOyAqIFRoZSByZS1wcm9iZSBpcyBza2lwcGVkIGlmLCBieSB0aGUgdGltZSB0aGUgc2NoZWR1bGVkIHdvcmsgcnVucywgdGhlCiYjNDM7ICogZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQsIHRoZSBzeXN0ZW0gc2h1dGRvd24gc2VxdWVuY2UgaGFzIHJlYWNoZWQgdGhlCiYjNDM7ICogZGV2aWNlLCBvciBAZGV2IGlzIG5vIGxvbmdlciBib3VuZCB0byB0aGUgZHJpdmVyIHRoYXQgd2FzIGJvdW5kIGF0CiYjNDM7ICogc2NoZWR1bGluZyB0aW1lLiBJbiBwYXJ0aWN1bGFyIGFuIGFkbWluaXN0cmF0aXZlIHVuYmluZCBpcyBuZXZlcgomIzQzOyAqIHVuZG9uZSBieSBhIHN0YWxlIHJlLXByb2JlLgomIzQzOyAqCiYjNDM7ICogVGhlIHdvcmsgZnVuY3Rpb24gaXMgYnVpbHQtaW4gdGV4dCwgc28gdGhlIGJvdW5kIGRyaXZlciBtYXkgY2FsbCB0aGlzCiYjNDM7ICogZnJvbSBpdHMgb3duIGNvZGUgd2l0aG91dCBob2xkaW5nIGEgbW9kdWxlIHJlZmVyZW5jZS4gSWYgdGhlIGRyaXZlcgomIzQzOyAqIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdvcmsgcnVucywgZHJpdmVyIHVucmVnaXN0cmF0aW9uIHVuYmluZHMKJiM0MzsgKiBAZGV2IGZpcnN0IGFuZCB0aGUgc2NoZWR1bGVkIHdvcmsgZG9lcyBub3RoaW5nLgomIzQzOyAqCiYjNDM7ICogTXVsdGlwbGUgcGVuZGluZyByZS1wcm9iZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhcmUgaW5kaXZpZHVhbGx5IHNhZmU7CiYjNDM7ICogYSBjYWxsZXIgdGhhdCB3YW50cyBhdCBtb3N0IG9uZSBwZW5kaW5nIHJlLXByb2JlIG11c3QgZ2F0ZSBzY2hlZHVsaW5nCiYjNDM7ICogaXRzZWxmLgomIzQzOyAqCiYjNDM7ICogTWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBkZXYgaXMgbm90IGEgcmVnaXN0ZXJlZCBkZXZpY2UKJiM0MzsgKiBib3VuZCB0byBhIGRyaXZlciwgLUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5X21zKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9yZXByb2JlICpycDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2J1cyB8fCAhZGV2LSZndDtwIHx8ICFkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghZGV2LSZndDtkcml2ZXIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcnAgPSBremFsbG9jX29iaigqcnApOwomIzQzOwlpZiAoIXJwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJwLSZndDtkZXYgPSBnZXRfZGV2aWNlKGRldik7CiYjNDM7CS8qCiYjNDM7CSAqIFBpbiB0aGUgcGFyZW50IHRvbzogdGhlIHdvcmsgbG9ja3MgaXQsIGFuZCBhbiB1bnJlZ2lzdGVyIG9mIEBkZXYKJiM0MzsJICogd291bGQgb3RoZXJ3aXNlIGRyb3AgdGhlIGxhc3QgcmVmZXJlbmNlIGJlZm9yZSB0aGUgd29yayBydW5zLgomIzQzOwkgKi8KJiM0MzsJcnAtJmd0O3BhcmVudCA9IGdldF9kZXZpY2UoZGV2LSZndDtwYXJlbnQpOwomIzQzOwlycC0mZ3Q7ZHJ2ID0gUkVBRF9PTkNFKGRldi0mZ3Q7ZHJpdmVyKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtycC0mZ3Q7d29yaywgZGV2aWNlX3JlcHJvYmVfd29ya19mbik7CiYjNDM7CXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCAmYW1wO3JwLSZndDt3b3JrLAomIzQzOwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMKaW5kZXggYmFhNjIxYjNmZWY5My4uMjliZTA1ZDQxNDI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMKQEAgLTMwMTIsNyAmIzQzOzMwMTIsNyBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSkKIAkgKiBCVCBuZWVkcyBwY2lfc2F2ZV9zdGF0ZSgpL3BjaV9yZXN0b3JlX3N0YXRlKCkgYmVjYXVzZSB0aGUgQlQgZHJpdmVyCiAJICogaXMgc3RpbGwgcGFydGlhbGx5IGF0dGFjaGVkIHdoZW4gdGhlIF9QUlIgcnVucyAoaXQgaGFzbiYjMzk7dCBiZWVuIHVuYm91bmQgeWV0KS4KIAkgKiBUaGUgUENJIGRldmljZSBuZWVkcyB0byByZW1haW4gbWluaW1hbGx5IGZ1bmN0aW9uYWwgc28gdGhhdAotCSAqIGRldmljZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2KSBjYW4gd29yayBhZnRlcndhcmQKJiM0MzsJICogdGhlIGRlZmVycmVkIHJlLXByb2JlIG9mIHRoZSBCVCBkZXZpY2UgY2FuIHdvcmsgYWZ0ZXJ3YXJkCiAJICovCiAJcmV0ID0gYnRpbnRlbF9wY2llX2FjcGlfcmVzZXRfbWV0aG9kKGRhdGEpOwogCkBAIC0zMDIzLDE0ICYjNDM7MzAyMywxNiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSkKIAl9CiAKIAlpZiAoIXJldCkgewotCQlpZiAoZGV2aWNlX3JlcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYpKQotCQkJQlRfRVJSKCYjMzQ7QlQgcmVwcm9iZSBmYWlsZWQgZm9yIEJERjolcyYjMzQ7LCBwY2lfbmFtZShwZGV2KSk7CiYjNDM7CQlpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYsIDApKQomIzQzOwkJCUJUX0VSUigmIzM0O0JUIHJlcHJvYmUgc2NoZWR1bGluZyBmYWlsZWQgZm9yIEJERjolcyYjMzQ7LAomIzQzOwkJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJfQogfQogCiAvKgotICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGUgUENJCi0gKiBjb3JlIHZpYSBkZXZpY2VfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCYjMzk7cyBjb250cmFjdC4KJiM0MzsgKiBJc3N1ZSBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IGFuZCBoYW5kIHRlYXJkb3duL3JlLWluaXQgb2ZmIHRvIHRoZQomIzQzOyAqIGRyaXZlciBjb3JlIHZpYSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCYjMzk7cwomIzQzOyAqIGNvbnRyYWN0LgogICoKICAqIENhbGxlciBtdXN0IGhvbGQgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpIGFuZCBtdXN0IGhhdmUgYWxyZWFkeQogICogZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgZHJhaW5lZCBib3RoIHJ4X3dvcmsgYW5kIGNvcmVkdW1wX3dvcmsuCkBAIC0zMDUyLDE0ICYjNDM7MzA1NCwxMiBAQCBzdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9wZXJmb3JtX2ZscihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpCiAJCXJldHVybiBlcnI7CiAJfQogCi0JLyogZGV2aWNlX3JlcHJvYmUoKSBhbHdheXMgZGV0YWNoZXMgdGhlIGRyaXZlciBmaXJzdCAocnVubmluZwotCSAqIC5yZW1vdmUoKSwgd2hpY2ggZnJlZXMgJiMzOTtkYXRhJiMzOTspOyBhbnkgcmUtcHJvYmUgZmFpbHVyZSBsZWF2ZXMgdGhlCi0JICogZGV2aWNlIHVuYm91bmQgYnV0ICYjMzk7ZGF0YSYjMzk7IGlzIGFscmVhZHkgZ29uZSwgc28ganVzdCBsb2cgaXQuCi0JICovCi0JaWYgKGRldmljZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2KSkKLQkJQlRfRVJSKCYjMzQ7QlQgcmVwcm9iZSBmYWlsZWQgZm9yIEJERjolcyYjMzQ7LCBwY2lfbmFtZShwZGV2KSk7CiYjNDM7CWVyciA9IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2LCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCUJUX0VSUigmIzM0O0JUIHJlcHJvYmUgc2NoZWR1bGluZyBmYWlsZWQgZm9yIEJERjolcyYjMzQ7LAomIzQzOwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKQpAQCAtMzA5MCwxMSAmIzQzOzMwOTAsMTUgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aykKIAogCWJ0X2Rldl9kYmcoZGF0YS0mZ3Q7aGRldiwgJiMzNDtSZWxlYXNlIGJsdWV0b290aCBpbnRlcmZhY2UmIzM0Oyk7CiAKLQkvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGV5Ci0JICogZGVzdHJveSAmIzM5O2RhdGEmIzM5OyB2aWEgZGV2aWNlX3JlcHJvYmUoKSAoYSBmcmVzaCBwcm9iZSByZS1JTklUX1dPUktzCi0JICogdGhlIGR1bXAgd29ya2VycyB3aXRoIGRpc2FibGUgY291bnQgMCksIHNvIGVuYWJsZV93b3JrKCkgbXVzdAotCSAqIE5PVCBiZSBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwKLQkgKiB3aXRoICYjMzk7ZGF0YSYjMzk7IHN0aWxsIGFsaXZlLCBpbiB3aGljaCBjYXNlIHdlIGJhbGFuY2UgdGhlCiYjNDM7CS8qIEJvdGggcmVzZXQgcGF0aHMgZm9sbG93IHRoZSBzYW1lIGNvbnRyYWN0OiBvbiBzdWNjZXNzIHRoZQomIzQzOwkgKiBkZWZlcnJlZCByZS1wcm9iZSBzY2hlZHVsZWQgd2l0aCBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpCiYjNDM7CSAqIGRlc3Ryb3lzICYjMzk7ZGF0YSYjMzk7IGJ5IHJlLXJ1bm5pbmcgLnByb2JlKCkgKHdoaWNoIHJlLUlOSVRfV09SS3MgdGhlCiYjNDM7CSAqIGR1bXAgd29ya2VycyB3aXRoIGRpc2FibGUgY291bnQgMCksIHNvIGVuYWJsZV93b3JrKCkgbXVzdCBOT1QgYmUKJiM0MzsJICogY2FsbGVkIG9uIHRoZSBzdWNjZXNzIHBhdGguICYjMzk7ZGF0YSYjMzk7IHN0YXlzIGFsaXZlIHVudGlsIHRoZSBkZWZlcnJlZAomIzQzOwkgKiBkZXRhY2ggcnVuczsgaW4gdGhpcyB3aW5kb3cgbmV3IGFjdGl2aXR5IGlzIGZlbmNlZCBieQomIzQzOwkgKiBCVElOVEVMX1BDSUVfUkVDT1ZFUllfSU5fUFJPR1JFU1MsIHRoZSBtYXNrZWQgaW50ZXJydXB0cyBhbmQgdGhlCiYjNDM7CSAqIGRpc2FibGVkIGR1bXAgd29ya2Vycy4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwgd2l0aCBubwomIzQzOwkgKiByZS1wcm9iZSBzY2hlZHVsZWQsIGluIHdoaWNoIGNhc2Ugd2UgYmFsYW5jZSB0aGUKIAkgKiBkaXNhYmxlX3dvcmtfc3luYygpIGNhbGxzIGFib3ZlIHNvIGEgbGF0ZXIgc3VjY2Vzc2Z1bCByZXNldCBpcwogCSAqIG5vdCBwZXJtYW5lbnRseSBibG9ja2VkLgogCSAqCkBAIC0zNDYwLDEzICYjNDM7MzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWRpc2FibGVfd29ya19zeW5jKCZhbXA7ZGF0YS0mZ3Q7Znd0cmlnZ2VyX3dvcmspOwogCWRpc2FibGVfd29ya19zeW5jKCZhbXA7ZGF0YS0mZ3Q7bWJveF93b3JrKTsKIAotCS8qIENhbmNlbCBwZW5kaW5nIHJlc2V0IHdvcmsuIFNraXAgb25seSB3aGVuIHJlbW92ZSgpIGlzIGNhbGxlZCBmcm9tCi0JICogd2l0aGluIHRoZSByZXNldCB3b3JrIGl0c2VsZiAoUExEUiBkZXZpY2VfcmVwcm9iZSBwYXRoKSB0byBhdm9pZAotCSAqIGRlYWRsb2NrLiBjdXJyZW50X3dvcmsoKSByZXR1cm5zIHRoZSB3b3JrX3N0cnVjdCBvZiB0aGUgY2FsbGVyIGlmCi0JICogd2UgYXJlIGluIGEgd29ya3F1ZXVlIGNvbnRleHQuCiYjNDM7CS8qIFRoZSBkZWZlcnJlZCByZS1wcm9iZSB0cmlnZ2VycyAucmVtb3ZlKCkgZnJvbSB0aGUgZHJpdmVyIGNvcmUmIzM5O3MKJiM0MzsJICogd29yayBpdGVtLCBuZXZlciBmcm9tIHJlc2V0X3dvcmsgaXRzZWxmLCBzbyB0aGlzIG5vIGxvbmdlciBydW5zCiYjNDM7CSAqIG5lc3RlZCBpbiByZXNldF93b3JrOyBkaXNhYmxlX3dvcmtfc3luYygpIGFsc28gZ3VhcmFudGVlcyB0aGUKJiM0MzsJICogcmVzZXQgd29yayBoYXMgZnVsbHkgcmV0dXJuZWQgYmVmb3JlICYjMzk7ZGF0YSYjMzk7IGlzIGZyZWVkLgogCSAqLwotCWlmIChjdXJyZW50X3dvcmsoKSAhPSAmYW1wO2RhdGEtJmd0O3Jlc2V0X3dvcmspCi0JCWRpc2FibGVfd29ya19zeW5jKCZhbXA7ZGF0YS0mZ3Q7cmVzZXRfd29yayk7CiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7ZGF0YS0mZ3Q7cmVzZXRfd29yayk7CiAKIAlidGludGVsX3BjaWVfZGlzYWJsZV9pbnRlcnJ1cHRzKGRhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jCmluZGV4IGIxOTk5ZTE0YWFkZWYuLjNmZGUxZDVhNWFlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jCkBAIC05OTAsNyAmIzQzOzk5MCw3IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc2V0dXAoc3RydWN0IGg1ICpoNSkKIHN0YXRpYyB2b2lkIGg1X2J0cnRsX29wZW4oc3RydWN0IGg1ICpoNSkKIHsKIAkvKgotCSAqIFNpbmNlIGg1X2J0cnRsX3Jlc3VtZSgpIGRvZXMgYSBkZXZpY2VfcmVwcm9iZSgpIHRoZSBzdXNwZW5kIGhhbmRsaW5nCiYjNDM7CSAqIFNpbmNlIGg1X2J0cnRsX3Jlc3VtZSgpIHNjaGVkdWxlcyBhIGRldmljZSByZS1wcm9iZSB0aGUgc3VzcGVuZCBoYW5kbGluZwogCSAqIGRvbmUgYnkgdGhlIGhjaV9zdXNwZW5kX25vdGlmaWVyIGlzIG5vdCBuZWNlc3Nhcnk7IGl0IGFjdHVhbGx5IGNhdXNlcwogCSAqIGRlbGF5cyBhbmQgYSBidW5jaCBvZiBlcnJvcnMgdG8gZ2V0IGxvZ2dlZCwgc28gZGlzYWJsZSBpdC4KIAkgKi8KQEAgLTEwNDksNDYgJiM0MzsxMDQ5LDE1IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc3VzcGVuZChzdHJ1Y3QgaDUgKmg1KQogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSB7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotfTsKLQotc3RhdGljIHZvaWQgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlLCB3b3JrKTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZGV2aWNlX3JlcHJvYmUocmVwcm9iZS0mZ3Q7ZGV2KTsKLQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FUFJPQkVfREVGRVIpCi0JCWRldl9lcnIocmVwcm9iZS0mZ3Q7ZGV2LCAmIzM0O1JlcHJvYmUgZXJyb3IgJWRcbiYjMzQ7LCByZXQpOwotCi0JcHV0X2RldmljZShyZXByb2JlLSZndDtkZXYpOwotCWtmcmVlKHJlcHJvYmUpOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotfQotCiBzdGF0aWMgaW50IGg1X2J0cnRsX3Jlc3VtZShzdHJ1Y3QgaDUgKmg1KQogewotCWlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgJmFtcDtoNS0mZ3Q7ZmxhZ3MpKSB7Ci0JCXN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlOwotCi0JCXJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7Ci0JCWlmICghcmVwcm9iZSkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiYjNDM7CWlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgJmFtcDtoNS0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCZhbXA7aDUtJmd0O2h1LSZndDtzZXJkZXYtJmd0O2RldiwgMCk7CiAKLQkJSU5JVF9XT1JLKCZhbXA7cmVwcm9iZS0mZ3Q7d29yaywgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIpOwotCQlyZXByb2JlLSZndDtkZXYgPSBnZXRfZGV2aWNlKCZhbXA7aDUtJmd0O2h1LSZndDtzZXJkZXYtJmd0O2Rldik7Ci0JCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7cmVwcm9iZS0mZ3Q7d29yayk7Ci0JfSBlbHNlIHsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGg1LSZndDtkZXZpY2Vfd2FrZV9ncGlvLCAxKTsKJiM0MzsJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGg1LSZndDtkZXZpY2Vfd2FrZV9ncGlvLCAxKTsKIAotCQlpZiAodGVzdF9iaXQoSDVfSFdfRkxPV19DT05UUk9MLCAmYW1wO2g1LSZndDtmbGFncykpCi0JCQlzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woaDUtJmd0O2h1LSZndDtzZXJkZXYsIHRydWUpOwotCX0KJiM0MzsJaWYgKHRlc3RfYml0KEg1X0hXX0ZMT1dfQ09OVFJPTCwgJmFtcDtoNS0mZ3Q7ZmxhZ3MpKQomIzQzOwkJc2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKGg1LSZndDtodS0mZ3Q7c2VyZGV2LCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmMKaW5kZXggNzNhYWUxMTI1MDQyMS4uNWFlNzM0Y2I5MDI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jCkBAIC03OCw0NyAmIzQzOzc4LDExIEBAIHZvaWQgaXdsX3RyYW5zX2ZyZWVfcmVzdGFydF9saXN0KHZvaWQpCiAJfQogfQogCi1zdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgewotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7Ci19OwotCi1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcmVwcm9iZV93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKQotewotCXN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTsKLQotCXJlcHJvYmUgPSBjb250YWluZXJfb2Yod2ssIHR5cGVvZigqcmVwcm9iZSksIHdvcmsud29yayk7Ci0KLQlpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS0mZ3Q7ZGV2KSkKLQkJZGV2X2VycihyZXByb2JlLSZndDtkZXYsICYjMzQ7cmVwcm9iZSBmYWlsZWQhXG4mIzM0Oyk7Ci0JcHV0X2RldmljZShyZXByb2JlLSZndDtkZXYpOwotCWtmcmVlKHJlcHJvYmUpOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfdHJhbnNfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlbGF5X21zKQogewotCXN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTsKLQotCS8qCi0JICogZ2V0IGEgbW9kdWxlIHJlZmVyZW5jZSB0byBhdm9pZCBkb2luZyB0aGlzIHdoaWxlIHVubG9hZGluZwotCSAqIGFueXdheSBhbmQgdG8gYXZvaWQgc2NoZWR1bGluZyBhIHdvcmsgd2l0aCBjb2RlIHRoYXQmIzM5O3MKLQkgKiBiZWluZyByZW1vdmVkLgotCSAqLwotCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7Ci0JCUlXTF9FUlIodHJhbnMsICYjMzQ7TW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkIC0gYWJvcnRcbiYjMzQ7KTsKLQkJcmV0dXJuOwotCX0KLQotCXJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7Ci0JaWYgKCFyZXByb2JlKSB7Ci0JCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCQlyZXR1cm47Ci0JfQotCXJlcHJvYmUtJmd0O2RldiA9IGdldF9kZXZpY2UodHJhbnMtJmd0O2Rldik7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtyZXByb2JlLSZndDt3b3JrLCBpd2xfdHJhbnNfcmVwcm9iZV93ayk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7cmVwcm9iZS0mZ3Q7d29yaywgbXNlY3NfdG9famlmZmllcyhkZWxheV9tcykpOwomIzQzOwlpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUodHJhbnMtJmd0O2RldiwgZGVsYXlfbXMpKQomIzQzOwkJSVdMX0VSUih0cmFucywgJiMzNDtDb3VsZCBub3Qgc2NoZWR1bGUgcmVwcm9iZVxuJiMzNDspOwogfQogCiAjZGVmaW5lIElXTF9UUkFOU19SRVNFVF9PS19USU1FCTcgLyogc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggN2IyYmFmZmRkMmY1NS4uMWNkZDQwYTZhNDhkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xMzEyLDYgJiM0MzsxMzEyLDggQEAgaW50ICBfX211c3RfY2hlY2sgZGV2aWNlX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOwogdm9pZCBkZXZpY2VfaW5pdGlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogaW50IF9fbXVzdF9jaGVjayBkZXZpY2VfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwomIzQzO2ludCBfX211c3RfY2hlY2sgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBkZWxheV9tcyk7CiAKIGJvb2wgZGV2aWNlX2lzX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzUKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgUmVwcm9iZSBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yIHRvIGNvbnNvbGlkYXRlIGRldmljZSByZXByb2JpbmcgbG9naWMuIFRoZSBtYWluIGdvYWwgaGVyZSBpcyB0byByZXBsYWNlIGN1c3RvbSByZXByb2JlIG1lY2hhbmlzbXMgaW4gc2V2ZXJhbCBkcml2ZXJzIChsaWtlIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYCkgd2l0aCBhIHNpbmdsZSwgdW5pZmllZCBmdW5jdGlvbiwgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpbiBgZHJpdmVycy9iYXNlL2RkLmNgLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBzaHV0IGRvd24uCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGtlcm5lbCBpbnRlcm5hbHMsIHRoZSBkZXNjcmlwdGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIHByaW1hcmlseSBhYm91dCBjbGVhbnVwIGFuZCByYWNlIGNvbmRpdGlvbiBmaXhpbmcsIGVzcGVjaWFsbHkgYXJvdW5kIG1vZHVsZSB1bmxvYWRpbmcgYW5kIGRldmljZSBsaWZlY3ljbGUuIEl0ICpzZWVtcyogbGlrZSB0aGVyZSBhcmUgbm8gbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlcyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBnb29kLiBUaGF0IHR5cGljYWxseSBtZWFucyBmZXdlciBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBzbmVhayBpbi4gVGhleSYjMzk7cmUgZXhwbGljaXRseSBjbGFpbWluZyBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRocm91Z2ggYm91bmRzIGNoZWNrcywgbGVuZ3RocywgZXRjLiBUaGlzIGlzIHZlcnkgZW5jb3VyYWdpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKVGhlcmVmb3JlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoICpzaG91bGRuJiMzOTt0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgdHJpZ2dlciBhIEtNU0FOIHdhcm5pbmcuIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgZHVyaW5nIHRoaXMgcmVmYWN0b3JpbmcuIFNvIGZhciwgc28gZ29vZC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhhdCBga3phbGxvY19vYmooKnJwKWAgY2FsbCBpcyBnaXZpbmcgbWUgcGF1c2UuIFdhaXQsIHRoYXQgbG9va3MgdW51c3VhbC4gYGt6YWxsb2Nfb2JqYD8gSXMgdGhhdCBhIG1hY3JvPyBJIHR5cGljYWxseSB1c2UgYGt6YWxsb2Moc2l6ZW9mKCpycCksIEdGUF9LRVJORUwpYC4gTWF5YmUgSSBtaXNyZWFkIGl0LCBvciBpcyBpdCBhIGN1c3RvbSBtYWNybz8gVGhpcyBpc24mIzM5O3Qgc3RhbmRhcmQsIEkmIzM5O20gcHJldHR5IHN1cmUuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIFdhaXQsIGhvbGQgb24uIGBremFsbG9jX29iamAgaXMgbm90IGEgc3RhbmRhcmQgTGludXgga2VybmVsIEFQSS4gVGhpcyBpcyBjb25jZXJuaW5nLCBpdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLiBMZXQgbWUgY2hlY2sgaWYgaXQmIzM5O3MgaW4gdGhlIGtlcm5lbC4gV2FpdCwgYGt6YWxsb2Nfb2JqYCBpcyBub3QgYSBzdGFuZGFyZCBtYWNyby4gQWgsIHdhaXQsIHRoaXMgbWlnaHQgYmUgYSBtYWNybyBpbnRyb2R1Y2VkIHJlY2VudGx5IG9yLCBwb3RlbnRpYWxseSwgYSB0eXBvIGluIHRoZSBwYXRjaCBkZXNjcmlwdGlvbi4gTGV0IG1lIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY19vYmomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc5MjczIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0PTEwMz1saXN0OlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE0LVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMTU6ICAgICAgICAgIGdyb2NrID0ga3phbGxvY19vYmooKmdyb2NrKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE2LSAgICAgICAgICBpZiAoIWdyb2NrKVxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI1LVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMjY6ICAgICAgICAgIGRpbWl0cmkgPSBremFsbG9jX29iaigqZGltaXRyaSk7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNy0gICAgICAgICAgaWYgKCFkaW1pdHJpKVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdD00NT1hIG1lc3NhZ2UgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEFQSSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5KS5cbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtODktXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTA6XHRcdGRjX3N5bmMgPSBremFsbG9jX29iaigqZGNfc3luYyk7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTE6XHRcdGRjX2FzeW5jID0ga3phbGxvY19vYmooKmRjX2FzeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC05Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q9MjY9RXhhbXBsZTpcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDQtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q6NDU6XHRcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NjQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGEgemVyb2VkIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY3LVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTY4Olx0cCA9IGt6YWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAwLVx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAxOlx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAyLVx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDM6XHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0yMDg9dG8gZGV0YWlscyBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNjgtICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MjY5OiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNzAtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKVxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02MjM9QWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhIDpjOmZ1bmM6YHNuZF9jYXJkX25ldygpYFxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzAtICAuLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjYzMTogIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMyLVxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02OTg9ZGVzdHJ1Y3RvciBhbmQgUENJIGVudHJpZXMuIEV4YW1wbGUgY29kZSBpcyBzaG93biBmaXJzdCwgYmVsb3c6OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NDktXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NzUwOiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NTEtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKSB7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTM4MjM9Y2hpcCBkYXRhIGluZGl2aWR1YWxseTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzUtICAgICAgICAgIC4uLi5cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozODM2OiAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzctICAgICAgICAgIC4uLi5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ9Nzk0PWludCBteV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDEtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ6ODAyOlx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMy1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz02ND1tb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkciwgRWxmNjRfU2hkciAqc2VjaGRycyxcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05NS1cdG5zeW1zID0gc3ltdGFiLVx1MDAzZXNoX3NpemUgLyBzaXplb2YoRWxmNjRfU3ltKTtcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjk2Olx0Y2hhaW5zID0ga3phbGxvY19vYmpzKHN0cnVjdCBnb3RfZW50cnksIG5zeW1zKTtcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk3LVx0aWYgKCFjaGFpbnMpIHtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jPTM5MD1yZWdpc3Rlcl9jcHVzKHZvaWQpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTQtXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozOTU6XHRcdHN0cnVjdCBjcHUgKnAgPSBremFsbG9jX29iaigqcCk7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5Ni1cdFx0aWYgKCFwKVxuLS1cbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYz0xMTIwPXN0YXRpYyBpbnQgaml0X3ByZXBhcmVfZmluYWxfbWVtX2FsbG9jKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxuLS1cbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMxLVx0aWYgKGN0eC1cdTAwM2VuZWVkX2V4dHJhX3Bhc3MpIHtcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYzoxMTMyOlx0XHRjdHgtXHUwMDNlaml0X2RhdGEgPSBremFsbG9jX29iaigqY3R4LVx1MDAzZWppdF9kYXRhKTtcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMzLVx0XHRpZiAoIWN0eC1cdTAwM2VqaXRfZGF0YSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MjIwPWxvY29tb19pbml0X29uZV9jaGlsZChzdHJ1Y3QgbG9jb21vICpsY2hpcCwgc3RydWN0IGxvY29tb19kZXZfaW5mbyAqaW5mbylcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI0LVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjIyNTpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjYtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0zNTY9X19sb2NvbW9fcHJvYmUoc3RydWN0IGRldmljZSAqbWUsIHN0cnVjdCByZXNvdXJjZSAqbWVtLCBpbnQgaXJxKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjItXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MzYzOlx0bGNoaXAgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vKTtcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjQtXHRpZiAoIWxjaGlwKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz03MzM9c2ExMTExX2luaXRfb25lX2NoaWxkKHN0cnVjdCBzYTExMTEgKnNhY2hpcCwgc3RydWN0IHJlc291cmNlICpwYXJlbnQsXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTczOS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo3NDA6XHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzQxLVx0aWYgKCFkZXYpIHtcbi0tXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYz0xNzg9c3RhdGljIGludCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4Ny1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jOjE4ODpcdGRldnB0ciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzY29vcF9kZXYpO1xuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg5LVx0aWYgKCFkZXZwdHIpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jPTEwOD1zdGF0aWMgaW50IHNlY29uZGFyeV9iaWdsaXR0bGVfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTAtXHRpZiAoIWNwdV92dGFibGVbY3B1XSlcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYzoxMTE6XHRcdGNwdV92dGFibGVbY3B1XSA9IGt6YWxsb2Nfb2JqKCpjcHVfdnRhYmxlW2NwdV0pO1xuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMi1cbi0tXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jPTE2OT1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4MS1cdC8qIEFsbG9jYXRlIHRoZSBWRFNPIHRleHQgcGFnZWxpc3QgKi9cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM6MTgyOlx0dmRzb190ZXh0X3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHRleHRfcGFnZXMpO1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODMtXHRpZiAodmRzb190ZXh0X3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYz0yNjE9aW50IF9faW5pdCBkYzIxMjg1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY0LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYzoyNjU6XHRyZXMgPSBremFsbG9jX29ianMoc3RydWN0IHJlc291cmNlLCAyKTtcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY2LVx0aWYgKCFyZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jPTY5PXN0YXRpYyBpbnQgX19pbml0IGVic2EyODVfbGVkc19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04Ni1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM6ODc6XHRcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04OC1cdFx0aWYgKCFsZWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jPTcyMD1zdGF0aWMgaW50IF9faW5pdCBuZXR3aW5kZXJfbGVkc19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTcyOS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYzo3MzA6XHRcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTczMS1cdFx0aWYgKCFsZWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jPTQ3Mz1zdGF0aWMgaW50IGlteF9tbWRjX3BlcmZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkIF9faW9tZW0gKm1tZGNfYmFzZSxcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDc5LVxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jOjQ4MDpcdHBtdV9tbWRjID0ga3phbGxvY19vYmooKnBtdV9tbWRjKTtcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00ODEtXHRpZiAoIXBtdV9tbWRjKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgaTJjX3F1aXJrKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEyOS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzoxMzA6XHRcdG5ld19jb21wYXQgPSBremFsbG9jX29iaigqbmV3X2NvbXBhdCk7XG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTMxLVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM9MTYzPXN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1XzM4MF9jb2hlcmVuY3lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg3LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYzoxODg6XHRcdHAgPSBremFsbG9jX29iaigqcCk7XG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4OS1cdFx0cC1cdTAwM2VuYW1lID0ga3N0cmR1cChcJiMzNDthcm0saW8tY29oZXJlbnRcJiMzNDssIEdGUF9LRVJORUwpO1xuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM9MTQ4PXN0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NvY19kZXZpY2Uodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1Ni1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM6MTU3Olx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1OC1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM9MzgwPXN0YXRpYyB2b2lkIF9faW5pdCBteHNfbWFjaGluZV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zODktXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jOjM5MDpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zOTEtXHRpZiAoIXNvY19kZXZfYXR0cilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jPTI5ND1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9zeXN0ZW1fZG1hX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM6MzIyOlx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIzLVx0aWYgKCFkKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jPTI5Mj1zdGF0aWMgdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IHJlc19jb3VudCxcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk2LVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jOjI5NzpcdG9tYXBfbWNic3BfZGV2aWNlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHNpemUpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5OC1cdGlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX2RtX3RpbWVyX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI3LVxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jOjEyODpcdFx0cGRhdGEgPSBremFsbG9jX29iaigqcGRhdGEpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyOS1cdFx0aWYgKCFwZGF0YSkge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jPTIzMD12b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yMzktXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYzoyNDA6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yNDEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYz03ODY9dm9pZCBfX2luaXQgb21hcF9zb2NfZGV2aWNlX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkwLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jOjc5MTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5Mi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYz0xMzE9c3RhdGljIGludCBvbWFwX2RldmljZV9idWlsZF9mcm9tX2R0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE1OC1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYzoxNTk6XHRod21vZHMgPSBremFsbG9jX29ianMoc3RydWN0IG9tYXBfaHdtb2QgKiwgb2hfY250KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNjAtXHRpZiAoIWh3bW9kcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTMzODE9c3RhdGljIGludCBvbWFwX2h3bW9kX2FsbG9jYXRlX21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCxcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk0LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzM5NTpcdHN5c2MgPSBremFsbG9jX29iaigqc3lzYyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk2LVx0aWYgKCFzeXNjKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjQtXHRpZiAobGlzdF9lbXB0eShcdTAwMjZvaC1cdTAwM2VzbGF2ZV9wb3J0cykpIHtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM0MjU6XHRcdG9pID0ga3phbGxvY19vYmooKm9pKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjYtXHRcdGlmICghb2kpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzUxMz1pbnQgb21hcF9od21vZF9pbml0X21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyNy1cdGlmICghb2gpIHtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mjg6XHRcdG9oID0ga3phbGxvY19vYmooKm9oKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjktXHRcdGlmICghb2gpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUzOC1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mzk6XHRcdG9oLVx1MDAzZWNsYXNzID0ga3phbGxvY19vYmooKm9oLVx1MDAzZWNsYXNzKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1NDAtXHRcdGlmICghb2gtXHUwMDNlY2xhc3MpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGFteDNfaWRsZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUsIGludCBjcHUpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxMi1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYzo0MTM6XHRpZGxlX3N0YXRlcyA9IGt6YWxsb2Nfb2JqcygqaWRsZV9zdGF0ZXMsIHN0YXRlX2NvdW50KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTQtXHRpZiAoIWlkbGVfc3RhdGVzKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM9MzA9c3RhdGljIHZvaWQgX19pbml0IHNyX3NldF9udmFsdWVzKHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDEtXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jOjQyOlx0bnZhbHVlX3RhYmxlID0ga3phbGxvY19vYmpzKCpudmFsdWVfdGFibGUsIGNvdW50KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDMtXHRpZiAoIW52YWx1ZV90YWJsZSlcbi0tXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9MTM5PXN0YXRpYyBpbnQgX19pbml0IHBjaWVfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzEtXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzoxNzI6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3My1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz00NjY9c3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcbi0tXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDkyLVx0ICovXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6NDkzOlx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTQtXHRpZiAoIXJlcylcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jPTY4OT1zdGF0aWMgc3RydWN0IGV4cGFuc2lvbl9jYXJkICpfX2luaXQgZWNhcmRfYWxsb2NfY2FyZChpbnQgdHlwZSwgaW50IHNsb3QpXG4tLVxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTQtXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jOjY5NTpcdGVjID0ga3phbGxvY19vYmooZWNhcmRfdCk7XG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5Ni1cdGlmICghZWMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jPTkzPWludCBfX2luaXQgc2ExMXh4X2Nsa19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMDktXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjExMDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTExLVx0aWYgKCFodylcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTMyOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzMtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYz0zMTc9aW50IF9faW5pdCBzYTExeDBfcmVnaXN0ZXJfZml4ZWRfcmVndWxhdG9yKGludCBuLFxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjMtXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM6MzI0Olx0Y2ZnLVx1MDAzZWluaXRfZGF0YSA9IGlkID0ga3phbGxvY19vYmooKmNmZy1cdTAwM2Vpbml0X2RhdGEpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyNS1cdGlmICghY2ZnLVx1MDAzZWluaXRfZGF0YSlcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jPTIyNT1zdGF0aWMgaW50IG5lcG9uc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldilcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI3OC1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM6Mjc5Olx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjgwLVx0aWYgKCFkKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM9MTQxPXN0YXRpYyBpbnQgX19pbml0IHJjYXJfZ2VuMl9yZWd1bGF0b3JfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjYtXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYzoxNjc6XHRcdHF1aXJrID0ga3phbGxvY19vYmooKnF1aXJrKTtcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2OC1cdFx0aWYgKCFxdWlyaykge1xuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTM5Mz1zdGF0aWMgaW50IHZlX3NwY19wb3B1bGF0ZV9vcHBzKHVpbnQzMl90IGNsdXN0ZXIpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6Mzk4Olx0b3BwcyA9IGt6YWxsb2Nfb2Jqcygqb3BwcywgTUFYX09QUFMpO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk5LVx0aWYgKCFvcHBzKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTQ0Mj1pbnQgX19pbml0IHZlX3NwY19pbml0KHZvaWQgX19pb21lbSAqYmFzZWFkZHIsIHUzMiBhMTVfY2x1c2lkLCBpbnQgaXJxKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0NC1cdGludCByZXQ7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo0NDU6XHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ2LVx0aWYgKCFpbmZvKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTUyMz1zdGF0aWMgc3RydWN0IGNsayAqdmVfc3BjX2Nsa19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpjcHVfZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyNy1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjUyODpcdHNwYyA9IGt6YWxsb2Nfb2JqKCpzcGMpO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI5LVx0aWYgKCFzcGMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM9MTIzPXN0YXRpYyB2b2lkIF9faW5pdCB2ZXJzYXRpbGVfZHRfcGNpX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDQtXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYzoxNDU6XHRuZXdwcm9wID0ga3phbGxvY19vYmooKm5ld3Byb3ApO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ2LVx0aWYgKCFuZXdwcm9wKVxuLS1cbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYz0xMDU9c3RhdGljIHZvaWQgX19pbml0IHp5bnFfaW5pdF9tYWNoaW5lKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMC1cbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYzoxMTE6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTItXHRpZiAoIXNvY19kZXZfYXR0cilcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jPTUwMz1zdGF0aWMgX19pbml0IGludCBsMngwX3BtdV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MDktXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jOjUxMDpcdGwyeDBfcG11ID0ga3phbGxvY19vYmooKmwyeDBfcG11KTtcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTExLVx0aWYgKCFsMngwX3BtdSkge1xuLS1cbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM9MzE1PXN0YXRpYyBpbnQgX19pbml0IF9fdW5pcGhpZXJfY2FjaGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ0LVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYzozNDU6XHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDYtXHRpZiAoIWRhdGEpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz01MzM9c3RhdGljIHZvaWQgKl9fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSxcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2MC1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6NTYxOlx0YnVmID0ga3phbGxvY19vYmooKmJ1ZixcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYyLVx0XHRcdCAgZ2ZwIFx1MDAyNiB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSkpO1xuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9MTQ4Nz1hcm1faW9tbXVfY3JlYXRlX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhc2UsIHU2NCBzaXplKVxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwNi1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6MTUwNzpcdG1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcpO1xuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA4LVx0aWYgKCFtYXBwaW5nKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYz0zMTY9aW50IF9faW5pdCBhcmNoX3hlbl91bnBvcHVsYXRlZF9pbml0KHN0cnVjdCByZXNvdXJjZSAqKnJlcylcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQzLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM0NDpcdHJlZ3MgPSBremFsbG9jX29ianMoKnJlZ3MsIG5yX3JlZyk7XG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQ1LVx0aWYgKCFyZWdzKSB7XG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4Ny1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozODg6XHRcdHRtcF9yZXMgPSBremFsbG9jX29iaigqdG1wX3Jlcyk7XG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg5LVx0XHRpZiAoIXRtcF9yZXMpIHtcbi0tXG5hcmNoL2FybS94ZW4vcDJtLmM9MTUwPWJvb2wgX19zZXRfcGh5c190b19tYWNoaW5lX211bHRpKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYy0xNzgtXG5hcmNoL2FybS94ZW4vcDJtLmM6MTc5Olx0cDJtX2VudHJ5ID0ga3phbGxvY19vYmooKnAybV9lbnRyeSwgR0ZQX05PV0FJVCk7XG5hcmNoL2FybS94ZW4vcDJtLmMtMTgwLVx0aWYgKCFwMm1fZW50cnkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jPTY4PXN0YXRpYyBpbnQgX19pbml0IF9fdmRzb19pbml0KGVudW0gdmRzb19hYmkgYWJpKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04My1cbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYzo4NDpcdHZkc29fcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvW2FiaV0udmRzb19wYWdlcyk7XG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODUtXHRpZiAodmRzb19wYWdlbGlzdCA9PSBOVUxMKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTQ4MD1zdGF0aWMgaW50IHNoYXJlX3Bmbl9oeXAodTY0IHBmbilcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTItXG5hcmNoL2FybTY0L2t2bS9tbXUuYzo0OTM6XHR0aGlzID0ga3phbGxvY19vYmooKnRoaXMpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtNDk0LVx0aWYgKCF0aGlzKSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9OTgxPWludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDctXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDA4Olx0cGd0ID0ga3phbGxvY19vYmooKnBndCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDktXHRpZiAoIXBndClcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMTgwPWludCB0b3B1cF9oeXBfbWVtY2FjaGUoc3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgKm1jLCB1bnNpZ25lZCBsb25nIG1pbl9wYWdlcylcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg1LVx0aWYgKCFtYy1cdTAwM2VtYXBwaW5nKSB7XG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTg2Olx0XHRtYy1cdTAwM2VtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IHBrdm1fbWFwcGluZyxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODctXHRcdFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNTEwPWludCBfX2luaXQga3ZtX21tdV9pbml0KHUzMiBoeXBfdmFfYml0cylcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQzLVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjU0NDpcdGh5cF9wZ3RhYmxlID0ga3phbGxvY19vYmooKmh5cF9wZ3RhYmxlKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDUtXHRpZiAoIWh5cF9wZ3RhYmxlKSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTMyOD1pbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzMtXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYikge1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMzNDpcdFx0c3RydWN0IHZuY3JfdGxiICp2dCA9IGt6YWxsb2Nfb2JqKCp2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGIsXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzM1LVx0XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNzkzPWludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODAyLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTgwMzpcdGt2bS1cdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyA9IGt6YWxsb2Nfb2JqKCooa3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzKSxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDQtXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0xMTY9c3RhdGljIHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlICprdm1fcHRkdW1wX3BhcnNlcl9jcmVhdGUoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjEtXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYzoxMjI6XHRzdCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIzLVx0aWYgKCFzdClcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTIwNz1zdGF0aWMgaW50IGt2bV92Z2ljX2Rpc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucl9zcGlzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjEzLVx0ZGlzdC1cdTAwM2VhY3RpdmVfc3BpcyA9IChhdG9taWNfdClBVE9NSUNfSU5JVCgwKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MjE0Olx0ZGlzdC1cdTAwM2VzcGlzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSwgbnJfc3BpcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjE1LVx0aWYgKCFkaXN0LVx1MDAzZXNwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zMTY9c3RhdGljIGludCB2Z2ljX2FsbG9jYXRlX3ByaXZhdGVfaXJxc19sb2NrZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MzMyOlx0dmdpY19jcHUtXHUwMDNlcHJpdmF0ZV9pcnFzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMzLVx0XHRcdFx0XHQgICAgICBudW1fcHJpdmF0ZV9pcnFzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTE0Mj1pbnQga3ZtX3ZnaWNfc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTQ4LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM6MTQ5Olx0ZW50cmllcyA9IGt6YWxsb2Nfb2JqcygqZW50cmllcywgbnIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNTAtXHRpZiAoIWVudHJpZXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTc2PXN0YXRpYyBzdHJ1Y3QgdmdpY19pcnEgKnZnaWNfYWRkX2xwaShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbnRpZCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODctXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6ODg6XHRpcnEgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pcnEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODktXHRpZiAoIWlycSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9OTcxPXN0YXRpYyBpbnQgdmdpY19pdHNfYWxsb2NfY29sbGVjdGlvbihzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTc2LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjk3NzpcdGNvbGxlY3Rpb24gPSBremFsbG9jX29iaigqY29sbGVjdGlvbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzgtXHRpZiAoIWNvbGxlY3Rpb24pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTEwMTU9c3RhdGljIHN0cnVjdCBpdHNfaXRlICp2Z2ljX2l0c19hbGxvY19pdGUoc3RydWN0IGl0c19kZXZpY2UgKmRldmljZSxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMDIxOlx0aXRlID0ga3phbGxvY19vYmooKml0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIyLVx0aWYgKCFpdGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTExNDI9c3RhdGljIHN0cnVjdCBpdHNfZGV2aWNlICp2Z2ljX2l0c19hbGxvY19kZXZpY2Uoc3RydWN0IHZnaWNfaXRzICppdHMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDctXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTE0ODpcdGRldmljZSA9IGt6YWxsb2Nfb2JqKCpkZXZpY2UsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0OS1cdGlmICghZGV2aWNlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xODU1PXN0YXRpYyBpbnQgdmdpY19pdHNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODYyLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjE4NjM6XHRpdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg2NC1cdGlmICghaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODg2PXN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzEtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjkzMjpcdHJkcmVnID0ga3phbGxvY19vYmooKnJkcmVnLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzMtXHRpZiAoIXJkcmVnKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jPTI0Mj1pbnQgdmdpY192NF9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNTgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYzoyNTk6XHRkaXN0LVx1MDAzZWl0c192bS52cGVzID0ga3phbGxvY19vYmpzKCpkaXN0LVx1MDAzZWl0c192bS52cGVzLCBucl92Y3B1cyxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI2MC1cdFx0XHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjA4MD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDEtXHRpZiAoIWppdF9kYXRhKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMTAyOlx0XHRqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpqaXRfZGF0YSk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTAzLVx0XHRpZiAoIWppdF9kYXRhKVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jPTE3PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTIyLVx0dmRzb19wYWdlbGlzdCA9XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYzoyMzpcdFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29fcGFnZXMpO1xuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjQtXHRpZiAodW5saWtlbHkodmRzb19wYWdlbGlzdCA9PSBOVUxMKSkge1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X2lzYV9pbyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3Mi1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjQ3MzpcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBHRlBfQVRPTUlDKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3NC1cdGlmICghcmFuZ2UpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYz00NT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZClcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU1LVx0dmRzb19pbmZvLmNvZGVfbWFwcGluZy5wYWdlcyA9XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jOjU2Olx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvLnNpemUgLyBQQUdFX1NJWkUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01Ny1cbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9NjE0PXN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjQtXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6NjI1Olx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50Yyk7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI2LVx0aWYgKCFzKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jPTM5ND1zdGF0aWMgaW50IGt2bV9pcGlfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jOjQxMjpcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2lwaSk7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTMtXHRpZiAoIXMpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NTQKCQkJCQkJCW91dHB1dDogMjQwCgkJCQkJCQl0aG91Z2h0czogNzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBEZXRlY3RlZCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gdGhhdCBga3phbGxvY19vYmooKnJwKWAgbWFjcm8uIFJpZ2h0LCBpdCYjMzk7cyBiYXNpY2FsbHkgYSBga3phbGxvY2AgZm9yIHRoZSBvYmplY3QgYHJwYCBwb2ludHMgdG8g4oCTIHRoYXQmIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHplcm9pbmcsIHdoaWNoIGlzIGltcG9ydGFudC4gVGhlIGNvZGUgdGhlbiBzZXRzIHVwIGBycC0mZ3Q7ZGV2YCwgYHJwLSZndDtwYXJlbnRgLCBgcnAtJmd0O2RydmAsIGFuZCBpbml0aWFsaXplcyB0aGUgZGVsYXllZCB3b3JrIHF1ZXVlIGl0ZW0sIGFsbCBnb29kIHNvIGZhci4gVGhlIHdvcmsgZnVuY3Rpb24gaXRzZWxmIHRoZW4gdXNlcyBhbmQgZnJlZXMgYHJwYC4gSXQgZG9lc27igJl0IHNlZW0gbGlrZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ2V0dGluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGFueSB1bmV4cGVjdGVkIGNvbnRyb2wgZmxvdyBwYXRocy4gSXQmIzM5O3MgYWxsIGludGVybmFsIHRvIHRoZSBkcml2ZXIgY29yZSBhbmQgZGV2aWNlIGxpZmVjeWNsZXMuCgpMZXQmIzM5O3MgZG8gYSBmdWxsIHNjYW4gb2YgYWxsIHRoZSBjaGFuZ2VzLiBMb29rcyBsaWtlIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGEgYnVuY2ggb2Ygb3RoZXIgZmlsZXM6IGBkcml2ZXJzL2Jhc2UvYmFzZS5oYCwgYGRyaXZlcnMvYmFzZS9jb3JlLmNgLCBgZHJpdmVycy9iYXNlL2RkLmNgLCBgZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNgLCBgZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNgLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAuIE9rYXksIHRoZXNlIGFsbCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG5ldyBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBsb29rcyBsaWtlIGl0JiMzOTtzIGFpbWVkIGF0IHN0YW5kYXJkaXppbmcgZGVmZXJyZWQgZGV2aWNlIHJlcHJvYmluZyBhY3Jvc3MgZHJpdmVycy4gQWxzbyBzZWUgdGhlIGFkZGl0aW9uIG9mIGEgYHNodXRkb3duX2RvbmVgIGZsYWcuIFRoZSBwYXRjaCByZXBsYWNlcyBjdXN0b20gcmVwcm9iZSBpdGVtcyB3aXRoIHRoaXMgbW9yZSBnZW5lcmljIGNhbGwuIFRoZXJlJiMzOTtzIG5vdGhpbmcgbmV3IGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCB3aGVyZSB5b3UgY291bGQgcmVhZCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIHJlYWxseSBqdXN0IGFib3V0IGhvdyB0aGUgZHJpdmVyIGNvcmUgbWFuYWdlcyBkZXZpY2VzLgoKU28sIHRoZSBjaGFuZ2VzIHNlZW0gc3RyYWlnaHRmb3J3YXJkOiB3ZSBhcmUgaW50cm9kdWNpbmcgYSBuZXcgdW5pZmllZCBtZXRob2QgdG8gcmVzY2hlZHVsZSBkZXZpY2VzLiAgSXQgbG9va3MgdG8gYmUgYSBjbGVhbiByZWZhY3RvciB0aGF0JiMzOTtzIHJlcGxhY2luZyBjdXN0b20gd29ya3F1ZXVlIGl0ZW1zIHdpdGggYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYC4gSXQgYWRkcyB0aGUgYHNodXRkb3duX2RvbmVgIGZsYWcgdG8gcHJldmVudCByZXByb2JpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtIHNodXRkb3duLiBUaGUgbWVtb3J5IGZvciB0aGUgcHJvYmUgaXRlbSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBzbyBpdCYjMzk7cyB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGNvbmZpbmVkIHRvIHRoZSBkcml2ZXIgY29yZSwgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCB3b3JrcXVldWUgc2NoZWR1bGluZyBhbmQgbGlmZWN5Y2xlLiBUaGUgKm9ubHkqIHJlYWwgcmlza3MgaGVyZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIC0gdXNlLWFmdGVyLWZyZWUsIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBmaW5kIHRob3NlIGtpbmRzIG9mIGJ1Z3MuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLiBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gc3RhbmRhcmRpc2UgZGVmZXJyZWQgZGV2aWNlIHJlcHJvYmluZyBhY3Jvc3MgZHJpdmVycywgcmVwbGFjaW5nIGN1c3RvbSB3b3JrIGl0ZW1zIGluIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYC4gSXQgYWxzbyBhZGRzIGEgYHNodXRkb3duX2RvbmVgIGZsYWcgdG8gcHJldmVudCByZXByb2JpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtIHNodXRkb3duLiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIChlLmcuLCBgc3RydWN0IGRldmljZV9yZXByb2JlYCB2aWEgYGt6YWxsb2Nfb2JqYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCBrZXJuZWwgZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkcml2ZXIgYmluZGluZy91bmJpbmRpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG5ldHdvcmsgcGFja2V0IHBhcnNpbmcsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlKSwgbG9ja2luZyAoZGVhZGxvY2tzKSwgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHN0YW5kYXJkaXNlIGRlZmVycmVkIGRldmljZSByZXByb2JpbmcgYWNyb3NzIGRyaXZlcnMsIHJlcGxhY2luZyBjdXN0b20gd29yayBpdGVtcyBpbiBgYnRpbnRlbF9wY2llYCwgYGhjaV9oNWAsIGFuZCBgaXdsd2lmaWAuIEl0IGFsc28gYWRkcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bi4gQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyAoZS5nLiwgYHN0cnVjdCBkZXZpY2VfcmVwcm9iZWAgdmlhIGBremFsbG9jX29iamApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwga2VybmVsIGRldmljZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZHJpdmVyIGJpbmRpbmcvdW5iaW5kaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBuZXR3b3JrIHBhY2tldCBwYXJzaW5nLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSksIGxvY2tpbmcgKGRlYWRsb2NrcyksIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFsbCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjE6MjUuOTI1NzYzNDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5MTU3NjM5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRfSENJVUFSVFwiLFxuICAgIFwiQlRfSENJVUFSVF8zV0lSRVwiLFxuICAgIFwiU0VSSUFMX0RFVl9CVVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZVwiLFxuICAgIFwiZGV2aWNlX3JlcHJvYmVfd29ya19mblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHN0YW5kYXJkaXNlIGRlZmVycmVkIGRldmljZSByZXByb2JpbmcgYWNyb3NzIGRyaXZlcnMsIHJlcGxhY2luZyBjdXN0b20gd29yayBpdGVtcyBpbiBgYnRpbnRlbF9wY2llYCwgYGhjaV9oNWAsIGFuZCBgaXdsd2lmaWAuIEl0IGFsc28gYWRkcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bi4gQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyAoZS5nLiwgYHN0cnVjdCBkZXZpY2VfcmVwcm9iZWAgdmlhIGBremFsbG9jX29iamApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwga2VybmVsIGRldmljZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZHJpdmVyIGJpbmRpbmcvdW5iaW5kaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBuZXR3b3JrIHBhY2tldCBwYXJzaW5nLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSksIGxvY2tpbmcgKGRlYWRsb2NrcyksIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFsbCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gdGhlIGRyaXZlciBjb3JlLCB3aGljaCBhbGxvd3Mgc2NoZWR1bGluZyBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgYSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBkcml2ZXIgbW9kZWwgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyB0aGUgYGhjaV9oNWAgc2VyaWFsIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMToyNS45MjU3NzAyMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzA5MjE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdmNjczZmVmNzQ4NmE2OThiOTRjZjI5MWQ2NThiZWRhMGVhNTU3NGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDM6MjE6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmhcXG5pbmRleCBhNWI3YWJjMTBmZjAyLi42MjM0ZTM3ZGU3ZTk5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmFzZS9iYXNlLmhcXG4rKysgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oXFxuQEAgLTEwNiw2ICsxMDYsMTAgQEAgc3RydWN0IGRyaXZlcl9wcml2YXRlIHtcXG4gICogQGRlYWQ6IFRoaXMgZGV2aWNlIGlzIGN1cnJlbnRseSBlaXRoZXIgaW4gdGhlIHByb2Nlc3Mgb2Ygb3IgaGFzIGJlZW5cXG4gICpcXHQgIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBBbnkgYXN5bmNocm9ub3VzIGV2ZW50cyBzY2hlZHVsZWQgZm9yIHRoaXNcXG4gICpcXHQgIGRldmljZSBzaG91bGQgZXhpdCB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uLlxcbisgKiBAc2h1dGRvd25fZG9uZTogU2V0IG9uY2UgZGV2aWNlX3NodXRkb3duKCkgaGFzIHJlYWNoZWQgdGhpcyBkZXZpY2UsIHVuZGVyXFxuKyAqXFx0ICB0aGUgZGV2aWNlIGxvY2ssIGJlZm9yZSBhbnkgc2h1dGRvd24gY2FsbGJhY2sgcnVucy4gUmVhZCB1bmRlciB0aGVcXG4rICpcXHQgIGRldmljZSBsb2NrLiBBIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoXFxuKyAqXFx0ICBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpIG11c3Qgbm90IGRldGFjaCB0aGUgZGV2aWNlIGFueW1vcmUuXFxuICAqXFxuICAqIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyIGNvcmUgc2hvdWxkIGV2ZXIgdG91Y2ggdGhlc2UgZmllbGRzLlxcbiAgKi9cXG5AQCAtMTIwLDYgKzEyNCw3IEBAIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSB7XFxuIFxcdGNoYXIgKmRlZmVycmVkX3Byb2JlX3JlYXNvbjtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xcbiBcXHR1OCBkZWFkOjE7XFxuK1xcdHU4IHNodXRkb3duX2RvbmU6MTtcXG4gfTtcXG4gI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQob2JqKVxcdFxcXFxcXG4gXFx0Y29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXFxuaW5kZXggNGQwMjY2ODI5NDRmMi4uOGE3ZGJlNGU4MzYyYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jXFxuKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xcbkBAIC00OTA2LDYgKzQ5MDYsOSBAQCB2b2lkIGRldmljZV9zaHV0ZG93bih2b2lkKVxcbiBcXHRcXHRcXHRkZXZpY2VfbG9jayhwYXJlbnQpO1xcbiBcXHRcXHRkZXZpY2VfbG9jayhkZXYpO1xcbiBcXG4rXFx0XFx0aWYgKGRldi1cXHUwMDNlcClcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VwLVxcdTAwM2VzaHV0ZG93bl9kb25lID0gdHJ1ZTtcXG4rXFxuIFxcdFxcdC8qIERvbid0IGFsbG93IGFueSBtb3JlIHJ1bnRpbWUgc3VzcGVuZHMgKi9cXG4gXFx0XFx0cG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTtcXG4gXFx0XFx0cG1fcnVudGltZV9iYXJyaWVyKGRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmNcXG5pbmRleCA2MGMwMDUyMjM4NDRkLi5kNzY1ZTFhZTU2MTRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jXFxuKysrIGIvZHJpdmVycy9iYXNlL2RkLmNcXG5AQCAtMTQzNiwzICsxNDM2LDEwNSBAQCB2b2lkIGRyaXZlcl9kZXRhY2goY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG4gXFx0XFx0cHV0X2RldmljZShkZXYpO1xcbiBcXHR9XFxuIH1cXG4rXFxuK3N0cnVjdCBkZXZpY2VfcmVwcm9iZSB7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgKnJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZpY2VfcmVwcm9iZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHdvcmsud29yayk7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHJwLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IHJwLVxcdTAwM2VwYXJlbnQ7XFxuK1xcdGJvb2wgZGV0YWNoZWQgPSBmYWxzZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdF9fZGV2aWNlX2RyaXZlcl9sb2NrKGRldiwgcGFyZW50KTtcXG4rXFx0LypcXG4rXFx0ICogcnAtXFx1MDAzZWRydiBpcyBvbmx5IGV2ZXIgY29tcGFyZWQsIG5ldmVyIGRlcmVmZXJlbmNlZDogdGhlIGRyaXZlciBpdFxcbitcXHQgKiBwb2ludHMgdG8gbWF5IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGJ5IG5vdy5cXG4rXFx0ICovXFxuK1xcdGlmICghZGV2LVxcdTAwM2VwLVxcdTAwM2VkZWFkIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZXAtXFx1MDAzZXNodXRkb3duX2RvbmUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGRldi1cXHUwMDNlZHJpdmVyIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlZHJpdmVyID09IHJwLVxcdTAwM2VkcnYpIHtcXG4rXFx0XFx0X19kZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2LCBwYXJlbnQpO1xcbitcXHRcXHRkZXRhY2hlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFx0X19kZXZpY2VfZHJpdmVyX3VubG9jayhkZXYsIHBhcmVudCk7XFxuK1xcbitcXHRpZiAoZGV0YWNoZWQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZGV2aWNlX2F0dGFjaCgpIG11c3QgcnVuIHdpdGggdGhlIHBhcmVudCBsb2NrZWQgb24gYnVzZXNcXG4rXFx0XFx0ICogdGhhdCByZXF1aXJlIGl0LCBtaXJyb3JpbmcgYnVzX3Jlc2Nhbl9kZXZpY2VzX2hlbHBlcigpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHBhcmVudCBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbmVlZF9wYXJlbnRfbG9jaylcXG4rXFx0XFx0XFx0ZGV2aWNlX2xvY2socGFyZW50KTtcXG4rXFx0XFx0cmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFxcInJlLXByb2JlIGZhaWxlZCwgZGV2aWNlIGxlZnQgdW5ib3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChwYXJlbnQgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VidXMtXFx1MDAzZW5lZWRfcGFyZW50X2xvY2spXFxuK1xcdFxcdFxcdGRldmljZV91bmxvY2socGFyZW50KTtcXG4rXFx0fVxcbitcXG4rXFx0cHV0X2RldmljZShkZXYpO1xcbitcXHRwdXRfZGV2aWNlKHBhcmVudCk7XFxuK1xcdGtmcmVlKHJwKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRldmljZV9zY2hlZHVsZV9yZXByb2JlIC0gc2NoZWR1bGUgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlXFxuKyAqIEBkZXY6IGRldmljZSB0byBkZXRhY2ggYW5kIHJlLXByb2JlXFxuKyAqIEBkZWxheV9tczogZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmUtcHJvYmUgcnVuc1xcbisgKlxcbisgKiBTY2hlZHVsZSBhIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgQGRldiBhZnRlciBAZGVsYXlfbXMgbWlsbGlzZWNvbmRzLlxcbisgKiBUaGUgcmUtcHJvYmUgaXMgc2tpcHBlZCBpZiwgYnkgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCB3b3JrIHJ1bnMsIHRoZVxcbisgKiBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCwgdGhlIHN5c3RlbSBzaHV0ZG93biBzZXF1ZW5jZSBoYXMgcmVhY2hlZCB0aGVcXG4rICogZGV2aWNlLCBvciBAZGV2IGlzIG5vIGxvbmdlciBib3VuZCB0byB0aGUgZHJpdmVyIHRoYXQgd2FzIGJvdW5kIGF0XFxuKyAqIHNjaGVkdWxpbmcgdGltZS4gSW4gcGFydGljdWxhciBhbiBhZG1pbmlzdHJhdGl2ZSB1bmJpbmQgaXMgbmV2ZXJcXG4rICogdW5kb25lIGJ5IGEgc3RhbGUgcmUtcHJvYmUuXFxuKyAqXFxuKyAqIFRoZSB3b3JrIGZ1bmN0aW9uIGlzIGJ1aWx0LWluIHRleHQsIHNvIHRoZSBib3VuZCBkcml2ZXIgbWF5IGNhbGwgdGhpc1xcbisgKiBmcm9tIGl0cyBvd24gY29kZSB3aXRob3V0IGhvbGRpbmcgYSBtb2R1bGUgcmVmZXJlbmNlLiBJZiB0aGUgZHJpdmVyXFxuKyAqIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdvcmsgcnVucywgZHJpdmVyIHVucmVnaXN0cmF0aW9uIHVuYmluZHNcXG4rICogQGRldiBmaXJzdCBhbmQgdGhlIHNjaGVkdWxlZCB3b3JrIGRvZXMgbm90aGluZy5cXG4rICpcXG4rICogTXVsdGlwbGUgcGVuZGluZyByZS1wcm9iZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhcmUgaW5kaXZpZHVhbGx5IHNhZmU7XFxuKyAqIGEgY2FsbGVyIHRoYXQgd2FudHMgYXQgbW9zdCBvbmUgcGVuZGluZyByZS1wcm9iZSBtdXN0IGdhdGUgc2NoZWR1bGluZ1xcbisgKiBpdHNlbGYuXFxuKyAqXFxuKyAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC5cXG4rICpcXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBkZXYgaXMgbm90IGEgcmVnaXN0ZXJlZCBkZXZpY2VcXG4rICogYm91bmQgdG8gYSBkcml2ZXIsIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5X21zKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnA7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlYnVzIHx8ICFkZXYtXFx1MDAzZXAgfHwgIWRldmljZV9pc19yZWdpc3RlcmVkKGRldikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWRldi1cXHUwMDNlZHJpdmVyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJwID0ga3phbGxvY19vYmooKnJwKTtcXG4rXFx0aWYgKCFycClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRycC1cXHUwMDNlZGV2ID0gZ2V0X2RldmljZShkZXYpO1xcbitcXHQvKlxcbitcXHQgKiBQaW4gdGhlIHBhcmVudCB0b286IHRoZSB3b3JrIGxvY2tzIGl0LCBhbmQgYW4gdW5yZWdpc3RlciBvZiBAZGV2XFxuK1xcdCAqIHdvdWxkIG90aGVyd2lzZSBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZSBiZWZvcmUgdGhlIHdvcmsgcnVucy5cXG4rXFx0ICovXFxuK1xcdHJwLVxcdTAwM2VwYXJlbnQgPSBnZXRfZGV2aWNlKGRldi1cXHUwMDNlcGFyZW50KTtcXG4rXFx0cnAtXFx1MDAzZWRydiA9IFJFQURfT05DRShkZXYtXFx1MDAzZWRyaXZlcik7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZycC1cXHUwMDNld29yaywgZGV2aWNlX3JlcHJvYmVfd29ya19mbik7XFxuK1xcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBcXHUwMDI2cnAtXFx1MDAzZXdvcmssXFxuK1xcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xcbmluZGV4IGJhYTYyMWIzZmVmOTMuLjI5YmUwNWQ0MTQyOTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNcXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xcbkBAIC0zMDEyLDcgKzMwMTIsNyBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcXG4gXFx0ICogQlQgbmVlZHMgcGNpX3NhdmVfc3RhdGUoKS9wY2lfcmVzdG9yZV9zdGF0ZSgpIGJlY2F1c2UgdGhlIEJUIGRyaXZlclxcbiBcXHQgKiBpcyBzdGlsbCBwYXJ0aWFsbHkgYXR0YWNoZWQgd2hlbiB0aGUgX1BSUiBydW5zIChpdCBoYXNuJ3QgYmVlbiB1bmJvdW5kIHlldCkuXFxuIFxcdCAqIFRoZSBQQ0kgZGV2aWNlIG5lZWRzIHRvIHJlbWFpbiBtaW5pbWFsbHkgZnVuY3Rpb25hbCBzbyB0aGF0XFxuLVxcdCAqIGRldmljZV9yZXByb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpIGNhbiB3b3JrIGFmdGVyd2FyZFxcbitcXHQgKiB0aGUgZGVmZXJyZWQgcmUtcHJvYmUgb2YgdGhlIEJUIGRldmljZSBjYW4gd29yayBhZnRlcndhcmRcXG4gXFx0ICovXFxuIFxcdHJldCA9IGJ0aW50ZWxfcGNpZV9hY3BpX3Jlc2V0X21ldGhvZChkYXRhKTtcXG4gXFxuQEAgLTMwMjMsMTQgKzMwMjMsMTYgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3BlcmZvcm1fcGxkcihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXFxuIFxcdH1cXG4gXFxuIFxcdGlmICghcmV0KSB7XFxuLVxcdFxcdGlmIChkZXZpY2VfcmVwcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0XFx0QlRfRVJSKFxcXCJCVCByZXByb2JlIGZhaWxlZCBmb3IgQkRGOiVzXFxcIiwgcGNpX25hbWUocGRldikpO1xcbitcXHRcXHRpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgMCkpXFxuK1xcdFxcdFxcdEJUX0VSUihcXFwiQlQgcmVwcm9iZSBzY2hlZHVsaW5nIGZhaWxlZCBmb3IgQkRGOiVzXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHBjaV9uYW1lKHBkZXYpKTtcXG4gXFx0fVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBJc3N1ZSBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IGFuZCBoYW5kIHRlYXJkb3duL3JlLWluaXQgb2ZmIHRvIHRoZSBQQ0lcXG4tICogY29yZSB2aWEgZGV2aWNlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgncyBjb250cmFjdC5cXG4rICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGVcXG4rICogZHJpdmVyIGNvcmUgdmlhIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCksIG1pcnJvcmluZyB0aGUgUExEUiBwYXRoJ3NcXG4rICogY29udHJhY3QuXFxuICAqXFxuICAqIENhbGxlciBtdXN0IGhvbGQgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpIGFuZCBtdXN0IGhhdmUgYWxyZWFkeVxcbiAgKiBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBkcmFpbmVkIGJvdGggcnhfd29yayBhbmQgY29yZWR1bXBfd29yay5cXG5AQCAtMzA1MiwxNCArMzA1NCwxMiBAQCBzdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9wZXJmb3JtX2ZscihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGRldmljZV9yZXByb2JlKCkgYWx3YXlzIGRldGFjaGVzIHRoZSBkcml2ZXIgZmlyc3QgKHJ1bm5pbmdcXG4tXFx0ICogLnJlbW92ZSgpLCB3aGljaCBmcmVlcyAnZGF0YScpOyBhbnkgcmUtcHJvYmUgZmFpbHVyZSBsZWF2ZXMgdGhlXFxuLVxcdCAqIGRldmljZSB1bmJvdW5kIGJ1dCAnZGF0YScgaXMgYWxyZWFkeSBnb25lLCBzbyBqdXN0IGxvZyBpdC5cXG4tXFx0ICovXFxuLVxcdGlmIChkZXZpY2VfcmVwcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0QlRfRVJSKFxcXCJCVCByZXByb2JlIGZhaWxlZCBmb3IgQkRGOiVzXFxcIiwgcGNpX25hbWUocGRldikpO1xcbitcXHRlcnIgPSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0QlRfRVJSKFxcXCJCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXNcXFwiLFxcbitcXHRcXHQgICAgICAgcGNpX25hbWUocGRldikpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spXFxuQEAgLTMwOTAsMTEgKzMwOTAsMTUgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aylcXG4gXFxuIFxcdGJ0X2Rldl9kYmcoZGF0YS1cXHUwMDNlaGRldiwgXFxcIlJlbGVhc2UgYmx1ZXRvb3RoIGludGVyZmFjZVxcXCIpO1xcbiBcXG4tXFx0LyogQm90aCByZXNldCBwYXRocyBmb2xsb3cgdGhlIHNhbWUgY29udHJhY3Q6IG9uIHN1Y2Nlc3MgdGhleVxcbi1cXHQgKiBkZXN0cm95ICdkYXRhJyB2aWEgZGV2aWNlX3JlcHJvYmUoKSAoYSBmcmVzaCBwcm9iZSByZS1JTklUX1dPUktzXFxuLVxcdCAqIHRoZSBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3RcXG4tXFx0ICogTk9UIGJlIGNhbGxlZCBvbiB0aGUgc3VjY2VzcyBwYXRoLiBPbmx5IHRoZSBGTFIgcGF0aCBjYW4gZmFpbFxcbi1cXHQgKiB3aXRoICdkYXRhJyBzdGlsbCBhbGl2ZSwgaW4gd2hpY2ggY2FzZSB3ZSBiYWxhbmNlIHRoZVxcbitcXHQvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGVcXG4rXFx0ICogZGVmZXJyZWQgcmUtcHJvYmUgc2NoZWR1bGVkIHdpdGggZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKVxcbitcXHQgKiBkZXN0cm95cyAnZGF0YScgYnkgcmUtcnVubmluZyAucHJvYmUoKSAod2hpY2ggcmUtSU5JVF9XT1JLcyB0aGVcXG4rXFx0ICogZHVtcCB3b3JrZXJzIHdpdGggZGlzYWJsZSBjb3VudCAwKSwgc28gZW5hYmxlX3dvcmsoKSBtdXN0IE5PVCBiZVxcbitcXHQgKiBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gJ2RhdGEnIHN0YXlzIGFsaXZlIHVudGlsIHRoZSBkZWZlcnJlZFxcbitcXHQgKiBkZXRhY2ggcnVuczsgaW4gdGhpcyB3aW5kb3cgbmV3IGFjdGl2aXR5IGlzIGZlbmNlZCBieVxcbitcXHQgKiBCVElOVEVMX1BDSUVfUkVDT1ZFUllfSU5fUFJPR1JFU1MsIHRoZSBtYXNrZWQgaW50ZXJydXB0cyBhbmQgdGhlXFxuK1xcdCAqIGRpc2FibGVkIGR1bXAgd29ya2Vycy4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwgd2l0aCBub1xcbitcXHQgKiByZS1wcm9iZSBzY2hlZHVsZWQsIGluIHdoaWNoIGNhc2Ugd2UgYmFsYW5jZSB0aGVcXG4gXFx0ICogZGlzYWJsZV93b3JrX3N5bmMoKSBjYWxscyBhYm92ZSBzbyBhIGxhdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgaXNcXG4gXFx0ICogbm90IHBlcm1hbmVudGx5IGJsb2NrZWQuXFxuIFxcdCAqXFxuQEAgLTM0NjAsMTMgKzM0NjQsMTIgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNmRhdGEtXFx1MDAzZWZ3dHJpZ2dlcl93b3JrKTtcXG4gXFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNmRhdGEtXFx1MDAzZW1ib3hfd29yayk7XFxuIFxcbi1cXHQvKiBDYW5jZWwgcGVuZGluZyByZXNldCB3b3JrLiBTa2lwIG9ubHkgd2hlbiByZW1vdmUoKSBpcyBjYWxsZWQgZnJvbVxcbi1cXHQgKiB3aXRoaW4gdGhlIHJlc2V0IHdvcmsgaXRzZWxmIChQTERSIGRldmljZV9yZXByb2JlIHBhdGgpIHRvIGF2b2lkXFxuLVxcdCAqIGRlYWRsb2NrLiBjdXJyZW50X3dvcmsoKSByZXR1cm5zIHRoZSB3b3JrX3N0cnVjdCBvZiB0aGUgY2FsbGVyIGlmXFxuLVxcdCAqIHdlIGFyZSBpbiBhIHdvcmtxdWV1ZSBjb250ZXh0LlxcbitcXHQvKiBUaGUgZGVmZXJyZWQgcmUtcHJvYmUgdHJpZ2dlcnMgLnJlbW92ZSgpIGZyb20gdGhlIGRyaXZlciBjb3JlJ3NcXG4rXFx0ICogd29yayBpdGVtLCBuZXZlciBmcm9tIHJlc2V0X3dvcmsgaXRzZWxmLCBzbyB0aGlzIG5vIGxvbmdlciBydW5zXFxuK1xcdCAqIG5lc3RlZCBpbiByZXNldF93b3JrOyBkaXNhYmxlX3dvcmtfc3luYygpIGFsc28gZ3VhcmFudGVlcyB0aGVcXG4rXFx0ICogcmVzZXQgd29yayBoYXMgZnVsbHkgcmV0dXJuZWQgYmVmb3JlICdkYXRhJyBpcyBmcmVlZC5cXG4gXFx0ICovXFxuLVxcdGlmIChjdXJyZW50X3dvcmsoKSAhPSBcXHUwMDI2ZGF0YS1cXHUwMDNlcmVzZXRfd29yaylcXG4tXFx0XFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNmRhdGEtXFx1MDAzZXJlc2V0X3dvcmspO1xcbitcXHRkaXNhYmxlX3dvcmtfc3luYyhcXHUwMDI2ZGF0YS1cXHUwMDNlcmVzZXRfd29yayk7XFxuIFxcbiBcXHRidGludGVsX3BjaWVfZGlzYWJsZV9pbnRlcnJ1cHRzKGRhdGEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xcbmluZGV4IGIxOTk5ZTE0YWFkZWYuLjNmZGUxZDVhNWFlOTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xcbkBAIC05OTAsNyArOTkwLDcgQEAgc3RhdGljIGludCBoNV9idHJ0bF9zZXR1cChzdHJ1Y3QgaDUgKmg1KVxcbiBzdGF0aWMgdm9pZCBoNV9idHJ0bF9vcGVuKHN0cnVjdCBoNSAqaDUpXFxuIHtcXG4gXFx0LypcXG4tXFx0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgZG9lcyBhIGRldmljZV9yZXByb2JlKCkgdGhlIHN1c3BlbmQgaGFuZGxpbmdcXG4rXFx0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgc2NoZWR1bGVzIGEgZGV2aWNlIHJlLXByb2JlIHRoZSBzdXNwZW5kIGhhbmRsaW5nXFxuIFxcdCAqIGRvbmUgYnkgdGhlIGhjaV9zdXNwZW5kX25vdGlmaWVyIGlzIG5vdCBuZWNlc3Nhcnk7IGl0IGFjdHVhbGx5IGNhdXNlc1xcbiBcXHQgKiBkZWxheXMgYW5kIGEgYnVuY2ggb2YgZXJyb3JzIHRvIGdldCBsb2dnZWQsIHNvIGRpc2FibGUgaXQuXFxuIFxcdCAqL1xcbkBAIC0xMDQ5LDQ2ICsxMDQ5LDE1IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc3VzcGVuZChzdHJ1Y3QgaDUgKmg1KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RydWN0IGg1X2J0cnRsX3JlcHJvYmUge1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbi19O1xcbi1cXG4tc3RhdGljIHZvaWQgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlLCB3b3JrKTtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IGRldmljZV9yZXByb2JlKHJlcHJvYmUtXFx1MDAzZWRldik7XFxuLVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FUFJPQkVfREVGRVIpXFxuLVxcdFxcdGRldl9lcnIocmVwcm9iZS1cXHUwMDNlZGV2LCBcXFwiUmVwcm9iZSBlcnJvciAlZFxcXFxuXFxcIiwgcmV0KTtcXG4tXFxuLVxcdHB1dF9kZXZpY2UocmVwcm9iZS1cXHUwMDNlZGV2KTtcXG4tXFx0a2ZyZWUocmVwcm9iZSk7XFxuLVxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGg1X2J0cnRsX3Jlc3VtZShzdHJ1Y3QgaDUgKmg1KVxcbiB7XFxuLVxcdGlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgXFx1MDAyNmg1LVxcdTAwM2VmbGFncykpIHtcXG4tXFx0XFx0c3RydWN0IGg1X2J0cnRsX3JlcHJvYmUgKnJlcHJvYmU7XFxuLVxcbi1cXHRcXHRyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpO1xcbi1cXHRcXHRpZiAoIXJlcHJvYmUpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0XFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcXG4rXFx0aWYgKHRlc3RfYml0KEg1X1dBS0VVUF9ESVNBQkxFLCBcXHUwMDI2aDUtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKFxcdTAwMjZoNS1cXHUwMDNlaHUtXFx1MDAzZXNlcmRldi1cXHUwMDNlZGV2LCAwKTtcXG4gXFxuLVxcdFxcdElOSVRfV09SSyhcXHUwMDI2cmVwcm9iZS1cXHUwMDNld29yaywgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIpO1xcbi1cXHRcXHRyZXByb2JlLVxcdTAwM2VkZXYgPSBnZXRfZGV2aWNlKFxcdTAwMjZoNS1cXHUwMDNlaHUtXFx1MDAzZXNlcmRldi1cXHUwMDNlZGV2KTtcXG4tXFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNnJlcHJvYmUtXFx1MDAzZXdvcmspO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXFx1MDAzZWRldmljZV93YWtlX2dwaW8sIDEpO1xcbitcXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXFx1MDAzZWRldmljZV93YWtlX2dwaW8sIDEpO1xcbiBcXG4tXFx0XFx0aWYgKHRlc3RfYml0KEg1X0hXX0ZMT1dfQ09OVFJPTCwgXFx1MDAyNmg1LVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChoNS1cXHUwMDNlaHUtXFx1MDAzZXNlcmRldiwgdHJ1ZSk7XFxuLVxcdH1cXG4rXFx0aWYgKHRlc3RfYml0KEg1X0hXX0ZMT1dfQ09OVFJPTCwgXFx1MDAyNmg1LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChoNS1cXHUwMDNlaHUtXFx1MDAzZXNlcmRldiwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xcbmluZGV4IDczYWFlMTEyNTA0MjEuLjVhZTczNGNiOTAyNzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmNcXG5AQCAtNzgsNDcgKzc4LDExIEBAIHZvaWQgaXdsX3RyYW5zX2ZyZWVfcmVzdGFydF9saXN0KHZvaWQpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RydWN0IGl3bF90cmFuc19yZXByb2JlIHtcXG4tXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbi1cXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XFxuLX07XFxuLVxcbi1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcmVwcm9iZV93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxcbi17XFxuLVxcdHN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTtcXG4tXFxuLVxcdHJlcHJvYmUgPSBjb250YWluZXJfb2Yod2ssIHR5cGVvZigqcmVwcm9iZSksIHdvcmsud29yayk7XFxuLVxcbi1cXHRpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0ZGV2X2VycihyZXByb2JlLVxcdTAwM2VkZXYsIFxcXCJyZXByb2JlIGZhaWxlZCFcXFxcblxcXCIpO1xcbi1cXHRwdXRfZGV2aWNlKHJlcHJvYmUtXFx1MDAzZWRldik7XFxuLVxcdGtmcmVlKHJlcHJvYmUpO1xcbi1cXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgaXdsX3RyYW5zX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpXFxuIHtcXG4tXFx0c3RydWN0IGl3bF90cmFuc19yZXByb2JlICpyZXByb2JlO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogZ2V0IGEgbW9kdWxlIHJlZmVyZW5jZSB0byBhdm9pZCBkb2luZyB0aGlzIHdoaWxlIHVubG9hZGluZ1xcbi1cXHQgKiBhbnl3YXkgYW5kIHRvIGF2b2lkIHNjaGVkdWxpbmcgYSB3b3JrIHdpdGggY29kZSB0aGF0J3NcXG4tXFx0ICogYmVpbmcgcmVtb3ZlZC5cXG4tXFx0ICovXFxuLVxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XFxuLVxcdFxcdElXTF9FUlIodHJhbnMsIFxcXCJNb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQgLSBhYm9ydFxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcXG4tXFx0aWYgKCFyZXByb2JlKSB7XFxuLVxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFx0cmVwcm9iZS1cXHUwMDNlZGV2ID0gZ2V0X2RldmljZSh0cmFucy1cXHUwMDNlZGV2KTtcXG4tXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJlcHJvYmUtXFx1MDAzZXdvcmssIGl3bF90cmFuc19yZXByb2JlX3drKTtcXG4tXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZyZXByb2JlLVxcdTAwM2V3b3JrLCBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7XFxuK1xcdGlmIChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSh0cmFucy1cXHUwMDNlZGV2LCBkZWxheV9tcykpXFxuK1xcdFxcdElXTF9FUlIodHJhbnMsIFxcXCJDb3VsZCBub3Qgc2NoZWR1bGUgcmVwcm9iZVxcXFxuXFxcIik7XFxuIH1cXG4gXFxuICNkZWZpbmUgSVdMX1RSQU5TX1JFU0VUX09LX1RJTUVcXHQ3IC8qIHNlY29uZHMgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcXG5pbmRleCA3YjJiYWZmZGQyZjU1Li4xY2RkNDBhNmE0OGRhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oXFxuQEAgLTEzMTIsNiArMTMxMiw4IEBAIGludCAgX19tdXN0X2NoZWNrIGRldmljZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTtcXG4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpO1xcbiB2b2lkIGRldmljZV9pbml0aWFsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuIGludCBfX211c3RfY2hlY2sgZGV2aWNlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTtcXG4raW50IF9fbXVzdF9jaGVjayBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpO1xcbiBcXG4gYm9vbCBkZXZpY2VfaXNfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjI2LjQ0MzY4ODU5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQwNzg5ODQxMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUX0hDSVVBUlRcIixcbiAgICBcIkJUX0hDSVVBUlRfM1dJUkVcIixcbiAgICBcIlNFUklBTF9ERVZfQlVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVcIixcbiAgICBcImRldmljZV9yZXByb2JlX3dvcmtfZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gdGhlIGRyaXZlciBjb3JlLCB3aGljaCBhbGxvd3Mgc2NoZWR1bGluZyBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgYSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBkcml2ZXIgbW9kZWwgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyB0aGUgYGhjaV9oNWAgc2VyaWFsIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZjY3M2ZlZjc0ODZhNjk4Yjk0Y2YyOTFkNjU4YmVkYTBlYTU1NzRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDM6MjE6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYmFzZS5oIGIvZHJpdmVycy9iYXNlL2Jhc2UuaFxuaW5kZXggYTViN2FiYzEwZmYwMi4uNjIzNGUzN2RlN2U5OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9iYXNlLmhcbisrKyBiL2RyaXZlcnMvYmFzZS9iYXNlLmhcbkBAIC0xMDYsNiArMTA2LDEwIEBAIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZSB7XG4gICogQGRlYWQ6IFRoaXMgZGV2aWNlIGlzIGN1cnJlbnRseSBlaXRoZXIgaW4gdGhlIHByb2Nlc3Mgb2Ygb3IgaGFzIGJlZW5cbiAgKlx0ICByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQW55IGFzeW5jaHJvbm91cyBldmVudHMgc2NoZWR1bGVkIGZvciB0aGlzXG4gICpcdCAgZGV2aWNlIHNob3VsZCBleGl0IHdpdGhvdXQgdGFraW5nIGFueSBhY3Rpb24uXG4rICogQHNodXRkb3duX2RvbmU6IFNldCBvbmNlIGRldmljZV9zaHV0ZG93bigpIGhhcyByZWFjaGVkIHRoaXMgZGV2aWNlLCB1bmRlclxuKyAqXHQgIHRoZSBkZXZpY2UgbG9jaywgYmVmb3JlIGFueSBzaHV0ZG93biBjYWxsYmFjayBydW5zLiBSZWFkIHVuZGVyIHRoZVxuKyAqXHQgIGRldmljZSBsb2NrLiBBIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoXG4rICpcdCAgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKSBtdXN0IG5vdCBkZXRhY2ggdGhlIGRldmljZSBhbnltb3JlLlxuICAqXG4gICogTm90aGluZyBvdXRzaWRlIG9mIHRoZSBkcml2ZXIgY29yZSBzaG91bGQgZXZlciB0b3VjaCB0aGVzZSBmaWVsZHMuXG4gICovXG5AQCAtMTIwLDYgKzEyNCw3IEBAIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSB7XG4gXHRjaGFyICpkZWZlcnJlZF9wcm9iZV9yZWFzb247XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4gXHR1OCBkZWFkOjE7XG4rXHR1OCBzaHV0ZG93bl9kb25lOjE7XG4gfTtcbiAjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX3BhcmVudChvYmopXHRcXFxuIFx0Y29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmNcbmluZGV4IDRkMDI2NjgyOTQ0ZjIuLjhhN2RiZTRlODM2MmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5AQCAtNDkwNiw2ICs0OTA2LDkgQEAgdm9pZCBkZXZpY2Vfc2h1dGRvd24odm9pZClcbiBcdFx0XHRkZXZpY2VfbG9jayhwYXJlbnQpO1xuIFx0XHRkZXZpY2VfbG9jayhkZXYpO1xuIFxuK1x0XHRpZiAoZGV2LVx1MDAzZXApXG4rXHRcdFx0ZGV2LVx1MDAzZXAtXHUwMDNlc2h1dGRvd25fZG9uZSA9IHRydWU7XG4rXG4gXHRcdC8qIERvbid0IGFsbG93IGFueSBtb3JlIHJ1bnRpbWUgc3VzcGVuZHMgKi9cbiBcdFx0cG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTtcbiBcdFx0cG1fcnVudGltZV9iYXJyaWVyKGRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuY1xuaW5kZXggNjBjMDA1MjIzODQ0ZC4uZDc2NWUxYWU1NjE0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvZGQuY1xuQEAgLTE0MzYsMyArMTQzNiwxMDUgQEAgdm9pZCBkcml2ZXJfZGV0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG4gXHRcdHB1dF9kZXZpY2UoZGV2KTtcbiBcdH1cbiB9XG4rXG4rc3RydWN0IGRldmljZV9yZXByb2JlIHtcbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHN0cnVjdCBkZXZpY2UgKnBhcmVudDtcbitcdGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgKnJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZpY2VfcmVwcm9iZSxcbitcdFx0XHRcdFx0XHQgd29yay53b3JrKTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHJwLVx1MDAzZWRldjtcbitcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IHJwLVx1MDAzZXBhcmVudDtcbitcdGJvb2wgZGV0YWNoZWQgPSBmYWxzZTtcbitcdGludCByZXQ7XG4rXG4rXHRfX2RldmljZV9kcml2ZXJfbG9jayhkZXYsIHBhcmVudCk7XG4rXHQvKlxuK1x0ICogcnAtXHUwMDNlZHJ2IGlzIG9ubHkgZXZlciBjb21wYXJlZCwgbmV2ZXIgZGVyZWZlcmVuY2VkOiB0aGUgZHJpdmVyIGl0XG4rXHQgKiBwb2ludHMgdG8gbWF5IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGJ5IG5vdy5cbitcdCAqL1xuK1x0aWYgKCFkZXYtXHUwMDNlcC1cdTAwM2VkZWFkIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZXAtXHUwMDNlc2h1dGRvd25fZG9uZSBcdTAwMjZcdTAwMjZcbitcdCAgICBkZXYtXHUwMDNlZHJpdmVyIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlZHJpdmVyID09IHJwLVx1MDAzZWRydikge1xuK1x0XHRfX2RldmljZV9yZWxlYXNlX2RyaXZlcihkZXYsIHBhcmVudCk7XG4rXHRcdGRldGFjaGVkID0gdHJ1ZTtcbitcdH1cbitcdF9fZGV2aWNlX2RyaXZlcl91bmxvY2soZGV2LCBwYXJlbnQpO1xuK1xuK1x0aWYgKGRldGFjaGVkKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGRldmljZV9hdHRhY2goKSBtdXN0IHJ1biB3aXRoIHRoZSBwYXJlbnQgbG9ja2VkIG9uIGJ1c2VzXG4rXHRcdCAqIHRoYXQgcmVxdWlyZSBpdCwgbWlycm9yaW5nIGJ1c19yZXNjYW5fZGV2aWNlc19oZWxwZXIoKS5cbitcdFx0ICovXG4rXHRcdGlmIChwYXJlbnQgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VidXMtXHUwMDNlbmVlZF9wYXJlbnRfbG9jaylcbitcdFx0XHRkZXZpY2VfbG9jayhwYXJlbnQpO1xuK1x0XHRyZXQgPSBkZXZpY2VfYXR0YWNoKGRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0ZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgIFwicmUtcHJvYmUgZmFpbGVkLCBkZXZpY2UgbGVmdCB1bmJvdW5kXFxuXCIpO1xuK1x0XHRpZiAocGFyZW50IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlYnVzLVx1MDAzZW5lZWRfcGFyZW50X2xvY2spXG4rXHRcdFx0ZGV2aWNlX3VubG9jayhwYXJlbnQpO1xuK1x0fVxuK1xuK1x0cHV0X2RldmljZShkZXYpO1xuK1x0cHV0X2RldmljZShwYXJlbnQpO1xuK1x0a2ZyZWUocnApO1xuK31cbitcbisvKipcbisgKiBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSAtIHNjaGVkdWxlIGEgZGVmZXJyZWQgZGV0YWNoIGFuZCByZS1wcm9iZVxuKyAqIEBkZXY6IGRldmljZSB0byBkZXRhY2ggYW5kIHJlLXByb2JlXG4rICogQGRlbGF5X21zOiBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSByZS1wcm9iZSBydW5zXG4rICpcbisgKiBTY2hlZHVsZSBhIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgQGRldiBhZnRlciBAZGVsYXlfbXMgbWlsbGlzZWNvbmRzLlxuKyAqIFRoZSByZS1wcm9iZSBpcyBza2lwcGVkIGlmLCBieSB0aGUgdGltZSB0aGUgc2NoZWR1bGVkIHdvcmsgcnVucywgdGhlXG4rICogZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQsIHRoZSBzeXN0ZW0gc2h1dGRvd24gc2VxdWVuY2UgaGFzIHJlYWNoZWQgdGhlXG4rICogZGV2aWNlLCBvciBAZGV2IGlzIG5vIGxvbmdlciBib3VuZCB0byB0aGUgZHJpdmVyIHRoYXQgd2FzIGJvdW5kIGF0XG4rICogc2NoZWR1bGluZyB0aW1lLiBJbiBwYXJ0aWN1bGFyIGFuIGFkbWluaXN0cmF0aXZlIHVuYmluZCBpcyBuZXZlclxuKyAqIHVuZG9uZSBieSBhIHN0YWxlIHJlLXByb2JlLlxuKyAqXG4rICogVGhlIHdvcmsgZnVuY3Rpb24gaXMgYnVpbHQtaW4gdGV4dCwgc28gdGhlIGJvdW5kIGRyaXZlciBtYXkgY2FsbCB0aGlzXG4rICogZnJvbSBpdHMgb3duIGNvZGUgd2l0aG91dCBob2xkaW5nIGEgbW9kdWxlIHJlZmVyZW5jZS4gSWYgdGhlIGRyaXZlclxuKyAqIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdvcmsgcnVucywgZHJpdmVyIHVucmVnaXN0cmF0aW9uIHVuYmluZHNcbisgKiBAZGV2IGZpcnN0IGFuZCB0aGUgc2NoZWR1bGVkIHdvcmsgZG9lcyBub3RoaW5nLlxuKyAqXG4rICogTXVsdGlwbGUgcGVuZGluZyByZS1wcm9iZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhcmUgaW5kaXZpZHVhbGx5IHNhZmU7XG4rICogYSBjYWxsZXIgdGhhdCB3YW50cyBhdCBtb3N0IG9uZSBwZW5kaW5nIHJlLXByb2JlIG11c3QgZ2F0ZSBzY2hlZHVsaW5nXG4rICogaXRzZWxmLlxuKyAqXG4rICogTWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuKyAqXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBkZXYgaXMgbm90IGEgcmVnaXN0ZXJlZCBkZXZpY2VcbisgKiBib3VuZCB0byBhIGRyaXZlciwgLUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXG4rICovXG4raW50IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5X21zKVxuK3tcbitcdHN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnA7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VidXMgfHwgIWRldi1cdTAwM2VwIHx8ICFkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghZGV2LVx1MDAzZWRyaXZlcilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRycCA9IGt6YWxsb2Nfb2JqKCpycCk7XG4rXHRpZiAoIXJwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJwLVx1MDAzZWRldiA9IGdldF9kZXZpY2UoZGV2KTtcbitcdC8qXG4rXHQgKiBQaW4gdGhlIHBhcmVudCB0b286IHRoZSB3b3JrIGxvY2tzIGl0LCBhbmQgYW4gdW5yZWdpc3RlciBvZiBAZGV2XG4rXHQgKiB3b3VsZCBvdGhlcndpc2UgZHJvcCB0aGUgbGFzdCByZWZlcmVuY2UgYmVmb3JlIHRoZSB3b3JrIHJ1bnMuXG4rXHQgKi9cbitcdHJwLVx1MDAzZXBhcmVudCA9IGdldF9kZXZpY2UoZGV2LVx1MDAzZXBhcmVudCk7XG4rXHRycC1cdTAwM2VkcnYgPSBSRUFEX09OQ0UoZGV2LVx1MDAzZWRyaXZlcik7XG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZycC1cdTAwM2V3b3JrLCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKTtcbitcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZycC1cdTAwM2V3b3JrLFxuK1x0XHRcdCAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xuaW5kZXggYmFhNjIxYjNmZWY5My4uMjliZTA1ZDQxNDI5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xuQEAgLTMwMTIsNyArMzAxMiw3IEBAIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9wZXJmb3JtX3BsZHIoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhKVxuIFx0ICogQlQgbmVlZHMgcGNpX3NhdmVfc3RhdGUoKS9wY2lfcmVzdG9yZV9zdGF0ZSgpIGJlY2F1c2UgdGhlIEJUIGRyaXZlclxuIFx0ICogaXMgc3RpbGwgcGFydGlhbGx5IGF0dGFjaGVkIHdoZW4gdGhlIF9QUlIgcnVucyAoaXQgaGFzbid0IGJlZW4gdW5ib3VuZCB5ZXQpLlxuIFx0ICogVGhlIFBDSSBkZXZpY2UgbmVlZHMgdG8gcmVtYWluIG1pbmltYWxseSBmdW5jdGlvbmFsIHNvIHRoYXRcbi1cdCAqIGRldmljZV9yZXByb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KSBjYW4gd29yayBhZnRlcndhcmRcbitcdCAqIHRoZSBkZWZlcnJlZCByZS1wcm9iZSBvZiB0aGUgQlQgZGV2aWNlIGNhbiB3b3JrIGFmdGVyd2FyZFxuIFx0ICovXG4gXHRyZXQgPSBidGludGVsX3BjaWVfYWNwaV9yZXNldF9tZXRob2QoZGF0YSk7XG4gXG5AQCAtMzAyMywxNCArMzAyMywxNiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdH1cbiBcbiBcdGlmICghcmV0KSB7XG4tXHRcdGlmIChkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikpXG4tXHRcdFx0QlRfRVJSKFwiQlQgcmVwcm9iZSBmYWlsZWQgZm9yIEJERjolc1wiLCBwY2lfbmFtZShwZGV2KSk7XG4rXHRcdGlmIChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgMCkpXG4rXHRcdFx0QlRfRVJSKFwiQlQgcmVwcm9iZSBzY2hlZHVsaW5nIGZhaWxlZCBmb3IgQkRGOiVzXCIsXG4rXHRcdFx0ICAgICAgIHBjaV9uYW1lKHBkZXYpKTtcbiBcdH1cbiB9XG4gXG4gLypcbi0gKiBJc3N1ZSBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IGFuZCBoYW5kIHRlYXJkb3duL3JlLWluaXQgb2ZmIHRvIHRoZSBQQ0lcbi0gKiBjb3JlIHZpYSBkZXZpY2VfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCdzIGNvbnRyYWN0LlxuKyAqIElzc3VlIGEgRnVuY3Rpb24gTGV2ZWwgUmVzZXQgYW5kIGhhbmQgdGVhcmRvd24vcmUtaW5pdCBvZmYgdG8gdGhlXG4rICogZHJpdmVyIGNvcmUgdmlhIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCksIG1pcnJvcmluZyB0aGUgUExEUiBwYXRoJ3NcbisgKiBjb250cmFjdC5cbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpIGFuZCBtdXN0IGhhdmUgYWxyZWFkeVxuICAqIGRpc2FibGVkIGludGVycnVwdHMgYW5kIGRyYWluZWQgYm90aCByeF93b3JrIGFuZCBjb3JlZHVtcF93b3JrLlxuQEAgLTMwNTIsMTQgKzMwNTQsMTIgQEAgc3RhdGljIGludCBidGludGVsX3BjaWVfcGVyZm9ybV9mbHIoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0LyogZGV2aWNlX3JlcHJvYmUoKSBhbHdheXMgZGV0YWNoZXMgdGhlIGRyaXZlciBmaXJzdCAocnVubmluZ1xuLVx0ICogLnJlbW92ZSgpLCB3aGljaCBmcmVlcyAnZGF0YScpOyBhbnkgcmUtcHJvYmUgZmFpbHVyZSBsZWF2ZXMgdGhlXG4tXHQgKiBkZXZpY2UgdW5ib3VuZCBidXQgJ2RhdGEnIGlzIGFscmVhZHkgZ29uZSwgc28ganVzdCBsb2cgaXQuXG4tXHQgKi9cbi1cdGlmIChkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikpXG4tXHRcdEJUX0VSUihcIkJUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXNcIiwgcGNpX25hbWUocGRldikpO1xuK1x0ZXJyID0gZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIDApO1xuK1x0aWYgKGVycilcbitcdFx0QlRfRVJSKFwiQlQgcmVwcm9iZSBzY2hlZHVsaW5nIGZhaWxlZCBmb3IgQkRGOiVzXCIsXG4rXHRcdCAgICAgICBwY2lfbmFtZShwZGV2KSk7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spXG5AQCAtMzA5MCwxMSArMzA5MCwxNSBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuIFxuIFx0YnRfZGV2X2RiZyhkYXRhLVx1MDAzZWhkZXYsIFwiUmVsZWFzZSBibHVldG9vdGggaW50ZXJmYWNlXCIpO1xuIFxuLVx0LyogQm90aCByZXNldCBwYXRocyBmb2xsb3cgdGhlIHNhbWUgY29udHJhY3Q6IG9uIHN1Y2Nlc3MgdGhleVxuLVx0ICogZGVzdHJveSAnZGF0YScgdmlhIGRldmljZV9yZXByb2JlKCkgKGEgZnJlc2ggcHJvYmUgcmUtSU5JVF9XT1JLc1xuLVx0ICogdGhlIGR1bXAgd29ya2VycyB3aXRoIGRpc2FibGUgY291bnQgMCksIHNvIGVuYWJsZV93b3JrKCkgbXVzdFxuLVx0ICogTk9UIGJlIGNhbGxlZCBvbiB0aGUgc3VjY2VzcyBwYXRoLiBPbmx5IHRoZSBGTFIgcGF0aCBjYW4gZmFpbFxuLVx0ICogd2l0aCAnZGF0YScgc3RpbGwgYWxpdmUsIGluIHdoaWNoIGNhc2Ugd2UgYmFsYW5jZSB0aGVcbitcdC8qIEJvdGggcmVzZXQgcGF0aHMgZm9sbG93IHRoZSBzYW1lIGNvbnRyYWN0OiBvbiBzdWNjZXNzIHRoZVxuK1x0ICogZGVmZXJyZWQgcmUtcHJvYmUgc2NoZWR1bGVkIHdpdGggZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKVxuK1x0ICogZGVzdHJveXMgJ2RhdGEnIGJ5IHJlLXJ1bm5pbmcgLnByb2JlKCkgKHdoaWNoIHJlLUlOSVRfV09SS3MgdGhlXG4rXHQgKiBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3QgTk9UIGJlXG4rXHQgKiBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gJ2RhdGEnIHN0YXlzIGFsaXZlIHVudGlsIHRoZSBkZWZlcnJlZFxuK1x0ICogZGV0YWNoIHJ1bnM7IGluIHRoaXMgd2luZG93IG5ldyBhY3Rpdml0eSBpcyBmZW5jZWQgYnlcbitcdCAqIEJUSU5URUxfUENJRV9SRUNPVkVSWV9JTl9QUk9HUkVTUywgdGhlIG1hc2tlZCBpbnRlcnJ1cHRzIGFuZCB0aGVcbitcdCAqIGRpc2FibGVkIGR1bXAgd29ya2Vycy4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwgd2l0aCBub1xuK1x0ICogcmUtcHJvYmUgc2NoZWR1bGVkLCBpbiB3aGljaCBjYXNlIHdlIGJhbGFuY2UgdGhlXG4gXHQgKiBkaXNhYmxlX3dvcmtfc3luYygpIGNhbGxzIGFib3ZlIHNvIGEgbGF0ZXIgc3VjY2Vzc2Z1bCByZXNldCBpc1xuIFx0ICogbm90IHBlcm1hbmVudGx5IGJsb2NrZWQuXG4gXHQgKlxuQEAgLTM0NjAsMTMgKzM0NjQsMTIgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmRhdGEtXHUwMDNlZnd0cmlnZ2VyX3dvcmspO1xuIFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2ZGF0YS1cdTAwM2VtYm94X3dvcmspO1xuIFxuLVx0LyogQ2FuY2VsIHBlbmRpbmcgcmVzZXQgd29yay4gU2tpcCBvbmx5IHdoZW4gcmVtb3ZlKCkgaXMgY2FsbGVkIGZyb21cbi1cdCAqIHdpdGhpbiB0aGUgcmVzZXQgd29yayBpdHNlbGYgKFBMRFIgZGV2aWNlX3JlcHJvYmUgcGF0aCkgdG8gYXZvaWRcbi1cdCAqIGRlYWRsb2NrLiBjdXJyZW50X3dvcmsoKSByZXR1cm5zIHRoZSB3b3JrX3N0cnVjdCBvZiB0aGUgY2FsbGVyIGlmXG4tXHQgKiB3ZSBhcmUgaW4gYSB3b3JrcXVldWUgY29udGV4dC5cbitcdC8qIFRoZSBkZWZlcnJlZCByZS1wcm9iZSB0cmlnZ2VycyAucmVtb3ZlKCkgZnJvbSB0aGUgZHJpdmVyIGNvcmUnc1xuK1x0ICogd29yayBpdGVtLCBuZXZlciBmcm9tIHJlc2V0X3dvcmsgaXRzZWxmLCBzbyB0aGlzIG5vIGxvbmdlciBydW5zXG4rXHQgKiBuZXN0ZWQgaW4gcmVzZXRfd29yazsgZGlzYWJsZV93b3JrX3N5bmMoKSBhbHNvIGd1YXJhbnRlZXMgdGhlXG4rXHQgKiByZXNldCB3b3JrIGhhcyBmdWxseSByZXR1cm5lZCBiZWZvcmUgJ2RhdGEnIGlzIGZyZWVkLlxuIFx0ICovXG4tXHRpZiAoY3VycmVudF93b3JrKCkgIT0gXHUwMDI2ZGF0YS1cdTAwM2VyZXNldF93b3JrKVxuLVx0XHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZkYXRhLVx1MDAzZXJlc2V0X3dvcmspO1xuK1x0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2ZGF0YS1cdTAwM2VyZXNldF93b3JrKTtcbiBcbiBcdGJ0aW50ZWxfcGNpZV9kaXNhYmxlX2ludGVycnVwdHMoZGF0YSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xuaW5kZXggYjE5OTllMTRhYWRlZi4uM2ZkZTFkNWE1YWU5OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xuQEAgLTk5MCw3ICs5OTAsNyBAQCBzdGF0aWMgaW50IGg1X2J0cnRsX3NldHVwKHN0cnVjdCBoNSAqaDUpXG4gc3RhdGljIHZvaWQgaDVfYnRydGxfb3BlbihzdHJ1Y3QgaDUgKmg1KVxuIHtcbiBcdC8qXG4tXHQgKiBTaW5jZSBoNV9idHJ0bF9yZXN1bWUoKSBkb2VzIGEgZGV2aWNlX3JlcHJvYmUoKSB0aGUgc3VzcGVuZCBoYW5kbGluZ1xuK1x0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgc2NoZWR1bGVzIGEgZGV2aWNlIHJlLXByb2JlIHRoZSBzdXNwZW5kIGhhbmRsaW5nXG4gXHQgKiBkb25lIGJ5IHRoZSBoY2lfc3VzcGVuZF9ub3RpZmllciBpcyBub3QgbmVjZXNzYXJ5OyBpdCBhY3R1YWxseSBjYXVzZXNcbiBcdCAqIGRlbGF5cyBhbmQgYSBidW5jaCBvZiBlcnJvcnMgdG8gZ2V0IGxvZ2dlZCwgc28gZGlzYWJsZSBpdC5cbiBcdCAqL1xuQEAgLTEwNDksNDYgKzEwNDksMTUgQEAgc3RhdGljIGludCBoNV9idHJ0bF9zdXNwZW5kKHN0cnVjdCBoNSAqaDUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RydWN0IGg1X2J0cnRsX3JlcHJvYmUge1xuLVx0c3RydWN0IGRldmljZSAqZGV2O1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4tfTtcbi1cbi1zdGF0aWMgdm9pZCBoNV9idHJ0bF9yZXByb2JlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IGg1X2J0cnRsX3JlcHJvYmUgKnJlcHJvYmUgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGg1X2J0cnRsX3JlcHJvYmUsIHdvcmspO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IGRldmljZV9yZXByb2JlKHJlcHJvYmUtXHUwMDNlZGV2KTtcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRVBST0JFX0RFRkVSKVxuLVx0XHRkZXZfZXJyKHJlcHJvYmUtXHUwMDNlZGV2LCBcIlJlcHJvYmUgZXJyb3IgJWRcXG5cIiwgcmV0KTtcbi1cbi1cdHB1dF9kZXZpY2UocmVwcm9iZS1cdTAwM2VkZXYpO1xuLVx0a2ZyZWUocmVwcm9iZSk7XG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbi19XG4tXG4gc3RhdGljIGludCBoNV9idHJ0bF9yZXN1bWUoc3RydWN0IGg1ICpoNSlcbiB7XG4tXHRpZiAodGVzdF9iaXQoSDVfV0FLRVVQX0RJU0FCTEUsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSkge1xuLVx0XHRzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdFx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcbi1cdFx0aWYgKCFyZXByb2JlKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0XHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xuK1x0aWYgKHRlc3RfYml0KEg1X1dBS0VVUF9ESVNBQkxFLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybiBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcdTAwMjZoNS1cdTAwM2VodS1cdTAwM2VzZXJkZXYtXHUwMDNlZGV2LCAwKTtcbiBcbi1cdFx0SU5JVF9XT1JLKFx1MDAyNnJlcHJvYmUtXHUwMDNld29yaywgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIpO1xuLVx0XHRyZXByb2JlLVx1MDAzZWRldiA9IGdldF9kZXZpY2UoXHUwMDI2aDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LVx1MDAzZWRldik7XG4tXHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNnJlcHJvYmUtXHUwMDNld29yayk7XG4tXHR9IGVsc2Uge1xuLVx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXHUwMDNlZGV2aWNlX3dha2VfZ3BpbywgMSk7XG4rXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXHUwMDNlZGV2aWNlX3dha2VfZ3BpbywgMSk7XG4gXG4tXHRcdGlmICh0ZXN0X2JpdChINV9IV19GTE9XX0NPTlRST0wsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woaDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LCB0cnVlKTtcbi1cdH1cbitcdGlmICh0ZXN0X2JpdChINV9IV19GTE9XX0NPTlRST0wsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSlcbitcdFx0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKGg1LVx1MDAzZWh1LVx1MDAzZXNlcmRldiwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmNcbmluZGV4IDczYWFlMTEyNTA0MjEuLjVhZTczNGNiOTAyNzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jXG5AQCAtNzgsNDcgKzc4LDExIEBAIHZvaWQgaXdsX3RyYW5zX2ZyZWVfcmVzdGFydF9saXN0KHZvaWQpXG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4tXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4tfTtcbi1cbi1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcmVwcm9iZV93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuLXtcbi1cdHN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdHJlcHJvYmUgPSBjb250YWluZXJfb2Yod2ssIHR5cGVvZigqcmVwcm9iZSksIHdvcmsud29yayk7XG4tXG4tXHRpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS1cdTAwM2VkZXYpKVxuLVx0XHRkZXZfZXJyKHJlcHJvYmUtXHUwMDNlZGV2LCBcInJlcHJvYmUgZmFpbGVkIVxcblwiKTtcbi1cdHB1dF9kZXZpY2UocmVwcm9iZS1cdTAwM2VkZXYpO1xuLVx0a2ZyZWUocmVwcm9iZSk7XG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgaXdsX3RyYW5zX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGRlbGF5X21zKVxuIHtcbi1cdHN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdC8qXG4tXHQgKiBnZXQgYSBtb2R1bGUgcmVmZXJlbmNlIHRvIGF2b2lkIGRvaW5nIHRoaXMgd2hpbGUgdW5sb2FkaW5nXG4tXHQgKiBhbnl3YXkgYW5kIHRvIGF2b2lkIHNjaGVkdWxpbmcgYSB3b3JrIHdpdGggY29kZSB0aGF0J3Ncbi1cdCAqIGJlaW5nIHJlbW92ZWQuXG4tXHQgKi9cbi1cdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XG4tXHRcdElXTF9FUlIodHJhbnMsIFwiTW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkIC0gYWJvcnRcXG5cIik7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdHJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7XG4tXHRpZiAoIXJlcHJvYmUpIHtcbi1cdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cdHJlcHJvYmUtXHUwMDNlZGV2ID0gZ2V0X2RldmljZSh0cmFucy1cdTAwM2VkZXYpO1xuLVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cmVwcm9iZS1cdTAwM2V3b3JrLCBpd2xfdHJhbnNfcmVwcm9iZV93ayk7XG4tXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cmVwcm9iZS1cdTAwM2V3b3JrLCBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7XG4rXHRpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUodHJhbnMtXHUwMDNlZGV2LCBkZWxheV9tcykpXG4rXHRcdElXTF9FUlIodHJhbnMsIFwiQ291bGQgbm90IHNjaGVkdWxlIHJlcHJvYmVcXG5cIik7XG4gfVxuIFxuICNkZWZpbmUgSVdMX1RSQU5TX1JFU0VUX09LX1RJTUVcdDcgLyogc2Vjb25kcyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oXG5pbmRleCA3YjJiYWZmZGQyZjU1Li4xY2RkNDBhNmE0OGRhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuQEAgLTEzMTIsNiArMTMxMiw4IEBAIGludCAgX19tdXN0X2NoZWNrIGRldmljZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTtcbiBpbnQgX19tdXN0X2NoZWNrIGRyaXZlcl9hdHRhY2goY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydik7XG4gdm9pZCBkZXZpY2VfaW5pdGlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIGludCBfX211c3RfY2hlY2sgZGV2aWNlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTtcbitpbnQgX19tdXN0X2NoZWNrIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkZWxheV9tcyk7XG4gXG4gYm9vbCBkZXZpY2VfaXNfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjI2LjQ0MzY5MDI2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjAyNjM2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAg4oCTIGl0IHNlZW1zIHRoZXkncmUgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGV5J3ZlIGRyb3BwZWQgY3VzdG9tIHJlcHJvYmUgc2NoZWR1bGluZyBpbiBmYXZvciBvZiB0aGlzIGdlbmVyaWMgZnVuY3Rpb24gd2l0aGluIHRoZSBkcml2ZXIgY29yZSAoYGRyaXZlcnMvYmFzZS9kZC5jYCkuIFRoYXQncyBhIGNvcmUgY2hhbmdlLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBnb2VzIHRvIGZ1enppbmc7IHRoZSBkcml2ZXIgY29yZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSB0YXJnZXQuXG5cblRoZSBuZXcgZnVuY3Rpb24sIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAsIGlzIHRoZSBrZXksIG9idmlvdXNseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlYWNoYWJpbGl0eSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZyb20gYSBxdWljayBzY2FuLCBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBidGludGVsX3BjaWUuY2AsIGBoY2lfaDUuY2AsIGFuZCBgaXdsLXRyYW5zLmNgLiBIbW0sIGBidGludGVsYCBhbmQgYGl3bHdpZmlgIGFyZSBQQ0llIGRyaXZlcnMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBgaGNpX2g1YCBpcyBhIHNlcmlhbCBkcml2ZXIuIENhbiBJIGV2ZW4gZ2V0IHRvIGBoY2lfaDVgIGZyb20gUUVNVT8gQWgsIHllcywgYGhjaV91YXJ0YC4gT2theSwgc28gYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCAqaXMqIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBmcm9tIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIGl0cyBhY2Nlc3NpYmlsaXR5LiBMZXQgbWUgY2hlY2sgYGRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jYCBhbmQgYWxzbyBgZHJpdmVycy9iYXNlL2RkLmNgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgYW55IGRyaXZlciBjYW4gY2FsbCBpdC4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCB0aGF0J3MgYSBjZW50cmFsIGRyaXZlciBmdW5jdGlvbi5cblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciB0aGUgY29yZSBmdW5jdGlvbiBpdHNlbGYsIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgaXMgaW4gYGRyaXZlcnMvYmFzZS9kZC5jYCwgc28gaXQncyBhbHdheXMgYnVpbHQuIEZvciBgaGNpX2g1YCwgSSBuZWVkIHRvIGNoZWNrIGZvciBgQlRfSENJVUFSVF8zV0lSRWAuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjMzLjgwMzk1NjAyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNjAxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlRfSENJVUFSVF8zV0lSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9MTc1PWNvbmZpZyBCVF9IQ0lVQVJUX0xMXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4Ni1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjE4Nzpjb25maWcgQlRfSENJVUFSVF8zV0lSRVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTg4LVxcdGJvb2wgXFxcIlRocmVlLXdpcmUgVUFSVCAoSDUpIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjMzLjg1MDY2NTc5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjM3NjE0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMgb2YgQlRcXF9IQ0lVQVJUXFxfM1dJUkUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYEJUX0hDSVVBUlRfM1dJUkVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFjdHVhbGx5ICpkb2VzKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gVGhhdCdzIGEgdml0YWwgZmlyc3Qgc3RlcCwgcmlnaHQ/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyBpcyBpdCBpbnRpbWF0ZWx5IGNvbm5lY3RlZCB0bz8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgZGVwZW5kZW5jaWVzLiBJcyBpdCBkZXBlbmRlbnQgb24gc29tZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uPyBQZXJoYXBzIHNwZWNpZmljIFVBUlQgZHJpdmVycyBvciBwaW4gY29uZmlndXJhdGlvbnM/IE9yIG1heWJlIHNvbWUgb3RoZXIgaGlnaGVyLWxldmVsIEJsdWV0b290aCBwcm90b2NvbCBzdGFja3M/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGNvbm5lY3Rpb25zIHRoaXMgdGhpbmcgaGFzIHdpdGggdGhlIHdpZGVyIHN5c3RlbS4gSSBrbm93IHRoaXMgd2lsbCBkaWN0YXRlIHRoZSBicm9hZGVyIHN5c3RlbSByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMTozNi44NzQ0MjkzODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2OTk5OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJUX0hDSVVBUlRfM1dJUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTE3NT1jb25maWcgQlRfSENJVUFSVF9MTFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0xODYtXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZzoxODc6Y29uZmlnIEJUX0hDSVVBUlRfM1dJUkVcXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJUaHJlZS13aXJlIFVBUlQgKEg1KSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMTozNi45MjIxMzY1NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODIxNTUxNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgQ2hlY2twb2ludCoqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEJlZm9yZSBJIGRpdmUgYW55IGRlZXBlciBpbnRvIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24uIEkgY2FuJ3QganVzdCBibGluZGx5IHByb2NlZWQ7IEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29tcG9uZW50IGlzIGFjdHVhbGx5IGJlaW5nLi4uIHdlbGwsIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBnbyByZWFkIHRoZSBLY29uZmlnIGZpbGUuIFRoYXQncyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gZ3JvayB3aGF0IHRoZSBtYWludGFpbmVyJ3Mgb3B0aW9ucyBhcmUuIFdoYXQgdmFyaWFibGVzIGFtIEkgZ29pbmcgdG8gaGF2ZSB0byBjb25zaWRlcj9cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjM5Ljc0MzY5MTI3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdCAgSENJTEwgKEhDSSBMb3cgTGV2ZWwpIGlzIGEgc2VyaWFsIHByb3RvY29sIGZvciBjb21tdW5pY2F0aW9uXFxuIDE4MTpcXHRcXHQgIGJldHdlZW4gQmx1ZXRvb3RoIGRldmljZSBhbmQgaG9zdC4gVGhpcyBwcm90b2NvbCBpcyByZXF1aXJlZCBmb3JcXG4gMTgyOlxcdFxcdCAgc2VyaWFsIEJsdWV0b290aCBkZXZpY2VzIHRoYXQgYXJlIGJhc2VkIG9uIFRleGFzIEluc3RydW1lbnRzJ1xcbiAxODM6XFx0XFx0ICBCUkYgY2hpcHMuXFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEhDSUxMIHByb3RvY29sLlxcbiAxODY6XFx0XFxuIDE4NzpcXHRjb25maWcgQlRfSENJVUFSVF8zV0lSRVxcbiAxODg6XFx0XFx0Ym9vbCBcXFwiVGhyZWUtd2lyZSBVQVJUIChINSkgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gMTg5OlxcdFxcdGRlcGVuZHMgb24gQlRfSENJVUFSVFxcbiAxOTA6XFx0XFx0ZGVwZW5kcyBvbiBCVF9IQ0lVQVJUX1NFUkRFVlxcbiAxOTE6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAxOTI6XFx0XFx0aGVscFxcbiAxOTM6XFx0XFx0ICBUaGUgSENJIFRocmVlLXdpcmUgVUFSVCBUcmFuc3BvcnQgTGF5ZXIgbWFrZXMgaXQgcG9zc2libGUgdG9cXG4gMTk0OlxcdFxcdCAgdXNlciB0aGUgQmx1ZXRvb3RoIEhDSSBvdmVyIGEgc2VyaWFsIHBvcnQgaW50ZXJmYWNlLiBUaGUgSENJXFxuIDE5NTpcXHRcXHQgIFRocmVlLXdpcmUgVUFSVCBUcmFuc3BvcnQgTGF5ZXIgYXNzdW1lcyB0aGF0IHRoZSBVQVJUXFxuIDE5NjpcXHRcXHQgIGNvbW11bmljYXRpb24gbWF5IGhhdmUgYml0IGVycm9ycywgb3ZlcnJ1biBlcnJvcnMgb3IgYnVyc3RcXG4gMTk3OlxcdFxcdCAgZXJyb3JzIGFuZCB0aGVyZWJ5IG1ha2luZyBDVFMvUlRTIGxpbmVzIHVubmVjZXNzYXJ5LlxcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBUaHJlZS13aXJlIFVBUlQgcHJvdG9jb2wuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjM5Ljc0Mzc2NTg5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTQwNjE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBCbHVldG9vdGggSENJIFVBUlQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYEJUX0hDSVVBUlRfM1dJUkVgIGlzIGJ1aWx0IG9uIHRvcCBvZiBgQlRfSENJVUFSVGAsIGFuZCB0aGF0IGluIHR1cm4gcmVsaWVzIG9uIGBCVF9IQ0lVQVJUX1NFUkRFVmAuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkOyBpdCdzIGEgY29tbW9uIGxheWVyaW5nIHBhdHRlcm4gZm9yIEJsdWV0b290aCBIQ0kgVUFSVCBpbXBsZW1lbnRhdGlvbnMuIFNvLCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gYEJUX0hDSVVBUlRfM1dJUkVgLCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGBCVF9IQ0lVQVJUYCBwcm92aWRlcywgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGZlYXR1cmUgc2V0IGFuZCBkZXNpZ24gY2hvaWNlcyBhcmUgc29saWQuIFRoYXQgd2F5LCBhbnkgaXNzdWVzIEkgdW5jb3ZlciBjYW4gYmUgcXVpY2tseSB0aWVkIGJhY2sgdG8gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjE6NDQuMjM3ODMwNzM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE5OTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlRfSENJVUFSVCRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTkzPWNvbmZpZyBCVF9IQ0lCVFNESU9cXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTAzLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTA0OmNvbmZpZyBCVF9IQ0lVQVJUXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIkhDSSBVQVJUIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjE6NDQuMjg1MDM3MzEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjIwNDY1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBCVF9IQ0lVQVJUKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgQlRfSENJVUFSVGAgY29kZSBhZ2Fpbi4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIEJsdWV0b290aCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIG92ZXIgVUFSVCBpcyBiZWluZyBpbXBsZW1lbnRlZCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBhIHNwZWNpZmljIGlzc3VlIG9yIHBlcmhhcHMgSSdtIGludGVncmF0aW5nIGEgbmV3IGNvbXBvbmVudCBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIElzIGl0IGZvciBkZWJ1Z2dpbmcgYSBjb25uZWN0aW9uIHByb2JsZW0/IE1heWJlIEknbSBvcHRpbWl6aW5nIHBvd2VyIGNvbnN1bXB0aW9uLiBUaGUgYWNyb255bSBpbW1lZGlhdGVseSBicmluZ3MgdXAgYWxsIHNvcnRzIG9mIHBvdGVudGlhbCBhdmVudWVzIHRvIGV4cGxvcmUuIFRpbWUgdG8gZ2V0IG15IGhlYWQgYmFjayBpbiB0aGUgZ2FtZSBhbmQgdHJhY2UgdGhlIG51YW5jZXMgb2YgdGhpcyBVQVJULWJhc2VkIEhDSS4gSSBleHBlY3QgdG8gYmUgc2NydXRpbml6aW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIGZyYW1pbmcsIGFuZCBkYXRhIGJ1ZmZlciBtYW5hZ2VtZW50LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgd2l0aGluIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjQ3LjM0NzA4Nzg2OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXG4gMTAxOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEJsdWV0b290aCBTRElPIGRldmljZXMgaW50byB0aGVcXG4gMTAyOlxcdFxcdCAga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidHNkaW8pLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgQlRfSENJVUFSVFxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIkhDSSBVQVJUIGRyaXZlclxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVMgfHwgIVNFUklBTF9ERVZfQlVTXFxuIDEwNzpcXHRcXHRkZXBlbmRzIG9uIE5WTUVNIHx8ICFOVk1FTVxcbiAxMDg6XFx0XFx0ZGVwZW5kcyBvbiBQT1dFUl9TRVFVRU5DSU5HIHx8ICFQT1dFUl9TRVFVRU5DSU5HXFxuIDEwOTpcXHRcXHRkZXBlbmRzIG9uIFRUWVxcbiAxMTA6XFx0XFx0aGVscFxcbiAxMTE6XFx0XFx0ICBCbHVldG9vdGggSENJIFVBUlQgZHJpdmVyLlxcbiAxMTI6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgQmx1ZXRvb3RoIGRldmljZXMgd2l0aFxcbiAxMTM6XFx0XFx0ICBzZXJpYWwgcG9ydCBpbnRlcmZhY2UuIFlvdSB3aWxsIGFsc28gbmVlZCB0aGlzIGRyaXZlciBpZiB5b3UgaGF2ZVxcbiAxMTQ6XFx0XFx0ICBVQVJUIGJhc2VkIEJsdWV0b290aCBQQ01DSUEgYW5kIENGIGRldmljZXMgbGlrZSBYaXJjb20gQ3JlZGl0IENhcmRcXG4gMTE1OlxcdFxcdCAgYWRhcHRlciBhbmQgQnJhaW5Cb3hlcyBCbHVldG9vdGggUEMgQ2FyZC5cXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgQmx1ZXRvb3RoIFVBUlQgZGV2aWNlcyBpbnRvIHRoZVxcbiAxMTg6XFx0XFx0ICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUgKGhjaV91YXJ0KS5cXG4gMTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMTo0Ny4zNDcxNjk0ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NDU1MDA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGEgU3BlY2lmaWMgQ29uZmlndXJhdGlvbiBWYXJpYWJsZSoqXG5cbkFscmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEknbSBkZWVwIGludG8gdGhpcyBhbmFseXNpcyBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgYSBzbWFsbCBkZXRhaWwgY2FuIHNvbWV0aW1lcyBiZSB0aGUgc291cmNlIG9mIGEgbGFyZ2UgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBVQVJUIHNlcmlhbCBkZXZpY2UgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBgQlRfSENJVUFSVF9TRVJERVZgIHNldHRpbmcgaXMgd2hhdCBJIGV4cGVjdCBpdCB0byBiZS4gVGhpcyBpbXBhY3RzIEJsdWV0b290aCBob3N0IGNvbnRyb2xsZXIgaW50ZXJmYWNlIChIQ0kpIFVBUlQgc2VyaWFsIGRldmljZS4gVGhhdCBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgc3RhY2ssIGFuZCwgaWYgbm90IGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBpdCBjb3VsZCBleHBsYWluIHNvbWUgd2VpcmQgYmVoYXZpb3IgSSdtIHNlZWluZy4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjUwLjcxMTcyMjQ1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1NTA1NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJUX0hDSVVBUlRfU0VSREVWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0xMDQ9Y29uZmlnIEJUX0hDSVVBUlRcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTE5LVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTIwOmNvbmZpZyBCVF9IQ0lVQVJUX1NFUkRFVlxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTIxLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjE6NTAuNzgzMjc3Mjg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTI3ODQ3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlY29kaW5nIGBCVF9IQ0lVQVJUX1NFUkRFVmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIG5vdGF0aW9uIGBCVF9IQ0lVQVJUX1NFUkRFVmAgaW1tZWRpYXRlbHkgc2NyZWFtcyBhIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3Q6IEJsdWV0b290aCwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoSENJKSwgVUFSVCBjb21tdW5pY2F0aW9uLCBhbmQgc2VyaWFsIGRldmljZSBkcml2ZXJzLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBhIEJsdWV0b290aCBjb250cm9sbGVyIChsaWtlbHkgaW50ZWdyYXRlZCBvciBleHRlcm5hbCkgYW5kIHRoZSBob3N0IHN5c3RlbSwgZm9jdXNpbmcgb24gdGhlIHNlcmlhbCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgdXNlZCB0byB0cmFuc21pdCBIQ0kgY29tbWFuZHMgYW5kIGRhdGEuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFib3V0IHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiwgaG93IGl0IGhhbmRsZXMgZnJhbWluZyBvZiBIQ0kgcGFja2V0cyBvdmVyIHRoZSBVQVJULCBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcyAoaWYgYW55KSwgZXJyb3IgaGFuZGxpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzLiBUaGUgXCJTRVJERVZcIiBwb3J0aW9uIGRlZmluaXRlbHkgc3VnZ2VzdHMgYSBzdGFuZGFyZCBMaW51eCBzZXJpYWwgZGV2aWNlIGRyaXZlciBpbnRlcmZhY2UsIG1lYW5pbmcgaXQgc2hvdWxkIGludGVncmF0ZSByZWxhdGl2ZWx5IHNlYW1sZXNzbHkgd2l0aCB0aGUgYnJvYWRlciBzZXJpYWwgZnJhbWV3b3JrLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgaG93IHRoaXMgZHJpdmVyIGhvb2tzIGludG8gdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBzZXJpYWwgZHJpdmVyIGxheWVyIGFuZCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0IHVzZXMgdG8gY3VzdG9taXplIHRoZSBVQVJUIGNvbW11bmljYXRpb24gZm9yIEJsdWV0b290aC4gSG9wZWZ1bGx5LCB0aGUgY29kZSBjb21tZW50cyBhcmUgdGhvcm91Z2ggZW5vdWdoIHRvIGd1aWRlIG1lIHRocm91Z2ggdGhlIGZsb3cgY29udHJvbCBtZWNoYW5pc21zIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMTo1NC41NzYwNjQ1MDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0XFx0ICBhZGFwdGVyIGFuZCBCcmFpbkJveGVzIEJsdWV0b290aCBQQyBDYXJkLlxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBCbHVldG9vdGggVUFSVCBkZXZpY2VzIGludG8gdGhlXFxuIDExODpcXHRcXHQgIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZSAoaGNpX3VhcnQpLlxcbiAxMTk6XFx0XFxuIDEyMDpcXHRjb25maWcgQlRfSENJVUFSVF9TRVJERVZcXG4gMTIxOlxcdFxcdGJvb2xcXG4gMTIyOlxcdFxcdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVMgXFx1MDAyNlxcdTAwMjYgQlRfSENJVUFSVFxcbiAxMjM6XFx0XFx0ZGVmYXVsdCB5XFxuIDEyNDpcXHRcXG4gMTI1OlxcdGNvbmZpZyBCVF9IQ0lVQVJUX0g0XFxuIDEyNjpcXHRcXHRib29sIFxcXCJVQVJUIChINCkgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gMTI3OlxcdFxcdGRlcGVuZHMgb24gQlRfSENJVUFSVFxcbiAxMjg6XFx0XFx0aGVscFxcbiAxMjk6XFx0XFx0ICBVQVJUIChINCkgaXMgc2VyaWFsIHByb3RvY29sIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gQmx1ZXRvb3RoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjU0LjU3NjEzNDY5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTIxMTYzNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGV2aWNlIFJlcHJvYmUgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgU0VSSUFMX0RFVl9CVVNgIGp1bXBzIG91dCBhcyBhIGtleSBlbGVtZW50LiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMuIE5vdywgYWJvdXQgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpdHNlbGYuLi4gSXQgbGl2ZXMgaW4gYGRyaXZlcnMvYmFzZS9kZC5jYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGludHJvZHVjaW5nIGEgbmV3IGZ1bmN0aW9uIHRvIHRoZSBkcml2ZXIgY29yZSwgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCwgZW5hYmxpbmcgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciBtb2RlbCwgYSBkZWZpbml0ZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBkZWZpbml0ZWx5IGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgaXQncyBleHBvcnRlZC4gQWgsIHllcywgYEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKTtgLiBUaGF0J3MgaW1wb3J0YW50OyBpdCdzIGFjY2Vzc2libGUuIFNpbmNlIGl0J3MgYSBjb3JlIGZ1bmN0aW9uLCBpdCdzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBzcGVuZCBzb21lIHRpbWUgZnV6emluZyBpdC5cblxuSG9sZCBvbiBhIG1pbnV0ZS4uLiBMZXQgbWUgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBSaWdodCwgaXQncyB1c2VkIGluIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYC4gYGJ0aW50ZWxfcGNpZWAgYW5kIGBpd2x3aWZpYCBhcmUgYm90aCBQQ0llIGRyaXZlcnMuIEFuZCBgaGNpX2g1YCBpcyBhIHNlcmlhbCBkcml2ZXIuIE9rYXksIGNhbiBJIGFjdHVhbGx5IHJlYWNoIGBoY2lfaDVgIGluc2lkZSBvZiBRRU1VPyBZZXMsIHZpYSBgaGNpX3VhcnRgIGFuZCBgc2VyZGV2YC4gRXhjZWxsZW50LCB0aGF04oCZcyBncmVhdCBuZXdzIVxuXG5TbywgdGhlIG9wdGltYWwgY29uZmlndXJhdGlvbiBmb3IgZnV6emluZyB0aGlzIHdvdWxkIGJlIHRvIGVuYWJsZSBgQlRfSENJVUFSVGAsIGBCVF9IQ0lVQVJUXzNXSVJFYCwgYW5kLCBvZiBjb3Vyc2UsIGBTRVJJQUxfREVWX0JVU2AuIEp1c3QgdG8gYmUgc2FmZSwgbGV0IG1lIGRvdWJsZS1jaGVjayBgU0VSSUFMX0RFVl9CVVNgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjI6MDAuNDk3MzAxNDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMxNDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VSSUFMX0RFVl9CVVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWctNC0jXFxuZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWc6NTptZW51Y29uZmlnIFNFUklBTF9ERVZfQlVTXFxuZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiU2VyaWFsIGRldmljZSBidXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIyOjAwLjU0NDYyMTQ3OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjA5NzEzMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBQcm9iZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlIOKAkyBpdCdzIGRlZmluaXRlbHkgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYC4gVGhhdCdzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBhIGtleSBmb2N1cy4gUmlnaHQsIGZpcnN0IHRoaW5nIGlzIHRvIGFkZCBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIGBGb2N1c1N5bWJvbHNgLiBUaGF0J3MgZG9uZS5cblxuTm93LCBmb3IgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgaGFyZHdhcmUgaXMgZW5hYmxlZCB0byB3b3JrIHdpdGggdGhpcy4gSSdsbCBhZGQgYEJUX0hDSVVBUlRgLCBgQlRfSENJVUFSVF8zV0lSRWAsIGFuZCBgU0VSSUFMX0RFVl9CVVNgIHRvIGBFbmFibGVDb25maWdzYCAuIFBlcmZlY3QsIHRoYXQgdGFrZXMgY2FyZSBvZiB0aGUgY29tbXMuXG5cbk5vdywgSSBqdXN0IG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpcyB0aGUgKm9ubHkqIGNvcmUgdGhpbmcgYmVpbmcgYWRkZWQgaGVyZS4gR290dGEgYmUgcHJlY2lzZS4gQ2hlY2tpbmcuLi4geWVwLCBsb29rcyBsaWtlIEkndmUgYWxzbyBnb3QgYGRldmljZV9yZXByb2JlX3dvcmtfZm5gLiBNYWtlcyBzZW5zZSAtIGl04oCZcyBwcm9iYWJseSB0aGUgd29ya2VyIHRoYXQncyBydW4gYXMgYSByZXN1bHQgb2YgdGhlIHNjaGVkdWxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggZnVuY3Rpb25zIGFyZSBjbGVhcmx5IHVuZGVyc3Rvb2QgYnkgdGhlIHN5c3RlbS4gQW5kIGZvciB0aGF0IHJlYXNvbiwgYm90aCBhcmUgYWxzbyBnb2luZyB0byBgRm9jdXNTeW1ib2xzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODMsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIyOjA3LjE1NDMzNzE3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTg5ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVF9IQ0lVQVJUXCIsXG4gICAgXCJCVF9IQ0lVQVJUXzNXSVJFXCIsXG4gICAgXCJTRVJJQUxfREVWX0JVU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldmljZV9zY2hlZHVsZV9yZXByb2JlXCIsXG4gICAgXCJkZXZpY2VfcmVwcm9iZV93b3JrX2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHRoZSBkcml2ZXIgY29yZSwgd2hpY2ggYWxsb3dzIHNjaGVkdWxpbmcgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIGEgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZHJpdmVyIG1vZGVsIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZC4gVGhlIGZ1bmN0aW9uIGlzIHVzZWQgYnkgc2V2ZXJhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGBoY2lfaDVgIHNlcmlhbCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVF9IQ0lVQVJUXCIsXG4gICAgXCJCVF9IQ0lVQVJUXzNXSVJFXCIsXG4gICAgXCJTRVJJQUxfREVWX0JVU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldmljZV9zY2hlZHVsZV9yZXByb2JlXCIsXG4gICAgXCJkZXZpY2VfcmVwcm9iZV93b3JrX2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHRoZSBkcml2ZXIgY29yZSwgd2hpY2ggYWxsb3dzIHNjaGVkdWxpbmcgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIGEgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZHJpdmVyIG1vZGVsIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZC4gVGhlIGZ1bmN0aW9uIGlzIHVzZWQgYnkgc2V2ZXJhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGBoY2lfaDVgIHNlcmlhbCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjI6MDcuMjMzNTMzNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjA3OTgyMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjI6MDcuMjMzOTk0NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQ2MDc1MTUyNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCB0byBzdGFuZGFyZGlzZSBkZWZlcnJlZCBkZXZpY2UgcmVwcm9iaW5nIGFjcm9zcyBkcml2ZXJzLCByZXBsYWNpbmcgY3VzdG9tIHdvcmsgaXRlbXMgaW4gYGJ0aW50ZWxfcGNpZWAsIGBoY2lfaDVgLCBhbmQgYGl3bHdpZmlgLiBJdCBhbHNvIGFkZHMgYSBgc2h1dGRvd25fZG9uZWAgZmxhZyB0byBwcmV2ZW50IHJlcHJvYmluZyBkZXZpY2VzIGR1cmluZyBzeXN0ZW0gc2h1dGRvd24uIEFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgKGUuZy4sIGBzdHJ1Y3QgZGV2aWNlX3JlcHJvYmVgIHZpYSBga3phbGxvY19vYmpgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIGtlcm5lbCBkZXZpY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGRyaXZlciBiaW5kaW5nL3VuYmluZGluZywgYW5kIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbmV0d29yayBwYWNrZXQgcGFyc2luZywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyAodXNlLWFmdGVyLWZyZWUpLCBsb2NraW5nIChkZWFkbG9ja3MpLCBvciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Y2NzNmZWY3NDg2YTY5OGI5NGNmMjkxZDY1OGJlZGEwZWE1NTc0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDAzOjIxOjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmhcbmluZGV4IGE1YjdhYmMxMGZmMDIuLjYyMzRlMzdkZTdlOTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvYmFzZS5oXG4rKysgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oXG5AQCAtMTA2LDYgKzEwNiwxMCBAQCBzdHJ1Y3QgZHJpdmVyX3ByaXZhdGUge1xuICAqIEBkZWFkOiBUaGlzIGRldmljZSBpcyBjdXJyZW50bHkgZWl0aGVyIGluIHRoZSBwcm9jZXNzIG9mIG9yIGhhcyBiZWVuXG4gICpcdCAgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIEFueSBhc3luY2hyb25vdXMgZXZlbnRzIHNjaGVkdWxlZCBmb3IgdGhpc1xuICAqXHQgIGRldmljZSBzaG91bGQgZXhpdCB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uLlxuKyAqIEBzaHV0ZG93bl9kb25lOiBTZXQgb25jZSBkZXZpY2Vfc2h1dGRvd24oKSBoYXMgcmVhY2hlZCB0aGlzIGRldmljZSwgdW5kZXJcbisgKlx0ICB0aGUgZGV2aWNlIGxvY2ssIGJlZm9yZSBhbnkgc2h1dGRvd24gY2FsbGJhY2sgcnVucy4gUmVhZCB1bmRlciB0aGVcbisgKlx0ICBkZXZpY2UgbG9jay4gQSBkZWZlcnJlZCByZS1wcm9iZSBzY2hlZHVsZWQgd2l0aFxuKyAqXHQgIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCkgbXVzdCBub3QgZGV0YWNoIHRoZSBkZXZpY2UgYW55bW9yZS5cbiAgKlxuICAqIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyIGNvcmUgc2hvdWxkIGV2ZXIgdG91Y2ggdGhlc2UgZmllbGRzLlxuICAqL1xuQEAgLTEyMCw2ICsxMjQsNyBAQCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUge1xuIFx0Y2hhciAqZGVmZXJyZWRfcHJvYmVfcmVhc29uO1xuIFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xuIFx0dTggZGVhZDoxO1xuK1x0dTggc2h1dGRvd25fZG9uZToxO1xuIH07XG4gI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQob2JqKVx0XFxcbiBcdGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfcGFyZW50KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5pbmRleCA0ZDAyNjY4Mjk0NGYyLi44YTdkYmU0ZTgzNjJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuY1xuKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xuQEAgLTQ5MDYsNiArNDkwNiw5IEBAIHZvaWQgZGV2aWNlX3NodXRkb3duKHZvaWQpXG4gXHRcdFx0ZGV2aWNlX2xvY2socGFyZW50KTtcbiBcdFx0ZGV2aWNlX2xvY2soZGV2KTtcbiBcbitcdFx0aWYgKGRldi1cdTAwM2VwKVxuK1x0XHRcdGRldi1cdTAwM2VwLVx1MDAzZXNodXRkb3duX2RvbmUgPSB0cnVlO1xuK1xuIFx0XHQvKiBEb24ndCBhbGxvdyBhbnkgbW9yZSBydW50aW1lIHN1c3BlbmRzICovXG4gXHRcdHBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7XG4gXHRcdHBtX3J1bnRpbWVfYmFycmllcihkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmNcbmluZGV4IDYwYzAwNTIyMzg0NGQuLmQ3NjVlMWFlNTYxNGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvZGQuY1xuKysrIGIvZHJpdmVycy9iYXNlL2RkLmNcbkBAIC0xNDM2LDMgKzE0MzYsMTA1IEBAIHZvaWQgZHJpdmVyX2RldGFjaChjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KVxuIFx0XHRwdXRfZGV2aWNlKGRldik7XG4gXHR9XG4gfVxuK1xuK3N0cnVjdCBkZXZpY2VfcmVwcm9iZSB7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7XG4rXHRjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2O1xuK307XG4rXG4rc3RhdGljIHZvaWQgZGV2aWNlX3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGRldmljZV9yZXByb2JlICpycCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUsXG4rXHRcdFx0XHRcdFx0IHdvcmsud29yayk7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBycC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBycC1cdTAwM2VwYXJlbnQ7XG4rXHRib29sIGRldGFjaGVkID0gZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0X19kZXZpY2VfZHJpdmVyX2xvY2soZGV2LCBwYXJlbnQpO1xuK1x0LypcbitcdCAqIHJwLVx1MDAzZWRydiBpcyBvbmx5IGV2ZXIgY29tcGFyZWQsIG5ldmVyIGRlcmVmZXJlbmNlZDogdGhlIGRyaXZlciBpdFxuK1x0ICogcG9pbnRzIHRvIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGFuZCBmcmVlZCBieSBub3cuXG4rXHQgKi9cbitcdGlmICghZGV2LVx1MDAzZXAtXHUwMDNlZGVhZCBcdTAwMjZcdTAwMjYgIWRldi1cdTAwM2VwLVx1MDAzZXNodXRkb3duX2RvbmUgXHUwMDI2XHUwMDI2XG4rXHQgICAgZGV2LVx1MDAzZWRyaXZlciBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWRyaXZlciA9PSBycC1cdTAwM2VkcnYpIHtcbitcdFx0X19kZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2LCBwYXJlbnQpO1xuK1x0XHRkZXRhY2hlZCA9IHRydWU7XG4rXHR9XG4rXHRfX2RldmljZV9kcml2ZXJfdW5sb2NrKGRldiwgcGFyZW50KTtcbitcbitcdGlmIChkZXRhY2hlZCkge1xuK1x0XHQvKlxuK1x0XHQgKiBkZXZpY2VfYXR0YWNoKCkgbXVzdCBydW4gd2l0aCB0aGUgcGFyZW50IGxvY2tlZCBvbiBidXNlc1xuK1x0XHQgKiB0aGF0IHJlcXVpcmUgaXQsIG1pcnJvcmluZyBidXNfcmVzY2FuX2RldmljZXNfaGVscGVyKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGFyZW50IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlYnVzLVx1MDAzZW5lZWRfcGFyZW50X2xvY2spXG4rXHRcdFx0ZGV2aWNlX2xvY2socGFyZW50KTtcbitcdFx0cmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHQgICAgICBcInJlLXByb2JlIGZhaWxlZCwgZGV2aWNlIGxlZnQgdW5ib3VuZFxcblwiKTtcbitcdFx0aWYgKHBhcmVudCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWJ1cy1cdTAwM2VuZWVkX3BhcmVudF9sb2NrKVxuK1x0XHRcdGRldmljZV91bmxvY2socGFyZW50KTtcbitcdH1cbitcbitcdHB1dF9kZXZpY2UoZGV2KTtcbitcdHB1dF9kZXZpY2UocGFyZW50KTtcbitcdGtmcmVlKHJwKTtcbit9XG4rXG4rLyoqXG4rICogZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUgLSBzY2hlZHVsZSBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmVcbisgKiBAZGV2OiBkZXZpY2UgdG8gZGV0YWNoIGFuZCByZS1wcm9iZVxuKyAqIEBkZWxheV9tczogZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmUtcHJvYmUgcnVuc1xuKyAqXG4rICogU2NoZWR1bGUgYSBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIEBkZXYgYWZ0ZXIgQGRlbGF5X21zIG1pbGxpc2Vjb25kcy5cbisgKiBUaGUgcmUtcHJvYmUgaXMgc2tpcHBlZCBpZiwgYnkgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCB3b3JrIHJ1bnMsIHRoZVxuKyAqIGRldmljZSBoYXMgYmVlbiByZW1vdmVkLCB0aGUgc3lzdGVtIHNodXRkb3duIHNlcXVlbmNlIGhhcyByZWFjaGVkIHRoZVxuKyAqIGRldmljZSwgb3IgQGRldiBpcyBubyBsb25nZXIgYm91bmQgdG8gdGhlIGRyaXZlciB0aGF0IHdhcyBib3VuZCBhdFxuKyAqIHNjaGVkdWxpbmcgdGltZS4gSW4gcGFydGljdWxhciBhbiBhZG1pbmlzdHJhdGl2ZSB1bmJpbmQgaXMgbmV2ZXJcbisgKiB1bmRvbmUgYnkgYSBzdGFsZSByZS1wcm9iZS5cbisgKlxuKyAqIFRoZSB3b3JrIGZ1bmN0aW9uIGlzIGJ1aWx0LWluIHRleHQsIHNvIHRoZSBib3VuZCBkcml2ZXIgbWF5IGNhbGwgdGhpc1xuKyAqIGZyb20gaXRzIG93biBjb2RlIHdpdGhvdXQgaG9sZGluZyBhIG1vZHVsZSByZWZlcmVuY2UuIElmIHRoZSBkcml2ZXJcbisgKiBtb2R1bGUgaXMgdW5sb2FkZWQgYmVmb3JlIHRoZSB3b3JrIHJ1bnMsIGRyaXZlciB1bnJlZ2lzdHJhdGlvbiB1bmJpbmRzXG4rICogQGRldiBmaXJzdCBhbmQgdGhlIHNjaGVkdWxlZCB3b3JrIGRvZXMgbm90aGluZy5cbisgKlxuKyAqIE11bHRpcGxlIHBlbmRpbmcgcmUtcHJvYmVzIGZvciB0aGUgc2FtZSBkZXZpY2UgYXJlIGluZGl2aWR1YWxseSBzYWZlO1xuKyAqIGEgY2FsbGVyIHRoYXQgd2FudHMgYXQgbW9zdCBvbmUgcGVuZGluZyByZS1wcm9iZSBtdXN0IGdhdGUgc2NoZWR1bGluZ1xuKyAqIGl0c2VsZi5cbisgKlxuKyAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC5cbisgKlxuKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBAZGV2IGlzIG5vdCBhIHJlZ2lzdGVyZWQgZGV2aWNlXG4rICogYm91bmQgdG8gYSBkcml2ZXIsIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBkZWxheV9tcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgKnJwO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlYnVzIHx8ICFkZXYtXHUwMDNlcCB8fCAhZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWRldi1cdTAwM2Vkcml2ZXIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cnAgPSBremFsbG9jX29iaigqcnApO1xuK1x0aWYgKCFycClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRycC1cdTAwM2VkZXYgPSBnZXRfZGV2aWNlKGRldik7XG4rXHQvKlxuK1x0ICogUGluIHRoZSBwYXJlbnQgdG9vOiB0aGUgd29yayBsb2NrcyBpdCwgYW5kIGFuIHVucmVnaXN0ZXIgb2YgQGRldlxuK1x0ICogd291bGQgb3RoZXJ3aXNlIGRyb3AgdGhlIGxhc3QgcmVmZXJlbmNlIGJlZm9yZSB0aGUgd29yayBydW5zLlxuK1x0ICovXG4rXHRycC1cdTAwM2VwYXJlbnQgPSBnZXRfZGV2aWNlKGRldi1cdTAwM2VwYXJlbnQpO1xuK1x0cnAtXHUwMDNlZHJ2ID0gUkVBRF9PTkNFKGRldi1cdTAwM2Vkcml2ZXIpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cnAtXHUwMDNld29yaywgZGV2aWNlX3JlcHJvYmVfd29ya19mbik7XG4rXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2cnAtXHUwMDNld29yayxcbitcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNcbmluZGV4IGJhYTYyMWIzZmVmOTMuLjI5YmUwNWQ0MTQyOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNcbkBAIC0zMDEyLDcgKzMwMTIsNyBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdCAqIEJUIG5lZWRzIHBjaV9zYXZlX3N0YXRlKCkvcGNpX3Jlc3RvcmVfc3RhdGUoKSBiZWNhdXNlIHRoZSBCVCBkcml2ZXJcbiBcdCAqIGlzIHN0aWxsIHBhcnRpYWxseSBhdHRhY2hlZCB3aGVuIHRoZSBfUFJSIHJ1bnMgKGl0IGhhc24ndCBiZWVuIHVuYm91bmQgeWV0KS5cbiBcdCAqIFRoZSBQQ0kgZGV2aWNlIG5lZWRzIHRvIHJlbWFpbiBtaW5pbWFsbHkgZnVuY3Rpb25hbCBzbyB0aGF0XG4tXHQgKiBkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikgY2FuIHdvcmsgYWZ0ZXJ3YXJkXG4rXHQgKiB0aGUgZGVmZXJyZWQgcmUtcHJvYmUgb2YgdGhlIEJUIGRldmljZSBjYW4gd29yayBhZnRlcndhcmRcbiBcdCAqL1xuIFx0cmV0ID0gYnRpbnRlbF9wY2llX2FjcGlfcmVzZXRfbWV0aG9kKGRhdGEpO1xuIFxuQEAgLTMwMjMsMTQgKzMwMjMsMTYgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3BlcmZvcm1fcGxkcihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXG4gXHR9XG4gXG4gXHRpZiAoIXJldCkge1xuLVx0XHRpZiAoZGV2aWNlX3JlcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKVxuLVx0XHRcdEJUX0VSUihcIkJUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXNcIiwgcGNpX25hbWUocGRldikpO1xuK1x0XHRpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIDApKVxuK1x0XHRcdEJUX0VSUihcIkJUIHJlcHJvYmUgc2NoZWR1bGluZyBmYWlsZWQgZm9yIEJERjolc1wiLFxuK1x0XHRcdCAgICAgICBwY2lfbmFtZShwZGV2KSk7XG4gXHR9XG4gfVxuIFxuIC8qXG4tICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGUgUENJXG4tICogY29yZSB2aWEgZGV2aWNlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgncyBjb250cmFjdC5cbisgKiBJc3N1ZSBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IGFuZCBoYW5kIHRlYXJkb3duL3JlLWluaXQgb2ZmIHRvIHRoZVxuKyAqIGRyaXZlciBjb3JlIHZpYSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCdzXG4rICogY29udHJhY3QuXG4gICpcbiAgKiBDYWxsZXIgbXVzdCBob2xkIHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKSBhbmQgbXVzdCBoYXZlIGFscmVhZHlcbiAgKiBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBkcmFpbmVkIGJvdGggcnhfd29yayBhbmQgY29yZWR1bXBfd29yay5cbkBAIC0zMDUyLDE0ICszMDU0LDEyIEBAIHN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3BlcmZvcm1fZmxyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdC8qIGRldmljZV9yZXByb2JlKCkgYWx3YXlzIGRldGFjaGVzIHRoZSBkcml2ZXIgZmlyc3QgKHJ1bm5pbmdcbi1cdCAqIC5yZW1vdmUoKSwgd2hpY2ggZnJlZXMgJ2RhdGEnKTsgYW55IHJlLXByb2JlIGZhaWx1cmUgbGVhdmVzIHRoZVxuLVx0ICogZGV2aWNlIHVuYm91bmQgYnV0ICdkYXRhJyBpcyBhbHJlYWR5IGdvbmUsIHNvIGp1c3QgbG9nIGl0LlxuLVx0ICovXG4tXHRpZiAoZGV2aWNlX3JlcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKVxuLVx0XHRCVF9FUlIoXCJCVCByZXByb2JlIGZhaWxlZCBmb3IgQkRGOiVzXCIsIHBjaV9uYW1lKHBkZXYpKTtcbitcdGVyciA9IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdEJUX0VSUihcIkJUIHJlcHJvYmUgc2NoZWR1bGluZyBmYWlsZWQgZm9yIEJERjolc1wiLFxuK1x0XHQgICAgICAgcGNpX25hbWUocGRldikpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuQEAgLTMwOTAsMTEgKzMwOTAsMTUgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aylcbiBcbiBcdGJ0X2Rldl9kYmcoZGF0YS1cdTAwM2VoZGV2LCBcIlJlbGVhc2UgYmx1ZXRvb3RoIGludGVyZmFjZVwiKTtcbiBcbi1cdC8qIEJvdGggcmVzZXQgcGF0aHMgZm9sbG93IHRoZSBzYW1lIGNvbnRyYWN0OiBvbiBzdWNjZXNzIHRoZXlcbi1cdCAqIGRlc3Ryb3kgJ2RhdGEnIHZpYSBkZXZpY2VfcmVwcm9iZSgpIChhIGZyZXNoIHByb2JlIHJlLUlOSVRfV09SS3Ncbi1cdCAqIHRoZSBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3Rcbi1cdCAqIE5PVCBiZSBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWxcbi1cdCAqIHdpdGggJ2RhdGEnIHN0aWxsIGFsaXZlLCBpbiB3aGljaCBjYXNlIHdlIGJhbGFuY2UgdGhlXG4rXHQvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGVcbitcdCAqIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKClcbitcdCAqIGRlc3Ryb3lzICdkYXRhJyBieSByZS1ydW5uaW5nIC5wcm9iZSgpICh3aGljaCByZS1JTklUX1dPUktzIHRoZVxuK1x0ICogZHVtcCB3b3JrZXJzIHdpdGggZGlzYWJsZSBjb3VudCAwKSwgc28gZW5hYmxlX3dvcmsoKSBtdXN0IE5PVCBiZVxuK1x0ICogY2FsbGVkIG9uIHRoZSBzdWNjZXNzIHBhdGguICdkYXRhJyBzdGF5cyBhbGl2ZSB1bnRpbCB0aGUgZGVmZXJyZWRcbitcdCAqIGRldGFjaCBydW5zOyBpbiB0aGlzIHdpbmRvdyBuZXcgYWN0aXZpdHkgaXMgZmVuY2VkIGJ5XG4rXHQgKiBCVElOVEVMX1BDSUVfUkVDT1ZFUllfSU5fUFJPR1JFU1MsIHRoZSBtYXNrZWQgaW50ZXJydXB0cyBhbmQgdGhlXG4rXHQgKiBkaXNhYmxlZCBkdW1wIHdvcmtlcnMuIE9ubHkgdGhlIEZMUiBwYXRoIGNhbiBmYWlsIHdpdGggbm9cbitcdCAqIHJlLXByb2JlIHNjaGVkdWxlZCwgaW4gd2hpY2ggY2FzZSB3ZSBiYWxhbmNlIHRoZVxuIFx0ICogZGlzYWJsZV93b3JrX3N5bmMoKSBjYWxscyBhYm92ZSBzbyBhIGxhdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgaXNcbiBcdCAqIG5vdCBwZXJtYW5lbnRseSBibG9ja2VkLlxuIFx0ICpcbkBAIC0zNDYwLDEzICszNDY0LDEyIEBAIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZkYXRhLVx1MDAzZWZ3dHJpZ2dlcl93b3JrKTtcbiBcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmRhdGEtXHUwMDNlbWJveF93b3JrKTtcbiBcbi1cdC8qIENhbmNlbCBwZW5kaW5nIHJlc2V0IHdvcmsuIFNraXAgb25seSB3aGVuIHJlbW92ZSgpIGlzIGNhbGxlZCBmcm9tXG4tXHQgKiB3aXRoaW4gdGhlIHJlc2V0IHdvcmsgaXRzZWxmIChQTERSIGRldmljZV9yZXByb2JlIHBhdGgpIHRvIGF2b2lkXG4tXHQgKiBkZWFkbG9jay4gY3VycmVudF93b3JrKCkgcmV0dXJucyB0aGUgd29ya19zdHJ1Y3Qgb2YgdGhlIGNhbGxlciBpZlxuLVx0ICogd2UgYXJlIGluIGEgd29ya3F1ZXVlIGNvbnRleHQuXG4rXHQvKiBUaGUgZGVmZXJyZWQgcmUtcHJvYmUgdHJpZ2dlcnMgLnJlbW92ZSgpIGZyb20gdGhlIGRyaXZlciBjb3JlJ3NcbitcdCAqIHdvcmsgaXRlbSwgbmV2ZXIgZnJvbSByZXNldF93b3JrIGl0c2VsZiwgc28gdGhpcyBubyBsb25nZXIgcnVuc1xuK1x0ICogbmVzdGVkIGluIHJlc2V0X3dvcms7IGRpc2FibGVfd29ya19zeW5jKCkgYWxzbyBndWFyYW50ZWVzIHRoZVxuK1x0ICogcmVzZXQgd29yayBoYXMgZnVsbHkgcmV0dXJuZWQgYmVmb3JlICdkYXRhJyBpcyBmcmVlZC5cbiBcdCAqL1xuLVx0aWYgKGN1cnJlbnRfd29yaygpICE9IFx1MDAyNmRhdGEtXHUwMDNlcmVzZXRfd29yaylcbi1cdFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2ZGF0YS1cdTAwM2VyZXNldF93b3JrKTtcbitcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmRhdGEtXHUwMDNlcmVzZXRfd29yayk7XG4gXG4gXHRidGludGVsX3BjaWVfZGlzYWJsZV9pbnRlcnJ1cHRzKGRhdGEpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcbmluZGV4IGIxOTk5ZTE0YWFkZWYuLjNmZGUxZDVhNWFlOTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcbkBAIC05OTAsNyArOTkwLDcgQEAgc3RhdGljIGludCBoNV9idHJ0bF9zZXR1cChzdHJ1Y3QgaDUgKmg1KVxuIHN0YXRpYyB2b2lkIGg1X2J0cnRsX29wZW4oc3RydWN0IGg1ICpoNSlcbiB7XG4gXHQvKlxuLVx0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgZG9lcyBhIGRldmljZV9yZXByb2JlKCkgdGhlIHN1c3BlbmQgaGFuZGxpbmdcbitcdCAqIFNpbmNlIGg1X2J0cnRsX3Jlc3VtZSgpIHNjaGVkdWxlcyBhIGRldmljZSByZS1wcm9iZSB0aGUgc3VzcGVuZCBoYW5kbGluZ1xuIFx0ICogZG9uZSBieSB0aGUgaGNpX3N1c3BlbmRfbm90aWZpZXIgaXMgbm90IG5lY2Vzc2FyeTsgaXQgYWN0dWFsbHkgY2F1c2VzXG4gXHQgKiBkZWxheXMgYW5kIGEgYnVuY2ggb2YgZXJyb3JzIHRvIGdldCBsb2dnZWQsIHNvIGRpc2FibGUgaXQuXG4gXHQgKi9cbkBAIC0xMDQ5LDQ2ICsxMDQ5LDE1IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc3VzcGVuZChzdHJ1Y3QgaDUgKmg1KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0cnVjdCBoNV9idHJ0bF9yZXByb2JlIHtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuLX07XG4tXG4tc3RhdGljIHZvaWQgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlLCB3b3JrKTtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBkZXZpY2VfcmVwcm9iZShyZXByb2JlLVx1MDAzZWRldik7XG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQUk9CRV9ERUZFUilcbi1cdFx0ZGV2X2VycihyZXByb2JlLVx1MDAzZWRldiwgXCJSZXByb2JlIGVycm9yICVkXFxuXCIsIHJldCk7XG4tXG4tXHRwdXRfZGV2aWNlKHJlcHJvYmUtXHUwMDNlZGV2KTtcbi1cdGtmcmVlKHJlcHJvYmUpO1xuLVx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaDVfYnRydGxfcmVzdW1lKHN0cnVjdCBoNSAqaDUpXG4ge1xuLVx0aWYgKHRlc3RfYml0KEg1X1dBS0VVUF9ESVNBQkxFLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpIHtcbi1cdFx0c3RydWN0IGg1X2J0cnRsX3JlcHJvYmUgKnJlcHJvYmU7XG4tXG4tXHRcdHJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7XG4tXHRcdGlmICghcmVwcm9iZSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbitcdGlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgXHUwMDI2aDUtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm4gZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoXHUwMDI2aDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LVx1MDAzZWRldiwgMCk7XG4gXG4tXHRcdElOSVRfV09SSyhcdTAwMjZyZXByb2JlLVx1MDAzZXdvcmssIGg1X2J0cnRsX3JlcHJvYmVfd29ya2VyKTtcbi1cdFx0cmVwcm9iZS1cdTAwM2VkZXYgPSBnZXRfZGV2aWNlKFx1MDAyNmg1LVx1MDAzZWh1LVx1MDAzZXNlcmRldi1cdTAwM2VkZXYpO1xuLVx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZyZXByb2JlLVx1MDAzZXdvcmspO1xuLVx0fSBlbHNlIHtcbi1cdFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGg1LVx1MDAzZWRldmljZV93YWtlX2dwaW8sIDEpO1xuK1x0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGg1LVx1MDAzZWRldmljZV93YWtlX2dwaW8sIDEpO1xuIFxuLVx0XHRpZiAodGVzdF9iaXQoSDVfSFdfRkxPV19DT05UUk9MLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpXG4tXHRcdFx0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKGg1LVx1MDAzZWh1LVx1MDAzZXNlcmRldiwgdHJ1ZSk7XG4tXHR9XG4rXHRpZiAodGVzdF9iaXQoSDVfSFdfRkxPV19DT05UUk9MLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpXG4rXHRcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChoNS1cdTAwM2VodS1cdTAwM2VzZXJkZXYsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jXG5pbmRleCA3M2FhZTExMjUwNDIxLi41YWU3MzRjYjkwMjcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xuQEAgLTc4LDQ3ICs3OCwxMSBAQCB2b2lkIGl3bF90cmFuc19mcmVlX3Jlc3RhcnRfbGlzdCh2b2lkKVxuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUge1xuLVx0c3RydWN0IGRldmljZSAqZGV2O1xuLVx0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xuLX07XG4tXG4tc3RhdGljIHZvaWQgaXdsX3RyYW5zX3JlcHJvYmVfd2soc3RydWN0IHdvcmtfc3RydWN0ICp3aylcbi17XG4tXHRzdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgKnJlcHJvYmU7XG4tXG4tXHRyZXByb2JlID0gY29udGFpbmVyX29mKHdrLCB0eXBlb2YoKnJlcHJvYmUpLCB3b3JrLndvcmspO1xuLVxuLVx0aWYgKGRldmljZV9yZXByb2JlKHJlcHJvYmUtXHUwMDNlZGV2KSlcbi1cdFx0ZGV2X2VycihyZXByb2JlLVx1MDAzZWRldiwgXCJyZXByb2JlIGZhaWxlZCFcXG5cIik7XG4tXHRwdXRfZGV2aWNlKHJlcHJvYmUtXHUwMDNlZGV2KTtcbi1cdGtmcmVlKHJlcHJvYmUpO1xuLVx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGl3bF90cmFuc19zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkZWxheV9tcylcbiB7XG4tXHRzdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgKnJlcHJvYmU7XG4tXG4tXHQvKlxuLVx0ICogZ2V0IGEgbW9kdWxlIHJlZmVyZW5jZSB0byBhdm9pZCBkb2luZyB0aGlzIHdoaWxlIHVubG9hZGluZ1xuLVx0ICogYW55d2F5IGFuZCB0byBhdm9pZCBzY2hlZHVsaW5nIGEgd29yayB3aXRoIGNvZGUgdGhhdCdzXG4tXHQgKiBiZWluZyByZW1vdmVkLlxuLVx0ICovXG4tXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xuLVx0XHRJV0xfRVJSKHRyYW5zLCBcIk1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAtIGFib3J0XFxuXCIpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpO1xuLVx0aWYgKCFyZXByb2JlKSB7XG4tXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXHRyZXByb2JlLVx1MDAzZWRldiA9IGdldF9kZXZpY2UodHJhbnMtXHUwMDNlZGV2KTtcbi1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJlcHJvYmUtXHUwMDNld29yaywgaXdsX3RyYW5zX3JlcHJvYmVfd2spO1xuLVx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnJlcHJvYmUtXHUwMDNld29yaywgbXNlY3NfdG9famlmZmllcyhkZWxheV9tcykpO1xuK1x0aWYgKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHRyYW5zLVx1MDAzZWRldiwgZGVsYXlfbXMpKVxuK1x0XHRJV0xfRVJSKHRyYW5zLCBcIkNvdWxkIG5vdCBzY2hlZHVsZSByZXByb2JlXFxuXCIpO1xuIH1cbiBcbiAjZGVmaW5lIElXTF9UUkFOU19SRVNFVF9PS19USU1FXHQ3IC8qIHNlY29uZHMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuaW5kZXggN2IyYmFmZmRkMmY1NS4uMWNkZDQwYTZhNDhkYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbkBAIC0xMzEyLDYgKzEzMTIsOCBAQCBpbnQgIF9fbXVzdF9jaGVjayBkZXZpY2VfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldik7XG4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpO1xuIHZvaWQgZGV2aWNlX2luaXRpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTtcbiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7XG4raW50IF9fbXVzdF9jaGVjayBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpO1xuIFxuIGJvb2wgZGV2aWNlX2lzX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMjowNy4yMzM5OTUwNTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTczODYzMDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERldmljZSBSZXByb2JlIFBhdGNoIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yIHRvIGNvbnNvbGlkYXRlIGRldmljZSByZXByb2JpbmcgbG9naWMuIFRoZSBtYWluIGdvYWwgaGVyZSBpcyB0byByZXBsYWNlIGN1c3RvbSByZXByb2JlIG1lY2hhbmlzbXMgaW4gc2V2ZXJhbCBkcml2ZXJzIChsaWtlIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYCkgd2l0aCBhIHNpbmdsZSwgdW5pZmllZCBmdW5jdGlvbiwgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpbiBgZHJpdmVycy9iYXNlL2RkLmNgLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBzaHV0IGRvd24uXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIGludGVybmFscywgdGhlIGRlc2NyaXB0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgcHJpbWFyaWx5IGFib3V0IGNsZWFudXAgYW5kIHJhY2UgY29uZGl0aW9uIGZpeGluZywgZXNwZWNpYWxseSBhcm91bmQgbW9kdWxlIHVubG9hZGluZyBhbmQgZGV2aWNlIGxpZmVjeWNsZS4gSXQgKnNlZW1zKiBsaWtlIHRoZXJlIGFyZSBubyBuZXcgdXNlci1zcGFjZSBpbnRlcmZhY2VzIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGludHJvZHVjZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgdHlwaWNhbGx5IG1lYW5zIGZld2VyIGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHNuZWFrIGluLiBUaGV5J3JlIGV4cGxpY2l0bHkgY2xhaW1pbmcgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0aHJvdWdoIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIGV0Yy4gVGhpcyBpcyB2ZXJ5IGVuY291cmFnaW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuVGhlcmVmb3JlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoICpzaG91bGRuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB0cmlnZ2VyIGEgS01TQU4gd2FybmluZy4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBkdXJpbmcgdGhpcyByZWZhY3RvcmluZy4gU28gZmFyLCBzbyBnb29kLlxuXG5Ob3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhhdCBga3phbGxvY19vYmooKnJwKWAgY2FsbCBpcyBnaXZpbmcgbWUgcGF1c2UuIFdhaXQsIHRoYXQgbG9va3MgdW51c3VhbC4gYGt6YWxsb2Nfb2JqYD8gSXMgdGhhdCBhIG1hY3JvPyBJIHR5cGljYWxseSB1c2UgYGt6YWxsb2Moc2l6ZW9mKCpycCksIEdGUF9LRVJORUwpYC4gTWF5YmUgSSBtaXNyZWFkIGl0LCBvciBpcyBpdCBhIGN1c3RvbSBtYWNybz8gVGhpcyBpc24ndCBzdGFuZGFyZCwgSSdtIHByZXR0eSBzdXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBXYWl0LCBob2xkIG9uLiBga3phbGxvY19vYmpgIGlzIG5vdCBhIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBBUEkuIFRoaXMgaXMgY29uY2VybmluZywgaXQgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC4gTGV0IG1lIGNoZWNrIGlmIGl0J3MgaW4gdGhlIGtlcm5lbC4gV2FpdCwgYGt6YWxsb2Nfb2JqYCBpcyBub3QgYSBzdGFuZGFyZCBtYWNyby4gQWgsIHdhaXQsIHRoaXMgbWlnaHQgYmUgYSBtYWNybyBpbnRyb2R1Y2VkIHJlY2VudGx5IG9yLCBwb3RlbnRpYWxseSwgYSB0eXBvIGluIHRoZSBwYXRjaCBkZXNjcmlwdGlvbi4gTGV0IG1lIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzNSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIyOjE2Ljk3MjYzMTk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAzMzQyNTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkyNzMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNC1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE2LSAgICAgICAgICBpZiAoIWdyb2NrKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMjY6ICAgICAgICAgIGRpbWl0cmkgPSBremFsbG9jX29iaigqZGltaXRyaSk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjctICAgICAgICAgIGlmICghZGltaXRyaSlcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdD00NT1hIG1lc3NhZ2UgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEFQSSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5KS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTA6XFx0XFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTE6XFx0XFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC05Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ0LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcXHRcXHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2Ny1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XFx0cCA9IGt6YWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXFx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMTpcXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAyLVxcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXFx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MjA4PXRvIGRldGFpbHMgZXhwbGFpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi5cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNjgtICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjI2OTogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9NjIzPUFmdGVyIGFsbG9jYXRpbmcgYSBjYXJkIGluc3RhbmNlIHZpYSA6YzpmdW5jOmBzbmRfY2FyZF9uZXcoKWBcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzAtICAuLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo2MzE6ICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9Njk4PWRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBFeGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsIGJlbG93OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NDktXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0Ojc1MDogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zODIzPWNoaXAgZGF0YSBpbmRpdmlkdWFsbHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzUtICAgICAgICAgIC4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzgzNjogICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0PTc5ND1pbnQgbXlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0OjgwMjpcXHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMy1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTUtXFx0bnN5bXMgPSBzeW10YWItXFx1MDAzZXNoX3NpemUgLyBzaXplb2YoRWxmNjRfU3ltKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo5NjpcXHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk3LVxcdGlmICghY2hhaW5zKSB7XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jPTM5MD1yZWdpc3Rlcl9jcHVzKHZvaWQpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6Mzk1OlxcdFxcdHN0cnVjdCBjcHUgKnAgPSBremFsbG9jX29iaigqcCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTYtXFx0XFx0aWYgKCFwKVxcbi0tXFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMS1cXHRpZiAoY3R4LVxcdTAwM2VuZWVkX2V4dHJhX3Bhc3MpIHtcXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM6MTEzMjpcXHRcXHRjdHgtXFx1MDAzZWppdF9kYXRhID0ga3phbGxvY19vYmooKmN0eC1cXHUwMDNlaml0X2RhdGEpO1xcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMzLVxcdFxcdGlmICghY3R4LVxcdTAwM2VqaXRfZGF0YSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNC1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1OlxcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fZGV2KTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI2LVxcdGlmICghZGV2KSB7XFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MzU2PV9fbG9jb21vX3Byb2JlKHN0cnVjdCBkZXZpY2UgKm1lLCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgaW50IGlycSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjItXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjM2MzpcXHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjQtXFx0aWYgKCFsY2hpcClcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz03MzM9c2ExMTExX2luaXRfb25lX2NoaWxkKHN0cnVjdCBzYTExMTEgKnNhY2hpcCwgc3RydWN0IHJlc291cmNlICpwYXJlbnQsXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo3NDA6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IHNhMTExMV9kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXFx0aWYgKCFkZXYpIHtcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODctXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4OlxcdGRldnB0ciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzY29vcF9kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4OS1cXHRpZiAoIWRldnB0cilcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYz0xMDg9c3RhdGljIGludCBzZWNvbmRhcnlfYmlnbGl0dGxlX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTAtXFx0aWYgKCFjcHVfdnRhYmxlW2NwdV0pXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcXHRcXHRjcHVfdnRhYmxlW2NwdV0gPSBremFsbG9jX29iaigqY3B1X3Z0YWJsZVtjcHVdKTtcXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYz0xNjk9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4MS1cXHQvKiBBbGxvY2F0ZSB0aGUgVkRTTyB0ZXh0IHBhZ2VsaXN0ICovXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XFx0dmRzb190ZXh0X3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHRleHRfcGFnZXMpO1xcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgzLVxcdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM9MjYxPWludCBfX2luaXQgZGMyMTI4NV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY0LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM6MjY1OlxcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY2LVxcdGlmICghcmVzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jPTY5PXN0YXRpYyBpbnQgX19pbml0IGVic2EyODVfbGVkc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM6ODc6XFx0XFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04OC1cXHRcXHRpZiAoIWxlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYz03MjA9c3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX2xlZHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTcyOS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM6NzMwOlxcdFxcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MzEtXFx0XFx0aWYgKCFsZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ3OS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlxcdHBtdV9tbWRjID0ga3phbGxvY19vYmooKnBtdV9tbWRjKTtcXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDgxLVxcdGlmICghcG11X21tZGMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYz0xMTQ9c3RhdGljIHZvaWQgX19pbml0IGkyY19xdWlyayh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEyOS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6MTMwOlxcdFxcdG5ld19jb21wYXQgPSBremFsbG9jX29iaigqbmV3X2NvbXBhdCk7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEzMS1cXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM9MTYzPXN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1XzM4MF9jb2hlcmVuY3lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYzoxODg6XFx0XFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4OS1cXHRcXHRwLVxcdTAwM2VuYW1lID0ga3N0cmR1cChcXFwiYXJtLGlvLWNvaGVyZW50XFxcIiwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jPTE0OD1zdGF0aWMgaW50IF9faW5pdCBtdmVidV9zb2NfZGV2aWNlKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1Ni1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jOjE1NzpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1OC1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM9MzgwPXN0YXRpYyB2b2lkIF9faW5pdCBteHNfbWFjaGluZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jOjM5MDpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XFx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMy1cXHRpZiAoIWQpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYz0yOTI9c3RhdGljIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNfY291bnQsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk2LVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYzoyOTc6XFx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5OC1cXHRpZiAoIW9tYXBfbWNic3BfZGV2aWNlcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX2RtX3RpbWVyX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jOjEyODpcXHRcXHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyOS1cXHRcXHRpZiAoIXBkYXRhKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYz0yMzA9dm9pZCBvbWFwMnh4eF9jbGt0X3Zwc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yMzktXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM6MjQwOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yNDEtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYz03ODY9dm9pZCBfX2luaXQgb21hcF9zb2NfZGV2aWNlX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jOjc5MTpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNTgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcXHRod21vZHMgPSBremFsbG9jX29ianMoc3RydWN0IG9tYXBfaHdtb2QgKiwgb2hfY250KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTYwLVxcdGlmICghaHdtb2RzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zMzgxPXN0YXRpYyBpbnQgb21hcF9od21vZF9hbGxvY2F0ZV9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk0LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjMzOTU6XFx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk2LVxcdGlmICghc3lzYylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjQtXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm9oLVxcdTAwM2VzbGF2ZV9wb3J0cykpIHtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNDI1OlxcdFxcdG9pID0ga3phbGxvY19vYmooKm9pKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI2LVxcdFxcdGlmICghb2kpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjctXFx0aWYgKCFvaCkge1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mjg6XFx0XFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjktXFx0XFx0aWYgKCFvaClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MzgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcXHRcXHRvaC1cXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXFx1MDAzZWNsYXNzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTQwLVxcdFxcdGlmICghb2gtXFx1MDAzZWNsYXNzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGFteDNfaWRsZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUsIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYzo0MTM6XFx0aWRsZV9zdGF0ZXMgPSBremFsbG9jX29ianMoKmlkbGVfc3RhdGVzLCBzdGF0ZV9jb3VudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cXHRpZiAoIWlkbGVfc3RhdGVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQxLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XFx0bnZhbHVlX3RhYmxlID0ga3phbGxvY19vYmpzKCpudmFsdWVfdGFibGUsIGNvdW50KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQzLVxcdGlmICghbnZhbHVlX3RhYmxlKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBwY2llX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzEtXFx0ICovXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcXHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzMtXFx0aWYgKCFyZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IHBjaV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDkyLVxcdCAqL1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XFx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDk0LVxcdGlmICghcmVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYz02ODk9c3RhdGljIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqX19pbml0IGVjYXJkX2FsbG9jX2NhcmQoaW50IHR5cGUsIGludCBzbG90KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTQtXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYzo2OTU6XFx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5Ni1cXHRpZiAoIWVjKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jPTkzPWludCBfX2luaXQgc2ExMXh4X2Nsa19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjExMDpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTMyOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzIzLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XFx0Y2ZnLVxcdTAwM2Vpbml0X2RhdGEgPSBpZCA9IGt6YWxsb2Nfb2JqKCpjZmctXFx1MDAzZWluaXRfZGF0YSk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyNS1cXHRpZiAoIWNmZy1cXHUwMDNlaW5pdF9kYXRhKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYz0yMjU9c3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI3OC1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jOjI3OTpcXHRkID0ga3phbGxvY19vYmooKmQpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjgwLVxcdGlmICghZCkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM9MTQxPXN0YXRpYyBpbnQgX19pbml0IHJjYXJfZ2VuMl9yZWd1bGF0b3JfcXVpcmsodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYzoxNjc6XFx0XFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2OC1cXHRcXHRpZiAoIXF1aXJrKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz0zOTM9c3RhdGljIGludCB2ZV9zcGNfcG9wdWxhdGVfb3Bwcyh1aW50MzJfdCBjbHVzdGVyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk3LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjM5ODpcXHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk5LVxcdGlmICghb3BwcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTQ0Mj1pbnQgX19pbml0IHZlX3NwY19pbml0KHZvaWQgX19pb21lbSAqYmFzZWFkZHIsIHUzMiBhMTVfY2x1c2lkLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVxcdGludCByZXQ7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NDQ1OlxcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ2LVxcdGlmICghaW5mbylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTUyMz1zdGF0aWMgc3RydWN0IGNsayAqdmVfc3BjX2Nsa19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpjcHVfZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjUyODpcXHRzcGMgPSBremFsbG9jX29iaigqc3BjKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXFx0aWYgKCFzcGMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ0LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcXHRuZXdwcm9wID0ga3phbGxvY19vYmooKm5ld3Byb3ApO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0Ni1cXHRpZiAoIW5ld3Byb3ApXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM9MTA1PXN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2luaXRfbWFjaGluZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMC1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM6MTExOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTItXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jPTUwMz1zdGF0aWMgX19pbml0IGludCBsMngwX3BtdV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jOjUxMDpcXHRsMngwX3BtdSA9IGt6YWxsb2Nfb2JqKCpsMngwX3BtdSk7XFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXFx0aWYgKCFsMngwX3BtdSkge1xcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0NC1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcXHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ2LVxcdGlmICghZGF0YSlcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9NTMzPXN0YXRpYyB2b2lkICpfX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2MC1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjU2MTpcXHRidWYgPSBremFsbG9jX29iaigqYnVmLFxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYyLVxcdFxcdFxcdCAgZ2ZwIFxcdTAwMjYgfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0pKTtcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9MTQ4Nz1hcm1faW9tbXVfY3JlYXRlX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhc2UsIHU2NCBzaXplKVxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6MTUwNzpcXHRtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nKTtcXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXFx0aWYgKCFtYXBwaW5nKVxcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0My1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0OlxcdHJlZ3MgPSBremFsbG9jX29ianMoKnJlZ3MsIG5yX3JlZyk7XFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0NS1cXHRpZiAoIXJlZ3MpIHtcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODctXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcXHRcXHR0bXBfcmVzID0ga3phbGxvY19vYmooKnRtcF9yZXMpO1xcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXFx0XFx0aWYgKCF0bXBfcmVzKSB7XFxuLS1cXG5hcmNoL2FybS94ZW4vcDJtLmM9MTUwPWJvb2wgX19zZXRfcGh5c190b19tYWNoaW5lX211bHRpKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cXG5hcmNoL2FybS94ZW4vcDJtLmM6MTc5OlxcdHAybV9lbnRyeSA9IGt6YWxsb2Nfb2JqKCpwMm1fZW50cnksIEdGUF9OT1dBSVQpO1xcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXFx0aWYgKCFwMm1fZW50cnkpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODMtXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0OlxcdHZkc29fcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvW2FiaV0udmRzb19wYWdlcyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTg1LVxcdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz00ODA9c3RhdGljIGludCBzaGFyZV9wZm5faHlwKHU2NCBwZm4pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTItXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6NDkzOlxcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDk0LVxcdGlmICghdGhpcykge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9OTgxPWludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDA4OlxcdHBndCA9IGt6YWxsb2Nfb2JqKCpwZ3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cXHRpZiAoIXBndClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4NS1cXHRpZiAoIW1jLVxcdTAwM2VtYXBwaW5nKSB7XFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTE4NjpcXHRcXHRtYy1cXHUwMDNlbWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBwa3ZtX21hcHBpbmcsXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNTEwPWludCBfX2luaXQga3ZtX21tdV9pbml0KHUzMiBoeXBfdmFfYml0cylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjU0NDpcXHRoeXBfcGd0YWJsZSA9IGt6YWxsb2Nfb2JqKCpoeXBfcGd0YWJsZSk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cXHRpZiAoIWh5cF9wZ3RhYmxlKSB7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzMzLVxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYikge1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzMzQ6XFx0XFx0c3RydWN0IHZuY3JfdGxiICp2dCA9IGt6YWxsb2Nfb2JqKCp2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXFx0XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTc5Mz1pbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODAyLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE4MDM6XFx0a3ZtLVxcdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyA9IGt6YWxsb2Nfb2JqKCooa3ZtLVxcdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyksXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0xMTY9c3RhdGljIHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlICprdm1fcHRkdW1wX3BhcnNlcl9jcmVhdGUoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYzoxMjI6XFx0c3QgPSBremFsbG9jX29iaihzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXFx0aWYgKCFzdClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxMy1cXHRkaXN0LVxcdTAwM2VhY3RpdmVfc3BpcyA9IChhdG9taWNfdClBVE9NSUNfSU5JVCgwKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjIxNDpcXHRkaXN0LVxcdTAwM2VzcGlzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSwgbnJfc3BpcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxNS1cXHRpZiAoIWRpc3QtXFx1MDAzZXNwaXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzEtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XFx0dmdpY19jcHUtXFx1MDAzZXByaXZhdGVfaXJxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgbnVtX3ByaXZhdGVfaXJxcyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTE0Mj1pbnQga3ZtX3ZnaWNfc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM6MTQ5OlxcdGVudHJpZXMgPSBremFsbG9jX29ianMoKmVudHJpZXMsIG5yLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cXHRpZiAoIWVudHJpZXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcXHRpcnEgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pcnEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg5LVxcdGlmICghaXJxKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTk3MT1zdGF0aWMgaW50IHZnaWNfaXRzX2FsbG9jX2NvbGxlY3Rpb24oc3RydWN0IHZnaWNfaXRzICppdHMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTc2LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo5Nzc6XFx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzgtXFx0aWYgKCFjb2xsZWN0aW9uKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTEwMTU9c3RhdGljIHN0cnVjdCBpdHNfaXRlICp2Z2ljX2l0c19hbGxvY19pdGUoc3RydWN0IGl0c19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMDIxOlxcdGl0ZSA9IGt6YWxsb2Nfb2JqKCppdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXFx0aWYgKCFpdGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4OlxcdGRldmljZSA9IGt6YWxsb2Nfb2JqKCpkZXZpY2UsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDktXFx0aWYgKCFkZXZpY2UpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTg1NT1zdGF0aWMgaW50IHZnaWNfaXRzX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODYyLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxODYzOlxcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg2NC1cXHRpZiAoIWl0cylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODg2PXN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjkzMjpcXHRyZHJlZyA9IGt6YWxsb2Nfb2JqKCpyZHJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cXHRpZiAoIXJkcmVnKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjU4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcXHRkaXN0LVxcdTAwM2VpdHNfdm0udnBlcyA9IGt6YWxsb2Nfb2JqcygqZGlzdC1cXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI2MC1cXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwODA9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDEtXFx0aWYgKCFqaXRfZGF0YSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XFx0XFx0aml0X2RhdGEgPSBremFsbG9jX29iaigqaml0X2RhdGEpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXFx0XFx0aWYgKCFqaXRfZGF0YSlcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jPTE3PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXFx0dmRzb19wYWdlbGlzdCA9XFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM6MjM6XFx0XFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29fcGFnZXMpO1xcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTI0LVxcdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz00NjY9c3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2FjeV9pc2FfaW8oc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3Mi1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzo0NzM6XFx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3NC1cXHRpZiAoIXJhbmdlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYz00NT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXFx0dmRzb19pbmZvLmNvZGVfbWFwcGluZy5wYWdlcyA9XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYzo1NjpcXHRcXHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvLnNpemUgLyBQQUdFX1NJWkUpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTctXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9NjE0PXN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6NjI1OlxcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXFx0aWYgKCFzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTEtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlxcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2lwaSk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDEzLVxcdGlmICghcylcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjI6MTkuNTc1OTgyMjQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjY1NDgxNjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBEZXRlY3RlZCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byB0aGF0IGBremFsbG9jX29iaigqcnApYCBtYWNyby4gUmlnaHQsIGl0J3MgYmFzaWNhbGx5IGEgYGt6YWxsb2NgIGZvciB0aGUgb2JqZWN0IGBycGAgcG9pbnRzIHRvIOKAkyB0aGF0J3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHplcm9pbmcsIHdoaWNoIGlzIGltcG9ydGFudC4gVGhlIGNvZGUgdGhlbiBzZXRzIHVwIGBycC1cdTAwM2VkZXZgLCBgcnAtXHUwMDNlcGFyZW50YCwgYHJwLVx1MDAzZWRydmAsIGFuZCBpbml0aWFsaXplcyB0aGUgZGVsYXllZCB3b3JrIHF1ZXVlIGl0ZW0sIGFsbCBnb29kIHNvIGZhci4gVGhlIHdvcmsgZnVuY3Rpb24gaXRzZWxmIHRoZW4gdXNlcyBhbmQgZnJlZXMgYHJwYC4gSXQgZG9lc27igJl0IHNlZW0gbGlrZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ2V0dGluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGFueSB1bmV4cGVjdGVkIGNvbnRyb2wgZmxvdyBwYXRocy4gSXQncyBhbGwgaW50ZXJuYWwgdG8gdGhlIGRyaXZlciBjb3JlIGFuZCBkZXZpY2UgbGlmZWN5Y2xlcy5cblxuTGV0J3MgZG8gYSBmdWxsIHNjYW4gb2YgYWxsIHRoZSBjaGFuZ2VzLiBMb29rcyBsaWtlIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGEgYnVuY2ggb2Ygb3RoZXIgZmlsZXM6IGBkcml2ZXJzL2Jhc2UvYmFzZS5oYCwgYGRyaXZlcnMvYmFzZS9jb3JlLmNgLCBgZHJpdmVycy9iYXNlL2RkLmNgLCBgZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNgLCBgZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNgLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAuIE9rYXksIHRoZXNlIGFsbCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG5ldyBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBsb29rcyBsaWtlIGl0J3MgYWltZWQgYXQgc3RhbmRhcmRpemluZyBkZWZlcnJlZCBkZXZpY2UgcmVwcm9iaW5nIGFjcm9zcyBkcml2ZXJzLiBBbHNvIHNlZSB0aGUgYWRkaXRpb24gb2YgYSBgc2h1dGRvd25fZG9uZWAgZmxhZy4gVGhlIHBhdGNoIHJlcGxhY2VzIGN1c3RvbSByZXByb2JlIGl0ZW1zIHdpdGggdGhpcyBtb3JlIGdlbmVyaWMgY2FsbC4gVGhlcmUncyBub3RoaW5nIG5ldyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2hlcmUgeW91IGNvdWxkIHJlYWQgdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHJlYWxseSBqdXN0IGFib3V0IGhvdyB0aGUgZHJpdmVyIGNvcmUgbWFuYWdlcyBkZXZpY2VzLlxuXG5TbywgdGhlIGNoYW5nZXMgc2VlbSBzdHJhaWdodGZvcndhcmQ6IHdlIGFyZSBpbnRyb2R1Y2luZyBhIG5ldyB1bmlmaWVkIG1ldGhvZCB0byByZXNjaGVkdWxlIGRldmljZXMuICBJdCBsb29rcyB0byBiZSBhIGNsZWFuIHJlZmFjdG9yIHRoYXQncyByZXBsYWNpbmcgY3VzdG9tIHdvcmtxdWV1ZSBpdGVtcyB3aXRoIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAuIEl0IGFkZHMgdGhlIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bi4gVGhlIG1lbW9yeSBmb3IgdGhlIHByb2JlIGl0ZW0gaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgc28gaXQncyB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGNvbmZpbmVkIHRvIHRoZSBkcml2ZXIgY29yZSwgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCB3b3JrcXVldWUgc2NoZWR1bGluZyBhbmQgbGlmZWN5Y2xlLiBUaGUgKm9ubHkqIHJlYWwgcmlza3MgaGVyZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIC0gdXNlLWFmdGVyLWZyZWUsIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBmaW5kIHRob3NlIGtpbmRzIG9mIGJ1Z3MuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEkgd2lsbCBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzU0LCJPdXRwdXRUb2tlbnMiOjI0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMjozMS44NDE0ODc1MjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCB0byBzdGFuZGFyZGlzZSBkZWZlcnJlZCBkZXZpY2UgcmVwcm9iaW5nIGFjcm9zcyBkcml2ZXJzLCByZXBsYWNpbmcgY3VzdG9tIHdvcmsgaXRlbXMgaW4gYGJ0aW50ZWxfcGNpZWAsIGBoY2lfaDVgLCBhbmQgYGl3bHdpZmlgLiBJdCBhbHNvIGFkZHMgYSBgc2h1dGRvd25fZG9uZWAgZmxhZyB0byBwcmV2ZW50IHJlcHJvYmluZyBkZXZpY2VzIGR1cmluZyBzeXN0ZW0gc2h1dGRvd24uIEFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgKGUuZy4sIGBzdHJ1Y3QgZGV2aWNlX3JlcHJvYmVgIHZpYSBga3phbGxvY19vYmpgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIGtlcm5lbCBkZXZpY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGRyaXZlciBiaW5kaW5nL3VuYmluZGluZywgYW5kIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbmV0d29yayBwYWNrZXQgcGFyc2luZywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyAodXNlLWFmdGVyLWZyZWUpLCBsb2NraW5nIChkZWFkbG9ja3MpLCBvciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHN0YW5kYXJkaXNlIGRlZmVycmVkIGRldmljZSByZXByb2JpbmcgYWNyb3NzIGRyaXZlcnMsIHJlcGxhY2luZyBjdXN0b20gd29yayBpdGVtcyBpbiBgYnRpbnRlbF9wY2llYCwgYGhjaV9oNWAsIGFuZCBgaXdsd2lmaWAuIEl0IGFsc28gYWRkcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bi4gQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyAoZS5nLiwgYHN0cnVjdCBkZXZpY2VfcmVwcm9iZWAgdmlhIGBremFsbG9jX29iamApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwga2VybmVsIGRldmljZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZHJpdmVyIGJpbmRpbmcvdW5iaW5kaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBuZXR3b3JrIHBhY2tldCBwYXJzaW5nLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSksIGxvY2tpbmcgKGRlYWRsb2NrcyksIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFsbCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 03:19:17 +0000 UTC FinishedAt: 2026-08-21 03:22:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "486f8908aa587ab2a213bbef39311743e4f8f57a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT_HCIUART", "BT_HCIUART_3WIRE", "SERIAL_DEV_BUS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "486f8908aa587ab2a213bbef39311743e4f8f57a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT_HCIUART", "BT_HCIUART_3WIRE", "SERIAL_DEV_BUS" ], "series_id": "784f8a66-851c-43ec-a593-62b088385af3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "device_schedule_reprobe", "device_reprobe_work_fn" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUX0hDSVVBUlQmIzM0OywKICAgICYjMzQ7QlRfSENJVUFSVF8zV0lSRSYjMzQ7LAogICAgJiMzNDtTRVJJQUxfREVWX0JVUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9zY2hlZHVsZV9yZXByb2JlJiMzNDssCiAgICAmIzM0O2RldmljZV9yZXByb2JlX3dvcmtfZm4mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gc3RhbmRhcmRpc2UgZGVmZXJyZWQgZGV2aWNlIHJlcHJvYmluZyBhY3Jvc3MgZHJpdmVycywgcmVwbGFjaW5nIGN1c3RvbSB3b3JrIGl0ZW1zIGluIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYC4gSXQgYWxzbyBhZGRzIGEgYHNodXRkb3duX2RvbmVgIGZsYWcgdG8gcHJldmVudCByZXByb2JpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtIHNodXRkb3duLiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIChlLmcuLCBgc3RydWN0IGRldmljZV9yZXByb2JlYCB2aWEgYGt6YWxsb2Nfb2JqYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCBrZXJuZWwgZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkcml2ZXIgYmluZGluZy91bmJpbmRpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG5ldHdvcmsgcGFja2V0IHBhcnNpbmcsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlKSwgbG9ja2luZyAoZGVhZGxvY2tzKSwgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gdGhlIGRyaXZlciBjb3JlLCB3aGljaCBhbGxvd3Mgc2NoZWR1bGluZyBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgYSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBkcml2ZXIgbW9kZWwgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyB0aGUgYGhjaV9oNWAgc2VyaWFsIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2Y2NzNmZWY3NDg2YTY5OGI5NGNmMjkxZDY1OGJlZGEwZWE1NTc0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDAzOjIxOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9iYXNlLmggYi9kcml2ZXJzL2Jhc2UvYmFzZS5oXG5pbmRleCBhNWI3YWJjMTBmZjAyLi42MjM0ZTM3ZGU3ZTk5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2Jhc2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2Jhc2UuaFxuQEAgLTEwNiw2ICYjNDM7MTA2LDEwIEBAIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZSB7XG4gICogQGRlYWQ6IFRoaXMgZGV2aWNlIGlzIGN1cnJlbnRseSBlaXRoZXIgaW4gdGhlIHByb2Nlc3Mgb2Ygb3IgaGFzIGJlZW5cbiAgKlx0ICByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQW55IGFzeW5jaHJvbm91cyBldmVudHMgc2NoZWR1bGVkIGZvciB0aGlzXG4gICpcdCAgZGV2aWNlIHNob3VsZCBleGl0IHdpdGhvdXQgdGFraW5nIGFueSBhY3Rpb24uXG4mIzQzOyAqIEBzaHV0ZG93bl9kb25lOiBTZXQgb25jZSBkZXZpY2Vfc2h1dGRvd24oKSBoYXMgcmVhY2hlZCB0aGlzIGRldmljZSwgdW5kZXJcbiYjNDM7ICpcdCAgdGhlIGRldmljZSBsb2NrLCBiZWZvcmUgYW55IHNodXRkb3duIGNhbGxiYWNrIHJ1bnMuIFJlYWQgdW5kZXIgdGhlXG4mIzQzOyAqXHQgIGRldmljZSBsb2NrLiBBIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoXG4mIzQzOyAqXHQgIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCkgbXVzdCBub3QgZGV0YWNoIHRoZSBkZXZpY2UgYW55bW9yZS5cbiAgKlxuICAqIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyIGNvcmUgc2hvdWxkIGV2ZXIgdG91Y2ggdGhlc2UgZmllbGRzLlxuICAqL1xuQEAgLTEyMCw2ICYjNDM7MTI0LDcgQEAgc3RydWN0IGRldmljZV9wcml2YXRlIHtcbiBcdGNoYXIgKmRlZmVycmVkX3Byb2JlX3JlYXNvbjtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldmljZTtcbiBcdHU4IGRlYWQ6MTtcbiYjNDM7XHR1OCBzaHV0ZG93bl9kb25lOjE7XG4gfTtcbiAjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX3BhcmVudChvYmopXHRcXFxuIFx0Y29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmNcbmluZGV4IDRkMDI2NjgyOTQ0ZjIuLjhhN2RiZTRlODM2MmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5AQCAtNDkwNiw2ICYjNDM7NDkwNiw5IEBAIHZvaWQgZGV2aWNlX3NodXRkb3duKHZvaWQpXG4gXHRcdFx0ZGV2aWNlX2xvY2socGFyZW50KTtcbiBcdFx0ZGV2aWNlX2xvY2soZGV2KTtcbiBcbiYjNDM7XHRcdGlmIChkZXYtXHUwMDNlcClcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZXAtXHUwMDNlc2h1dGRvd25fZG9uZSA9IHRydWU7XG4mIzQzO1xuIFx0XHQvKiBEb24mIzM5O3QgYWxsb3cgYW55IG1vcmUgcnVudGltZSBzdXNwZW5kcyAqL1xuIFx0XHRwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpO1xuIFx0XHRwbV9ydW50aW1lX2JhcnJpZXIoZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jXG5pbmRleCA2MGMwMDUyMjM4NDRkLi5kNzY1ZTFhZTU2MTRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2RkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9kZC5jXG5AQCAtMTQzNiwzICYjNDM7MTQzNiwxMDUgQEAgdm9pZCBkcml2ZXJfZGV0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG4gXHRcdHB1dF9kZXZpY2UoZGV2KTtcbiBcdH1cbiB9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUge1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqcGFyZW50O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmljZV9yZXByb2JlLFxuJiM0MztcdFx0XHRcdFx0XHQgd29yay53b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBycC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqcGFyZW50ID0gcnAtXHUwMDNlcGFyZW50O1xuJiM0MztcdGJvb2wgZGV0YWNoZWQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRfX2RldmljZV9kcml2ZXJfbG9jayhkZXYsIHBhcmVudCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBycC1cdTAwM2VkcnYgaXMgb25seSBldmVyIGNvbXBhcmVkLCBuZXZlciBkZXJlZmVyZW5jZWQ6IHRoZSBkcml2ZXIgaXRcbiYjNDM7XHQgKiBwb2ludHMgdG8gbWF5IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGJ5IG5vdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWRldi1cdTAwM2VwLVx1MDAzZWRlYWQgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlcC1cdTAwM2VzaHV0ZG93bl9kb25lIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBkZXYtXHUwMDNlZHJpdmVyIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlZHJpdmVyID09IHJwLVx1MDAzZWRydikge1xuJiM0MztcdFx0X19kZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2LCBwYXJlbnQpO1xuJiM0MztcdFx0ZGV0YWNoZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRfX2RldmljZV9kcml2ZXJfdW5sb2NrKGRldiwgcGFyZW50KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldGFjaGVkKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogZGV2aWNlX2F0dGFjaCgpIG11c3QgcnVuIHdpdGggdGhlIHBhcmVudCBsb2NrZWQgb24gYnVzZXNcbiYjNDM7XHRcdCAqIHRoYXQgcmVxdWlyZSBpdCwgbWlycm9yaW5nIGJ1c19yZXNjYW5fZGV2aWNlc19oZWxwZXIoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHBhcmVudCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWJ1cy1cdTAwM2VuZWVkX3BhcmVudF9sb2NrKVxuJiM0MztcdFx0XHRkZXZpY2VfbG9jayhwYXJlbnQpO1xuJiM0MztcdFx0cmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0ZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDtyZS1wcm9iZSBmYWlsZWQsIGRldmljZSBsZWZ0IHVuYm91bmRcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHBhcmVudCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWJ1cy1cdTAwM2VuZWVkX3BhcmVudF9sb2NrKVxuJiM0MztcdFx0XHRkZXZpY2VfdW5sb2NrKHBhcmVudCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwdXRfZGV2aWNlKGRldik7XG4mIzQzO1x0cHV0X2RldmljZShwYXJlbnQpO1xuJiM0MztcdGtmcmVlKHJwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRldmljZV9zY2hlZHVsZV9yZXByb2JlIC0gc2NoZWR1bGUgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlXG4mIzQzOyAqIEBkZXY6IGRldmljZSB0byBkZXRhY2ggYW5kIHJlLXByb2JlXG4mIzQzOyAqIEBkZWxheV9tczogZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmUtcHJvYmUgcnVuc1xuJiM0MzsgKlxuJiM0MzsgKiBTY2hlZHVsZSBhIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgQGRldiBhZnRlciBAZGVsYXlfbXMgbWlsbGlzZWNvbmRzLlxuJiM0MzsgKiBUaGUgcmUtcHJvYmUgaXMgc2tpcHBlZCBpZiwgYnkgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCB3b3JrIHJ1bnMsIHRoZVxuJiM0MzsgKiBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCwgdGhlIHN5c3RlbSBzaHV0ZG93biBzZXF1ZW5jZSBoYXMgcmVhY2hlZCB0aGVcbiYjNDM7ICogZGV2aWNlLCBvciBAZGV2IGlzIG5vIGxvbmdlciBib3VuZCB0byB0aGUgZHJpdmVyIHRoYXQgd2FzIGJvdW5kIGF0XG4mIzQzOyAqIHNjaGVkdWxpbmcgdGltZS4gSW4gcGFydGljdWxhciBhbiBhZG1pbmlzdHJhdGl2ZSB1bmJpbmQgaXMgbmV2ZXJcbiYjNDM7ICogdW5kb25lIGJ5IGEgc3RhbGUgcmUtcHJvYmUuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB3b3JrIGZ1bmN0aW9uIGlzIGJ1aWx0LWluIHRleHQsIHNvIHRoZSBib3VuZCBkcml2ZXIgbWF5IGNhbGwgdGhpc1xuJiM0MzsgKiBmcm9tIGl0cyBvd24gY29kZSB3aXRob3V0IGhvbGRpbmcgYSBtb2R1bGUgcmVmZXJlbmNlLiBJZiB0aGUgZHJpdmVyXG4mIzQzOyAqIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdvcmsgcnVucywgZHJpdmVyIHVucmVnaXN0cmF0aW9uIHVuYmluZHNcbiYjNDM7ICogQGRldiBmaXJzdCBhbmQgdGhlIHNjaGVkdWxlZCB3b3JrIGRvZXMgbm90aGluZy5cbiYjNDM7ICpcbiYjNDM7ICogTXVsdGlwbGUgcGVuZGluZyByZS1wcm9iZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhcmUgaW5kaXZpZHVhbGx5IHNhZmU7XG4mIzQzOyAqIGEgY2FsbGVyIHRoYXQgd2FudHMgYXQgbW9zdCBvbmUgcGVuZGluZyByZS1wcm9iZSBtdXN0IGdhdGUgc2NoZWR1bGluZ1xuJiM0MzsgKiBpdHNlbGYuXG4mIzQzOyAqXG4mIzQzOyAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBkZXYgaXMgbm90IGEgcmVnaXN0ZXJlZCBkZXZpY2VcbiYjNDM7ICogYm91bmQgdG8gYSBkcml2ZXIsIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5X21zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9yZXByb2JlICpycDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlYnVzIHx8ICFkZXYtXHUwMDNlcCB8fCAhZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZWRyaXZlcilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRycCA9IGt6YWxsb2Nfb2JqKCpycCk7XG4mIzQzO1x0aWYgKCFycClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRycC1cdTAwM2VkZXYgPSBnZXRfZGV2aWNlKGRldik7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQaW4gdGhlIHBhcmVudCB0b286IHRoZSB3b3JrIGxvY2tzIGl0LCBhbmQgYW4gdW5yZWdpc3RlciBvZiBAZGV2XG4mIzQzO1x0ICogd291bGQgb3RoZXJ3aXNlIGRyb3AgdGhlIGxhc3QgcmVmZXJlbmNlIGJlZm9yZSB0aGUgd29yayBydW5zLlxuJiM0MztcdCAqL1xuJiM0MztcdHJwLVx1MDAzZXBhcmVudCA9IGdldF9kZXZpY2UoZGV2LVx1MDAzZXBhcmVudCk7XG4mIzQzO1x0cnAtXHUwMDNlZHJ2ID0gUkVBRF9PTkNFKGRldi1cdTAwM2Vkcml2ZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJwLVx1MDAzZXdvcmssIGRldmljZV9yZXByb2JlX3dvcmtfZm4pO1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZycC1cdTAwM2V3b3JrLFxuJiM0MztcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jXG5pbmRleCBiYWE2MjFiM2ZlZjkzLi4yOWJlMDVkNDE0Mjk4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jXG5AQCAtMzAxMiw3ICYjNDM7MzAxMiw3IEBAIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9wZXJmb3JtX3BsZHIoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhKVxuIFx0ICogQlQgbmVlZHMgcGNpX3NhdmVfc3RhdGUoKS9wY2lfcmVzdG9yZV9zdGF0ZSgpIGJlY2F1c2UgdGhlIEJUIGRyaXZlclxuIFx0ICogaXMgc3RpbGwgcGFydGlhbGx5IGF0dGFjaGVkIHdoZW4gdGhlIF9QUlIgcnVucyAoaXQgaGFzbiYjMzk7dCBiZWVuIHVuYm91bmQgeWV0KS5cbiBcdCAqIFRoZSBQQ0kgZGV2aWNlIG5lZWRzIHRvIHJlbWFpbiBtaW5pbWFsbHkgZnVuY3Rpb25hbCBzbyB0aGF0XG4tXHQgKiBkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikgY2FuIHdvcmsgYWZ0ZXJ3YXJkXG4mIzQzO1x0ICogdGhlIGRlZmVycmVkIHJlLXByb2JlIG9mIHRoZSBCVCBkZXZpY2UgY2FuIHdvcmsgYWZ0ZXJ3YXJkXG4gXHQgKi9cbiBcdHJldCA9IGJ0aW50ZWxfcGNpZV9hY3BpX3Jlc2V0X21ldGhvZChkYXRhKTtcbiBcbkBAIC0zMDIzLDE0ICYjNDM7MzAyMywxNiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdH1cbiBcbiBcdGlmICghcmV0KSB7XG4tXHRcdGlmIChkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikpXG4tXHRcdFx0QlRfRVJSKFwmIzM0O0JUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXNcJiMzNDssIHBjaV9uYW1lKHBkZXYpKTtcbiYjNDM7XHRcdGlmIChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgMCkpXG4mIzQzO1x0XHRcdEJUX0VSUihcJiMzNDtCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXNcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBwY2lfbmFtZShwZGV2KSk7XG4gXHR9XG4gfVxuIFxuIC8qXG4tICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGUgUENJXG4tICogY29yZSB2aWEgZGV2aWNlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgmIzM5O3MgY29udHJhY3QuXG4mIzQzOyAqIElzc3VlIGEgRnVuY3Rpb24gTGV2ZWwgUmVzZXQgYW5kIGhhbmQgdGVhcmRvd24vcmUtaW5pdCBvZmYgdG8gdGhlXG4mIzQzOyAqIGRyaXZlciBjb3JlIHZpYSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCYjMzk7c1xuJiM0MzsgKiBjb250cmFjdC5cbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpIGFuZCBtdXN0IGhhdmUgYWxyZWFkeVxuICAqIGRpc2FibGVkIGludGVycnVwdHMgYW5kIGRyYWluZWQgYm90aCByeF93b3JrIGFuZCBjb3JlZHVtcF93b3JrLlxuQEAgLTMwNTIsMTQgJiM0MzszMDU0LDEyIEBAIHN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3BlcmZvcm1fZmxyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdC8qIGRldmljZV9yZXByb2JlKCkgYWx3YXlzIGRldGFjaGVzIHRoZSBkcml2ZXIgZmlyc3QgKHJ1bm5pbmdcbi1cdCAqIC5yZW1vdmUoKSwgd2hpY2ggZnJlZXMgJiMzOTtkYXRhJiMzOTspOyBhbnkgcmUtcHJvYmUgZmFpbHVyZSBsZWF2ZXMgdGhlXG4tXHQgKiBkZXZpY2UgdW5ib3VuZCBidXQgJiMzOTtkYXRhJiMzOTsgaXMgYWxyZWFkeSBnb25lLCBzbyBqdXN0IGxvZyBpdC5cbi1cdCAqL1xuLVx0aWYgKGRldmljZV9yZXByb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KSlcbi1cdFx0QlRfRVJSKFwmIzM0O0JUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXNcJiMzNDssIHBjaV9uYW1lKHBkZXYpKTtcbiYjNDM7XHRlcnIgPSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdEJUX0VSUihcJiMzNDtCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXNcJiMzNDssXG4mIzQzO1x0XHQgICAgICAgcGNpX25hbWUocGRldikpO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aylcbkBAIC0zMDkwLDExICYjNDM7MzA5MCwxNSBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuIFxuIFx0YnRfZGV2X2RiZyhkYXRhLVx1MDAzZWhkZXYsIFwmIzM0O1JlbGVhc2UgYmx1ZXRvb3RoIGludGVyZmFjZVwmIzM0Oyk7XG4gXG4tXHQvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGV5XG4tXHQgKiBkZXN0cm95ICYjMzk7ZGF0YSYjMzk7IHZpYSBkZXZpY2VfcmVwcm9iZSgpIChhIGZyZXNoIHByb2JlIHJlLUlOSVRfV09SS3Ncbi1cdCAqIHRoZSBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3Rcbi1cdCAqIE5PVCBiZSBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWxcbi1cdCAqIHdpdGggJiMzOTtkYXRhJiMzOTsgc3RpbGwgYWxpdmUsIGluIHdoaWNoIGNhc2Ugd2UgYmFsYW5jZSB0aGVcbiYjNDM7XHQvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGVcbiYjNDM7XHQgKiBkZWZlcnJlZCByZS1wcm9iZSBzY2hlZHVsZWQgd2l0aCBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpXG4mIzQzO1x0ICogZGVzdHJveXMgJiMzOTtkYXRhJiMzOTsgYnkgcmUtcnVubmluZyAucHJvYmUoKSAod2hpY2ggcmUtSU5JVF9XT1JLcyB0aGVcbiYjNDM7XHQgKiBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3QgTk9UIGJlXG4mIzQzO1x0ICogY2FsbGVkIG9uIHRoZSBzdWNjZXNzIHBhdGguICYjMzk7ZGF0YSYjMzk7IHN0YXlzIGFsaXZlIHVudGlsIHRoZSBkZWZlcnJlZFxuJiM0MztcdCAqIGRldGFjaCBydW5zOyBpbiB0aGlzIHdpbmRvdyBuZXcgYWN0aXZpdHkgaXMgZmVuY2VkIGJ5XG4mIzQzO1x0ICogQlRJTlRFTF9QQ0lFX1JFQ09WRVJZX0lOX1BST0dSRVNTLCB0aGUgbWFza2VkIGludGVycnVwdHMgYW5kIHRoZVxuJiM0MztcdCAqIGRpc2FibGVkIGR1bXAgd29ya2Vycy4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwgd2l0aCBub1xuJiM0MztcdCAqIHJlLXByb2JlIHNjaGVkdWxlZCwgaW4gd2hpY2ggY2FzZSB3ZSBiYWxhbmNlIHRoZVxuIFx0ICogZGlzYWJsZV93b3JrX3N5bmMoKSBjYWxscyBhYm92ZSBzbyBhIGxhdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgaXNcbiBcdCAqIG5vdCBwZXJtYW5lbnRseSBibG9ja2VkLlxuIFx0ICpcbkBAIC0zNDYwLDEzICYjNDM7MzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2ZGF0YS1cdTAwM2Vmd3RyaWdnZXJfd29yayk7XG4gXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZkYXRhLVx1MDAzZW1ib3hfd29yayk7XG4gXG4tXHQvKiBDYW5jZWwgcGVuZGluZyByZXNldCB3b3JrLiBTa2lwIG9ubHkgd2hlbiByZW1vdmUoKSBpcyBjYWxsZWQgZnJvbVxuLVx0ICogd2l0aGluIHRoZSByZXNldCB3b3JrIGl0c2VsZiAoUExEUiBkZXZpY2VfcmVwcm9iZSBwYXRoKSB0byBhdm9pZFxuLVx0ICogZGVhZGxvY2suIGN1cnJlbnRfd29yaygpIHJldHVybnMgdGhlIHdvcmtfc3RydWN0IG9mIHRoZSBjYWxsZXIgaWZcbi1cdCAqIHdlIGFyZSBpbiBhIHdvcmtxdWV1ZSBjb250ZXh0LlxuJiM0MztcdC8qIFRoZSBkZWZlcnJlZCByZS1wcm9iZSB0cmlnZ2VycyAucmVtb3ZlKCkgZnJvbSB0aGUgZHJpdmVyIGNvcmUmIzM5O3NcbiYjNDM7XHQgKiB3b3JrIGl0ZW0sIG5ldmVyIGZyb20gcmVzZXRfd29yayBpdHNlbGYsIHNvIHRoaXMgbm8gbG9uZ2VyIHJ1bnNcbiYjNDM7XHQgKiBuZXN0ZWQgaW4gcmVzZXRfd29yazsgZGlzYWJsZV93b3JrX3N5bmMoKSBhbHNvIGd1YXJhbnRlZXMgdGhlXG4mIzQzO1x0ICogcmVzZXQgd29yayBoYXMgZnVsbHkgcmV0dXJuZWQgYmVmb3JlICYjMzk7ZGF0YSYjMzk7IGlzIGZyZWVkLlxuIFx0ICovXG4tXHRpZiAoY3VycmVudF93b3JrKCkgIT0gXHUwMDI2ZGF0YS1cdTAwM2VyZXNldF93b3JrKVxuLVx0XHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZkYXRhLVx1MDAzZXJlc2V0X3dvcmspO1xuJiM0MztcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmRhdGEtXHUwMDNlcmVzZXRfd29yayk7XG4gXG4gXHRidGludGVsX3BjaWVfZGlzYWJsZV9pbnRlcnJ1cHRzKGRhdGEpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcbmluZGV4IGIxOTk5ZTE0YWFkZWYuLjNmZGUxZDVhNWFlOTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcbkBAIC05OTAsNyAmIzQzOzk5MCw3IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc2V0dXAoc3RydWN0IGg1ICpoNSlcbiBzdGF0aWMgdm9pZCBoNV9idHJ0bF9vcGVuKHN0cnVjdCBoNSAqaDUpXG4ge1xuIFx0Lypcbi1cdCAqIFNpbmNlIGg1X2J0cnRsX3Jlc3VtZSgpIGRvZXMgYSBkZXZpY2VfcmVwcm9iZSgpIHRoZSBzdXNwZW5kIGhhbmRsaW5nXG4mIzQzO1x0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgc2NoZWR1bGVzIGEgZGV2aWNlIHJlLXByb2JlIHRoZSBzdXNwZW5kIGhhbmRsaW5nXG4gXHQgKiBkb25lIGJ5IHRoZSBoY2lfc3VzcGVuZF9ub3RpZmllciBpcyBub3QgbmVjZXNzYXJ5OyBpdCBhY3R1YWxseSBjYXVzZXNcbiBcdCAqIGRlbGF5cyBhbmQgYSBidW5jaCBvZiBlcnJvcnMgdG8gZ2V0IGxvZ2dlZCwgc28gZGlzYWJsZSBpdC5cbiBcdCAqL1xuQEAgLTEwNDksNDYgJiM0MzsxMDQ5LDE1IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc3VzcGVuZChzdHJ1Y3QgaDUgKmg1KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0cnVjdCBoNV9idHJ0bF9yZXByb2JlIHtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuLX07XG4tXG4tc3RhdGljIHZvaWQgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlLCB3b3JrKTtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBkZXZpY2VfcmVwcm9iZShyZXByb2JlLVx1MDAzZWRldik7XG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQUk9CRV9ERUZFUilcbi1cdFx0ZGV2X2VycihyZXByb2JlLVx1MDAzZWRldiwgXCYjMzQ7UmVwcm9iZSBlcnJvciAlZFxcblwmIzM0OywgcmV0KTtcbi1cbi1cdHB1dF9kZXZpY2UocmVwcm9iZS1cdTAwM2VkZXYpO1xuLVx0a2ZyZWUocmVwcm9iZSk7XG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbi19XG4tXG4gc3RhdGljIGludCBoNV9idHJ0bF9yZXN1bWUoc3RydWN0IGg1ICpoNSlcbiB7XG4tXHRpZiAodGVzdF9iaXQoSDVfV0FLRVVQX0RJU0FCTEUsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSkge1xuLVx0XHRzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdFx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcbi1cdFx0aWYgKCFyZXByb2JlKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0XHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xuJiM0MztcdGlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgXHUwMDI2aDUtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKFx1MDAyNmg1LVx1MDAzZWh1LVx1MDAzZXNlcmRldi1cdTAwM2VkZXYsIDApO1xuIFxuLVx0XHRJTklUX1dPUksoXHUwMDI2cmVwcm9iZS1cdTAwM2V3b3JrLCBoNV9idHJ0bF9yZXByb2JlX3dvcmtlcik7XG4tXHRcdHJlcHJvYmUtXHUwMDNlZGV2ID0gZ2V0X2RldmljZShcdTAwMjZoNS1cdTAwM2VodS1cdTAwM2VzZXJkZXYtXHUwMDNlZGV2KTtcbi1cdFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2cmVwcm9iZS1cdTAwM2V3b3JrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChoNS1cdTAwM2VkZXZpY2Vfd2FrZV9ncGlvLCAxKTtcbiYjNDM7XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXHUwMDNlZGV2aWNlX3dha2VfZ3BpbywgMSk7XG4gXG4tXHRcdGlmICh0ZXN0X2JpdChINV9IV19GTE9XX0NPTlRST0wsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woaDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LCB0cnVlKTtcbi1cdH1cbiYjNDM7XHRpZiAodGVzdF9iaXQoSDVfSFdfRkxPV19DT05UUk9MLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woaDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xuaW5kZXggNzNhYWUxMTI1MDQyMS4uNWFlNzM0Y2I5MDI3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmNcbkBAIC03OCw0NyAmIzQzOzc4LDExIEBAIHZvaWQgaXdsX3RyYW5zX2ZyZWVfcmVzdGFydF9saXN0KHZvaWQpXG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4tXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4tfTtcbi1cbi1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcmVwcm9iZV93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuLXtcbi1cdHN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdHJlcHJvYmUgPSBjb250YWluZXJfb2Yod2ssIHR5cGVvZigqcmVwcm9iZSksIHdvcmsud29yayk7XG4tXG4tXHRpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS1cdTAwM2VkZXYpKVxuLVx0XHRkZXZfZXJyKHJlcHJvYmUtXHUwMDNlZGV2LCBcJiMzNDtyZXByb2JlIGZhaWxlZCFcXG5cJiMzNDspO1xuLVx0cHV0X2RldmljZShyZXByb2JlLVx1MDAzZWRldik7XG4tXHRrZnJlZShyZXByb2JlKTtcbi1cdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBpd2xfdHJhbnNfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpXG4ge1xuLVx0c3RydWN0IGl3bF90cmFuc19yZXByb2JlICpyZXByb2JlO1xuLVxuLVx0Lypcbi1cdCAqIGdldCBhIG1vZHVsZSByZWZlcmVuY2UgdG8gYXZvaWQgZG9pbmcgdGhpcyB3aGlsZSB1bmxvYWRpbmdcbi1cdCAqIGFueXdheSBhbmQgdG8gYXZvaWQgc2NoZWR1bGluZyBhIHdvcmsgd2l0aCBjb2RlIHRoYXQmIzM5O3Ncbi1cdCAqIGJlaW5nIHJlbW92ZWQuXG4tXHQgKi9cbi1cdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XG4tXHRcdElXTF9FUlIodHJhbnMsIFwmIzM0O01vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAtIGFib3J0XFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuLVx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcbi1cdGlmICghcmVwcm9iZSkge1xuLVx0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVx0cmVwcm9iZS1cdTAwM2VkZXYgPSBnZXRfZGV2aWNlKHRyYW5zLVx1MDAzZWRldik7XG4tXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZyZXByb2JlLVx1MDAzZXdvcmssIGl3bF90cmFuc19yZXByb2JlX3drKTtcbi1cdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZyZXByb2JlLVx1MDAzZXdvcmssIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTtcbiYjNDM7XHRpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUodHJhbnMtXHUwMDNlZGV2LCBkZWxheV9tcykpXG4mIzQzO1x0XHRJV0xfRVJSKHRyYW5zLCBcJiMzNDtDb3VsZCBub3Qgc2NoZWR1bGUgcmVwcm9iZVxcblwmIzM0Oyk7XG4gfVxuIFxuICNkZWZpbmUgSVdMX1RSQU5TX1JFU0VUX09LX1RJTUVcdDcgLyogc2Vjb25kcyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oXG5pbmRleCA3YjJiYWZmZGQyZjU1Li4xY2RkNDBhNmE0OGRhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuQEAgLTEzMTIsNiAmIzQzOzEzMTIsOCBAQCBpbnQgIF9fbXVzdF9jaGVjayBkZXZpY2VfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldik7XG4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpO1xuIHZvaWQgZGV2aWNlX2luaXRpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTtcbiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7XG4mIzQzO2ludCBfX211c3RfY2hlY2sgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkZWxheV9tcyk7XG4gXG4gYm9vbCBkZXZpY2VfaXNfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlRfSENJVUFSVCYjMzQ7LAogICAgJiMzNDtCVF9IQ0lVQVJUXzNXSVJFJiMzNDssCiAgICAmIzM0O1NFUklBTF9ERVZfQlVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUmIzM0OywKICAgICYjMzQ7ZGV2aWNlX3JlcHJvYmVfd29ya19mbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gdGhlIGRyaXZlciBjb3JlLCB3aGljaCBhbGxvd3Mgc2NoZWR1bGluZyBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgYSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBkcml2ZXIgbW9kZWwgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyB0aGUgYGhjaV9oNWAgc2VyaWFsIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2Y2NzNmZWY3NDg2YTY5OGI5NGNmMjkxZDY1OGJlZGEwZWE1NTc0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDAzOjIxOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKaW5kZXggYTViN2FiYzEwZmYwMi4uNjIzNGUzN2RlN2U5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Jhc2UuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCkBAIC0xMDYsNiAmIzQzOzEwNiwxMCBAQCBzdHJ1Y3QgZHJpdmVyX3ByaXZhdGUgewogICogQGRlYWQ6IFRoaXMgZGV2aWNlIGlzIGN1cnJlbnRseSBlaXRoZXIgaW4gdGhlIHByb2Nlc3Mgb2Ygb3IgaGFzIGJlZW4KICAqCSAgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIEFueSBhc3luY2hyb25vdXMgZXZlbnRzIHNjaGVkdWxlZCBmb3IgdGhpcwogICoJICBkZXZpY2Ugc2hvdWxkIGV4aXQgd2l0aG91dCB0YWtpbmcgYW55IGFjdGlvbi4KJiM0MzsgKiBAc2h1dGRvd25fZG9uZTogU2V0IG9uY2UgZGV2aWNlX3NodXRkb3duKCkgaGFzIHJlYWNoZWQgdGhpcyBkZXZpY2UsIHVuZGVyCiYjNDM7ICoJICB0aGUgZGV2aWNlIGxvY2ssIGJlZm9yZSBhbnkgc2h1dGRvd24gY2FsbGJhY2sgcnVucy4gUmVhZCB1bmRlciB0aGUKJiM0MzsgKgkgIGRldmljZSBsb2NrLiBBIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoCiYjNDM7ICoJICBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpIG11c3Qgbm90IGRldGFjaCB0aGUgZGV2aWNlIGFueW1vcmUuCiAgKgogICogTm90aGluZyBvdXRzaWRlIG9mIHRoZSBkcml2ZXIgY29yZSBzaG91bGQgZXZlciB0b3VjaCB0aGVzZSBmaWVsZHMuCiAgKi8KQEAgLTEyMCw2ICYjNDM7MTI0LDcgQEAgc3RydWN0IGRldmljZV9wcml2YXRlIHsKIAljaGFyICpkZWZlcnJlZF9wcm9iZV9yZWFzb247CiAJc3RydWN0IGRldmljZSAqZGV2aWNlOwogCXU4IGRlYWQ6MTsKJiM0MzsJdTggc2h1dGRvd25fZG9uZToxOwogfTsKICNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG9iaikJXAogCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfcGFyZW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggNGQwMjY2ODI5NDRmMi4uOGE3ZGJlNGU4MzYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC00OTA2LDYgJiM0Mzs0OTA2LDkgQEAgdm9pZCBkZXZpY2Vfc2h1dGRvd24odm9pZCkKIAkJCWRldmljZV9sb2NrKHBhcmVudCk7CiAJCWRldmljZV9sb2NrKGRldik7CiAKJiM0MzsJCWlmIChkZXYtJmd0O3ApCiYjNDM7CQkJZGV2LSZndDtwLSZndDtzaHV0ZG93bl9kb25lID0gdHJ1ZTsKJiM0MzsKIAkJLyogRG9uJiMzOTt0IGFsbG93IGFueSBtb3JlIHJ1bnRpbWUgc3VzcGVuZHMgKi8KIAkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKIAkJcG1fcnVudGltZV9iYXJyaWVyKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jCmluZGV4IDYwYzAwNTIyMzg0NGQuLmQ3NjVlMWFlNTYxNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9kZC5jCkBAIC0xNDM2LDMgJiM0MzsxNDM2LDEwNSBAQCB2b2lkIGRyaXZlcl9kZXRhY2goY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIAkJcHV0X2RldmljZShkZXYpOwogCX0KIH0KJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgewomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJc3RydWN0IGRldmljZSAqcGFyZW50OwomIzQzOwljb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGV2aWNlX3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgKnJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZpY2VfcmVwcm9iZSwKJiM0MzsJCQkJCQkgd29yay53b3JrKTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gcnAtJmd0O2RldjsKJiM0MzsJc3RydWN0IGRldmljZSAqcGFyZW50ID0gcnAtJmd0O3BhcmVudDsKJiM0MzsJYm9vbCBkZXRhY2hlZCA9IGZhbHNlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlfX2RldmljZV9kcml2ZXJfbG9jayhkZXYsIHBhcmVudCk7CiYjNDM7CS8qCiYjNDM7CSAqIHJwLSZndDtkcnYgaXMgb25seSBldmVyIGNvbXBhcmVkLCBuZXZlciBkZXJlZmVyZW5jZWQ6IHRoZSBkcml2ZXIgaXQKJiM0MzsJICogcG9pbnRzIHRvIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGFuZCBmcmVlZCBieSBub3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldi0mZ3Q7cC0mZ3Q7ZGVhZCAmYW1wOyZhbXA7ICFkZXYtJmd0O3AtJmd0O3NodXRkb3duX2RvbmUgJmFtcDsmYW1wOwomIzQzOwkgICAgZGV2LSZndDtkcml2ZXIgJmFtcDsmYW1wOyBkZXYtJmd0O2RyaXZlciA9PSBycC0mZ3Q7ZHJ2KSB7CiYjNDM7CQlfX2RldmljZV9yZWxlYXNlX2RyaXZlcihkZXYsIHBhcmVudCk7CiYjNDM7CQlkZXRhY2hlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsJX19kZXZpY2VfZHJpdmVyX3VubG9jayhkZXYsIHBhcmVudCk7CiYjNDM7CiYjNDM7CWlmIChkZXRhY2hlZCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIGRldmljZV9hdHRhY2goKSBtdXN0IHJ1biB3aXRoIHRoZSBwYXJlbnQgbG9ja2VkIG9uIGJ1c2VzCiYjNDM7CQkgKiB0aGF0IHJlcXVpcmUgaXQsIG1pcnJvcmluZyBidXNfcmVzY2FuX2RldmljZXNfaGVscGVyKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwYXJlbnQgJmFtcDsmYW1wOyBkZXYtJmd0O2J1cy0mZ3Q7bmVlZF9wYXJlbnRfbG9jaykKJiM0MzsJCQlkZXZpY2VfbG9jayhwYXJlbnQpOwomIzQzOwkJcmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJICAgICAgJiMzNDtyZS1wcm9iZSBmYWlsZWQsIGRldmljZSBsZWZ0IHVuYm91bmRcbiYjMzQ7KTsKJiM0MzsJCWlmIChwYXJlbnQgJmFtcDsmYW1wOyBkZXYtJmd0O2J1cy0mZ3Q7bmVlZF9wYXJlbnRfbG9jaykKJiM0MzsJCQlkZXZpY2VfdW5sb2NrKHBhcmVudCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHV0X2RldmljZShkZXYpOwomIzQzOwlwdXRfZGV2aWNlKHBhcmVudCk7CiYjNDM7CWtmcmVlKHJwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUgLSBzY2hlZHVsZSBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUKJiM0MzsgKiBAZGV2OiBkZXZpY2UgdG8gZGV0YWNoIGFuZCByZS1wcm9iZQomIzQzOyAqIEBkZWxheV9tczogZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmUtcHJvYmUgcnVucwomIzQzOyAqCiYjNDM7ICogU2NoZWR1bGUgYSBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIEBkZXYgYWZ0ZXIgQGRlbGF5X21zIG1pbGxpc2Vjb25kcy4KJiM0MzsgKiBUaGUgcmUtcHJvYmUgaXMgc2tpcHBlZCBpZiwgYnkgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCB3b3JrIHJ1bnMsIHRoZQomIzQzOyAqIGRldmljZSBoYXMgYmVlbiByZW1vdmVkLCB0aGUgc3lzdGVtIHNodXRkb3duIHNlcXVlbmNlIGhhcyByZWFjaGVkIHRoZQomIzQzOyAqIGRldmljZSwgb3IgQGRldiBpcyBubyBsb25nZXIgYm91bmQgdG8gdGhlIGRyaXZlciB0aGF0IHdhcyBib3VuZCBhdAomIzQzOyAqIHNjaGVkdWxpbmcgdGltZS4gSW4gcGFydGljdWxhciBhbiBhZG1pbmlzdHJhdGl2ZSB1bmJpbmQgaXMgbmV2ZXIKJiM0MzsgKiB1bmRvbmUgYnkgYSBzdGFsZSByZS1wcm9iZS4KJiM0MzsgKgomIzQzOyAqIFRoZSB3b3JrIGZ1bmN0aW9uIGlzIGJ1aWx0LWluIHRleHQsIHNvIHRoZSBib3VuZCBkcml2ZXIgbWF5IGNhbGwgdGhpcwomIzQzOyAqIGZyb20gaXRzIG93biBjb2RlIHdpdGhvdXQgaG9sZGluZyBhIG1vZHVsZSByZWZlcmVuY2UuIElmIHRoZSBkcml2ZXIKJiM0MzsgKiBtb2R1bGUgaXMgdW5sb2FkZWQgYmVmb3JlIHRoZSB3b3JrIHJ1bnMsIGRyaXZlciB1bnJlZ2lzdHJhdGlvbiB1bmJpbmRzCiYjNDM7ICogQGRldiBmaXJzdCBhbmQgdGhlIHNjaGVkdWxlZCB3b3JrIGRvZXMgbm90aGluZy4KJiM0MzsgKgomIzQzOyAqIE11bHRpcGxlIHBlbmRpbmcgcmUtcHJvYmVzIGZvciB0aGUgc2FtZSBkZXZpY2UgYXJlIGluZGl2aWR1YWxseSBzYWZlOwomIzQzOyAqIGEgY2FsbGVyIHRoYXQgd2FudHMgYXQgbW9zdCBvbmUgcGVuZGluZyByZS1wcm9iZSBtdXN0IGdhdGUgc2NoZWR1bGluZwomIzQzOyAqIGl0c2VsZi4KJiM0MzsgKgomIzQzOyAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBAZGV2IGlzIG5vdCBhIHJlZ2lzdGVyZWQgZGV2aWNlCiYjNDM7ICogYm91bmQgdG8gYSBkcml2ZXIsIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBkZWxheV9tcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnA7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtidXMgfHwgIWRldi0mZ3Q7cCB8fCAhZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZHJpdmVyKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJwID0ga3phbGxvY19vYmooKnJwKTsKJiM0MzsJaWYgKCFycCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlycC0mZ3Q7ZGV2ID0gZ2V0X2RldmljZShkZXYpOwomIzQzOwkvKgomIzQzOwkgKiBQaW4gdGhlIHBhcmVudCB0b286IHRoZSB3b3JrIGxvY2tzIGl0LCBhbmQgYW4gdW5yZWdpc3RlciBvZiBAZGV2CiYjNDM7CSAqIHdvdWxkIG90aGVyd2lzZSBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZSBiZWZvcmUgdGhlIHdvcmsgcnVucy4KJiM0MzsJICovCiYjNDM7CXJwLSZndDtwYXJlbnQgPSBnZXRfZGV2aWNlKGRldi0mZ3Q7cGFyZW50KTsKJiM0MzsJcnAtJmd0O2RydiA9IFJFQURfT05DRShkZXYtJmd0O2RyaXZlcik7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cnAtJmd0O3dvcmssIGRldmljZV9yZXByb2JlX3dvcmtfZm4pOwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgJmFtcDtycC0mZ3Q7d29yaywKJiM0MzsJCQkgICBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jCmluZGV4IGJhYTYyMWIzZmVmOTMuLjI5YmUwNWQ0MTQyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jCkBAIC0zMDEyLDcgJiM0MzszMDEyLDcgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3BlcmZvcm1fcGxkcihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpCiAJICogQlQgbmVlZHMgcGNpX3NhdmVfc3RhdGUoKS9wY2lfcmVzdG9yZV9zdGF0ZSgpIGJlY2F1c2UgdGhlIEJUIGRyaXZlcgogCSAqIGlzIHN0aWxsIHBhcnRpYWxseSBhdHRhY2hlZCB3aGVuIHRoZSBfUFJSIHJ1bnMgKGl0IGhhc24mIzM5O3QgYmVlbiB1bmJvdW5kIHlldCkuCiAJICogVGhlIFBDSSBkZXZpY2UgbmVlZHMgdG8gcmVtYWluIG1pbmltYWxseSBmdW5jdGlvbmFsIHNvIHRoYXQKLQkgKiBkZXZpY2VfcmVwcm9iZSgmYW1wO3BkZXYtJmd0O2RldikgY2FuIHdvcmsgYWZ0ZXJ3YXJkCiYjNDM7CSAqIHRoZSBkZWZlcnJlZCByZS1wcm9iZSBvZiB0aGUgQlQgZGV2aWNlIGNhbiB3b3JrIGFmdGVyd2FyZAogCSAqLwogCXJldCA9IGJ0aW50ZWxfcGNpZV9hY3BpX3Jlc2V0X21ldGhvZChkYXRhKTsKIApAQCAtMzAyMywxNCAmIzQzOzMwMjMsMTYgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3BlcmZvcm1fcGxkcihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpCiAJfQogCiAJaWYgKCFyZXQpIHsKLQkJaWYgKGRldmljZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2KSkKLQkJCUJUX0VSUigmIzM0O0JUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXMmIzM0OywgcGNpX25hbWUocGRldikpOwomIzQzOwkJaWYgKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2LCAwKSkKJiM0MzsJCQlCVF9FUlIoJiMzNDtCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXMmIzM0OywKJiM0MzsJCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCX0KIH0KIAogLyoKLSAqIElzc3VlIGEgRnVuY3Rpb24gTGV2ZWwgUmVzZXQgYW5kIGhhbmQgdGVhcmRvd24vcmUtaW5pdCBvZmYgdG8gdGhlIFBDSQotICogY29yZSB2aWEgZGV2aWNlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgmIzM5O3MgY29udHJhY3QuCiYjNDM7ICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGUKJiM0MzsgKiBkcml2ZXIgY29yZSB2aWEgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgmIzM5O3MKJiM0MzsgKiBjb250cmFjdC4KICAqCiAgKiBDYWxsZXIgbXVzdCBob2xkIHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKSBhbmQgbXVzdCBoYXZlIGFscmVhZHkKICAqIGRpc2FibGVkIGludGVycnVwdHMgYW5kIGRyYWluZWQgYm90aCByeF93b3JrIGFuZCBjb3JlZHVtcF93b3JrLgpAQCAtMzA1MiwxNCAmIzQzOzMwNTQsMTIgQEAgc3RhdGljIGludCBidGludGVsX3BjaWVfcGVyZm9ybV9mbHIoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhKQogCQlyZXR1cm4gZXJyOwogCX0KIAotCS8qIGRldmljZV9yZXByb2JlKCkgYWx3YXlzIGRldGFjaGVzIHRoZSBkcml2ZXIgZmlyc3QgKHJ1bm5pbmcKLQkgKiAucmVtb3ZlKCksIHdoaWNoIGZyZWVzICYjMzk7ZGF0YSYjMzk7KTsgYW55IHJlLXByb2JlIGZhaWx1cmUgbGVhdmVzIHRoZQotCSAqIGRldmljZSB1bmJvdW5kIGJ1dCAmIzM5O2RhdGEmIzM5OyBpcyBhbHJlYWR5IGdvbmUsIHNvIGp1c3QgbG9nIGl0LgotCSAqLwotCWlmIChkZXZpY2VfcmVwcm9iZSgmYW1wO3BkZXYtJmd0O2RldikpCi0JCUJUX0VSUigmIzM0O0JUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXMmIzM0OywgcGNpX25hbWUocGRldikpOwomIzQzOwllcnIgPSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgmYW1wO3BkZXYtJmd0O2RldiwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlCVF9FUlIoJiMzNDtCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXMmIzM0OywKJiM0MzsJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aykKQEAgLTMwOTAsMTEgJiM0MzszMDkwLDE1IEBAIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spCiAKIAlidF9kZXZfZGJnKGRhdGEtJmd0O2hkZXYsICYjMzQ7UmVsZWFzZSBibHVldG9vdGggaW50ZXJmYWNlJiMzNDspOwogCi0JLyogQm90aCByZXNldCBwYXRocyBmb2xsb3cgdGhlIHNhbWUgY29udHJhY3Q6IG9uIHN1Y2Nlc3MgdGhleQotCSAqIGRlc3Ryb3kgJiMzOTtkYXRhJiMzOTsgdmlhIGRldmljZV9yZXByb2JlKCkgKGEgZnJlc2ggcHJvYmUgcmUtSU5JVF9XT1JLcwotCSAqIHRoZSBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3QKLQkgKiBOT1QgYmUgY2FsbGVkIG9uIHRoZSBzdWNjZXNzIHBhdGguIE9ubHkgdGhlIEZMUiBwYXRoIGNhbiBmYWlsCi0JICogd2l0aCAmIzM5O2RhdGEmIzM5OyBzdGlsbCBhbGl2ZSwgaW4gd2hpY2ggY2FzZSB3ZSBiYWxhbmNlIHRoZQomIzQzOwkvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGUKJiM0MzsJICogZGVmZXJyZWQgcmUtcHJvYmUgc2NoZWR1bGVkIHdpdGggZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKQomIzQzOwkgKiBkZXN0cm95cyAmIzM5O2RhdGEmIzM5OyBieSByZS1ydW5uaW5nIC5wcm9iZSgpICh3aGljaCByZS1JTklUX1dPUktzIHRoZQomIzQzOwkgKiBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3QgTk9UIGJlCiYjNDM7CSAqIGNhbGxlZCBvbiB0aGUgc3VjY2VzcyBwYXRoLiAmIzM5O2RhdGEmIzM5OyBzdGF5cyBhbGl2ZSB1bnRpbCB0aGUgZGVmZXJyZWQKJiM0MzsJICogZGV0YWNoIHJ1bnM7IGluIHRoaXMgd2luZG93IG5ldyBhY3Rpdml0eSBpcyBmZW5jZWQgYnkKJiM0MzsJICogQlRJTlRFTF9QQ0lFX1JFQ09WRVJZX0lOX1BST0dSRVNTLCB0aGUgbWFza2VkIGludGVycnVwdHMgYW5kIHRoZQomIzQzOwkgKiBkaXNhYmxlZCBkdW1wIHdvcmtlcnMuIE9ubHkgdGhlIEZMUiBwYXRoIGNhbiBmYWlsIHdpdGggbm8KJiM0MzsJICogcmUtcHJvYmUgc2NoZWR1bGVkLCBpbiB3aGljaCBjYXNlIHdlIGJhbGFuY2UgdGhlCiAJICogZGlzYWJsZV93b3JrX3N5bmMoKSBjYWxscyBhYm92ZSBzbyBhIGxhdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgaXMKIAkgKiBub3QgcGVybWFuZW50bHkgYmxvY2tlZC4KIAkgKgpAQCAtMzQ2MCwxMyAmIzQzOzM0NjQsMTIgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2RhdGEtJmd0O2Z3dHJpZ2dlcl93b3JrKTsKIAlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2RhdGEtJmd0O21ib3hfd29yayk7CiAKLQkvKiBDYW5jZWwgcGVuZGluZyByZXNldCB3b3JrLiBTa2lwIG9ubHkgd2hlbiByZW1vdmUoKSBpcyBjYWxsZWQgZnJvbQotCSAqIHdpdGhpbiB0aGUgcmVzZXQgd29yayBpdHNlbGYgKFBMRFIgZGV2aWNlX3JlcHJvYmUgcGF0aCkgdG8gYXZvaWQKLQkgKiBkZWFkbG9jay4gY3VycmVudF93b3JrKCkgcmV0dXJucyB0aGUgd29ya19zdHJ1Y3Qgb2YgdGhlIGNhbGxlciBpZgotCSAqIHdlIGFyZSBpbiBhIHdvcmtxdWV1ZSBjb250ZXh0LgomIzQzOwkvKiBUaGUgZGVmZXJyZWQgcmUtcHJvYmUgdHJpZ2dlcnMgLnJlbW92ZSgpIGZyb20gdGhlIGRyaXZlciBjb3JlJiMzOTtzCiYjNDM7CSAqIHdvcmsgaXRlbSwgbmV2ZXIgZnJvbSByZXNldF93b3JrIGl0c2VsZiwgc28gdGhpcyBubyBsb25nZXIgcnVucwomIzQzOwkgKiBuZXN0ZWQgaW4gcmVzZXRfd29yazsgZGlzYWJsZV93b3JrX3N5bmMoKSBhbHNvIGd1YXJhbnRlZXMgdGhlCiYjNDM7CSAqIHJlc2V0IHdvcmsgaGFzIGZ1bGx5IHJldHVybmVkIGJlZm9yZSAmIzM5O2RhdGEmIzM5OyBpcyBmcmVlZC4KIAkgKi8KLQlpZiAoY3VycmVudF93b3JrKCkgIT0gJmFtcDtkYXRhLSZndDtyZXNldF93b3JrKQotCQlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2RhdGEtJmd0O3Jlc2V0X3dvcmspOwomIzQzOwlkaXNhYmxlX3dvcmtfc3luYygmYW1wO2RhdGEtJmd0O3Jlc2V0X3dvcmspOwogCiAJYnRpbnRlbF9wY2llX2Rpc2FibGVfaW50ZXJydXB0cyhkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuYwppbmRleCBiMTk5OWUxNGFhZGVmLi4zZmRlMWQ1YTVhZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuYwpAQCAtOTkwLDcgJiM0Mzs5OTAsNyBAQCBzdGF0aWMgaW50IGg1X2J0cnRsX3NldHVwKHN0cnVjdCBoNSAqaDUpCiBzdGF0aWMgdm9pZCBoNV9idHJ0bF9vcGVuKHN0cnVjdCBoNSAqaDUpCiB7CiAJLyoKLQkgKiBTaW5jZSBoNV9idHJ0bF9yZXN1bWUoKSBkb2VzIGEgZGV2aWNlX3JlcHJvYmUoKSB0aGUgc3VzcGVuZCBoYW5kbGluZwomIzQzOwkgKiBTaW5jZSBoNV9idHJ0bF9yZXN1bWUoKSBzY2hlZHVsZXMgYSBkZXZpY2UgcmUtcHJvYmUgdGhlIHN1c3BlbmQgaGFuZGxpbmcKIAkgKiBkb25lIGJ5IHRoZSBoY2lfc3VzcGVuZF9ub3RpZmllciBpcyBub3QgbmVjZXNzYXJ5OyBpdCBhY3R1YWxseSBjYXVzZXMKIAkgKiBkZWxheXMgYW5kIGEgYnVuY2ggb2YgZXJyb3JzIHRvIGdldCBsb2dnZWQsIHNvIGRpc2FibGUgaXQuCiAJICovCkBAIC0xMDQ5LDQ2ICYjNDM7MTA0OSwxNSBAQCBzdGF0aWMgaW50IGg1X2J0cnRsX3N1c3BlbmQoc3RydWN0IGg1ICpoNSkKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGg1X2J0cnRsX3JlcHJvYmUgewotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLX07Ci0KLXN0YXRpYyB2b2lkIGg1X2J0cnRsX3JlcHJvYmVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSAqcmVwcm9iZSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSwgd29yayk7Ci0JaW50IHJldDsKLQotCXJldCA9IGRldmljZV9yZXByb2JlKHJlcHJvYmUtJmd0O2Rldik7Ci0JaWYgKHJldCAmYW1wOyZhbXA7IHJldCAhPSAtRVBST0JFX0RFRkVSKQotCQlkZXZfZXJyKHJlcHJvYmUtJmd0O2RldiwgJiMzNDtSZXByb2JlIGVycm9yICVkXG4mIzM0OywgcmV0KTsKLQotCXB1dF9kZXZpY2UocmVwcm9iZS0mZ3Q7ZGV2KTsKLQlrZnJlZShyZXByb2JlKTsKLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLX0KLQogc3RhdGljIGludCBoNV9idHJ0bF9yZXN1bWUoc3RydWN0IGg1ICpoNSkKIHsKLQlpZiAodGVzdF9iaXQoSDVfV0FLRVVQX0RJU0FCTEUsICZhbXA7aDUtJmd0O2ZsYWdzKSkgewotCQlzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSAqcmVwcm9iZTsKLQotCQlyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpOwotCQlpZiAoIXJlcHJvYmUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwomIzQzOwlpZiAodGVzdF9iaXQoSDVfV0FLRVVQX0RJU0FCTEUsICZhbXA7aDUtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgmYW1wO2g1LSZndDtodS0mZ3Q7c2VyZGV2LSZndDtkZXYsIDApOwogCi0JCUlOSVRfV09SSygmYW1wO3JlcHJvYmUtJmd0O3dvcmssIGg1X2J0cnRsX3JlcHJvYmVfd29ya2VyKTsKLQkJcmVwcm9iZS0mZ3Q7ZGV2ID0gZ2V0X2RldmljZSgmYW1wO2g1LSZndDtodS0mZ3Q7c2VyZGV2LSZndDtkZXYpOwotCQlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmYW1wO3JlcHJvYmUtJmd0O3dvcmspOwotCX0gZWxzZSB7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChoNS0mZ3Q7ZGV2aWNlX3dha2VfZ3BpbywgMSk7CiYjNDM7CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChoNS0mZ3Q7ZGV2aWNlX3dha2VfZ3BpbywgMSk7CiAKLQkJaWYgKHRlc3RfYml0KEg1X0hXX0ZMT1dfQ09OVFJPTCwgJmFtcDtoNS0mZ3Q7ZmxhZ3MpKQotCQkJc2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKGg1LSZndDtodS0mZ3Q7c2VyZGV2LCB0cnVlKTsKLQl9CiYjNDM7CWlmICh0ZXN0X2JpdChINV9IV19GTE9XX0NPTlRST0wsICZhbXA7aDUtJmd0O2ZsYWdzKSkKJiM0MzsJCXNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChoNS0mZ3Q7aHUtJmd0O3NlcmRldiwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jCmluZGV4IDczYWFlMTEyNTA0MjEuLjVhZTczNGNiOTAyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuYwpAQCAtNzgsNDcgJiM0Mzs3OCwxMSBAQCB2b2lkIGl3bF90cmFuc19mcmVlX3Jlc3RhcnRfbGlzdCh2b2lkKQogCX0KIH0KIAotc3RydWN0IGl3bF90cmFuc19yZXByb2JlIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwotfTsKLQotc3RhdGljIHZvaWQgaXdsX3RyYW5zX3JlcHJvYmVfd2soc3RydWN0IHdvcmtfc3RydWN0ICp3aykKLXsKLQlzdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgKnJlcHJvYmU7Ci0KLQlyZXByb2JlID0gY29udGFpbmVyX29mKHdrLCB0eXBlb2YoKnJlcHJvYmUpLCB3b3JrLndvcmspOwotCi0JaWYgKGRldmljZV9yZXByb2JlKHJlcHJvYmUtJmd0O2RldikpCi0JCWRldl9lcnIocmVwcm9iZS0mZ3Q7ZGV2LCAmIzM0O3JlcHJvYmUgZmFpbGVkIVxuJiMzNDspOwotCXB1dF9kZXZpY2UocmVwcm9iZS0mZ3Q7ZGV2KTsKLQlrZnJlZShyZXByb2JlKTsKLQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsX3RyYW5zX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBkZWxheV9tcykKIHsKLQlzdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgKnJlcHJvYmU7Ci0KLQkvKgotCSAqIGdldCBhIG1vZHVsZSByZWZlcmVuY2UgdG8gYXZvaWQgZG9pbmcgdGhpcyB3aGlsZSB1bmxvYWRpbmcKLQkgKiBhbnl3YXkgYW5kIHRvIGF2b2lkIHNjaGVkdWxpbmcgYSB3b3JrIHdpdGggY29kZSB0aGF0JiMzOTtzCi0JICogYmVpbmcgcmVtb3ZlZC4KLQkgKi8KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgewotCQlJV0xfRVJSKHRyYW5zLCAmIzM0O01vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAtIGFib3J0XG4mIzM0Oyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpOwotCWlmICghcmVwcm9iZSkgewotCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQkJcmV0dXJuOwotCX0KLQlyZXByb2JlLSZndDtkZXYgPSBnZXRfZGV2aWNlKHRyYW5zLSZndDtkZXYpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7cmVwcm9iZS0mZ3Q7d29yaywgaXdsX3RyYW5zX3JlcHJvYmVfd2spOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO3JlcHJvYmUtJmd0O3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTsKJiM0MzsJaWYgKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHRyYW5zLSZndDtkZXYsIGRlbGF5X21zKSkKJiM0MzsJCUlXTF9FUlIodHJhbnMsICYjMzQ7Q291bGQgbm90IHNjaGVkdWxlIHJlcHJvYmVcbiYjMzQ7KTsKIH0KIAogI2RlZmluZSBJV0xfVFJBTlNfUkVTRVRfT0tfVElNRQk3IC8qIHNlY29uZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDdiMmJhZmZkZDJmNTUuLjFjZGQ0MGE2YTQ4ZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTMxMiw2ICYjNDM7MTMxMiw4IEBAIGludCAgX19tdXN0X2NoZWNrIGRldmljZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBfX211c3RfY2hlY2sgZHJpdmVyX2F0dGFjaChjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKIHZvaWQgZGV2aWNlX2luaXRpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBfX211c3RfY2hlY2sgZGV2aWNlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKJiM0MztpbnQgX19tdXN0X2NoZWNrIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpOwogCiBib29sIGRldmljZV9pc19ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCDigJMgaXQgc2VlbXMgdGhleSYjMzk7cmUgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGV5JiMzOTt2ZSBkcm9wcGVkIGN1c3RvbSByZXByb2JlIHNjaGVkdWxpbmcgaW4gZmF2b3Igb2YgdGhpcyBnZW5lcmljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZHJpdmVyIGNvcmUgKGBkcml2ZXJzL2Jhc2UvZGQuY2ApLiBUaGF0JiMzOTtzIGEgY29yZSBjaGFuZ2UsIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGdvZXMgdG8gZnV6emluZzsgdGhlIGRyaXZlciBjb3JlIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBhIHByaW1lIHRhcmdldC4KClRoZSBuZXcgZnVuY3Rpb24sIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAsIGlzIHRoZSBrZXksIG9idmlvdXNseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlYWNoYWJpbGl0eSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZyb20gYSBxdWljayBzY2FuLCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgYnRpbnRlbF9wY2llLmNgLCBgaGNpX2g1LmNgLCBhbmQgYGl3bC10cmFucy5jYC4gSG1tLCBgYnRpbnRlbGAgYW5kIGBpd2x3aWZpYCBhcmUgUENJZSBkcml2ZXJzLCBzbyB0aGF0IG1ha2VzIHNlbnNlLCBidXQgYGhjaV9oNWAgaXMgYSBzZXJpYWwgZHJpdmVyLiBDYW4gSSBldmVuIGdldCB0byBgaGNpX2g1YCBmcm9tIFFFTVU/IEFoLCB5ZXMsIGBoY2lfdWFydGAuIE9rYXksIHNvIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgKmlzKiBwb3RlbnRpYWxseSByZWFjaGFibGUgZnJvbSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGFjY2Vzc2liaWxpdHkuIExldCBtZSBjaGVjayBgZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNgIGFuZCBhbHNvIGBkcml2ZXJzL2Jhc2UvZGQuY2AuIEFscmlnaHQsIGxvb2tzIGxpa2UgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBhbnkgZHJpdmVyIGNhbiBjYWxsIGl0LiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIHRoYXQmIzM5O3MgYSBjZW50cmFsIGRyaXZlciBmdW5jdGlvbi4KCk9rYXksIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIHRoZSBjb3JlIGZ1bmN0aW9uIGl0c2VsZiwgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpcyBpbiBgZHJpdmVycy9iYXNlL2RkLmNgLCBzbyBpdCYjMzk7cyBhbHdheXMgYnVpbHQuIEZvciBgaGNpX2g1YCwgSSBuZWVkIHRvIGNoZWNrIGZvciBgQlRfSENJVUFSVF8zV0lSRWAuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ2AgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlRfSENJVUFSVF8zV0lSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0xNzU9Y29uZmlnIEJUX0hDSVVBUlRfTExcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTg3OmNvbmZpZyBCVF9IQ0lVQVJUXzNXSVJFXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7VGhyZWUtd2lyZSBVQVJUIChINSkgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERlcGVuZGVuY2llcyBvZiBCVFxfSENJVUFSVFxfM1dJUkUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBCVF9IQ0lVQVJUXzNXSVJFYCBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSAqZG9lcyogaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIFRoYXQmIzM5O3MgYSB2aXRhbCBmaXJzdCBzdGVwLCByaWdodD8gV2hhdCBvdGhlciBjb21wb25lbnRzIG9yIGZlYXR1cmVzIGlzIGl0IGludGltYXRlbHkgY29ubmVjdGVkIHRvPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBkZXBlbmRlbmNpZXMuIElzIGl0IGRlcGVuZGVudCBvbiBzb21lIHVuZGVybHlpbmcgaGFyZHdhcmUgYWJzdHJhY3Rpb24/IFBlcmhhcHMgc3BlY2lmaWMgVUFSVCBkcml2ZXJzIG9yIHBpbiBjb25maWd1cmF0aW9ucz8gT3IgbWF5YmUgc29tZSBvdGhlciBoaWdoZXItbGV2ZWwgQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrcz8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBhbmQgZmlndXJlIG91dCB0aGUgY2hhaW4gb2YgY29ubmVjdGlvbnMgdGhpcyB0aGluZyBoYXMgd2l0aCB0aGUgd2lkZXIgc3lzdGVtLiBJIGtub3cgdGhpcyB3aWxsIGRpY3RhdGUgdGhlIGJyb2FkZXIgc3lzdGVtIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlRfSENJVUFSVF8zV0lSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0xNzU9Y29uZmlnIEJUX0hDSVVBUlRfTExcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4Ni1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTg3OmNvbmZpZyBCVF9IQ0lVQVJUXzNXSVJFXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7VGhyZWUtd2lyZSBVQVJUIChINSkgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgQ2hlY2twb2ludCoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBCZWZvcmUgSSBkaXZlIGFueSBkZWVwZXIgaW50byB0aGlzLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uLiBJIGNhbiYjMzk7dCBqdXN0IGJsaW5kbHkgcHJvY2VlZDsgSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29tcG9uZW50IGlzIGFjdHVhbGx5IGJlaW5nLi4uIHdlbGwsIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBnbyByZWFkIHRoZSBLY29uZmlnIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIGdyb2sgd2hhdCB0aGUgbWFpbnRhaW5lciYjMzk7cyBvcHRpb25zIGFyZS4gV2hhdCB2YXJpYWJsZXMgYW0gSSBnb2luZyB0byBoYXZlIHRvIGNvbnNpZGVyPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHQgIEhDSUxMIChIQ0kgTG93IExldmVsKSBpcyBhIHNlcmlhbCBwcm90b2NvbCBmb3IgY29tbXVuaWNhdGlvblxuIDE4MTpcdFx0ICBiZXR3ZWVuIEJsdWV0b290aCBkZXZpY2UgYW5kIGhvc3QuIFRoaXMgcHJvdG9jb2wgaXMgcmVxdWlyZWQgZm9yXG4gMTgyOlx0XHQgIHNlcmlhbCBCbHVldG9vdGggZGV2aWNlcyB0aGF0IGFyZSBiYXNlZCBvbiBUZXhhcyBJbnN0cnVtZW50cyYjMzk7XG4gMTgzOlx0XHQgIEJSRiBjaGlwcy5cbiAxODQ6XHRcbiAxODU6XHRcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEhDSUxMIHByb3RvY29sLlxuIDE4NjpcdFxuIDE4NzpcdGNvbmZpZyBCVF9IQ0lVQVJUXzNXSVJFXG4gMTg4Olx0XHRib29sIFwmIzM0O1RocmVlLXdpcmUgVUFSVCAoSDUpIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAxODk6XHRcdGRlcGVuZHMgb24gQlRfSENJVUFSVFxuIDE5MDpcdFx0ZGVwZW5kcyBvbiBCVF9IQ0lVQVJUX1NFUkRFVlxuIDE5MTpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuIDE5MjpcdFx0aGVscFxuIDE5MzpcdFx0ICBUaGUgSENJIFRocmVlLXdpcmUgVUFSVCBUcmFuc3BvcnQgTGF5ZXIgbWFrZXMgaXQgcG9zc2libGUgdG9cbiAxOTQ6XHRcdCAgdXNlciB0aGUgQmx1ZXRvb3RoIEhDSSBvdmVyIGEgc2VyaWFsIHBvcnQgaW50ZXJmYWNlLiBUaGUgSENJXG4gMTk1Olx0XHQgIFRocmVlLXdpcmUgVUFSVCBUcmFuc3BvcnQgTGF5ZXIgYXNzdW1lcyB0aGF0IHRoZSBVQVJUXG4gMTk2Olx0XHQgIGNvbW11bmljYXRpb24gbWF5IGhhdmUgYml0IGVycm9ycywgb3ZlcnJ1biBlcnJvcnMgb3IgYnVyc3RcbiAxOTc6XHRcdCAgZXJyb3JzIGFuZCB0aGVyZWJ5IG1ha2luZyBDVFMvUlRTIGxpbmVzIHVubmVjZXNzYXJ5LlxuIDE5ODpcdFxuIDE5OTpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgVGhyZWUtd2lyZSBVQVJUIHByb3RvY29sLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQmx1ZXRvb3RoIEhDSSBVQVJUIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYEJUX0hDSVVBUlRfM1dJUkVgIGlzIGJ1aWx0IG9uIHRvcCBvZiBgQlRfSENJVUFSVGAsIGFuZCB0aGF0IGluIHR1cm4gcmVsaWVzIG9uIGBCVF9IQ0lVQVJUX1NFUkRFVmAuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkOyBpdCYjMzk7cyBhIGNvbW1vbiBsYXllcmluZyBwYXR0ZXJuIGZvciBCbHVldG9vdGggSENJIFVBUlQgaW1wbGVtZW50YXRpb25zLiBTbywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIGBCVF9IQ0lVQVJUXzNXSVJFYCwgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBgQlRfSENJVUFSVGAgcHJvdmlkZXMsIGFuZCBob3cgaXQmIzM5O3Mgc3RydWN0dXJlZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGZlYXR1cmUgc2V0IGFuZCBkZXNpZ24gY2hvaWNlcyBhcmUgc29saWQuIFRoYXQgd2F5LCBhbnkgaXNzdWVzIEkgdW5jb3ZlciBjYW4gYmUgcXVpY2tseSB0aWVkIGJhY2sgdG8gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJUX0hDSVVBUlQkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTkzPWNvbmZpZyBCVF9IQ0lCVFNESU9cbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTEwMy1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTA0OmNvbmZpZyBCVF9IQ0lVQVJUXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O0hDSSBVQVJUIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBCVF9IQ0lVQVJUKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYEJUX0hDSVVBUlRgIGNvZGUgYWdhaW4uIFRoaXMgbGlrZWx5IG1lYW5zIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBCbHVldG9vdGggSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBvdmVyIFVBUlQgaXMgYmVpbmcgaW1wbGVtZW50ZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgaXNzdWUgb3IgcGVyaGFwcyBJJiMzOTttIGludGVncmF0aW5nIGEgbmV3IGNvbXBvbmVudCBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIElzIGl0IGZvciBkZWJ1Z2dpbmcgYSBjb25uZWN0aW9uIHByb2JsZW0/IE1heWJlIEkmIzM5O20gb3B0aW1pemluZyBwb3dlciBjb25zdW1wdGlvbi4gVGhlIGFjcm9ueW0gaW1tZWRpYXRlbHkgYnJpbmdzIHVwIGFsbCBzb3J0cyBvZiBwb3RlbnRpYWwgYXZlbnVlcyB0byBleHBsb3JlLiBUaW1lIHRvIGdldCBteSBoZWFkIGJhY2sgaW4gdGhlIGdhbWUgYW5kIHRyYWNlIHRoZSBudWFuY2VzIG9mIHRoaXMgVUFSVC1iYXNlZCBIQ0kuIEkgZXhwZWN0IHRvIGJlIHNjcnV0aW5pemluZyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCBmcmFtaW5nLCBhbmQgZGF0YSBidWZmZXIgbWFuYWdlbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGJ1cmllZCB3aXRoaW4gdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFxuIDEwMTpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgQmx1ZXRvb3RoIFNESU8gZGV2aWNlcyBpbnRvIHRoZVxuIDEwMjpcdFx0ICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUgKGJ0c2RpbykuXG4gMTAzOlx0XG4gMTA0Olx0Y29uZmlnIEJUX0hDSVVBUlRcbiAxMDU6XHRcdHRyaXN0YXRlIFwmIzM0O0hDSSBVQVJUIGRyaXZlclwmIzM0O1xuIDEwNjpcdFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVUyB8fCAhU0VSSUFMX0RFVl9CVVNcbiAxMDc6XHRcdGRlcGVuZHMgb24gTlZNRU0gfHwgIU5WTUVNXG4gMTA4Olx0XHRkZXBlbmRzIG9uIFBPV0VSX1NFUVVFTkNJTkcgfHwgIVBPV0VSX1NFUVVFTkNJTkdcbiAxMDk6XHRcdGRlcGVuZHMgb24gVFRZXG4gMTEwOlx0XHRoZWxwXG4gMTExOlx0XHQgIEJsdWV0b290aCBIQ0kgVUFSVCBkcml2ZXIuXG4gMTEyOlx0XHQgIFRoaXMgZHJpdmVyIGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHVzZSBCbHVldG9vdGggZGV2aWNlcyB3aXRoXG4gMTEzOlx0XHQgIHNlcmlhbCBwb3J0IGludGVyZmFjZS4gWW91IHdpbGwgYWxzbyBuZWVkIHRoaXMgZHJpdmVyIGlmIHlvdSBoYXZlXG4gMTE0Olx0XHQgIFVBUlQgYmFzZWQgQmx1ZXRvb3RoIFBDTUNJQSBhbmQgQ0YgZGV2aWNlcyBsaWtlIFhpcmNvbSBDcmVkaXQgQ2FyZFxuIDExNTpcdFx0ICBhZGFwdGVyIGFuZCBCcmFpbkJveGVzIEJsdWV0b290aCBQQyBDYXJkLlxuIDExNjpcdFxuIDExNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgQmx1ZXRvb3RoIFVBUlQgZGV2aWNlcyBpbnRvIHRoZVxuIDExODpcdFx0ICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUgKGhjaV91YXJ0KS5cbiAxMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYSBTcGVjaWZpYyBDb25maWd1cmF0aW9uIFZhcmlhYmxlKioKCkFscmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEkmIzM5O20gZGVlcCBpbnRvIHRoaXMgYW5hbHlzaXMgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgYSBzbWFsbCBkZXRhaWwgY2FuIHNvbWV0aW1lcyBiZSB0aGUgc291cmNlIG9mIGEgbGFyZ2UgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgVUFSVCBzZXJpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUgYEJUX0hDSVVBUlRfU0VSREVWYCBzZXR0aW5nIGlzIHdoYXQgSSBleHBlY3QgaXQgdG8gYmUuIFRoaXMgaW1wYWN0cyBCbHVldG9vdGggaG9zdCBjb250cm9sbGVyIGludGVyZmFjZSAoSENJKSBVQVJUIHNlcmlhbCBkZXZpY2UuIFRoYXQgaXMgYW4gaW1wb3J0YW50IHBhcnQgb2YgdGhlIHN0YWNrLCBhbmQsIGlmIG5vdCBjb25maWd1cmVkIGNvcnJlY3RseSwgaXQgY291bGQgZXhwbGFpbiBzb21lIHdlaXJkIGJlaGF2aW9yIEkmIzM5O20gc2VlaW5nLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCVF9IQ0lVQVJUX1NFUkRFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0xMDQ9Y29uZmlnIEJUX0hDSVVBUlRcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTExOS1cbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTIwOmNvbmZpZyBCVF9IQ0lVQVJUX1NFUkRFVlxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0xMjEtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZWNvZGluZyBgQlRfSENJVUFSVF9TRVJERVZgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG5vdGF0aW9uIGBCVF9IQ0lVQVJUX1NFUkRFVmAgaW1tZWRpYXRlbHkgc2NyZWFtcyBhIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3Q6IEJsdWV0b290aCwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoSENJKSwgVUFSVCBjb21tdW5pY2F0aW9uLCBhbmQgc2VyaWFsIGRldmljZSBkcml2ZXJzLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBhIEJsdWV0b290aCBjb250cm9sbGVyIChsaWtlbHkgaW50ZWdyYXRlZCBvciBleHRlcm5hbCkgYW5kIHRoZSBob3N0IHN5c3RlbSwgZm9jdXNpbmcgb24gdGhlIHNlcmlhbCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgdXNlZCB0byB0cmFuc21pdCBIQ0kgY29tbWFuZHMgYW5kIGRhdGEuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uLCBob3cgaXQgaGFuZGxlcyBmcmFtaW5nIG9mIEhDSSBwYWNrZXRzIG92ZXIgdGhlIFVBUlQsIGZsb3cgY29udHJvbCBtZWNoYW5pc21zIChpZiBhbnkpLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmhhcHMgZXZlbiBwb3dlciBtYW5hZ2VtZW50IGFzcGVjdHMuIFRoZSAmIzM0O1NFUkRFViYjMzQ7IHBvcnRpb24gZGVmaW5pdGVseSBzdWdnZXN0cyBhIHN0YW5kYXJkIExpbnV4IHNlcmlhbCBkZXZpY2UgZHJpdmVyIGludGVyZmFjZSwgbWVhbmluZyBpdCBzaG91bGQgaW50ZWdyYXRlIHJlbGF0aXZlbHkgc2VhbWxlc3NseSB3aXRoIHRoZSBicm9hZGVyIHNlcmlhbCBmcmFtZXdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgaG93IHRoaXMgZHJpdmVyIGhvb2tzIGludG8gdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBzZXJpYWwgZHJpdmVyIGxheWVyIGFuZCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0IHVzZXMgdG8gY3VzdG9taXplIHRoZSBVQVJUIGNvbW11bmljYXRpb24gZm9yIEJsdWV0b290aC4gSG9wZWZ1bGx5LCB0aGUgY29kZSBjb21tZW50cyBhcmUgdGhvcm91Z2ggZW5vdWdoIHRvIGd1aWRlIG1lIHRocm91Z2ggdGhlIGZsb3cgY29udHJvbCBtZWNoYW5pc21zIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0XHQgIGFkYXB0ZXIgYW5kIEJyYWluQm94ZXMgQmx1ZXRvb3RoIFBDIENhcmQuXG4gMTE2Olx0XG4gMTE3Olx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBCbHVldG9vdGggVUFSVCBkZXZpY2VzIGludG8gdGhlXG4gMTE4Olx0XHQgIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZSAoaGNpX3VhcnQpLlxuIDExOTpcdFxuIDEyMDpcdGNvbmZpZyBCVF9IQ0lVQVJUX1NFUkRFVlxuIDEyMTpcdFx0Ym9vbFxuIDEyMjpcdFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVUyBcdTAwMjZcdTAwMjYgQlRfSENJVUFSVFxuIDEyMzpcdFx0ZGVmYXVsdCB5XG4gMTI0Olx0XG4gMTI1Olx0Y29uZmlnIEJUX0hDSVVBUlRfSDRcbiAxMjY6XHRcdGJvb2wgXCYjMzQ7VUFSVCAoSDQpIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAxMjc6XHRcdGRlcGVuZHMgb24gQlRfSENJVUFSVFxuIDEyODpcdFx0aGVscFxuIDEyOTpcdFx0ICBVQVJUIChINCkgaXMgc2VyaWFsIHByb3RvY29sIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gQmx1ZXRvb3RoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGV2aWNlIFJlcHJvYmUgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGBTRVJJQUxfREVWX0JVU2AganVtcHMgb3V0IGFzIGEga2V5IGVsZW1lbnQuIEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMuIE5vdywgYWJvdXQgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpdHNlbGYuLi4gSXQgbGl2ZXMgaW4gYGRyaXZlcnMvYmFzZS9kZC5jYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiB0byB0aGUgZHJpdmVyIGNvcmUsIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAsIGVuYWJsaW5nIGEgZGVmZXJyZWQgZGV0YWNoIGFuZCByZS1wcm9iZS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyIG1vZGVsLCBhIGRlZmluaXRlIHRhcmdldCBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBkZWZpbml0ZWx5IGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgaXQmIzM5O3MgZXhwb3J0ZWQuIEFoLCB5ZXMsIGBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSk7YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IGl0JiMzOTtzIGFjY2Vzc2libGUuIFNpbmNlIGl0JiMzOTtzIGEgY29yZSBmdW5jdGlvbiwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aHdoaWxlIHRvIHNwZW5kIHNvbWUgdGltZSBmdXp6aW5nIGl0LgoKSG9sZCBvbiBhIG1pbnV0ZS4uLiBMZXQgbWUgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBSaWdodCwgaXQmIzM5O3MgdXNlZCBpbiBgYnRpbnRlbF9wY2llYCwgYGhjaV9oNWAsIGFuZCBgaXdsd2lmaWAuIGBidGludGVsX3BjaWVgIGFuZCBgaXdsd2lmaWAgYXJlIGJvdGggUENJZSBkcml2ZXJzLiBBbmQgYGhjaV9oNWAgaXMgYSBzZXJpYWwgZHJpdmVyLiBPa2F5LCBjYW4gSSBhY3R1YWxseSByZWFjaCBgaGNpX2g1YCBpbnNpZGUgb2YgUUVNVT8gWWVzLCB2aWEgYGhjaV91YXJ0YCBhbmQgYHNlcmRldmAuIEV4Y2VsbGVudCwgdGhhdOKAmXMgZ3JlYXQgbmV3cyEKClNvLCB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGZvciBmdXp6aW5nIHRoaXMgd291bGQgYmUgdG8gZW5hYmxlIGBCVF9IQ0lVQVJUYCwgYEJUX0hDSVVBUlRfM1dJUkVgLCBhbmQsIG9mIGNvdXJzZSwgYFNFUklBTF9ERVZfQlVTYC4gSnVzdCB0byBiZSBzYWZlLCBsZXQgbWUgZG91YmxlLWNoZWNrIGBTRVJJQUxfREVWX0JVU2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFUklBTF9ERVZfQlVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWctNC0jXG5kcml2ZXJzL3R0eS9zZXJkZXYvS2NvbmZpZzo1Om1lbnVjb25maWcgU0VSSUFMX0RFVl9CVVNcbmRyaXZlcnMvdHR5L3NlcmRldi9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtTZXJpYWwgZGV2aWNlIGJ1c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4MwoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAxMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFByb2JlIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgLiBUaGF0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgYSBrZXkgZm9jdXMuIFJpZ2h0LCBmaXJzdCB0aGluZyBpcyB0byBhZGQgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCYjMzk7cyBkb25lLgoKTm93LCBmb3IgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgaGFyZHdhcmUgaXMgZW5hYmxlZCB0byB3b3JrIHdpdGggdGhpcy4gSSYjMzk7bGwgYWRkIGBCVF9IQ0lVQVJUYCwgYEJUX0hDSVVBUlRfM1dJUkVgLCBhbmQgYFNFUklBTF9ERVZfQlVTYCB0byBgRW5hYmxlQ29uZmlnc2AgLiBQZXJmZWN0LCB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGNvbW1zLgoKTm93LCBJIGp1c3QgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIGlzIHRoZSAqb25seSogY29yZSB0aGluZyBiZWluZyBhZGRlZCBoZXJlLiBHb3R0YSBiZSBwcmVjaXNlLiBDaGVja2luZy4uLiB5ZXAsIGxvb2tzIGxpa2UgSSYjMzk7dmUgYWxzbyBnb3QgYGRldmljZV9yZXByb2JlX3dvcmtfZm5gLiBNYWtlcyBzZW5zZSAtIGl04oCZcyBwcm9iYWJseSB0aGUgd29ya2VyIHRoYXQmIzM5O3MgcnVuIGFzIGEgcmVzdWx0IG9mIHRoZSBzY2hlZHVsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGZ1bmN0aW9ucyBhcmUgY2xlYXJseSB1bmRlcnN0b29kIGJ5IHRoZSBzeXN0ZW0uIEFuZCBmb3IgdGhhdCByZWFzb24sIGJvdGggYXJlIGFsc28gZ29pbmcgdG8gYEZvY3VzU3ltYm9sc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCVF9IQ0lVQVJUJiMzNDssCiAgICAmIzM0O0JUX0hDSVVBUlRfM1dJUkUmIzM0OywKICAgICYjMzQ7U0VSSUFMX0RFVl9CVVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSYjMzQ7LAogICAgJiMzNDtkZXZpY2VfcmVwcm9iZV93b3JrX2ZuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCB0byB0aGUgZHJpdmVyIGNvcmUsIHdoaWNoIGFsbG93cyBzY2hlZHVsaW5nIGEgZGVmZXJyZWQgZGV0YWNoIGFuZCByZS1wcm9iZSBvZiBhIGRldmljZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGRyaXZlciBtb2RlbCB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQuIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGJ5IHNldmVyYWwgZHJpdmVycywgaW5jbHVkaW5nIHRoZSBgaGNpX2g1YCBzZXJpYWwgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUX0hDSVVBUlQmIzM0OywKICAgICYjMzQ7QlRfSENJVUFSVF8zV0lSRSYjMzQ7LAogICAgJiMzNDtTRVJJQUxfREVWX0JVUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9zY2hlZHVsZV9yZXByb2JlJiMzNDssCiAgICAmIzM0O2RldmljZV9yZXByb2JlX3dvcmtfZm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHRoZSBkcml2ZXIgY29yZSwgd2hpY2ggYWxsb3dzIHNjaGVkdWxpbmcgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIGEgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZHJpdmVyIG1vZGVsIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZC4gVGhlIGZ1bmN0aW9uIGlzIHVzZWQgYnkgc2V2ZXJhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGBoY2lfaDVgIHNlcmlhbCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gc3RhbmRhcmRpc2UgZGVmZXJyZWQgZGV2aWNlIHJlcHJvYmluZyBhY3Jvc3MgZHJpdmVycywgcmVwbGFjaW5nIGN1c3RvbSB3b3JrIGl0ZW1zIGluIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYC4gSXQgYWxzbyBhZGRzIGEgYHNodXRkb3duX2RvbmVgIGZsYWcgdG8gcHJldmVudCByZXByb2JpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtIHNodXRkb3duLiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIChlLmcuLCBgc3RydWN0IGRldmljZV9yZXByb2JlYCB2aWEgYGt6YWxsb2Nfb2JqYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCBrZXJuZWwgZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkcml2ZXIgYmluZGluZy91bmJpbmRpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG5ldHdvcmsgcGFja2V0IHBhcnNpbmcsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlKSwgbG9ja2luZyAoZGVhZGxvY2tzKSwgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZjY3M2ZlZjc0ODZhNjk4Yjk0Y2YyOTFkNjU4YmVkYTBlYTU1NzRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDM6MjE6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYmFzZS5oIGIvZHJpdmVycy9iYXNlL2Jhc2UuaAppbmRleCBhNWI3YWJjMTBmZjAyLi42MjM0ZTM3ZGU3ZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYmFzZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKQEAgLTEwNiw2ICYjNDM7MTA2LDEwIEBAIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZSB7CiAgKiBAZGVhZDogVGhpcyBkZXZpY2UgaXMgY3VycmVudGx5IGVpdGhlciBpbiB0aGUgcHJvY2VzcyBvZiBvciBoYXMgYmVlbgogICoJICByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQW55IGFzeW5jaHJvbm91cyBldmVudHMgc2NoZWR1bGVkIGZvciB0aGlzCiAgKgkgIGRldmljZSBzaG91bGQgZXhpdCB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uLgomIzQzOyAqIEBzaHV0ZG93bl9kb25lOiBTZXQgb25jZSBkZXZpY2Vfc2h1dGRvd24oKSBoYXMgcmVhY2hlZCB0aGlzIGRldmljZSwgdW5kZXIKJiM0MzsgKgkgIHRoZSBkZXZpY2UgbG9jaywgYmVmb3JlIGFueSBzaHV0ZG93biBjYWxsYmFjayBydW5zLiBSZWFkIHVuZGVyIHRoZQomIzQzOyAqCSAgZGV2aWNlIGxvY2suIEEgZGVmZXJyZWQgcmUtcHJvYmUgc2NoZWR1bGVkIHdpdGgKJiM0MzsgKgkgIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCkgbXVzdCBub3QgZGV0YWNoIHRoZSBkZXZpY2UgYW55bW9yZS4KICAqCiAgKiBOb3RoaW5nIG91dHNpZGUgb2YgdGhlIGRyaXZlciBjb3JlIHNob3VsZCBldmVyIHRvdWNoIHRoZXNlIGZpZWxkcy4KICAqLwpAQCAtMTIwLDYgJiM0MzsxMjQsNyBAQCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgewogCWNoYXIgKmRlZmVycmVkX3Byb2JlX3JlYXNvbjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CiAJdTggZGVhZDoxOwomIzQzOwl1OCBzaHV0ZG93bl9kb25lOjE7CiB9OwogI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQob2JqKQlcCiAJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCA0ZDAyNjY4Mjk0NGYyLi44YTdkYmU0ZTgzNjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTQ5MDYsNiAmIzQzOzQ5MDYsOSBAQCB2b2lkIGRldmljZV9zaHV0ZG93bih2b2lkKQogCQkJZGV2aWNlX2xvY2socGFyZW50KTsKIAkJZGV2aWNlX2xvY2soZGV2KTsKIAomIzQzOwkJaWYgKGRldi0mZ3Q7cCkKJiM0MzsJCQlkZXYtJmd0O3AtJmd0O3NodXRkb3duX2RvbmUgPSB0cnVlOwomIzQzOwogCQkvKiBEb24mIzM5O3QgYWxsb3cgYW55IG1vcmUgcnVudGltZSBzdXNwZW5kcyAqLwogCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOwogCQlwbV9ydW50aW1lX2JhcnJpZXIoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggNjBjMDA1MjIzODQ0ZC4uZDc2NWUxYWU1NjE0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTE0MzYsMyAmIzQzOzE0MzYsMTA1IEBAIHZvaWQgZHJpdmVyX2RldGFjaChjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogCQlwdXRfZGV2aWNlKGRldik7CiAJfQogfQomIzQzOwomIzQzO3N0cnVjdCBkZXZpY2VfcmVwcm9iZSB7CiYjNDM7CXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CiYjNDM7CWNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmljZV9yZXByb2JlLAomIzQzOwkJCQkJCSB3b3JrLndvcmspOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBycC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBycC0mZ3Q7cGFyZW50OwomIzQzOwlib29sIGRldGFjaGVkID0gZmFsc2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CV9fZGV2aWNlX2RyaXZlcl9sb2NrKGRldiwgcGFyZW50KTsKJiM0MzsJLyoKJiM0MzsJICogcnAtJmd0O2RydiBpcyBvbmx5IGV2ZXIgY29tcGFyZWQsIG5ldmVyIGRlcmVmZXJlbmNlZDogdGhlIGRyaXZlciBpdAomIzQzOwkgKiBwb2ludHMgdG8gbWF5IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGJ5IG5vdy4KJiM0MzsJICovCiYjNDM7CWlmICghZGV2LSZndDtwLSZndDtkZWFkICZhbXA7JmFtcDsgIWRldi0mZ3Q7cC0mZ3Q7c2h1dGRvd25fZG9uZSAmYW1wOyZhbXA7CiYjNDM7CSAgICBkZXYtJmd0O2RyaXZlciAmYW1wOyZhbXA7IGRldi0mZ3Q7ZHJpdmVyID09IHJwLSZndDtkcnYpIHsKJiM0MzsJCV9fZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldiwgcGFyZW50KTsKJiM0MzsJCWRldGFjaGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwlfX2RldmljZV9kcml2ZXJfdW5sb2NrKGRldiwgcGFyZW50KTsKJiM0MzsKJiM0MzsJaWYgKGRldGFjaGVkKSB7CiYjNDM7CQkvKgomIzQzOwkJICogZGV2aWNlX2F0dGFjaCgpIG11c3QgcnVuIHdpdGggdGhlIHBhcmVudCBsb2NrZWQgb24gYnVzZXMKJiM0MzsJCSAqIHRoYXQgcmVxdWlyZSBpdCwgbWlycm9yaW5nIGJ1c19yZXNjYW5fZGV2aWNlc19oZWxwZXIoKS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHBhcmVudCAmYW1wOyZhbXA7IGRldi0mZ3Q7YnVzLSZndDtuZWVkX3BhcmVudF9sb2NrKQomIzQzOwkJCWRldmljZV9sb2NrKHBhcmVudCk7CiYjNDM7CQlyZXQgPSBkZXZpY2VfYXR0YWNoKGRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICAmIzM0O3JlLXByb2JlIGZhaWxlZCwgZGV2aWNlIGxlZnQgdW5ib3VuZFxuJiMzNDspOwomIzQzOwkJaWYgKHBhcmVudCAmYW1wOyZhbXA7IGRldi0mZ3Q7YnVzLSZndDtuZWVkX3BhcmVudF9sb2NrKQomIzQzOwkJCWRldmljZV91bmxvY2socGFyZW50KTsKJiM0MzsJfQomIzQzOwomIzQzOwlwdXRfZGV2aWNlKGRldik7CiYjNDM7CXB1dF9kZXZpY2UocGFyZW50KTsKJiM0MzsJa2ZyZWUocnApOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSAtIHNjaGVkdWxlIGEgZGVmZXJyZWQgZGV0YWNoIGFuZCByZS1wcm9iZQomIzQzOyAqIEBkZXY6IGRldmljZSB0byBkZXRhY2ggYW5kIHJlLXByb2JlCiYjNDM7ICogQGRlbGF5X21zOiBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSByZS1wcm9iZSBydW5zCiYjNDM7ICoKJiM0MzsgKiBTY2hlZHVsZSBhIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgQGRldiBhZnRlciBAZGVsYXlfbXMgbWlsbGlzZWNvbmRzLgomIzQzOyAqIFRoZSByZS1wcm9iZSBpcyBza2lwcGVkIGlmLCBieSB0aGUgdGltZSB0aGUgc2NoZWR1bGVkIHdvcmsgcnVucywgdGhlCiYjNDM7ICogZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQsIHRoZSBzeXN0ZW0gc2h1dGRvd24gc2VxdWVuY2UgaGFzIHJlYWNoZWQgdGhlCiYjNDM7ICogZGV2aWNlLCBvciBAZGV2IGlzIG5vIGxvbmdlciBib3VuZCB0byB0aGUgZHJpdmVyIHRoYXQgd2FzIGJvdW5kIGF0CiYjNDM7ICogc2NoZWR1bGluZyB0aW1lLiBJbiBwYXJ0aWN1bGFyIGFuIGFkbWluaXN0cmF0aXZlIHVuYmluZCBpcyBuZXZlcgomIzQzOyAqIHVuZG9uZSBieSBhIHN0YWxlIHJlLXByb2JlLgomIzQzOyAqCiYjNDM7ICogVGhlIHdvcmsgZnVuY3Rpb24gaXMgYnVpbHQtaW4gdGV4dCwgc28gdGhlIGJvdW5kIGRyaXZlciBtYXkgY2FsbCB0aGlzCiYjNDM7ICogZnJvbSBpdHMgb3duIGNvZGUgd2l0aG91dCBob2xkaW5nIGEgbW9kdWxlIHJlZmVyZW5jZS4gSWYgdGhlIGRyaXZlcgomIzQzOyAqIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdvcmsgcnVucywgZHJpdmVyIHVucmVnaXN0cmF0aW9uIHVuYmluZHMKJiM0MzsgKiBAZGV2IGZpcnN0IGFuZCB0aGUgc2NoZWR1bGVkIHdvcmsgZG9lcyBub3RoaW5nLgomIzQzOyAqCiYjNDM7ICogTXVsdGlwbGUgcGVuZGluZyByZS1wcm9iZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhcmUgaW5kaXZpZHVhbGx5IHNhZmU7CiYjNDM7ICogYSBjYWxsZXIgdGhhdCB3YW50cyBhdCBtb3N0IG9uZSBwZW5kaW5nIHJlLXByb2JlIG11c3QgZ2F0ZSBzY2hlZHVsaW5nCiYjNDM7ICogaXRzZWxmLgomIzQzOyAqCiYjNDM7ICogTWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBkZXYgaXMgbm90IGEgcmVnaXN0ZXJlZCBkZXZpY2UKJiM0MzsgKiBib3VuZCB0byBhIGRyaXZlciwgLUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5X21zKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9yZXByb2JlICpycDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2J1cyB8fCAhZGV2LSZndDtwIHx8ICFkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghZGV2LSZndDtkcml2ZXIpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcnAgPSBremFsbG9jX29iaigqcnApOwomIzQzOwlpZiAoIXJwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJwLSZndDtkZXYgPSBnZXRfZGV2aWNlKGRldik7CiYjNDM7CS8qCiYjNDM7CSAqIFBpbiB0aGUgcGFyZW50IHRvbzogdGhlIHdvcmsgbG9ja3MgaXQsIGFuZCBhbiB1bnJlZ2lzdGVyIG9mIEBkZXYKJiM0MzsJICogd291bGQgb3RoZXJ3aXNlIGRyb3AgdGhlIGxhc3QgcmVmZXJlbmNlIGJlZm9yZSB0aGUgd29yayBydW5zLgomIzQzOwkgKi8KJiM0MzsJcnAtJmd0O3BhcmVudCA9IGdldF9kZXZpY2UoZGV2LSZndDtwYXJlbnQpOwomIzQzOwlycC0mZ3Q7ZHJ2ID0gUkVBRF9PTkNFKGRldi0mZ3Q7ZHJpdmVyKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtycC0mZ3Q7d29yaywgZGV2aWNlX3JlcHJvYmVfd29ya19mbik7CiYjNDM7CXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCAmYW1wO3JwLSZndDt3b3JrLAomIzQzOwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMKaW5kZXggYmFhNjIxYjNmZWY5My4uMjliZTA1ZDQxNDI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMKQEAgLTMwMTIsNyAmIzQzOzMwMTIsNyBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSkKIAkgKiBCVCBuZWVkcyBwY2lfc2F2ZV9zdGF0ZSgpL3BjaV9yZXN0b3JlX3N0YXRlKCkgYmVjYXVzZSB0aGUgQlQgZHJpdmVyCiAJICogaXMgc3RpbGwgcGFydGlhbGx5IGF0dGFjaGVkIHdoZW4gdGhlIF9QUlIgcnVucyAoaXQgaGFzbiYjMzk7dCBiZWVuIHVuYm91bmQgeWV0KS4KIAkgKiBUaGUgUENJIGRldmljZSBuZWVkcyB0byByZW1haW4gbWluaW1hbGx5IGZ1bmN0aW9uYWwgc28gdGhhdAotCSAqIGRldmljZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2KSBjYW4gd29yayBhZnRlcndhcmQKJiM0MzsJICogdGhlIGRlZmVycmVkIHJlLXByb2JlIG9mIHRoZSBCVCBkZXZpY2UgY2FuIHdvcmsgYWZ0ZXJ3YXJkCiAJICovCiAJcmV0ID0gYnRpbnRlbF9wY2llX2FjcGlfcmVzZXRfbWV0aG9kKGRhdGEpOwogCkBAIC0zMDIzLDE0ICYjNDM7MzAyMywxNiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSkKIAl9CiAKIAlpZiAoIXJldCkgewotCQlpZiAoZGV2aWNlX3JlcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYpKQotCQkJQlRfRVJSKCYjMzQ7QlQgcmVwcm9iZSBmYWlsZWQgZm9yIEJERjolcyYjMzQ7LCBwY2lfbmFtZShwZGV2KSk7CiYjNDM7CQlpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoJmFtcDtwZGV2LSZndDtkZXYsIDApKQomIzQzOwkJCUJUX0VSUigmIzM0O0JUIHJlcHJvYmUgc2NoZWR1bGluZyBmYWlsZWQgZm9yIEJERjolcyYjMzQ7LAomIzQzOwkJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJfQogfQogCiAvKgotICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGUgUENJCi0gKiBjb3JlIHZpYSBkZXZpY2VfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCYjMzk7cyBjb250cmFjdC4KJiM0MzsgKiBJc3N1ZSBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IGFuZCBoYW5kIHRlYXJkb3duL3JlLWluaXQgb2ZmIHRvIHRoZQomIzQzOyAqIGRyaXZlciBjb3JlIHZpYSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCYjMzk7cwomIzQzOyAqIGNvbnRyYWN0LgogICoKICAqIENhbGxlciBtdXN0IGhvbGQgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpIGFuZCBtdXN0IGhhdmUgYWxyZWFkeQogICogZGlzYWJsZWQgaW50ZXJydXB0cyBhbmQgZHJhaW5lZCBib3RoIHJ4X3dvcmsgYW5kIGNvcmVkdW1wX3dvcmsuCkBAIC0zMDUyLDE0ICYjNDM7MzA1NCwxMiBAQCBzdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9wZXJmb3JtX2ZscihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpCiAJCXJldHVybiBlcnI7CiAJfQogCi0JLyogZGV2aWNlX3JlcHJvYmUoKSBhbHdheXMgZGV0YWNoZXMgdGhlIGRyaXZlciBmaXJzdCAocnVubmluZwotCSAqIC5yZW1vdmUoKSwgd2hpY2ggZnJlZXMgJiMzOTtkYXRhJiMzOTspOyBhbnkgcmUtcHJvYmUgZmFpbHVyZSBsZWF2ZXMgdGhlCi0JICogZGV2aWNlIHVuYm91bmQgYnV0ICYjMzk7ZGF0YSYjMzk7IGlzIGFscmVhZHkgZ29uZSwgc28ganVzdCBsb2cgaXQuCi0JICovCi0JaWYgKGRldmljZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2KSkKLQkJQlRfRVJSKCYjMzQ7QlQgcmVwcm9iZSBmYWlsZWQgZm9yIEJERjolcyYjMzQ7LCBwY2lfbmFtZShwZGV2KSk7CiYjNDM7CWVyciA9IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCZhbXA7cGRldi0mZ3Q7ZGV2LCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCUJUX0VSUigmIzM0O0JUIHJlcHJvYmUgc2NoZWR1bGluZyBmYWlsZWQgZm9yIEJERjolcyYjMzQ7LAomIzQzOwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKQpAQCAtMzA5MCwxMSAmIzQzOzMwOTAsMTUgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aykKIAogCWJ0X2Rldl9kYmcoZGF0YS0mZ3Q7aGRldiwgJiMzNDtSZWxlYXNlIGJsdWV0b290aCBpbnRlcmZhY2UmIzM0Oyk7CiAKLQkvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGV5Ci0JICogZGVzdHJveSAmIzM5O2RhdGEmIzM5OyB2aWEgZGV2aWNlX3JlcHJvYmUoKSAoYSBmcmVzaCBwcm9iZSByZS1JTklUX1dPUktzCi0JICogdGhlIGR1bXAgd29ya2VycyB3aXRoIGRpc2FibGUgY291bnQgMCksIHNvIGVuYWJsZV93b3JrKCkgbXVzdAotCSAqIE5PVCBiZSBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwKLQkgKiB3aXRoICYjMzk7ZGF0YSYjMzk7IHN0aWxsIGFsaXZlLCBpbiB3aGljaCBjYXNlIHdlIGJhbGFuY2UgdGhlCiYjNDM7CS8qIEJvdGggcmVzZXQgcGF0aHMgZm9sbG93IHRoZSBzYW1lIGNvbnRyYWN0OiBvbiBzdWNjZXNzIHRoZQomIzQzOwkgKiBkZWZlcnJlZCByZS1wcm9iZSBzY2hlZHVsZWQgd2l0aCBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpCiYjNDM7CSAqIGRlc3Ryb3lzICYjMzk7ZGF0YSYjMzk7IGJ5IHJlLXJ1bm5pbmcgLnByb2JlKCkgKHdoaWNoIHJlLUlOSVRfV09SS3MgdGhlCiYjNDM7CSAqIGR1bXAgd29ya2VycyB3aXRoIGRpc2FibGUgY291bnQgMCksIHNvIGVuYWJsZV93b3JrKCkgbXVzdCBOT1QgYmUKJiM0MzsJICogY2FsbGVkIG9uIHRoZSBzdWNjZXNzIHBhdGguICYjMzk7ZGF0YSYjMzk7IHN0YXlzIGFsaXZlIHVudGlsIHRoZSBkZWZlcnJlZAomIzQzOwkgKiBkZXRhY2ggcnVuczsgaW4gdGhpcyB3aW5kb3cgbmV3IGFjdGl2aXR5IGlzIGZlbmNlZCBieQomIzQzOwkgKiBCVElOVEVMX1BDSUVfUkVDT1ZFUllfSU5fUFJPR1JFU1MsIHRoZSBtYXNrZWQgaW50ZXJydXB0cyBhbmQgdGhlCiYjNDM7CSAqIGRpc2FibGVkIGR1bXAgd29ya2Vycy4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwgd2l0aCBubwomIzQzOwkgKiByZS1wcm9iZSBzY2hlZHVsZWQsIGluIHdoaWNoIGNhc2Ugd2UgYmFsYW5jZSB0aGUKIAkgKiBkaXNhYmxlX3dvcmtfc3luYygpIGNhbGxzIGFib3ZlIHNvIGEgbGF0ZXIgc3VjY2Vzc2Z1bCByZXNldCBpcwogCSAqIG5vdCBwZXJtYW5lbnRseSBibG9ja2VkLgogCSAqCkBAIC0zNDYwLDEzICYjNDM7MzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWRpc2FibGVfd29ya19zeW5jKCZhbXA7ZGF0YS0mZ3Q7Znd0cmlnZ2VyX3dvcmspOwogCWRpc2FibGVfd29ya19zeW5jKCZhbXA7ZGF0YS0mZ3Q7bWJveF93b3JrKTsKIAotCS8qIENhbmNlbCBwZW5kaW5nIHJlc2V0IHdvcmsuIFNraXAgb25seSB3aGVuIHJlbW92ZSgpIGlzIGNhbGxlZCBmcm9tCi0JICogd2l0aGluIHRoZSByZXNldCB3b3JrIGl0c2VsZiAoUExEUiBkZXZpY2VfcmVwcm9iZSBwYXRoKSB0byBhdm9pZAotCSAqIGRlYWRsb2NrLiBjdXJyZW50X3dvcmsoKSByZXR1cm5zIHRoZSB3b3JrX3N0cnVjdCBvZiB0aGUgY2FsbGVyIGlmCi0JICogd2UgYXJlIGluIGEgd29ya3F1ZXVlIGNvbnRleHQuCiYjNDM7CS8qIFRoZSBkZWZlcnJlZCByZS1wcm9iZSB0cmlnZ2VycyAucmVtb3ZlKCkgZnJvbSB0aGUgZHJpdmVyIGNvcmUmIzM5O3MKJiM0MzsJICogd29yayBpdGVtLCBuZXZlciBmcm9tIHJlc2V0X3dvcmsgaXRzZWxmLCBzbyB0aGlzIG5vIGxvbmdlciBydW5zCiYjNDM7CSAqIG5lc3RlZCBpbiByZXNldF93b3JrOyBkaXNhYmxlX3dvcmtfc3luYygpIGFsc28gZ3VhcmFudGVlcyB0aGUKJiM0MzsJICogcmVzZXQgd29yayBoYXMgZnVsbHkgcmV0dXJuZWQgYmVmb3JlICYjMzk7ZGF0YSYjMzk7IGlzIGZyZWVkLgogCSAqLwotCWlmIChjdXJyZW50X3dvcmsoKSAhPSAmYW1wO2RhdGEtJmd0O3Jlc2V0X3dvcmspCi0JCWRpc2FibGVfd29ya19zeW5jKCZhbXA7ZGF0YS0mZ3Q7cmVzZXRfd29yayk7CiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7ZGF0YS0mZ3Q7cmVzZXRfd29yayk7CiAKIAlidGludGVsX3BjaWVfZGlzYWJsZV9pbnRlcnJ1cHRzKGRhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jCmluZGV4IGIxOTk5ZTE0YWFkZWYuLjNmZGUxZDVhNWFlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jCkBAIC05OTAsNyAmIzQzOzk5MCw3IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc2V0dXAoc3RydWN0IGg1ICpoNSkKIHN0YXRpYyB2b2lkIGg1X2J0cnRsX29wZW4oc3RydWN0IGg1ICpoNSkKIHsKIAkvKgotCSAqIFNpbmNlIGg1X2J0cnRsX3Jlc3VtZSgpIGRvZXMgYSBkZXZpY2VfcmVwcm9iZSgpIHRoZSBzdXNwZW5kIGhhbmRsaW5nCiYjNDM7CSAqIFNpbmNlIGg1X2J0cnRsX3Jlc3VtZSgpIHNjaGVkdWxlcyBhIGRldmljZSByZS1wcm9iZSB0aGUgc3VzcGVuZCBoYW5kbGluZwogCSAqIGRvbmUgYnkgdGhlIGhjaV9zdXNwZW5kX25vdGlmaWVyIGlzIG5vdCBuZWNlc3Nhcnk7IGl0IGFjdHVhbGx5IGNhdXNlcwogCSAqIGRlbGF5cyBhbmQgYSBidW5jaCBvZiBlcnJvcnMgdG8gZ2V0IGxvZ2dlZCwgc28gZGlzYWJsZSBpdC4KIAkgKi8KQEAgLTEwNDksNDYgJiM0MzsxMDQ5LDE1IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc3VzcGVuZChzdHJ1Y3QgaDUgKmg1KQogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSB7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotfTsKLQotc3RhdGljIHZvaWQgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlLCB3b3JrKTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZGV2aWNlX3JlcHJvYmUocmVwcm9iZS0mZ3Q7ZGV2KTsKLQlpZiAocmV0ICZhbXA7JmFtcDsgcmV0ICE9IC1FUFJPQkVfREVGRVIpCi0JCWRldl9lcnIocmVwcm9iZS0mZ3Q7ZGV2LCAmIzM0O1JlcHJvYmUgZXJyb3IgJWRcbiYjMzQ7LCByZXQpOwotCi0JcHV0X2RldmljZShyZXByb2JlLSZndDtkZXYpOwotCWtmcmVlKHJlcHJvYmUpOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotfQotCiBzdGF0aWMgaW50IGg1X2J0cnRsX3Jlc3VtZShzdHJ1Y3QgaDUgKmg1KQogewotCWlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgJmFtcDtoNS0mZ3Q7ZmxhZ3MpKSB7Ci0JCXN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlOwotCi0JCXJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7Ci0JCWlmICghcmVwcm9iZSkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiYjNDM7CWlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgJmFtcDtoNS0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCZhbXA7aDUtJmd0O2h1LSZndDtzZXJkZXYtJmd0O2RldiwgMCk7CiAKLQkJSU5JVF9XT1JLKCZhbXA7cmVwcm9iZS0mZ3Q7d29yaywgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIpOwotCQlyZXByb2JlLSZndDtkZXYgPSBnZXRfZGV2aWNlKCZhbXA7aDUtJmd0O2h1LSZndDtzZXJkZXYtJmd0O2Rldik7Ci0JCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7cmVwcm9iZS0mZ3Q7d29yayk7Ci0JfSBlbHNlIHsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGg1LSZndDtkZXZpY2Vfd2FrZV9ncGlvLCAxKTsKJiM0MzsJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGg1LSZndDtkZXZpY2Vfd2FrZV9ncGlvLCAxKTsKIAotCQlpZiAodGVzdF9iaXQoSDVfSFdfRkxPV19DT05UUk9MLCAmYW1wO2g1LSZndDtmbGFncykpCi0JCQlzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woaDUtJmd0O2h1LSZndDtzZXJkZXYsIHRydWUpOwotCX0KJiM0MzsJaWYgKHRlc3RfYml0KEg1X0hXX0ZMT1dfQ09OVFJPTCwgJmFtcDtoNS0mZ3Q7ZmxhZ3MpKQomIzQzOwkJc2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKGg1LSZndDtodS0mZ3Q7c2VyZGV2LCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmMKaW5kZXggNzNhYWUxMTI1MDQyMS4uNWFlNzM0Y2I5MDI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jCkBAIC03OCw0NyAmIzQzOzc4LDExIEBAIHZvaWQgaXdsX3RyYW5zX2ZyZWVfcmVzdGFydF9saXN0KHZvaWQpCiAJfQogfQogCi1zdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgewotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7Ci19OwotCi1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcmVwcm9iZV93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKQotewotCXN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTsKLQotCXJlcHJvYmUgPSBjb250YWluZXJfb2Yod2ssIHR5cGVvZigqcmVwcm9iZSksIHdvcmsud29yayk7Ci0KLQlpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS0mZ3Q7ZGV2KSkKLQkJZGV2X2VycihyZXByb2JlLSZndDtkZXYsICYjMzQ7cmVwcm9iZSBmYWlsZWQhXG4mIzM0Oyk7Ci0JcHV0X2RldmljZShyZXByb2JlLSZndDtkZXYpOwotCWtmcmVlKHJlcHJvYmUpOwotCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfdHJhbnNfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGRlbGF5X21zKQogewotCXN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTsKLQotCS8qCi0JICogZ2V0IGEgbW9kdWxlIHJlZmVyZW5jZSB0byBhdm9pZCBkb2luZyB0aGlzIHdoaWxlIHVubG9hZGluZwotCSAqIGFueXdheSBhbmQgdG8gYXZvaWQgc2NoZWR1bGluZyBhIHdvcmsgd2l0aCBjb2RlIHRoYXQmIzM5O3MKLQkgKiBiZWluZyByZW1vdmVkLgotCSAqLwotCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7Ci0JCUlXTF9FUlIodHJhbnMsICYjMzQ7TW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkIC0gYWJvcnRcbiYjMzQ7KTsKLQkJcmV0dXJuOwotCX0KLQotCXJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7Ci0JaWYgKCFyZXByb2JlKSB7Ci0JCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotCQlyZXR1cm47Ci0JfQotCXJlcHJvYmUtJmd0O2RldiA9IGdldF9kZXZpY2UodHJhbnMtJmd0O2Rldik7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtyZXByb2JlLSZndDt3b3JrLCBpd2xfdHJhbnNfcmVwcm9iZV93ayk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhbXA7cmVwcm9iZS0mZ3Q7d29yaywgbXNlY3NfdG9famlmZmllcyhkZWxheV9tcykpOwomIzQzOwlpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUodHJhbnMtJmd0O2RldiwgZGVsYXlfbXMpKQomIzQzOwkJSVdMX0VSUih0cmFucywgJiMzNDtDb3VsZCBub3Qgc2NoZWR1bGUgcmVwcm9iZVxuJiMzNDspOwogfQogCiAjZGVmaW5lIElXTF9UUkFOU19SRVNFVF9PS19USU1FCTcgLyogc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggN2IyYmFmZmRkMmY1NS4uMWNkZDQwYTZhNDhkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xMzEyLDYgJiM0MzsxMzEyLDggQEAgaW50ICBfX211c3RfY2hlY2sgZGV2aWNlX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOwogdm9pZCBkZXZpY2VfaW5pdGlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogaW50IF9fbXVzdF9jaGVjayBkZXZpY2VfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwomIzQzO2ludCBfX211c3RfY2hlY2sgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBkZWxheV9tcyk7CiAKIGJvb2wgZGV2aWNlX2lzX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAzOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzUKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgUmVwcm9iZSBQYXRjaCBmb3IgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yIHRvIGNvbnNvbGlkYXRlIGRldmljZSByZXByb2JpbmcgbG9naWMuIFRoZSBtYWluIGdvYWwgaGVyZSBpcyB0byByZXBsYWNlIGN1c3RvbSByZXByb2JlIG1lY2hhbmlzbXMgaW4gc2V2ZXJhbCBkcml2ZXJzIChsaWtlIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYCkgd2l0aCBhIHNpbmdsZSwgdW5pZmllZCBmdW5jdGlvbiwgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpbiBgZHJpdmVycy9iYXNlL2RkLmNgLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBzaHV0IGRvd24uCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGtlcm5lbCBpbnRlcm5hbHMsIHRoZSBkZXNjcmlwdGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIHByaW1hcmlseSBhYm91dCBjbGVhbnVwIGFuZCByYWNlIGNvbmRpdGlvbiBmaXhpbmcsIGVzcGVjaWFsbHkgYXJvdW5kIG1vZHVsZSB1bmxvYWRpbmcgYW5kIGRldmljZSBsaWZlY3ljbGUuIEl0ICpzZWVtcyogbGlrZSB0aGVyZSBhcmUgbm8gbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlcyBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBnb29kLiBUaGF0IHR5cGljYWxseSBtZWFucyBmZXdlciBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBzbmVhayBpbi4gVGhleSYjMzk7cmUgZXhwbGljaXRseSBjbGFpbWluZyBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRocm91Z2ggYm91bmRzIGNoZWNrcywgbGVuZ3RocywgZXRjLiBUaGlzIGlzIHZlcnkgZW5jb3VyYWdpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKVGhlcmVmb3JlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoICpzaG91bGRuJiMzOTt0KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgdHJpZ2dlciBhIEtNU0FOIHdhcm5pbmcuIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgZHVyaW5nIHRoaXMgcmVmYWN0b3JpbmcuIFNvIGZhciwgc28gZ29vZC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhhdCBga3phbGxvY19vYmooKnJwKWAgY2FsbCBpcyBnaXZpbmcgbWUgcGF1c2UuIFdhaXQsIHRoYXQgbG9va3MgdW51c3VhbC4gYGt6YWxsb2Nfb2JqYD8gSXMgdGhhdCBhIG1hY3JvPyBJIHR5cGljYWxseSB1c2UgYGt6YWxsb2Moc2l6ZW9mKCpycCksIEdGUF9LRVJORUwpYC4gTWF5YmUgSSBtaXNyZWFkIGl0LCBvciBpcyBpdCBhIGN1c3RvbSBtYWNybz8gVGhpcyBpc24mIzM5O3Qgc3RhbmRhcmQsIEkmIzM5O20gcHJldHR5IHN1cmUuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIFdhaXQsIGhvbGQgb24uIGBremFsbG9jX29iamAgaXMgbm90IGEgc3RhbmRhcmQgTGludXgga2VybmVsIEFQSS4gVGhpcyBpcyBjb25jZXJuaW5nLCBpdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kLiBMZXQgbWUgY2hlY2sgaWYgaXQmIzM5O3MgaW4gdGhlIGtlcm5lbC4gV2FpdCwgYGt6YWxsb2Nfb2JqYCBpcyBub3QgYSBzdGFuZGFyZCBtYWNyby4gQWgsIHdhaXQsIHRoaXMgbWlnaHQgYmUgYSBtYWNybyBpbnRyb2R1Y2VkIHJlY2VudGx5IG9yLCBwb3RlbnRpYWxseSwgYSB0eXBvIGluIHRoZSBwYXRjaCBkZXNjcmlwdGlvbi4gTGV0IG1lIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY19vYmomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc5MjczIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0PTEwMz1saXN0OlxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE0LVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMTU6ICAgICAgICAgIGdyb2NrID0ga3phbGxvY19vYmooKmdyb2NrKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE2LSAgICAgICAgICBpZiAoIWdyb2NrKVxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI1LVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMjY6ICAgICAgICAgIGRpbWl0cmkgPSBremFsbG9jX29iaigqZGltaXRyaSk7XG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTEyNy0gICAgICAgICAgaWYgKCFkaW1pdHJpKVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdD00NT1hIG1lc3NhZ2UgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEFQSSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5KS5cbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtODktXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTA6XHRcdGRjX3N5bmMgPSBremFsbG9jX29iaigqZGNfc3luYyk7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTE6XHRcdGRjX2FzeW5jID0ga3phbGxvY19vYmooKmRjX2FzeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC05Mi1cbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q9MjY9RXhhbXBsZTpcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3QtNDQtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q6NDU6XHRcdG15X2ZoID0ga3phbGxvY19vYmooKm15X2ZoKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00Ni1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NjQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGEgemVyb2VkIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY3LVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTY4Olx0cCA9IGt6YWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAwLVx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAxOlx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAyLVx0cHRyID0ga21hbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDM6XHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNC1cdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0yMDg9dG8gZGV0YWlscyBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNjgtICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MjY5OiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNzAtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKVxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02MjM9QWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhIDpjOmZ1bmM6YHNuZF9jYXJkX25ldygpYFxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzAtICAuLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjYzMTogIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMyLVxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD02OTg9ZGVzdHJ1Y3RvciBhbmQgUENJIGVudHJpZXMuIEV4YW1wbGUgY29kZSBpcyBzaG93biBmaXJzdCwgYmVsb3c6OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NDktXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NzUwOiAgICAgICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NTEtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKSB7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTM4MjM9Y2hpcCBkYXRhIGluZGl2aWR1YWxseTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzUtICAgICAgICAgIC4uLi5cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDozODM2OiAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzctICAgICAgICAgIC4uLi5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ9Nzk0PWludCBteV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDEtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQ6ODAyOlx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMy1cbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz02ND1tb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkciwgRWxmNjRfU2hkciAqc2VjaGRycyxcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05NS1cdG5zeW1zID0gc3ltdGFiLVx1MDAzZXNoX3NpemUgLyBzaXplb2YoRWxmNjRfU3ltKTtcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjk2Olx0Y2hhaW5zID0ga3phbGxvY19vYmpzKHN0cnVjdCBnb3RfZW50cnksIG5zeW1zKTtcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk3LVx0aWYgKCFjaGFpbnMpIHtcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jPTM5MD1yZWdpc3Rlcl9jcHVzKHZvaWQpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTQtXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYzozOTU6XHRcdHN0cnVjdCBjcHUgKnAgPSBremFsbG9jX29iaigqcCk7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5Ni1cdFx0aWYgKCFwKVxuLS1cbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYz0xMTIwPXN0YXRpYyBpbnQgaml0X3ByZXBhcmVfZmluYWxfbWVtX2FsbG9jKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxuLS1cbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMxLVx0aWYgKGN0eC1cdTAwM2VuZWVkX2V4dHJhX3Bhc3MpIHtcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYzoxMTMyOlx0XHRjdHgtXHUwMDNlaml0X2RhdGEgPSBremFsbG9jX29iaigqY3R4LVx1MDAzZWppdF9kYXRhKTtcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMzLVx0XHRpZiAoIWN0eC1cdTAwM2VqaXRfZGF0YSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MjIwPWxvY29tb19pbml0X29uZV9jaGlsZChzdHJ1Y3QgbG9jb21vICpsY2hpcCwgc3RydWN0IGxvY29tb19kZXZfaW5mbyAqaW5mbylcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI0LVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjIyNTpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjYtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0zNTY9X19sb2NvbW9fcHJvYmUoc3RydWN0IGRldmljZSAqbWUsIHN0cnVjdCByZXNvdXJjZSAqbWVtLCBpbnQgaXJxKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjItXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MzYzOlx0bGNoaXAgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vKTtcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjQtXHRpZiAoIWxjaGlwKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz03MzM9c2ExMTExX2luaXRfb25lX2NoaWxkKHN0cnVjdCBzYTExMTEgKnNhY2hpcCwgc3RydWN0IHJlc291cmNlICpwYXJlbnQsXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTczOS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo3NDA6XHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzQxLVx0aWYgKCFkZXYpIHtcbi0tXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYz0xNzg9c3RhdGljIGludCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4Ny1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jOjE4ODpcdGRldnB0ciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzY29vcF9kZXYpO1xuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg5LVx0aWYgKCFkZXZwdHIpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jPTEwOD1zdGF0aWMgaW50IHNlY29uZGFyeV9iaWdsaXR0bGVfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTAtXHRpZiAoIWNwdV92dGFibGVbY3B1XSlcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYzoxMTE6XHRcdGNwdV92dGFibGVbY3B1XSA9IGt6YWxsb2Nfb2JqKCpjcHVfdnRhYmxlW2NwdV0pO1xuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMi1cbi0tXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jPTE2OT1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4MS1cdC8qIEFsbG9jYXRlIHRoZSBWRFNPIHRleHQgcGFnZWxpc3QgKi9cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM6MTgyOlx0dmRzb190ZXh0X3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHRleHRfcGFnZXMpO1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODMtXHRpZiAodmRzb190ZXh0X3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYz0yNjE9aW50IF9faW5pdCBkYzIxMjg1X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY0LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYzoyNjU6XHRyZXMgPSBremFsbG9jX29ianMoc3RydWN0IHJlc291cmNlLCAyKTtcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY2LVx0aWYgKCFyZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jPTY5PXN0YXRpYyBpbnQgX19pbml0IGVic2EyODVfbGVkc19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04Ni1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM6ODc6XHRcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04OC1cdFx0aWYgKCFsZWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jPTcyMD1zdGF0aWMgaW50IF9faW5pdCBuZXR3aW5kZXJfbGVkc19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTcyOS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYzo3MzA6XHRcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTczMS1cdFx0aWYgKCFsZWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jPTQ3Mz1zdGF0aWMgaW50IGlteF9tbWRjX3BlcmZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkIF9faW9tZW0gKm1tZGNfYmFzZSxcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDc5LVxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jOjQ4MDpcdHBtdV9tbWRjID0ga3phbGxvY19vYmooKnBtdV9tbWRjKTtcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00ODEtXHRpZiAoIXBtdV9tbWRjKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jPTExND1zdGF0aWMgdm9pZCBfX2luaXQgaTJjX3F1aXJrKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEyOS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYzoxMzA6XHRcdG5ld19jb21wYXQgPSBremFsbG9jX29iaigqbmV3X2NvbXBhdCk7XG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTMxLVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM9MTYzPXN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1XzM4MF9jb2hlcmVuY3lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg3LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYzoxODg6XHRcdHAgPSBremFsbG9jX29iaigqcCk7XG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4OS1cdFx0cC1cdTAwM2VuYW1lID0ga3N0cmR1cChcJiMzNDthcm0saW8tY29oZXJlbnRcJiMzNDssIEdGUF9LRVJORUwpO1xuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM9MTQ4PXN0YXRpYyBpbnQgX19pbml0IG12ZWJ1X3NvY19kZXZpY2Uodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1Ni1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmM6MTU3Olx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1OC1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM9MzgwPXN0YXRpYyB2b2lkIF9faW5pdCBteHNfbWFjaGluZV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zODktXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jOjM5MDpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zOTEtXHRpZiAoIXNvY19kZXZfYXR0cilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jPTI5ND1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9zeXN0ZW1fZG1hX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM6MzIyOlx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIzLVx0aWYgKCFkKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jPTI5Mj1zdGF0aWMgdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IHJlc19jb3VudCxcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk2LVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jOjI5NzpcdG9tYXBfbWNic3BfZGV2aWNlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHNpemUpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5OC1cdGlmICghb21hcF9tY2JzcF9kZXZpY2VzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX2RtX3RpbWVyX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI3LVxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jOjEyODpcdFx0cGRhdGEgPSBremFsbG9jX29iaigqcGRhdGEpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyOS1cdFx0aWYgKCFwZGF0YSkge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jPTIzMD12b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yMzktXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYzoyNDA6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yNDEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYz03ODY9dm9pZCBfX2luaXQgb21hcF9zb2NfZGV2aWNlX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkwLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jOjc5MTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5Mi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYz0xMzE9c3RhdGljIGludCBvbWFwX2RldmljZV9idWlsZF9mcm9tX2R0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE1OC1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYzoxNTk6XHRod21vZHMgPSBremFsbG9jX29ianMoc3RydWN0IG9tYXBfaHdtb2QgKiwgb2hfY250KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNjAtXHRpZiAoIWh3bW9kcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jPTMzODE9c3RhdGljIGludCBvbWFwX2h3bW9kX2FsbG9jYXRlX21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCxcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk0LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzM5NTpcdHN5c2MgPSBremFsbG9jX29iaigqc3lzYyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk2LVx0aWYgKCFzeXNjKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjQtXHRpZiAobGlzdF9lbXB0eShcdTAwMjZvaC1cdTAwM2VzbGF2ZV9wb3J0cykpIHtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM0MjU6XHRcdG9pID0ga3phbGxvY19vYmooKm9pKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjYtXHRcdGlmICghb2kpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzUxMz1pbnQgb21hcF9od21vZF9pbml0X21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyNy1cdGlmICghb2gpIHtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mjg6XHRcdG9oID0ga3phbGxvY19vYmooKm9oKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjktXHRcdGlmICghb2gpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUzOC1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mzk6XHRcdG9oLVx1MDAzZWNsYXNzID0ga3phbGxvY19vYmooKm9oLVx1MDAzZWNsYXNzKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1NDAtXHRcdGlmICghb2gtXHUwMDNlY2xhc3MpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGFteDNfaWRsZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUsIGludCBjcHUpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxMi1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYzo0MTM6XHRpZGxlX3N0YXRlcyA9IGt6YWxsb2Nfb2JqcygqaWRsZV9zdGF0ZXMsIHN0YXRlX2NvdW50KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTQtXHRpZiAoIWlkbGVfc3RhdGVzKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM9MzA9c3RhdGljIHZvaWQgX19pbml0IHNyX3NldF9udmFsdWVzKHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDEtXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jOjQyOlx0bnZhbHVlX3RhYmxlID0ga3phbGxvY19vYmpzKCpudmFsdWVfdGFibGUsIGNvdW50KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmMtNDMtXHRpZiAoIW52YWx1ZV90YWJsZSlcbi0tXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9MTM5PXN0YXRpYyBpbnQgX19pbml0IHBjaWVfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzEtXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzoxNzI6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3My1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz00NjY9c3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcbi0tXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDkyLVx0ICovXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6NDkzOlx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTQtXHRpZiAoIXJlcylcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jPTY4OT1zdGF0aWMgc3RydWN0IGV4cGFuc2lvbl9jYXJkICpfX2luaXQgZWNhcmRfYWxsb2NfY2FyZChpbnQgdHlwZSwgaW50IHNsb3QpXG4tLVxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTQtXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jOjY5NTpcdGVjID0ga3phbGxvY19vYmooZWNhcmRfdCk7XG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5Ni1cdGlmICghZWMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jPTkzPWludCBfX2luaXQgc2ExMXh4X2Nsa19pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMDktXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjExMDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTExLVx0aWYgKCFodylcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTMyOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzMtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYz0zMTc9aW50IF9faW5pdCBzYTExeDBfcmVnaXN0ZXJfZml4ZWRfcmVndWxhdG9yKGludCBuLFxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjMtXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM6MzI0Olx0Y2ZnLVx1MDAzZWluaXRfZGF0YSA9IGlkID0ga3phbGxvY19vYmooKmNmZy1cdTAwM2Vpbml0X2RhdGEpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyNS1cdGlmICghY2ZnLVx1MDAzZWluaXRfZGF0YSlcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jPTIyNT1zdGF0aWMgaW50IG5lcG9uc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldilcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI3OC1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM6Mjc5Olx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjgwLVx0aWYgKCFkKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM9MTQxPXN0YXRpYyBpbnQgX19pbml0IHJjYXJfZ2VuMl9yZWd1bGF0b3JfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjYtXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYzoxNjc6XHRcdHF1aXJrID0ga3phbGxvY19vYmooKnF1aXJrKTtcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2OC1cdFx0aWYgKCFxdWlyaykge1xuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTM5Mz1zdGF0aWMgaW50IHZlX3NwY19wb3B1bGF0ZV9vcHBzKHVpbnQzMl90IGNsdXN0ZXIpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6Mzk4Olx0b3BwcyA9IGt6YWxsb2Nfb2Jqcygqb3BwcywgTUFYX09QUFMpO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk5LVx0aWYgKCFvcHBzKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTQ0Mj1pbnQgX19pbml0IHZlX3NwY19pbml0KHZvaWQgX19pb21lbSAqYmFzZWFkZHIsIHUzMiBhMTVfY2x1c2lkLCBpbnQgaXJxKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0NC1cdGludCByZXQ7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo0NDU6XHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ2LVx0aWYgKCFpbmZvKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTUyMz1zdGF0aWMgc3RydWN0IGNsayAqdmVfc3BjX2Nsa19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpjcHVfZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyNy1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjUyODpcdHNwYyA9IGt6YWxsb2Nfb2JqKCpzcGMpO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI5LVx0aWYgKCFzcGMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM9MTIzPXN0YXRpYyB2b2lkIF9faW5pdCB2ZXJzYXRpbGVfZHRfcGNpX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDQtXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYzoxNDU6XHRuZXdwcm9wID0ga3phbGxvY19vYmooKm5ld3Byb3ApO1xuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ2LVx0aWYgKCFuZXdwcm9wKVxuLS1cbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYz0xMDU9c3RhdGljIHZvaWQgX19pbml0IHp5bnFfaW5pdF9tYWNoaW5lKHZvaWQpXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMC1cbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYzoxMTE6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTItXHRpZiAoIXNvY19kZXZfYXR0cilcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jPTUwMz1zdGF0aWMgX19pbml0IGludCBsMngwX3BtdV9pbml0KHZvaWQpXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MDktXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jOjUxMDpcdGwyeDBfcG11ID0ga3phbGxvY19vYmooKmwyeDBfcG11KTtcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTExLVx0aWYgKCFsMngwX3BtdSkge1xuLS1cbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM9MzE1PXN0YXRpYyBpbnQgX19pbml0IF9fdW5pcGhpZXJfY2FjaGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ0LVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYzozNDU6XHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDYtXHRpZiAoIWRhdGEpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz01MzM9c3RhdGljIHZvaWQgKl9fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSxcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2MC1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6NTYxOlx0YnVmID0ga3phbGxvY19vYmooKmJ1ZixcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYyLVx0XHRcdCAgZ2ZwIFx1MDAyNiB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0RNQTMyIHwgX19HRlBfSElHSE1FTSkpO1xuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9MTQ4Nz1hcm1faW9tbXVfY3JlYXRlX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhc2UsIHU2NCBzaXplKVxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwNi1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6MTUwNzpcdG1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcpO1xuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA4LVx0aWYgKCFtYXBwaW5nKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYz0zMTY9aW50IF9faW5pdCBhcmNoX3hlbl91bnBvcHVsYXRlZF9pbml0KHN0cnVjdCByZXNvdXJjZSAqKnJlcylcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQzLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM0NDpcdHJlZ3MgPSBremFsbG9jX29ianMoKnJlZ3MsIG5yX3JlZyk7XG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzQ1LVx0aWYgKCFyZWdzKSB7XG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM4Ny1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozODg6XHRcdHRtcF9yZXMgPSBremFsbG9jX29iaigqdG1wX3Jlcyk7XG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg5LVx0XHRpZiAoIXRtcF9yZXMpIHtcbi0tXG5hcmNoL2FybS94ZW4vcDJtLmM9MTUwPWJvb2wgX19zZXRfcGh5c190b19tYWNoaW5lX211bHRpKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYy0xNzgtXG5hcmNoL2FybS94ZW4vcDJtLmM6MTc5Olx0cDJtX2VudHJ5ID0ga3phbGxvY19vYmooKnAybV9lbnRyeSwgR0ZQX05PV0FJVCk7XG5hcmNoL2FybS94ZW4vcDJtLmMtMTgwLVx0aWYgKCFwMm1fZW50cnkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jPTY4PXN0YXRpYyBpbnQgX19pbml0IF9fdmRzb19pbml0KGVudW0gdmRzb19hYmkgYWJpKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04My1cbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYzo4NDpcdHZkc29fcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvW2FiaV0udmRzb19wYWdlcyk7XG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODUtXHRpZiAodmRzb19wYWdlbGlzdCA9PSBOVUxMKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTQ4MD1zdGF0aWMgaW50IHNoYXJlX3Bmbl9oeXAodTY0IHBmbilcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTItXG5hcmNoL2FybTY0L2t2bS9tbXUuYzo0OTM6XHR0aGlzID0ga3phbGxvY19vYmooKnRoaXMpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtNDk0LVx0aWYgKCF0aGlzKSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9OTgxPWludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDctXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDA4Olx0cGd0ID0ga3phbGxvY19vYmooKnBndCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDktXHRpZiAoIXBndClcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMTgwPWludCB0b3B1cF9oeXBfbWVtY2FjaGUoc3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgKm1jLCB1bnNpZ25lZCBsb25nIG1pbl9wYWdlcylcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTg1LVx0aWYgKCFtYy1cdTAwM2VtYXBwaW5nKSB7XG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTg2Olx0XHRtYy1cdTAwM2VtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IHBrdm1fbWFwcGluZyxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODctXHRcdFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNTEwPWludCBfX2luaXQga3ZtX21tdV9pbml0KHUzMiBoeXBfdmFfYml0cylcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQzLVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjU0NDpcdGh5cF9wZ3RhYmxlID0ga3phbGxvY19vYmooKmh5cF9wZ3RhYmxlKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDUtXHRpZiAoIWh5cF9wZ3RhYmxlKSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTMyOD1pbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzMtXHRpZiAoIXZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYikge1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTMzNDpcdFx0c3RydWN0IHZuY3JfdGxiICp2dCA9IGt6YWxsb2Nfb2JqKCp2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGIsXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzM1LVx0XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNzkzPWludCBrdm1faW5pdF9udl9zeXNyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODAyLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTgwMzpcdGt2bS1cdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyA9IGt6YWxsb2Nfb2JqKCooa3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzKSxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDQtXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0xMTY9c3RhdGljIHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlICprdm1fcHRkdW1wX3BhcnNlcl9jcmVhdGUoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjEtXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYzoxMjI6XHRzdCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIzLVx0aWYgKCFzdClcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTIwNz1zdGF0aWMgaW50IGt2bV92Z2ljX2Rpc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucl9zcGlzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjEzLVx0ZGlzdC1cdTAwM2VhY3RpdmVfc3BpcyA9IChhdG9taWNfdClBVE9NSUNfSU5JVCgwKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MjE0Olx0ZGlzdC1cdTAwM2VzcGlzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSwgbnJfc3BpcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMjE1LVx0aWYgKCFkaXN0LVx1MDAzZXNwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zMTY9c3RhdGljIGludCB2Z2ljX2FsbG9jYXRlX3ByaXZhdGVfaXJxc19sb2NrZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdHlwZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTMzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MzMyOlx0dmdpY19jcHUtXHUwMDNlcHJpdmF0ZV9pcnFzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMzLVx0XHRcdFx0XHQgICAgICBudW1fcHJpdmF0ZV9pcnFzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTE0Mj1pbnQga3ZtX3ZnaWNfc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTQ4LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM6MTQ5Olx0ZW50cmllcyA9IGt6YWxsb2Nfb2JqcygqZW50cmllcywgbnIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNTAtXHRpZiAoIWVudHJpZXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTc2PXN0YXRpYyBzdHJ1Y3QgdmdpY19pcnEgKnZnaWNfYWRkX2xwaShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbnRpZCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODctXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6ODg6XHRpcnEgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pcnEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtODktXHRpZiAoIWlycSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9OTcxPXN0YXRpYyBpbnQgdmdpY19pdHNfYWxsb2NfY29sbGVjdGlvbihzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTc2LVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjk3NzpcdGNvbGxlY3Rpb24gPSBremFsbG9jX29iaigqY29sbGVjdGlvbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzgtXHRpZiAoIWNvbGxlY3Rpb24pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTEwMTU9c3RhdGljIHN0cnVjdCBpdHNfaXRlICp2Z2ljX2l0c19hbGxvY19pdGUoc3RydWN0IGl0c19kZXZpY2UgKmRldmljZSxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMDIxOlx0aXRlID0ga3phbGxvY19vYmooKml0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIyLVx0aWYgKCFpdGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTExNDI9c3RhdGljIHN0cnVjdCBpdHNfZGV2aWNlICp2Z2ljX2l0c19hbGxvY19kZXZpY2Uoc3RydWN0IHZnaWNfaXRzICppdHMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDctXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTE0ODpcdGRldmljZSA9IGt6YWxsb2Nfb2JqKCpkZXZpY2UsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0OS1cdGlmICghZGV2aWNlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xODU1PXN0YXRpYyBpbnQgdmdpY19pdHNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODYyLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjE4NjM6XHRpdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg2NC1cdGlmICghaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODg2PXN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzEtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjkzMjpcdHJkcmVnID0ga3phbGxvY19vYmooKnJkcmVnLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzMtXHRpZiAoIXJkcmVnKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jPTI0Mj1pbnQgdmdpY192NF9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNTgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYzoyNTk6XHRkaXN0LVx1MDAzZWl0c192bS52cGVzID0ga3phbGxvY19vYmpzKCpkaXN0LVx1MDAzZWl0c192bS52cGVzLCBucl92Y3B1cyxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI2MC1cdFx0XHRcdFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjA4MD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDEtXHRpZiAoIWppdF9kYXRhKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMTAyOlx0XHRqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpqaXRfZGF0YSk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTAzLVx0XHRpZiAoIWppdF9kYXRhKVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jPTE3PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTIyLVx0dmRzb19wYWdlbGlzdCA9XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYzoyMzpcdFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29fcGFnZXMpO1xuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjQtXHRpZiAodW5saWtlbHkodmRzb19wYWdlbGlzdCA9PSBOVUxMKSkge1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X2lzYV9pbyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3Mi1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjQ3MzpcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBHRlBfQVRPTUlDKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3NC1cdGlmICghcmFuZ2UpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYz00NT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZClcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU1LVx0dmRzb19pbmZvLmNvZGVfbWFwcGluZy5wYWdlcyA9XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jOjU2Olx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvLnNpemUgLyBQQUdFX1NJWkUpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYy01Ny1cbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9NjE0PXN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjQtXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6NjI1Olx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfZWlvaW50Yyk7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI2LVx0aWYgKCFzKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jPTM5ND1zdGF0aWMgaW50IGt2bV9pcGlfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jOjQxMjpcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2lwaSk7XG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTMtXHRpZiAoIXMpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDM6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NTQKCQkJCQkJCW91dHB1dDogMjQwCgkJCQkJCQl0aG91Z2h0czogNzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBEZXRlY3RlZCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gdGhhdCBga3phbGxvY19vYmooKnJwKWAgbWFjcm8uIFJpZ2h0LCBpdCYjMzk7cyBiYXNpY2FsbHkgYSBga3phbGxvY2AgZm9yIHRoZSBvYmplY3QgYHJwYCBwb2ludHMgdG8g4oCTIHRoYXQmIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHplcm9pbmcsIHdoaWNoIGlzIGltcG9ydGFudC4gVGhlIGNvZGUgdGhlbiBzZXRzIHVwIGBycC0mZ3Q7ZGV2YCwgYHJwLSZndDtwYXJlbnRgLCBgcnAtJmd0O2RydmAsIGFuZCBpbml0aWFsaXplcyB0aGUgZGVsYXllZCB3b3JrIHF1ZXVlIGl0ZW0sIGFsbCBnb29kIHNvIGZhci4gVGhlIHdvcmsgZnVuY3Rpb24gaXRzZWxmIHRoZW4gdXNlcyBhbmQgZnJlZXMgYHJwYC4gSXQgZG9lc27igJl0IHNlZW0gbGlrZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ2V0dGluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGFueSB1bmV4cGVjdGVkIGNvbnRyb2wgZmxvdyBwYXRocy4gSXQmIzM5O3MgYWxsIGludGVybmFsIHRvIHRoZSBkcml2ZXIgY29yZSBhbmQgZGV2aWNlIGxpZmVjeWNsZXMuCgpMZXQmIzM5O3MgZG8gYSBmdWxsIHNjYW4gb2YgYWxsIHRoZSBjaGFuZ2VzLiBMb29rcyBsaWtlIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGEgYnVuY2ggb2Ygb3RoZXIgZmlsZXM6IGBkcml2ZXJzL2Jhc2UvYmFzZS5oYCwgYGRyaXZlcnMvYmFzZS9jb3JlLmNgLCBgZHJpdmVycy9iYXNlL2RkLmNgLCBgZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNgLCBgZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNgLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAuIE9rYXksIHRoZXNlIGFsbCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG5ldyBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBsb29rcyBsaWtlIGl0JiMzOTtzIGFpbWVkIGF0IHN0YW5kYXJkaXppbmcgZGVmZXJyZWQgZGV2aWNlIHJlcHJvYmluZyBhY3Jvc3MgZHJpdmVycy4gQWxzbyBzZWUgdGhlIGFkZGl0aW9uIG9mIGEgYHNodXRkb3duX2RvbmVgIGZsYWcuIFRoZSBwYXRjaCByZXBsYWNlcyBjdXN0b20gcmVwcm9iZSBpdGVtcyB3aXRoIHRoaXMgbW9yZSBnZW5lcmljIGNhbGwuIFRoZXJlJiMzOTtzIG5vdGhpbmcgbmV3IGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLCBubyBjb21wbGV4IG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCB3aGVyZSB5b3UgY291bGQgcmVhZCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIHJlYWxseSBqdXN0IGFib3V0IGhvdyB0aGUgZHJpdmVyIGNvcmUgbWFuYWdlcyBkZXZpY2VzLgoKU28sIHRoZSBjaGFuZ2VzIHNlZW0gc3RyYWlnaHRmb3J3YXJkOiB3ZSBhcmUgaW50cm9kdWNpbmcgYSBuZXcgdW5pZmllZCBtZXRob2QgdG8gcmVzY2hlZHVsZSBkZXZpY2VzLiAgSXQgbG9va3MgdG8gYmUgYSBjbGVhbiByZWZhY3RvciB0aGF0JiMzOTtzIHJlcGxhY2luZyBjdXN0b20gd29ya3F1ZXVlIGl0ZW1zIHdpdGggYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYC4gSXQgYWRkcyB0aGUgYHNodXRkb3duX2RvbmVgIGZsYWcgdG8gcHJldmVudCByZXByb2JpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtIHNodXRkb3duLiBUaGUgbWVtb3J5IGZvciB0aGUgcHJvYmUgaXRlbSBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBzbyBpdCYjMzk7cyB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGNvbmZpbmVkIHRvIHRoZSBkcml2ZXIgY29yZSwgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCB3b3JrcXVldWUgc2NoZWR1bGluZyBhbmQgbGlmZWN5Y2xlLiBUaGUgKm9ubHkqIHJlYWwgcmlza3MgaGVyZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIC0gdXNlLWFmdGVyLWZyZWUsIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBmaW5kIHRob3NlIGtpbmRzIG9mIGJ1Z3MuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFyZSBpbnRyb2R1Y2VkLiBJIHdpbGwgc2V0IGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gc3RhbmRhcmRpc2UgZGVmZXJyZWQgZGV2aWNlIHJlcHJvYmluZyBhY3Jvc3MgZHJpdmVycywgcmVwbGFjaW5nIGN1c3RvbSB3b3JrIGl0ZW1zIGluIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYC4gSXQgYWxzbyBhZGRzIGEgYHNodXRkb3duX2RvbmVgIGZsYWcgdG8gcHJldmVudCByZXByb2JpbmcgZGV2aWNlcyBkdXJpbmcgc3lzdGVtIHNodXRkb3duLiBBbGwgbWVtb3J5IGFsbG9jYXRpb25zIChlLmcuLCBgc3RydWN0IGRldmljZV9yZXByb2JlYCB2aWEgYGt6YWxsb2Nfb2JqYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBjb25maW5lZCB0byBpbnRlcm5hbCBrZXJuZWwgZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCBkcml2ZXIgYmluZGluZy91bmJpbmRpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG5ldHdvcmsgcGFja2V0IHBhcnNpbmcsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIG9iamVjdCBsaWZldGltZXMgKHVzZS1hZnRlci1mcmVlKSwgbG9ja2luZyAoZGVhZGxvY2tzKSwgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgYWxsIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHN0YW5kYXJkaXNlIGRlZmVycmVkIGRldmljZSByZXByb2JpbmcgYWNyb3NzIGRyaXZlcnMsIHJlcGxhY2luZyBjdXN0b20gd29yayBpdGVtcyBpbiBgYnRpbnRlbF9wY2llYCwgYGhjaV9oNWAsIGFuZCBgaXdsd2lmaWAuIEl0IGFsc28gYWRkcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bi4gQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyAoZS5nLiwgYHN0cnVjdCBkZXZpY2VfcmVwcm9iZWAgdmlhIGBremFsbG9jX29iamApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwga2VybmVsIGRldmljZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZHJpdmVyIGJpbmRpbmcvdW5iaW5kaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBuZXR3b3JrIHBhY2tldCBwYXJzaW5nLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSksIGxvY2tpbmcgKGRlYWRsb2NrcyksIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFsbCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjE6MjUuOTI1NzYzNDA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5MTU3NjM5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRfSENJVUFSVFwiLFxuICAgIFwiQlRfSENJVUFSVF8zV0lSRVwiLFxuICAgIFwiU0VSSUFMX0RFVl9CVVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZVwiLFxuICAgIFwiZGV2aWNlX3JlcHJvYmVfd29ya19mblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHN0YW5kYXJkaXNlIGRlZmVycmVkIGRldmljZSByZXByb2JpbmcgYWNyb3NzIGRyaXZlcnMsIHJlcGxhY2luZyBjdXN0b20gd29yayBpdGVtcyBpbiBgYnRpbnRlbF9wY2llYCwgYGhjaV9oNWAsIGFuZCBgaXdsd2lmaWAuIEl0IGFsc28gYWRkcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bi4gQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyAoZS5nLiwgYHN0cnVjdCBkZXZpY2VfcmVwcm9iZWAgdmlhIGBremFsbG9jX29iamApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwga2VybmVsIGRldmljZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZHJpdmVyIGJpbmRpbmcvdW5iaW5kaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBuZXR3b3JrIHBhY2tldCBwYXJzaW5nLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSksIGxvY2tpbmcgKGRlYWRsb2NrcyksIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFsbCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gdGhlIGRyaXZlciBjb3JlLCB3aGljaCBhbGxvd3Mgc2NoZWR1bGluZyBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgYSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBkcml2ZXIgbW9kZWwgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyB0aGUgYGhjaV9oNWAgc2VyaWFsIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMToyNS45MjU3NzAyMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzA5MjE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdmNjczZmVmNzQ4NmE2OThiOTRjZjI5MWQ2NThiZWRhMGVhNTU3NGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDM6MjE6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmhcXG5pbmRleCBhNWI3YWJjMTBmZjAyLi42MjM0ZTM3ZGU3ZTk5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmFzZS9iYXNlLmhcXG4rKysgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oXFxuQEAgLTEwNiw2ICsxMDYsMTAgQEAgc3RydWN0IGRyaXZlcl9wcml2YXRlIHtcXG4gICogQGRlYWQ6IFRoaXMgZGV2aWNlIGlzIGN1cnJlbnRseSBlaXRoZXIgaW4gdGhlIHByb2Nlc3Mgb2Ygb3IgaGFzIGJlZW5cXG4gICpcXHQgIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBBbnkgYXN5bmNocm9ub3VzIGV2ZW50cyBzY2hlZHVsZWQgZm9yIHRoaXNcXG4gICpcXHQgIGRldmljZSBzaG91bGQgZXhpdCB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uLlxcbisgKiBAc2h1dGRvd25fZG9uZTogU2V0IG9uY2UgZGV2aWNlX3NodXRkb3duKCkgaGFzIHJlYWNoZWQgdGhpcyBkZXZpY2UsIHVuZGVyXFxuKyAqXFx0ICB0aGUgZGV2aWNlIGxvY2ssIGJlZm9yZSBhbnkgc2h1dGRvd24gY2FsbGJhY2sgcnVucy4gUmVhZCB1bmRlciB0aGVcXG4rICpcXHQgIGRldmljZSBsb2NrLiBBIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoXFxuKyAqXFx0ICBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpIG11c3Qgbm90IGRldGFjaCB0aGUgZGV2aWNlIGFueW1vcmUuXFxuICAqXFxuICAqIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyIGNvcmUgc2hvdWxkIGV2ZXIgdG91Y2ggdGhlc2UgZmllbGRzLlxcbiAgKi9cXG5AQCAtMTIwLDYgKzEyNCw3IEBAIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSB7XFxuIFxcdGNoYXIgKmRlZmVycmVkX3Byb2JlX3JlYXNvbjtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xcbiBcXHR1OCBkZWFkOjE7XFxuK1xcdHU4IHNodXRkb3duX2RvbmU6MTtcXG4gfTtcXG4gI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQob2JqKVxcdFxcXFxcXG4gXFx0Y29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXFxuaW5kZXggNGQwMjY2ODI5NDRmMi4uOGE3ZGJlNGU4MzYyYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jXFxuKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xcbkBAIC00OTA2LDYgKzQ5MDYsOSBAQCB2b2lkIGRldmljZV9zaHV0ZG93bih2b2lkKVxcbiBcXHRcXHRcXHRkZXZpY2VfbG9jayhwYXJlbnQpO1xcbiBcXHRcXHRkZXZpY2VfbG9jayhkZXYpO1xcbiBcXG4rXFx0XFx0aWYgKGRldi1cXHUwMDNlcClcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VwLVxcdTAwM2VzaHV0ZG93bl9kb25lID0gdHJ1ZTtcXG4rXFxuIFxcdFxcdC8qIERvbid0IGFsbG93IGFueSBtb3JlIHJ1bnRpbWUgc3VzcGVuZHMgKi9cXG4gXFx0XFx0cG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTtcXG4gXFx0XFx0cG1fcnVudGltZV9iYXJyaWVyKGRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmNcXG5pbmRleCA2MGMwMDUyMjM4NDRkLi5kNzY1ZTFhZTU2MTRhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jXFxuKysrIGIvZHJpdmVycy9iYXNlL2RkLmNcXG5AQCAtMTQzNiwzICsxNDM2LDEwNSBAQCB2b2lkIGRyaXZlcl9kZXRhY2goY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG4gXFx0XFx0cHV0X2RldmljZShkZXYpO1xcbiBcXHR9XFxuIH1cXG4rXFxuK3N0cnVjdCBkZXZpY2VfcmVwcm9iZSB7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7XFxuK1xcdGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgKnJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZpY2VfcmVwcm9iZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHdvcmsud29yayk7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHJwLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IHJwLVxcdTAwM2VwYXJlbnQ7XFxuK1xcdGJvb2wgZGV0YWNoZWQgPSBmYWxzZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdF9fZGV2aWNlX2RyaXZlcl9sb2NrKGRldiwgcGFyZW50KTtcXG4rXFx0LypcXG4rXFx0ICogcnAtXFx1MDAzZWRydiBpcyBvbmx5IGV2ZXIgY29tcGFyZWQsIG5ldmVyIGRlcmVmZXJlbmNlZDogdGhlIGRyaXZlciBpdFxcbitcXHQgKiBwb2ludHMgdG8gbWF5IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGJ5IG5vdy5cXG4rXFx0ICovXFxuK1xcdGlmICghZGV2LVxcdTAwM2VwLVxcdTAwM2VkZWFkIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZXAtXFx1MDAzZXNodXRkb3duX2RvbmUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGRldi1cXHUwMDNlZHJpdmVyIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlZHJpdmVyID09IHJwLVxcdTAwM2VkcnYpIHtcXG4rXFx0XFx0X19kZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2LCBwYXJlbnQpO1xcbitcXHRcXHRkZXRhY2hlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFx0X19kZXZpY2VfZHJpdmVyX3VubG9jayhkZXYsIHBhcmVudCk7XFxuK1xcbitcXHRpZiAoZGV0YWNoZWQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZGV2aWNlX2F0dGFjaCgpIG11c3QgcnVuIHdpdGggdGhlIHBhcmVudCBsb2NrZWQgb24gYnVzZXNcXG4rXFx0XFx0ICogdGhhdCByZXF1aXJlIGl0LCBtaXJyb3JpbmcgYnVzX3Jlc2Nhbl9kZXZpY2VzX2hlbHBlcigpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHBhcmVudCBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbmVlZF9wYXJlbnRfbG9jaylcXG4rXFx0XFx0XFx0ZGV2aWNlX2xvY2socGFyZW50KTtcXG4rXFx0XFx0cmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFxcInJlLXByb2JlIGZhaWxlZCwgZGV2aWNlIGxlZnQgdW5ib3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChwYXJlbnQgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VidXMtXFx1MDAzZW5lZWRfcGFyZW50X2xvY2spXFxuK1xcdFxcdFxcdGRldmljZV91bmxvY2socGFyZW50KTtcXG4rXFx0fVxcbitcXG4rXFx0cHV0X2RldmljZShkZXYpO1xcbitcXHRwdXRfZGV2aWNlKHBhcmVudCk7XFxuK1xcdGtmcmVlKHJwKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGRldmljZV9zY2hlZHVsZV9yZXByb2JlIC0gc2NoZWR1bGUgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlXFxuKyAqIEBkZXY6IGRldmljZSB0byBkZXRhY2ggYW5kIHJlLXByb2JlXFxuKyAqIEBkZWxheV9tczogZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmUtcHJvYmUgcnVuc1xcbisgKlxcbisgKiBTY2hlZHVsZSBhIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgQGRldiBhZnRlciBAZGVsYXlfbXMgbWlsbGlzZWNvbmRzLlxcbisgKiBUaGUgcmUtcHJvYmUgaXMgc2tpcHBlZCBpZiwgYnkgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCB3b3JrIHJ1bnMsIHRoZVxcbisgKiBkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCwgdGhlIHN5c3RlbSBzaHV0ZG93biBzZXF1ZW5jZSBoYXMgcmVhY2hlZCB0aGVcXG4rICogZGV2aWNlLCBvciBAZGV2IGlzIG5vIGxvbmdlciBib3VuZCB0byB0aGUgZHJpdmVyIHRoYXQgd2FzIGJvdW5kIGF0XFxuKyAqIHNjaGVkdWxpbmcgdGltZS4gSW4gcGFydGljdWxhciBhbiBhZG1pbmlzdHJhdGl2ZSB1bmJpbmQgaXMgbmV2ZXJcXG4rICogdW5kb25lIGJ5IGEgc3RhbGUgcmUtcHJvYmUuXFxuKyAqXFxuKyAqIFRoZSB3b3JrIGZ1bmN0aW9uIGlzIGJ1aWx0LWluIHRleHQsIHNvIHRoZSBib3VuZCBkcml2ZXIgbWF5IGNhbGwgdGhpc1xcbisgKiBmcm9tIGl0cyBvd24gY29kZSB3aXRob3V0IGhvbGRpbmcgYSBtb2R1bGUgcmVmZXJlbmNlLiBJZiB0aGUgZHJpdmVyXFxuKyAqIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdvcmsgcnVucywgZHJpdmVyIHVucmVnaXN0cmF0aW9uIHVuYmluZHNcXG4rICogQGRldiBmaXJzdCBhbmQgdGhlIHNjaGVkdWxlZCB3b3JrIGRvZXMgbm90aGluZy5cXG4rICpcXG4rICogTXVsdGlwbGUgcGVuZGluZyByZS1wcm9iZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhcmUgaW5kaXZpZHVhbGx5IHNhZmU7XFxuKyAqIGEgY2FsbGVyIHRoYXQgd2FudHMgYXQgbW9zdCBvbmUgcGVuZGluZyByZS1wcm9iZSBtdXN0IGdhdGUgc2NoZWR1bGluZ1xcbisgKiBpdHNlbGYuXFxuKyAqXFxuKyAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC5cXG4rICpcXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBkZXYgaXMgbm90IGEgcmVnaXN0ZXJlZCBkZXZpY2VcXG4rICogYm91bmQgdG8gYSBkcml2ZXIsIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5X21zKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnA7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlYnVzIHx8ICFkZXYtXFx1MDAzZXAgfHwgIWRldmljZV9pc19yZWdpc3RlcmVkKGRldikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWRldi1cXHUwMDNlZHJpdmVyKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJwID0ga3phbGxvY19vYmooKnJwKTtcXG4rXFx0aWYgKCFycClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRycC1cXHUwMDNlZGV2ID0gZ2V0X2RldmljZShkZXYpO1xcbitcXHQvKlxcbitcXHQgKiBQaW4gdGhlIHBhcmVudCB0b286IHRoZSB3b3JrIGxvY2tzIGl0LCBhbmQgYW4gdW5yZWdpc3RlciBvZiBAZGV2XFxuK1xcdCAqIHdvdWxkIG90aGVyd2lzZSBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZSBiZWZvcmUgdGhlIHdvcmsgcnVucy5cXG4rXFx0ICovXFxuK1xcdHJwLVxcdTAwM2VwYXJlbnQgPSBnZXRfZGV2aWNlKGRldi1cXHUwMDNlcGFyZW50KTtcXG4rXFx0cnAtXFx1MDAzZWRydiA9IFJFQURfT05DRShkZXYtXFx1MDAzZWRyaXZlcik7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZycC1cXHUwMDNld29yaywgZGV2aWNlX3JlcHJvYmVfd29ya19mbik7XFxuK1xcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBcXHUwMDI2cnAtXFx1MDAzZXdvcmssXFxuK1xcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xcbmluZGV4IGJhYTYyMWIzZmVmOTMuLjI5YmUwNWQ0MTQyOTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNcXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xcbkBAIC0zMDEyLDcgKzMwMTIsNyBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcXG4gXFx0ICogQlQgbmVlZHMgcGNpX3NhdmVfc3RhdGUoKS9wY2lfcmVzdG9yZV9zdGF0ZSgpIGJlY2F1c2UgdGhlIEJUIGRyaXZlclxcbiBcXHQgKiBpcyBzdGlsbCBwYXJ0aWFsbHkgYXR0YWNoZWQgd2hlbiB0aGUgX1BSUiBydW5zIChpdCBoYXNuJ3QgYmVlbiB1bmJvdW5kIHlldCkuXFxuIFxcdCAqIFRoZSBQQ0kgZGV2aWNlIG5lZWRzIHRvIHJlbWFpbiBtaW5pbWFsbHkgZnVuY3Rpb25hbCBzbyB0aGF0XFxuLVxcdCAqIGRldmljZV9yZXByb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpIGNhbiB3b3JrIGFmdGVyd2FyZFxcbitcXHQgKiB0aGUgZGVmZXJyZWQgcmUtcHJvYmUgb2YgdGhlIEJUIGRldmljZSBjYW4gd29yayBhZnRlcndhcmRcXG4gXFx0ICovXFxuIFxcdHJldCA9IGJ0aW50ZWxfcGNpZV9hY3BpX3Jlc2V0X21ldGhvZChkYXRhKTtcXG4gXFxuQEAgLTMwMjMsMTQgKzMwMjMsMTYgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3BlcmZvcm1fcGxkcihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXFxuIFxcdH1cXG4gXFxuIFxcdGlmICghcmV0KSB7XFxuLVxcdFxcdGlmIChkZXZpY2VfcmVwcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0XFx0QlRfRVJSKFxcXCJCVCByZXByb2JlIGZhaWxlZCBmb3IgQkRGOiVzXFxcIiwgcGNpX25hbWUocGRldikpO1xcbitcXHRcXHRpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgMCkpXFxuK1xcdFxcdFxcdEJUX0VSUihcXFwiQlQgcmVwcm9iZSBzY2hlZHVsaW5nIGZhaWxlZCBmb3IgQkRGOiVzXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHBjaV9uYW1lKHBkZXYpKTtcXG4gXFx0fVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBJc3N1ZSBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IGFuZCBoYW5kIHRlYXJkb3duL3JlLWluaXQgb2ZmIHRvIHRoZSBQQ0lcXG4tICogY29yZSB2aWEgZGV2aWNlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgncyBjb250cmFjdC5cXG4rICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGVcXG4rICogZHJpdmVyIGNvcmUgdmlhIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCksIG1pcnJvcmluZyB0aGUgUExEUiBwYXRoJ3NcXG4rICogY29udHJhY3QuXFxuICAqXFxuICAqIENhbGxlciBtdXN0IGhvbGQgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpIGFuZCBtdXN0IGhhdmUgYWxyZWFkeVxcbiAgKiBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBkcmFpbmVkIGJvdGggcnhfd29yayBhbmQgY29yZWR1bXBfd29yay5cXG5AQCAtMzA1MiwxNCArMzA1NCwxMiBAQCBzdGF0aWMgaW50IGJ0aW50ZWxfcGNpZV9wZXJmb3JtX2ZscihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGRldmljZV9yZXByb2JlKCkgYWx3YXlzIGRldGFjaGVzIHRoZSBkcml2ZXIgZmlyc3QgKHJ1bm5pbmdcXG4tXFx0ICogLnJlbW92ZSgpLCB3aGljaCBmcmVlcyAnZGF0YScpOyBhbnkgcmUtcHJvYmUgZmFpbHVyZSBsZWF2ZXMgdGhlXFxuLVxcdCAqIGRldmljZSB1bmJvdW5kIGJ1dCAnZGF0YScgaXMgYWxyZWFkeSBnb25lLCBzbyBqdXN0IGxvZyBpdC5cXG4tXFx0ICovXFxuLVxcdGlmIChkZXZpY2VfcmVwcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0QlRfRVJSKFxcXCJCVCByZXByb2JlIGZhaWxlZCBmb3IgQkRGOiVzXFxcIiwgcGNpX25hbWUocGRldikpO1xcbitcXHRlcnIgPSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0QlRfRVJSKFxcXCJCVCByZXByb2JlIHNjaGVkdWxpbmcgZmFpbGVkIGZvciBCREY6JXNcXFwiLFxcbitcXHRcXHQgICAgICAgcGNpX25hbWUocGRldikpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spXFxuQEAgLTMwOTAsMTEgKzMwOTAsMTUgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aylcXG4gXFxuIFxcdGJ0X2Rldl9kYmcoZGF0YS1cXHUwMDNlaGRldiwgXFxcIlJlbGVhc2UgYmx1ZXRvb3RoIGludGVyZmFjZVxcXCIpO1xcbiBcXG4tXFx0LyogQm90aCByZXNldCBwYXRocyBmb2xsb3cgdGhlIHNhbWUgY29udHJhY3Q6IG9uIHN1Y2Nlc3MgdGhleVxcbi1cXHQgKiBkZXN0cm95ICdkYXRhJyB2aWEgZGV2aWNlX3JlcHJvYmUoKSAoYSBmcmVzaCBwcm9iZSByZS1JTklUX1dPUktzXFxuLVxcdCAqIHRoZSBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3RcXG4tXFx0ICogTk9UIGJlIGNhbGxlZCBvbiB0aGUgc3VjY2VzcyBwYXRoLiBPbmx5IHRoZSBGTFIgcGF0aCBjYW4gZmFpbFxcbi1cXHQgKiB3aXRoICdkYXRhJyBzdGlsbCBhbGl2ZSwgaW4gd2hpY2ggY2FzZSB3ZSBiYWxhbmNlIHRoZVxcbitcXHQvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGVcXG4rXFx0ICogZGVmZXJyZWQgcmUtcHJvYmUgc2NoZWR1bGVkIHdpdGggZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKVxcbitcXHQgKiBkZXN0cm95cyAnZGF0YScgYnkgcmUtcnVubmluZyAucHJvYmUoKSAod2hpY2ggcmUtSU5JVF9XT1JLcyB0aGVcXG4rXFx0ICogZHVtcCB3b3JrZXJzIHdpdGggZGlzYWJsZSBjb3VudCAwKSwgc28gZW5hYmxlX3dvcmsoKSBtdXN0IE5PVCBiZVxcbitcXHQgKiBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gJ2RhdGEnIHN0YXlzIGFsaXZlIHVudGlsIHRoZSBkZWZlcnJlZFxcbitcXHQgKiBkZXRhY2ggcnVuczsgaW4gdGhpcyB3aW5kb3cgbmV3IGFjdGl2aXR5IGlzIGZlbmNlZCBieVxcbitcXHQgKiBCVElOVEVMX1BDSUVfUkVDT1ZFUllfSU5fUFJPR1JFU1MsIHRoZSBtYXNrZWQgaW50ZXJydXB0cyBhbmQgdGhlXFxuK1xcdCAqIGRpc2FibGVkIGR1bXAgd29ya2Vycy4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwgd2l0aCBub1xcbitcXHQgKiByZS1wcm9iZSBzY2hlZHVsZWQsIGluIHdoaWNoIGNhc2Ugd2UgYmFsYW5jZSB0aGVcXG4gXFx0ICogZGlzYWJsZV93b3JrX3N5bmMoKSBjYWxscyBhYm92ZSBzbyBhIGxhdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgaXNcXG4gXFx0ICogbm90IHBlcm1hbmVudGx5IGJsb2NrZWQuXFxuIFxcdCAqXFxuQEAgLTM0NjAsMTMgKzM0NjQsMTIgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNmRhdGEtXFx1MDAzZWZ3dHJpZ2dlcl93b3JrKTtcXG4gXFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNmRhdGEtXFx1MDAzZW1ib3hfd29yayk7XFxuIFxcbi1cXHQvKiBDYW5jZWwgcGVuZGluZyByZXNldCB3b3JrLiBTa2lwIG9ubHkgd2hlbiByZW1vdmUoKSBpcyBjYWxsZWQgZnJvbVxcbi1cXHQgKiB3aXRoaW4gdGhlIHJlc2V0IHdvcmsgaXRzZWxmIChQTERSIGRldmljZV9yZXByb2JlIHBhdGgpIHRvIGF2b2lkXFxuLVxcdCAqIGRlYWRsb2NrLiBjdXJyZW50X3dvcmsoKSByZXR1cm5zIHRoZSB3b3JrX3N0cnVjdCBvZiB0aGUgY2FsbGVyIGlmXFxuLVxcdCAqIHdlIGFyZSBpbiBhIHdvcmtxdWV1ZSBjb250ZXh0LlxcbitcXHQvKiBUaGUgZGVmZXJyZWQgcmUtcHJvYmUgdHJpZ2dlcnMgLnJlbW92ZSgpIGZyb20gdGhlIGRyaXZlciBjb3JlJ3NcXG4rXFx0ICogd29yayBpdGVtLCBuZXZlciBmcm9tIHJlc2V0X3dvcmsgaXRzZWxmLCBzbyB0aGlzIG5vIGxvbmdlciBydW5zXFxuK1xcdCAqIG5lc3RlZCBpbiByZXNldF93b3JrOyBkaXNhYmxlX3dvcmtfc3luYygpIGFsc28gZ3VhcmFudGVlcyB0aGVcXG4rXFx0ICogcmVzZXQgd29yayBoYXMgZnVsbHkgcmV0dXJuZWQgYmVmb3JlICdkYXRhJyBpcyBmcmVlZC5cXG4gXFx0ICovXFxuLVxcdGlmIChjdXJyZW50X3dvcmsoKSAhPSBcXHUwMDI2ZGF0YS1cXHUwMDNlcmVzZXRfd29yaylcXG4tXFx0XFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNmRhdGEtXFx1MDAzZXJlc2V0X3dvcmspO1xcbitcXHRkaXNhYmxlX3dvcmtfc3luYyhcXHUwMDI2ZGF0YS1cXHUwMDNlcmVzZXRfd29yayk7XFxuIFxcbiBcXHRidGludGVsX3BjaWVfZGlzYWJsZV9pbnRlcnJ1cHRzKGRhdGEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xcbmluZGV4IGIxOTk5ZTE0YWFkZWYuLjNmZGUxZDVhNWFlOTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xcbkBAIC05OTAsNyArOTkwLDcgQEAgc3RhdGljIGludCBoNV9idHJ0bF9zZXR1cChzdHJ1Y3QgaDUgKmg1KVxcbiBzdGF0aWMgdm9pZCBoNV9idHJ0bF9vcGVuKHN0cnVjdCBoNSAqaDUpXFxuIHtcXG4gXFx0LypcXG4tXFx0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgZG9lcyBhIGRldmljZV9yZXByb2JlKCkgdGhlIHN1c3BlbmQgaGFuZGxpbmdcXG4rXFx0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgc2NoZWR1bGVzIGEgZGV2aWNlIHJlLXByb2JlIHRoZSBzdXNwZW5kIGhhbmRsaW5nXFxuIFxcdCAqIGRvbmUgYnkgdGhlIGhjaV9zdXNwZW5kX25vdGlmaWVyIGlzIG5vdCBuZWNlc3Nhcnk7IGl0IGFjdHVhbGx5IGNhdXNlc1xcbiBcXHQgKiBkZWxheXMgYW5kIGEgYnVuY2ggb2YgZXJyb3JzIHRvIGdldCBsb2dnZWQsIHNvIGRpc2FibGUgaXQuXFxuIFxcdCAqL1xcbkBAIC0xMDQ5LDQ2ICsxMDQ5LDE1IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc3VzcGVuZChzdHJ1Y3QgaDUgKmg1KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RydWN0IGg1X2J0cnRsX3JlcHJvYmUge1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbi19O1xcbi1cXG4tc3RhdGljIHZvaWQgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlID1cXG4tXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlLCB3b3JrKTtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IGRldmljZV9yZXByb2JlKHJlcHJvYmUtXFx1MDAzZWRldik7XFxuLVxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FUFJPQkVfREVGRVIpXFxuLVxcdFxcdGRldl9lcnIocmVwcm9iZS1cXHUwMDNlZGV2LCBcXFwiUmVwcm9iZSBlcnJvciAlZFxcXFxuXFxcIiwgcmV0KTtcXG4tXFxuLVxcdHB1dF9kZXZpY2UocmVwcm9iZS1cXHUwMDNlZGV2KTtcXG4tXFx0a2ZyZWUocmVwcm9iZSk7XFxuLVxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGg1X2J0cnRsX3Jlc3VtZShzdHJ1Y3QgaDUgKmg1KVxcbiB7XFxuLVxcdGlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgXFx1MDAyNmg1LVxcdTAwM2VmbGFncykpIHtcXG4tXFx0XFx0c3RydWN0IGg1X2J0cnRsX3JlcHJvYmUgKnJlcHJvYmU7XFxuLVxcbi1cXHRcXHRyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpO1xcbi1cXHRcXHRpZiAoIXJlcHJvYmUpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0XFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcXG4rXFx0aWYgKHRlc3RfYml0KEg1X1dBS0VVUF9ESVNBQkxFLCBcXHUwMDI2aDUtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKFxcdTAwMjZoNS1cXHUwMDNlaHUtXFx1MDAzZXNlcmRldi1cXHUwMDNlZGV2LCAwKTtcXG4gXFxuLVxcdFxcdElOSVRfV09SSyhcXHUwMDI2cmVwcm9iZS1cXHUwMDNld29yaywgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIpO1xcbi1cXHRcXHRyZXByb2JlLVxcdTAwM2VkZXYgPSBnZXRfZGV2aWNlKFxcdTAwMjZoNS1cXHUwMDNlaHUtXFx1MDAzZXNlcmRldi1cXHUwMDNlZGV2KTtcXG4tXFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNnJlcHJvYmUtXFx1MDAzZXdvcmspO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXFx1MDAzZWRldmljZV93YWtlX2dwaW8sIDEpO1xcbitcXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXFx1MDAzZWRldmljZV93YWtlX2dwaW8sIDEpO1xcbiBcXG4tXFx0XFx0aWYgKHRlc3RfYml0KEg1X0hXX0ZMT1dfQ09OVFJPTCwgXFx1MDAyNmg1LVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChoNS1cXHUwMDNlaHUtXFx1MDAzZXNlcmRldiwgdHJ1ZSk7XFxuLVxcdH1cXG4rXFx0aWYgKHRlc3RfYml0KEg1X0hXX0ZMT1dfQ09OVFJPTCwgXFx1MDAyNmg1LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChoNS1cXHUwMDNlaHUtXFx1MDAzZXNlcmRldiwgdHJ1ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xcbmluZGV4IDczYWFlMTEyNTA0MjEuLjVhZTczNGNiOTAyNzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmNcXG5AQCAtNzgsNDcgKzc4LDExIEBAIHZvaWQgaXdsX3RyYW5zX2ZyZWVfcmVzdGFydF9saXN0KHZvaWQpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RydWN0IGl3bF90cmFuc19yZXByb2JlIHtcXG4tXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbi1cXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XFxuLX07XFxuLVxcbi1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcmVwcm9iZV93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxcbi17XFxuLVxcdHN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTtcXG4tXFxuLVxcdHJlcHJvYmUgPSBjb250YWluZXJfb2Yod2ssIHR5cGVvZigqcmVwcm9iZSksIHdvcmsud29yayk7XFxuLVxcbi1cXHRpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0ZGV2X2VycihyZXByb2JlLVxcdTAwM2VkZXYsIFxcXCJyZXByb2JlIGZhaWxlZCFcXFxcblxcXCIpO1xcbi1cXHRwdXRfZGV2aWNlKHJlcHJvYmUtXFx1MDAzZWRldik7XFxuLVxcdGtmcmVlKHJlcHJvYmUpO1xcbi1cXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgaXdsX3RyYW5zX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpXFxuIHtcXG4tXFx0c3RydWN0IGl3bF90cmFuc19yZXByb2JlICpyZXByb2JlO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogZ2V0IGEgbW9kdWxlIHJlZmVyZW5jZSB0byBhdm9pZCBkb2luZyB0aGlzIHdoaWxlIHVubG9hZGluZ1xcbi1cXHQgKiBhbnl3YXkgYW5kIHRvIGF2b2lkIHNjaGVkdWxpbmcgYSB3b3JrIHdpdGggY29kZSB0aGF0J3NcXG4tXFx0ICogYmVpbmcgcmVtb3ZlZC5cXG4tXFx0ICovXFxuLVxcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XFxuLVxcdFxcdElXTF9FUlIodHJhbnMsIFxcXCJNb2R1bGUgaXMgYmVpbmcgdW5sb2FkZWQgLSBhYm9ydFxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcXG4tXFx0aWYgKCFyZXByb2JlKSB7XFxuLVxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFx0cmVwcm9iZS1cXHUwMDNlZGV2ID0gZ2V0X2RldmljZSh0cmFucy1cXHUwMDNlZGV2KTtcXG4tXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnJlcHJvYmUtXFx1MDAzZXdvcmssIGl3bF90cmFuc19yZXByb2JlX3drKTtcXG4tXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZyZXByb2JlLVxcdTAwM2V3b3JrLCBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7XFxuK1xcdGlmIChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSh0cmFucy1cXHUwMDNlZGV2LCBkZWxheV9tcykpXFxuK1xcdFxcdElXTF9FUlIodHJhbnMsIFxcXCJDb3VsZCBub3Qgc2NoZWR1bGUgcmVwcm9iZVxcXFxuXFxcIik7XFxuIH1cXG4gXFxuICNkZWZpbmUgSVdMX1RSQU5TX1JFU0VUX09LX1RJTUVcXHQ3IC8qIHNlY29uZHMgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcXG5pbmRleCA3YjJiYWZmZGQyZjU1Li4xY2RkNDBhNmE0OGRhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oXFxuQEAgLTEzMTIsNiArMTMxMiw4IEBAIGludCAgX19tdXN0X2NoZWNrIGRldmljZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTtcXG4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpO1xcbiB2b2lkIGRldmljZV9pbml0aWFsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuIGludCBfX211c3RfY2hlY2sgZGV2aWNlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTtcXG4raW50IF9fbXVzdF9jaGVjayBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpO1xcbiBcXG4gYm9vbCBkZXZpY2VfaXNfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjI2LjQ0MzY4ODU5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQwNzg5ODQxMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUX0hDSVVBUlRcIixcbiAgICBcIkJUX0hDSVVBUlRfM1dJUkVcIixcbiAgICBcIlNFUklBTF9ERVZfQlVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVcIixcbiAgICBcImRldmljZV9yZXByb2JlX3dvcmtfZm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgdG8gdGhlIGRyaXZlciBjb3JlLCB3aGljaCBhbGxvd3Mgc2NoZWR1bGluZyBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgYSBkZXZpY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBkcml2ZXIgbW9kZWwgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkLiBUaGUgZnVuY3Rpb24gaXMgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMsIGluY2x1ZGluZyB0aGUgYGhjaV9oNWAgc2VyaWFsIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZjY3M2ZlZjc0ODZhNjk4Yjk0Y2YyOTFkNjU4YmVkYTBlYTU1NzRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDM6MjE6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYmFzZS5oIGIvZHJpdmVycy9iYXNlL2Jhc2UuaFxuaW5kZXggYTViN2FiYzEwZmYwMi4uNjIzNGUzN2RlN2U5OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9iYXNlLmhcbisrKyBiL2RyaXZlcnMvYmFzZS9iYXNlLmhcbkBAIC0xMDYsNiArMTA2LDEwIEBAIHN0cnVjdCBkcml2ZXJfcHJpdmF0ZSB7XG4gICogQGRlYWQ6IFRoaXMgZGV2aWNlIGlzIGN1cnJlbnRseSBlaXRoZXIgaW4gdGhlIHByb2Nlc3Mgb2Ygb3IgaGFzIGJlZW5cbiAgKlx0ICByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gQW55IGFzeW5jaHJvbm91cyBldmVudHMgc2NoZWR1bGVkIGZvciB0aGlzXG4gICpcdCAgZGV2aWNlIHNob3VsZCBleGl0IHdpdGhvdXQgdGFraW5nIGFueSBhY3Rpb24uXG4rICogQHNodXRkb3duX2RvbmU6IFNldCBvbmNlIGRldmljZV9zaHV0ZG93bigpIGhhcyByZWFjaGVkIHRoaXMgZGV2aWNlLCB1bmRlclxuKyAqXHQgIHRoZSBkZXZpY2UgbG9jaywgYmVmb3JlIGFueSBzaHV0ZG93biBjYWxsYmFjayBydW5zLiBSZWFkIHVuZGVyIHRoZVxuKyAqXHQgIGRldmljZSBsb2NrLiBBIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoXG4rICpcdCAgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKSBtdXN0IG5vdCBkZXRhY2ggdGhlIGRldmljZSBhbnltb3JlLlxuICAqXG4gICogTm90aGluZyBvdXRzaWRlIG9mIHRoZSBkcml2ZXIgY29yZSBzaG91bGQgZXZlciB0b3VjaCB0aGVzZSBmaWVsZHMuXG4gICovXG5AQCAtMTIwLDYgKzEyNCw3IEBAIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSB7XG4gXHRjaGFyICpkZWZlcnJlZF9wcm9iZV9yZWFzb247XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7XG4gXHR1OCBkZWFkOjE7XG4rXHR1OCBzaHV0ZG93bl9kb25lOjE7XG4gfTtcbiAjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX3BhcmVudChvYmopXHRcXFxuIFx0Y29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9wYXJlbnQpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmNcbmluZGV4IDRkMDI2NjgyOTQ0ZjIuLjhhN2RiZTRlODM2MmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5AQCAtNDkwNiw2ICs0OTA2LDkgQEAgdm9pZCBkZXZpY2Vfc2h1dGRvd24odm9pZClcbiBcdFx0XHRkZXZpY2VfbG9jayhwYXJlbnQpO1xuIFx0XHRkZXZpY2VfbG9jayhkZXYpO1xuIFxuK1x0XHRpZiAoZGV2LVx1MDAzZXApXG4rXHRcdFx0ZGV2LVx1MDAzZXAtXHUwMDNlc2h1dGRvd25fZG9uZSA9IHRydWU7XG4rXG4gXHRcdC8qIERvbid0IGFsbG93IGFueSBtb3JlIHJ1bnRpbWUgc3VzcGVuZHMgKi9cbiBcdFx0cG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTtcbiBcdFx0cG1fcnVudGltZV9iYXJyaWVyKGRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuY1xuaW5kZXggNjBjMDA1MjIzODQ0ZC4uZDc2NWUxYWU1NjE0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jXG4rKysgYi9kcml2ZXJzL2Jhc2UvZGQuY1xuQEAgLTE0MzYsMyArMTQzNiwxMDUgQEAgdm9pZCBkcml2ZXJfZGV0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG4gXHRcdHB1dF9kZXZpY2UoZGV2KTtcbiBcdH1cbiB9XG4rXG4rc3RydWN0IGRldmljZV9yZXByb2JlIHtcbitcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHN0cnVjdCBkZXZpY2UgKnBhcmVudDtcbitcdGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnY7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgKnJwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZpY2VfcmVwcm9iZSxcbitcdFx0XHRcdFx0XHQgd29yay53b3JrKTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHJwLVx1MDAzZWRldjtcbitcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IHJwLVx1MDAzZXBhcmVudDtcbitcdGJvb2wgZGV0YWNoZWQgPSBmYWxzZTtcbitcdGludCByZXQ7XG4rXG4rXHRfX2RldmljZV9kcml2ZXJfbG9jayhkZXYsIHBhcmVudCk7XG4rXHQvKlxuK1x0ICogcnAtXHUwMDNlZHJ2IGlzIG9ubHkgZXZlciBjb21wYXJlZCwgbmV2ZXIgZGVyZWZlcmVuY2VkOiB0aGUgZHJpdmVyIGl0XG4rXHQgKiBwb2ludHMgdG8gbWF5IGhhdmUgYmVlbiB1bnJlZ2lzdGVyZWQgYW5kIGZyZWVkIGJ5IG5vdy5cbitcdCAqL1xuK1x0aWYgKCFkZXYtXHUwMDNlcC1cdTAwM2VkZWFkIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZXAtXHUwMDNlc2h1dGRvd25fZG9uZSBcdTAwMjZcdTAwMjZcbitcdCAgICBkZXYtXHUwMDNlZHJpdmVyIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlZHJpdmVyID09IHJwLVx1MDAzZWRydikge1xuK1x0XHRfX2RldmljZV9yZWxlYXNlX2RyaXZlcihkZXYsIHBhcmVudCk7XG4rXHRcdGRldGFjaGVkID0gdHJ1ZTtcbitcdH1cbitcdF9fZGV2aWNlX2RyaXZlcl91bmxvY2soZGV2LCBwYXJlbnQpO1xuK1xuK1x0aWYgKGRldGFjaGVkKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGRldmljZV9hdHRhY2goKSBtdXN0IHJ1biB3aXRoIHRoZSBwYXJlbnQgbG9ja2VkIG9uIGJ1c2VzXG4rXHRcdCAqIHRoYXQgcmVxdWlyZSBpdCwgbWlycm9yaW5nIGJ1c19yZXNjYW5fZGV2aWNlc19oZWxwZXIoKS5cbitcdFx0ICovXG4rXHRcdGlmIChwYXJlbnQgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VidXMtXHUwMDNlbmVlZF9wYXJlbnRfbG9jaylcbitcdFx0XHRkZXZpY2VfbG9jayhwYXJlbnQpO1xuK1x0XHRyZXQgPSBkZXZpY2VfYXR0YWNoKGRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0ZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgIFwicmUtcHJvYmUgZmFpbGVkLCBkZXZpY2UgbGVmdCB1bmJvdW5kXFxuXCIpO1xuK1x0XHRpZiAocGFyZW50IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlYnVzLVx1MDAzZW5lZWRfcGFyZW50X2xvY2spXG4rXHRcdFx0ZGV2aWNlX3VubG9jayhwYXJlbnQpO1xuK1x0fVxuK1xuK1x0cHV0X2RldmljZShkZXYpO1xuK1x0cHV0X2RldmljZShwYXJlbnQpO1xuK1x0a2ZyZWUocnApO1xuK31cbitcbisvKipcbisgKiBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSAtIHNjaGVkdWxlIGEgZGVmZXJyZWQgZGV0YWNoIGFuZCByZS1wcm9iZVxuKyAqIEBkZXY6IGRldmljZSB0byBkZXRhY2ggYW5kIHJlLXByb2JlXG4rICogQGRlbGF5X21zOiBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSByZS1wcm9iZSBydW5zXG4rICpcbisgKiBTY2hlZHVsZSBhIGRldGFjaCBhbmQgcmUtcHJvYmUgb2YgQGRldiBhZnRlciBAZGVsYXlfbXMgbWlsbGlzZWNvbmRzLlxuKyAqIFRoZSByZS1wcm9iZSBpcyBza2lwcGVkIGlmLCBieSB0aGUgdGltZSB0aGUgc2NoZWR1bGVkIHdvcmsgcnVucywgdGhlXG4rICogZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQsIHRoZSBzeXN0ZW0gc2h1dGRvd24gc2VxdWVuY2UgaGFzIHJlYWNoZWQgdGhlXG4rICogZGV2aWNlLCBvciBAZGV2IGlzIG5vIGxvbmdlciBib3VuZCB0byB0aGUgZHJpdmVyIHRoYXQgd2FzIGJvdW5kIGF0XG4rICogc2NoZWR1bGluZyB0aW1lLiBJbiBwYXJ0aWN1bGFyIGFuIGFkbWluaXN0cmF0aXZlIHVuYmluZCBpcyBuZXZlclxuKyAqIHVuZG9uZSBieSBhIHN0YWxlIHJlLXByb2JlLlxuKyAqXG4rICogVGhlIHdvcmsgZnVuY3Rpb24gaXMgYnVpbHQtaW4gdGV4dCwgc28gdGhlIGJvdW5kIGRyaXZlciBtYXkgY2FsbCB0aGlzXG4rICogZnJvbSBpdHMgb3duIGNvZGUgd2l0aG91dCBob2xkaW5nIGEgbW9kdWxlIHJlZmVyZW5jZS4gSWYgdGhlIGRyaXZlclxuKyAqIG1vZHVsZSBpcyB1bmxvYWRlZCBiZWZvcmUgdGhlIHdvcmsgcnVucywgZHJpdmVyIHVucmVnaXN0cmF0aW9uIHVuYmluZHNcbisgKiBAZGV2IGZpcnN0IGFuZCB0aGUgc2NoZWR1bGVkIHdvcmsgZG9lcyBub3RoaW5nLlxuKyAqXG4rICogTXVsdGlwbGUgcGVuZGluZyByZS1wcm9iZXMgZm9yIHRoZSBzYW1lIGRldmljZSBhcmUgaW5kaXZpZHVhbGx5IHNhZmU7XG4rICogYSBjYWxsZXIgdGhhdCB3YW50cyBhdCBtb3N0IG9uZSBwZW5kaW5nIHJlLXByb2JlIG11c3QgZ2F0ZSBzY2hlZHVsaW5nXG4rICogaXRzZWxmLlxuKyAqXG4rICogTWF5IG9ubHkgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LlxuKyAqXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIEBkZXYgaXMgbm90IGEgcmVnaXN0ZXJlZCBkZXZpY2VcbisgKiBib3VuZCB0byBhIGRyaXZlciwgLUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXG4rICovXG4raW50IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRlbGF5X21zKVxuK3tcbitcdHN0cnVjdCBkZXZpY2VfcmVwcm9iZSAqcnA7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VidXMgfHwgIWRldi1cdTAwM2VwIHx8ICFkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghZGV2LVx1MDAzZWRyaXZlcilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRycCA9IGt6YWxsb2Nfb2JqKCpycCk7XG4rXHRpZiAoIXJwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJwLVx1MDAzZWRldiA9IGdldF9kZXZpY2UoZGV2KTtcbitcdC8qXG4rXHQgKiBQaW4gdGhlIHBhcmVudCB0b286IHRoZSB3b3JrIGxvY2tzIGl0LCBhbmQgYW4gdW5yZWdpc3RlciBvZiBAZGV2XG4rXHQgKiB3b3VsZCBvdGhlcndpc2UgZHJvcCB0aGUgbGFzdCByZWZlcmVuY2UgYmVmb3JlIHRoZSB3b3JrIHJ1bnMuXG4rXHQgKi9cbitcdHJwLVx1MDAzZXBhcmVudCA9IGdldF9kZXZpY2UoZGV2LVx1MDAzZXBhcmVudCk7XG4rXHRycC1cdTAwM2VkcnYgPSBSRUFEX09OQ0UoZGV2LVx1MDAzZWRyaXZlcik7XG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZycC1cdTAwM2V3b3JrLCBkZXZpY2VfcmVwcm9iZV93b3JrX2ZuKTtcbitcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZycC1cdTAwM2V3b3JrLFxuK1x0XHRcdCAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xuaW5kZXggYmFhNjIxYjNmZWY5My4uMjliZTA1ZDQxNDI5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xuQEAgLTMwMTIsNyArMzAxMiw3IEBAIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9wZXJmb3JtX3BsZHIoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhKVxuIFx0ICogQlQgbmVlZHMgcGNpX3NhdmVfc3RhdGUoKS9wY2lfcmVzdG9yZV9zdGF0ZSgpIGJlY2F1c2UgdGhlIEJUIGRyaXZlclxuIFx0ICogaXMgc3RpbGwgcGFydGlhbGx5IGF0dGFjaGVkIHdoZW4gdGhlIF9QUlIgcnVucyAoaXQgaGFzbid0IGJlZW4gdW5ib3VuZCB5ZXQpLlxuIFx0ICogVGhlIFBDSSBkZXZpY2UgbmVlZHMgdG8gcmVtYWluIG1pbmltYWxseSBmdW5jdGlvbmFsIHNvIHRoYXRcbi1cdCAqIGRldmljZV9yZXByb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KSBjYW4gd29yayBhZnRlcndhcmRcbitcdCAqIHRoZSBkZWZlcnJlZCByZS1wcm9iZSBvZiB0aGUgQlQgZGV2aWNlIGNhbiB3b3JrIGFmdGVyd2FyZFxuIFx0ICovXG4gXHRyZXQgPSBidGludGVsX3BjaWVfYWNwaV9yZXNldF9tZXRob2QoZGF0YSk7XG4gXG5AQCAtMzAyMywxNCArMzAyMywxNiBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdH1cbiBcbiBcdGlmICghcmV0KSB7XG4tXHRcdGlmIChkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikpXG4tXHRcdFx0QlRfRVJSKFwiQlQgcmVwcm9iZSBmYWlsZWQgZm9yIEJERjolc1wiLCBwY2lfbmFtZShwZGV2KSk7XG4rXHRcdGlmIChkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgMCkpXG4rXHRcdFx0QlRfRVJSKFwiQlQgcmVwcm9iZSBzY2hlZHVsaW5nIGZhaWxlZCBmb3IgQkRGOiVzXCIsXG4rXHRcdFx0ICAgICAgIHBjaV9uYW1lKHBkZXYpKTtcbiBcdH1cbiB9XG4gXG4gLypcbi0gKiBJc3N1ZSBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IGFuZCBoYW5kIHRlYXJkb3duL3JlLWluaXQgb2ZmIHRvIHRoZSBQQ0lcbi0gKiBjb3JlIHZpYSBkZXZpY2VfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCdzIGNvbnRyYWN0LlxuKyAqIElzc3VlIGEgRnVuY3Rpb24gTGV2ZWwgUmVzZXQgYW5kIGhhbmQgdGVhcmRvd24vcmUtaW5pdCBvZmYgdG8gdGhlXG4rICogZHJpdmVyIGNvcmUgdmlhIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCksIG1pcnJvcmluZyB0aGUgUExEUiBwYXRoJ3NcbisgKiBjb250cmFjdC5cbiAgKlxuICAqIENhbGxlciBtdXN0IGhvbGQgcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpIGFuZCBtdXN0IGhhdmUgYWxyZWFkeVxuICAqIGRpc2FibGVkIGludGVycnVwdHMgYW5kIGRyYWluZWQgYm90aCByeF93b3JrIGFuZCBjb3JlZHVtcF93b3JrLlxuQEAgLTMwNTIsMTQgKzMwNTQsMTIgQEAgc3RhdGljIGludCBidGludGVsX3BjaWVfcGVyZm9ybV9mbHIoc3RydWN0IGJ0aW50ZWxfcGNpZV9kYXRhICpkYXRhKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0LyogZGV2aWNlX3JlcHJvYmUoKSBhbHdheXMgZGV0YWNoZXMgdGhlIGRyaXZlciBmaXJzdCAocnVubmluZ1xuLVx0ICogLnJlbW92ZSgpLCB3aGljaCBmcmVlcyAnZGF0YScpOyBhbnkgcmUtcHJvYmUgZmFpbHVyZSBsZWF2ZXMgdGhlXG4tXHQgKiBkZXZpY2UgdW5ib3VuZCBidXQgJ2RhdGEnIGlzIGFscmVhZHkgZ29uZSwgc28ganVzdCBsb2cgaXQuXG4tXHQgKi9cbi1cdGlmIChkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikpXG4tXHRcdEJUX0VSUihcIkJUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXNcIiwgcGNpX25hbWUocGRldikpO1xuK1x0ZXJyID0gZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIDApO1xuK1x0aWYgKGVycilcbitcdFx0QlRfRVJSKFwiQlQgcmVwcm9iZSBzY2hlZHVsaW5nIGZhaWxlZCBmb3IgQkRGOiVzXCIsXG4rXHRcdCAgICAgICBwY2lfbmFtZShwZGV2KSk7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spXG5AQCAtMzA5MCwxMSArMzA5MCwxNSBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuIFxuIFx0YnRfZGV2X2RiZyhkYXRhLVx1MDAzZWhkZXYsIFwiUmVsZWFzZSBibHVldG9vdGggaW50ZXJmYWNlXCIpO1xuIFxuLVx0LyogQm90aCByZXNldCBwYXRocyBmb2xsb3cgdGhlIHNhbWUgY29udHJhY3Q6IG9uIHN1Y2Nlc3MgdGhleVxuLVx0ICogZGVzdHJveSAnZGF0YScgdmlhIGRldmljZV9yZXByb2JlKCkgKGEgZnJlc2ggcHJvYmUgcmUtSU5JVF9XT1JLc1xuLVx0ICogdGhlIGR1bXAgd29ya2VycyB3aXRoIGRpc2FibGUgY291bnQgMCksIHNvIGVuYWJsZV93b3JrKCkgbXVzdFxuLVx0ICogTk9UIGJlIGNhbGxlZCBvbiB0aGUgc3VjY2VzcyBwYXRoLiBPbmx5IHRoZSBGTFIgcGF0aCBjYW4gZmFpbFxuLVx0ICogd2l0aCAnZGF0YScgc3RpbGwgYWxpdmUsIGluIHdoaWNoIGNhc2Ugd2UgYmFsYW5jZSB0aGVcbitcdC8qIEJvdGggcmVzZXQgcGF0aHMgZm9sbG93IHRoZSBzYW1lIGNvbnRyYWN0OiBvbiBzdWNjZXNzIHRoZVxuK1x0ICogZGVmZXJyZWQgcmUtcHJvYmUgc2NoZWR1bGVkIHdpdGggZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoKVxuK1x0ICogZGVzdHJveXMgJ2RhdGEnIGJ5IHJlLXJ1bm5pbmcgLnByb2JlKCkgKHdoaWNoIHJlLUlOSVRfV09SS3MgdGhlXG4rXHQgKiBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3QgTk9UIGJlXG4rXHQgKiBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gJ2RhdGEnIHN0YXlzIGFsaXZlIHVudGlsIHRoZSBkZWZlcnJlZFxuK1x0ICogZGV0YWNoIHJ1bnM7IGluIHRoaXMgd2luZG93IG5ldyBhY3Rpdml0eSBpcyBmZW5jZWQgYnlcbitcdCAqIEJUSU5URUxfUENJRV9SRUNPVkVSWV9JTl9QUk9HUkVTUywgdGhlIG1hc2tlZCBpbnRlcnJ1cHRzIGFuZCB0aGVcbitcdCAqIGRpc2FibGVkIGR1bXAgd29ya2Vycy4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWwgd2l0aCBub1xuK1x0ICogcmUtcHJvYmUgc2NoZWR1bGVkLCBpbiB3aGljaCBjYXNlIHdlIGJhbGFuY2UgdGhlXG4gXHQgKiBkaXNhYmxlX3dvcmtfc3luYygpIGNhbGxzIGFib3ZlIHNvIGEgbGF0ZXIgc3VjY2Vzc2Z1bCByZXNldCBpc1xuIFx0ICogbm90IHBlcm1hbmVudGx5IGJsb2NrZWQuXG4gXHQgKlxuQEAgLTM0NjAsMTMgKzM0NjQsMTIgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmRhdGEtXHUwMDNlZnd0cmlnZ2VyX3dvcmspO1xuIFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2ZGF0YS1cdTAwM2VtYm94X3dvcmspO1xuIFxuLVx0LyogQ2FuY2VsIHBlbmRpbmcgcmVzZXQgd29yay4gU2tpcCBvbmx5IHdoZW4gcmVtb3ZlKCkgaXMgY2FsbGVkIGZyb21cbi1cdCAqIHdpdGhpbiB0aGUgcmVzZXQgd29yayBpdHNlbGYgKFBMRFIgZGV2aWNlX3JlcHJvYmUgcGF0aCkgdG8gYXZvaWRcbi1cdCAqIGRlYWRsb2NrLiBjdXJyZW50X3dvcmsoKSByZXR1cm5zIHRoZSB3b3JrX3N0cnVjdCBvZiB0aGUgY2FsbGVyIGlmXG4tXHQgKiB3ZSBhcmUgaW4gYSB3b3JrcXVldWUgY29udGV4dC5cbitcdC8qIFRoZSBkZWZlcnJlZCByZS1wcm9iZSB0cmlnZ2VycyAucmVtb3ZlKCkgZnJvbSB0aGUgZHJpdmVyIGNvcmUnc1xuK1x0ICogd29yayBpdGVtLCBuZXZlciBmcm9tIHJlc2V0X3dvcmsgaXRzZWxmLCBzbyB0aGlzIG5vIGxvbmdlciBydW5zXG4rXHQgKiBuZXN0ZWQgaW4gcmVzZXRfd29yazsgZGlzYWJsZV93b3JrX3N5bmMoKSBhbHNvIGd1YXJhbnRlZXMgdGhlXG4rXHQgKiByZXNldCB3b3JrIGhhcyBmdWxseSByZXR1cm5lZCBiZWZvcmUgJ2RhdGEnIGlzIGZyZWVkLlxuIFx0ICovXG4tXHRpZiAoY3VycmVudF93b3JrKCkgIT0gXHUwMDI2ZGF0YS1cdTAwM2VyZXNldF93b3JrKVxuLVx0XHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZkYXRhLVx1MDAzZXJlc2V0X3dvcmspO1xuK1x0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2ZGF0YS1cdTAwM2VyZXNldF93b3JrKTtcbiBcbiBcdGJ0aW50ZWxfcGNpZV9kaXNhYmxlX2ludGVycnVwdHMoZGF0YSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xuaW5kZXggYjE5OTllMTRhYWRlZi4uM2ZkZTFkNWE1YWU5OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jXG4rKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xuQEAgLTk5MCw3ICs5OTAsNyBAQCBzdGF0aWMgaW50IGg1X2J0cnRsX3NldHVwKHN0cnVjdCBoNSAqaDUpXG4gc3RhdGljIHZvaWQgaDVfYnRydGxfb3BlbihzdHJ1Y3QgaDUgKmg1KVxuIHtcbiBcdC8qXG4tXHQgKiBTaW5jZSBoNV9idHJ0bF9yZXN1bWUoKSBkb2VzIGEgZGV2aWNlX3JlcHJvYmUoKSB0aGUgc3VzcGVuZCBoYW5kbGluZ1xuK1x0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgc2NoZWR1bGVzIGEgZGV2aWNlIHJlLXByb2JlIHRoZSBzdXNwZW5kIGhhbmRsaW5nXG4gXHQgKiBkb25lIGJ5IHRoZSBoY2lfc3VzcGVuZF9ub3RpZmllciBpcyBub3QgbmVjZXNzYXJ5OyBpdCBhY3R1YWxseSBjYXVzZXNcbiBcdCAqIGRlbGF5cyBhbmQgYSBidW5jaCBvZiBlcnJvcnMgdG8gZ2V0IGxvZ2dlZCwgc28gZGlzYWJsZSBpdC5cbiBcdCAqL1xuQEAgLTEwNDksNDYgKzEwNDksMTUgQEAgc3RhdGljIGludCBoNV9idHJ0bF9zdXNwZW5kKHN0cnVjdCBoNSAqaDUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RydWN0IGg1X2J0cnRsX3JlcHJvYmUge1xuLVx0c3RydWN0IGRldmljZSAqZGV2O1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4tfTtcbi1cbi1zdGF0aWMgdm9pZCBoNV9idHJ0bF9yZXByb2JlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IGg1X2J0cnRsX3JlcHJvYmUgKnJlcHJvYmUgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGg1X2J0cnRsX3JlcHJvYmUsIHdvcmspO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IGRldmljZV9yZXByb2JlKHJlcHJvYmUtXHUwMDNlZGV2KTtcbi1cdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRVBST0JFX0RFRkVSKVxuLVx0XHRkZXZfZXJyKHJlcHJvYmUtXHUwMDNlZGV2LCBcIlJlcHJvYmUgZXJyb3IgJWRcXG5cIiwgcmV0KTtcbi1cbi1cdHB1dF9kZXZpY2UocmVwcm9iZS1cdTAwM2VkZXYpO1xuLVx0a2ZyZWUocmVwcm9iZSk7XG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbi19XG4tXG4gc3RhdGljIGludCBoNV9idHJ0bF9yZXN1bWUoc3RydWN0IGg1ICpoNSlcbiB7XG4tXHRpZiAodGVzdF9iaXQoSDVfV0FLRVVQX0RJU0FCTEUsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSkge1xuLVx0XHRzdHJ1Y3QgaDVfYnRydGxfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdFx0cmVwcm9iZSA9IGt6YWxsb2Nfb2JqKCpyZXByb2JlKTtcbi1cdFx0aWYgKCFyZXByb2JlKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0XHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xuK1x0aWYgKHRlc3RfYml0KEg1X1dBS0VVUF9ESVNBQkxFLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybiBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShcdTAwMjZoNS1cdTAwM2VodS1cdTAwM2VzZXJkZXYtXHUwMDNlZGV2LCAwKTtcbiBcbi1cdFx0SU5JVF9XT1JLKFx1MDAyNnJlcHJvYmUtXHUwMDNld29yaywgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIpO1xuLVx0XHRyZXByb2JlLVx1MDAzZWRldiA9IGdldF9kZXZpY2UoXHUwMDI2aDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LVx1MDAzZWRldik7XG4tXHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNnJlcHJvYmUtXHUwMDNld29yayk7XG4tXHR9IGVsc2Uge1xuLVx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXHUwMDNlZGV2aWNlX3dha2VfZ3BpbywgMSk7XG4rXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaDUtXHUwMDNlZGV2aWNlX3dha2VfZ3BpbywgMSk7XG4gXG4tXHRcdGlmICh0ZXN0X2JpdChINV9IV19GTE9XX0NPTlRST0wsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRzZXJkZXZfZGV2aWNlX3NldF9mbG93X2NvbnRyb2woaDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LCB0cnVlKTtcbi1cdH1cbitcdGlmICh0ZXN0X2JpdChINV9IV19GTE9XX0NPTlRST0wsIFx1MDAyNmg1LVx1MDAzZWZsYWdzKSlcbitcdFx0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKGg1LVx1MDAzZWh1LVx1MDAzZXNlcmRldiwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmNcbmluZGV4IDczYWFlMTEyNTA0MjEuLjVhZTczNGNiOTAyNzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jXG5AQCAtNzgsNDcgKzc4LDExIEBAIHZvaWQgaXdsX3RyYW5zX2ZyZWVfcmVzdGFydF9saXN0KHZvaWQpXG4gXHR9XG4gfVxuIFxuLXN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4tXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4tfTtcbi1cbi1zdGF0aWMgdm9pZCBpd2xfdHJhbnNfcmVwcm9iZV93ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuLXtcbi1cdHN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdHJlcHJvYmUgPSBjb250YWluZXJfb2Yod2ssIHR5cGVvZigqcmVwcm9iZSksIHdvcmsud29yayk7XG4tXG4tXHRpZiAoZGV2aWNlX3JlcHJvYmUocmVwcm9iZS1cdTAwM2VkZXYpKVxuLVx0XHRkZXZfZXJyKHJlcHJvYmUtXHUwMDNlZGV2LCBcInJlcHJvYmUgZmFpbGVkIVxcblwiKTtcbi1cdHB1dF9kZXZpY2UocmVwcm9iZS1cdTAwM2VkZXYpO1xuLVx0a2ZyZWUocmVwcm9iZSk7XG4tXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgaXdsX3RyYW5zX3NjaGVkdWxlX3JlcHJvYmUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGRlbGF5X21zKVxuIHtcbi1cdHN0cnVjdCBpd2xfdHJhbnNfcmVwcm9iZSAqcmVwcm9iZTtcbi1cbi1cdC8qXG4tXHQgKiBnZXQgYSBtb2R1bGUgcmVmZXJlbmNlIHRvIGF2b2lkIGRvaW5nIHRoaXMgd2hpbGUgdW5sb2FkaW5nXG4tXHQgKiBhbnl3YXkgYW5kIHRvIGF2b2lkIHNjaGVkdWxpbmcgYSB3b3JrIHdpdGggY29kZSB0aGF0J3Ncbi1cdCAqIGJlaW5nIHJlbW92ZWQuXG4tXHQgKi9cbi1cdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKSB7XG4tXHRcdElXTF9FUlIodHJhbnMsIFwiTW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkIC0gYWJvcnRcXG5cIik7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdHJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7XG4tXHRpZiAoIXJlcHJvYmUpIHtcbi1cdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cdHJlcHJvYmUtXHUwMDNlZGV2ID0gZ2V0X2RldmljZSh0cmFucy1cdTAwM2VkZXYpO1xuLVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cmVwcm9iZS1cdTAwM2V3b3JrLCBpd2xfdHJhbnNfcmVwcm9iZV93ayk7XG4tXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cmVwcm9iZS1cdTAwM2V3b3JrLCBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7XG4rXHRpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUodHJhbnMtXHUwMDNlZGV2LCBkZWxheV9tcykpXG4rXHRcdElXTF9FUlIodHJhbnMsIFwiQ291bGQgbm90IHNjaGVkdWxlIHJlcHJvYmVcXG5cIik7XG4gfVxuIFxuICNkZWZpbmUgSVdMX1RSQU5TX1JFU0VUX09LX1RJTUVcdDcgLyogc2Vjb25kcyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oXG5pbmRleCA3YjJiYWZmZGQyZjU1Li4xY2RkNDBhNmE0OGRhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuQEAgLTEzMTIsNiArMTMxMiw4IEBAIGludCAgX19tdXN0X2NoZWNrIGRldmljZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTtcbiBpbnQgX19tdXN0X2NoZWNrIGRyaXZlcl9hdHRhY2goY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydik7XG4gdm9pZCBkZXZpY2VfaW5pdGlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIGludCBfX211c3RfY2hlY2sgZGV2aWNlX3JlcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTtcbitpbnQgX19tdXN0X2NoZWNrIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkZWxheV9tcyk7XG4gXG4gYm9vbCBkZXZpY2VfaXNfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjI2LjQ0MzY5MDI2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjAyNjM2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXcgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAg4oCTIGl0IHNlZW1zIHRoZXkncmUgbWFraW5nIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBUaGV5J3ZlIGRyb3BwZWQgY3VzdG9tIHJlcHJvYmUgc2NoZWR1bGluZyBpbiBmYXZvciBvZiB0aGlzIGdlbmVyaWMgZnVuY3Rpb24gd2l0aGluIHRoZSBkcml2ZXIgY29yZSAoYGRyaXZlcnMvYmFzZS9kZC5jYCkuIFRoYXQncyBhIGNvcmUgY2hhbmdlLCBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBnb2VzIHRvIGZ1enppbmc7IHRoZSBkcml2ZXIgY29yZSBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSB0YXJnZXQuXG5cblRoZSBuZXcgZnVuY3Rpb24sIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAsIGlzIHRoZSBrZXksIG9idmlvdXNseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlYWNoYWJpbGl0eSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZyb20gYSBxdWljayBzY2FuLCBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBidGludGVsX3BjaWUuY2AsIGBoY2lfaDUuY2AsIGFuZCBgaXdsLXRyYW5zLmNgLiBIbW0sIGBidGludGVsYCBhbmQgYGl3bHdpZmlgIGFyZSBQQ0llIGRyaXZlcnMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UsIGJ1dCBgaGNpX2g1YCBpcyBhIHNlcmlhbCBkcml2ZXIuIENhbiBJIGV2ZW4gZ2V0IHRvIGBoY2lfaDVgIGZyb20gUUVNVT8gQWgsIHllcywgYGhjaV91YXJ0YC4gT2theSwgc28gYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCAqaXMqIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBmcm9tIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIGl0cyBhY2Nlc3NpYmlsaXR5LiBMZXQgbWUgY2hlY2sgYGRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jYCBhbmQgYWxzbyBgZHJpdmVycy9iYXNlL2RkLmNgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgYW55IGRyaXZlciBjYW4gY2FsbCBpdC4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCB0aGF0J3MgYSBjZW50cmFsIGRyaXZlciBmdW5jdGlvbi5cblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZvciB0aGUgY29yZSBmdW5jdGlvbiBpdHNlbGYsIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgaXMgaW4gYGRyaXZlcnMvYmFzZS9kZC5jYCwgc28gaXQncyBhbHdheXMgYnVpbHQuIEZvciBgaGNpX2g1YCwgSSBuZWVkIHRvIGNoZWNrIGZvciBgQlRfSENJVUFSVF8zV0lSRWAuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjMzLjgwMzk1NjAyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNjAxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlRfSENJVUFSVF8zV0lSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc9MTc1PWNvbmZpZyBCVF9IQ0lVQVJUX0xMXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4Ni1cXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnOjE4Nzpjb25maWcgQlRfSENJVUFSVF8zV0lSRVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTg4LVxcdGJvb2wgXFxcIlRocmVlLXdpcmUgVUFSVCAoSDUpIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjMzLjg1MDY2NTc5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjM3NjE0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEZXBlbmRlbmNpZXMgb2YgQlRcXF9IQ0lVQVJUXFxfM1dJUkUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYEJUX0hDSVVBUlRfM1dJUkVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFjdHVhbGx5ICpkb2VzKiBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gVGhhdCdzIGEgdml0YWwgZmlyc3Qgc3RlcCwgcmlnaHQ/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBvciBmZWF0dXJlcyBpcyBpdCBpbnRpbWF0ZWx5IGNvbm5lY3RlZCB0bz8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgZGVwZW5kZW5jaWVzLiBJcyBpdCBkZXBlbmRlbnQgb24gc29tZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uPyBQZXJoYXBzIHNwZWNpZmljIFVBUlQgZHJpdmVycyBvciBwaW4gY29uZmlndXJhdGlvbnM/IE9yIG1heWJlIHNvbWUgb3RoZXIgaGlnaGVyLWxldmVsIEJsdWV0b290aCBwcm90b2NvbCBzdGFja3M/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGNvbm5lY3Rpb25zIHRoaXMgdGhpbmcgaGFzIHdpdGggdGhlIHdpZGVyIHN5c3RlbS4gSSBrbm93IHRoaXMgd2lsbCBkaWN0YXRlIHRoZSBicm9hZGVyIHN5c3RlbSByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMTozNi44NzQ0MjkzODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2OTk5OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJUX0hDSVVBUlRfM1dJUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTE3NT1jb25maWcgQlRfSENJVUFSVF9MTFxcbi0tXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0xODYtXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZzoxODc6Y29uZmlnIEJUX0hDSVVBUlRfM1dJUkVcXG5kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnLTE4OC1cXHRib29sIFxcXCJUaHJlZS13aXJlIFVBUlQgKEg1KSBwcm90b2NvbCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMTozNi45MjIxMzY1NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODIxNTUxNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgQ2hlY2twb2ludCoqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIEJlZm9yZSBJIGRpdmUgYW55IGRlZXBlciBpbnRvIHRoaXMsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmZpZ3VyYXRpb24uIEkgY2FuJ3QganVzdCBibGluZGx5IHByb2NlZWQ7IEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29tcG9uZW50IGlzIGFjdHVhbGx5IGJlaW5nLi4uIHdlbGwsIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byBnbyByZWFkIHRoZSBLY29uZmlnIGZpbGUuIFRoYXQncyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gZ3JvayB3aGF0IHRoZSBtYWludGFpbmVyJ3Mgb3B0aW9ucyBhcmUuIFdoYXQgdmFyaWFibGVzIGFtIEkgZ29pbmcgdG8gaGF2ZSB0byBjb25zaWRlcj9cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjM5Ljc0MzY5MTI3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdCAgSENJTEwgKEhDSSBMb3cgTGV2ZWwpIGlzIGEgc2VyaWFsIHByb3RvY29sIGZvciBjb21tdW5pY2F0aW9uXFxuIDE4MTpcXHRcXHQgIGJldHdlZW4gQmx1ZXRvb3RoIGRldmljZSBhbmQgaG9zdC4gVGhpcyBwcm90b2NvbCBpcyByZXF1aXJlZCBmb3JcXG4gMTgyOlxcdFxcdCAgc2VyaWFsIEJsdWV0b290aCBkZXZpY2VzIHRoYXQgYXJlIGJhc2VkIG9uIFRleGFzIEluc3RydW1lbnRzJ1xcbiAxODM6XFx0XFx0ICBCUkYgY2hpcHMuXFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEhDSUxMIHByb3RvY29sLlxcbiAxODY6XFx0XFxuIDE4NzpcXHRjb25maWcgQlRfSENJVUFSVF8zV0lSRVxcbiAxODg6XFx0XFx0Ym9vbCBcXFwiVGhyZWUtd2lyZSBVQVJUIChINSkgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gMTg5OlxcdFxcdGRlcGVuZHMgb24gQlRfSENJVUFSVFxcbiAxOTA6XFx0XFx0ZGVwZW5kcyBvbiBCVF9IQ0lVQVJUX1NFUkRFVlxcbiAxOTE6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAxOTI6XFx0XFx0aGVscFxcbiAxOTM6XFx0XFx0ICBUaGUgSENJIFRocmVlLXdpcmUgVUFSVCBUcmFuc3BvcnQgTGF5ZXIgbWFrZXMgaXQgcG9zc2libGUgdG9cXG4gMTk0OlxcdFxcdCAgdXNlciB0aGUgQmx1ZXRvb3RoIEhDSSBvdmVyIGEgc2VyaWFsIHBvcnQgaW50ZXJmYWNlLiBUaGUgSENJXFxuIDE5NTpcXHRcXHQgIFRocmVlLXdpcmUgVUFSVCBUcmFuc3BvcnQgTGF5ZXIgYXNzdW1lcyB0aGF0IHRoZSBVQVJUXFxuIDE5NjpcXHRcXHQgIGNvbW11bmljYXRpb24gbWF5IGhhdmUgYml0IGVycm9ycywgb3ZlcnJ1biBlcnJvcnMgb3IgYnVyc3RcXG4gMTk3OlxcdFxcdCAgZXJyb3JzIGFuZCB0aGVyZWJ5IG1ha2luZyBDVFMvUlRTIGxpbmVzIHVubmVjZXNzYXJ5LlxcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBUaHJlZS13aXJlIFVBUlQgcHJvdG9jb2wuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjM5Ljc0Mzc2NTg5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTQwNjE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBCbHVldG9vdGggSENJIFVBUlQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYEJUX0hDSVVBUlRfM1dJUkVgIGlzIGJ1aWx0IG9uIHRvcCBvZiBgQlRfSENJVUFSVGAsIGFuZCB0aGF0IGluIHR1cm4gcmVsaWVzIG9uIGBCVF9IQ0lVQVJUX1NFUkRFVmAuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkOyBpdCdzIGEgY29tbW9uIGxheWVyaW5nIHBhdHRlcm4gZm9yIEJsdWV0b290aCBIQ0kgVUFSVCBpbXBsZW1lbnRhdGlvbnMuIFNvLCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gYEJUX0hDSVVBUlRfM1dJUkVgLCBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGBCVF9IQ0lVQVJUYCBwcm92aWRlcywgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGZlYXR1cmUgc2V0IGFuZCBkZXNpZ24gY2hvaWNlcyBhcmUgc29saWQuIFRoYXQgd2F5LCBhbnkgaXNzdWVzIEkgdW5jb3ZlciBjYW4gYmUgcXVpY2tseSB0aWVkIGJhY2sgdG8gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjE6NDQuMjM3ODMwNzM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE5OTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlRfSENJVUFSVCRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnPTkzPWNvbmZpZyBCVF9IQ0lCVFNESU9cXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTAzLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTA0OmNvbmZpZyBCVF9IQ0lVQVJUXFxuZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIkhDSSBVQVJUIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjE6NDQuMjg1MDM3MzEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjIwNDY1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBCVF9IQ0lVQVJUKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgQlRfSENJVUFSVGAgY29kZSBhZ2Fpbi4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIEJsdWV0b290aCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIG92ZXIgVUFSVCBpcyBiZWluZyBpbXBsZW1lbnRlZCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBhIHNwZWNpZmljIGlzc3VlIG9yIHBlcmhhcHMgSSdtIGludGVncmF0aW5nIGEgbmV3IGNvbXBvbmVudCBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIElzIGl0IGZvciBkZWJ1Z2dpbmcgYSBjb25uZWN0aW9uIHByb2JsZW0/IE1heWJlIEknbSBvcHRpbWl6aW5nIHBvd2VyIGNvbnN1bXB0aW9uLiBUaGUgYWNyb255bSBpbW1lZGlhdGVseSBicmluZ3MgdXAgYWxsIHNvcnRzIG9mIHBvdGVudGlhbCBhdmVudWVzIHRvIGV4cGxvcmUuIFRpbWUgdG8gZ2V0IG15IGhlYWQgYmFjayBpbiB0aGUgZ2FtZSBhbmQgdHJhY2UgdGhlIG51YW5jZXMgb2YgdGhpcyBVQVJULWJhc2VkIEhDSS4gSSBleHBlY3QgdG8gYmUgc2NydXRpbml6aW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcsIGZyYW1pbmcsIGFuZCBkYXRhIGJ1ZmZlciBtYW5hZ2VtZW50LiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgd2l0aGluIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjQ3LjM0NzA4Nzg2OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2JsdWV0b290aC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRcXG4gMTAxOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1cHBvcnQgZm9yIEJsdWV0b290aCBTRElPIGRldmljZXMgaW50byB0aGVcXG4gMTAyOlxcdFxcdCAga2VybmVsIG9yIHNheSBNIHRvIGNvbXBpbGUgaXQgYXMgbW9kdWxlIChidHNkaW8pLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRjb25maWcgQlRfSENJVUFSVFxcbiAxMDU6XFx0XFx0dHJpc3RhdGUgXFxcIkhDSSBVQVJUIGRyaXZlclxcXCJcXG4gMTA2OlxcdFxcdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVMgfHwgIVNFUklBTF9ERVZfQlVTXFxuIDEwNzpcXHRcXHRkZXBlbmRzIG9uIE5WTUVNIHx8ICFOVk1FTVxcbiAxMDg6XFx0XFx0ZGVwZW5kcyBvbiBQT1dFUl9TRVFVRU5DSU5HIHx8ICFQT1dFUl9TRVFVRU5DSU5HXFxuIDEwOTpcXHRcXHRkZXBlbmRzIG9uIFRUWVxcbiAxMTA6XFx0XFx0aGVscFxcbiAxMTE6XFx0XFx0ICBCbHVldG9vdGggSENJIFVBUlQgZHJpdmVyLlxcbiAxMTI6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgQmx1ZXRvb3RoIGRldmljZXMgd2l0aFxcbiAxMTM6XFx0XFx0ICBzZXJpYWwgcG9ydCBpbnRlcmZhY2UuIFlvdSB3aWxsIGFsc28gbmVlZCB0aGlzIGRyaXZlciBpZiB5b3UgaGF2ZVxcbiAxMTQ6XFx0XFx0ICBVQVJUIGJhc2VkIEJsdWV0b290aCBQQ01DSUEgYW5kIENGIGRldmljZXMgbGlrZSBYaXJjb20gQ3JlZGl0IENhcmRcXG4gMTE1OlxcdFxcdCAgYWRhcHRlciBhbmQgQnJhaW5Cb3hlcyBCbHVldG9vdGggUEMgQ2FyZC5cXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgQmx1ZXRvb3RoIFVBUlQgZGV2aWNlcyBpbnRvIHRoZVxcbiAxMTg6XFx0XFx0ICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUgKGhjaV91YXJ0KS5cXG4gMTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMTo0Ny4zNDcxNjk0ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NDU1MDA4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGEgU3BlY2lmaWMgQ29uZmlndXJhdGlvbiBWYXJpYWJsZSoqXG5cbkFscmlnaHQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIEknbSBkZWVwIGludG8gdGhpcyBhbmFseXNpcyBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBidXQgYSBzbWFsbCBkZXRhaWwgY2FuIHNvbWV0aW1lcyBiZSB0aGUgc291cmNlIG9mIGEgbGFyZ2UgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBVQVJUIHNlcmlhbCBkZXZpY2UgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBgQlRfSENJVUFSVF9TRVJERVZgIHNldHRpbmcgaXMgd2hhdCBJIGV4cGVjdCBpdCB0byBiZS4gVGhpcyBpbXBhY3RzIEJsdWV0b290aCBob3N0IGNvbnRyb2xsZXIgaW50ZXJmYWNlIChIQ0kpIFVBUlQgc2VyaWFsIGRldmljZS4gVGhhdCBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB0aGUgc3RhY2ssIGFuZCwgaWYgbm90IGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBpdCBjb3VsZCBleHBsYWluIHNvbWUgd2VpcmQgYmVoYXZpb3IgSSdtIHNlZWluZy4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjUwLjcxMTcyMjQ1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1NTA1NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJUX0hDSVVBUlRfU0VSREVWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZz0xMDQ9Y29uZmlnIEJUX0hDSVVBUlRcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTE5LVxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWc6MTIwOmNvbmZpZyBCVF9IQ0lVQVJUX1NFUkRFVlxcbmRyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWctMTIxLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjE6NTAuNzgzMjc3Mjg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTI3ODQ3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERlY29kaW5nIGBCVF9IQ0lVQVJUX1NFUkRFVmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIG5vdGF0aW9uIGBCVF9IQ0lVQVJUX1NFUkRFVmAgaW1tZWRpYXRlbHkgc2NyZWFtcyBhIHNwZWNpZmljIGFyZWEgb2YgaW50ZXJlc3Q6IEJsdWV0b290aCwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoSENJKSwgVUFSVCBjb21tdW5pY2F0aW9uLCBhbmQgc2VyaWFsIGRldmljZSBkcml2ZXJzLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBhIEJsdWV0b290aCBjb250cm9sbGVyIChsaWtlbHkgaW50ZWdyYXRlZCBvciBleHRlcm5hbCkgYW5kIHRoZSBob3N0IHN5c3RlbSwgZm9jdXNpbmcgb24gdGhlIHNlcmlhbCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgdXNlZCB0byB0cmFuc21pdCBIQ0kgY29tbWFuZHMgYW5kIGRhdGEuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFib3V0IHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiwgaG93IGl0IGhhbmRsZXMgZnJhbWluZyBvZiBIQ0kgcGFja2V0cyBvdmVyIHRoZSBVQVJULCBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcyAoaWYgYW55KSwgZXJyb3IgaGFuZGxpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzLiBUaGUgXCJTRVJERVZcIiBwb3J0aW9uIGRlZmluaXRlbHkgc3VnZ2VzdHMgYSBzdGFuZGFyZCBMaW51eCBzZXJpYWwgZGV2aWNlIGRyaXZlciBpbnRlcmZhY2UsIG1lYW5pbmcgaXQgc2hvdWxkIGludGVncmF0ZSByZWxhdGl2ZWx5IHNlYW1sZXNzbHkgd2l0aCB0aGUgYnJvYWRlciBzZXJpYWwgZnJhbWV3b3JrLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgaG93IHRoaXMgZHJpdmVyIGhvb2tzIGludG8gdGhlIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBzZXJpYWwgZHJpdmVyIGxheWVyIGFuZCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0IHVzZXMgdG8gY3VzdG9taXplIHRoZSBVQVJUIGNvbW11bmljYXRpb24gZm9yIEJsdWV0b290aC4gSG9wZWZ1bGx5LCB0aGUgY29kZSBjb21tZW50cyBhcmUgdGhvcm91Z2ggZW5vdWdoIHRvIGd1aWRlIG1lIHRocm91Z2ggdGhlIGZsb3cgY29udHJvbCBtZWNoYW5pc21zIGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMTo1NC41NzYwNjQ1MDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0XFx0ICBhZGFwdGVyIGFuZCBCcmFpbkJveGVzIEJsdWV0b290aCBQQyBDYXJkLlxcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBCbHVldG9vdGggVUFSVCBkZXZpY2VzIGludG8gdGhlXFxuIDExODpcXHRcXHQgIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZSAoaGNpX3VhcnQpLlxcbiAxMTk6XFx0XFxuIDEyMDpcXHRjb25maWcgQlRfSENJVUFSVF9TRVJERVZcXG4gMTIxOlxcdFxcdGJvb2xcXG4gMTIyOlxcdFxcdGRlcGVuZHMgb24gU0VSSUFMX0RFVl9CVVMgXFx1MDAyNlxcdTAwMjYgQlRfSENJVUFSVFxcbiAxMjM6XFx0XFx0ZGVmYXVsdCB5XFxuIDEyNDpcXHRcXG4gMTI1OlxcdGNvbmZpZyBCVF9IQ0lVQVJUX0g0XFxuIDEyNjpcXHRcXHRib29sIFxcXCJVQVJUIChINCkgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4gMTI3OlxcdFxcdGRlcGVuZHMgb24gQlRfSENJVUFSVFxcbiAxMjg6XFx0XFx0aGVscFxcbiAxMjk6XFx0XFx0ICBVQVJUIChINCkgaXMgc2VyaWFsIHByb3RvY29sIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gQmx1ZXRvb3RoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIxOjU0LjU3NjEzNDY5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTIxMTYzNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGV2aWNlIFJlcHJvYmUgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgU0VSSUFMX0RFVl9CVVNgIGp1bXBzIG91dCBhcyBhIGtleSBlbGVtZW50LiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMuIE5vdywgYWJvdXQgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpdHNlbGYuLi4gSXQgbGl2ZXMgaW4gYGRyaXZlcnMvYmFzZS9kZC5jYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IGludHJvZHVjaW5nIGEgbmV3IGZ1bmN0aW9uIHRvIHRoZSBkcml2ZXIgY29yZSwgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCwgZW5hYmxpbmcgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciBtb2RlbCwgYSBkZWZpbml0ZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBkZWZpbml0ZWx5IGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgaXQncyBleHBvcnRlZC4gQWgsIHllcywgYEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKTtgLiBUaGF0J3MgaW1wb3J0YW50OyBpdCdzIGFjY2Vzc2libGUuIFNpbmNlIGl0J3MgYSBjb3JlIGZ1bmN0aW9uLCBpdCdzIGRlZmluaXRlbHkgd29ydGh3aGlsZSB0byBzcGVuZCBzb21lIHRpbWUgZnV6emluZyBpdC5cblxuSG9sZCBvbiBhIG1pbnV0ZS4uLiBMZXQgbWUgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBSaWdodCwgaXQncyB1c2VkIGluIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYC4gYGJ0aW50ZWxfcGNpZWAgYW5kIGBpd2x3aWZpYCBhcmUgYm90aCBQQ0llIGRyaXZlcnMuIEFuZCBgaGNpX2g1YCBpcyBhIHNlcmlhbCBkcml2ZXIuIE9rYXksIGNhbiBJIGFjdHVhbGx5IHJlYWNoIGBoY2lfaDVgIGluc2lkZSBvZiBRRU1VPyBZZXMsIHZpYSBgaGNpX3VhcnRgIGFuZCBgc2VyZGV2YC4gRXhjZWxsZW50LCB0aGF04oCZcyBncmVhdCBuZXdzIVxuXG5TbywgdGhlIG9wdGltYWwgY29uZmlndXJhdGlvbiBmb3IgZnV6emluZyB0aGlzIHdvdWxkIGJlIHRvIGVuYWJsZSBgQlRfSENJVUFSVGAsIGBCVF9IQ0lVQVJUXzNXSVJFYCwgYW5kLCBvZiBjb3Vyc2UsIGBTRVJJQUxfREVWX0JVU2AuIEp1c3QgdG8gYmUgc2FmZSwgbGV0IG1lIGRvdWJsZS1jaGVjayBgU0VSSUFMX0RFVl9CVVNgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjI6MDAuNDk3MzAxNDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMxNDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VSSUFMX0RFVl9CVVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWctNC0jXFxuZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWc6NTptZW51Y29uZmlnIFNFUklBTF9ERVZfQlVTXFxuZHJpdmVycy90dHkvc2VyZGV2L0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiU2VyaWFsIGRldmljZSBidXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIyOjAwLjU0NDYyMTQ3OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjA5NzEzMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBQcm9iZSBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlIOKAkyBpdCdzIGRlZmluaXRlbHkgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYC4gVGhhdCdzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBhIGtleSBmb2N1cy4gUmlnaHQsIGZpcnN0IHRoaW5nIGlzIHRvIGFkZCBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIGBGb2N1c1N5bWJvbHNgLiBUaGF0J3MgZG9uZS5cblxuTm93LCBmb3IgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgaGFyZHdhcmUgaXMgZW5hYmxlZCB0byB3b3JrIHdpdGggdGhpcy4gSSdsbCBhZGQgYEJUX0hDSVVBUlRgLCBgQlRfSENJVUFSVF8zV0lSRWAsIGFuZCBgU0VSSUFMX0RFVl9CVVNgIHRvIGBFbmFibGVDb25maWdzYCAuIFBlcmZlY3QsIHRoYXQgdGFrZXMgY2FyZSBvZiB0aGUgY29tbXMuXG5cbk5vdywgSSBqdXN0IG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpcyB0aGUgKm9ubHkqIGNvcmUgdGhpbmcgYmVpbmcgYWRkZWQgaGVyZS4gR290dGEgYmUgcHJlY2lzZS4gQ2hlY2tpbmcuLi4geWVwLCBsb29rcyBsaWtlIEkndmUgYWxzbyBnb3QgYGRldmljZV9yZXByb2JlX3dvcmtfZm5gLiBNYWtlcyBzZW5zZSAtIGl04oCZcyBwcm9iYWJseSB0aGUgd29ya2VyIHRoYXQncyBydW4gYXMgYSByZXN1bHQgb2YgdGhlIHNjaGVkdWxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggZnVuY3Rpb25zIGFyZSBjbGVhcmx5IHVuZGVyc3Rvb2QgYnkgdGhlIHN5c3RlbS4gQW5kIGZvciB0aGF0IHJlYXNvbiwgYm90aCBhcmUgYWxzbyBnb2luZyB0byBgRm9jdXNTeW1ib2xzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODMsIk91dHB1dFRva2VucyI6MTU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIyOjA3LjE1NDMzNzE3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTg5ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVF9IQ0lVQVJUXCIsXG4gICAgXCJCVF9IQ0lVQVJUXzNXSVJFXCIsXG4gICAgXCJTRVJJQUxfREVWX0JVU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldmljZV9zY2hlZHVsZV9yZXByb2JlXCIsXG4gICAgXCJkZXZpY2VfcmVwcm9iZV93b3JrX2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHRoZSBkcml2ZXIgY29yZSwgd2hpY2ggYWxsb3dzIHNjaGVkdWxpbmcgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIGEgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZHJpdmVyIG1vZGVsIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZC4gVGhlIGZ1bmN0aW9uIGlzIHVzZWQgYnkgc2V2ZXJhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGBoY2lfaDVgIHNlcmlhbCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVF9IQ0lVQVJUXCIsXG4gICAgXCJCVF9IQ0lVQVJUXzNXSVJFXCIsXG4gICAgXCJTRVJJQUxfREVWX0JVU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldmljZV9zY2hlZHVsZV9yZXByb2JlXCIsXG4gICAgXCJkZXZpY2VfcmVwcm9iZV93b3JrX2ZuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHRoZSBkcml2ZXIgY29yZSwgd2hpY2ggYWxsb3dzIHNjaGVkdWxpbmcgYSBkZWZlcnJlZCBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIGEgZGV2aWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZHJpdmVyIG1vZGVsIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZC4gVGhlIGZ1bmN0aW9uIGlzIHVzZWQgYnkgc2V2ZXJhbCBkcml2ZXJzLCBpbmNsdWRpbmcgdGhlIGBoY2lfaDVgIHNlcmlhbCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjI6MDcuMjMzNTMzNDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjA3OTgyMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjI6MDcuMjMzOTk0NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQ2MDc1MTUyNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCB0byBzdGFuZGFyZGlzZSBkZWZlcnJlZCBkZXZpY2UgcmVwcm9iaW5nIGFjcm9zcyBkcml2ZXJzLCByZXBsYWNpbmcgY3VzdG9tIHdvcmsgaXRlbXMgaW4gYGJ0aW50ZWxfcGNpZWAsIGBoY2lfaDVgLCBhbmQgYGl3bHdpZmlgLiBJdCBhbHNvIGFkZHMgYSBgc2h1dGRvd25fZG9uZWAgZmxhZyB0byBwcmV2ZW50IHJlcHJvYmluZyBkZXZpY2VzIGR1cmluZyBzeXN0ZW0gc2h1dGRvd24uIEFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgKGUuZy4sIGBzdHJ1Y3QgZGV2aWNlX3JlcHJvYmVgIHZpYSBga3phbGxvY19vYmpgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIGtlcm5lbCBkZXZpY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGRyaXZlciBiaW5kaW5nL3VuYmluZGluZywgYW5kIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbmV0d29yayBwYWNrZXQgcGFyc2luZywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyAodXNlLWFmdGVyLWZyZWUpLCBsb2NraW5nIChkZWFkbG9ja3MpLCBvciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Y2NzNmZWY3NDg2YTY5OGI5NGNmMjkxZDY1OGJlZGEwZWE1NTc0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDAzOjIxOjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmhcbmluZGV4IGE1YjdhYmMxMGZmMDIuLjYyMzRlMzdkZTdlOTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvYmFzZS5oXG4rKysgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oXG5AQCAtMTA2LDYgKzEwNiwxMCBAQCBzdHJ1Y3QgZHJpdmVyX3ByaXZhdGUge1xuICAqIEBkZWFkOiBUaGlzIGRldmljZSBpcyBjdXJyZW50bHkgZWl0aGVyIGluIHRoZSBwcm9jZXNzIG9mIG9yIGhhcyBiZWVuXG4gICpcdCAgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0uIEFueSBhc3luY2hyb25vdXMgZXZlbnRzIHNjaGVkdWxlZCBmb3IgdGhpc1xuICAqXHQgIGRldmljZSBzaG91bGQgZXhpdCB3aXRob3V0IHRha2luZyBhbnkgYWN0aW9uLlxuKyAqIEBzaHV0ZG93bl9kb25lOiBTZXQgb25jZSBkZXZpY2Vfc2h1dGRvd24oKSBoYXMgcmVhY2hlZCB0aGlzIGRldmljZSwgdW5kZXJcbisgKlx0ICB0aGUgZGV2aWNlIGxvY2ssIGJlZm9yZSBhbnkgc2h1dGRvd24gY2FsbGJhY2sgcnVucy4gUmVhZCB1bmRlciB0aGVcbisgKlx0ICBkZXZpY2UgbG9jay4gQSBkZWZlcnJlZCByZS1wcm9iZSBzY2hlZHVsZWQgd2l0aFxuKyAqXHQgIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKCkgbXVzdCBub3QgZGV0YWNoIHRoZSBkZXZpY2UgYW55bW9yZS5cbiAgKlxuICAqIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyIGNvcmUgc2hvdWxkIGV2ZXIgdG91Y2ggdGhlc2UgZmllbGRzLlxuICAqL1xuQEAgLTEyMCw2ICsxMjQsNyBAQCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUge1xuIFx0Y2hhciAqZGVmZXJyZWRfcHJvYmVfcmVhc29uO1xuIFx0c3RydWN0IGRldmljZSAqZGV2aWNlO1xuIFx0dTggZGVhZDoxO1xuK1x0dTggc2h1dGRvd25fZG9uZToxO1xuIH07XG4gI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9wYXJlbnQob2JqKVx0XFxcbiBcdGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfcGFyZW50KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5pbmRleCA0ZDAyNjY4Mjk0NGYyLi44YTdkYmU0ZTgzNjJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuY1xuKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xuQEAgLTQ5MDYsNiArNDkwNiw5IEBAIHZvaWQgZGV2aWNlX3NodXRkb3duKHZvaWQpXG4gXHRcdFx0ZGV2aWNlX2xvY2socGFyZW50KTtcbiBcdFx0ZGV2aWNlX2xvY2soZGV2KTtcbiBcbitcdFx0aWYgKGRldi1cdTAwM2VwKVxuK1x0XHRcdGRldi1cdTAwM2VwLVx1MDAzZXNodXRkb3duX2RvbmUgPSB0cnVlO1xuK1xuIFx0XHQvKiBEb24ndCBhbGxvdyBhbnkgbW9yZSBydW50aW1lIHN1c3BlbmRzICovXG4gXHRcdHBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7XG4gXHRcdHBtX3J1bnRpbWVfYmFycmllcihkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmNcbmluZGV4IDYwYzAwNTIyMzg0NGQuLmQ3NjVlMWFlNTYxNGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvZGQuY1xuKysrIGIvZHJpdmVycy9iYXNlL2RkLmNcbkBAIC0xNDM2LDMgKzE0MzYsMTA1IEBAIHZvaWQgZHJpdmVyX2RldGFjaChjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KVxuIFx0XHRwdXRfZGV2aWNlKGRldik7XG4gXHR9XG4gfVxuK1xuK3N0cnVjdCBkZXZpY2VfcmVwcm9iZSB7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7XG4rXHRjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2O1xuK307XG4rXG4rc3RhdGljIHZvaWQgZGV2aWNlX3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGRldmljZV9yZXByb2JlICpycCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUsXG4rXHRcdFx0XHRcdFx0IHdvcmsud29yayk7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBycC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBycC1cdTAwM2VwYXJlbnQ7XG4rXHRib29sIGRldGFjaGVkID0gZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0X19kZXZpY2VfZHJpdmVyX2xvY2soZGV2LCBwYXJlbnQpO1xuK1x0LypcbitcdCAqIHJwLVx1MDAzZWRydiBpcyBvbmx5IGV2ZXIgY29tcGFyZWQsIG5ldmVyIGRlcmVmZXJlbmNlZDogdGhlIGRyaXZlciBpdFxuK1x0ICogcG9pbnRzIHRvIG1heSBoYXZlIGJlZW4gdW5yZWdpc3RlcmVkIGFuZCBmcmVlZCBieSBub3cuXG4rXHQgKi9cbitcdGlmICghZGV2LVx1MDAzZXAtXHUwMDNlZGVhZCBcdTAwMjZcdTAwMjYgIWRldi1cdTAwM2VwLVx1MDAzZXNodXRkb3duX2RvbmUgXHUwMDI2XHUwMDI2XG4rXHQgICAgZGV2LVx1MDAzZWRyaXZlciBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWRyaXZlciA9PSBycC1cdTAwM2VkcnYpIHtcbitcdFx0X19kZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2LCBwYXJlbnQpO1xuK1x0XHRkZXRhY2hlZCA9IHRydWU7XG4rXHR9XG4rXHRfX2RldmljZV9kcml2ZXJfdW5sb2NrKGRldiwgcGFyZW50KTtcbitcbitcdGlmIChkZXRhY2hlZCkge1xuK1x0XHQvKlxuK1x0XHQgKiBkZXZpY2VfYXR0YWNoKCkgbXVzdCBydW4gd2l0aCB0aGUgcGFyZW50IGxvY2tlZCBvbiBidXNlc1xuK1x0XHQgKiB0aGF0IHJlcXVpcmUgaXQsIG1pcnJvcmluZyBidXNfcmVzY2FuX2RldmljZXNfaGVscGVyKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGFyZW50IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlYnVzLVx1MDAzZW5lZWRfcGFyZW50X2xvY2spXG4rXHRcdFx0ZGV2aWNlX2xvY2socGFyZW50KTtcbitcdFx0cmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHQgICAgICBcInJlLXByb2JlIGZhaWxlZCwgZGV2aWNlIGxlZnQgdW5ib3VuZFxcblwiKTtcbitcdFx0aWYgKHBhcmVudCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWJ1cy1cdTAwM2VuZWVkX3BhcmVudF9sb2NrKVxuK1x0XHRcdGRldmljZV91bmxvY2socGFyZW50KTtcbitcdH1cbitcbitcdHB1dF9kZXZpY2UoZGV2KTtcbitcdHB1dF9kZXZpY2UocGFyZW50KTtcbitcdGtmcmVlKHJwKTtcbit9XG4rXG4rLyoqXG4rICogZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUgLSBzY2hlZHVsZSBhIGRlZmVycmVkIGRldGFjaCBhbmQgcmUtcHJvYmVcbisgKiBAZGV2OiBkZXZpY2UgdG8gZGV0YWNoIGFuZCByZS1wcm9iZVxuKyAqIEBkZWxheV9tczogZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmUtcHJvYmUgcnVuc1xuKyAqXG4rICogU2NoZWR1bGUgYSBkZXRhY2ggYW5kIHJlLXByb2JlIG9mIEBkZXYgYWZ0ZXIgQGRlbGF5X21zIG1pbGxpc2Vjb25kcy5cbisgKiBUaGUgcmUtcHJvYmUgaXMgc2tpcHBlZCBpZiwgYnkgdGhlIHRpbWUgdGhlIHNjaGVkdWxlZCB3b3JrIHJ1bnMsIHRoZVxuKyAqIGRldmljZSBoYXMgYmVlbiByZW1vdmVkLCB0aGUgc3lzdGVtIHNodXRkb3duIHNlcXVlbmNlIGhhcyByZWFjaGVkIHRoZVxuKyAqIGRldmljZSwgb3IgQGRldiBpcyBubyBsb25nZXIgYm91bmQgdG8gdGhlIGRyaXZlciB0aGF0IHdhcyBib3VuZCBhdFxuKyAqIHNjaGVkdWxpbmcgdGltZS4gSW4gcGFydGljdWxhciBhbiBhZG1pbmlzdHJhdGl2ZSB1bmJpbmQgaXMgbmV2ZXJcbisgKiB1bmRvbmUgYnkgYSBzdGFsZSByZS1wcm9iZS5cbisgKlxuKyAqIFRoZSB3b3JrIGZ1bmN0aW9uIGlzIGJ1aWx0LWluIHRleHQsIHNvIHRoZSBib3VuZCBkcml2ZXIgbWF5IGNhbGwgdGhpc1xuKyAqIGZyb20gaXRzIG93biBjb2RlIHdpdGhvdXQgaG9sZGluZyBhIG1vZHVsZSByZWZlcmVuY2UuIElmIHRoZSBkcml2ZXJcbisgKiBtb2R1bGUgaXMgdW5sb2FkZWQgYmVmb3JlIHRoZSB3b3JrIHJ1bnMsIGRyaXZlciB1bnJlZ2lzdHJhdGlvbiB1bmJpbmRzXG4rICogQGRldiBmaXJzdCBhbmQgdGhlIHNjaGVkdWxlZCB3b3JrIGRvZXMgbm90aGluZy5cbisgKlxuKyAqIE11bHRpcGxlIHBlbmRpbmcgcmUtcHJvYmVzIGZvciB0aGUgc2FtZSBkZXZpY2UgYXJlIGluZGl2aWR1YWxseSBzYWZlO1xuKyAqIGEgY2FsbGVyIHRoYXQgd2FudHMgYXQgbW9zdCBvbmUgcGVuZGluZyByZS1wcm9iZSBtdXN0IGdhdGUgc2NoZWR1bGluZ1xuKyAqIGl0c2VsZi5cbisgKlxuKyAqIE1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC5cbisgKlxuKyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBAZGV2IGlzIG5vdCBhIHJlZ2lzdGVyZWQgZGV2aWNlXG4rICogYm91bmQgdG8gYSBkcml2ZXIsIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBkZWxheV9tcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX3JlcHJvYmUgKnJwO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlYnVzIHx8ICFkZXYtXHUwMDNlcCB8fCAhZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIWRldi1cdTAwM2Vkcml2ZXIpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cnAgPSBremFsbG9jX29iaigqcnApO1xuK1x0aWYgKCFycClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRycC1cdTAwM2VkZXYgPSBnZXRfZGV2aWNlKGRldik7XG4rXHQvKlxuK1x0ICogUGluIHRoZSBwYXJlbnQgdG9vOiB0aGUgd29yayBsb2NrcyBpdCwgYW5kIGFuIHVucmVnaXN0ZXIgb2YgQGRldlxuK1x0ICogd291bGQgb3RoZXJ3aXNlIGRyb3AgdGhlIGxhc3QgcmVmZXJlbmNlIGJlZm9yZSB0aGUgd29yayBydW5zLlxuK1x0ICovXG4rXHRycC1cdTAwM2VwYXJlbnQgPSBnZXRfZGV2aWNlKGRldi1cdTAwM2VwYXJlbnQpO1xuK1x0cnAtXHUwMDNlZHJ2ID0gUkVBRF9PTkNFKGRldi1cdTAwM2Vkcml2ZXIpO1xuK1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2cnAtXHUwMDNld29yaywgZGV2aWNlX3JlcHJvYmVfd29ya19mbik7XG4rXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2cnAtXHUwMDNld29yayxcbitcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0aW50ZWxfcGNpZS5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNcbmluZGV4IGJhYTYyMWIzZmVmOTMuLjI5YmUwNWQ0MTQyOTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idGludGVsX3BjaWUuY1xuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNcbkBAIC0zMDEyLDcgKzMwMTIsNyBAQCBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcGVyZm9ybV9wbGRyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdCAqIEJUIG5lZWRzIHBjaV9zYXZlX3N0YXRlKCkvcGNpX3Jlc3RvcmVfc3RhdGUoKSBiZWNhdXNlIHRoZSBCVCBkcml2ZXJcbiBcdCAqIGlzIHN0aWxsIHBhcnRpYWxseSBhdHRhY2hlZCB3aGVuIHRoZSBfUFJSIHJ1bnMgKGl0IGhhc24ndCBiZWVuIHVuYm91bmQgeWV0KS5cbiBcdCAqIFRoZSBQQ0kgZGV2aWNlIG5lZWRzIHRvIHJlbWFpbiBtaW5pbWFsbHkgZnVuY3Rpb25hbCBzbyB0aGF0XG4tXHQgKiBkZXZpY2VfcmVwcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldikgY2FuIHdvcmsgYWZ0ZXJ3YXJkXG4rXHQgKiB0aGUgZGVmZXJyZWQgcmUtcHJvYmUgb2YgdGhlIEJUIGRldmljZSBjYW4gd29yayBhZnRlcndhcmRcbiBcdCAqL1xuIFx0cmV0ID0gYnRpbnRlbF9wY2llX2FjcGlfcmVzZXRfbWV0aG9kKGRhdGEpO1xuIFxuQEAgLTMwMjMsMTQgKzMwMjMsMTYgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3BlcmZvcm1fcGxkcihzdHJ1Y3QgYnRpbnRlbF9wY2llX2RhdGEgKmRhdGEpXG4gXHR9XG4gXG4gXHRpZiAoIXJldCkge1xuLVx0XHRpZiAoZGV2aWNlX3JlcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKVxuLVx0XHRcdEJUX0VSUihcIkJUIHJlcHJvYmUgZmFpbGVkIGZvciBCREY6JXNcIiwgcGNpX25hbWUocGRldikpO1xuK1x0XHRpZiAoZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIDApKVxuK1x0XHRcdEJUX0VSUihcIkJUIHJlcHJvYmUgc2NoZWR1bGluZyBmYWlsZWQgZm9yIEJERjolc1wiLFxuK1x0XHRcdCAgICAgICBwY2lfbmFtZShwZGV2KSk7XG4gXHR9XG4gfVxuIFxuIC8qXG4tICogSXNzdWUgYSBGdW5jdGlvbiBMZXZlbCBSZXNldCBhbmQgaGFuZCB0ZWFyZG93bi9yZS1pbml0IG9mZiB0byB0aGUgUENJXG4tICogY29yZSB2aWEgZGV2aWNlX3JlcHJvYmUoKSwgbWlycm9yaW5nIHRoZSBQTERSIHBhdGgncyBjb250cmFjdC5cbisgKiBJc3N1ZSBhIEZ1bmN0aW9uIExldmVsIFJlc2V0IGFuZCBoYW5kIHRlYXJkb3duL3JlLWluaXQgb2ZmIHRvIHRoZVxuKyAqIGRyaXZlciBjb3JlIHZpYSBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZSgpLCBtaXJyb3JpbmcgdGhlIFBMRFIgcGF0aCdzXG4rICogY29udHJhY3QuXG4gICpcbiAgKiBDYWxsZXIgbXVzdCBob2xkIHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKSBhbmQgbXVzdCBoYXZlIGFscmVhZHlcbiAgKiBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBkcmFpbmVkIGJvdGggcnhfd29yayBhbmQgY29yZWR1bXBfd29yay5cbkBAIC0zMDUyLDE0ICszMDU0LDEyIEBAIHN0YXRpYyBpbnQgYnRpbnRlbF9wY2llX3BlcmZvcm1fZmxyKHN0cnVjdCBidGludGVsX3BjaWVfZGF0YSAqZGF0YSlcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdC8qIGRldmljZV9yZXByb2JlKCkgYWx3YXlzIGRldGFjaGVzIHRoZSBkcml2ZXIgZmlyc3QgKHJ1bm5pbmdcbi1cdCAqIC5yZW1vdmUoKSwgd2hpY2ggZnJlZXMgJ2RhdGEnKTsgYW55IHJlLXByb2JlIGZhaWx1cmUgbGVhdmVzIHRoZVxuLVx0ICogZGV2aWNlIHVuYm91bmQgYnV0ICdkYXRhJyBpcyBhbHJlYWR5IGdvbmUsIHNvIGp1c3QgbG9nIGl0LlxuLVx0ICovXG4tXHRpZiAoZGV2aWNlX3JlcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKVxuLVx0XHRCVF9FUlIoXCJCVCByZXByb2JlIGZhaWxlZCBmb3IgQkRGOiVzXCIsIHBjaV9uYW1lKHBkZXYpKTtcbitcdGVyciA9IGRldmljZV9zY2hlZHVsZV9yZXByb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdEJUX0VSUihcIkJUIHJlcHJvYmUgc2NoZWR1bGluZyBmYWlsZWQgZm9yIEJERjolc1wiLFxuK1x0XHQgICAgICAgcGNpX25hbWUocGRldikpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBidGludGVsX3BjaWVfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKVxuQEAgLTMwOTAsMTEgKzMwOTAsMTUgQEAgc3RhdGljIHZvaWQgYnRpbnRlbF9wY2llX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3aylcbiBcbiBcdGJ0X2Rldl9kYmcoZGF0YS1cdTAwM2VoZGV2LCBcIlJlbGVhc2UgYmx1ZXRvb3RoIGludGVyZmFjZVwiKTtcbiBcbi1cdC8qIEJvdGggcmVzZXQgcGF0aHMgZm9sbG93IHRoZSBzYW1lIGNvbnRyYWN0OiBvbiBzdWNjZXNzIHRoZXlcbi1cdCAqIGRlc3Ryb3kgJ2RhdGEnIHZpYSBkZXZpY2VfcmVwcm9iZSgpIChhIGZyZXNoIHByb2JlIHJlLUlOSVRfV09SS3Ncbi1cdCAqIHRoZSBkdW1wIHdvcmtlcnMgd2l0aCBkaXNhYmxlIGNvdW50IDApLCBzbyBlbmFibGVfd29yaygpIG11c3Rcbi1cdCAqIE5PVCBiZSBjYWxsZWQgb24gdGhlIHN1Y2Nlc3MgcGF0aC4gT25seSB0aGUgRkxSIHBhdGggY2FuIGZhaWxcbi1cdCAqIHdpdGggJ2RhdGEnIHN0aWxsIGFsaXZlLCBpbiB3aGljaCBjYXNlIHdlIGJhbGFuY2UgdGhlXG4rXHQvKiBCb3RoIHJlc2V0IHBhdGhzIGZvbGxvdyB0aGUgc2FtZSBjb250cmFjdDogb24gc3VjY2VzcyB0aGVcbitcdCAqIGRlZmVycmVkIHJlLXByb2JlIHNjaGVkdWxlZCB3aXRoIGRldmljZV9zY2hlZHVsZV9yZXByb2JlKClcbitcdCAqIGRlc3Ryb3lzICdkYXRhJyBieSByZS1ydW5uaW5nIC5wcm9iZSgpICh3aGljaCByZS1JTklUX1dPUktzIHRoZVxuK1x0ICogZHVtcCB3b3JrZXJzIHdpdGggZGlzYWJsZSBjb3VudCAwKSwgc28gZW5hYmxlX3dvcmsoKSBtdXN0IE5PVCBiZVxuK1x0ICogY2FsbGVkIG9uIHRoZSBzdWNjZXNzIHBhdGguICdkYXRhJyBzdGF5cyBhbGl2ZSB1bnRpbCB0aGUgZGVmZXJyZWRcbitcdCAqIGRldGFjaCBydW5zOyBpbiB0aGlzIHdpbmRvdyBuZXcgYWN0aXZpdHkgaXMgZmVuY2VkIGJ5XG4rXHQgKiBCVElOVEVMX1BDSUVfUkVDT1ZFUllfSU5fUFJPR1JFU1MsIHRoZSBtYXNrZWQgaW50ZXJydXB0cyBhbmQgdGhlXG4rXHQgKiBkaXNhYmxlZCBkdW1wIHdvcmtlcnMuIE9ubHkgdGhlIEZMUiBwYXRoIGNhbiBmYWlsIHdpdGggbm9cbitcdCAqIHJlLXByb2JlIHNjaGVkdWxlZCwgaW4gd2hpY2ggY2FzZSB3ZSBiYWxhbmNlIHRoZVxuIFx0ICogZGlzYWJsZV93b3JrX3N5bmMoKSBjYWxscyBhYm92ZSBzbyBhIGxhdGVyIHN1Y2Nlc3NmdWwgcmVzZXQgaXNcbiBcdCAqIG5vdCBwZXJtYW5lbnRseSBibG9ja2VkLlxuIFx0ICpcbkBAIC0zNDYwLDEzICszNDY0LDEyIEBAIHN0YXRpYyB2b2lkIGJ0aW50ZWxfcGNpZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZkYXRhLVx1MDAzZWZ3dHJpZ2dlcl93b3JrKTtcbiBcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmRhdGEtXHUwMDNlbWJveF93b3JrKTtcbiBcbi1cdC8qIENhbmNlbCBwZW5kaW5nIHJlc2V0IHdvcmsuIFNraXAgb25seSB3aGVuIHJlbW92ZSgpIGlzIGNhbGxlZCBmcm9tXG4tXHQgKiB3aXRoaW4gdGhlIHJlc2V0IHdvcmsgaXRzZWxmIChQTERSIGRldmljZV9yZXByb2JlIHBhdGgpIHRvIGF2b2lkXG4tXHQgKiBkZWFkbG9jay4gY3VycmVudF93b3JrKCkgcmV0dXJucyB0aGUgd29ya19zdHJ1Y3Qgb2YgdGhlIGNhbGxlciBpZlxuLVx0ICogd2UgYXJlIGluIGEgd29ya3F1ZXVlIGNvbnRleHQuXG4rXHQvKiBUaGUgZGVmZXJyZWQgcmUtcHJvYmUgdHJpZ2dlcnMgLnJlbW92ZSgpIGZyb20gdGhlIGRyaXZlciBjb3JlJ3NcbitcdCAqIHdvcmsgaXRlbSwgbmV2ZXIgZnJvbSByZXNldF93b3JrIGl0c2VsZiwgc28gdGhpcyBubyBsb25nZXIgcnVuc1xuK1x0ICogbmVzdGVkIGluIHJlc2V0X3dvcms7IGRpc2FibGVfd29ya19zeW5jKCkgYWxzbyBndWFyYW50ZWVzIHRoZVxuK1x0ICogcmVzZXQgd29yayBoYXMgZnVsbHkgcmV0dXJuZWQgYmVmb3JlICdkYXRhJyBpcyBmcmVlZC5cbiBcdCAqL1xuLVx0aWYgKGN1cnJlbnRfd29yaygpICE9IFx1MDAyNmRhdGEtXHUwMDNlcmVzZXRfd29yaylcbi1cdFx0ZGlzYWJsZV93b3JrX3N5bmMoXHUwMDI2ZGF0YS1cdTAwM2VyZXNldF93b3JrKTtcbitcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNmRhdGEtXHUwMDNlcmVzZXRfd29yayk7XG4gXG4gXHRidGludGVsX3BjaWVfZGlzYWJsZV9pbnRlcnJ1cHRzKGRhdGEpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNS5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcbmluZGV4IGIxOTk5ZTE0YWFkZWYuLjNmZGUxZDVhNWFlOTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDUuY1xuKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNcbkBAIC05OTAsNyArOTkwLDcgQEAgc3RhdGljIGludCBoNV9idHJ0bF9zZXR1cChzdHJ1Y3QgaDUgKmg1KVxuIHN0YXRpYyB2b2lkIGg1X2J0cnRsX29wZW4oc3RydWN0IGg1ICpoNSlcbiB7XG4gXHQvKlxuLVx0ICogU2luY2UgaDVfYnRydGxfcmVzdW1lKCkgZG9lcyBhIGRldmljZV9yZXByb2JlKCkgdGhlIHN1c3BlbmQgaGFuZGxpbmdcbitcdCAqIFNpbmNlIGg1X2J0cnRsX3Jlc3VtZSgpIHNjaGVkdWxlcyBhIGRldmljZSByZS1wcm9iZSB0aGUgc3VzcGVuZCBoYW5kbGluZ1xuIFx0ICogZG9uZSBieSB0aGUgaGNpX3N1c3BlbmRfbm90aWZpZXIgaXMgbm90IG5lY2Vzc2FyeTsgaXQgYWN0dWFsbHkgY2F1c2VzXG4gXHQgKiBkZWxheXMgYW5kIGEgYnVuY2ggb2YgZXJyb3JzIHRvIGdldCBsb2dnZWQsIHNvIGRpc2FibGUgaXQuXG4gXHQgKi9cbkBAIC0xMDQ5LDQ2ICsxMDQ5LDE1IEBAIHN0YXRpYyBpbnQgaDVfYnRydGxfc3VzcGVuZChzdHJ1Y3QgaDUgKmg1KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0cnVjdCBoNV9idHJ0bF9yZXByb2JlIHtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuLX07XG4tXG4tc3RhdGljIHZvaWQgaDVfYnRydGxfcmVwcm9iZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLXtcbi1cdHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlICpyZXByb2JlID1cbi1cdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoNV9idHJ0bF9yZXByb2JlLCB3b3JrKTtcbi1cdGludCByZXQ7XG4tXG4tXHRyZXQgPSBkZXZpY2VfcmVwcm9iZShyZXByb2JlLVx1MDAzZWRldik7XG4tXHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQUk9CRV9ERUZFUilcbi1cdFx0ZGV2X2VycihyZXByb2JlLVx1MDAzZWRldiwgXCJSZXByb2JlIGVycm9yICVkXFxuXCIsIHJldCk7XG4tXG4tXHRwdXRfZGV2aWNlKHJlcHJvYmUtXHUwMDNlZGV2KTtcbi1cdGtmcmVlKHJlcHJvYmUpO1xuLVx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaDVfYnRydGxfcmVzdW1lKHN0cnVjdCBoNSAqaDUpXG4ge1xuLVx0aWYgKHRlc3RfYml0KEg1X1dBS0VVUF9ESVNBQkxFLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpIHtcbi1cdFx0c3RydWN0IGg1X2J0cnRsX3JlcHJvYmUgKnJlcHJvYmU7XG4tXG4tXHRcdHJlcHJvYmUgPSBremFsbG9jX29iaigqcmVwcm9iZSk7XG4tXHRcdGlmICghcmVwcm9iZSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbitcdGlmICh0ZXN0X2JpdChINV9XQUtFVVBfRElTQUJMRSwgXHUwMDI2aDUtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm4gZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmUoXHUwMDI2aDUtXHUwMDNlaHUtXHUwMDNlc2VyZGV2LVx1MDAzZWRldiwgMCk7XG4gXG4tXHRcdElOSVRfV09SSyhcdTAwMjZyZXByb2JlLVx1MDAzZXdvcmssIGg1X2J0cnRsX3JlcHJvYmVfd29ya2VyKTtcbi1cdFx0cmVwcm9iZS1cdTAwM2VkZXYgPSBnZXRfZGV2aWNlKFx1MDAyNmg1LVx1MDAzZWh1LVx1MDAzZXNlcmRldi1cdTAwM2VkZXYpO1xuLVx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZyZXByb2JlLVx1MDAzZXdvcmspO1xuLVx0fSBlbHNlIHtcbi1cdFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGg1LVx1MDAzZWRldmljZV93YWtlX2dwaW8sIDEpO1xuK1x0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGg1LVx1MDAzZWRldmljZV93YWtlX2dwaW8sIDEpO1xuIFxuLVx0XHRpZiAodGVzdF9iaXQoSDVfSFdfRkxPV19DT05UUk9MLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpXG4tXHRcdFx0c2VyZGV2X2RldmljZV9zZXRfZmxvd19jb250cm9sKGg1LVx1MDAzZWh1LVx1MDAzZXNlcmRldiwgdHJ1ZSk7XG4tXHR9XG4rXHRpZiAodGVzdF9iaXQoSDVfSFdfRkxPV19DT05UUk9MLCBcdTAwMjZoNS1cdTAwM2VmbGFncykpXG4rXHRcdHNlcmRldl9kZXZpY2Vfc2V0X2Zsb3dfY29udHJvbChoNS1cdTAwM2VodS1cdTAwM2VzZXJkZXYsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLXRyYW5zLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC10cmFucy5jXG5pbmRleCA3M2FhZTExMjUwNDIxLi41YWU3MzRjYjkwMjcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY1xuQEAgLTc4LDQ3ICs3OCwxMSBAQCB2b2lkIGl3bF90cmFuc19mcmVlX3Jlc3RhcnRfbGlzdCh2b2lkKVxuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUge1xuLVx0c3RydWN0IGRldmljZSAqZGV2O1xuLVx0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xuLX07XG4tXG4tc3RhdGljIHZvaWQgaXdsX3RyYW5zX3JlcHJvYmVfd2soc3RydWN0IHdvcmtfc3RydWN0ICp3aylcbi17XG4tXHRzdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgKnJlcHJvYmU7XG4tXG4tXHRyZXByb2JlID0gY29udGFpbmVyX29mKHdrLCB0eXBlb2YoKnJlcHJvYmUpLCB3b3JrLndvcmspO1xuLVxuLVx0aWYgKGRldmljZV9yZXByb2JlKHJlcHJvYmUtXHUwMDNlZGV2KSlcbi1cdFx0ZGV2X2VycihyZXByb2JlLVx1MDAzZWRldiwgXCJyZXByb2JlIGZhaWxlZCFcXG5cIik7XG4tXHRwdXRfZGV2aWNlKHJlcHJvYmUtXHUwMDNlZGV2KTtcbi1cdGtmcmVlKHJlcHJvYmUpO1xuLVx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGl3bF90cmFuc19zY2hlZHVsZV9yZXByb2JlKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkZWxheV9tcylcbiB7XG4tXHRzdHJ1Y3QgaXdsX3RyYW5zX3JlcHJvYmUgKnJlcHJvYmU7XG4tXG4tXHQvKlxuLVx0ICogZ2V0IGEgbW9kdWxlIHJlZmVyZW5jZSB0byBhdm9pZCBkb2luZyB0aGlzIHdoaWxlIHVubG9hZGluZ1xuLVx0ICogYW55d2F5IGFuZCB0byBhdm9pZCBzY2hlZHVsaW5nIGEgd29yayB3aXRoIGNvZGUgdGhhdCdzXG4tXHQgKiBiZWluZyByZW1vdmVkLlxuLVx0ICovXG4tXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xuLVx0XHRJV0xfRVJSKHRyYW5zLCBcIk1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAtIGFib3J0XFxuXCIpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRyZXByb2JlID0ga3phbGxvY19vYmooKnJlcHJvYmUpO1xuLVx0aWYgKCFyZXByb2JlKSB7XG4tXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXHRyZXByb2JlLVx1MDAzZWRldiA9IGdldF9kZXZpY2UodHJhbnMtXHUwMDNlZGV2KTtcbi1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJlcHJvYmUtXHUwMDNld29yaywgaXdsX3RyYW5zX3JlcHJvYmVfd2spO1xuLVx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNnJlcHJvYmUtXHUwMDNld29yaywgbXNlY3NfdG9famlmZmllcyhkZWxheV9tcykpO1xuK1x0aWYgKGRldmljZV9zY2hlZHVsZV9yZXByb2JlKHRyYW5zLVx1MDAzZWRldiwgZGVsYXlfbXMpKVxuK1x0XHRJV0xfRVJSKHRyYW5zLCBcIkNvdWxkIG5vdCBzY2hlZHVsZSByZXByb2JlXFxuXCIpO1xuIH1cbiBcbiAjZGVmaW5lIElXTF9UUkFOU19SRVNFVF9PS19USU1FXHQ3IC8qIHNlY29uZHMgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuaW5kZXggN2IyYmFmZmRkMmY1NS4uMWNkZDQwYTZhNDhkYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbkBAIC0xMzEyLDYgKzEzMTIsOCBAQCBpbnQgIF9fbXVzdF9jaGVjayBkZXZpY2VfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldik7XG4gaW50IF9fbXVzdF9jaGVjayBkcml2ZXJfYXR0YWNoKGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpO1xuIHZvaWQgZGV2aWNlX2luaXRpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTtcbiBpbnQgX19tdXN0X2NoZWNrIGRldmljZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7XG4raW50IF9fbXVzdF9jaGVjayBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGVsYXlfbXMpO1xuIFxuIGJvb2wgZGV2aWNlX2lzX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMjowNy4yMzM5OTUwNTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTczODYzMDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERldmljZSBSZXByb2JlIFBhdGNoIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yIHRvIGNvbnNvbGlkYXRlIGRldmljZSByZXByb2JpbmcgbG9naWMuIFRoZSBtYWluIGdvYWwgaGVyZSBpcyB0byByZXBsYWNlIGN1c3RvbSByZXByb2JlIG1lY2hhbmlzbXMgaW4gc2V2ZXJhbCBkcml2ZXJzIChsaWtlIGBidGludGVsX3BjaWVgLCBgaGNpX2g1YCwgYW5kIGBpd2x3aWZpYCkgd2l0aCBhIHNpbmdsZSwgdW5pZmllZCBmdW5jdGlvbiwgYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCBpbiBgZHJpdmVycy9iYXNlL2RkLmNgLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBzaHV0IGRvd24uXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIGludGVybmFscywgdGhlIGRlc2NyaXB0aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgcHJpbWFyaWx5IGFib3V0IGNsZWFudXAgYW5kIHJhY2UgY29uZGl0aW9uIGZpeGluZywgZXNwZWNpYWxseSBhcm91bmQgbW9kdWxlIHVubG9hZGluZyBhbmQgZGV2aWNlIGxpZmVjeWNsZS4gSXQgKnNlZW1zKiBsaWtlIHRoZXJlIGFyZSBubyBuZXcgdXNlci1zcGFjZSBpbnRlcmZhY2VzIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGludHJvZHVjZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgdHlwaWNhbGx5IG1lYW5zIGZld2VyIGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHNuZWFrIGluLiBUaGV5J3JlIGV4cGxpY2l0bHkgY2xhaW1pbmcgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0aHJvdWdoIGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIGV0Yy4gVGhpcyBpcyB2ZXJ5IGVuY291cmFnaW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuVGhlcmVmb3JlLCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoICpzaG91bGRuJ3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB0cmlnZ2VyIGEgS01TQU4gd2FybmluZy4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgbGlrZSB1c2UtYWZ0ZXItZnJlZSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBkdXJpbmcgdGhpcyByZWZhY3RvcmluZy4gU28gZmFyLCBzbyBnb29kLlxuXG5Ob3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhhdCBga3phbGxvY19vYmooKnJwKWAgY2FsbCBpcyBnaXZpbmcgbWUgcGF1c2UuIFdhaXQsIHRoYXQgbG9va3MgdW51c3VhbC4gYGt6YWxsb2Nfb2JqYD8gSXMgdGhhdCBhIG1hY3JvPyBJIHR5cGljYWxseSB1c2UgYGt6YWxsb2Moc2l6ZW9mKCpycCksIEdGUF9LRVJORUwpYC4gTWF5YmUgSSBtaXNyZWFkIGl0LCBvciBpcyBpdCBhIGN1c3RvbSBtYWNybz8gVGhpcyBpc24ndCBzdGFuZGFyZCwgSSdtIHByZXR0eSBzdXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBXYWl0LCBob2xkIG9uLiBga3phbGxvY19vYmpgIGlzIG5vdCBhIHN0YW5kYXJkIExpbnV4IGtlcm5lbCBBUEkuIFRoaXMgaXMgY29uY2VybmluZywgaXQgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZC4gTGV0IG1lIGNoZWNrIGlmIGl0J3MgaW4gdGhlIGtlcm5lbC4gV2FpdCwgYGt6YWxsb2Nfb2JqYCBpcyBub3QgYSBzdGFuZGFyZCBtYWNyby4gQWgsIHdhaXQsIHRoaXMgbWlnaHQgYmUgYSBtYWNybyBpbnRyb2R1Y2VkIHJlY2VudGx5IG9yLCBwb3RlbnRpYWxseSwgYSB0eXBvIGluIHRoZSBwYXRjaCBkZXNjcmlwdGlvbi4gTGV0IG1lIGRvIGEgcXVpY2sgZ3JlcCBzZWFyY2ggdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzNSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAzOjIyOjE2Ljk3MjYzMTk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAzMzQyNTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkyNzMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNC1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTE2LSAgICAgICAgICBpZiAoIWdyb2NrKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMjY6ICAgICAgICAgIGRpbWl0cmkgPSBremFsbG9jX29iaigqZGltaXRyaSk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjctICAgICAgICAgIGlmICghZGltaXRyaSlcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdD00NT1hIG1lc3NhZ2UgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIEFQSSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5KS5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTA6XFx0XFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q6OTE6XFx0XFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC05Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ0LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcXHRcXHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQwLXZ6YWxsb2MoKS4gIFBsZWFzZSByZWZlciB0byB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2Ny1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XFx0cCA9IGt6YWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzk4PWJlY29tZSwgcmVzcGVjdGl2ZWx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXFx0cHRyID0ga21hbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMTpcXHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAyLVxcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcXHRwdHIgPSBremFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXFx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MjA4PXRvIGRldGFpbHMgZXhwbGFpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi5cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNjgtICAgICAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjI2OTogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9NjIzPUFmdGVyIGFsbG9jYXRpbmcgYSBjYXJkIGluc3RhbmNlIHZpYSA6YzpmdW5jOmBzbmRfY2FyZF9uZXcoKWBcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzAtICAuLi4uLlxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo2MzE6ICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9Njk4PWRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBFeGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsIGJlbG93OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NDktXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0Ojc1MDogICAgICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zODIzPWNoaXAgZGF0YSBpbmRpdmlkdWFsbHk6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzUtICAgICAgICAgIC4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzgzNjogICAgICAgICAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0PTc5ND1pbnQgbXlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0OjgwMjpcXHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMy1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTUtXFx0bnN5bXMgPSBzeW10YWItXFx1MDAzZXNoX3NpemUgLyBzaXplb2YoRWxmNjRfU3ltKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo5NjpcXHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk3LVxcdGlmICghY2hhaW5zKSB7XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jPTM5MD1yZWdpc3Rlcl9jcHVzKHZvaWQpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM6Mzk1OlxcdFxcdHN0cnVjdCBjcHUgKnAgPSBremFsbG9jX29iaigqcCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTYtXFx0XFx0aWYgKCFwKVxcbi0tXFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMS1cXHRpZiAoY3R4LVxcdTAwM2VuZWVkX2V4dHJhX3Bhc3MpIHtcXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmM6MTEzMjpcXHRcXHRjdHgtXFx1MDAzZWppdF9kYXRhID0ga3phbGxvY19vYmooKmN0eC1cXHUwMDNlaml0X2RhdGEpO1xcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYy0xMTMzLVxcdFxcdGlmICghY3R4LVxcdTAwM2VqaXRfZGF0YSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNC1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1OlxcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW9fZGV2KTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjI2LVxcdGlmICghZGV2KSB7XFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MzU2PV9fbG9jb21vX3Byb2JlKHN0cnVjdCBkZXZpY2UgKm1lLCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgaW50IGlycSlcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjItXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjM2MzpcXHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0zNjQtXFx0aWYgKCFsY2hpcClcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz03MzM9c2ExMTExX2luaXRfb25lX2NoaWxkKHN0cnVjdCBzYTExMTEgKnNhY2hpcCwgc3RydWN0IHJlc291cmNlICpwYXJlbnQsXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo3NDA6XFx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IHNhMTExMV9kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXFx0aWYgKCFkZXYpIHtcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODctXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4OlxcdGRldnB0ciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzY29vcF9kZXYpO1xcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jLTE4OS1cXHRpZiAoIWRldnB0cilcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYz0xMDg9c3RhdGljIGludCBzZWNvbmRhcnlfYmlnbGl0dGxlX3ByZXBhcmUodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYy0xMTAtXFx0aWYgKCFjcHVfdnRhYmxlW2NwdV0pXFxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcXHRcXHRjcHVfdnRhYmxlW2NwdV0gPSBremFsbG9jX29iaigqY3B1X3Z0YWJsZVtjcHVdKTtcXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYz0xNjk9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4MS1cXHQvKiBBbGxvY2F0ZSB0aGUgVkRTTyB0ZXh0IHBhZ2VsaXN0ICovXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XFx0dmRzb190ZXh0X3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHRleHRfcGFnZXMpO1xcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgzLVxcdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM9MjYxPWludCBfX2luaXQgZGMyMTI4NV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY0LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmM6MjY1OlxcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMtMjY2LVxcdGlmICghcmVzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jPTY5PXN0YXRpYyBpbnQgX19pbml0IGVic2EyODVfbGVkc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM6ODc6XFx0XFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04OC1cXHRcXHRpZiAoIWxlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYz03MjA9c3RhdGljIGludCBfX2luaXQgbmV0d2luZGVyX2xlZHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jLTcyOS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM6NzMwOlxcdFxcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MzEtXFx0XFx0aWYgKCFsZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ3OS1cXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlxcdHBtdV9tbWRjID0ga3phbGxvY19vYmooKnBtdV9tbWRjKTtcXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmMtNDgxLVxcdGlmICghcG11X21tZGMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYz0xMTQ9c3RhdGljIHZvaWQgX19pbml0IGkyY19xdWlyayh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEyOS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM6MTMwOlxcdFxcdG5ld19jb21wYXQgPSBremFsbG9jX29iaigqbmV3X2NvbXBhdCk7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jLTEzMS1cXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM9MTYzPXN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGFfMzc1XzM4MF9jb2hlcmVuY3lfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYzoxODg6XFx0XFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jLTE4OS1cXHRcXHRwLVxcdTAwM2VuYW1lID0ga3N0cmR1cChcXFwiYXJtLGlvLWNvaGVyZW50XFxcIiwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jPTE0OD1zdGF0aWMgaW50IF9faW5pdCBtdmVidV9zb2NfZGV2aWNlKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1Ni1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jOjE1NzpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW12ZWJ1L212ZWJ1LXNvYy1pZC5jLTE1OC1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM9MzgwPXN0YXRpYyB2b2lkIF9faW5pdCBteHNfbWFjaGluZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jOjM5MDpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjEtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XFx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jLTMyMy1cXHRpZiAoIWQpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYz0yOTI9c3RhdGljIHZvaWQgb21hcF9tY2JzcF9yZWdpc3Rlcl9ib2FyZF9jZmcoc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNfY291bnQsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk2LVxcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYzoyOTc6XFx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5OC1cXHRpZiAoIW9tYXBfbWNic3BfZGV2aWNlcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jPTUxPXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX2RtX3RpbWVyX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jOjEyODpcXHRcXHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lci5jLTEyOS1cXHRcXHRpZiAoIXBkYXRhKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYz0yMzA9dm9pZCBvbWFwMnh4eF9jbGt0X3Zwc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yMzktXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM6MjQwOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYy0yNDEtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYz03ODY9dm9pZCBfX2luaXQgb21hcF9zb2NfZGV2aWNlX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jOjc5MTpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYy0xNTgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcXHRod21vZHMgPSBremFsbG9jX29ianMoc3RydWN0IG9tYXBfaHdtb2QgKiwgb2hfY250KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTYwLVxcdGlmICghaHdtb2RzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zMzgxPXN0YXRpYyBpbnQgb21hcF9od21vZF9hbGxvY2F0ZV9tb2R1bGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk0LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjMzOTU6XFx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zMzk2LVxcdGlmICghc3lzYylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM0MjQtXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm9oLVxcdTAwM2VzbGF2ZV9wb3J0cykpIHtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNDI1OlxcdFxcdG9pID0ga3phbGxvY19vYmooKm9pKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI2LVxcdFxcdGlmICghb2kpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjctXFx0aWYgKCFvaCkge1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mjg6XFx0XFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MjktXFx0XFx0aWYgKCFvaClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTM1MzgtXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcXHRcXHRvaC1cXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXFx1MDAzZWNsYXNzKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTQwLVxcdFxcdGlmICghb2gtXFx1MDAzZWNsYXNzKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM9Mzc5PXN0YXRpYyBpbnQgX19pbml0IGFteDNfaWRsZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUsIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYzo0MTM6XFx0aWRsZV9zdGF0ZXMgPSBremFsbG9jX29ianMoKmlkbGVfc3RhdGVzLCBzdGF0ZV9jb3VudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cXHRpZiAoIWlkbGVfc3RhdGVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQxLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XFx0bnZhbHVlX3RhYmxlID0ga3phbGxvY19vYmpzKCpudmFsdWVfdGFibGUsIGNvdW50KTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jLTQzLVxcdGlmICghbnZhbHVlX3RhYmxlKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTEzOT1zdGF0aWMgaW50IF9faW5pdCBwY2llX3NldHVwKHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzEtXFx0ICovXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcXHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy0xNzMtXFx0aWYgKCFyZXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IHBjaV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDkyLVxcdCAqL1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XFx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtNDk0LVxcdGlmICghcmVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYz02ODk9c3RhdGljIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqX19pbml0IGVjYXJkX2FsbG9jX2NhcmQoaW50IHR5cGUsIGludCBzbG90KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTQtXFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYzo2OTU6XFx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5Ni1cXHRpZiAoIWVjKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jPTkzPWludCBfX2luaXQgc2ExMXh4X2Nsa19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjExMDpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTMyOlxcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cXHRpZiAoIWh3KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzIzLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XFx0Y2ZnLVxcdTAwM2Vpbml0X2RhdGEgPSBpZCA9IGt6YWxsb2Nfb2JqKCpjZmctXFx1MDAzZWluaXRfZGF0YSk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyNS1cXHRpZiAoIWNmZy1cXHUwMDNlaW5pdF9kYXRhKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYz0yMjU9c3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI3OC1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jOjI3OTpcXHRkID0ga3phbGxvY19vYmooKmQpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjgwLVxcdGlmICghZCkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM9MTQxPXN0YXRpYyBpbnQgX19pbml0IHJjYXJfZ2VuMl9yZWd1bGF0b3JfcXVpcmsodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYzoxNjc6XFx0XFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2OC1cXHRcXHRpZiAoIXF1aXJrKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz0zOTM9c3RhdGljIGludCB2ZV9zcGNfcG9wdWxhdGVfb3Bwcyh1aW50MzJfdCBjbHVzdGVyKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk3LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjM5ODpcXHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtMzk5LVxcdGlmICghb3BwcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTQ0Mj1pbnQgX19pbml0IHZlX3NwY19pbml0KHZvaWQgX19pb21lbSAqYmFzZWFkZHIsIHUzMiBhMTVfY2x1c2lkLCBpbnQgaXJxKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVxcdGludCByZXQ7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NDQ1OlxcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ2LVxcdGlmICghaW5mbylcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jPTUyMz1zdGF0aWMgc3RydWN0IGNsayAqdmVfc3BjX2Nsa19yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpjcHVfZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjUyODpcXHRzcGMgPSBremFsbG9jX29iaigqc3BjKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXFx0aWYgKCFzcGMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmMtMTQ0LVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcXHRuZXdwcm9wID0ga3phbGxvY19vYmooKm5ld3Byb3ApO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0Ni1cXHRpZiAoIW5ld3Byb3ApXFxuLS1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM9MTA1PXN0YXRpYyB2b2lkIF9faW5pdCB6eW5xX2luaXRfbWFjaGluZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMC1cXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmM6MTExOlxcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTItXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jPTUwMz1zdGF0aWMgX19pbml0IGludCBsMngwX3BtdV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jOjUxMDpcXHRsMngwX3BtdSA9IGt6YWxsb2Nfb2JqKCpsMngwX3BtdSk7XFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXFx0aWYgKCFsMngwX3BtdSkge1xcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0NC1cXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcXHRkYXRhID0ga3phbGxvY19vYmooKmRhdGEpO1xcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMtMzQ2LVxcdGlmICghZGF0YSlcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9NTMzPXN0YXRpYyB2b2lkICpfX2RtYV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUsXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2MC1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjU2MTpcXHRidWYgPSBremFsbG9jX29iaigqYnVmLFxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYyLVxcdFxcdFxcdCAgZ2ZwIFxcdTAwMjYgfihfX0dGUF9ETUEgfCBfX0dGUF9ETUEzMiB8IF9fR0ZQX0hJR0hNRU0pKTtcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM9MTQ4Nz1hcm1faW9tbXVfY3JlYXRlX21hcHBpbmcoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJhc2UsIHU2NCBzaXplKVxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmM6MTUwNzpcXHRtYXBwaW5nID0ga3phbGxvY19vYmooc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nKTtcXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXFx0aWYgKCFtYXBwaW5nKVxcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxcbi0tXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0My1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0OlxcdHJlZ3MgPSBremFsbG9jX29ianMoKnJlZ3MsIG5yX3JlZyk7XFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jLTM0NS1cXHRpZiAoIXJlZ3MpIHtcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODctXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcXHRcXHR0bXBfcmVzID0ga3phbGxvY19vYmooKnRtcF9yZXMpO1xcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXFx0XFx0aWYgKCF0bXBfcmVzKSB7XFxuLS1cXG5hcmNoL2FybS94ZW4vcDJtLmM9MTUwPWJvb2wgX19zZXRfcGh5c190b19tYWNoaW5lX211bHRpKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cXG5hcmNoL2FybS94ZW4vcDJtLmM6MTc5OlxcdHAybV9lbnRyeSA9IGt6YWxsb2Nfb2JqKCpwMm1fZW50cnksIEdGUF9OT1dBSVQpO1xcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXFx0aWYgKCFwMm1fZW50cnkpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmMtODMtXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0OlxcdHZkc29fcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvW2FiaV0udmRzb19wYWdlcyk7XFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTg1LVxcdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz00ODA9c3RhdGljIGludCBzaGFyZV9wZm5faHlwKHU2NCBwZm4pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTItXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6NDkzOlxcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDk0LVxcdGlmICghdGhpcykge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9OTgxPWludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDA4OlxcdHBndCA9IGt6YWxsb2Nfb2JqKCpwZ3QsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cXHRpZiAoIXBndClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4NS1cXHRpZiAoIW1jLVxcdTAwM2VtYXBwaW5nKSB7XFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTE4NjpcXHRcXHRtYy1cXHUwMDNlbWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBwa3ZtX21hcHBpbmcsXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNTEwPWludCBfX2luaXQga3ZtX21tdV9pbml0KHUzMiBoeXBfdmFfYml0cylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjU0NDpcXHRoeXBfcGd0YWJsZSA9IGt6YWxsb2Nfb2JqKCpoeXBfcGd0YWJsZSk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cXHRpZiAoIWh5cF9wZ3RhYmxlKSB7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzMzLVxcdGlmICghdmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYikge1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzMzQ6XFx0XFx0c3RydWN0IHZuY3JfdGxiICp2dCA9IGt6YWxsb2Nfb2JqKCp2Y3B1LVxcdTAwM2VhcmNoLnZuY3JfdGxiLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXFx0XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTc5Mz1pbnQga3ZtX2luaXRfbnZfc3lzcmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xODAyLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE4MDM6XFx0a3ZtLVxcdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyA9IGt6YWxsb2Nfb2JqKCooa3ZtLVxcdTAwM2VhcmNoLnN5c3JlZ19tYXNrcyksXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYz0xMTY9c3RhdGljIHN0cnVjdCBrdm1fcHRkdW1wX2d1ZXN0X3N0YXRlICprdm1fcHRkdW1wX3BhcnNlcl9jcmVhdGUoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYzoxMjI6XFx0c3QgPSBremFsbG9jX29iaihzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXFx0aWYgKCFzdClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxMy1cXHRkaXN0LVxcdTAwM2VhY3RpdmVfc3BpcyA9IChhdG9taWNfdClBVE9NSUNfSU5JVCgwKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjIxNDpcXHRkaXN0LVxcdTAwM2VzcGlzID0ga3phbGxvY19vYmpzKHN0cnVjdCB2Z2ljX2lycSwgbnJfc3BpcywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTIxNS1cXHRpZiAoIWRpc3QtXFx1MDAzZXNwaXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzEtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XFx0dmdpY19jcHUtXFx1MDAzZXByaXZhdGVfaXJxcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXFx0XFx0XFx0XFx0XFx0ICAgICAgbnVtX3ByaXZhdGVfaXJxcyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jPTE0Mj1pbnQga3ZtX3ZnaWNfc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM6MTQ5OlxcdGVudHJpZXMgPSBremFsbG9jX29ianMoKmVudHJpZXMsIG5yLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cXHRpZiAoIWVudHJpZXMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcXHRpcnEgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pcnEsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTg5LVxcdGlmICghaXJxKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTk3MT1zdGF0aWMgaW50IHZnaWNfaXRzX2FsbG9jX2NvbGxlY3Rpb24oc3RydWN0IHZnaWNfaXRzICppdHMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTc2LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo5Nzc6XFx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzgtXFx0aWYgKCFjb2xsZWN0aW9uKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTEwMTU9c3RhdGljIHN0cnVjdCBpdHNfaXRlICp2Z2ljX2l0c19hbGxvY19pdGUoc3RydWN0IGl0c19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMDIxOlxcdGl0ZSA9IGt6YWxsb2Nfb2JqKCppdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXFx0aWYgKCFpdGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4OlxcdGRldmljZSA9IGt6YWxsb2Nfb2JqKCpkZXZpY2UsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTExNDktXFx0aWYgKCFkZXZpY2UpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTg1NT1zdGF0aWMgaW50IHZnaWNfaXRzX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODYyLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxODYzOlxcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg2NC1cXHRpZiAoIWl0cylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM9ODg2PXN0YXRpYyBpbnQgdmdpY192M19hbGxvY19yZWRpc3RfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgdWludDMyX3QgaW5kZXgsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jOjkzMjpcXHRyZHJlZyA9IGt6YWxsb2Nfb2JqKCpyZHJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cXHRpZiAoIXJkcmVnKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjU4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcXHRkaXN0LVxcdTAwM2VpdHNfdm0udnBlcyA9IGt6YWxsb2Nfb2JqcygqZGlzdC1cXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI2MC1cXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIwODA9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDEtXFx0aWYgKCFqaXRfZGF0YSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMDI6XFx0XFx0aml0X2RhdGEgPSBremFsbG9jX29iaigqaml0X2RhdGEpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMDMtXFx0XFx0aWYgKCFqaXRfZGF0YSlcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jPTE3PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXFx0dmRzb19wYWdlbGlzdCA9XFxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM6MjM6XFx0XFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29fcGFnZXMpO1xcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTI0LVxcdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz00NjY9c3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2FjeV9pc2FfaW8oc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3Mi1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzo0NzM6XFx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTQ3NC1cXHRpZiAoIXJhbmdlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYz00NT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Zkc28odm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXFx0dmRzb19pbmZvLmNvZGVfbWFwcGluZy5wYWdlcyA9XFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3Zkc28uYzo1NjpcXHRcXHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19pbmZvLnNpemUgLyBQQUdFX1NJWkUpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTctXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM9NjE0PXN0YXRpYyBpbnQga3ZtX2Vpb2ludGNfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmM6NjI1OlxcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2Vpb2ludGMpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXFx0aWYgKCFzKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9pcGkuYy00MTEtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlxcdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9vbmdhcmNoX2lwaSk7XFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDEzLVxcdGlmICghcylcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDM6MjI6MTkuNTc1OTgyMjQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjY1NDgxNjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBEZXRlY3RlZCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byB0aGF0IGBremFsbG9jX29iaigqcnApYCBtYWNyby4gUmlnaHQsIGl0J3MgYmFzaWNhbGx5IGEgYGt6YWxsb2NgIGZvciB0aGUgb2JqZWN0IGBycGAgcG9pbnRzIHRvIOKAkyB0aGF0J3MgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHplcm9pbmcsIHdoaWNoIGlzIGltcG9ydGFudC4gVGhlIGNvZGUgdGhlbiBzZXRzIHVwIGBycC1cdTAwM2VkZXZgLCBgcnAtXHUwMDNlcGFyZW50YCwgYHJwLVx1MDAzZWRydmAsIGFuZCBpbml0aWFsaXplcyB0aGUgZGVsYXllZCB3b3JrIHF1ZXVlIGl0ZW0sIGFsbCBnb29kIHNvIGZhci4gVGhlIHdvcmsgZnVuY3Rpb24gaXRzZWxmIHRoZW4gdXNlcyBhbmQgZnJlZXMgYHJwYC4gSXQgZG9lc27igJl0IHNlZW0gbGlrZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ2V0dGluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSBvciB1c2VkIGluIGFueSB1bmV4cGVjdGVkIGNvbnRyb2wgZmxvdyBwYXRocy4gSXQncyBhbGwgaW50ZXJuYWwgdG8gdGhlIGRyaXZlciBjb3JlIGFuZCBkZXZpY2UgbGlmZWN5Y2xlcy5cblxuTGV0J3MgZG8gYSBmdWxsIHNjYW4gb2YgYWxsIHRoZSBjaGFuZ2VzLiBMb29rcyBsaWtlIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGEgYnVuY2ggb2Ygb3RoZXIgZmlsZXM6IGBkcml2ZXJzL2Jhc2UvYmFzZS5oYCwgYGRyaXZlcnMvYmFzZS9jb3JlLmNgLCBgZHJpdmVycy9iYXNlL2RkLmNgLCBgZHJpdmVycy9ibHVldG9vdGgvYnRpbnRlbF9wY2llLmNgLCBgZHJpdmVycy9ibHVldG9vdGgvaGNpX2g1LmNgLCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtdHJhbnMuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAuIE9rYXksIHRoZXNlIGFsbCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG5ldyBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIGZ1bmN0aW9uLCB3aGljaCBsb29rcyBsaWtlIGl0J3MgYWltZWQgYXQgc3RhbmRhcmRpemluZyBkZWZlcnJlZCBkZXZpY2UgcmVwcm9iaW5nIGFjcm9zcyBkcml2ZXJzLiBBbHNvIHNlZSB0aGUgYWRkaXRpb24gb2YgYSBgc2h1dGRvd25fZG9uZWAgZmxhZy4gVGhlIHBhdGNoIHJlcGxhY2VzIGN1c3RvbSByZXByb2JlIGl0ZW1zIHdpdGggdGhpcyBtb3JlIGdlbmVyaWMgY2FsbC4gVGhlcmUncyBub3RoaW5nIG5ldyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgd2hlcmUgeW91IGNvdWxkIHJlYWQgdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHJlYWxseSBqdXN0IGFib3V0IGhvdyB0aGUgZHJpdmVyIGNvcmUgbWFuYWdlcyBkZXZpY2VzLlxuXG5TbywgdGhlIGNoYW5nZXMgc2VlbSBzdHJhaWdodGZvcndhcmQ6IHdlIGFyZSBpbnRyb2R1Y2luZyBhIG5ldyB1bmlmaWVkIG1ldGhvZCB0byByZXNjaGVkdWxlIGRldmljZXMuICBJdCBsb29rcyB0byBiZSBhIGNsZWFuIHJlZmFjdG9yIHRoYXQncyByZXBsYWNpbmcgY3VzdG9tIHdvcmtxdWV1ZSBpdGVtcyB3aXRoIGBkZXZpY2Vfc2NoZWR1bGVfcmVwcm9iZWAuIEl0IGFkZHMgdGhlIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bi4gVGhlIG1lbW9yeSBmb3IgdGhlIHByb2JlIGl0ZW0gaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgc28gaXQncyB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGNvbmZpbmVkIHRvIHRoZSBkcml2ZXIgY29yZSwgZGV2aWNlIGJpbmRpbmcvdW5iaW5kaW5nLCB3b3JrcXVldWUgc2NoZWR1bGluZyBhbmQgbGlmZWN5Y2xlLiBUaGUgKm9ubHkqIHJlYWwgcmlza3MgaGVyZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIC0gdXNlLWFmdGVyLWZyZWUsIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLiBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBmaW5kIHRob3NlIGtpbmRzIG9mIGJ1Z3MuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQuIEkgd2lsbCBzZXQgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzU0LCJPdXRwdXRUb2tlbnMiOjI0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMzoyMjozMS44NDE0ODc1MjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGRldmljZV9zY2hlZHVsZV9yZXByb2JlYCB0byBzdGFuZGFyZGlzZSBkZWZlcnJlZCBkZXZpY2UgcmVwcm9iaW5nIGFjcm9zcyBkcml2ZXJzLCByZXBsYWNpbmcgY3VzdG9tIHdvcmsgaXRlbXMgaW4gYGJ0aW50ZWxfcGNpZWAsIGBoY2lfaDVgLCBhbmQgYGl3bHdpZmlgLiBJdCBhbHNvIGFkZHMgYSBgc2h1dGRvd25fZG9uZWAgZmxhZyB0byBwcmV2ZW50IHJlcHJvYmluZyBkZXZpY2VzIGR1cmluZyBzeXN0ZW0gc2h1dGRvd24uIEFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgKGUuZy4sIGBzdHJ1Y3QgZGV2aWNlX3JlcHJvYmVgIHZpYSBga3phbGxvY19vYmpgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZC4gVGhlIGNoYW5nZXMgYXJlIHN0cmljdGx5IGNvbmZpbmVkIHRvIGludGVybmFsIGtlcm5lbCBkZXZpY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIGRyaXZlciBiaW5kaW5nL3VuYmluZGluZywgYW5kIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbmV0d29yayBwYWNrZXQgcGFyc2luZywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gb2JqZWN0IGxpZmV0aW1lcyAodXNlLWFmdGVyLWZyZWUpLCBsb2NraW5nIChkZWFkbG9ja3MpLCBvciBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbGwgb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgZGV2aWNlX3NjaGVkdWxlX3JlcHJvYmVgIHRvIHN0YW5kYXJkaXNlIGRlZmVycmVkIGRldmljZSByZXByb2JpbmcgYWNyb3NzIGRyaXZlcnMsIHJlcGxhY2luZyBjdXN0b20gd29yayBpdGVtcyBpbiBgYnRpbnRlbF9wY2llYCwgYGhjaV9oNWAsIGFuZCBgaXdsd2lmaWAuIEl0IGFsc28gYWRkcyBhIGBzaHV0ZG93bl9kb25lYCBmbGFnIHRvIHByZXZlbnQgcmVwcm9iaW5nIGRldmljZXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bi4gQWxsIG1lbW9yeSBhbGxvY2F0aW9ucyAoZS5nLiwgYHN0cnVjdCBkZXZpY2VfcmVwcm9iZWAgdmlhIGBremFsbG9jX29iamApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgY29uZmluZWQgdG8gaW50ZXJuYWwga2VybmVsIGRldmljZSBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZHJpdmVyIGJpbmRpbmcvdW5iaW5kaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBuZXR3b3JrIHBhY2tldCBwYXJzaW5nLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBvYmplY3QgbGlmZXRpbWVzICh1c2UtYWZ0ZXItZnJlZSksIGxvY2tpbmcgKGRlYWRsb2NrcyksIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFsbCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[1] Phase: Succeeded StartedAt: 2026-08-21 03:22:42 +0000 UTC FinishedAt: 2026-08-21 03:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 03:22:42 +0000 UTC FinishedAt: 2026-08-21 03:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2] Phase: Succeeded StartedAt: 2026-08-21 03:22:42 +0000 UTC FinishedAt: 2026-08-21 07:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 03:22:42 +0000 UTC FinishedAt: 2026-08-21 07:06:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 03:22:42 +0000 UTC FinishedAt: 2026-08-21 03:22:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 03:22:42 +0000 UTC FinishedAt: 2026-08-21 03:22:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-convert-artifact-3893421356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 03:22:52 +0000 UTC FinishedAt: 2026-08-21 03:39:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 03:22:52 +0000 UTC FinishedAt: 2026-08-21 03:39:29 +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:*1c4da02b-b29d-43fa-b61b-3575b3684e0f,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-workflowd4w7n/series-workflowd4w7n-convert-artifact-3893421356/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": "ad9f54b3-b28a-425d-911a-b2c577788454", "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-workflowd4w7n/series-workflowd4w7n-build-action-2983455578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 03:22:52 +0000 UTC FinishedAt: 2026-08-21 03:39:19 +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:*1c4da02b-b29d-43fa-b61b-3575b3684e0f,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-workflowd4w7n/series-workflowd4w7n-convert-artifact-3893421356/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": "ad9f54b3-b28a-425d-911a-b2c577788454", "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-workflowd4w7n/series-workflowd4w7n-build-action-2983455578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 03:39:29 +0000 UTC FinishedAt: 2026-08-21 03:39:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 03:39:29 +0000 UTC FinishedAt: 2026-08-21 03:39:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 03:39:29 +0000 UTC FinishedAt: 2026-08-21 03:39:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 03:39:29 +0000 UTC FinishedAt: 2026-08-21 03:39:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-convert-artifact-2043098091/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 03:39:39 +0000 UTC FinishedAt: 2026-08-21 03:41:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 03:39:39 +0000 UTC FinishedAt: 2026-08-21 03:41:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad9f54b3-b28a-425d-911a-b2c577788454,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-workflowd4w7n/series-workflowd4w7n-build-action-2983455578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 03:41:40 +0000 UTC FinishedAt: 2026-08-21 03:41:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 03:41:40 +0000 UTC FinishedAt: 2026-08-21 03:41:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 03:41:40 +0000 UTC FinishedAt: 2026-08-21 03:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 03:41:40 +0000 UTC FinishedAt: 2026-08-21 03:57:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1c4da02b-b29d-43fa-b61b-3575b3684e0f,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-workflowd4w7n/series-workflowd4w7n-convert-artifact-2043098091/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": "235e9de3-d837-42b8-9eac-e15705fcbbfa", "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-workflowd4w7n/series-workflowd4w7n-build-action-3623645455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 03:41:40 +0000 UTC FinishedAt: 2026-08-21 03:57:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1c4da02b-b29d-43fa-b61b-3575b3684e0f,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-workflowd4w7n/series-workflowd4w7n-convert-artifact-2043098091/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": "235e9de3-d837-42b8-9eac-e15705fcbbfa", "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-workflowd4w7n/series-workflowd4w7n-build-action-3623645455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 03:57:47 +0000 UTC FinishedAt: 2026-08-21 03:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 03:57:47 +0000 UTC FinishedAt: 2026-08-21 03:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 03:57:47 +0000 UTC FinishedAt: 2026-08-21 03:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 03:57:47 +0000 UTC FinishedAt: 2026-08-21 03:59:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*235e9de3-d837-42b8-9eac-e15705fcbbfa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-build-action-3623645455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 03:59:49 +0000 UTC FinishedAt: 2026-08-21 07:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 03:59:49 +0000 UTC FinishedAt: 2026-08-21 07:06:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ad9f54b3-b28a-425d-911a-b2c577788454,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*235e9de3-d837-42b8-9eac-e15705fcbbfa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-build-action-2983455578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-build-action-3623645455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 03:59:49 +0000 UTC FinishedAt: 2026-08-21 04:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 03:59:49 +0000 UTC FinishedAt: 2026-08-21 03:59:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-convert-artifact-3323513860/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 03:59:49 +0000 UTC FinishedAt: 2026-08-21 03:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 03:59:49 +0000 UTC FinishedAt: 2026-08-21 03:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 03:59:49 +0000 UTC FinishedAt: 2026-08-21 03:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 04:00:00 +0000 UTC FinishedAt: 2026-08-21 07:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4w7n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_schedule_reprobe","device_reprobe_work_fn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"486f8908aa587ab2a213bbef39311743e4f8f57a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT_HCIUART","BT_HCIUART_3WIRE","SERIAL_DEV_BUS"],"series_id":"784f8a66-851c-43ec-a593-62b088385af3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 04:00:00 +0000 UTC FinishedAt: 2026-08-21 07:05:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad9f54b3-b28a-425d-911a-b2c577788454,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*235e9de3-d837-42b8-9eac-e15705fcbbfa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-build-action-2983455578/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-build-action-3623645455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4w7n/series-workflowd4w7n-convert-artifact-3323513860/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}