Name: series-workflowhwggv Phase: Succeeded StartedAt: 2026-07-23 20:09:30 +0000 UTC FinishedAt: 2026-07-24 01:22:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[0] Phase: Succeeded StartedAt: 2026-07-23 20:09:30 +0000 UTC FinishedAt: 2026-07-23 20:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 20:09:30 +0000 UTC FinishedAt: 2026-07-23 20:31:09 +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": "ba712ecfd942b68b21a4b0a5daaf72f6616cc66d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "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": "ba712ecfd942b68b21a4b0a5daaf72f6616cc66d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "d64daf4c-affc-499b-9bc3-06c937303840" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_forward_skb", "hsr_dev_xmit", "hsr_handle_frame", "dev_disable_gro", "netif_disable_gro" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDIwOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIHBhY2tldCBmb3J3YXJkaW5nIHRvIGhhbmRsZSBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0sIGFuZCBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAwYzhkNjg1OTMyMDM2Y2MwMzdkYTg0ODk3YjEzNThlMWU4MmY3ZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMDozMDoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmViYTJjMjZhNDliYThmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlMS4uYTZjZjJhZGM4NjI1NjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xODQwLDYgJiM0MzsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XG4mIzQzO1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiAoTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVykpKVxuJiM0MztcdFx0bmV0ZGV2X1dBUk4oZGV2LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBHUk8hXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikge1xuJiM0MztcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XG4mIzQzO1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICpcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcbiAgKlx0QGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5pbmRleCA0Mzc5NDdkZDA4ZWQ1My4uMDJmYjIxNjI5NTEyODQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuQEAgLTI2OSw2ICYjNDM7MjY5LDIyIEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuJiM0MzsgKiBAZGV2OiBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlXG4mIzQzOyAqIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWQgcGFja2V0cyBtYXkgYmVcbiYjNDM7ICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4mIzQzO1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4mIzQzO1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4yNDhjYmIxNDJlMjFlMSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICYjNDM7MjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2ItXHUwMDNlZGV2ID0gbWFzdGVyLVx1MDAzZWRldjtcbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbkBAIC0zMzUsNiAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgJiM0MzszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuQEAgLTM5MCw2ICYjNDM7Mzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICYjNDM7MzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gfVxuIFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cbkBAIC02NTksNyAmIzQzOzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbiYjNDM7XHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtoc3JfbWFpbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHNyX2ZyYW1lcmVnLmhcJiMzNDtcbiBcbkBAIC02MjEsOSAmIzQzOzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbiBcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuIFx0XHQvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqL1xuLVx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGZyYW1lLVx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVx1MDAzZXNlcXVlbmNlX25yO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuJiM0MztzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiB7XG4gXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XG4gXG5AQCAtNzYwLDMgJiM0Mzs3NjIsNTAgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG4mIzQzO1xuJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuJiM0MzsgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbiYjNDM7XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxuJiM0MztcdCAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZVxuJiM0MztcdCAqIGludGVybGluay4gQSBzdXBlci1wYWNrZXQgZnJvbSBhIExBTiBzbGF2ZSBtYXkgY2FycnkgcGVyLWZyYW1lXG4mIzQzO1x0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxuJiM0MztcdCAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzXG4mIzQzO1x0ICogcGVyLWZyYW1lIHdpcmUgc2VtYW50aWNzLiBEcm9wIGJvdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfTUFTVEVSIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgIT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XG4mIzQzO1x0ICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9QUlApKVxuJiM0MztcdFx0Z290byBkcm9wX2dzbztcbiYjNDM7XG4mIzQzO1x0LyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWVcbiYjNDM7XHQgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbVxuJiM0MztcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xuJiM0MztcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuJiM0MztcdFx0Z290byBkcm9wX2dzbztcbiYjNDM7XG4mIzQzO1x0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHR3aGlsZSAoc2Vncykge1xuJiM0MztcdFx0bmV4dCA9IHNlZ3MtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xuJiM0MztcdFx0c2VncyA9IG5leHQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2Ryb3BfZ3NvOlxuJiM0MztcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdGtmcmVlX3NrYihza2IpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX3NsYXZlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbkBAIC03MywxNiAmIzQzOzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHR9XG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFxuLVx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcbi1cdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxuLVx0ICovXG4tXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0fVxuJiM0MztcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuIFxuIGZpbmlzaF9jb25zdW1lOlxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG5AQCAtMTcwLDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHJlcylcbiBcdFx0Z290byBmYWlsX3J4X2hhbmRsZXI7XG4gXHRkZXZfZGlzYWJsZV9scm8oZGV2KTtcbiYjNDM7XHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMGQxMDU0NzZlN2M1MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuJiM0MztcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YjBhOWNlZWExY2U1OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5AQCAtMCwwICYjNDM7MSwyNDkgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVGVzdCBIU1IgaGFuZGxpbmcgb2YgR1JPL0dTTyBzdXBlci1wYWNrZXRzOlxuJiM0MzsjXG4mIzQzOyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuJiM0MzsjICAgICAoZGV2X2Rpc2FibGVfZ3JvKCkpLlxuJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy5cbiYjNDM7IyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbiYjNDM7IyAgICAgc3VwZXItcGFja2V0cykgaXMgdW5mb2xkZWQgYXQgdGhlIEhTUiBmb3J3YXJkIGVudHJ5IGFuZCBkZWxpdmVyZWRcbiYjNDM7IyAgICAgcGVyLWZyYW1lOiB0aGUgdHJhbnNmZXIgY29tcGxldGVzIHdpdGggemVybyByZXRyYW5zbWl0cy5cbiYjNDM7I1xuJiM0MzsjIFRvcG9sb2d5ICgxMDAuNjQuMC4wLzI0KTpcbiYjNDM7I1xuJiM0MzsjICAgbnNfc2FuICAgICAgICAgICAgICAgICAgICBuc19kdXQgICAgICAgICAgICAgICAgICAgICAgbnNfcGVlclxuJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgIGludGVybGluayAgJiM0MzstLS0tLS0tLS0tLS0tLS0mIzQzOyAgTEFOIEEvQiAgJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4mIzQzOyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4mIzQzOyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiM0MzstLS0tLS0tLS0tLS0tLS0mIzQzOyAgICAgICAgICAgJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4mIzQzOyNcbiYjNDM7IyBTQU4gdHJhZmZpYyByZWFjaGVzIG5zX3BlZXIgb25seSB0aHJvdWdoIGhzcjAmIzM5O3MgZm9yd2FyZCBwYXRoXG4mIzQzOyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuJiM0MzsjIGZvcndhcmRlZCBieSB0aGUgRFVULlxuJiM0MztcbiYjNDM7c291cmNlIC4vaHNyX2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7bnNfZHV0PVwmIzM0O2hzci1ncm8tZHV0XCYjMzQ7XG4mIzQzO25zX3Nhbj1cJiMzNDtoc3ItZ3JvLXNhblwmIzM0O1xuJiM0Mztuc19wZWVyPVwmIzM0O2hzci1ncm8tcGVlclwmIzM0O1xuJiM0MztzYW5faXA9XCYjMzQ7MTAwLjY0LjAuMVwmIzM0O1xuJiM0MztwZWVyX2lwPVwmIzM0OzEwMC42NC4wLjNcJiMzNDtcbiYjNDM7aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztzZXJ2ZXJfd3JhcHBlcj1cJiMzNDtcJiMzNDtcbiYjNDM7aXBlcmZfcGlkZmlsZT1cJiMzNDsvdG1wL2hzcl9ncm9faXBlcmYucGlkXCYjMzQ7XG4mIzQzO1xuJiM0MztjbGVhbnVwKClcbiYjNDM7e1xuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFtbIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV07IHRoZW5cbiYjNDM7XHRcdGtpbGwgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRmaVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhXG4mIzQzO1x0XHQjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwXG4mIzQzO1x0XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFx0a2lsbCAtMCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXG4mIzQzO1x0XHRcdHNsZWVwIDAuMVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdFx0a2lsbCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0XHR3YWl0IFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBraWxsIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxuJiM0MztcdCMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucy4gbmV0bnMgIT0gcGlkbnM6IGEgYmxpbmQgcGtpbGxcbiYjNDM7XHQjIHdvdWxkIHNjYW4gdGhlIGhvc3QgUElEIHNwYWNlIGFuZCBoaXQgdW5yZWxhdGVkIHRlc3RzLlxuJiM0MztcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4mIzQzO1x0XHRpZiBbIFwmIzM0OyQoY2F0IC9wcm9jLyRfcC9jb21tIDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7ID0gXCYjMzQ7aXBlcmYzXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFx0a2lsbCBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0ZmlcbiYjNDM7XHRkb25lXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztcdHJtIC1mIFwmIzM0OyR7aXBlcmZfcGlkZmlsZX1cJiMzNDtcbiYjNDM7XHRpcCBuZXRucyBkZWwgXCYjMzQ7JG5zX2R1dFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0aXAgbmV0bnMgZGVsIFwmIzM0OyRuc19zYW5cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskbnNfcGVlclwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO31cbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MztjaGVja190b29sKClcbiYjNDM7e1xuJiM0MztcdGlmICEgY29tbWFuZCAtdiBcJiMzNDskMVwmIzM0OyBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O1NLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxXCYjMzQ7XG4mIzQzO1x0XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mztuc3goKVxuJiM0Mzt7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskMVwmIzM0OyBiYXNoIC1jIFwmIzM0OyQyXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX3RvcG8oKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnNcbiYjNDM7XG4mIzQzO1x0Y2xlYW51cFxuJiM0MztcdGZvciBucyBpbiBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7JG5zX3BlZXJcJiMzNDs7IGRvXG4mIzQzO1x0XHRpcCBuZXRucyBhZGQgXCYjMzQ7JG5zXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX2EgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyBcJiMzNDskbnNfcGVlclwmIzM0O1xuJiM0MztcdGlwIGxpbmsgYWRkIGRfYiBuZXRucyBcJiMzNDskbnNfZHV0XCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zIFwmIzM0OyRuc19wZWVyXCYjMzQ7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9pbCBuZXRucyBcJiMzNDskbnNfZHV0XCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgXCYjMzQ7JG5zX3NhblwmIzM0O1xuJiM0MztcbiYjNDM7XHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXG4mIzQzO1x0Zm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvXG4mIzQzO1x0XHRuc3ggXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7XHRmb3IgaWZhY2UgaW4gcF9hIHBfYjsgZG9cbiYjNDM7XHRcdG5zeCBcJiMzNDskbnNfcGVlclwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgZF9pbCB1cFwmIzM0O1xuJiM0MztcdG5zeCBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMFwmIzM0O1xuJiM0MztcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDtpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIFxcXG4mIzQzO1x0XHRzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXFxcbiYjNDM7XHRcdGlwIGxpbmsgc2V0IGhzcjAgdXBcJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3BlZXJcJiMzNDsgXCYjMzQ7aXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcXFxuJiM0MztcdFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXG4mIzQzO1x0XHRpcCBsaW5rIHNldCBoc3IxIHVwOyBpcCBhZGRyIGFkZCAkcGVlcl9pcC8yNCBkZXYgaHNyMVwmIzM0O1xuJiM0MztcbiYjNDM7XHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXImIzM5O3Mgc3VwZXJ2aXNpb24gZnJhbWVzLlxuJiM0MztcdHNsZWVwIDJcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hlY2tfZmVhdHVyZSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIGlmYWNlPVwmIzM0OyQyXCYjMzQ7XG4mIzQzO1x0bG9jYWwgZmVhdHVyZT1cJiMzNDskM1wmIzM0O1xuJiM0MztcdGxvY2FsIHdhbnQ9XCYjMzQ7JDRcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgbnN4IFwmIzM0OyRuc1wmIzM0OyBcJiMzNDtldGh0b29sIC1rICRpZmFjZVwmIzM0OyB8IGdyZXAgLXEgXCYjMzQ7XiRmZWF0dXJlOiAkd2FudFwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzICR3YW50IFsgT0sgXVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcbiYjNDM7e1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7R1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwmIzM0O1xuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0hXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7SFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy9UU08uXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4mIzQzO3tcbiYjNDM7XHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHJlY29yZCBpdHMgZXhhY3QgUElEIChuZXRucyBzaGFyZXMgdGhlIFBJRFxuJiM0MztcdCMgbmFtZXNwYWNlKS4gVGhlIHdyYXBwaW5nIHNoZWxsIHdhaXRzIG9uIHRoZSBzZXJ2ZXIgc28gdGhlIHNjcmlwdCBjYW5cbiYjNDM7XHQjIHJlYWxseSB3YWl0KDEpIGZvciB0aGUgd2hvbGUgdHJlZSwgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSBhbGlrZS5cbiYjNDM7XHRybSAtZiBcJiMzNDske2lwZXJmX3BpZGZpbGV9XCYjMzQ7XG4mIzQzO1x0KCBuc3ggXCYjMzQ7JG5zX3BlZXJcJiMzNDsgXCYjMzQ7aXBlcmYzIC1zIC0xIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IGVjaG8gXFwkISBcdTAwM2UgJHtpcGVyZl9waWRmaWxlfTsgd2FpdFwmIzM0OyApIFx1MDAyNlxuJiM0MztcdHNlcnZlcl93cmFwcGVyPSQhXG4mIzQzO1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4mIzQzO1x0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcbiYjNDM7XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFsgLXMgXCYjMzQ7JHtpcGVyZl9waWRmaWxlfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBicmVha1xuJiM0MztcdFx0c2xlZXAgMC4xXG4mIzQzO1x0ZG9uZVxuJiM0MztcdGlmIFsgISAtcyBcJiMzNDske2lwZXJmX3BpZGZpbGV9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQgKG5vIHBpZGZpbGUpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGlwZXJmX3BpZD0kKGNhdCBcJiMzNDske2lwZXJmX3BpZGZpbGV9XCYjMzQ7KVxuJiM0MztcdGlmICEgW1sgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCAhIGtpbGwgLTAgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2lwZXJmX3BpZH0mIzM5OyBpbnZhbGlkIG9yIG5vdCBhbGl2ZVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZG9fdHNvX3N0cmVhbV90ZXN0KClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG91dCBzZW5kZXJfcmV0clxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvblxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7Q291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogUnVubmluZyAxMHMgVENQIHN0cmVhbSBTQU4gLVx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuXCYjMzQ7XG4mIzQzO1x0c3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuJiM0MztcdFx0IyByYXRlLWNhcHBlZDogdGhlIGRpc2NyaW1pbmF0b3IgaXMgcGVyLWZyYW1lIHVuZm9sZCAoY29tcGxldGlvbiB3aXRoXG4mIzQzO1x0IyAwIHJldHJhbnNtaXRzKSwgbm90IG1heCB0aHJvdWdocHV0OyB1bmNhcHBlZCBydW5zIGZsYXAgYXQgVk0vQ0lcbiYjNDM7XHQjIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGEgZnVuY3Rpb25hbCBwcm9ibGVtLlxuJiM0MztcdG91dD0kKG5zeCBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgLWIgMkcgLXQgMTBcJiMzNDsgMlx1MDAzZVx1MDAyNjEpXG4mIzQzO1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOlwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0IyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFsbHkgd2FpdCBmb3JcbiYjNDM7XHQjIHRoZSB3cmFwcGVyIHRvIHJlYXAgaXQsIGFuZCBjaGVjayBpdHMgZXhpdCBzdGF0dXNcbiYjNDM7XHR3YWl0IFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7XG4mIzQzO1x0c2VydmVyX3JjPSQ/XG4mIzQzO1x0c2VydmVyX3dyYXBwZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztcdGlmIFsgXCYjMzQ7JHNlcnZlcl9yY1wmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JHNlcnZlcl9yY1wmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdHNlbmRlcl9yZXRyPSQoZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgYXdrICYjMzk7L3NlbmRlci8ge3ByaW50ICQoTkYtMSl9JiMzOTspXG4mIzQzO1x0aWYgWyAteiBcJiMzNDskc2VuZGVyX3JldHJcJiMzNDsgXSB8fCBbIFwmIzM0OyRzZW5kZXJfcmV0clwmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IHJldHJhbnNtaXRzIGR1cmluZyBHU08gdW5mb2xkOiAke3NlbmRlcl9yZXRyOi11bmtub3dufVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGNvbXBsZXRlZCB3aXRoIDAgcmV0cmFuc21pdHMgWyBPSyBdXCYjMzQ7XG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtRSBcJiMzNDtzZW5kZXJ8cmVjZWl2ZXJcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlc1xuJiM0MztjaGVja190b29sIGV0aHRvb2xcbiYjNDM7Y2hlY2tfdG9vbCBpcGVyZjNcbiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0XG4mIzQzO1xuJiM0MzsjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXG4mIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0dXBfdG9wb1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBEVVQpLlwmIzM0O1xuJiM0Mztkb19waW5nIFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7JHBlZXJfaXBcJiMzNDtcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtJbml0aWFsIHZhbGlkYXRpb24gZmFpbGVkLlwmIzM0O1xuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXG4mIzQzO2RvX3Rzb19zdHJlYW1fdGVzdFxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O0dTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlwmIzM0O1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBBbGwgZ29vZC5cJiMzNDtcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIHBhY2tldCBmb3J3YXJkaW5nIHRvIGhhbmRsZSBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0sIGFuZCBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDBjOGQ2ODU5MzIwMzZjYzAzN2RhODQ4OTdiMTM1OGUxZTgyZjdlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDIwOjMwOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmViYTJjMjZhNDliYThmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7CiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7CiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlMS4uYTZjZjJhZGM4NjI1NjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xODQwLDYgJiM0MzsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAl9CiB9CiAKJiM0Mzt2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwomIzQzOwomIzQzOwlkZXYtJmd0O3dhbnRlZF9mZWF0dXJlcyAmYW1wOz0gfihORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKTsKJiM0MzsJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoZGV2LSZndDtmZWF0dXJlcyAmYW1wOyAoTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVykpKQomIzQzOwkJbmV0ZGV2X1dBUk4oZGV2LCAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIEdSTyFcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikgewomIzQzOwkJbmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7CiYjNDM7CQluZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICoJZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQogICoJQGRldjogZGV2aWNlCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmMKaW5kZXggNDM3OTQ3ZGQwOGVkNTMuLjAyZmIyMTYyOTUxMjg0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2X2FwaS5jCkBAIC0yNjksNiAmIzQzOzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pOwogCiYjNDM7LyoqCiYjNDM7ICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlCiYjNDM7ICogQGRldjogZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBEaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0IGRldmljZS4gIE11c3QgYmUKJiM0MzsgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlCiYjNDM7ICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJbmV0aWZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pOwomIzQzOwogLyoqCiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2UKICAqIEBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwppbmRleCA1NTU1YjcxYWIxOWI1OS4uMjQ4Y2JiMTQyZTIxZTEgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2RldmljZS5jCkBAIC0yMzIsOSAmIzQzOzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJc2tiLSZndDtkZXYgPSBtYXN0ZXItJmd0O2RldjsKIAkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAkJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKLQkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAkJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCX0gZWxzZSB7CiAJCWRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0zMzUsNiAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzZXF1ZW5jZV9ucik7CiAJCWhzci0mZ3Q7c2VxdWVuY2VfbnImIzQzOyYjNDM7OwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX3R5cGUgPSB0eXBlOwogCS8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovCkBAIC0zNTYsMTQgJiM0MzszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LAogCQlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIGhzci0mZ3Q7bWFjYWRkcmVzc19yZWRib3gpOwogCX0KIAotCWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKJiM0MzsJaWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpCiAJCXJldHVybjsKLQl9CiAKIAloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKQEAgLTM5MCw2ICYjNDM7Mzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCiAJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAloc3Jfc3RhZy0mZ3Q7c2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItJmd0O3N1cF9zZXF1ZW5jZV9ucik7CiAJaHNyLSZndDtzdXBfc2VxdWVuY2VfbnImIzQzOyYjNDM7OwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7CiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKIApAQCAtMzk3LDEzICYjNDM7MzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCWhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpOwogCWV0aGVyX2FkZHJfY29weShoc3Jfc3AtJmd0O21hY2FkZHJlc3NfQSwgbWFzdGVyLSZndDtkZXYtJmd0O2Rldl9hZGRyKTsKIAotCWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKJiM0MzsJaWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpCiAJCXJldHVybjsKLQl9CiAKIAloc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpOwotCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIH0KIAogLyogQW5ub3VuY2UgKHN1cGVydmlzaW9uIGZyYW1lKSB0aW1lciBmdW5jdGlvbgpAQCAtNjU5LDcgJiM0Mzs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlkZXYtJmd0O25lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTsKIAogCWRldi0mZ3Q7aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8Ci0JCQkgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHwKJiM0MzsJCQkgICBORVRJRl9GX0hXX0NTVU0gfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSOwogCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZ3NvLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2hzcl9tYWluLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoc3JfZnJhbWVyZWcuaCYjMzQ7CiAKQEAgLTYyMSw5ICYjNDM7NjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8CiAJICAgIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewogCQkvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqLwotCQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWZyYW1lLSZndDtzZXF1ZW5jZV9uciA9IGhzci0mZ3Q7c2VxdWVuY2VfbnI7CiAJCWhzci0mZ3Q7c2VxdWVuY2VfbnImIzQzOyYjNDM7OwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCX0KIH0KIApAQCAtNzMxLDcgJiM0Mzs3MzMsNyBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqLwotdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQomIzQzO3N0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBoc3JfZnJhbWVfaW5mbyBmcmFtZTsKIApAQCAtNzYwLDMgJiM0Mzs3NjIsNTAgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogCXBvcnQtJmd0O2Rldi0mZ3Q7c3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CiYjNDM7CiYjNDM7LyogR1NPIGZhbi1vdXQgZnVubmVsOiB1bmZvbGQgc3VwZXItcGFja2V0cyBiZWZvcmUgcGVyLWZyYW1lIHByb2Nlc3Npbmcgc28KJiM0MzsgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuCiYjNDM7ICovCiYjNDM7dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0OwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVW5mb2xkIG9ubHkgcGxhaW4tRXRoZXJuZXQgR1NPIHN1cGVyLXBhY2tldHM6IGxvY2FsbHkgZ2VuZXJhdGVkCiYjNDM7CSAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZQomIzQzOwkgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZQomIzQzOwkgKiBIU1IgdGFncyAvIFBSUCBSQ1QgdHJhaWxlcnMgdGhhdCBzb2Z0d2FyZSBzZWdtZW50YXRpb24gY2Fubm90CiYjNDM7CSAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzCiYjNDM7CSAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBvcnQtJmd0O3R5cGUgIT0gSFNSX1BUX01BU1RFUiAmYW1wOyZhbXA7IHBvcnQtJmd0O3R5cGUgIT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCWdvdG8gZHJvcF9nc287CiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0hTUikgfHwKJiM0MzsJICAgIHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSkKJiM0MzsJCWdvdG8gZHJvcF9nc287CiYjNDM7CiYjNDM7CS8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlCiYjNDM7CSAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tCiYjNDM7CSAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuCiYjNDM7CSAqLwomIzQzOwlzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIpOwomIzQzOwlpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSkKJiM0MzsJCWdvdG8gZHJvcF9nc287CiYjNDM7CiYjNDM7CWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CXdoaWxlIChzZWdzKSB7CiYjNDM7CQluZXh0ID0gc2Vncy0mZ3Q7bmV4dDsKJiM0MzsJCXNlZ3MtJmd0O25leHQgPSBOVUxMOwomIzQzOwkJaHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTsKJiM0MzsJCXNlZ3MgPSBuZXh0OwomIzQzOwl9CiYjNDM7CXJldHVybjsKJiM0MzsKJiM0Mztkcm9wX2dzbzoKJiM0MzsJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJa2ZyZWVfc2tiKHNrYik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKaW5kZXggZDlhZjllNjVmNzJmMDcuLmM3ZmQwMjFmMDNiMWY0IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAl9CiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAotCS8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhCi0JICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuCi0JICovCi0JaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewotCQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCX0gZWxzZSB7Ci0JCWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwotCX0KJiM0MzsJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7CiAKIGZpbmlzaF9jb25zdW1lOgogCXJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEOwpAQCAtMTcwLDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChyZXMpCiAJCWdvdG8gZmFpbF9yeF9oYW5kbGVyOwogCWRldl9kaXNhYmxlX2xybyhkZXYpOwomIzQzOwlkZXZfZGlzYWJsZV9ncm8oZGV2KTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQppbmRleCAzMWZiOTMyNmNmNTMzZC4uMGQxMDU0NzZlN2M1MGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQpAQCAtMyw2ICYjNDM7Myw3IEBACiB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi4KIAogVEVTVF9QUk9HUyA6PSBcCiYjNDM7CWhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXAogCWhzcl9waW5nLnNoIFwKIAloc3JfcmVkYm94LnNoIFwKIAlsaW5rX2ZhdWx0cy5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMGE5Y2VlYTFjZTU5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCkBAIC0wLDAgJiM0MzsxLDI0OSBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czoKJiM0MzsjCiYjNDM7IyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0CiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS4KJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy4KJiM0MzsjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTTwomIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeSBhbmQgZGVsaXZlcmVkCiYjNDM7IyAgICAgcGVyLWZyYW1lOiB0aGUgdHJhbnNmZXIgY29tcGxldGVzIHdpdGggemVybyByZXRyYW5zbWl0cy4KJiM0MzsjCiYjNDM7IyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6CiYjNDM7IwomIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyCiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICBpbnRlcmxpbmsgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgIExBTiBBL0IgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXwKJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHwKJiM0MzsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMKJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGgKJiM0MzsjIChpbnRlcmxpbmsgUlggLSZndDsgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kCiYjNDM7IyBmb3J3YXJkZWQgYnkgdGhlIERVVC4KJiM0MzsKJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoCiYjNDM7CiYjNDM7bnNfZHV0PSYjMzQ7aHNyLWdyby1kdXQmIzM0OwomIzQzO25zX3Nhbj0mIzM0O2hzci1ncm8tc2FuJiMzNDsKJiM0Mztuc19wZWVyPSYjMzQ7aHNyLWdyby1wZWVyJiMzNDsKJiM0MztzYW5faXA9JiMzNDsxMDAuNjQuMC4xJiMzNDsKJiM0MztwZWVyX2lwPSYjMzQ7MTAwLjY0LjAuMyYjMzQ7CiYjNDM7aXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MztzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7aXBlcmZfcGlkZmlsZT0mIzM0Oy90bXAvaHNyX2dyb19pcGVyZi5waWQmIzM0OwomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJaWYgWyAtbiAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IF0gJmFtcDsmYW1wOyBbWyAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXTsgdGhlbgomIzQzOwkJa2lsbCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWZpCiYjNDM7CWlmIFsgLW4gJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IF07IHRoZW4KJiM0MzsJCSMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXMgYm91bmQgc28gYQomIzQzOwkJIyBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgY2xlYW51cAomIzQzOwkJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQkJa2lsbCAtMCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJCQlzbGVlcCAwLjEKJiM0MzsJCWRvbmUKJiM0MzsJCWtpbGwgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQl3YWl0ICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJc2VydmVyX3dyYXBwZXI9JiMzNDsmIzM0OwomIzQzOwlmaQomIzQzOwkjIGxhc3QgcmVzb3J0LCBuYW1lc3BhY2Utc2NvcGVkIG9ubHk6IGtpbGwgaXBlcmYzIHByb2Nlc3NlcyB0aGF0CiYjNDM7CSMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucy4gbmV0bnMgIT0gcGlkbnM6IGEgYmxpbmQgcGtpbGwKJiM0MzsJIyB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy4KJiM0MzsJZm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyAmIzM0OyRuc19wZWVyJiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJaWYgWyAmIzM0OyQoY2F0IC9wcm9jLyRfcC9jb21tIDImZ3Q7L2Rldi9udWxsKSYjMzQ7ID0gJiMzNDtpcGVyZjMmIzM0OyBdOyB0aGVuCiYjNDM7CQkJa2lsbCAmIzM0OyRfcCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQlmaQomIzQzOwlkb25lCiYjNDM7CWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CXJtIC1mICYjMzQ7JHtpcGVyZl9waWRmaWxlfSYjMzQ7CiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyRuc19kdXQmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlpcCBuZXRucyBkZWwgJiMzNDskbnNfc2FuJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJaXAgbmV0bnMgZGVsICYjMzQ7JG5zX3BlZXImIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO2NoZWNrX3Rvb2woKQomIzQzO3sKJiM0MzsJaWYgISBjb21tYW5kIC12ICYjMzQ7JDEmIzM0OyAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxJiMzNDsKJiM0MzsJCWV4aXQgJGtzZnRfc2tpcAomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mztuc3goKQomIzQzO3sKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyQxJiMzNDsgYmFzaCAtYyAmIzM0OyQyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfdG9wbygpCiYjNDM7ewomIzQzOwlsb2NhbCBucwomIzQzOwomIzQzOwljbGVhbnVwCiYjNDM7CWZvciBucyBpbiAmIzM0OyRuc19kdXQmIzM0OyAmIzM0OyRuc19zYW4mIzM0OyAmIzM0OyRuc19wZWVyJiMzNDs7IGRvCiYjNDM7CQlpcCBuZXRucyBhZGQgJiMzNDskbnMmIzM0OwomIzQzOwlkb25lCiYjNDM7CiYjNDM7CWlwIGxpbmsgYWRkIGRfYSBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyAmIzM0OyRuc19wZWVyJiMzNDsKJiM0MzsJaXAgbGluayBhZGQgZF9iIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zICYjMzQ7JG5zX3BlZXImIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX2lsIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgJiMzNDskbnNfc2FuJiMzNDsKJiM0MzsKJiM0MzsJIyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLgomIzQzOwlmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG8KJiM0MzsJCW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgaXAgbGluayBzZXQgJGlmYWNlIHVwJiMzNDsKJiM0MzsJZG9uZQomIzQzOwlmb3IgaWZhY2UgaW4gcF9hIHBfYjsgZG8KJiM0MzsJCW5zeCAmIzM0OyRuc19wZWVyJiMzNDsgJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cCYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgZF9pbCB1cCYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O2lwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMCYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXAomIzQzOwkJc2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFwKJiM0MzsJCWlwIGxpbmsgc2V0IGhzcjAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfcGVlciYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXAomIzQzOwkJaXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjEmIzM0OwomIzQzOwomIzQzOwkjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXImIzM5O3Mgc3VwZXJ2aXNpb24gZnJhbWVzLgomIzQzOwlzbGVlcCAyCiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2ZlYXR1cmUoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCB3YW50PSYjMzQ7JDQmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiAkd2FudCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF0mIzM0OwomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKCkKJiM0Mzt7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0dSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy4mIzM0OwomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYiByeC1ncm8taHcgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCByeC1ncm8taHcgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPL1RTTy4mIzM0OwomIzQzO30KJiM0MzsKJiM0MztzdGFydF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJIyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiByZWNvcmQgaXRzIGV4YWN0IFBJRCAobmV0bnMgc2hhcmVzIHRoZSBQSUQKJiM0MzsJIyBuYW1lc3BhY2UpLiBUaGUgd3JhcHBpbmcgc2hlbGwgd2FpdHMgb24gdGhlIHNlcnZlciBzbyB0aGUgc2NyaXB0IGNhbgomIzQzOwkjIHJlYWxseSB3YWl0KDEpIGZvciB0aGUgd2hvbGUgdHJlZSwgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSBhbGlrZS4KJiM0MzsJcm0gLWYgJiMzNDske2lwZXJmX3BpZGZpbGV9JiMzNDsKJiM0MzsJKCBuc3ggJiMzNDskbnNfcGVlciYjMzQ7ICYjMzQ7aXBlcmYzIC1zIC0xICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxICZhbXA7IGVjaG8gXCQhICZndDsgJHtpcGVyZl9waWRmaWxlfTsgd2FpdCYjMzQ7ICkgJmFtcDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JCEKJiM0MzsJIyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvCiYjNDM7CSMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJWyAtcyAmIzM0OyR7aXBlcmZfcGlkZmlsZX0mIzM0OyBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWlmIFsgISAtcyAmIzM0OyR7aXBlcmZfcGlkZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQgKG5vIHBpZGZpbGUpJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwlpcGVyZl9waWQ9JChjYXQgJiMzNDske2lwZXJmX3BpZGZpbGV9JiMzNDspCiYjNDM7CWlmICEgW1sgJiMzNDske2lwZXJmX3BpZH0mIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgISBraWxsIC0wICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAmIzM5OyR7aXBlcmZfcGlkfSYjMzk7IGludmFsaWQgb3Igbm90IGFsaXZlJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwlzbGVlcCAxCiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO2RvX3Rzb19zdHJlYW1fdGVzdCgpCiYjNDM7ewomIzQzOwlsb2NhbCBvdXQgc2VuZGVyX3JldHIKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19zYW4mIzM0OyBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtJmd0OyBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuJiMzNDsKJiM0MzsJc3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVybgomIzQzOwkJIyByYXRlLWNhcHBlZDogdGhlIGRpc2NyaW1pbmF0b3IgaXMgcGVyLWZyYW1lIHVuZm9sZCAoY29tcGxldGlvbiB3aXRoCiYjNDM7CSMgMCByZXRyYW5zbWl0cyksIG5vdCBtYXggdGhyb3VnaHB1dDsgdW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJCiYjNDM7CSMgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYSBmdW5jdGlvbmFsIHByb2JsZW0uCiYjNDM7CW91dD0kKG5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgLWIgMkcgLXQgMTAmIzM0OyAyJmd0OyZhbXA7MSkKJiM0MzsJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWVjaG8gJiMzNDskb3V0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsKJiM0MzsJIyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFsbHkgd2FpdCBmb3IKJiM0MzsJIyB0aGUgd3JhcHBlciB0byByZWFwIGl0LCBhbmQgY2hlY2sgaXRzIGV4aXQgc3RhdHVzCiYjNDM7CXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7CiYjNDM7CXNlcnZlcl9yYz0kPwomIzQzOwlzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7CWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CWlmIFsgJiMzNDskc2VydmVyX3JjJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JHNlcnZlcl9yYyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXNlbmRlcl9yZXRyPSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGF3ayAmIzM5Oy9zZW5kZXIvIHtwcmludCAkKE5GLTEpfSYjMzk7KQomIzQzOwlpZiBbIC16ICYjMzQ7JHNlbmRlcl9yZXRyJiMzNDsgXSB8fCBbICYjMzQ7JHNlbmRlcl9yZXRyJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IHJldHJhbnNtaXRzIGR1cmluZyBHU08gdW5mb2xkOiAke3NlbmRlcl9yZXRyOi11bmtub3dufSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGNvbXBsZXRlZCB3aXRoIDAgcmV0cmFuc21pdHMgWyBPSyBdJiMzNDsKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLUUgJiMzNDtzZW5kZXJ8cmVjZWl2ZXImIzM0OwomIzQzO30KJiM0MzsKJiM0MztjaGVja19wcmVyZXF1aXNpdGVzCiYjNDM7Y2hlY2tfdG9vbCBldGh0b29sCiYjNDM7Y2hlY2tfdG9vbCBpcGVyZjMKJiM0MztjaGVja190b29sIHRpbWVvdXQKJiM0MzsKJiM0MzsjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguCiYjNDM7aWYgISBpcCBsaW5rIGhlbHAgaHNyIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBpcHJvdXRlMiBoYXMgbm8gSFNSIGludGVybGluayBzdXBwb3J0JiMzNDsKJiM0MzsJZXhpdCAka3NmdF9za2lwCiYjNDM7ZmkKJiM0MzsKJiM0MztzZXR1cF90b3BvCiYjNDM7CiYjNDM7ZWNobyAmIzM0O0lORk86IEluaXRpYWwgdmFsaWRhdGlvbiBwaW5nIChTQU4gLSZndDsgcGVlciB0aHJvdWdoIHRoZSBEVVQpLiYjMzQ7CiYjNDM7ZG9fcGluZyAmIzM0OyRuc19zYW4mIzM0OyAmIzM0OyRwZWVyX2lwJiMzNDsKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7SW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrcwomIzQzO2RvX3Rzb19zdHJlYW1fdGVzdAomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBBbGwgZ29vZC4mIzM0OwomIzQzO2V4aXQgJHJldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTYzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGRvZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyBpbiB0aGUga2VybmVsIG5ldHdvcmtpbmcgc3RhY2s6IGBuZXQvY29yZS9kZXYuY2AsIGBuZXQvY29yZS9kZXZfYXBpLmNgLCBhbmQgYSBidW5jaCBvZiBIU1ItcmVsYXRlZCBmaWxlcyAoYG5ldC9oc3IvaHNyX2RldmljZS5jYCwgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYCkuIEl0JiMzOTtzIGFsc28gYWRkaW5nIGEgc2VsZnRlc3QsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBUaGUgYWRkaXRpb25zIG9mIGBuZXRpZl9kaXNhYmxlX2dyb2AgYW5kIGBkZXZfZGlzYWJsZV9ncm9gIGZ1bmN0aW9ucyBpbW1lZGlhdGVseSBmbGFnIG15IGF0dGVudGlvbiwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIEhTUiwgc3BlY2lmaWNhbGx5IGRpc2FibGluZyBHUk8gb24gc2xhdmUgZGV2aWNlcyBhbmQgaW50cm9kdWNpbmcgR1NPIGZhbi1vdXQgZnVubmVsaW5nIGluIGBoc3JfZm9yd2FyZF9za2JgLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgSFNSIHBhY2tldCBmb3J3YXJkaW5nLCBwYXJ0aWN1bGFybHkgaG93IGl0IGhhbmRsZXMgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBwYWNrZXRzIHdpdGggdGhlIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLiBUaGlzIGlzIGltcG9ydGFudC4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIGxvY2tpbmcgY2hhbmdlcyBhcm91bmQgYGhzci0mZ3Q7c2VxbnJfbG9ja2AsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgSFNSIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIGVmZmVjdGl2ZWx5IHRlc3RlZCB3aXRoaW4gYSBmdXp6aW5nIGNvbnRleHQuIFNpbmNlIEhTUiBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIHRoYXQgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLiBJIHJlbWVtYmVyIHNlZWluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBjcmVhdGUgYW4gSFNSIGRldmljZSB2aWEgbmV0bGluayAocnRuZXRsaW5rKSBpbiB0aGUgaW5jbHVkZWQgc2VsZnRlc3Q6IGBpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwYC4gRXhjZWxsZW50LiBUaGF0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBIU1IgZGV2aWNlcyBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQsIG1ha2luZyBpdCBhIHZlcnkgdmlhYmxlIHRhcmdldC4KCk5leHQgc3RlcDogbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hhdCBDT05GSUcgb3B0aW9ucyBhcmUgaW52b2x2ZWQuIEkmIzM5O2xsIGRvIGEgcXVpY2sgYEtjb25maWdgIHNlYXJjaCBmb3IgSFNSLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkhTUiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpSaWdodCwgc28gSSBzZWUgYENPTkZJR19IU1JgIOKAkyB0aGF0JiMzOTtzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgSFNSIHN0dWZmIGlzIHdvcmtpbmcuCgpNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGEgZmV3IGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIGhlYXJ0IG9mIHRoZSBIU1IgcHJvY2VzczoKCiogICBgaHNyX2ZvcndhcmRfc2tiYDogVGhpcyBpcyBwcm9iYWJseSB0aGUgd29ya2hvcnNlLCBoYW5kbGluZyB0aGUgZm9yd2FyZGluZyBvZiBTS0JzLgoqICAgYGhzcl9kZXZfeG1pdGA6IExpa2VseSB0aGUgZGV2aWNlIHRyYW5zbWl0IGZ1bmN0aW9uLgoqICAgYGhzcl9oYW5kbGVfZnJhbWVgOiBFc3NlbnRpYWwgZm9yIHByb2Nlc3NpbmcgaW5jb21pbmcgZnJhbWVzLCB0aGUgcmVjZWl2ZXIgc2lkZS4KKiAgIGBkZXZfZGlzYWJsZV9ncm9gICZhbXA7IGBuZXRpZl9kaXNhYmxlX2dyb2A6IFRoZXNlIGxpa2VseSBkZWFsIHdpdGggZGlzYWJsaW5nIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pLiBXZSBhcmUgZGVhbGluZyB3aXRoIHJlYWwtdGltZSByZXF1aXJlbWVudHMsIGFuZCBHUk8gY291bGQgYmUgcHJvYmxlbWF0aWMgaGVyZS4KCkkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgd2l0aCBgaHNyX2ZvcndhcmRfc2tiYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCBjb2RlIGlzIGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgIGJhc2VkIG9uIHRoZSBmaWxlIHBhdGguIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZm9yd2FyZGluZyBwcm9jZXNzIGlzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzQtXHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMzU6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzYtXHR9IGVsc2Uge1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5MT1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYwLVxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzYxOlx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjItfVxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2ND1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3Rlcixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zOTgtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozOTk6XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtNDAwLX1cbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Njc4PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNS0vKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjczNjpzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03Mzcte1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NjgtICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzY5OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAte1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzMtXHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc0Olx0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc1LVx0XHRyZXR1cm47XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTgwMi1cdFx0c2Vncy1cdTAwM2VuZXh0ID0gTlVMTDtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo4MDM6XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODA0LVx0XHRzZWdzID0gbmV4dDtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTUtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTY6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNy1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTI0PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmMtNzUtXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjc2Olx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjZW50IFBhdGNoIGZvciBIU1IgRm9yd2FyZGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUga2V5IGNoYW5nZXMgcmVsYXRlZCB0byBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGZvcndhcmRpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIHR3byBuZXcgZnVuY3Rpb25zLCBgaHNyX2ZvcndhcmRfc2tiYCBhbmQgYGhzcl9mb3J3YXJkX3NrYl9vbmVgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIFNLQnMgKFNvY2tldCBCdWZmZXJzKSBpbiB0aGUgSFNSIGNvbnRleHQuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZS4KClRoZSBmYWN0IHRoYXQgaXQgYWxzbyBtb2RpZmllcyBgaHNyX2Rldl94bWl0YCBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIGlzIGNydWNpYWwuIFRob3NlIGZ1bmN0aW9ucyBhcmUgYXQgdGhlIGhlYXJ0IG9mIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nIGZyYW1lcyB3aXRoaW4gdGhlIEhTUiBuZXR3b3JrLiBBbnkgYWx0ZXJhdGlvbiBoZXJlIHdhcnJhbnRzIGNsb3NlIGluc3BlY3Rpb24sIGFzIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSBoaW5nZXMgb24gdGhvc2UgbW9kdWxlcy4KCk5vdywgdGhlIGluY2x1c2lvbiBvZiBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvZGV2X2FwaS5jYCwgcmVzcGVjdGl2ZWx5LCBpcyB3aGF0JiMzOTtzIHBpcXVpbmcgbXkgaW50ZXJlc3QgdGhlIG1vc3QuIFRoYXTigJlzIGFib3V0IEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkLCBvciBHUk8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBHUk8gaXMgYmVpbmcgZGlzYWJsZWQuIFRoaXMgY2FuIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGlmIG5vdCBjYXJlZnVsbHkgbWFuYWdlZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiBgZGV2X2Rpc2FibGVfZ3JvYCBpbiBgbmV0L2NvcmUvZGV2X2FwaS5jYC4gVGhpcyBjb3VsZCBiZSBkdWUgdG8gaXNzdWVzIHdpdGggSFNSJiMzOTtzIGR1cGxpY2F0ZSBmcmFtZSBoYW5kbGluZyBhbmQgR1JPJiMzOTtzIGFnZ3JlZ2F0aW9uLCBvciBwZXJoYXBzIGl0JiMzOTtzIGEgc3BlY2lmaWMgaW5jb21wYXRpYmlsaXR5IGlkZW50aWZpZWQgZHVyaW5nIHRlc3RpbmcuIERpc2FibGluZyBHUk8gaXMgYSB0cmFkZW9mZiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRldmVsb3BlcuKAmXMgdGhpbmtpbmcgd2FzLCBpbiBkb2luZyBzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MTg0Mz12b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTg2MS0vKipcbm5ldC9jb3JlL2Rldi5jOjE4NjI6ICpcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2Vcbm5ldC9jb3JlL2Rldi5jLTE4NjMtICpcdEBkZXY6IGRldmljZVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE4NjgtICovXG5uZXQvY29yZS9kZXYuYzoxODY5OnN0YXRpYyB2b2lkIGRldl9kaXNhYmxlX2dyb19odyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2LmMtMTg3MC17XG4tLVxubmV0L2NvcmUvZGV2LmM9NjM3OD1zdGF0aWMgaW50IGdlbmVyaWNfeGRwX2luc3RhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcbi0tXG5uZXQvY29yZS9kZXYuYy02Mzk0LVx0XHRcdG5ldGlmX2Rpc2FibGVfbHJvKGRldik7XG5uZXQvY29yZS9kZXYuYzo2Mzk1Olx0XHRcdGRldl9kaXNhYmxlX2dyb19odyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtNjM5Ni1cdFx0fVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNzA9RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yNzItLyoqXG5uZXQvY29yZS9kZXZfYXBpLmM6MjczOiAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxubmV0L2NvcmUvZGV2X2FwaS5jLTI3NC0gKiBAZGV2OiBkZXZpY2Vcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjc5LSAqL1xubmV0L2NvcmUvZGV2X2FwaS5jOjI4MDp2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4MS17XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4NS19XG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg2OkVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MDYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEdSTyBEaXNhYmxpbmcgUGF0Y2ggZm9yIEhTUioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHNwZWNpZmljYWxseSBpbnZva2VkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyBlbnNsYXZlZCB1bmRlciBhbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIG1hc3Rlci4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQgdG8gcmVtZW1iZXIgZm9yIGNvbnRleHQuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXMgcHJvcGVybHkgZG9jdW1lbnRlZCBhbmQgZWFzaWx5IGRpc2NvdmVyYWJsZS4gSSYjMzk7bSBnb2luZyB0byBhZGQgdGhlIGtleSBmdW5jdGlvbnPigJRgaHNyX2ZvcndhcmRfc2tiYCwgYGhzcl9kZXZfeG1pdGAsIGBoc3JfaGFuZGxlX2ZyYW1lYCwgYWxvbmcgd2l0aCB0aGVzZSBuZXcgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgZnVuY3Rpb25z4oCUdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRoaXMgd2F5LCBhbnkgZW5naW5lZXIgd29ya2luZyB3aXRoIEhTUiB3aWxsIGJlIGFibGUgdG8gZWFzaWx5IGZpbmQgdGhlbS4KClRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzLCBvYnZpb3VzbHksIGBIU1JgLiBJIG11c3QgbWFrZSB0aGF0IGNsZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLiBIb3dldmVyLCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBpdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjay4gSSBzaG91bGQgcXVpY2tseSBzY2FuIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBsdXJraW5nLiBUaGlzIHdpbGwgaGVscCBwcmV2ZW50IGZ1dHVyZSBpc3N1ZXMgYW5kIGVuc3VyZSB0aGUgaW50ZWdyYXRpb24gaXMgY2xlYW4gYW5kIHN0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU4CgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbnNpZGVyOyB0aGlzIGlzIHRoZSBmdWxsIHBpY3R1cmUuIExldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogZG9lcyB0aGUgcGF0Y2ggd29yayBhcyBhZHZlcnRpc2VkPyBZZXMsIGl0IGRvZXMuIFRoaXMgdGhpbmcgYWN0dWFsbHkgYWx0ZXJzIGhvdyBIU1IgZm9yd2FyZHMgcGFja2V0cywgYW5kIHRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIHRoYXQgaXQgY29ycmVjdGx5IGhhbmRsZXMgR1NPIHBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtLiBQbHVzLCBpdCBkaXNhYmxlcyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiB0aGUgc2xhdmUgZGV2aWNlcy4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhlIGNvZGUgaXQgdG91Y2hlcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSDigJMgYSBnb29kIHNpZ24uCgpHaXZlbiB0aGF0IGl0IGludHJvZHVjZXMgdGhlc2Ugc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgY29kZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiAgV2UgbmVlZCB0byBwdXQgdGhpcyB0aHJvdWdoIGl0cyBwYWNlcy4gVGhlIGNydWNpYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYGhzcl9mb3J3YXJkX3NrYmAsIGBoc3JfZGV2X3htaXRgLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGBkZXZfZGlzYWJsZV9ncm9gLCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYC4gIFRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQgdG8gZW5zdXJlIGlzIGVuYWJsZWQgaXMsIG5hdHVyYWxseSwgYEhTUmAuIFRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogaXQgbW9kaWZpZXMgSFNSJiMzOTtzIGZvcndhcmRpbmcgcGF0aCB0byBhZGRyZXNzIEdTTyBhbmQgZGlzYWJsZXMgR1JPIG9uIHRoZSBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZGVtb25zdHJhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMsIHdpdGhpbiByZWFjaGFibGUgbmV0d29yayBjb2RlLCBhbmQgcmlwZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIHBhY2tldCBmb3J3YXJkaW5nIHRvIGhhbmRsZSBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0sIGFuZCBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDssCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBIU1IgcGFja2V0IGZvcndhcmRpbmcgdG8gaGFuZGxlIEdTTyBwYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSwgYW5kIGRpc2FibGVzIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgbmV0d29yayBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMjA6MzA6MjkuNjg4Njk3Nzg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NjkzNzkzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBIU1IgcGFja2V0IGZvcndhcmRpbmcgdG8gaGFuZGxlIEdTTyBwYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSwgYW5kIGRpc2FibGVzIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgbmV0d29yayBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMDozMDoyOS42ODg3MDUxOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzAwMDUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAwYzhkNjg1OTMyMDM2Y2MwMzdkYTg0ODk3YjEzNThlMWU4MmY3ZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMjA6MzA6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uZWJhMmMyNmE0OWJhOGYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMzQzNCw2ICszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7XFxuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbit2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gaW50IGRldl9sb29wYmFja194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiKTtcXG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDU5MzNjNWRhYjA5ZWUxLi5hNmNmMmFkYzg2MjU2NSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTE4NDAsNiArMTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdH1cXG4gfVxcbiBcXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuK1xcbitcXHRkZXYtXFx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcXHUwMDI2PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpO1xcbitcXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IChORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKSkpXFxuK1xcdFxcdG5ldGRldl9XQVJOKGRldiwgXFxcImZhaWxlZCB0byBkaXNhYmxlIEdSTyFcXFxcblxcXCIpO1xcbitcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikge1xcbitcXHRcXHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcXG4rXFx0XFx0bmV0aWZfZGlzYWJsZV9ncm8obG93ZXJfZGV2KTtcXG4rXFx0XFx0bmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKipcXG4gICpcXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXFxuICAqXFx0QGRldjogZGV2aWNlXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xcbmluZGV4IDQzNzk0N2RkMDhlZDUzLi4wMmZiMjE2Mjk1MTI4NCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcXG4rKysgYi9uZXQvY29yZS9kZXZfYXBpLmNcXG5AQCAtMjY5LDYgKzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcXG4gXFxuKy8qKlxcbisgKiBkZXZfZGlzYWJsZV9ncm8oKSAtIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG4rICogQGRldjogZGV2aWNlXFxuKyAqXFxuKyAqIERpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBuZXQgZGV2aWNlLiAgTXVzdCBiZVxcbisgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlXFxuKyAqIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS5cXG4rICovXFxuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuK1xcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xcbitcXG4gLyoqXFxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxcbiAgKiBAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4yNDhjYmIxNDJlMjFlMSAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXFxuQEAgLTIzMiw5ICsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gbWFzdGVyLVxcdTAwM2VkZXY7XFxuIFxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuIFxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuIFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuQEAgLTMzNSw2ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuIFxcdFxcdGhzcl9zdGFnLVxcdTAwM2VzZXF1ZW5jZV9uciA9IGh0b25zKGhzci1cXHUwMDNlc2VxdWVuY2VfbnIpO1xcbiBcXHRcXHRoc3ItXFx1MDAzZXNlcXVlbmNlX25yKys7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcbiBcXHRoc3Jfc3RhZy1cXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IHR5cGU7XFxuIFxcdC8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovXFxuQEAgLTM1NiwxNCArMzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXFx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0cmV0dXJuO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG5AQCAtMzkwLDYgKzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2VzZXF1ZW5jZV9uciA9IGh0b25zKGhzci1cXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcXG4gXFx0aHNyLVxcdTAwM2VzdXBfc2VxdWVuY2VfbnIrKztcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xcbiBcXG5AQCAtMzk3LDEzICszOTMsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxuIFxcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xcbiBcXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVxcdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuIFxcbi1cXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4rXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0fVxcbiBcXG4gXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIH1cXG4gXFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cXG5AQCAtNjU5LDcgKzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcXG4gXFxuIFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8XFxuLVxcdFxcdFxcdCAgIE5FVElGX0ZfR1NPX01BU0sgfCBORVRJRl9GX0hXX0NTVU0gfFxcbitcXHRcXHRcXHQgICBORVRJRl9GX0hXX0NTVU0gfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XFxuIFxcdFxcdFxcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbmluZGV4IDA3NzQ5ODFhNjVjMTY0Li4zZmNkYmFjNDljNTlkYSAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2dzby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaHNyX21haW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImhzcl9mcmFtZXJlZy5oXFxcIlxcbiBcXG5AQCAtNjIxLDkgKzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcXG4gXFx0ICAgIHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbiBcXHRcXHQvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqL1xcbi1cXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdFxcdGZyYW1lLVxcdTAwM2VzZXF1ZW5jZV9uciA9IGhzci1cXHUwMDNlc2VxdWVuY2VfbnI7XFxuIFxcdFxcdGhzci1cXHUwMDNlc2VxdWVuY2VfbnIrKztcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtNzMxLDcgKzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuIH1cXG4gXFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxuLXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4rc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIHtcXG4gXFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lO1xcbiBcXG5AQCAtNzYwLDMgKzc2Miw1MCBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIFxcdHBvcnQtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gfVxcbitcXG4rLyogR1NPIGZhbi1vdXQgZnVubmVsOiB1bmZvbGQgc3VwZXItcGFja2V0cyBiZWZvcmUgcGVyLWZyYW1lIHByb2Nlc3Npbmcgc29cXG4rICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLlxcbisgKi9cXG4rdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDtcXG4rXFxuK1xcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcXG4rXFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxcbitcXHQgKiBvbiB0aGUgbWFzdGVyLCBvciBhcnJpdmluZyB1bnRhZ2dlZCBmcm9tIHRoZSBTQU4gc2lkZSBvbiB0aGVcXG4rXFx0ICogaW50ZXJsaW5rLiBBIHN1cGVyLXBhY2tldCBmcm9tIGEgTEFOIHNsYXZlIG1heSBjYXJyeSBwZXItZnJhbWVcXG4rXFx0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxcbitcXHQgKiByZWNvdmVyOyBhbiBhbHJlYWR5LXRhZ2dlZCBIU1IvUFJQIHN1cGVyLXBhY2tldCB2aW9sYXRlc1xcbitcXHQgKiBwZXItZnJhbWUgd2lyZSBzZW1hbnRpY3MuIERyb3AgYm90aC5cXG4rXFx0ICovXFxuK1xcdGlmIChwb3J0LVxcdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSAhPSBIU1JfUFRfSU5URVJMSU5LKVxcbitcXHRcXHRnb3RvIGRyb3BfZ3NvO1xcbitcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XFxuK1xcdCAgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX1BSUCkpXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287XFxuK1xcbitcXHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxcbitcXHQgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbVxcbitcXHQgKiB0aGUgaW50ZXJsaW5rIGZvbGxvd3MgUlggY2hlY2tzdW0gc2VtYW50aWNzLlxcbitcXHQgKi9cXG4rXFx0c2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcXG4rXFx0aWYgKElTX0VSUihzZWdzKSB8fCB1bmxpa2VseSghc2VncykpXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287XFxuK1xcbitcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHR3aGlsZSAoc2Vncykge1xcbitcXHRcXHRuZXh0ID0gc2Vncy1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0c2Vncy1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuK1xcdFxcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XFxuK1xcdFxcdHNlZ3MgPSBuZXh0O1xcbitcXHR9XFxuK1xcdHJldHVybjtcXG4rXFxuK2Ryb3BfZ3NvOlxcbitcXHRwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4rXFx0a2ZyZWVfc2tiKHNrYik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcXG5pbmRleCBkOWFmOWU2NWY3MmYwNy4uYzdmZDAyMWYwM2IxZjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbisrKyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdH1cXG4gXFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gXFxuLVxcdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXFxuLVxcdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdH1cXG4rXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuIFxcbiBmaW5pc2hfY29uc3VtZTpcXG4gXFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XFxuQEAgLTE3MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcXG4gXFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XFxuK1xcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbmluZGV4IDMxZmI5MzI2Y2Y1MzNkLi4wZDEwNTQ3NmU3YzUwZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbkBAIC0zLDYgKzMsNyBAQFxcbiB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi5cXG4gXFxuIFRFU1RfUFJPR1MgOj0gXFxcXFxcbitcXHRoc3JfZ3JvX3N1cGVycGFja2V0LnNoIFxcXFxcXG4gXFx0aHNyX3Bpbmcuc2ggXFxcXFxcbiBcXHRoc3JfcmVkYm94LnNoIFxcXFxcXG4gXFx0bGlua19mYXVsdHMuc2ggXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YjBhOWNlZWExY2U1OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2hcXG5AQCAtMCwwICsxLDI0OSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6XFxuKyNcXG4rIyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0XFxuKyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuXFxuKyMgIDIuIFRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPIGZlYXR1cmVzLlxcbisjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTT1xcbisjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkgYW5kIGRlbGl2ZXJlZFxcbisjICAgICBwZXItZnJhbWU6IHRoZSB0cmFuc2ZlciBjb21wbGV0ZXMgd2l0aCB6ZXJvIHJldHJhbnNtaXRzLlxcbisjXFxuKyMgVG9wb2xvZ3kgKDEwMC42NC4wLjAvMjQpOlxcbisjXFxuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXFxuKyMgICstLS0tLS0tLS0tLSsgIGludGVybGluayAgKy0tLS0tLS0tLS0tLS0tLSsgIExBTiBBL0IgICstLS0tLS0tLS0tLStcXG4rIyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfFxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XFxuKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICstLS0tLS0tLS0tLStcXG4rI1xcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxcbisjIChpbnRlcmxpbmsgUlggLVxcdTAwM2UgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kXFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXFxuK1xcbitzb3VyY2UgLi9oc3JfY29tbW9uLnNoXFxuK1xcbituc19kdXQ9XFxcImhzci1ncm8tZHV0XFxcIlxcbituc19zYW49XFxcImhzci1ncm8tc2FuXFxcIlxcbituc19wZWVyPVxcXCJoc3ItZ3JvLXBlZXJcXFwiXFxuK3Nhbl9pcD1cXFwiMTAwLjY0LjAuMVxcXCJcXG4rcGVlcl9pcD1cXFwiMTAwLjY0LjAuM1xcXCJcXG4raXBlcmZfcGlkPVxcXCJcXFwiXFxuK3NlcnZlcl93cmFwcGVyPVxcXCJcXFwiXFxuK2lwZXJmX3BpZGZpbGU9XFxcIi90bXAvaHNyX2dyb19pcGVyZi5waWRcXFwiXFxuK1xcbitjbGVhbnVwKClcXG4re1xcbitcXHRpZiBbIC1uIFxcXCIke2lwZXJmX3BpZH1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgW1sgXFxcIiR7aXBlcmZfcGlkfVxcXCIgPX4gXlswLTldKyQgXV07IHRoZW5cXG4rXFx0XFx0a2lsbCBcXFwiJHtpcGVyZl9waWR9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRmaVxcbitcXHRpZiBbIC1uIFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgXTsgdGhlblxcbitcXHRcXHQjIHRoZSB3cmFwcGVyIHdhaXRzIG9uIHRoZSBzZXJ2ZXI7IHJlYXAgaXQgd2l0aCBhIDVzIGJvdW5kIHNvIGFcXG4rXFx0XFx0IyBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgY2xlYW51cFxcbitcXHRcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0XFx0a2lsbCAtMCBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXFxuK1xcdFxcdFxcdHNsZWVwIDAuMVxcbitcXHRcXHRkb25lXFxuK1xcdFxcdGtpbGwgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0c2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rXFx0ZmlcXG4rXFx0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBraWxsIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxcbitcXHQjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMuIG5ldG5zICE9IHBpZG5zOiBhIGJsaW5kIHBraWxsXFxuK1xcdCMgd291bGQgc2NhbiB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXFxuK1xcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXFxcIiRuc19wZWVyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCk7IGRvXFxuK1xcdFxcdGlmIFsgXFxcIiQoY2F0IC9wcm9jLyRfcC9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdOyB0aGVuXFxuK1xcdFxcdFxcdGtpbGwgXFxcIiRfcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0ZmlcXG4rXFx0ZG9uZVxcbitcXHRpcGVyZl9waWQ9XFxcIlxcXCJcXG4rXFx0cm0gLWYgXFxcIiR7aXBlcmZfcGlkZmlsZX1cXFwiXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJG5zX2R1dFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZGVsIFxcXCIkbnNfc2FuXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpcCBuZXRucyBkZWwgXFxcIiRuc19wZWVyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbit9XFxuK1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rY2hlY2tfdG9vbCgpXFxuK3tcXG4rXFx0aWYgISBjb21tYW5kIC12IFxcXCIkMVxcXCIgXFx1MDAzZSAvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVxcXCJcXG4rXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuK1xcdGZpXFxuK31cXG4rXFxuK25zeCgpXFxuK3tcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJDFcXFwiIGJhc2ggLWMgXFxcIiQyXFxcIlxcbit9XFxuK1xcbitzZXR1cF90b3BvKClcXG4re1xcbitcXHRsb2NhbCBuc1xcbitcXG4rXFx0Y2xlYW51cFxcbitcXHRmb3IgbnMgaW4gXFxcIiRuc19kdXRcXFwiIFxcXCIkbnNfc2FuXFxcIiBcXFwiJG5zX3BlZXJcXFwiOyBkb1xcbitcXHRcXHRpcCBuZXRucyBhZGQgXFxcIiRuc1xcXCJcXG4rXFx0ZG9uZVxcbitcXG4rXFx0aXAgbGluayBhZGQgZF9hIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyBcXFwiJG5zX3BlZXJcXFwiXFxuK1xcdGlwIGxpbmsgYWRkIGRfYiBuZXRucyBcXFwiJG5zX2R1dFxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgXFxcIiRuc19wZWVyXFxcIlxcbitcXHRpcCBsaW5rIGFkZCBkX2lsIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFxcXCIkbnNfc2FuXFxcIlxcbitcXG4rXFx0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxcbitcXHRmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG9cXG4rXFx0XFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcXFwiXFxuK1xcdGRvbmVcXG4rXFx0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXFxuK1xcdFxcdG5zeCBcXFwiJG5zX3BlZXJcXFwiIFxcXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cFxcXCJcXG4rXFx0ZG9uZVxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBzZXQgZF9pbCB1cFxcXCJcXG4rXFx0bnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwiaXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXFxcIlxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxcXFxuK1xcdFxcdGlwIGxpbmsgc2V0IGhzcjAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3BlZXJcXFwiIFxcXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXFxcXG4rXFx0XFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXFxcXG4rXFx0XFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcXFwiXFxuK1xcbitcXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXFxuK1xcdHNsZWVwIDJcXG4rfVxcbitcXG4rY2hlY2tfZmVhdHVyZSgpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCB3YW50PVxcXCIkNFxcXCJcXG4rXFxuK1xcdGlmIG5zeCBcXFwiJG5zXFxcIiBcXFwiZXRodG9vbCAtayAkaWZhY2VcXFwiIHwgZ3JlcCAtcSBcXFwiXiRmZWF0dXJlOiAkd2FudFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcXG4re1xcbitcXHRlY2hvIFxcXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXFxcIlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uXFxcIlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2EgcngtZ3JvLWh3IG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2IgcngtZ3JvLWh3IG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2lsIHJ4LWdyby1odyBvZmZcXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiSFctR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uXFxcIlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPL1RTTy5cXFwiXFxuK31cXG4rXFxuK3N0YXJ0X2lwZXJmX3NlcnZlcigpXFxuK3tcXG4rXFx0IyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiByZWNvcmQgaXRzIGV4YWN0IFBJRCAobmV0bnMgc2hhcmVzIHRoZSBQSURcXG4rXFx0IyBuYW1lc3BhY2UpLiBUaGUgd3JhcHBpbmcgc2hlbGwgd2FpdHMgb24gdGhlIHNlcnZlciBzbyB0aGUgc2NyaXB0IGNhblxcbitcXHQjIHJlYWxseSB3YWl0KDEpIGZvciB0aGUgd2hvbGUgdHJlZSwgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSBhbGlrZS5cXG4rXFx0cm0gLWYgXFxcIiR7aXBlcmZfcGlkZmlsZX1cXFwiXFxuK1xcdCggbnN4IFxcXCIkbnNfcGVlclxcXCIgXFxcImlwZXJmMyAtcyAtMSBcXHUwMDNlIC9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjYgZWNobyBcXFxcJCEgXFx1MDAzZSAke2lwZXJmX3BpZGZpbGV9OyB3YWl0XFxcIiApIFxcdTAwMjZcXG4rXFx0c2VydmVyX3dyYXBwZXI9JCFcXG4rXFx0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXFxuK1xcdCMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkXFxuK1xcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRbIC1zIFxcXCIke2lwZXJmX3BpZGZpbGV9XFxcIiBdIFxcdTAwMjZcXHUwMDI2IGJyZWFrXFxuK1xcdFxcdHNsZWVwIDAuMVxcbitcXHRkb25lXFxuK1xcdGlmIFsgISAtcyBcXFwiJHtpcGVyZl9waWRmaWxlfVxcXCIgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgcHVibGlzaCBhIHBpZCAobm8gcGlkZmlsZSlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aXBlcmZfcGlkPSQoY2F0IFxcXCIke2lwZXJmX3BpZGZpbGV9XFxcIilcXG4rXFx0aWYgISBbWyBcXFwiJHtpcGVyZl9waWR9XFxcIiA9fiBeWzAtOV0rJCBdXSB8fCAhIGtpbGwgLTAgXFxcIiR7aXBlcmZfcGlkfVxcXCIgMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJyR7aXBlcmZfcGlkfScgaW52YWxpZCBvciBub3QgYWxpdmVcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0c2xlZXAgMVxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbitkb190c29fc3RyZWFtX3Rlc3QoKVxcbit7XFxuK1xcdGxvY2FsIG91dCBzZW5kZXJfcmV0clxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImV0aHRvb2wgLUsgczAgdHNvIG9uIGdzbyBvblxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX3NhblxcXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkNvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cXFwiXFxuK1xcdHN0YXJ0X2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFx0XFx0IyByYXRlLWNhcHBlZDogdGhlIGRpc2NyaW1pbmF0b3IgaXMgcGVyLWZyYW1lIHVuZm9sZCAoY29tcGxldGlvbiB3aXRoXFxuK1xcdCMgMCByZXRyYW5zbWl0cyksIG5vdCBtYXggdGhyb3VnaHB1dDsgdW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJXFxuK1xcdCMgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYSBmdW5jdGlvbmFsIHByb2JsZW0uXFxuK1xcdG91dD0kKG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgLWIgMkcgLXQgMTBcXFwiIDJcXHUwMDNlXFx1MDAyNjEpXFxuK1xcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDpcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFxuK1xcdCMgc3VjY2VzcyBwYXRoOiB0aGUgb25lLXNob3Qgc2VydmVyIGV4aXRzIGJ5IGl0c2VsZjsgcmVhbGx5IHdhaXQgZm9yXFxuK1xcdCMgdGhlIHdyYXBwZXIgdG8gcmVhcCBpdCwgYW5kIGNoZWNrIGl0cyBleGl0IHN0YXR1c1xcbitcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCJcXG4rXFx0c2VydmVyX3JjPSQ/XFxuK1xcdHNlcnZlcl93cmFwcGVyPVxcXCJcXFwiXFxuK1xcdGlwZXJmX3BpZD1cXFwiXFxcIlxcbitcXHRpZiBbIFxcXCIkc2VydmVyX3JjXFxcIiAtbmUgMCBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JHNlcnZlcl9yY1xcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFxuK1xcdHNlbmRlcl9yZXRyPSQoZWNobyBcXFwiJG91dFxcXCIgfCBhd2sgJy9zZW5kZXIvIHtwcmludCAkKE5GLTEpfScpXFxuK1xcdGlmIFsgLXogXFxcIiRzZW5kZXJfcmV0clxcXCIgXSB8fCBbIFxcXCIkc2VuZGVyX3JldHJcXFwiIC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogcmV0cmFuc21pdHMgZHVyaW5nIEdTTyB1bmZvbGQ6ICR7c2VuZGVyX3JldHI6LXVua25vd259XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGVjaG8gXFxcIiRvdXRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcbitcXHRlY2hvIFxcXCJJTkZPOiBUQ1Agc3RyZWFtIGNvbXBsZXRlZCB3aXRoIDAgcmV0cmFuc21pdHMgWyBPSyBdXFxcIlxcbitcXHRlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLUUgXFxcInNlbmRlcnxyZWNlaXZlclxcXCJcXG4rfVxcbitcXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xcbitjaGVja190b29sIGV0aHRvb2xcXG4rY2hlY2tfdG9vbCBpcGVyZjNcXG4rY2hlY2tfdG9vbCB0aW1lb3V0XFxuK1xcbisjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXFxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXFx1MDAzZVxcdTAwMjYxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitcXG4rc2V0dXBfdG9wb1xcbitcXG4rZWNobyBcXFwiSU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXFx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIERVVCkuXFxcIlxcbitkb19waW5nIFxcXCIkbnNfc2FuXFxcIiBcXFwiJHBlZXJfaXBcXFwiXFxuK3N0b3BfaWZfZXJyb3IgXFxcIkluaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuXFxcIlxcbitcXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXFxuK2RvX3Rzb19zdHJlYW1fdGVzdFxcbitzdG9wX2lmX2Vycm9yIFxcXCJHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cXFwiXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBBbGwgZ29vZC5cXFwiXFxuK2V4aXQgJHJldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMDozMDozMC4yODY2NTk5NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyODA3MTQwOTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImhzcl9kZXZfeG1pdFwiLFxuICAgIFwiaHNyX2hhbmRsZV9mcmFtZVwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEhTUiBwYWNrZXQgZm9yd2FyZGluZyB0byBoYW5kbGUgR1NPIHBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtLCBhbmQgZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDBjOGQ2ODU5MzIwMzZjYzAzN2RhODQ4OTdiMTM1OGUxZTgyZjdlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDIwOjMwOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5lYmEyYzI2YTQ5YmE4ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zNDM0LDYgKzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbit2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpO1xuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNTkzM2M1ZGFiMDllZTEuLmE2Y2YyYWRjODYyNTY1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTg0MCw2ICsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1xuK1x0ZGV2LVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XG4rXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4rXG4rXHRpZiAodW5saWtlbHkoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiAoTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVykpKVxuK1x0XHRuZXRkZXZfV0FSTihkZXYsIFwiZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxcblwiKTtcbitcbitcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcbitcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XG4rXHRcdG5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7XG4rXHRcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4gICpcdEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuaW5kZXggNDM3OTQ3ZGQwOGVkNTMuLjAyZmIyMTYyOTUxMjg0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2X2FwaS5jXG4rKysgYi9uZXQvY29yZS9kZXZfYXBpLmNcbkBAIC0yNjksNiArMjY5LDIyIEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcbiBcbisvKipcbisgKiBkZXZfZGlzYWJsZV9ncm8oKSAtIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcbisgKiBAZGV2OiBkZXZpY2VcbisgKlxuKyAqIERpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBuZXQgZGV2aWNlLiAgTXVzdCBiZVxuKyAqIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWQgcGFja2V0cyBtYXkgYmVcbisgKiBmb3J3YXJkZWQgdG8gYW5vdGhlciBpbnRlcmZhY2UuXG4rICovXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbitcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4rXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4rXG4gLyoqXG4gICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlXG4gICogQGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuaW5kZXggNTU1NWI3MWFiMTliNTkuLjI0OGNiYjE0MmUyMWUxIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5AQCAtMjMyLDkgKzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0c2tiLVx1MDAzZWRldiA9IG1hc3Rlci1cdTAwM2VkZXY7XG4gXHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG5AQCAtMzM1LDYgKzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnIrKztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xuIFx0fVxuIFxuLVx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0cmV0dXJuO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbkBAIC0zOTAsNiArMzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnIrKztcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICszOTMsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbiBcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIH1cbiBcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXG5AQCAtNjU5LDcgKzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbitcdFx0XHQgICBORVRJRl9GX0hXX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2NC4uM2ZjZGJhYzQ5YzU5ZGEgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcImhzcl9tYWluLmhcIlxuICNpbmNsdWRlIFwiaHNyX2ZyYW1lcmVnLmhcIlxuIFxuQEAgLTYyMSw5ICs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XG4gXHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbiBcdFx0LyogU2VxdWVuY2UgbnIgZm9yIHRoZSBtYXN0ZXIvaW50ZXJsaW5rIG5vZGUgKi9cbi1cdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGZyYW1lLVx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVx1MDAzZXNlcXVlbmNlX25yO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnIrKztcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4rc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lO1xuIFxuQEAgLTc2MCwzICs3NjIsNTAgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gfVxuK1xuKy8qIEdTTyBmYW4tb3V0IGZ1bm5lbDogdW5mb2xkIHN1cGVyLXBhY2tldHMgYmVmb3JlIHBlci1mcmFtZSBwcm9jZXNzaW5nIHNvXG4rICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLlxuKyAqL1xuK3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7XG4rXG4rXHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XG4rXHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogVW5mb2xkIG9ubHkgcGxhaW4tRXRoZXJuZXQgR1NPIHN1cGVyLXBhY2tldHM6IGxvY2FsbHkgZ2VuZXJhdGVkXG4rXHQgKiBvbiB0aGUgbWFzdGVyLCBvciBhcnJpdmluZyB1bnRhZ2dlZCBmcm9tIHRoZSBTQU4gc2lkZSBvbiB0aGVcbitcdCAqIGludGVybGluay4gQSBzdXBlci1wYWNrZXQgZnJvbSBhIExBTiBzbGF2ZSBtYXkgY2FycnkgcGVyLWZyYW1lXG4rXHQgKiBIU1IgdGFncyAvIFBSUCBSQ1QgdHJhaWxlcnMgdGhhdCBzb2Z0d2FyZSBzZWdtZW50YXRpb24gY2Fubm90XG4rXHQgKiByZWNvdmVyOyBhbiBhbHJlYWR5LXRhZ2dlZCBIU1IvUFJQIHN1cGVyLXBhY2tldCB2aW9sYXRlc1xuK1x0ICogcGVyLWZyYW1lIHdpcmUgc2VtYW50aWNzLiBEcm9wIGJvdGguXG4rXHQgKi9cbitcdGlmIChwb3J0LVx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0hTUikgfHxcbitcdCAgICBza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSlcbitcdFx0Z290byBkcm9wX2dzbztcbitcbitcdC8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlXG4rXHQgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbVxuK1x0ICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy5cbitcdCAqL1xuK1x0c2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xuK1x0aWYgKElTX0VSUihzZWdzKSB8fCB1bmxpa2VseSghc2VncykpXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXG4rXHRjb25zdW1lX3NrYihza2IpO1xuK1x0d2hpbGUgKHNlZ3MpIHtcbitcdFx0bmV4dCA9IHNlZ3MtXHUwMDNlbmV4dDtcbitcdFx0c2Vncy1cdTAwM2VuZXh0ID0gTlVMTDtcbitcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcbitcdFx0c2VncyA9IG5leHQ7XG4rXHR9XG4rXHRyZXR1cm47XG4rXG4rZHJvcF9nc286XG4rXHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRrZnJlZV9za2Ioc2tiKTtcbit9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX3NsYXZlLmNcbisrKyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbkBAIC03MywxNiArNzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdH1cbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXG4tXHQvKiBPbmx5IHRoZSBmcmFtZXMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJsaW5rIHBvcnQgd2lsbCBhc3NpZ24gYVxuLVx0ICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuXG4tXHQgKi9cbi1cdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0fSBlbHNlIHtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHR9XG4rXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbiBcbiBmaW5pc2hfY29uc3VtZTpcbiBcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xuQEAgLTE3MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHJlcylcbiBcdFx0Z290byBmYWlsX3J4X2hhbmRsZXI7XG4gXHRkZXZfZGlzYWJsZV9scm8oZGV2KTtcbitcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbmluZGV4IDMxZmI5MzI2Y2Y1MzNkLi4wZDEwNTQ3NmU3YzUwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbkBAIC0zLDYgKzMsNyBAQFxuIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbitcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YjBhOWNlZWExY2U1OVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5AQCAtMCwwICsxLDI0OSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcbisjXG4rIyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0XG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cbisjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy5cbisjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTT1xuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeSBhbmQgZGVsaXZlcmVkXG4rIyAgICAgcGVyLWZyYW1lOiB0aGUgdHJhbnNmZXIgY29tcGxldGVzIHdpdGggemVybyByZXRyYW5zbWl0cy5cbisjXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4rI1xuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xuKyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuKyNcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxuKyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK25zX2R1dD1cImhzci1ncm8tZHV0XCJcbituc19zYW49XCJoc3ItZ3JvLXNhblwiXG4rbnNfcGVlcj1cImhzci1ncm8tcGVlclwiXG4rc2FuX2lwPVwiMTAwLjY0LjAuMVwiXG4rcGVlcl9pcD1cIjEwMC42NC4wLjNcIlxuK2lwZXJmX3BpZD1cIlwiXG4rc2VydmVyX3dyYXBwZXI9XCJcIlxuK2lwZXJmX3BpZGZpbGU9XCIvdG1wL2hzcl9ncm9faXBlcmYucGlkXCJcbitcbitjbGVhbnVwKClcbit7XG4rXHRpZiBbIC1uIFwiJHtpcGVyZl9waWR9XCIgXSBcdTAwMjZcdTAwMjYgW1sgXCIke2lwZXJmX3BpZH1cIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxuK1x0XHRraWxsIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbitcdGlmIFsgLW4gXCIke3NlcnZlcl93cmFwcGVyfVwiIF07IHRoZW5cbitcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhXG4rXHRcdCMgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlciBoYW5nIGNsZWFudXBcbitcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFx0a2lsbCAtMCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuK1x0XHRcdHNsZWVwIDAuMVxuK1x0XHRkb25lXG4rXHRcdGtpbGwgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0d2FpdCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rXHRmaVxuK1x0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBraWxsIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxuK1x0IyBhY3R1YWxseSBsaXZlIGluIHRoZSBwZWVyIG5ldG5zLiBuZXRucyAhPSBwaWRuczogYSBibGluZCBwa2lsbFxuK1x0IyB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cbitcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRpZiBbIFwiJChjYXQgL3Byb2MvJF9wL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXTsgdGhlblxuK1x0XHRcdGtpbGwgXCIkX3BcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdGZpXG4rXHRkb25lXG4rXHRpcGVyZl9waWQ9XCJcIlxuK1x0cm0gLWYgXCIke2lwZXJmX3BpZGZpbGV9XCJcbitcdGlwIG5ldG5zIGRlbCBcIiRuc19kdXRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBuZXRucyBkZWwgXCIkbnNfc2FuXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0aXAgbmV0bnMgZGVsIFwiJG5zX3BlZXJcIiAyXHUwMDNlL2Rldi9udWxsXG4rfVxuK1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rY2hlY2tfdG9vbCgpXG4re1xuK1x0aWYgISBjb21tYW5kIC12IFwiJDFcIiBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwiXG4rXHRcdGV4aXQgJGtzZnRfc2tpcFxuK1x0Zmlcbit9XG4rXG4rbnN4KClcbit7XG4rXHRpcCBuZXRucyBleGVjIFwiJDFcIiBiYXNoIC1jIFwiJDJcIlxuK31cbitcbitzZXR1cF90b3BvKClcbit7XG4rXHRsb2NhbCBuc1xuK1xuK1x0Y2xlYW51cFxuK1x0Zm9yIG5zIGluIFwiJG5zX2R1dFwiIFwiJG5zX3NhblwiIFwiJG5zX3BlZXJcIjsgZG9cbitcdFx0aXAgbmV0bnMgYWRkIFwiJG5zXCJcbitcdGRvbmVcbitcbitcdGlwIGxpbmsgYWRkIGRfYSBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyBcIiRuc19wZWVyXCJcbitcdGlwIGxpbmsgYWRkIGRfYiBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcIiRuc19wZWVyXCJcbitcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyBcIiRuc19zYW5cIlxuK1xuK1x0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxuK1x0Zm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvXG4rXHRcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgaXAgbGluayBzZXQgJGlmYWNlIHVwXCJcbitcdGRvbmVcbitcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xuK1x0XHRuc3ggXCIkbnNfcGVlclwiIFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcIlxuK1x0ZG9uZVxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgZF9pbCB1cFwiXG4rXHRuc3ggXCIkbnNfc2FuXCIgXCJpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczBcIlxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxuK1x0XHRzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXFxcbitcdFx0aXAgbGluayBzZXQgaHNyMCB1cFwiXG4rXHRuc3ggXCIkbnNfcGVlclwiIFwiaXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcXFxuK1x0XHRzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXFxcbitcdFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcIlxuK1xuK1x0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJ3Mgc3VwZXJ2aXNpb24gZnJhbWVzLlxuK1x0c2xlZXAgMlxuK31cbitcbitjaGVja19mZWF0dXJlKClcbit7XG4rXHRsb2NhbCBucz1cIiQxXCJcbitcdGxvY2FsIGlmYWNlPVwiJDJcIlxuK1x0bG9jYWwgZmVhdHVyZT1cIiQzXCJcbitcdGxvY2FsIHdhbnQ9XCIkNFwiXG4rXG4rXHRpZiBuc3ggXCIkbnNcIiBcImV0aHRvb2wgLWsgJGlmYWNlXCIgfCBncmVwIC1xIFwiXiRmZWF0dXJlOiAkd2FudFwiOyB0aGVuXG4rXHRcdGVjaG8gXCJJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzICR3YW50IFsgT0sgXVwiXG4rXHRlbHNlXG4rXHRcdGVjaG8gXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG5vdCAkd2FudFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRmaVxuK31cbitcbitkb19ncm9fZmVhdHVyZV9jaGVja3MoKVxuK3tcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2EgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYiBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdHN0b3BfaWZfZXJyb3IgXCJHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2EgcngtZ3JvLWh3IG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2IgcngtZ3JvLWh3IG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2lsIHJ4LWdyby1odyBvZmZcbitcdHN0b3BfaWZfZXJyb3IgXCJIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4rXHRzdG9wX2lmX2Vycm9yIFwiSFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy9UU08uXCJcbit9XG4rXG4rc3RhcnRfaXBlcmZfc2VydmVyKClcbit7XG4rXHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHJlY29yZCBpdHMgZXhhY3QgUElEIChuZXRucyBzaGFyZXMgdGhlIFBJRFxuK1x0IyBuYW1lc3BhY2UpLiBUaGUgd3JhcHBpbmcgc2hlbGwgd2FpdHMgb24gdGhlIHNlcnZlciBzbyB0aGUgc2NyaXB0IGNhblxuK1x0IyByZWFsbHkgd2FpdCgxKSBmb3IgdGhlIHdob2xlIHRyZWUsIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgYWxpa2UuXG4rXHRybSAtZiBcIiR7aXBlcmZfcGlkZmlsZX1cIlxuK1x0KCBuc3ggXCIkbnNfcGVlclwiIFwiaXBlcmYzIC1zIC0xIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IGVjaG8gXFwkISBcdTAwM2UgJHtpcGVyZl9waWRmaWxlfTsgd2FpdFwiICkgXHUwMDI2XG4rXHRzZXJ2ZXJfd3JhcHBlcj0kIVxuK1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4rXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuK1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFsgLXMgXCIke2lwZXJmX3BpZGZpbGV9XCIgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXHRpZiBbICEgLXMgXCIke2lwZXJmX3BpZGZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQgKG5vIHBpZGZpbGUpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRpcGVyZl9waWQ9JChjYXQgXCIke2lwZXJmX3BpZGZpbGV9XCIpXG4rXHRpZiAhIFtbIFwiJHtpcGVyZl9waWR9XCIgPX4gXlswLTldKyQgXV0gfHwgISBraWxsIC0wIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJyR7aXBlcmZfcGlkfScgaW52YWxpZCBvciBub3QgYWxpdmVcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdHNsZWVwIDFcbitcdHJldHVybiAwXG4rfVxuK1xuK2RvX3Rzb19zdHJlYW1fdGVzdCgpXG4re1xuK1x0bG9jYWwgb3V0IHNlbmRlcl9yZXRyXG4rXG4rXHRlY2hvIFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1x0bnN4IFwiJG5zX3NhblwiIFwiZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfc2FuXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4rXHRzdG9wX2lmX2Vycm9yIFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cIlxuK1x0c3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuK1x0XHQjIHJhdGUtY2FwcGVkOiB0aGUgZGlzY3JpbWluYXRvciBpcyBwZXItZnJhbWUgdW5mb2xkIChjb21wbGV0aW9uIHdpdGhcbitcdCMgMCByZXRyYW5zbWl0cyksIG5vdCBtYXggdGhyb3VnaHB1dDsgdW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJXG4rXHQjIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGEgZnVuY3Rpb25hbCBwcm9ibGVtLlxuK1x0b3V0PSQobnN4IFwiJG5zX3NhblwiIFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiAtYiAyRyAtdCAxMFwiIDJcdTAwM2VcdTAwMjYxKVxuK1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDpcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRlY2hvIFwiJG91dFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcbitcdCMgc3VjY2VzcyBwYXRoOiB0aGUgb25lLXNob3Qgc2VydmVyIGV4aXRzIGJ5IGl0c2VsZjsgcmVhbGx5IHdhaXQgZm9yXG4rXHQjIHRoZSB3cmFwcGVyIHRvIHJlYXAgaXQsIGFuZCBjaGVjayBpdHMgZXhpdCBzdGF0dXNcbitcdHdhaXQgXCIke3NlcnZlcl93cmFwcGVyfVwiXG4rXHRzZXJ2ZXJfcmM9JD9cbitcdHNlcnZlcl93cmFwcGVyPVwiXCJcbitcdGlwZXJmX3BpZD1cIlwiXG4rXHRpZiBbIFwiJHNlcnZlcl9yY1wiIC1uZSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JHNlcnZlcl9yY1wiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcbitcdHNlbmRlcl9yZXRyPSQoZWNobyBcIiRvdXRcIiB8IGF3ayAnL3NlbmRlci8ge3ByaW50ICQoTkYtMSl9JylcbitcdGlmIFsgLXogXCIkc2VuZGVyX3JldHJcIiBdIHx8IFsgXCIkc2VuZGVyX3JldHJcIiAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiByZXRyYW5zbWl0cyBkdXJpbmcgR1NPIHVuZm9sZDogJHtzZW5kZXJfcmV0cjotdW5rbm93bn1cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRlY2hvIFwiJG91dFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcbitcdGVjaG8gXCJJTkZPOiBUQ1Agc3RyZWFtIGNvbXBsZXRlZCB3aXRoIDAgcmV0cmFuc21pdHMgWyBPSyBdXCJcbitcdGVjaG8gXCIkb3V0XCIgfCBncmVwIC1FIFwic2VuZGVyfHJlY2VpdmVyXCJcbit9XG4rXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xuK2NoZWNrX3Rvb2wgZXRodG9vbFxuK2NoZWNrX3Rvb2wgaXBlcmYzXG4rY2hlY2tfdG9vbCB0aW1lb3V0XG4rXG4rIyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LlxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitcbitzZXR1cF90b3BvXG4rXG4rZWNobyBcIklORk86IEluaXRpYWwgdmFsaWRhdGlvbiBwaW5nIChTQU4gLVx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIERVVCkuXCJcbitkb19waW5nIFwiJG5zX3NhblwiIFwiJHBlZXJfaXBcIlxuK3N0b3BfaWZfZXJyb3IgXCJJbml0aWFsIHZhbGlkYXRpb24gZmFpbGVkLlwiXG4rXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXG4rZG9fdHNvX3N0cmVhbV90ZXN0XG4rc3RvcF9pZl9lcnJvciBcIkdTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlwiXG4rXG4rZWNobyBcIklORk86IEFsbCBnb29kLlwiXG4rZXhpdCAkcmV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMDozMDozMC4yODY2NjIzMjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjY2MDc3MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZG9lcy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzIGluIHRoZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjazogYG5ldC9jb3JlL2Rldi5jYCwgYG5ldC9jb3JlL2Rldl9hcGkuY2AsIGFuZCBhIGJ1bmNoIG9mIEhTUi1yZWxhdGVkIGZpbGVzIChgbmV0L2hzci9oc3JfZGV2aWNlLmNgLCBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgYG5ldC9oc3IvaHNyX3NsYXZlLmNgKS4gSXQncyBhbHNvIGFkZGluZyBhIHNlbGZ0ZXN0LCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gVGhlIGFkZGl0aW9ucyBvZiBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBmdW5jdGlvbnMgaW1tZWRpYXRlbHkgZmxhZyBteSBhdHRlbnRpb24sIGFsb25nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBIU1IsIHNwZWNpZmljYWxseSBkaXNhYmxpbmcgR1JPIG9uIHNsYXZlIGRldmljZXMgYW5kIGludHJvZHVjaW5nIEdTTyBmYW4tb3V0IGZ1bm5lbGluZyBpbiBgaHNyX2ZvcndhcmRfc2tiYC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgSFNSIHBhY2tldCBmb3J3YXJkaW5nLCBwYXJ0aWN1bGFybHkgaG93IGl0IGhhbmRsZXMgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBwYWNrZXRzIHdpdGggdGhlIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLiBUaGlzIGlzIGltcG9ydGFudC4gVGhlcmUncyBhbHNvIHNvbWUgbG9ja2luZyBjaGFuZ2VzIGFyb3VuZCBgaHNyLVx1MDAzZXNlcW5yX2xvY2tgLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBIU1IgaXMgcmVhY2hhYmxlIGFuZCBjYW4gYmUgZWZmZWN0aXZlbHkgdGVzdGVkIHdpdGhpbiBhIGZ1enppbmcgY29udGV4dC4gU2luY2UgSFNSIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSwgdGhhdCBtZWFucyBpdCdzIGRlZmluaXRlbHkgYWNjZXNzaWJsZS4gSSByZW1lbWJlciBzZWVpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gY3JlYXRlIGFuIEhTUiBkZXZpY2UgdmlhIG5ldGxpbmsgKHJ0bmV0bGluaykgaW4gdGhlIGluY2x1ZGVkIHNlbGZ0ZXN0OiBgaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMGAuIEV4Y2VsbGVudC4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgSFNSIGRldmljZXMgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LCBtYWtpbmcgaXQgYSB2ZXJ5IHZpYWJsZSB0YXJnZXQuXG5cbk5leHQgc3RlcDogbGV0J3MgZmlndXJlIG91dCB3aGF0IENPTkZJRyBvcHRpb25zIGFyZSBpbnZvbHZlZC4gSSdsbCBkbyBhIHF1aWNrIGBLY29uZmlnYCBzZWFyY2ggZm9yIEhTUi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU2MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjM2Ljk1Mjc0MjA2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODMyMzU5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhTUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL0tjb25maWctNS1cXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXFxubmV0L2hzci9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjM3LjMzNTk4NjI0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjE5MTE5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSFNSIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEkgc2VlIGBDT05GSUdfSFNSYCDigJMgdGhhdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgSFNSIHN0dWZmIGlzIHdvcmtpbmcuXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYSBmZXcgY3JpdGljYWwgZnVuY3Rpb25zLCB0aGUgaGVhcnQgb2YgdGhlIEhTUiBwcm9jZXNzOlxuXG4qICAgYGhzcl9mb3J3YXJkX3NrYmA6IFRoaXMgaXMgcHJvYmFibHkgdGhlIHdvcmtob3JzZSwgaGFuZGxpbmcgdGhlIGZvcndhcmRpbmcgb2YgU0tCcy5cbiogICBgaHNyX2Rldl94bWl0YDogTGlrZWx5IHRoZSBkZXZpY2UgdHJhbnNtaXQgZnVuY3Rpb24uXG4qICAgYGhzcl9oYW5kbGVfZnJhbWVgOiBFc3NlbnRpYWwgZm9yIHByb2Nlc3NpbmcgaW5jb21pbmcgZnJhbWVzLCB0aGUgcmVjZWl2ZXIgc2lkZS5cbiogICBgZGV2X2Rpc2FibGVfZ3JvYCBcdTAwMjYgYG5ldGlmX2Rpc2FibGVfZ3JvYDogVGhlc2UgbGlrZWx5IGRlYWwgd2l0aCBkaXNhYmxpbmcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykuIFdlIGFyZSBkZWFsaW5nIHdpdGggcmVhbC10aW1lIHJlcXVpcmVtZW50cywgYW5kIEdSTyBjb3VsZCBiZSBwcm9ibGVtYXRpYyBoZXJlLlxuXG5JIHRoaW5rIEknbGwgc3RhcnQgd2l0aCBgaHNyX2ZvcndhcmRfc2tiYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCBjb2RlIGlzIGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgIGJhc2VkIG9uIHRoZSBmaWxlIHBhdGguIExldCdzIHNlZSB3aGF0IHRoZSBmb3J3YXJkaW5nIHByb2Nlc3MgaXMgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjQxLjU5NzkwMTMxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjI1MzU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNC1cXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNTpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNi1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MjkxPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2MC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjE6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYyLX1cXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2ND1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM5OC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozOTk6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDAtfVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY3OD1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNS0vKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzY6c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNy17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzY4LSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3Njk6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAte1xcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3My1cXHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NDpcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODAyLVxcdFxcdHNlZ3MtXFx1MDAzZW5leHQgPSBOVUxMO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo4MDM6XFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODA0LVxcdFxcdHNlZ3MgPSBuZXh0O1xcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxNjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNy1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9MjQ9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTc1LVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6NzY6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy03Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjA6MzA6NDEuNjg0MTYwNjQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNjE3MTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlY2VudCBQYXRjaCBmb3IgSFNSIEZvcndhcmRpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUga2V5IGNoYW5nZXMgcmVsYXRlZCB0byBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGZvcndhcmRpbmcuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgdHdvIG5ldyBmdW5jdGlvbnMsIGBoc3JfZm9yd2FyZF9za2JgIGFuZCBgaHNyX2ZvcndhcmRfc2tiX29uZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgaGFuZGxpbmcgU0tCcyAoU29ja2V0IEJ1ZmZlcnMpIGluIHRoZSBIU1IgY29udGV4dC4gVGhpcyBpcyB3aGF0IEkgZXhwZWN0ZWQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLlxuXG5UaGUgZmFjdCB0aGF0IGl0IGFsc28gbW9kaWZpZXMgYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyBjcnVjaWFsLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGF0IHRoZSBoZWFydCBvZiB0cmFuc21pdHRpbmcgYW5kIHJlY2VpdmluZyBmcmFtZXMgd2l0aGluIHRoZSBIU1IgbmV0d29yay4gQW55IGFsdGVyYXRpb24gaGVyZSB3YXJyYW50cyBjbG9zZSBpbnNwZWN0aW9uLCBhcyBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaGluZ2VzIG9uIHRob3NlIG1vZHVsZXMuXG5cbk5vdywgdGhlIGluY2x1c2lvbiBvZiBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvZGV2X2FwaS5jYCwgcmVzcGVjdGl2ZWx5LCBpcyB3aGF0J3MgcGlxdWluZyBteSBpbnRlcmVzdCB0aGUgbW9zdC4gVGhhdOKAmXMgYWJvdXQgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIG9yIEdSTy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IEdSTyBpcyBiZWluZyBkaXNhYmxlZC4gVGhpcyBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaWYgbm90IGNhcmVmdWxseSBtYW5hZ2VkLiBJJ20gZ29pbmcgdG8gZm9jdXMgaW4gb24gYGRldl9kaXNhYmxlX2dyb2AgaW4gYG5ldC9jb3JlL2Rldl9hcGkuY2AuIFRoaXMgY291bGQgYmUgZHVlIHRvIGlzc3VlcyB3aXRoIEhTUidzIGR1cGxpY2F0ZSBmcmFtZSBoYW5kbGluZyBhbmQgR1JPJ3MgYWdncmVnYXRpb24sIG9yIHBlcmhhcHMgaXQncyBhIHNwZWNpZmljIGluY29tcGF0aWJpbGl0eSBpZGVudGlmaWVkIGR1cmluZyB0ZXN0aW5nLiBEaXNhYmxpbmcgR1JPIGlzIGEgdHJhZGVvZmYsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkZXZlbG9wZXLigJlzIHRoaW5raW5nIHdhcywgaW4gZG9pbmcgc28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzMwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjQ2LjIwMDMzMzk0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDM3NjM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE4NDM9dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTg2MS0vKipcXG5uZXQvY29yZS9kZXYuYzoxODYyOiAqXFx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbm5ldC9jb3JlL2Rldi5jLTE4NjMtICpcXHRAZGV2OiBkZXZpY2VcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE4NjgtICovXFxubmV0L2NvcmUvZGV2LmM6MTg2OTpzdGF0aWMgdm9pZCBkZXZfZGlzYWJsZV9ncm9faHcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXYuYy0xODcwLXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTYzNzg9c3RhdGljIGludCBnZW5lcmljX3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02Mzk0LVxcdFxcdFxcdG5ldGlmX2Rpc2FibGVfbHJvKGRldik7XFxubmV0L2NvcmUvZGV2LmM6NjM5NTpcXHRcXHRcXHRkZXZfZGlzYWJsZV9ncm9faHcoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy02Mzk2LVxcdFxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0yNzA9RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI3Mi0vKipcXG5uZXQvY29yZS9kZXZfYXBpLmM6MjczOiAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNzQtICogQGRldjogZGV2aWNlXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjc5LSAqL1xcbm5ldC9jb3JlL2Rldl9hcGkuYzoyODA6dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjgxLXtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODUtfVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoyODY6RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjQ2LjI5MDcxNTU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1MjI0NTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgR1JPIERpc2FibGluZyBQYXRjaCBmb3IgSFNSKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpY2FsbHkgaW52b2tlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgZW5zbGF2ZWQgdW5kZXIgYW4gSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBtYXN0ZXIuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQgdG8gcmVtZW1iZXIgZm9yIGNvbnRleHQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpcyBwcm9wZXJseSBkb2N1bWVudGVkIGFuZCBlYXNpbHkgZGlzY292ZXJhYmxlLiBJJ20gZ29pbmcgdG8gYWRkIHRoZSBrZXkgZnVuY3Rpb25z4oCUYGhzcl9mb3J3YXJkX3NrYmAsIGBoc3JfZGV2X3htaXRgLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGFsb25nIHdpdGggdGhlc2UgbmV3IGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIGZ1bmN0aW9uc+KAlHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGlzIHdheSwgYW55IGVuZ2luZWVyIHdvcmtpbmcgd2l0aCBIU1Igd2lsbCBiZSBhYmxlIHRvIGVhc2lseSBmaW5kIHRoZW0uXG5cblRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzLCBvYnZpb3VzbHksIGBIU1JgLiBJIG11c3QgbWFrZSB0aGF0IGNsZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLiBIb3dldmVyLCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBpdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrLiBJIHNob3VsZCBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIG9yIHBvdGVudGlhbCBjb25mbGljdHMgbHVya2luZy4gVGhpcyB3aWxsIGhlbHAgcHJldmVudCBmdXR1cmUgaXNzdWVzIGFuZCBlbnN1cmUgdGhlIGludGVncmF0aW9uIGlzIGNsZWFuIGFuZCBzdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjUxLjA0Mjk2MzI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NzM1NTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL0tjb25maWctNS1cXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXFxubmV0L2hzci9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjUzLjQ0MDMyNTE2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzc5Nzc0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbnNpZGVyOyB0aGlzIGlzIHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiBkb2VzIHRoZSBwYXRjaCB3b3JrIGFzIGFkdmVydGlzZWQ/IFllcywgaXQgZG9lcy4gVGhpcyB0aGluZyBhY3R1YWxseSBhbHRlcnMgaG93IEhTUiBmb3J3YXJkcyBwYWNrZXRzLCBhbmQgdGhlIGtleSBtb2RpZmljYXRpb24gaXMgdGhhdCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0uIFBsdXMsIGl0IGRpc2FibGVzIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIHRoZSBzbGF2ZSBkZXZpY2VzLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoZSBjb2RlIGl0IHRvdWNoZXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUg4oCTIGEgZ29vZCBzaWduLlxuXG5HaXZlbiB0aGF0IGl0IGludHJvZHVjZXMgdGhlc2Ugc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgY29kZSwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuICBXZSBuZWVkIHRvIHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLiBUaGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgaHNyX2ZvcndhcmRfc2tiYCwgYGhzcl9kZXZfeG1pdGAsIGBoc3JfaGFuZGxlX2ZyYW1lYCwgYGRldl9kaXNhYmxlX2dyb2AsIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiAgVGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZCBpcywgbmF0dXJhbGx5LCBgSFNSYC4gVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiBpdCBtb2RpZmllcyBIU1IncyBmb3J3YXJkaW5nIHBhdGggdG8gYWRkcmVzcyBHU08gYW5kIGRpc2FibGVzIEdSTyBvbiB0aGUgc2xhdmUgZGV2aWNlcy4gVGhlc2UgYXJlIGRlbW9uc3RyYWJsZSwgZnVuY3Rpb25hbCBjaGFuZ2VzLCB3aXRoaW4gcmVhY2hhYmxlIG5ldHdvcmsgY29kZSwgYW5kIHJpcGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTU4LCJPdXRwdXRUb2tlbnMiOjExNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMDozMDo1OC4yMjAxMDI5OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5NjQwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCIsXG4gICAgXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgICBcIm5ldGlmX2Rpc2FibGVfZ3JvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIHBhY2tldCBmb3J3YXJkaW5nIHRvIGhhbmRsZSBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0sIGFuZCBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImhzcl9kZXZfeG1pdFwiLFxuICAgIFwiaHNyX2hhbmRsZV9mcmFtZVwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEhTUiBwYWNrZXQgZm9yd2FyZGluZyB0byBoYW5kbGUgR1NPIHBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtLCBhbmQgZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 20:09:30 +0000 UTC FinishedAt: 2026-07-23 20:30:59 +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": "ba712ecfd942b68b21a4b0a5daaf72f6616cc66d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "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": "ba712ecfd942b68b21a4b0a5daaf72f6616cc66d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "d64daf4c-affc-499b-9bc3-06c937303840" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_forward_skb", "hsr_dev_xmit", "hsr_handle_frame", "dev_disable_gro", "netif_disable_gro" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDIwOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIHBhY2tldCBmb3J3YXJkaW5nIHRvIGhhbmRsZSBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0sIGFuZCBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAwYzhkNjg1OTMyMDM2Y2MwMzdkYTg0ODk3YjEzNThlMWU4MmY3ZWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAyMDozMDoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmViYTJjMjZhNDliYThmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlMS4uYTZjZjJhZGM4NjI1NjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xODQwLDYgJiM0MzsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XG4mIzQzO1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiAoTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVykpKVxuJiM0MztcdFx0bmV0ZGV2X1dBUk4oZGV2LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBHUk8hXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikge1xuJiM0MztcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XG4mIzQzO1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICpcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcbiAgKlx0QGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5pbmRleCA0Mzc5NDdkZDA4ZWQ1My4uMDJmYjIxNjI5NTEyODQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuQEAgLTI2OSw2ICYjNDM7MjY5LDIyIEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuJiM0MzsgKiBAZGV2OiBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlXG4mIzQzOyAqIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWQgcGFja2V0cyBtYXkgYmVcbiYjNDM7ICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4mIzQzO1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4mIzQzO1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4yNDhjYmIxNDJlMjFlMSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICYjNDM7MjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2ItXHUwMDNlZGV2ID0gbWFzdGVyLVx1MDAzZWRldjtcbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbkBAIC0zMzUsNiAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgJiM0MzszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuQEAgLTM5MCw2ICYjNDM7Mzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICYjNDM7MzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gfVxuIFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cbkBAIC02NTksNyAmIzQzOzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbiYjNDM7XHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtoc3JfbWFpbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHNyX2ZyYW1lcmVnLmhcJiMzNDtcbiBcbkBAIC02MjEsOSAmIzQzOzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbiBcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuIFx0XHQvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqL1xuLVx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGZyYW1lLVx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVx1MDAzZXNlcXVlbmNlX25yO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuJiM0MztzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiB7XG4gXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XG4gXG5AQCAtNzYwLDMgJiM0Mzs3NjIsNTAgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG4mIzQzO1xuJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuJiM0MzsgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbiYjNDM7XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxuJiM0MztcdCAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZVxuJiM0MztcdCAqIGludGVybGluay4gQSBzdXBlci1wYWNrZXQgZnJvbSBhIExBTiBzbGF2ZSBtYXkgY2FycnkgcGVyLWZyYW1lXG4mIzQzO1x0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxuJiM0MztcdCAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzXG4mIzQzO1x0ICogcGVyLWZyYW1lIHdpcmUgc2VtYW50aWNzLiBEcm9wIGJvdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfTUFTVEVSIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgIT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XG4mIzQzO1x0ICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9QUlApKVxuJiM0MztcdFx0Z290byBkcm9wX2dzbztcbiYjNDM7XG4mIzQzO1x0LyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWVcbiYjNDM7XHQgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbVxuJiM0MztcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xuJiM0MztcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuJiM0MztcdFx0Z290byBkcm9wX2dzbztcbiYjNDM7XG4mIzQzO1x0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHR3aGlsZSAoc2Vncykge1xuJiM0MztcdFx0bmV4dCA9IHNlZ3MtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xuJiM0MztcdFx0c2VncyA9IG5leHQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2Ryb3BfZ3NvOlxuJiM0MztcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdGtmcmVlX3NrYihza2IpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX3NsYXZlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbkBAIC03MywxNiAmIzQzOzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHR9XG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFxuLVx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcbi1cdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxuLVx0ICovXG4tXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0fVxuJiM0MztcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuIFxuIGZpbmlzaF9jb25zdW1lOlxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG5AQCAtMTcwLDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHJlcylcbiBcdFx0Z290byBmYWlsX3J4X2hhbmRsZXI7XG4gXHRkZXZfZGlzYWJsZV9scm8oZGV2KTtcbiYjNDM7XHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMGQxMDU0NzZlN2M1MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuJiM0MztcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YjBhOWNlZWExY2U1OVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5AQCAtMCwwICYjNDM7MSwyNDkgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVGVzdCBIU1IgaGFuZGxpbmcgb2YgR1JPL0dTTyBzdXBlci1wYWNrZXRzOlxuJiM0MzsjXG4mIzQzOyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuJiM0MzsjICAgICAoZGV2X2Rpc2FibGVfZ3JvKCkpLlxuJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy5cbiYjNDM7IyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbiYjNDM7IyAgICAgc3VwZXItcGFja2V0cykgaXMgdW5mb2xkZWQgYXQgdGhlIEhTUiBmb3J3YXJkIGVudHJ5IGFuZCBkZWxpdmVyZWRcbiYjNDM7IyAgICAgcGVyLWZyYW1lOiB0aGUgdHJhbnNmZXIgY29tcGxldGVzIHdpdGggemVybyByZXRyYW5zbWl0cy5cbiYjNDM7I1xuJiM0MzsjIFRvcG9sb2d5ICgxMDAuNjQuMC4wLzI0KTpcbiYjNDM7I1xuJiM0MzsjICAgbnNfc2FuICAgICAgICAgICAgICAgICAgICBuc19kdXQgICAgICAgICAgICAgICAgICAgICAgbnNfcGVlclxuJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgIGludGVybGluayAgJiM0MzstLS0tLS0tLS0tLS0tLS0mIzQzOyAgTEFOIEEvQiAgJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4mIzQzOyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4mIzQzOyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiM0MzstLS0tLS0tLS0tLS0tLS0mIzQzOyAgICAgICAgICAgJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4mIzQzOyNcbiYjNDM7IyBTQU4gdHJhZmZpYyByZWFjaGVzIG5zX3BlZXIgb25seSB0aHJvdWdoIGhzcjAmIzM5O3MgZm9yd2FyZCBwYXRoXG4mIzQzOyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuJiM0MzsjIGZvcndhcmRlZCBieSB0aGUgRFVULlxuJiM0MztcbiYjNDM7c291cmNlIC4vaHNyX2NvbW1vbi5zaFxuJiM0MztcbiYjNDM7bnNfZHV0PVwmIzM0O2hzci1ncm8tZHV0XCYjMzQ7XG4mIzQzO25zX3Nhbj1cJiMzNDtoc3ItZ3JvLXNhblwmIzM0O1xuJiM0Mztuc19wZWVyPVwmIzM0O2hzci1ncm8tcGVlclwmIzM0O1xuJiM0MztzYW5faXA9XCYjMzQ7MTAwLjY0LjAuMVwmIzM0O1xuJiM0MztwZWVyX2lwPVwmIzM0OzEwMC42NC4wLjNcJiMzNDtcbiYjNDM7aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztzZXJ2ZXJfd3JhcHBlcj1cJiMzNDtcJiMzNDtcbiYjNDM7aXBlcmZfcGlkZmlsZT1cJiMzNDsvdG1wL2hzcl9ncm9faXBlcmYucGlkXCYjMzQ7XG4mIzQzO1xuJiM0MztjbGVhbnVwKClcbiYjNDM7e1xuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFtbIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV07IHRoZW5cbiYjNDM7XHRcdGtpbGwgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRmaVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhXG4mIzQzO1x0XHQjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwXG4mIzQzO1x0XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFx0a2lsbCAtMCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXG4mIzQzO1x0XHRcdHNsZWVwIDAuMVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdFx0a2lsbCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0XHR3YWl0IFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBraWxsIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxuJiM0MztcdCMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucy4gbmV0bnMgIT0gcGlkbnM6IGEgYmxpbmQgcGtpbGxcbiYjNDM7XHQjIHdvdWxkIHNjYW4gdGhlIGhvc3QgUElEIHNwYWNlIGFuZCBoaXQgdW5yZWxhdGVkIHRlc3RzLlxuJiM0MztcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4mIzQzO1x0XHRpZiBbIFwmIzM0OyQoY2F0IC9wcm9jLyRfcC9jb21tIDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7ID0gXCYjMzQ7aXBlcmYzXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFx0a2lsbCBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0ZmlcbiYjNDM7XHRkb25lXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztcdHJtIC1mIFwmIzM0OyR7aXBlcmZfcGlkZmlsZX1cJiMzNDtcbiYjNDM7XHRpcCBuZXRucyBkZWwgXCYjMzQ7JG5zX2R1dFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0aXAgbmV0bnMgZGVsIFwmIzM0OyRuc19zYW5cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskbnNfcGVlclwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO31cbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MztjaGVja190b29sKClcbiYjNDM7e1xuJiM0MztcdGlmICEgY29tbWFuZCAtdiBcJiMzNDskMVwmIzM0OyBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O1NLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxXCYjMzQ7XG4mIzQzO1x0XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mztuc3goKVxuJiM0Mzt7XG4mIzQzO1x0aXAgbmV0bnMgZXhlYyBcJiMzNDskMVwmIzM0OyBiYXNoIC1jIFwmIzM0OyQyXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX3RvcG8oKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnNcbiYjNDM7XG4mIzQzO1x0Y2xlYW51cFxuJiM0MztcdGZvciBucyBpbiBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7JG5zX3BlZXJcJiMzNDs7IGRvXG4mIzQzO1x0XHRpcCBuZXRucyBhZGQgXCYjMzQ7JG5zXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX2EgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyBcJiMzNDskbnNfcGVlclwmIzM0O1xuJiM0MztcdGlwIGxpbmsgYWRkIGRfYiBuZXRucyBcJiMzNDskbnNfZHV0XCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zIFwmIzM0OyRuc19wZWVyXCYjMzQ7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9pbCBuZXRucyBcJiMzNDskbnNfZHV0XCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgXCYjMzQ7JG5zX3NhblwmIzM0O1xuJiM0MztcbiYjNDM7XHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXG4mIzQzO1x0Zm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvXG4mIzQzO1x0XHRuc3ggXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7XHRmb3IgaWZhY2UgaW4gcF9hIHBfYjsgZG9cbiYjNDM7XHRcdG5zeCBcJiMzNDskbnNfcGVlclwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgZF9pbCB1cFwmIzM0O1xuJiM0MztcdG5zeCBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMFwmIzM0O1xuJiM0MztcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDtpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIFxcXG4mIzQzO1x0XHRzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXFxcbiYjNDM7XHRcdGlwIGxpbmsgc2V0IGhzcjAgdXBcJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3BlZXJcJiMzNDsgXCYjMzQ7aXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcXFxuJiM0MztcdFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXG4mIzQzO1x0XHRpcCBsaW5rIHNldCBoc3IxIHVwOyBpcCBhZGRyIGFkZCAkcGVlcl9pcC8yNCBkZXYgaHNyMVwmIzM0O1xuJiM0MztcbiYjNDM7XHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXImIzM5O3Mgc3VwZXJ2aXNpb24gZnJhbWVzLlxuJiM0MztcdHNsZWVwIDJcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hlY2tfZmVhdHVyZSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIGlmYWNlPVwmIzM0OyQyXCYjMzQ7XG4mIzQzO1x0bG9jYWwgZmVhdHVyZT1cJiMzNDskM1wmIzM0O1xuJiM0MztcdGxvY2FsIHdhbnQ9XCYjMzQ7JDRcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgbnN4IFwmIzM0OyRuc1wmIzM0OyBcJiMzNDtldGh0b29sIC1rICRpZmFjZVwmIzM0OyB8IGdyZXAgLXEgXCYjMzQ7XiRmZWF0dXJlOiAkd2FudFwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzICR3YW50IFsgT0sgXVwmIzM0O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcbiYjNDM7e1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7R1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwmIzM0O1xuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0hXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7SFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy9UU08uXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4mIzQzO3tcbiYjNDM7XHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHJlY29yZCBpdHMgZXhhY3QgUElEIChuZXRucyBzaGFyZXMgdGhlIFBJRFxuJiM0MztcdCMgbmFtZXNwYWNlKS4gVGhlIHdyYXBwaW5nIHNoZWxsIHdhaXRzIG9uIHRoZSBzZXJ2ZXIgc28gdGhlIHNjcmlwdCBjYW5cbiYjNDM7XHQjIHJlYWxseSB3YWl0KDEpIGZvciB0aGUgd2hvbGUgdHJlZSwgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSBhbGlrZS5cbiYjNDM7XHRybSAtZiBcJiMzNDske2lwZXJmX3BpZGZpbGV9XCYjMzQ7XG4mIzQzO1x0KCBuc3ggXCYjMzQ7JG5zX3BlZXJcJiMzNDsgXCYjMzQ7aXBlcmYzIC1zIC0xIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IGVjaG8gXFwkISBcdTAwM2UgJHtpcGVyZl9waWRmaWxlfTsgd2FpdFwmIzM0OyApIFx1MDAyNlxuJiM0MztcdHNlcnZlcl93cmFwcGVyPSQhXG4mIzQzO1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4mIzQzO1x0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcbiYjNDM7XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFsgLXMgXCYjMzQ7JHtpcGVyZl9waWRmaWxlfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBicmVha1xuJiM0MztcdFx0c2xlZXAgMC4xXG4mIzQzO1x0ZG9uZVxuJiM0MztcdGlmIFsgISAtcyBcJiMzNDske2lwZXJmX3BpZGZpbGV9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQgKG5vIHBpZGZpbGUpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGlwZXJmX3BpZD0kKGNhdCBcJiMzNDske2lwZXJmX3BpZGZpbGV9XCYjMzQ7KVxuJiM0MztcdGlmICEgW1sgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCAhIGtpbGwgLTAgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2lwZXJmX3BpZH0mIzM5OyBpbnZhbGlkIG9yIG5vdCBhbGl2ZVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZG9fdHNvX3N0cmVhbV90ZXN0KClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG91dCBzZW5kZXJfcmV0clxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvblxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7Q291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogUnVubmluZyAxMHMgVENQIHN0cmVhbSBTQU4gLVx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuXCYjMzQ7XG4mIzQzO1x0c3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuJiM0MztcdFx0IyByYXRlLWNhcHBlZDogdGhlIGRpc2NyaW1pbmF0b3IgaXMgcGVyLWZyYW1lIHVuZm9sZCAoY29tcGxldGlvbiB3aXRoXG4mIzQzO1x0IyAwIHJldHJhbnNtaXRzKSwgbm90IG1heCB0aHJvdWdocHV0OyB1bmNhcHBlZCBydW5zIGZsYXAgYXQgVk0vQ0lcbiYjNDM7XHQjIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGEgZnVuY3Rpb25hbCBwcm9ibGVtLlxuJiM0MztcdG91dD0kKG5zeCBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgLWIgMkcgLXQgMTBcJiMzNDsgMlx1MDAzZVx1MDAyNjEpXG4mIzQzO1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOlwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0IyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFsbHkgd2FpdCBmb3JcbiYjNDM7XHQjIHRoZSB3cmFwcGVyIHRvIHJlYXAgaXQsIGFuZCBjaGVjayBpdHMgZXhpdCBzdGF0dXNcbiYjNDM7XHR3YWl0IFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7XG4mIzQzO1x0c2VydmVyX3JjPSQ/XG4mIzQzO1x0c2VydmVyX3dyYXBwZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztcdGlmIFsgXCYjMzQ7JHNlcnZlcl9yY1wmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JHNlcnZlcl9yY1wmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdHNlbmRlcl9yZXRyPSQoZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgYXdrICYjMzk7L3NlbmRlci8ge3ByaW50ICQoTkYtMSl9JiMzOTspXG4mIzQzO1x0aWYgWyAteiBcJiMzNDskc2VuZGVyX3JldHJcJiMzNDsgXSB8fCBbIFwmIzM0OyRzZW5kZXJfcmV0clwmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IHJldHJhbnNtaXRzIGR1cmluZyBHU08gdW5mb2xkOiAke3NlbmRlcl9yZXRyOi11bmtub3dufVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGNvbXBsZXRlZCB3aXRoIDAgcmV0cmFuc21pdHMgWyBPSyBdXCYjMzQ7XG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtRSBcJiMzNDtzZW5kZXJ8cmVjZWl2ZXJcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlc1xuJiM0MztjaGVja190b29sIGV0aHRvb2xcbiYjNDM7Y2hlY2tfdG9vbCBpcGVyZjNcbiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0XG4mIzQzO1xuJiM0MzsjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXG4mIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0dXBfdG9wb1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBEVVQpLlwmIzM0O1xuJiM0Mztkb19waW5nIFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7JHBlZXJfaXBcJiMzNDtcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtJbml0aWFsIHZhbGlkYXRpb24gZmFpbGVkLlwmIzM0O1xuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXG4mIzQzO2RvX3Rzb19zdHJlYW1fdGVzdFxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O0dTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlwmIzM0O1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBBbGwgZ29vZC5cJiMzNDtcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIHBhY2tldCBmb3J3YXJkaW5nIHRvIGhhbmRsZSBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0sIGFuZCBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDBjOGQ2ODU5MzIwMzZjYzAzN2RhODQ4OTdiMTM1OGUxZTgyZjdlYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDIwOjMwOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmViYTJjMjZhNDliYThmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7CiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7CiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlMS4uYTZjZjJhZGM4NjI1NjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xODQwLDYgJiM0MzsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAl9CiB9CiAKJiM0Mzt2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwomIzQzOwomIzQzOwlkZXYtJmd0O3dhbnRlZF9mZWF0dXJlcyAmYW1wOz0gfihORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKTsKJiM0MzsJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoZGV2LSZndDtmZWF0dXJlcyAmYW1wOyAoTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVykpKQomIzQzOwkJbmV0ZGV2X1dBUk4oZGV2LCAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIEdSTyFcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikgewomIzQzOwkJbmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7CiYjNDM7CQluZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICoJZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQogICoJQGRldjogZGV2aWNlCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmMKaW5kZXggNDM3OTQ3ZGQwOGVkNTMuLjAyZmIyMTYyOTUxMjg0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2X2FwaS5jCkBAIC0yNjksNiAmIzQzOzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pOwogCiYjNDM7LyoqCiYjNDM7ICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlCiYjNDM7ICogQGRldjogZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBEaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0IGRldmljZS4gIE11c3QgYmUKJiM0MzsgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlCiYjNDM7ICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJbmV0aWZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pOwomIzQzOwogLyoqCiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2UKICAqIEBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwppbmRleCA1NTU1YjcxYWIxOWI1OS4uMjQ4Y2JiMTQyZTIxZTEgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2RldmljZS5jCkBAIC0yMzIsOSAmIzQzOzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJc2tiLSZndDtkZXYgPSBtYXN0ZXItJmd0O2RldjsKIAkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAkJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKLQkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAkJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCX0gZWxzZSB7CiAJCWRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0zMzUsNiAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzZXF1ZW5jZV9ucik7CiAJCWhzci0mZ3Q7c2VxdWVuY2VfbnImIzQzOyYjNDM7OwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX3R5cGUgPSB0eXBlOwogCS8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovCkBAIC0zNTYsMTQgJiM0MzszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LAogCQlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIGhzci0mZ3Q7bWFjYWRkcmVzc19yZWRib3gpOwogCX0KIAotCWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKJiM0MzsJaWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpCiAJCXJldHVybjsKLQl9CiAKIAloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKQEAgLTM5MCw2ICYjNDM7Mzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCiAJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAloc3Jfc3RhZy0mZ3Q7c2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItJmd0O3N1cF9zZXF1ZW5jZV9ucik7CiAJaHNyLSZndDtzdXBfc2VxdWVuY2VfbnImIzQzOyYjNDM7OwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7CiAJaHNyX3N0YWctJmd0O3Rsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTsKIApAQCAtMzk3LDEzICYjNDM7MzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCWhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpOwogCWV0aGVyX2FkZHJfY29weShoc3Jfc3AtJmd0O21hY2FkZHJlc3NfQSwgbWFzdGVyLSZndDtkZXYtJmd0O2Rldl9hZGRyKTsKIAotCWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKJiM0MzsJaWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpCiAJCXJldHVybjsKLQl9CiAKIAloc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpOwotCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIH0KIAogLyogQW5ub3VuY2UgKHN1cGVydmlzaW9uIGZyYW1lKSB0aW1lciBmdW5jdGlvbgpAQCAtNjU5LDcgJiM0Mzs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlkZXYtJmd0O25lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTsKIAogCWRldi0mZ3Q7aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8Ci0JCQkgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHwKJiM0MzsJCQkgICBORVRJRl9GX0hXX0NTVU0gfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSOwogCmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZ3NvLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2hzcl9tYWluLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoc3JfZnJhbWVyZWcuaCYjMzQ7CiAKQEAgLTYyMSw5ICYjNDM7NjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAocG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8CiAJICAgIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewogCQkvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqLwotCQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWZyYW1lLSZndDtzZXF1ZW5jZV9uciA9IGhzci0mZ3Q7c2VxdWVuY2VfbnI7CiAJCWhzci0mZ3Q7c2VxdWVuY2VfbnImIzQzOyYjNDM7OwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCX0KIH0KIApAQCAtNzMxLDcgJiM0Mzs3MzMsNyBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLAogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqLwotdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQomIzQzO3N0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBoc3JfZnJhbWVfaW5mbyBmcmFtZTsKIApAQCAtNzYwLDMgJiM0Mzs3NjIsNTAgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogCXBvcnQtJmd0O2Rldi0mZ3Q7c3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CiYjNDM7CiYjNDM7LyogR1NPIGZhbi1vdXQgZnVubmVsOiB1bmZvbGQgc3VwZXItcGFja2V0cyBiZWZvcmUgcGVyLWZyYW1lIHByb2Nlc3Npbmcgc28KJiM0MzsgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuCiYjNDM7ICovCiYjNDM7dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0OwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVW5mb2xkIG9ubHkgcGxhaW4tRXRoZXJuZXQgR1NPIHN1cGVyLXBhY2tldHM6IGxvY2FsbHkgZ2VuZXJhdGVkCiYjNDM7CSAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZQomIzQzOwkgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZQomIzQzOwkgKiBIU1IgdGFncyAvIFBSUCBSQ1QgdHJhaWxlcnMgdGhhdCBzb2Z0d2FyZSBzZWdtZW50YXRpb24gY2Fubm90CiYjNDM7CSAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzCiYjNDM7CSAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBvcnQtJmd0O3R5cGUgIT0gSFNSX1BUX01BU1RFUiAmYW1wOyZhbXA7IHBvcnQtJmd0O3R5cGUgIT0gSFNSX1BUX0lOVEVSTElOSykKJiM0MzsJCWdvdG8gZHJvcF9nc287CiYjNDM7CWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0hTUikgfHwKJiM0MzsJICAgIHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSkKJiM0MzsJCWdvdG8gZHJvcF9nc287CiYjNDM7CiYjNDM7CS8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlCiYjNDM7CSAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tCiYjNDM7CSAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuCiYjNDM7CSAqLwomIzQzOwlzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIpOwomIzQzOwlpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSkKJiM0MzsJCWdvdG8gZHJvcF9nc287CiYjNDM7CiYjNDM7CWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CXdoaWxlIChzZWdzKSB7CiYjNDM7CQluZXh0ID0gc2Vncy0mZ3Q7bmV4dDsKJiM0MzsJCXNlZ3MtJmd0O25leHQgPSBOVUxMOwomIzQzOwkJaHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTsKJiM0MzsJCXNlZ3MgPSBuZXh0OwomIzQzOwl9CiYjNDM7CXJldHVybjsKJiM0MzsKJiM0Mztkcm9wX2dzbzoKJiM0MzsJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJa2ZyZWVfc2tiKHNrYik7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKaW5kZXggZDlhZjllNjVmNzJmMDcuLmM3ZmQwMjFmMDNiMWY0IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAl9CiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAotCS8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhCi0JICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuCi0JICovCi0JaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewotCQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCX0gZWxzZSB7Ci0JCWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwotCX0KJiM0MzsJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7CiAKIGZpbmlzaF9jb25zdW1lOgogCXJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEOwpAQCAtMTcwLDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChyZXMpCiAJCWdvdG8gZmFpbF9yeF9oYW5kbGVyOwogCWRldl9kaXNhYmxlX2xybyhkZXYpOwomIzQzOwlkZXZfZGlzYWJsZV9ncm8oZGV2KTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQppbmRleCAzMWZiOTMyNmNmNTMzZC4uMGQxMDU0NzZlN2M1MGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQpAQCAtMyw2ICYjNDM7Myw3IEBACiB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi4KIAogVEVTVF9QUk9HUyA6PSBcCiYjNDM7CWhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXAogCWhzcl9waW5nLnNoIFwKIAloc3JfcmVkYm94LnNoIFwKIAlsaW5rX2ZhdWx0cy5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRiMGE5Y2VlYTFjZTU5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCkBAIC0wLDAgJiM0MzsxLDI0OSBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czoKJiM0MzsjCiYjNDM7IyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0CiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS4KJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy4KJiM0MzsjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTTwomIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeSBhbmQgZGVsaXZlcmVkCiYjNDM7IyAgICAgcGVyLWZyYW1lOiB0aGUgdHJhbnNmZXIgY29tcGxldGVzIHdpdGggemVybyByZXRyYW5zbWl0cy4KJiM0MzsjCiYjNDM7IyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6CiYjNDM7IwomIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyCiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICBpbnRlcmxpbmsgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgIExBTiBBL0IgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXwKJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHwKJiM0MzsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMKJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGgKJiM0MzsjIChpbnRlcmxpbmsgUlggLSZndDsgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kCiYjNDM7IyBmb3J3YXJkZWQgYnkgdGhlIERVVC4KJiM0MzsKJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoCiYjNDM7CiYjNDM7bnNfZHV0PSYjMzQ7aHNyLWdyby1kdXQmIzM0OwomIzQzO25zX3Nhbj0mIzM0O2hzci1ncm8tc2FuJiMzNDsKJiM0Mztuc19wZWVyPSYjMzQ7aHNyLWdyby1wZWVyJiMzNDsKJiM0MztzYW5faXA9JiMzNDsxMDAuNjQuMC4xJiMzNDsKJiM0MztwZWVyX2lwPSYjMzQ7MTAwLjY0LjAuMyYjMzQ7CiYjNDM7aXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MztzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7aXBlcmZfcGlkZmlsZT0mIzM0Oy90bXAvaHNyX2dyb19pcGVyZi5waWQmIzM0OwomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJaWYgWyAtbiAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IF0gJmFtcDsmYW1wOyBbWyAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXTsgdGhlbgomIzQzOwkJa2lsbCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWZpCiYjNDM7CWlmIFsgLW4gJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IF07IHRoZW4KJiM0MzsJCSMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXMgYm91bmQgc28gYQomIzQzOwkJIyBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgY2xlYW51cAomIzQzOwkJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQkJa2lsbCAtMCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJCQlzbGVlcCAwLjEKJiM0MzsJCWRvbmUKJiM0MzsJCWtpbGwgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQl3YWl0ICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJc2VydmVyX3dyYXBwZXI9JiMzNDsmIzM0OwomIzQzOwlmaQomIzQzOwkjIGxhc3QgcmVzb3J0LCBuYW1lc3BhY2Utc2NvcGVkIG9ubHk6IGtpbGwgaXBlcmYzIHByb2Nlc3NlcyB0aGF0CiYjNDM7CSMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucy4gbmV0bnMgIT0gcGlkbnM6IGEgYmxpbmQgcGtpbGwKJiM0MzsJIyB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy4KJiM0MzsJZm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyAmIzM0OyRuc19wZWVyJiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJaWYgWyAmIzM0OyQoY2F0IC9wcm9jLyRfcC9jb21tIDImZ3Q7L2Rldi9udWxsKSYjMzQ7ID0gJiMzNDtpcGVyZjMmIzM0OyBdOyB0aGVuCiYjNDM7CQkJa2lsbCAmIzM0OyRfcCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQlmaQomIzQzOwlkb25lCiYjNDM7CWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CXJtIC1mICYjMzQ7JHtpcGVyZl9waWRmaWxlfSYjMzQ7CiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyRuc19kdXQmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlpcCBuZXRucyBkZWwgJiMzNDskbnNfc2FuJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJaXAgbmV0bnMgZGVsICYjMzQ7JG5zX3BlZXImIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzO30KJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO2NoZWNrX3Rvb2woKQomIzQzO3sKJiM0MzsJaWYgISBjb21tYW5kIC12ICYjMzQ7JDEmIzM0OyAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxJiMzNDsKJiM0MzsJCWV4aXQgJGtzZnRfc2tpcAomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mztuc3goKQomIzQzO3sKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyQxJiMzNDsgYmFzaCAtYyAmIzM0OyQyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfdG9wbygpCiYjNDM7ewomIzQzOwlsb2NhbCBucwomIzQzOwomIzQzOwljbGVhbnVwCiYjNDM7CWZvciBucyBpbiAmIzM0OyRuc19kdXQmIzM0OyAmIzM0OyRuc19zYW4mIzM0OyAmIzM0OyRuc19wZWVyJiMzNDs7IGRvCiYjNDM7CQlpcCBuZXRucyBhZGQgJiMzNDskbnMmIzM0OwomIzQzOwlkb25lCiYjNDM7CiYjNDM7CWlwIGxpbmsgYWRkIGRfYSBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyAmIzM0OyRuc19wZWVyJiMzNDsKJiM0MzsJaXAgbGluayBhZGQgZF9iIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zICYjMzQ7JG5zX3BlZXImIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX2lsIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgJiMzNDskbnNfc2FuJiMzNDsKJiM0MzsKJiM0MzsJIyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLgomIzQzOwlmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG8KJiM0MzsJCW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgaXAgbGluayBzZXQgJGlmYWNlIHVwJiMzNDsKJiM0MzsJZG9uZQomIzQzOwlmb3IgaWZhY2UgaW4gcF9hIHBfYjsgZG8KJiM0MzsJCW5zeCAmIzM0OyRuc19wZWVyJiMzNDsgJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cCYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgZF9pbCB1cCYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O2lwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMCYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXAomIzQzOwkJc2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFwKJiM0MzsJCWlwIGxpbmsgc2V0IGhzcjAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfcGVlciYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXAomIzQzOwkJaXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjEmIzM0OwomIzQzOwomIzQzOwkjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXImIzM5O3Mgc3VwZXJ2aXNpb24gZnJhbWVzLgomIzQzOwlzbGVlcCAyCiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2ZlYXR1cmUoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCB3YW50PSYjMzQ7JDQmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiAkd2FudCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF0mIzM0OwomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKCkKJiM0Mzt7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0dSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy4mIzM0OwomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYiByeC1ncm8taHcgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCByeC1ncm8taHcgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPL1RTTy4mIzM0OwomIzQzO30KJiM0MzsKJiM0MztzdGFydF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJIyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiByZWNvcmQgaXRzIGV4YWN0IFBJRCAobmV0bnMgc2hhcmVzIHRoZSBQSUQKJiM0MzsJIyBuYW1lc3BhY2UpLiBUaGUgd3JhcHBpbmcgc2hlbGwgd2FpdHMgb24gdGhlIHNlcnZlciBzbyB0aGUgc2NyaXB0IGNhbgomIzQzOwkjIHJlYWxseSB3YWl0KDEpIGZvciB0aGUgd2hvbGUgdHJlZSwgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSBhbGlrZS4KJiM0MzsJcm0gLWYgJiMzNDske2lwZXJmX3BpZGZpbGV9JiMzNDsKJiM0MzsJKCBuc3ggJiMzNDskbnNfcGVlciYjMzQ7ICYjMzQ7aXBlcmYzIC1zIC0xICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxICZhbXA7IGVjaG8gXCQhICZndDsgJHtpcGVyZl9waWRmaWxlfTsgd2FpdCYjMzQ7ICkgJmFtcDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JCEKJiM0MzsJIyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvCiYjNDM7CSMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJWyAtcyAmIzM0OyR7aXBlcmZfcGlkZmlsZX0mIzM0OyBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWlmIFsgISAtcyAmIzM0OyR7aXBlcmZfcGlkZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQgKG5vIHBpZGZpbGUpJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwlpcGVyZl9waWQ9JChjYXQgJiMzNDske2lwZXJmX3BpZGZpbGV9JiMzNDspCiYjNDM7CWlmICEgW1sgJiMzNDske2lwZXJmX3BpZH0mIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgISBraWxsIC0wICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAmIzM5OyR7aXBlcmZfcGlkfSYjMzk7IGludmFsaWQgb3Igbm90IGFsaXZlJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwlzbGVlcCAxCiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO2RvX3Rzb19zdHJlYW1fdGVzdCgpCiYjNDM7ewomIzQzOwlsb2NhbCBvdXQgc2VuZGVyX3JldHIKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19zYW4mIzM0OyBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtJmd0OyBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuJiMzNDsKJiM0MzsJc3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVybgomIzQzOwkJIyByYXRlLWNhcHBlZDogdGhlIGRpc2NyaW1pbmF0b3IgaXMgcGVyLWZyYW1lIHVuZm9sZCAoY29tcGxldGlvbiB3aXRoCiYjNDM7CSMgMCByZXRyYW5zbWl0cyksIG5vdCBtYXggdGhyb3VnaHB1dDsgdW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJCiYjNDM7CSMgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYSBmdW5jdGlvbmFsIHByb2JsZW0uCiYjNDM7CW91dD0kKG5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgLWIgMkcgLXQgMTAmIzM0OyAyJmd0OyZhbXA7MSkKJiM0MzsJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWVjaG8gJiMzNDskb3V0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsKJiM0MzsJIyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFsbHkgd2FpdCBmb3IKJiM0MzsJIyB0aGUgd3JhcHBlciB0byByZWFwIGl0LCBhbmQgY2hlY2sgaXRzIGV4aXQgc3RhdHVzCiYjNDM7CXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7CiYjNDM7CXNlcnZlcl9yYz0kPwomIzQzOwlzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7CWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CWlmIFsgJiMzNDskc2VydmVyX3JjJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JHNlcnZlcl9yYyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXNlbmRlcl9yZXRyPSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGF3ayAmIzM5Oy9zZW5kZXIvIHtwcmludCAkKE5GLTEpfSYjMzk7KQomIzQzOwlpZiBbIC16ICYjMzQ7JHNlbmRlcl9yZXRyJiMzNDsgXSB8fCBbICYjMzQ7JHNlbmRlcl9yZXRyJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IHJldHJhbnNtaXRzIGR1cmluZyBHU08gdW5mb2xkOiAke3NlbmRlcl9yZXRyOi11bmtub3dufSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGNvbXBsZXRlZCB3aXRoIDAgcmV0cmFuc21pdHMgWyBPSyBdJiMzNDsKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLUUgJiMzNDtzZW5kZXJ8cmVjZWl2ZXImIzM0OwomIzQzO30KJiM0MzsKJiM0MztjaGVja19wcmVyZXF1aXNpdGVzCiYjNDM7Y2hlY2tfdG9vbCBldGh0b29sCiYjNDM7Y2hlY2tfdG9vbCBpcGVyZjMKJiM0MztjaGVja190b29sIHRpbWVvdXQKJiM0MzsKJiM0MzsjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguCiYjNDM7aWYgISBpcCBsaW5rIGhlbHAgaHNyIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBpcHJvdXRlMiBoYXMgbm8gSFNSIGludGVybGluayBzdXBwb3J0JiMzNDsKJiM0MzsJZXhpdCAka3NmdF9za2lwCiYjNDM7ZmkKJiM0MzsKJiM0MztzZXR1cF90b3BvCiYjNDM7CiYjNDM7ZWNobyAmIzM0O0lORk86IEluaXRpYWwgdmFsaWRhdGlvbiBwaW5nIChTQU4gLSZndDsgcGVlciB0aHJvdWdoIHRoZSBEVVQpLiYjMzQ7CiYjNDM7ZG9fcGluZyAmIzM0OyRuc19zYW4mIzM0OyAmIzM0OyRwZWVyX2lwJiMzNDsKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7SW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrcwomIzQzO2RvX3Rzb19zdHJlYW1fdGVzdAomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBBbGwgZ29vZC4mIzM0OwomIzQzO2V4aXQgJHJldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTYzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGRvZXMuIFRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyBpbiB0aGUga2VybmVsIG5ldHdvcmtpbmcgc3RhY2s6IGBuZXQvY29yZS9kZXYuY2AsIGBuZXQvY29yZS9kZXZfYXBpLmNgLCBhbmQgYSBidW5jaCBvZiBIU1ItcmVsYXRlZCBmaWxlcyAoYG5ldC9oc3IvaHNyX2RldmljZS5jYCwgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYCkuIEl0JiMzOTtzIGFsc28gYWRkaW5nIGEgc2VsZnRlc3QsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBUaGUgYWRkaXRpb25zIG9mIGBuZXRpZl9kaXNhYmxlX2dyb2AgYW5kIGBkZXZfZGlzYWJsZV9ncm9gIGZ1bmN0aW9ucyBpbW1lZGlhdGVseSBmbGFnIG15IGF0dGVudGlvbiwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIEhTUiwgc3BlY2lmaWNhbGx5IGRpc2FibGluZyBHUk8gb24gc2xhdmUgZGV2aWNlcyBhbmQgaW50cm9kdWNpbmcgR1NPIGZhbi1vdXQgZnVubmVsaW5nIGluIGBoc3JfZm9yd2FyZF9za2JgLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgSFNSIHBhY2tldCBmb3J3YXJkaW5nLCBwYXJ0aWN1bGFybHkgaG93IGl0IGhhbmRsZXMgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBwYWNrZXRzIHdpdGggdGhlIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLiBUaGlzIGlzIGltcG9ydGFudC4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIGxvY2tpbmcgY2hhbmdlcyBhcm91bmQgYGhzci0mZ3Q7c2VxbnJfbG9ja2AsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgSFNSIGlzIHJlYWNoYWJsZSBhbmQgY2FuIGJlIGVmZmVjdGl2ZWx5IHRlc3RlZCB3aXRoaW4gYSBmdXp6aW5nIGNvbnRleHQuIFNpbmNlIEhTUiBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIHRoYXQgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLiBJIHJlbWVtYmVyIHNlZWluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBjcmVhdGUgYW4gSFNSIGRldmljZSB2aWEgbmV0bGluayAocnRuZXRsaW5rKSBpbiB0aGUgaW5jbHVkZWQgc2VsZnRlc3Q6IGBpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwYC4gRXhjZWxsZW50LiBUaGF0IG1lYW5zIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSBIU1IgZGV2aWNlcyBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQsIG1ha2luZyBpdCBhIHZlcnkgdmlhYmxlIHRhcmdldC4KCk5leHQgc3RlcDogbGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hhdCBDT05GSUcgb3B0aW9ucyBhcmUgaW52b2x2ZWQuIEkmIzM5O2xsIGRvIGEgcXVpY2sgYEtjb25maWdgIHNlYXJjaCBmb3IgSFNSLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIU1ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkhTUiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpSaWdodCwgc28gSSBzZWUgYENPTkZJR19IU1JgIOKAkyB0aGF0JiMzOTtzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgSFNSIHN0dWZmIGlzIHdvcmtpbmcuCgpNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGEgZmV3IGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIGhlYXJ0IG9mIHRoZSBIU1IgcHJvY2VzczoKCiogICBgaHNyX2ZvcndhcmRfc2tiYDogVGhpcyBpcyBwcm9iYWJseSB0aGUgd29ya2hvcnNlLCBoYW5kbGluZyB0aGUgZm9yd2FyZGluZyBvZiBTS0JzLgoqICAgYGhzcl9kZXZfeG1pdGA6IExpa2VseSB0aGUgZGV2aWNlIHRyYW5zbWl0IGZ1bmN0aW9uLgoqICAgYGhzcl9oYW5kbGVfZnJhbWVgOiBFc3NlbnRpYWwgZm9yIHByb2Nlc3NpbmcgaW5jb21pbmcgZnJhbWVzLCB0aGUgcmVjZWl2ZXIgc2lkZS4KKiAgIGBkZXZfZGlzYWJsZV9ncm9gICZhbXA7IGBuZXRpZl9kaXNhYmxlX2dyb2A6IFRoZXNlIGxpa2VseSBkZWFsIHdpdGggZGlzYWJsaW5nIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pLiBXZSBhcmUgZGVhbGluZyB3aXRoIHJlYWwtdGltZSByZXF1aXJlbWVudHMsIGFuZCBHUk8gY291bGQgYmUgcHJvYmxlbWF0aWMgaGVyZS4KCkkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgd2l0aCBgaHNyX2ZvcndhcmRfc2tiYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCBjb2RlIGlzIGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgIGJhc2VkIG9uIHRoZSBmaWxlIHBhdGguIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZm9yd2FyZGluZyBwcm9jZXNzIGlzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzQtXHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMzU6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzYtXHR9IGVsc2Uge1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5MT1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYwLVxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzYxOlx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjItfVxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2ND1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3Rlcixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zOTgtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozOTk6XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtNDAwLX1cbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Njc4PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNS0vKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjczNjpzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03Mzcte1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NjgtICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzY5OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAte1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzMtXHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc0Olx0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc1LVx0XHRyZXR1cm47XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTgwMi1cdFx0c2Vncy1cdTAwM2VuZXh0ID0gTlVMTDtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo4MDM6XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODA0LVx0XHRzZWdzID0gbmV4dDtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTUtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTY6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNy1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTI0PXN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmMtNzUtXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjc2Olx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjZW50IFBhdGNoIGZvciBIU1IgRm9yd2FyZGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUga2V5IGNoYW5nZXMgcmVsYXRlZCB0byBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGZvcndhcmRpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIHR3byBuZXcgZnVuY3Rpb25zLCBgaHNyX2ZvcndhcmRfc2tiYCBhbmQgYGhzcl9mb3J3YXJkX3NrYl9vbmVgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIFNLQnMgKFNvY2tldCBCdWZmZXJzKSBpbiB0aGUgSFNSIGNvbnRleHQuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZS4KClRoZSBmYWN0IHRoYXQgaXQgYWxzbyBtb2RpZmllcyBgaHNyX2Rldl94bWl0YCBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIGlzIGNydWNpYWwuIFRob3NlIGZ1bmN0aW9ucyBhcmUgYXQgdGhlIGhlYXJ0IG9mIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nIGZyYW1lcyB3aXRoaW4gdGhlIEhTUiBuZXR3b3JrLiBBbnkgYWx0ZXJhdGlvbiBoZXJlIHdhcnJhbnRzIGNsb3NlIGluc3BlY3Rpb24sIGFzIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eSBoaW5nZXMgb24gdGhvc2UgbW9kdWxlcy4KCk5vdywgdGhlIGluY2x1c2lvbiBvZiBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvZGV2X2FwaS5jYCwgcmVzcGVjdGl2ZWx5LCBpcyB3aGF0JiMzOTtzIHBpcXVpbmcgbXkgaW50ZXJlc3QgdGhlIG1vc3QuIFRoYXTigJlzIGFib3V0IEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkLCBvciBHUk8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSBHUk8gaXMgYmVpbmcgZGlzYWJsZWQuIFRoaXMgY2FuIGhhdmUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGlmIG5vdCBjYXJlZnVsbHkgbWFuYWdlZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiBgZGV2X2Rpc2FibGVfZ3JvYCBpbiBgbmV0L2NvcmUvZGV2X2FwaS5jYC4gVGhpcyBjb3VsZCBiZSBkdWUgdG8gaXNzdWVzIHdpdGggSFNSJiMzOTtzIGR1cGxpY2F0ZSBmcmFtZSBoYW5kbGluZyBhbmQgR1JPJiMzOTtzIGFnZ3JlZ2F0aW9uLCBvciBwZXJoYXBzIGl0JiMzOTtzIGEgc3BlY2lmaWMgaW5jb21wYXRpYmlsaXR5IGlkZW50aWZpZWQgZHVyaW5nIHRlc3RpbmcuIERpc2FibGluZyBHUk8gaXMgYSB0cmFkZW9mZiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRldmVsb3BlcuKAmXMgdGhpbmtpbmcgd2FzLCBpbiBkb2luZyBzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAyMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MTg0Mz12b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTg2MS0vKipcbm5ldC9jb3JlL2Rldi5jOjE4NjI6ICpcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2Vcbm5ldC9jb3JlL2Rldi5jLTE4NjMtICpcdEBkZXY6IGRldmljZVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE4NjgtICovXG5uZXQvY29yZS9kZXYuYzoxODY5OnN0YXRpYyB2b2lkIGRldl9kaXNhYmxlX2dyb19odyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2LmMtMTg3MC17XG4tLVxubmV0L2NvcmUvZGV2LmM9NjM3OD1zdGF0aWMgaW50IGdlbmVyaWNfeGRwX2luc3RhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKnhkcClcbi0tXG5uZXQvY29yZS9kZXYuYy02Mzk0LVx0XHRcdG5ldGlmX2Rpc2FibGVfbHJvKGRldik7XG5uZXQvY29yZS9kZXYuYzo2Mzk1Olx0XHRcdGRldl9kaXNhYmxlX2dyb19odyhkZXYpO1xubmV0L2NvcmUvZGV2LmMtNjM5Ni1cdFx0fVxuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYz0yNzA9RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yNzItLyoqXG5uZXQvY29yZS9kZXZfYXBpLmM6MjczOiAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxubmV0L2NvcmUvZGV2X2FwaS5jLTI3NC0gKiBAZGV2OiBkZXZpY2Vcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjc5LSAqL1xubmV0L2NvcmUvZGV2X2FwaS5jOjI4MDp2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4MS17XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4NS19XG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg2OkVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MDYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEdSTyBEaXNhYmxpbmcgUGF0Y2ggZm9yIEhTUioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIHNwZWNpZmljYWxseSBpbnZva2VkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyBlbnNsYXZlZCB1bmRlciBhbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIG1hc3Rlci4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQgdG8gcmVtZW1iZXIgZm9yIGNvbnRleHQuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggaXMgcHJvcGVybHkgZG9jdW1lbnRlZCBhbmQgZWFzaWx5IGRpc2NvdmVyYWJsZS4gSSYjMzk7bSBnb2luZyB0byBhZGQgdGhlIGtleSBmdW5jdGlvbnPigJRgaHNyX2ZvcndhcmRfc2tiYCwgYGhzcl9kZXZfeG1pdGAsIGBoc3JfaGFuZGxlX2ZyYW1lYCwgYWxvbmcgd2l0aCB0aGVzZSBuZXcgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgZnVuY3Rpb25z4oCUdG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QuIFRoaXMgd2F5LCBhbnkgZW5naW5lZXIgd29ya2luZyB3aXRoIEhTUiB3aWxsIGJlIGFibGUgdG8gZWFzaWx5IGZpbmQgdGhlbS4KClRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzLCBvYnZpb3VzbHksIGBIU1JgLiBJIG11c3QgbWFrZSB0aGF0IGNsZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLiBIb3dldmVyLCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBpdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjay4gSSBzaG91bGQgcXVpY2tseSBzY2FuIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cyBsdXJraW5nLiBUaGlzIHdpbGwgaGVscCBwcmV2ZW50IGZ1dHVyZSBpc3N1ZXMgYW5kIGVuc3VyZSB0aGUgaW50ZWdyYXRpb24gaXMgY2xlYW4gYW5kIHN0YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDIwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU4CgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbnNpZGVyOyB0aGlzIGlzIHRoZSBmdWxsIHBpY3R1cmUuIExldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrczogZG9lcyB0aGUgcGF0Y2ggd29yayBhcyBhZHZlcnRpc2VkPyBZZXMsIGl0IGRvZXMuIFRoaXMgdGhpbmcgYWN0dWFsbHkgYWx0ZXJzIGhvdyBIU1IgZm9yd2FyZHMgcGFja2V0cywgYW5kIHRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIHRoYXQgaXQgY29ycmVjdGx5IGhhbmRsZXMgR1NPIHBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtLiBQbHVzLCBpdCBkaXNhYmxlcyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiB0aGUgc2xhdmUgZGV2aWNlcy4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgdGhlIGNvZGUgaXQgdG91Y2hlcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSDigJMgYSBnb29kIHNpZ24uCgpHaXZlbiB0aGF0IGl0IGludHJvZHVjZXMgdGhlc2Ugc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgY29kZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiAgV2UgbmVlZCB0byBwdXQgdGhpcyB0aHJvdWdoIGl0cyBwYWNlcy4gVGhlIGNydWNpYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmUgYGhzcl9mb3J3YXJkX3NrYmAsIGBoc3JfZGV2X3htaXRgLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGBkZXZfZGlzYWJsZV9ncm9gLCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYC4gIFRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQgdG8gZW5zdXJlIGlzIGVuYWJsZWQgaXMsIG5hdHVyYWxseSwgYEhTUmAuIFRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZDogaXQgbW9kaWZpZXMgSFNSJiMzOTtzIGZvcndhcmRpbmcgcGF0aCB0byBhZGRyZXNzIEdTTyBhbmQgZGlzYWJsZXMgR1JPIG9uIHRoZSBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZGVtb25zdHJhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMsIHdpdGhpbiByZWFjaGFibGUgbmV0d29yayBjb2RlLCBhbmQgcmlwZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMjA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAgICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIHBhY2tldCBmb3J3YXJkaW5nIHRvIGhhbmRsZSBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0sIGFuZCBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDssCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBIU1IgcGFja2V0IGZvcndhcmRpbmcgdG8gaGFuZGxlIEdTTyBwYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSwgYW5kIGRpc2FibGVzIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgbmV0d29yayBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMjA6MzA6MjkuNjg4Njk3Nzg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2NjkzNzkzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBIU1IgcGFja2V0IGZvcndhcmRpbmcgdG8gaGFuZGxlIEdTTyBwYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSwgYW5kIGRpc2FibGVzIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgbmV0d29yayBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMDozMDoyOS42ODg3MDUxOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzAwMDUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAwYzhkNjg1OTMyMDM2Y2MwMzdkYTg0ODk3YjEzNThlMWU4MmY3ZWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMjMgMjA6MzA6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uZWJhMmMyNmE0OWJhOGYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMzQzNCw2ICszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7XFxuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbit2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gaW50IGRldl9sb29wYmFja194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiKTtcXG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDU5MzNjNWRhYjA5ZWUxLi5hNmNmMmFkYzg2MjU2NSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTE4NDAsNiArMTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdH1cXG4gfVxcbiBcXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuK1xcbitcXHRkZXYtXFx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcXHUwMDI2PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpO1xcbitcXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XFxuK1xcbitcXHRpZiAodW5saWtlbHkoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IChORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKSkpXFxuK1xcdFxcdG5ldGRldl9XQVJOKGRldiwgXFxcImZhaWxlZCB0byBkaXNhYmxlIEdSTyFcXFxcblxcXCIpO1xcbitcXG4rXFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikge1xcbitcXHRcXHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcXG4rXFx0XFx0bmV0aWZfZGlzYWJsZV9ncm8obG93ZXJfZGV2KTtcXG4rXFx0XFx0bmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKipcXG4gICpcXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXFxuICAqXFx0QGRldjogZGV2aWNlXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xcbmluZGV4IDQzNzk0N2RkMDhlZDUzLi4wMmZiMjE2Mjk1MTI4NCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcXG4rKysgYi9uZXQvY29yZS9kZXZfYXBpLmNcXG5AQCAtMjY5LDYgKzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcXG4gXFxuKy8qKlxcbisgKiBkZXZfZGlzYWJsZV9ncm8oKSAtIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG4rICogQGRldjogZGV2aWNlXFxuKyAqXFxuKyAqIERpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBuZXQgZGV2aWNlLiAgTXVzdCBiZVxcbisgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlXFxuKyAqIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS5cXG4rICovXFxuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuK1xcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xcbitcXG4gLyoqXFxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxcbiAgKiBAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4yNDhjYmIxNDJlMjFlMSAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXFxuQEAgLTIzMiw5ICsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gbWFzdGVyLVxcdTAwM2VkZXY7XFxuIFxcdFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuIFxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuIFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuQEAgLTMzNSw2ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuIFxcdFxcdGhzcl9zdGFnLVxcdTAwM2VzZXF1ZW5jZV9uciA9IGh0b25zKGhzci1cXHUwMDNlc2VxdWVuY2VfbnIpO1xcbiBcXHRcXHRoc3ItXFx1MDAzZXNlcXVlbmNlX25yKys7XFxuIFxcdH1cXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcbiBcXHRoc3Jfc3RhZy1cXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IHR5cGU7XFxuIFxcdC8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovXFxuQEAgLTM1NiwxNCArMzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXFx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0cmV0dXJuO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG5AQCAtMzkwLDYgKzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2VzZXF1ZW5jZV9uciA9IGh0b25zKGhzci1cXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcXG4gXFx0aHNyLVxcdTAwM2VzdXBfc2VxdWVuY2VfbnIrKztcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xcbiBcXG5AQCAtMzk3LDEzICszOTMsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxuIFxcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xcbiBcXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVxcdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuIFxcbi1cXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4rXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0fVxcbiBcXG4gXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIH1cXG4gXFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cXG5AQCAtNjU5LDcgKzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRkZXYtXFx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcXG4gXFxuIFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8XFxuLVxcdFxcdFxcdCAgIE5FVElGX0ZfR1NPX01BU0sgfCBORVRJRl9GX0hXX0NTVU0gfFxcbitcXHRcXHRcXHQgICBORVRJRl9GX0hXX0NTVU0gfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XFxuIFxcdFxcdFxcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbmluZGV4IDA3NzQ5ODFhNjVjMTY0Li4zZmNkYmFjNDljNTlkYSAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2dzby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaHNyX21haW4uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImhzcl9mcmFtZXJlZy5oXFxcIlxcbiBcXG5AQCAtNjIxLDkgKzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcXG4gXFx0ICAgIHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbiBcXHRcXHQvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqL1xcbi1cXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdFxcdGZyYW1lLVxcdTAwM2VzZXF1ZW5jZV9uciA9IGhzci1cXHUwMDNlc2VxdWVuY2VfbnI7XFxuIFxcdFxcdGhzci1cXHUwMDNlc2VxdWVuY2VfbnIrKztcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtNzMxLDcgKzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuIH1cXG4gXFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxuLXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4rc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIHtcXG4gXFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lO1xcbiBcXG5AQCAtNzYwLDMgKzc2Miw1MCBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIFxcdHBvcnQtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gfVxcbitcXG4rLyogR1NPIGZhbi1vdXQgZnVubmVsOiB1bmZvbGQgc3VwZXItcGFja2V0cyBiZWZvcmUgcGVyLWZyYW1lIHByb2Nlc3Npbmcgc29cXG4rICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLlxcbisgKi9cXG4rdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDtcXG4rXFxuK1xcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcXG4rXFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxcbitcXHQgKiBvbiB0aGUgbWFzdGVyLCBvciBhcnJpdmluZyB1bnRhZ2dlZCBmcm9tIHRoZSBTQU4gc2lkZSBvbiB0aGVcXG4rXFx0ICogaW50ZXJsaW5rLiBBIHN1cGVyLXBhY2tldCBmcm9tIGEgTEFOIHNsYXZlIG1heSBjYXJyeSBwZXItZnJhbWVcXG4rXFx0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxcbitcXHQgKiByZWNvdmVyOyBhbiBhbHJlYWR5LXRhZ2dlZCBIU1IvUFJQIHN1cGVyLXBhY2tldCB2aW9sYXRlc1xcbitcXHQgKiBwZXItZnJhbWUgd2lyZSBzZW1hbnRpY3MuIERyb3AgYm90aC5cXG4rXFx0ICovXFxuK1xcdGlmIChwb3J0LVxcdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHlwZSAhPSBIU1JfUFRfSU5URVJMSU5LKVxcbitcXHRcXHRnb3RvIGRyb3BfZ3NvO1xcbitcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XFxuK1xcdCAgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX1BSUCkpXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287XFxuK1xcbitcXHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxcbitcXHQgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbVxcbitcXHQgKiB0aGUgaW50ZXJsaW5rIGZvbGxvd3MgUlggY2hlY2tzdW0gc2VtYW50aWNzLlxcbitcXHQgKi9cXG4rXFx0c2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcXG4rXFx0aWYgKElTX0VSUihzZWdzKSB8fCB1bmxpa2VseSghc2VncykpXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287XFxuK1xcbitcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHR3aGlsZSAoc2Vncykge1xcbitcXHRcXHRuZXh0ID0gc2Vncy1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0c2Vncy1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuK1xcdFxcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XFxuK1xcdFxcdHNlZ3MgPSBuZXh0O1xcbitcXHR9XFxuK1xcdHJldHVybjtcXG4rXFxuK2Ryb3BfZ3NvOlxcbitcXHRwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4rXFx0a2ZyZWVfc2tiKHNrYik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcXG5pbmRleCBkOWFmOWU2NWY3MmYwNy4uYzdmZDAyMWYwM2IxZjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbisrKyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdH1cXG4gXFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gXFxuLVxcdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXFxuLVxcdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdH1cXG4rXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuIFxcbiBmaW5pc2hfY29uc3VtZTpcXG4gXFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XFxuQEAgLTE3MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcXG4gXFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XFxuK1xcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbmluZGV4IDMxZmI5MzI2Y2Y1MzNkLi4wZDEwNTQ3NmU3YzUwZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbkBAIC0zLDYgKzMsNyBAQFxcbiB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi5cXG4gXFxuIFRFU1RfUFJPR1MgOj0gXFxcXFxcbitcXHRoc3JfZ3JvX3N1cGVycGFja2V0LnNoIFxcXFxcXG4gXFx0aHNyX3Bpbmcuc2ggXFxcXFxcbiBcXHRoc3JfcmVkYm94LnNoIFxcXFxcXG4gXFx0bGlua19mYXVsdHMuc2ggXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YjBhOWNlZWExY2U1OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2hcXG5AQCAtMCwwICsxLDI0OSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6XFxuKyNcXG4rIyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0XFxuKyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuXFxuKyMgIDIuIFRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPIGZlYXR1cmVzLlxcbisjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTT1xcbisjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkgYW5kIGRlbGl2ZXJlZFxcbisjICAgICBwZXItZnJhbWU6IHRoZSB0cmFuc2ZlciBjb21wbGV0ZXMgd2l0aCB6ZXJvIHJldHJhbnNtaXRzLlxcbisjXFxuKyMgVG9wb2xvZ3kgKDEwMC42NC4wLjAvMjQpOlxcbisjXFxuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXFxuKyMgICstLS0tLS0tLS0tLSsgIGludGVybGluayAgKy0tLS0tLS0tLS0tLS0tLSsgIExBTiBBL0IgICstLS0tLS0tLS0tLStcXG4rIyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfFxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XFxuKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICstLS0tLS0tLS0tLStcXG4rI1xcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxcbisjIChpbnRlcmxpbmsgUlggLVxcdTAwM2UgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kXFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXFxuK1xcbitzb3VyY2UgLi9oc3JfY29tbW9uLnNoXFxuK1xcbituc19kdXQ9XFxcImhzci1ncm8tZHV0XFxcIlxcbituc19zYW49XFxcImhzci1ncm8tc2FuXFxcIlxcbituc19wZWVyPVxcXCJoc3ItZ3JvLXBlZXJcXFwiXFxuK3Nhbl9pcD1cXFwiMTAwLjY0LjAuMVxcXCJcXG4rcGVlcl9pcD1cXFwiMTAwLjY0LjAuM1xcXCJcXG4raXBlcmZfcGlkPVxcXCJcXFwiXFxuK3NlcnZlcl93cmFwcGVyPVxcXCJcXFwiXFxuK2lwZXJmX3BpZGZpbGU9XFxcIi90bXAvaHNyX2dyb19pcGVyZi5waWRcXFwiXFxuK1xcbitjbGVhbnVwKClcXG4re1xcbitcXHRpZiBbIC1uIFxcXCIke2lwZXJmX3BpZH1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgW1sgXFxcIiR7aXBlcmZfcGlkfVxcXCIgPX4gXlswLTldKyQgXV07IHRoZW5cXG4rXFx0XFx0a2lsbCBcXFwiJHtpcGVyZl9waWR9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRmaVxcbitcXHRpZiBbIC1uIFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgXTsgdGhlblxcbitcXHRcXHQjIHRoZSB3cmFwcGVyIHdhaXRzIG9uIHRoZSBzZXJ2ZXI7IHJlYXAgaXQgd2l0aCBhIDVzIGJvdW5kIHNvIGFcXG4rXFx0XFx0IyBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgY2xlYW51cFxcbitcXHRcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0XFx0a2lsbCAtMCBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXFxuK1xcdFxcdFxcdHNsZWVwIDAuMVxcbitcXHRcXHRkb25lXFxuK1xcdFxcdGtpbGwgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0c2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rXFx0ZmlcXG4rXFx0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBraWxsIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxcbitcXHQjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMuIG5ldG5zICE9IHBpZG5zOiBhIGJsaW5kIHBraWxsXFxuK1xcdCMgd291bGQgc2NhbiB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXFxuK1xcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXFxcIiRuc19wZWVyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCk7IGRvXFxuK1xcdFxcdGlmIFsgXFxcIiQoY2F0IC9wcm9jLyRfcC9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdOyB0aGVuXFxuK1xcdFxcdFxcdGtpbGwgXFxcIiRfcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0ZmlcXG4rXFx0ZG9uZVxcbitcXHRpcGVyZl9waWQ9XFxcIlxcXCJcXG4rXFx0cm0gLWYgXFxcIiR7aXBlcmZfcGlkZmlsZX1cXFwiXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJG5zX2R1dFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZGVsIFxcXCIkbnNfc2FuXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRpcCBuZXRucyBkZWwgXFxcIiRuc19wZWVyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbit9XFxuK1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rY2hlY2tfdG9vbCgpXFxuK3tcXG4rXFx0aWYgISBjb21tYW5kIC12IFxcXCIkMVxcXCIgXFx1MDAzZSAvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVxcXCJcXG4rXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuK1xcdGZpXFxuK31cXG4rXFxuK25zeCgpXFxuK3tcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJDFcXFwiIGJhc2ggLWMgXFxcIiQyXFxcIlxcbit9XFxuK1xcbitzZXR1cF90b3BvKClcXG4re1xcbitcXHRsb2NhbCBuc1xcbitcXG4rXFx0Y2xlYW51cFxcbitcXHRmb3IgbnMgaW4gXFxcIiRuc19kdXRcXFwiIFxcXCIkbnNfc2FuXFxcIiBcXFwiJG5zX3BlZXJcXFwiOyBkb1xcbitcXHRcXHRpcCBuZXRucyBhZGQgXFxcIiRuc1xcXCJcXG4rXFx0ZG9uZVxcbitcXG4rXFx0aXAgbGluayBhZGQgZF9hIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyBcXFwiJG5zX3BlZXJcXFwiXFxuK1xcdGlwIGxpbmsgYWRkIGRfYiBuZXRucyBcXFwiJG5zX2R1dFxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgXFxcIiRuc19wZWVyXFxcIlxcbitcXHRpcCBsaW5rIGFkZCBkX2lsIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFxcXCIkbnNfc2FuXFxcIlxcbitcXG4rXFx0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxcbitcXHRmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG9cXG4rXFx0XFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcXFwiXFxuK1xcdGRvbmVcXG4rXFx0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXFxuK1xcdFxcdG5zeCBcXFwiJG5zX3BlZXJcXFwiIFxcXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cFxcXCJcXG4rXFx0ZG9uZVxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBzZXQgZF9pbCB1cFxcXCJcXG4rXFx0bnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwiaXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXFxcIlxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxcXFxuK1xcdFxcdGlwIGxpbmsgc2V0IGhzcjAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3BlZXJcXFwiIFxcXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXFxcXG4rXFx0XFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXFxcXG4rXFx0XFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcXFwiXFxuK1xcbitcXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXFxuK1xcdHNsZWVwIDJcXG4rfVxcbitcXG4rY2hlY2tfZmVhdHVyZSgpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCB3YW50PVxcXCIkNFxcXCJcXG4rXFxuK1xcdGlmIG5zeCBcXFwiJG5zXFxcIiBcXFwiZXRodG9vbCAtayAkaWZhY2VcXFwiIHwgZ3JlcCAtcSBcXFwiXiRmZWF0dXJlOiAkd2FudFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcXG4re1xcbitcXHRlY2hvIFxcXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXFxcIlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uXFxcIlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2EgcngtZ3JvLWh3IG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2IgcngtZ3JvLWh3IG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2lsIHJ4LWdyby1odyBvZmZcXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiSFctR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uXFxcIlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPL1RTTy5cXFwiXFxuK31cXG4rXFxuK3N0YXJ0X2lwZXJmX3NlcnZlcigpXFxuK3tcXG4rXFx0IyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiByZWNvcmQgaXRzIGV4YWN0IFBJRCAobmV0bnMgc2hhcmVzIHRoZSBQSURcXG4rXFx0IyBuYW1lc3BhY2UpLiBUaGUgd3JhcHBpbmcgc2hlbGwgd2FpdHMgb24gdGhlIHNlcnZlciBzbyB0aGUgc2NyaXB0IGNhblxcbitcXHQjIHJlYWxseSB3YWl0KDEpIGZvciB0aGUgd2hvbGUgdHJlZSwgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSBhbGlrZS5cXG4rXFx0cm0gLWYgXFxcIiR7aXBlcmZfcGlkZmlsZX1cXFwiXFxuK1xcdCggbnN4IFxcXCIkbnNfcGVlclxcXCIgXFxcImlwZXJmMyAtcyAtMSBcXHUwMDNlIC9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjYgZWNobyBcXFxcJCEgXFx1MDAzZSAke2lwZXJmX3BpZGZpbGV9OyB3YWl0XFxcIiApIFxcdTAwMjZcXG4rXFx0c2VydmVyX3dyYXBwZXI9JCFcXG4rXFx0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXFxuK1xcdCMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkXFxuK1xcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRbIC1zIFxcXCIke2lwZXJmX3BpZGZpbGV9XFxcIiBdIFxcdTAwMjZcXHUwMDI2IGJyZWFrXFxuK1xcdFxcdHNsZWVwIDAuMVxcbitcXHRkb25lXFxuK1xcdGlmIFsgISAtcyBcXFwiJHtpcGVyZl9waWRmaWxlfVxcXCIgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgcHVibGlzaCBhIHBpZCAobm8gcGlkZmlsZSlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aXBlcmZfcGlkPSQoY2F0IFxcXCIke2lwZXJmX3BpZGZpbGV9XFxcIilcXG4rXFx0aWYgISBbWyBcXFwiJHtpcGVyZl9waWR9XFxcIiA9fiBeWzAtOV0rJCBdXSB8fCAhIGtpbGwgLTAgXFxcIiR7aXBlcmZfcGlkfVxcXCIgMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJyR7aXBlcmZfcGlkfScgaW52YWxpZCBvciBub3QgYWxpdmVcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0c2xlZXAgMVxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbitkb190c29fc3RyZWFtX3Rlc3QoKVxcbit7XFxuK1xcdGxvY2FsIG91dCBzZW5kZXJfcmV0clxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImV0aHRvb2wgLUsgczAgdHNvIG9uIGdzbyBvblxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX3NhblxcXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkNvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cXFwiXFxuK1xcdHN0YXJ0X2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFx0XFx0IyByYXRlLWNhcHBlZDogdGhlIGRpc2NyaW1pbmF0b3IgaXMgcGVyLWZyYW1lIHVuZm9sZCAoY29tcGxldGlvbiB3aXRoXFxuK1xcdCMgMCByZXRyYW5zbWl0cyksIG5vdCBtYXggdGhyb3VnaHB1dDsgdW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJXFxuK1xcdCMgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYSBmdW5jdGlvbmFsIHByb2JsZW0uXFxuK1xcdG91dD0kKG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgLWIgMkcgLXQgMTBcXFwiIDJcXHUwMDNlXFx1MDAyNjEpXFxuK1xcdGlmIFsgJD8gLW5lIDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDpcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFxuK1xcdCMgc3VjY2VzcyBwYXRoOiB0aGUgb25lLXNob3Qgc2VydmVyIGV4aXRzIGJ5IGl0c2VsZjsgcmVhbGx5IHdhaXQgZm9yXFxuK1xcdCMgdGhlIHdyYXBwZXIgdG8gcmVhcCBpdCwgYW5kIGNoZWNrIGl0cyBleGl0IHN0YXR1c1xcbitcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCJcXG4rXFx0c2VydmVyX3JjPSQ/XFxuK1xcdHNlcnZlcl93cmFwcGVyPVxcXCJcXFwiXFxuK1xcdGlwZXJmX3BpZD1cXFwiXFxcIlxcbitcXHRpZiBbIFxcXCIkc2VydmVyX3JjXFxcIiAtbmUgMCBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JHNlcnZlcl9yY1xcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFxuK1xcdHNlbmRlcl9yZXRyPSQoZWNobyBcXFwiJG91dFxcXCIgfCBhd2sgJy9zZW5kZXIvIHtwcmludCAkKE5GLTEpfScpXFxuK1xcdGlmIFsgLXogXFxcIiRzZW5kZXJfcmV0clxcXCIgXSB8fCBbIFxcXCIkc2VuZGVyX3JldHJcXFwiIC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogcmV0cmFuc21pdHMgZHVyaW5nIEdTTyB1bmZvbGQ6ICR7c2VuZGVyX3JldHI6LXVua25vd259XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGVjaG8gXFxcIiRvdXRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcbitcXHRlY2hvIFxcXCJJTkZPOiBUQ1Agc3RyZWFtIGNvbXBsZXRlZCB3aXRoIDAgcmV0cmFuc21pdHMgWyBPSyBdXFxcIlxcbitcXHRlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLUUgXFxcInNlbmRlcnxyZWNlaXZlclxcXCJcXG4rfVxcbitcXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xcbitjaGVja190b29sIGV0aHRvb2xcXG4rY2hlY2tfdG9vbCBpcGVyZjNcXG4rY2hlY2tfdG9vbCB0aW1lb3V0XFxuK1xcbisjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXFxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXFx1MDAzZVxcdTAwMjYxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitcXG4rc2V0dXBfdG9wb1xcbitcXG4rZWNobyBcXFwiSU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXFx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIERVVCkuXFxcIlxcbitkb19waW5nIFxcXCIkbnNfc2FuXFxcIiBcXFwiJHBlZXJfaXBcXFwiXFxuK3N0b3BfaWZfZXJyb3IgXFxcIkluaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuXFxcIlxcbitcXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXFxuK2RvX3Rzb19zdHJlYW1fdGVzdFxcbitzdG9wX2lmX2Vycm9yIFxcXCJHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cXFwiXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBBbGwgZ29vZC5cXFwiXFxuK2V4aXQgJHJldFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMDozMDozMC4yODY2NTk5NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyODA3MTQwOTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImhzcl9kZXZfeG1pdFwiLFxuICAgIFwiaHNyX2hhbmRsZV9mcmFtZVwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEhTUiBwYWNrZXQgZm9yd2FyZGluZyB0byBoYW5kbGUgR1NPIHBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtLCBhbmQgZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDBjOGQ2ODU5MzIwMzZjYzAzN2RhODQ4OTdiMTM1OGUxZTgyZjdlYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDIwOjMwOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5lYmEyYzI2YTQ5YmE4ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zNDM0LDYgKzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbit2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpO1xuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNTkzM2M1ZGFiMDllZTEuLmE2Y2YyYWRjODYyNTY1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTg0MCw2ICsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1xuK1x0ZGV2LVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XG4rXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4rXG4rXHRpZiAodW5saWtlbHkoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiAoTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVykpKVxuK1x0XHRuZXRkZXZfV0FSTihkZXYsIFwiZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxcblwiKTtcbitcbitcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcbitcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XG4rXHRcdG5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7XG4rXHRcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4gICpcdEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuaW5kZXggNDM3OTQ3ZGQwOGVkNTMuLjAyZmIyMTYyOTUxMjg0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2X2FwaS5jXG4rKysgYi9uZXQvY29yZS9kZXZfYXBpLmNcbkBAIC0yNjksNiArMjY5LDIyIEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcbiBcbisvKipcbisgKiBkZXZfZGlzYWJsZV9ncm8oKSAtIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcbisgKiBAZGV2OiBkZXZpY2VcbisgKlxuKyAqIERpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBuZXQgZGV2aWNlLiAgTXVzdCBiZVxuKyAqIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWQgcGFja2V0cyBtYXkgYmVcbisgKiBmb3J3YXJkZWQgdG8gYW5vdGhlciBpbnRlcmZhY2UuXG4rICovXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbitcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4rXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4rXG4gLyoqXG4gICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlXG4gICogQGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuaW5kZXggNTU1NWI3MWFiMTliNTkuLjI0OGNiYjE0MmUyMWUxIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5AQCAtMjMyLDkgKzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0c2tiLVx1MDAzZWRldiA9IG1hc3Rlci1cdTAwM2VkZXY7XG4gXHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG5AQCAtMzM1LDYgKzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnIrKztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xuIFx0fVxuIFxuLVx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0cmV0dXJuO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbkBAIC0zOTAsNiArMzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnIrKztcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICszOTMsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbiBcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIH1cbiBcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXG5AQCAtNjU5LDcgKzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbitcdFx0XHQgICBORVRJRl9GX0hXX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2NC4uM2ZjZGJhYzQ5YzU5ZGEgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcImhzcl9tYWluLmhcIlxuICNpbmNsdWRlIFwiaHNyX2ZyYW1lcmVnLmhcIlxuIFxuQEAgLTYyMSw5ICs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XG4gXHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbiBcdFx0LyogU2VxdWVuY2UgbnIgZm9yIHRoZSBtYXN0ZXIvaW50ZXJsaW5rIG5vZGUgKi9cbi1cdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGZyYW1lLVx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVx1MDAzZXNlcXVlbmNlX25yO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnIrKztcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4rc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lO1xuIFxuQEAgLTc2MCwzICs3NjIsNTAgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gfVxuK1xuKy8qIEdTTyBmYW4tb3V0IGZ1bm5lbDogdW5mb2xkIHN1cGVyLXBhY2tldHMgYmVmb3JlIHBlci1mcmFtZSBwcm9jZXNzaW5nIHNvXG4rICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLlxuKyAqL1xuK3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7XG4rXG4rXHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XG4rXHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogVW5mb2xkIG9ubHkgcGxhaW4tRXRoZXJuZXQgR1NPIHN1cGVyLXBhY2tldHM6IGxvY2FsbHkgZ2VuZXJhdGVkXG4rXHQgKiBvbiB0aGUgbWFzdGVyLCBvciBhcnJpdmluZyB1bnRhZ2dlZCBmcm9tIHRoZSBTQU4gc2lkZSBvbiB0aGVcbitcdCAqIGludGVybGluay4gQSBzdXBlci1wYWNrZXQgZnJvbSBhIExBTiBzbGF2ZSBtYXkgY2FycnkgcGVyLWZyYW1lXG4rXHQgKiBIU1IgdGFncyAvIFBSUCBSQ1QgdHJhaWxlcnMgdGhhdCBzb2Z0d2FyZSBzZWdtZW50YXRpb24gY2Fubm90XG4rXHQgKiByZWNvdmVyOyBhbiBhbHJlYWR5LXRhZ2dlZCBIU1IvUFJQIHN1cGVyLXBhY2tldCB2aW9sYXRlc1xuK1x0ICogcGVyLWZyYW1lIHdpcmUgc2VtYW50aWNzLiBEcm9wIGJvdGguXG4rXHQgKi9cbitcdGlmIChwb3J0LVx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0hTUikgfHxcbitcdCAgICBza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSlcbitcdFx0Z290byBkcm9wX2dzbztcbitcbitcdC8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlXG4rXHQgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbVxuK1x0ICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy5cbitcdCAqL1xuK1x0c2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xuK1x0aWYgKElTX0VSUihzZWdzKSB8fCB1bmxpa2VseSghc2VncykpXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXG4rXHRjb25zdW1lX3NrYihza2IpO1xuK1x0d2hpbGUgKHNlZ3MpIHtcbitcdFx0bmV4dCA9IHNlZ3MtXHUwMDNlbmV4dDtcbitcdFx0c2Vncy1cdTAwM2VuZXh0ID0gTlVMTDtcbitcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcbitcdFx0c2VncyA9IG5leHQ7XG4rXHR9XG4rXHRyZXR1cm47XG4rXG4rZHJvcF9nc286XG4rXHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRrZnJlZV9za2Ioc2tiKTtcbit9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX3NsYXZlLmNcbisrKyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbkBAIC03MywxNiArNzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdH1cbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXG4tXHQvKiBPbmx5IHRoZSBmcmFtZXMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJsaW5rIHBvcnQgd2lsbCBhc3NpZ24gYVxuLVx0ICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuXG4tXHQgKi9cbi1cdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0fSBlbHNlIHtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHR9XG4rXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbiBcbiBmaW5pc2hfY29uc3VtZTpcbiBcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xuQEAgLTE3MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHJlcylcbiBcdFx0Z290byBmYWlsX3J4X2hhbmRsZXI7XG4gXHRkZXZfZGlzYWJsZV9scm8oZGV2KTtcbitcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbmluZGV4IDMxZmI5MzI2Y2Y1MzNkLi4wZDEwNTQ3NmU3YzUwZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbkBAIC0zLDYgKzMsNyBAQFxuIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbitcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40YjBhOWNlZWExY2U1OVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5AQCAtMCwwICsxLDI0OSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcbisjXG4rIyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0XG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cbisjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy5cbisjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTT1xuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeSBhbmQgZGVsaXZlcmVkXG4rIyAgICAgcGVyLWZyYW1lOiB0aGUgdHJhbnNmZXIgY29tcGxldGVzIHdpdGggemVybyByZXRyYW5zbWl0cy5cbisjXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4rI1xuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xuKyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuKyNcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxuKyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK25zX2R1dD1cImhzci1ncm8tZHV0XCJcbituc19zYW49XCJoc3ItZ3JvLXNhblwiXG4rbnNfcGVlcj1cImhzci1ncm8tcGVlclwiXG4rc2FuX2lwPVwiMTAwLjY0LjAuMVwiXG4rcGVlcl9pcD1cIjEwMC42NC4wLjNcIlxuK2lwZXJmX3BpZD1cIlwiXG4rc2VydmVyX3dyYXBwZXI9XCJcIlxuK2lwZXJmX3BpZGZpbGU9XCIvdG1wL2hzcl9ncm9faXBlcmYucGlkXCJcbitcbitjbGVhbnVwKClcbit7XG4rXHRpZiBbIC1uIFwiJHtpcGVyZl9waWR9XCIgXSBcdTAwMjZcdTAwMjYgW1sgXCIke2lwZXJmX3BpZH1cIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxuK1x0XHRraWxsIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbitcdGlmIFsgLW4gXCIke3NlcnZlcl93cmFwcGVyfVwiIF07IHRoZW5cbitcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhXG4rXHRcdCMgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlciBoYW5nIGNsZWFudXBcbitcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFx0a2lsbCAtMCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuK1x0XHRcdHNsZWVwIDAuMVxuK1x0XHRkb25lXG4rXHRcdGtpbGwgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0d2FpdCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rXHRmaVxuK1x0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBraWxsIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxuK1x0IyBhY3R1YWxseSBsaXZlIGluIHRoZSBwZWVyIG5ldG5zLiBuZXRucyAhPSBwaWRuczogYSBibGluZCBwa2lsbFxuK1x0IyB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cbitcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRpZiBbIFwiJChjYXQgL3Byb2MvJF9wL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXTsgdGhlblxuK1x0XHRcdGtpbGwgXCIkX3BcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdGZpXG4rXHRkb25lXG4rXHRpcGVyZl9waWQ9XCJcIlxuK1x0cm0gLWYgXCIke2lwZXJmX3BpZGZpbGV9XCJcbitcdGlwIG5ldG5zIGRlbCBcIiRuc19kdXRcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBuZXRucyBkZWwgXCIkbnNfc2FuXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0aXAgbmV0bnMgZGVsIFwiJG5zX3BlZXJcIiAyXHUwMDNlL2Rldi9udWxsXG4rfVxuK1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rY2hlY2tfdG9vbCgpXG4re1xuK1x0aWYgISBjb21tYW5kIC12IFwiJDFcIiBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwiXG4rXHRcdGV4aXQgJGtzZnRfc2tpcFxuK1x0Zmlcbit9XG4rXG4rbnN4KClcbit7XG4rXHRpcCBuZXRucyBleGVjIFwiJDFcIiBiYXNoIC1jIFwiJDJcIlxuK31cbitcbitzZXR1cF90b3BvKClcbit7XG4rXHRsb2NhbCBuc1xuK1xuK1x0Y2xlYW51cFxuK1x0Zm9yIG5zIGluIFwiJG5zX2R1dFwiIFwiJG5zX3NhblwiIFwiJG5zX3BlZXJcIjsgZG9cbitcdFx0aXAgbmV0bnMgYWRkIFwiJG5zXCJcbitcdGRvbmVcbitcbitcdGlwIGxpbmsgYWRkIGRfYSBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyBcIiRuc19wZWVyXCJcbitcdGlwIGxpbmsgYWRkIGRfYiBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcIiRuc19wZWVyXCJcbitcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyBcIiRuc19zYW5cIlxuK1xuK1x0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxuK1x0Zm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvXG4rXHRcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgaXAgbGluayBzZXQgJGlmYWNlIHVwXCJcbitcdGRvbmVcbitcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xuK1x0XHRuc3ggXCIkbnNfcGVlclwiIFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcIlxuK1x0ZG9uZVxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgZF9pbCB1cFwiXG4rXHRuc3ggXCIkbnNfc2FuXCIgXCJpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczBcIlxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxuK1x0XHRzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXFxcbitcdFx0aXAgbGluayBzZXQgaHNyMCB1cFwiXG4rXHRuc3ggXCIkbnNfcGVlclwiIFwiaXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcXFxuK1x0XHRzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXFxcbitcdFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcIlxuK1xuK1x0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJ3Mgc3VwZXJ2aXNpb24gZnJhbWVzLlxuK1x0c2xlZXAgMlxuK31cbitcbitjaGVja19mZWF0dXJlKClcbit7XG4rXHRsb2NhbCBucz1cIiQxXCJcbitcdGxvY2FsIGlmYWNlPVwiJDJcIlxuK1x0bG9jYWwgZmVhdHVyZT1cIiQzXCJcbitcdGxvY2FsIHdhbnQ9XCIkNFwiXG4rXG4rXHRpZiBuc3ggXCIkbnNcIiBcImV0aHRvb2wgLWsgJGlmYWNlXCIgfCBncmVwIC1xIFwiXiRmZWF0dXJlOiAkd2FudFwiOyB0aGVuXG4rXHRcdGVjaG8gXCJJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzICR3YW50IFsgT0sgXVwiXG4rXHRlbHNlXG4rXHRcdGVjaG8gXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG5vdCAkd2FudFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRmaVxuK31cbitcbitkb19ncm9fZmVhdHVyZV9jaGVja3MoKVxuK3tcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2EgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYiBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdHN0b3BfaWZfZXJyb3IgXCJHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2EgcngtZ3JvLWh3IG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2IgcngtZ3JvLWh3IG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2lsIHJ4LWdyby1odyBvZmZcbitcdHN0b3BfaWZfZXJyb3IgXCJIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4rXHRzdG9wX2lmX2Vycm9yIFwiSFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy9UU08uXCJcbit9XG4rXG4rc3RhcnRfaXBlcmZfc2VydmVyKClcbit7XG4rXHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHJlY29yZCBpdHMgZXhhY3QgUElEIChuZXRucyBzaGFyZXMgdGhlIFBJRFxuK1x0IyBuYW1lc3BhY2UpLiBUaGUgd3JhcHBpbmcgc2hlbGwgd2FpdHMgb24gdGhlIHNlcnZlciBzbyB0aGUgc2NyaXB0IGNhblxuK1x0IyByZWFsbHkgd2FpdCgxKSBmb3IgdGhlIHdob2xlIHRyZWUsIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgYWxpa2UuXG4rXHRybSAtZiBcIiR7aXBlcmZfcGlkZmlsZX1cIlxuK1x0KCBuc3ggXCIkbnNfcGVlclwiIFwiaXBlcmYzIC1zIC0xIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IGVjaG8gXFwkISBcdTAwM2UgJHtpcGVyZl9waWRmaWxlfTsgd2FpdFwiICkgXHUwMDI2XG4rXHRzZXJ2ZXJfd3JhcHBlcj0kIVxuK1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4rXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuK1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFsgLXMgXCIke2lwZXJmX3BpZGZpbGV9XCIgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXHRpZiBbICEgLXMgXCIke2lwZXJmX3BpZGZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQgKG5vIHBpZGZpbGUpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRpcGVyZl9waWQ9JChjYXQgXCIke2lwZXJmX3BpZGZpbGV9XCIpXG4rXHRpZiAhIFtbIFwiJHtpcGVyZl9waWR9XCIgPX4gXlswLTldKyQgXV0gfHwgISBraWxsIC0wIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJyR7aXBlcmZfcGlkfScgaW52YWxpZCBvciBub3QgYWxpdmVcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdHNsZWVwIDFcbitcdHJldHVybiAwXG4rfVxuK1xuK2RvX3Rzb19zdHJlYW1fdGVzdCgpXG4re1xuK1x0bG9jYWwgb3V0IHNlbmRlcl9yZXRyXG4rXG4rXHRlY2hvIFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1x0bnN4IFwiJG5zX3NhblwiIFwiZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfc2FuXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4rXHRzdG9wX2lmX2Vycm9yIFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cIlxuK1x0c3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuK1x0XHQjIHJhdGUtY2FwcGVkOiB0aGUgZGlzY3JpbWluYXRvciBpcyBwZXItZnJhbWUgdW5mb2xkIChjb21wbGV0aW9uIHdpdGhcbitcdCMgMCByZXRyYW5zbWl0cyksIG5vdCBtYXggdGhyb3VnaHB1dDsgdW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJXG4rXHQjIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGEgZnVuY3Rpb25hbCBwcm9ibGVtLlxuK1x0b3V0PSQobnN4IFwiJG5zX3NhblwiIFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiAtYiAyRyAtdCAxMFwiIDJcdTAwM2VcdTAwMjYxKVxuK1x0aWYgWyAkPyAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDpcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRlY2hvIFwiJG91dFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcbitcdCMgc3VjY2VzcyBwYXRoOiB0aGUgb25lLXNob3Qgc2VydmVyIGV4aXRzIGJ5IGl0c2VsZjsgcmVhbGx5IHdhaXQgZm9yXG4rXHQjIHRoZSB3cmFwcGVyIHRvIHJlYXAgaXQsIGFuZCBjaGVjayBpdHMgZXhpdCBzdGF0dXNcbitcdHdhaXQgXCIke3NlcnZlcl93cmFwcGVyfVwiXG4rXHRzZXJ2ZXJfcmM9JD9cbitcdHNlcnZlcl93cmFwcGVyPVwiXCJcbitcdGlwZXJmX3BpZD1cIlwiXG4rXHRpZiBbIFwiJHNlcnZlcl9yY1wiIC1uZSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JHNlcnZlcl9yY1wiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcbitcdHNlbmRlcl9yZXRyPSQoZWNobyBcIiRvdXRcIiB8IGF3ayAnL3NlbmRlci8ge3ByaW50ICQoTkYtMSl9JylcbitcdGlmIFsgLXogXCIkc2VuZGVyX3JldHJcIiBdIHx8IFsgXCIkc2VuZGVyX3JldHJcIiAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiByZXRyYW5zbWl0cyBkdXJpbmcgR1NPIHVuZm9sZDogJHtzZW5kZXJfcmV0cjotdW5rbm93bn1cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRlY2hvIFwiJG91dFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcbitcdGVjaG8gXCJJTkZPOiBUQ1Agc3RyZWFtIGNvbXBsZXRlZCB3aXRoIDAgcmV0cmFuc21pdHMgWyBPSyBdXCJcbitcdGVjaG8gXCIkb3V0XCIgfCBncmVwIC1FIFwic2VuZGVyfHJlY2VpdmVyXCJcbit9XG4rXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xuK2NoZWNrX3Rvb2wgZXRodG9vbFxuK2NoZWNrX3Rvb2wgaXBlcmYzXG4rY2hlY2tfdG9vbCB0aW1lb3V0XG4rXG4rIyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LlxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitcbitzZXR1cF90b3BvXG4rXG4rZWNobyBcIklORk86IEluaXRpYWwgdmFsaWRhdGlvbiBwaW5nIChTQU4gLVx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIERVVCkuXCJcbitkb19waW5nIFwiJG5zX3NhblwiIFwiJHBlZXJfaXBcIlxuK3N0b3BfaWZfZXJyb3IgXCJJbml0aWFsIHZhbGlkYXRpb24gZmFpbGVkLlwiXG4rXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXG4rZG9fdHNvX3N0cmVhbV90ZXN0XG4rc3RvcF9pZl9lcnJvciBcIkdTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlwiXG4rXG4rZWNobyBcIklORk86IEFsbCBnb29kLlwiXG4rZXhpdCAkcmV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMDozMDozMC4yODY2NjIzMjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjY2MDc3MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZywgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZG9lcy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzIGluIHRoZSBrZXJuZWwgbmV0d29ya2luZyBzdGFjazogYG5ldC9jb3JlL2Rldi5jYCwgYG5ldC9jb3JlL2Rldl9hcGkuY2AsIGFuZCBhIGJ1bmNoIG9mIEhTUi1yZWxhdGVkIGZpbGVzIChgbmV0L2hzci9oc3JfZGV2aWNlLmNgLCBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgYG5ldC9oc3IvaHNyX3NsYXZlLmNgKS4gSXQncyBhbHNvIGFkZGluZyBhIHNlbGZ0ZXN0LCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gVGhlIGFkZGl0aW9ucyBvZiBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBmdW5jdGlvbnMgaW1tZWRpYXRlbHkgZmxhZyBteSBhdHRlbnRpb24sIGFsb25nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBIU1IsIHNwZWNpZmljYWxseSBkaXNhYmxpbmcgR1JPIG9uIHNsYXZlIGRldmljZXMgYW5kIGludHJvZHVjaW5nIEdTTyBmYW4tb3V0IGZ1bm5lbGluZyBpbiBgaHNyX2ZvcndhcmRfc2tiYC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgSFNSIHBhY2tldCBmb3J3YXJkaW5nLCBwYXJ0aWN1bGFybHkgaG93IGl0IGhhbmRsZXMgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBwYWNrZXRzIHdpdGggdGhlIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLiBUaGlzIGlzIGltcG9ydGFudC4gVGhlcmUncyBhbHNvIHNvbWUgbG9ja2luZyBjaGFuZ2VzIGFyb3VuZCBgaHNyLVx1MDAzZXNlcW5yX2xvY2tgLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciBIU1IgaXMgcmVhY2hhYmxlIGFuZCBjYW4gYmUgZWZmZWN0aXZlbHkgdGVzdGVkIHdpdGhpbiBhIGZ1enppbmcgY29udGV4dC4gU2luY2UgSFNSIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSwgdGhhdCBtZWFucyBpdCdzIGRlZmluaXRlbHkgYWNjZXNzaWJsZS4gSSByZW1lbWJlciBzZWVpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgdG8gY3JlYXRlIGFuIEhTUiBkZXZpY2UgdmlhIG5ldGxpbmsgKHJ0bmV0bGluaykgaW4gdGhlIGluY2x1ZGVkIHNlbGZ0ZXN0OiBgaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMGAuIEV4Y2VsbGVudC4gVGhhdCBtZWFucyB3ZSBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgSFNSIGRldmljZXMgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LCBtYWtpbmcgaXQgYSB2ZXJ5IHZpYWJsZSB0YXJnZXQuXG5cbk5leHQgc3RlcDogbGV0J3MgZmlndXJlIG91dCB3aGF0IENPTkZJRyBvcHRpb25zIGFyZSBpbnZvbHZlZC4gSSdsbCBkbyBhIHF1aWNrIGBLY29uZmlnYCBzZWFyY2ggZm9yIEhTUi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODU2MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjM2Ljk1Mjc0MjA2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODMyMzU5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhTUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL0tjb25maWctNS1cXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXFxubmV0L2hzci9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjM3LjMzNTk4NjI0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjE5MTE5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSFNSIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEkgc2VlIGBDT05GSUdfSFNSYCDigJMgdGhhdCdzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgSFNSIHN0dWZmIGlzIHdvcmtpbmcuXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYSBmZXcgY3JpdGljYWwgZnVuY3Rpb25zLCB0aGUgaGVhcnQgb2YgdGhlIEhTUiBwcm9jZXNzOlxuXG4qICAgYGhzcl9mb3J3YXJkX3NrYmA6IFRoaXMgaXMgcHJvYmFibHkgdGhlIHdvcmtob3JzZSwgaGFuZGxpbmcgdGhlIGZvcndhcmRpbmcgb2YgU0tCcy5cbiogICBgaHNyX2Rldl94bWl0YDogTGlrZWx5IHRoZSBkZXZpY2UgdHJhbnNtaXQgZnVuY3Rpb24uXG4qICAgYGhzcl9oYW5kbGVfZnJhbWVgOiBFc3NlbnRpYWwgZm9yIHByb2Nlc3NpbmcgaW5jb21pbmcgZnJhbWVzLCB0aGUgcmVjZWl2ZXIgc2lkZS5cbiogICBgZGV2X2Rpc2FibGVfZ3JvYCBcdTAwMjYgYG5ldGlmX2Rpc2FibGVfZ3JvYDogVGhlc2UgbGlrZWx5IGRlYWwgd2l0aCBkaXNhYmxpbmcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykuIFdlIGFyZSBkZWFsaW5nIHdpdGggcmVhbC10aW1lIHJlcXVpcmVtZW50cywgYW5kIEdSTyBjb3VsZCBiZSBwcm9ibGVtYXRpYyBoZXJlLlxuXG5JIHRoaW5rIEknbGwgc3RhcnQgd2l0aCBgaHNyX2ZvcndhcmRfc2tiYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCBjb2RlIGlzIGluIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgIGJhc2VkIG9uIHRoZSBmaWxlIHBhdGguIExldCdzIHNlZSB3aGF0IHRoZSBmb3J3YXJkaW5nIHByb2Nlc3MgaXMgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjQxLjU5NzkwMTMxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjI1MzU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNC1cXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNTpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNi1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MjkxPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2MC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjE6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYyLX1cXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2ND1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM5OC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozOTk6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDAtfVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY3OD1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNS0vKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzY6c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNy17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzY4LSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3Njk6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAte1xcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3My1cXHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NDpcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODAyLVxcdFxcdHNlZ3MtXFx1MDAzZW5leHQgPSBOVUxMO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo4MDM6XFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODA0LVxcdFxcdHNlZ3MgPSBuZXh0O1xcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxNjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNy1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9MjQ9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTc1LVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6NzY6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy03Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMjA6MzA6NDEuNjg0MTYwNjQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNjE3MTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlY2VudCBQYXRjaCBmb3IgSFNSIEZvcndhcmRpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHNvbWUga2V5IGNoYW5nZXMgcmVsYXRlZCB0byBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGZvcndhcmRpbmcuIFNwZWNpZmljYWxseSwgaXQncyBhZGRpbmcgdHdvIG5ldyBmdW5jdGlvbnMsIGBoc3JfZm9yd2FyZF9za2JgIGFuZCBgaHNyX2ZvcndhcmRfc2tiX29uZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYWJvdXQgaGFuZGxpbmcgU0tCcyAoU29ja2V0IEJ1ZmZlcnMpIGluIHRoZSBIU1IgY29udGV4dC4gVGhpcyBpcyB3aGF0IEkgZXhwZWN0ZWQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLlxuXG5UaGUgZmFjdCB0aGF0IGl0IGFsc28gbW9kaWZpZXMgYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyBjcnVjaWFsLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGF0IHRoZSBoZWFydCBvZiB0cmFuc21pdHRpbmcgYW5kIHJlY2VpdmluZyBmcmFtZXMgd2l0aGluIHRoZSBIU1IgbmV0d29yay4gQW55IGFsdGVyYXRpb24gaGVyZSB3YXJyYW50cyBjbG9zZSBpbnNwZWN0aW9uLCBhcyBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHkgaGluZ2VzIG9uIHRob3NlIG1vZHVsZXMuXG5cbk5vdywgdGhlIGluY2x1c2lvbiBvZiBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvZGV2X2FwaS5jYCwgcmVzcGVjdGl2ZWx5LCBpcyB3aGF0J3MgcGlxdWluZyBteSBpbnRlcmVzdCB0aGUgbW9zdC4gVGhhdOKAmXMgYWJvdXQgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIG9yIEdSTy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IEdSTyBpcyBiZWluZyBkaXNhYmxlZC4gVGhpcyBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaWYgbm90IGNhcmVmdWxseSBtYW5hZ2VkLiBJJ20gZ29pbmcgdG8gZm9jdXMgaW4gb24gYGRldl9kaXNhYmxlX2dyb2AgaW4gYG5ldC9jb3JlL2Rldl9hcGkuY2AuIFRoaXMgY291bGQgYmUgZHVlIHRvIGlzc3VlcyB3aXRoIEhTUidzIGR1cGxpY2F0ZSBmcmFtZSBoYW5kbGluZyBhbmQgR1JPJ3MgYWdncmVnYXRpb24sIG9yIHBlcmhhcHMgaXQncyBhIHNwZWNpZmljIGluY29tcGF0aWJpbGl0eSBpZGVudGlmaWVkIGR1cmluZyB0ZXN0aW5nLiBEaXNhYmxpbmcgR1JPIGlzIGEgdHJhZGVvZmYsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkZXZlbG9wZXLigJlzIHRoaW5raW5nIHdhcywgaW4gZG9pbmcgc28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzMwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjQ2LjIwMDMzMzk0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDM3NjM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE4NDM9dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTg2MS0vKipcXG5uZXQvY29yZS9kZXYuYzoxODYyOiAqXFx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbm5ldC9jb3JlL2Rldi5jLTE4NjMtICpcXHRAZGV2OiBkZXZpY2VcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE4NjgtICovXFxubmV0L2NvcmUvZGV2LmM6MTg2OTpzdGF0aWMgdm9pZCBkZXZfZGlzYWJsZV9ncm9faHcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXYuYy0xODcwLXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTYzNzg9c3RhdGljIGludCBnZW5lcmljX3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICp4ZHApXFxuLS1cXG5uZXQvY29yZS9kZXYuYy02Mzk0LVxcdFxcdFxcdG5ldGlmX2Rpc2FibGVfbHJvKGRldik7XFxubmV0L2NvcmUvZGV2LmM6NjM5NTpcXHRcXHRcXHRkZXZfZGlzYWJsZV9ncm9faHcoZGV2KTtcXG5uZXQvY29yZS9kZXYuYy02Mzk2LVxcdFxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYz0yNzA9RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI3Mi0vKipcXG5uZXQvY29yZS9kZXZfYXBpLmM6MjczOiAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNzQtICogQGRldjogZGV2aWNlXFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjc5LSAqL1xcbm5ldC9jb3JlL2Rldl9hcGkuYzoyODA6dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjgxLXtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODUtfVxcbm5ldC9jb3JlL2Rldl9hcGkuYzoyODY6RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjQ2LjI5MDcxNTU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc1MjI0NTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgR1JPIERpc2FibGluZyBQYXRjaCBmb3IgSFNSKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBzcGVjaWZpY2FsbHkgaW52b2tlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgZW5zbGF2ZWQgdW5kZXIgYW4gSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBtYXN0ZXIuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQgdG8gcmVtZW1iZXIgZm9yIGNvbnRleHQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpcyBwcm9wZXJseSBkb2N1bWVudGVkIGFuZCBlYXNpbHkgZGlzY292ZXJhYmxlLiBJJ20gZ29pbmcgdG8gYWRkIHRoZSBrZXkgZnVuY3Rpb25z4oCUYGhzcl9mb3J3YXJkX3NrYmAsIGBoc3JfZGV2X3htaXRgLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGFsb25nIHdpdGggdGhlc2UgbmV3IGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIGZ1bmN0aW9uc+KAlHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LiBUaGlzIHdheSwgYW55IGVuZ2luZWVyIHdvcmtpbmcgd2l0aCBIU1Igd2lsbCBiZSBhYmxlIHRvIGVhc2lseSBmaW5kIHRoZW0uXG5cblRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGlzLCBvYnZpb3VzbHksIGBIU1JgLiBJIG11c3QgbWFrZSB0aGF0IGNsZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLiBIb3dldmVyLCBiZWZvcmUgSSBmaW5hbGl6ZSB0aGlzLCBpdCdzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrLiBJIHNob3VsZCBxdWlja2x5IHNjYW4gdGhlIGNvZGUgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIG9yIHBvdGVudGlhbCBjb25mbGljdHMgbHVya2luZy4gVGhpcyB3aWxsIGhlbHAgcHJldmVudCBmdXR1cmUgaXNzdWVzIGFuZCBlbnN1cmUgdGhlIGludGVncmF0aW9uIGlzIGNsZWFuIGFuZCBzdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjUxLjA0Mjk2MzI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5NzM1NTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL0tjb25maWctNS1cXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXFxubmV0L2hzci9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDIwOjMwOjUzLjQ0MDMyNTE2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzc5Nzc0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlcmUgYXJlbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGNvbnNpZGVyOyB0aGlzIGlzIHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiBkb2VzIHRoZSBwYXRjaCB3b3JrIGFzIGFkdmVydGlzZWQ/IFllcywgaXQgZG9lcy4gVGhpcyB0aGluZyBhY3R1YWxseSBhbHRlcnMgaG93IEhTUiBmb3J3YXJkcyBwYWNrZXRzLCBhbmQgdGhlIGtleSBtb2RpZmljYXRpb24gaXMgdGhhdCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0uIFBsdXMsIGl0IGRpc2FibGVzIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIHRoZSBzbGF2ZSBkZXZpY2VzLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoZSBjb2RlIGl0IHRvdWNoZXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUg4oCTIGEgZ29vZCBzaWduLlxuXG5HaXZlbiB0aGF0IGl0IGludHJvZHVjZXMgdGhlc2Ugc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgY29kZSwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuICBXZSBuZWVkIHRvIHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLiBUaGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgaHNyX2ZvcndhcmRfc2tiYCwgYGhzcl9kZXZfeG1pdGAsIGBoc3JfaGFuZGxlX2ZyYW1lYCwgYGRldl9kaXNhYmxlX2dyb2AsIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiAgVGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZCB0byBlbnN1cmUgaXMgZW5hYmxlZCBpcywgbmF0dXJhbGx5LCBgSFNSYC4gVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiBpdCBtb2RpZmllcyBIU1IncyBmb3J3YXJkaW5nIHBhdGggdG8gYWRkcmVzcyBHU08gYW5kIGRpc2FibGVzIEdSTyBvbiB0aGUgc2xhdmUgZGV2aWNlcy4gVGhlc2UgYXJlIGRlbW9uc3RyYWJsZSwgZnVuY3Rpb25hbCBjaGFuZ2VzLCB3aXRoaW4gcmVhY2hhYmxlIG5ldHdvcmsgY29kZSwgYW5kIHJpcGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTU4LCJPdXRwdXRUb2tlbnMiOjExNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QyMDozMDo1OC4yMjAxMDI5OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5NjQwMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCIsXG4gICAgXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgICBcIm5ldGlmX2Rpc2FibGVfZ3JvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIHBhY2tldCBmb3J3YXJkaW5nIHRvIGhhbmRsZSBHU08gcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0sIGFuZCBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIG5ldHdvcmsgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImhzcl9kZXZfeG1pdFwiLFxuICAgIFwiaHNyX2hhbmRsZV9mcmFtZVwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEhTUiBwYWNrZXQgZm9yd2FyZGluZyB0byBoYW5kbGUgR1NPIHBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtLCBhbmQgZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBuZXR3b3JrIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[1] Phase: Succeeded StartedAt: 2026-07-23 20:31:09 +0000 UTC FinishedAt: 2026-07-23 20:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 20:31:09 +0000 UTC FinishedAt: 2026-07-23 20:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2] Phase: Succeeded StartedAt: 2026-07-23 20:31:09 +0000 UTC FinishedAt: 2026-07-24 01:22:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 20:31:09 +0000 UTC FinishedAt: 2026-07-24 01:22:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 20:31:09 +0000 UTC FinishedAt: 2026-07-23 20:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 20:31:09 +0000 UTC FinishedAt: 2026-07-23 20:31:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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-workflowhwggv/series-workflowhwggv-convert-artifact-556945730/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 20:31:19 +0000 UTC FinishedAt: 2026-07-23 21:19:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 20:31:19 +0000 UTC FinishedAt: 2026-07-23 21:19:05 +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:*1cd57224-8f6a-4fe8-bb94-e16eba4f7230,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-workflowhwggv/series-workflowhwggv-convert-artifact-556945730/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": "9b6f1bb1-7a20-49d2-8c0f-e41d85889912", "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-workflowhwggv/series-workflowhwggv-build-action-212143104/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 20:31:19 +0000 UTC FinishedAt: 2026-07-23 21:18:40 +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:*1cd57224-8f6a-4fe8-bb94-e16eba4f7230,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-workflowhwggv/series-workflowhwggv-convert-artifact-556945730/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": "9b6f1bb1-7a20-49d2-8c0f-e41d85889912", "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-workflowhwggv/series-workflowhwggv-build-action-212143104/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:19:05 +0000 UTC FinishedAt: 2026-07-23 21:19:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:19:05 +0000 UTC FinishedAt: 2026-07-23 21:19:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:19:05 +0000 UTC FinishedAt: 2026-07-23 21:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:19:05 +0000 UTC FinishedAt: 2026-07-23 21:19:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-workflowhwggv/series-workflowhwggv-convert-artifact-2691935645/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:19:26 +0000 UTC FinishedAt: 2026-07-23 21:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:19:26 +0000 UTC FinishedAt: 2026-07-23 21:21:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9b6f1bb1-7a20-49d2-8c0f-e41d85889912,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-workflowhwggv/series-workflowhwggv-build-action-212143104/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-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:21:36 +0000 UTC FinishedAt: 2026-07-23 21:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:21:36 +0000 UTC FinishedAt: 2026-07-23 21:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:21:36 +0000 UTC FinishedAt: 2026-07-23 22:17:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:21:36 +0000 UTC FinishedAt: 2026-07-23 22:17:49 +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:*1cd57224-8f6a-4fe8-bb94-e16eba4f7230,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-workflowhwggv/series-workflowhwggv-convert-artifact-2691935645/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": "bcb7e994-e6c2-4503-af42-f09330b153d2", "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-workflowhwggv/series-workflowhwggv-build-action-3954473593/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 21:21:36 +0000 UTC FinishedAt: 2026-07-23 22:17:38 +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:*1cd57224-8f6a-4fe8-bb94-e16eba4f7230,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-workflowhwggv/series-workflowhwggv-convert-artifact-2691935645/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": "bcb7e994-e6c2-4503-af42-f09330b153d2", "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-workflowhwggv/series-workflowhwggv-build-action-3954473593/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:17:49 +0000 UTC FinishedAt: 2026-07-23 22:17:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:17:49 +0000 UTC FinishedAt: 2026-07-23 22:17:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:17:49 +0000 UTC FinishedAt: 2026-07-23 22:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:17:49 +0000 UTC FinishedAt: 2026-07-23 22:19: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:*bcb7e994-e6c2-4503-af42-f09330b153d2,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-workflowhwggv/series-workflowhwggv-build-action-3954473593/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-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:19:49 +0000 UTC FinishedAt: 2026-07-24 01:22:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:19:49 +0000 UTC FinishedAt: 2026-07-24 01:22:37 +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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"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:*9b6f1bb1-7a20-49d2-8c0f-e41d85889912,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bcb7e994-e6c2-4503-af42-f09330b153d2,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-workflowhwggv/series-workflowhwggv-build-action-212143104/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-workflowhwggv/series-workflowhwggv-build-action-3954473593/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:19:49 +0000 UTC FinishedAt: 2026-07-23 22:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:19:49 +0000 UTC FinishedAt: 2026-07-23 22:20:02 +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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"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-workflowhwggv/series-workflowhwggv-convert-artifact-536232226/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:19:49 +0000 UTC FinishedAt: 2026-07-23 22:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:19:49 +0000 UTC FinishedAt: 2026-07-23 22:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:19:49 +0000 UTC FinishedAt: 2026-07-23 22:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:20:51 +0000 UTC FinishedAt: 2026-07-24 01:22:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwggv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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":["hsr_forward_skb","hsr_dev_xmit","hsr_handle_frame","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"d64daf4c-affc-499b-9bc3-06c937303840","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-07-23 22:20:51 +0000 UTC FinishedAt: 2026-07-24 01:22:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9b6f1bb1-7a20-49d2-8c0f-e41d85889912,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bcb7e994-e6c2-4503-af42-f09330b153d2,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-workflowhwggv/series-workflowhwggv-build-action-212143104/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-workflowhwggv/series-workflowhwggv-build-action-3954473593/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-workflowhwggv/series-workflowhwggv-convert-artifact-536232226/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,}