Name: series-workflow45tjf Phase: Succeeded StartedAt: 2026-07-26 05:39:28 +0000 UTC FinishedAt: 2026-07-26 10:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[0] Phase: Succeeded StartedAt: 2026-07-26 05:39:28 +0000 UTC FinishedAt: 2026-07-26 05:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 05:39:28 +0000 UTC FinishedAt: 2026-07-26 05:58:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ba712ecfd942b68b21a4b0a5daaf72f6616cc66d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ba712ecfd942b68b21a4b0a5daaf72f6616cc66d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "290cbf0a-0bd9-46e3-b7fe-b5abc607cef4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dev_disable_gro", "netif_disable_gro", "hsr_forward_skb" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgYW5kIGNvcmUgbmV0d29ya2luZyB0byBkaXNhYmxlIEdSTyBvbiBlbnNsYXZlZCBkZXZpY2VzIGFuZCBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgaW4gSFNSIGZvcndhcmRpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI5ODRhMDBmN2FiMDc1NmE2MTFjZGVkMTcxOWRmZGNmMWU4MWRlYzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwNTo1Nzo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmViYTJjMjZhNDliYThmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlMS4uYTZjZjJhZGM4NjI1NjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xODQwLDYgJiM0MzsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XG4mIzQzO1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiAoTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVykpKVxuJiM0MztcdFx0bmV0ZGV2X1dBUk4oZGV2LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBHUk8hXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikge1xuJiM0MztcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XG4mIzQzO1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICpcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcbiAgKlx0QGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5pbmRleCA0Mzc5NDdkZDA4ZWQ1My4uMDJmYjIxNjI5NTEyODQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuQEAgLTI2OSw2ICYjNDM7MjY5LDIyIEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuJiM0MzsgKiBAZGV2OiBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlXG4mIzQzOyAqIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWQgcGFja2V0cyBtYXkgYmVcbiYjNDM7ICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4mIzQzO1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4mIzQzO1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4yNDhjYmIxNDJlMjFlMSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICYjNDM7MjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2ItXHUwMDNlZGV2ID0gbWFzdGVyLVx1MDAzZWRldjtcbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbkBAIC0zMzUsNiAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgJiM0MzszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuQEAgLTM5MCw2ICYjNDM7Mzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICYjNDM7MzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gfVxuIFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cbkBAIC02NTksNyAmIzQzOzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbiYjNDM7XHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtoc3JfbWFpbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHNyX2ZyYW1lcmVnLmhcJiMzNDtcbiBcbkBAIC02MjEsOSAmIzQzOzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbiBcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuIFx0XHQvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqL1xuLVx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGZyYW1lLVx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVx1MDAzZXNlcXVlbmNlX25yO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuJiM0MztzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiB7XG4gXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XG4gXG5AQCAtNzYwLDMgJiM0Mzs3NjIsNTAgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG4mIzQzO1xuJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuJiM0MzsgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbiYjNDM7XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxuJiM0MztcdCAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZVxuJiM0MztcdCAqIGludGVybGluay4gQSBzdXBlci1wYWNrZXQgZnJvbSBhIExBTiBzbGF2ZSBtYXkgY2FycnkgcGVyLWZyYW1lXG4mIzQzO1x0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxuJiM0MztcdCAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzXG4mIzQzO1x0ICogcGVyLWZyYW1lIHdpcmUgc2VtYW50aWNzLiBEcm9wIGJvdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfTUFTVEVSIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgIT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XG4mIzQzO1x0ICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9QUlApKVxuJiM0MztcdFx0Z290byBkcm9wX2dzbztcbiYjNDM7XG4mIzQzO1x0LyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWVcbiYjNDM7XHQgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbVxuJiM0MztcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xuJiM0MztcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuJiM0MztcdFx0Z290byBkcm9wX2dzbztcbiYjNDM7XG4mIzQzO1x0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHR3aGlsZSAoc2Vncykge1xuJiM0MztcdFx0bmV4dCA9IHNlZ3MtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xuJiM0MztcdFx0c2VncyA9IG5leHQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2Ryb3BfZ3NvOlxuJiM0MztcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdGtmcmVlX3NrYihza2IpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX3NsYXZlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbkBAIC03MywxNiAmIzQzOzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHR9XG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFxuLVx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcbi1cdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxuLVx0ICovXG4tXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0fVxuJiM0MztcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuIFxuIGZpbmlzaF9jb25zdW1lOlxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG5AQCAtMTcwLDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHJlcylcbiBcdFx0Z290byBmYWlsX3J4X2hhbmRsZXI7XG4gXHRkZXZfZGlzYWJsZV9scm8oZGV2KTtcbiYjNDM7XHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMGQxMDU0NzZlN2M1MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuJiM0MztcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40Y2EyYTdmMzk1ZWJkMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5AQCAtMCwwICYjNDM7MSw0MzcgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVGVzdCBIU1IgaGFuZGxpbmcgb2YgR1JPL0dTTyBzdXBlci1wYWNrZXRzOlxuJiM0MzsjXG4mIzQzOyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuJiM0MzsjICAgICAoZGV2X2Rpc2FibGVfZ3JvKCkpLlxuJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy5cbiYjNDM7IyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbiYjNDM7IyAgICAgc3VwZXItcGFja2V0cykgaXMgdW5mb2xkZWQgYXQgdGhlIEhTUiBmb3J3YXJkIGVudHJ5LiBFdmlkZW5jZTpcbiYjNDM7IyAgICAgaW50ZXJmYWNlLWNvdW50ZXIgZGVsdGFzIHNob3cgc3VwZXItcGFja2V0LXNpemVkIGZyYW1lcyBsZWF2aW5nXG4mIzQzOyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCYjMzk7cyBMQU4gcG9ydHMuXG4mIzQzOyNcbiYjNDM7IyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4mIzQzOyNcbiYjNDM7IyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcbiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICBpbnRlcmxpbmsgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgIExBTiBBL0IgICYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118XG4mIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgICAgICAgICAgICB8IGRfYSAvIGRfYiAgICAgfCAgICAgICAgICAgfCBwX2EgLyBwX2IgfFxuJiM0MzsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsjXG4mIzQzOyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJiMzOTtzIGZvcndhcmQgcGF0aFxuJiM0MzsjIChpbnRlcmxpbmsgUlggLVx1MDAzZSBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmRcbiYjNDM7IyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cbiYjNDM7XG4mIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2hcbiYjNDM7XG4mIzQzO25zX2R1dD1cJiMzNDtoc3ItZ3JvLWR1dFwmIzM0O1xuJiM0Mztuc19zYW49XCYjMzQ7aHNyLWdyby1zYW5cJiMzNDtcbiYjNDM7bnNfcGVlcj1cJiMzNDtoc3ItZ3JvLXBlZXJcJiMzNDtcbiYjNDM7c2FuX2lwPVwmIzM0OzEwMC42NC4wLjFcJiMzNDtcbiYjNDM7cGVlcl9pcD1cJiMzNDsxMDAuNjQuMC4zXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIEFnZ3JlZ2F0ZSBjb3VudGVyIHRocmVzaG9sZHMgZm9yIHRoZSBzdHJlYW0gdGVzdCAoYnl0ZXMvcGFja2V0cyk6XG4mIzQzOyMgU0FOX0FWR19NSU4gcHJvdmVzIEdTTyBzdXBlci1wYWNrZXRzIGxlZnQgdGhlIFNBTjsgTEFOX0FWR19NQVggaXMgYVxuJiM0MzsjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLlxuJiM0MztTQU5fQVZHX01JTj0yMDQ4XG4mIzQzO0xBTl9BVkdfTUFYPTE1MTRcbiYjNDM7XG4mIzQzO2lwZXJmX3BpZD1cJiMzNDtcJiMzNDtcbiYjNDM7c2VydmVyX3dyYXBwZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO3dvcmtkaXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO3BpZGZpbGU9XCYjMzQ7XCYjMzQ7XG4mIzQzO3JjZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzO2NsZWFudXAoKVxuJiM0Mzt7XG4mIzQzO1x0IyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkcyBhZ2FpbnN0XG4mIzQzO1x0IyBQSUQgcmV1c2UgYmV0d2VlbiBwdWJsaWNhdGlvbiBhbmQgY2xlYW51cClcbiYjNDM7XHRpZiBbIC1uIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiB2YWxpZF9zZXJ2ZXJfcGlkIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OzsgdGhlblxuJiM0MztcdFx0a2lsbCBcJiMzNDske2lwZXJmX3BpZH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGZpXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhXG4mIzQzO1x0XHQjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwXG4mIzQzO1x0XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFx0a2lsbCAtMCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXG4mIzQzO1x0XHRcdHNsZWVwIDAuMVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdFx0a2lsbCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0XHR3YWl0IFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMgcHJvY2Vzc2VzIHRoYXRcbiYjNDM7XHQjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMsIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlblxuJiM0MztcdCMgU0lHS0lMTCBhbnkgc3Vydml2b3IgYmVmb3JlIHRvdWNoaW5nIHRoZSBuYW1lc3BhY2UgbmFtZS4gQSBibGluZFxuJiM0MztcdCMgcGtpbGwgd291bGQgc2NhbiB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXG4mIzQzO1x0bG9jYWwgX3AgX3N0aWxsXG4mIzQzO1x0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcJiMzNDskbnNfcGVlclwmIzM0OyAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JChjYXQgL3Byb2MvXCYjMzQ7JF9wXCYjMzQ7L2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcJiMzNDsgPSBcJiMzNDtpcGVyZjNcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0XHRraWxsIFwmIzM0OyRfcFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0XHRmaVxuJiM0MztcdGRvbmVcbiYjNDM7XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdF9zdGlsbD0wXG4mIzQzO1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyRuc19wZWVyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpOyBkb1xuJiM0MztcdFx0XHRpZiBbIFwmIzM0OyQoY2F0IC9wcm9jL1wmIzM0OyRfcFwmIzM0Oy9jb21tIDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7ID0gXCYjMzQ7aXBlcmYzXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFx0XHRfc3RpbGw9MVxuJiM0MztcdFx0XHRcdGJyZWFrXG4mIzQzO1x0XHRcdGZpXG4mIzQzO1x0XHRkb25lXG4mIzQzO1x0XHRbIFwmIzM0OyRfc3RpbGxcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRcdHNsZWVwIDAuMVxuJiM0MztcdGRvbmVcbiYjNDM7XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyRuc19wZWVyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpOyBkb1xuJiM0MztcdFx0aWYgWyBcJiMzNDskKGNhdCAvcHJvYy9cJiMzNDskX3BcJiMzNDsvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwmIzM0OyA9IFwmIzM0O2lwZXJmM1wmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRcdGtpbGwgLTkgXCYjMzQ7JF9wXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdGZpXG4mIzQzO1x0ZG9uZVxuJiM0MztcdCMgcmVtb3ZlIG9ubHkgdGhlIGtub3duIG5vbi1lbXB0eSBwcml2YXRlIGRpcmVjdG9yeVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHt3b3JrZGlyfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBbIC1kIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cm0gLXJmIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcdHdvcmtkaXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0cGlkZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7XHRyY2ZpbGU9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0aXAgbmV0bnMgZGVsIFwmIzM0OyRuc19kdXRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskbnNfc2FuXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRpcCBuZXRucyBkZWwgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7Y2hlY2tfdG9vbCgpXG4mIzQzO3tcbiYjNDM7XHRpZiAhIGNvbW1hbmQgLXYgXCYjMzQ7JDFcJiMzNDsgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwmIzM0O1xuJiM0MztcdFx0ZXhpdCAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7bnN4KClcbiYjNDM7e1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JDFcJiMzNDsgYmFzaCAtYyBcJiMzNDskMlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF90b3BvKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zXG4mIzQzO1xuJiM0MztcdGNsZWFudXBcbiYjNDM7XHRmb3IgbnMgaW4gXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0OyRuc19wZWVyXCYjMzQ7OyBkb1xuJiM0MztcdFx0aXAgbmV0bnMgYWRkIFwmIzM0OyRuc1wmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9hIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgXCYjMzQ7JG5zX3BlZXJcJiMzNDtcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX2IgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcJiMzNDskbnNfcGVlclwmIzM0O1xuJiM0MztcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFwmIzM0OyRuc19zYW5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxuJiM0MztcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xuJiM0MztcdFx0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO1x0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXG4mIzQzO1x0XHRuc3ggXCYjMzQ7JG5zX3BlZXJcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0IGRfaWwgdXBcJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczBcJiMzNDtcbiYjNDM7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxuJiM0MztcdFx0c2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFxcXG4mIzQzO1x0XHRpcCBsaW5rIHNldCBoc3IwIHVwXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19wZWVyXCYjMzQ7IFwmIzM0O2lwIGxpbmsgYWRkIGhzcjEgdHlwZSBoc3IgXFxcbiYjNDM7XHRcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxuJiM0MztcdFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJiMzOTtzIHN1cGVydmlzaW9uIGZyYW1lcy5cbiYjNDM7XHRzbGVlcCAyXG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoZWNrX2ZlYXR1cmUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBpZmFjZT1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXR1cmU9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XHRsb2NhbCB3YW50PVwmIzM0OyQ0XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7ZXRodG9vbCAtayAkaWZhY2VcJiMzNDsgfCBncmVwIC1xIFwmIzM0O14kZmVhdHVyZTogJHdhbnRcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXG4mIzQzOyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC5cbiYjNDM7Y2hlY2tfZmVhdHVyZV9ub3Rfb24oKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBpZmFjZT1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXR1cmU9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgbnN4IFwmIzM0OyRuc1wmIzM0OyBcJiMzNDtldGh0b29sIC1rICRpZmFjZVwmIzM0OyB8IGdyZXAgLXEgXCYjMzQ7XiRmZWF0dXJlOiBvblwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcbiYjNDM7e1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7R1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwmIzM0O1xuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0hXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC10Y3A2LXNlZ21lbnRhdGlvblxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC11ZHAtc2VnbWVudGF0aW9uXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIHR4LWdzby1saXN0XG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy5cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7YWxsb2Nfd29ya2RpcigpXG4mIzQzO3tcbiYjNDM7XHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cbiYjNDM7XHQjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZVxuJiM0MztcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cbiYjNDM7XHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBta3RlbXAgLWQgZmFpbGVkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IDFcbiYjNDM7XHR9XG4mIzQzO1x0Y2htb2QgNzAwIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDtcbiYjNDM7XHRwaWRmaWxlPVwmIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkXCYjMzQ7XG4mIzQzO1x0cmNmaWxlPVwmIzM0OyR7d29ya2Rpcn0vaXBlcmYucmNcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIHBlZXIgbmV0bnMuXG4mIzQzO3ZhbGlkX3NlcnZlcl9waWQoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgcD1cJiMzNDskMVwmIzM0O1xuJiM0MztcbiYjNDM7XHRbWyBcJiMzNDskcFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgcmV0dXJuIDFcbiYjNDM7XHRraWxsIC0wIFwmIzM0OyRwXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcbiYjNDM7XHRbIFwmIzM0OyQoY2F0IC9wcm9jL1wmIzM0OyRwXCYjMzQ7L2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcJiMzNDsgPSBcJiMzNDtpcGVyZjNcJiMzNDsgXSB8fCByZXR1cm4gMVxuJiM0MztcdGlwIG5ldG5zIHBpZHMgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFwmIzM0OyRwXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4mIzQzO1xuJiM0MztcdCMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHNcbiYjNDM7XHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuJiM0MztcdGFsbG9jX3dvcmtkaXJcbiYjNDM7XHQoIG5zeCBcJiMzNDskbnNfcGVlclwmIzM0OyBcJiMzNDtpcGVyZjMgLXMgLTEgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjYgXFxcbiYjNDM7XHRcdGVjaG8gXFwkISBcdTAwM2UgJHtwaWRmaWxlfTsgXFxcbiYjNDM7XHRcdHdhaXQgXFwkITsgXFxcbiYjNDM7XHRcdGVjaG8gXFwkPyBcdTAwM2UgJHtyY2ZpbGV9XCYjMzQ7ICkgXHUwMDI2XG4mIzQzO1x0c2VydmVyX3dyYXBwZXI9JCFcbiYjNDM7XHQjIHRoZSB3cmFwcGVyIHdyaXRlcyB0aGUgcGlkZmlsZSBhc3luY2hyb25vdXNseTsgd2FpdCBmb3IgaXQgdG9cbiYjNDM7XHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuJiM0MztcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuJiM0MztcdFx0WyAtcyBcJiMzNDske3BpZGZpbGV9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4mIzQzO1x0XHRzbGVlcCAwLjFcbiYjNDM7XHRkb25lXG4mIzQzO1x0aWYgWyAhIC1zIFwmIzM0OyR7cGlkZmlsZX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgcHVibGlzaCBhIHBpZCAobm8gcGlkZmlsZSlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0Y2FuZGlkYXRlX3BpZD0kKFx1MDAzY1wmIzM0OyR7cGlkZmlsZX1cJiMzNDspXG4mIzQzO1x0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2NhbmRpZGF0ZV9waWR9JiMzOTsgZmFpbGVkIHZhbGlkYXRpb25cJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDtcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBQcmludCBcJiMzNDtcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCYjMzQ7IGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC5cbiYjNDM7cmVhZF90eF9jb3VudGVycygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz1cJiMzNDskMVwmIzM0OyBkZXY9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBvdXQgY250XG4mIzQzO1xuJiM0MztcdG91dD0kKG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7aXAgLXMgbGluayBzaG93ICRkZXZcJiMzNDsgfCBcXFxuJiM0MztcdFx0YXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OylcbiYjNDM7XHRjbnQ9JChlY2hvIFwmIzM0OyRvdXRcJiMzNDsgfCBncmVwIC1jICYjMzk7XlswLTldKiBbMC05XSokJiMzOTspXG4mIzQzO1x0aWYgWyBcJiMzNDskY250XCYjMzQ7IC1uZSAxIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2IChyZWNvcmRzPSRjbnQpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGVjaG8gXCYjMzQ7JG91dFwmIzM0O1xuJiM0MztcdHJldHVybiAwXG4mIzQzO31cbiYjNDM7XG4mIzQzO2V2YWxfY291bnRlcl9kZWx0YSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuYW1lPVwmIzM0OyQxXCYjMzQ7IGIwPVwmIzM0OyQyXCYjMzQ7IHAwPVwmIzM0OyQzXCYjMzQ7IGIxPVwmIzM0OyQ0XCYjMzQ7IHAxPVwmIzM0OyQ1XCYjMzQ7IG9wPVwmIzM0OyQ2XCYjMzQ7IGxpbWl0PVwmIzM0OyQ3XCYjMzQ7XG4mIzQzO1x0bG9jYWwgYmQgcGRcbiYjNDM7XG4mIzQzO1x0aWYgISBbWyBcJiMzNDskYjBcJiMzNDsgPX4gXlswLTldJiM0MzskIFx1MDAyNlx1MDAyNiBcJiMzNDskYjFcJiMzNDsgPX4gXlswLTldJiM0MzskIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFx0XCYjMzQ7JHAwXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBcdTAwMjZcdTAwMjYgXCYjMzQ7JHAxXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRiZD0kKChiMSAtIGIwKSlcbiYjNDM7XHRwZD0kKChwMSAtIHAwKSlcbiYjNDM7XHRpZiBbIFwmIzM0OyRiZFwmIzM0OyAtbHQgMCBdIHx8IFsgXCYjMzQ7JHBkXCYjMzQ7IC1sZSAwIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZSAoYnl0ZXM9JGJkIHBrdHM9JHBkKVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRpZiBbIFwmIzM0OyRvcFwmIzM0OyA9IFwmIzM0O2d0XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JGJkXCYjMzQ7IC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2M9ICRsaW1pdFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0XHRyZXQ9MVxuJiM0MztcdFx0XHRyZXR1cm4gMVxuJiM0MztcdFx0ZmlcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRpZiBbIFwmIzM0OyRiZFwmIzM0OyAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cbiYjNDM7XHRcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNlICRsaW1pdFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0XHRyZXQ9MVxuJiM0MztcdFx0XHRyZXR1cm4gMVxuJiM0MztcdFx0ZmlcbiYjNDM7XHRmaVxuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogJG5hbWUgY291bnRlciBkZWx0YSBieXRlcz0kYmQgcGFja2V0cz0kcGRcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0OyhvcCAkb3AgbGltaXQgJGxpbWl0KSBbIE9LIF1cJiMzNDtcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuJiM0Mztkb190c29fc3RyZWFtX3Rlc3QoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgb3V0IHNlbmRlcl9yZXRyIHNlcnZlcl9yY1xuJiM0MztcdGxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMVxuJiM0MztcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMVxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvblxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7Q291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogUnVubmluZyAxMHMgVENQIHN0cmVhbSBTQU4gLVx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuXCYjMzQ7XG4mIzQzO1x0c3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHQjIENvdW50ZXIgc25hcHNob3RzIGFyb3VuZCB0aGUgc3RyZWFtIHdpbmRvdy4gVGhlIFNBTi1zaWRlIGF2ZXJhZ2VcbiYjNDM7XHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xuJiM0MztcdCMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYXG4mIzQzO1x0IyAoYWdncmVnYXRlIHByb29mIHRoYXQgYnVsayBvdXRwdXQgd2FzIHNlZ21lbnRlZCBwZXItZnJhbWUpLiBUaGVzZVxuJiM0MztcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXG4mIzQzO1x0c2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTBcbiYjNDM7XHRyZWFkIC1yIHNhbl9iMCBzYW5fcDAgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGFfYjAgYV9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9hKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGJfYjAgYl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iKVxuJiM0MztFT0ZcbiYjNDM7XHRbIFwmIzM0OyR7cmV0Oi0wfVwmIzM0OyAtZXEgMCBdIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHQjIHJhdGUtY2FwcGVkOiB0aGUgUFJJTUFSWSBkaXNjcmltaW5hdG9yIGlzIHRoZSBjb3VudGVyIGluZXF1YWxpdHlcbiYjNDM7XHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXG4mIzQzO1x0IyBVbmNhcHBlZCBydW5zIGZsYXAgYXQgVk0vQ0kgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYVxuJiM0MztcdCMgZnVuY3Rpb25hbCBwcm9ibGVtLlxuJiM0MztcdGlmICEgb3V0PSQobnN4IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxuJiM0MztcdFx0LWIgMkcgLXQgMTBcJiMzNDsgMlx1MDAzZVx1MDAyNjEpOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOlwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0cmVhZCAtciBzYW5fYjEgc2FuX3AxIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX3NhblwmIzM0OyBzMClcbiYjNDM7RU9GXG4mIzQzO1x0cmVhZCAtciBhX2IxIGFfcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYSlcbiYjNDM7RU9GXG4mIzQzO1x0cmVhZCAtciBiX2IxIGJfcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYilcbiYjNDM7RU9GXG4mIzQzO1xuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtTQU4gczAgVFhcJiMzNDsgXCYjMzQ7JHNhbl9iMFwmIzM0OyBcJiMzNDskc2FuX3AwXCYjMzQ7IFwmIzM0OyRzYW5fYjFcJiMzNDsgXCYjMzQ7JHNhbl9wMVwmIzM0OyBcXFxuJiM0MztcdFx0Z3QgXCYjMzQ7JFNBTl9BVkdfTUlOXCYjMzQ7XG4mIzQzO1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwmIzM0O0RVVCBkX2EgVFhcJiMzNDsgXCYjMzQ7JGFfYjBcJiMzNDsgXCYjMzQ7JGFfcDBcJiMzNDsgXCYjMzQ7JGFfYjFcJiMzNDsgXCYjMzQ7JGFfcDFcJiMzNDsgXFxcbiYjNDM7XHRcdGxlIFwmIzM0OyRMQU5fQVZHX01BWFwmIzM0O1xuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtEVVQgZF9iIFRYXCYjMzQ7IFwmIzM0OyRiX2IwXCYjMzQ7IFwmIzM0OyRiX3AwXCYjMzQ7IFwmIzM0OyRiX2IxXCYjMzQ7IFwmIzM0OyRiX3AxXCYjMzQ7IFxcXG4mIzQzO1x0XHRsZSBcJiMzNDskTEFOX0FWR19NQVhcJiMzNDtcbiYjNDM7XHRbIFwmIzM0OyR7cmV0Oi0wfVwmIzM0OyAtZXEgMCBdIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHQjIHN1Y2Nlc3MgcGF0aDogdGhlIG9uZS1zaG90IHNlcnZlciBleGl0cyBieSBpdHNlbGY7IHJlYXAgdGhlXG4mIzQzO1x0IyB3cmFwcGVyLCB0aGVuIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIHRoZSBzZXJ2ZXImIzM5O3MgcmVhbCBzdGF0dXNcbiYjNDM7XHR3YWl0IFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7XG4mIzQzO1x0c2VydmVyX3dyYXBwZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0aWYgWyAhIC1zIFwmIzM0OyR7cmNmaWxlfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0c2VydmVyX3JjPSQoY2F0IFwmIzM0OyR7cmNmaWxlfVwmIzM0OylcbiYjNDM7XHRpZiAhIFtbIFwmIzM0OyRzZXJ2ZXJfcmNcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgXCYjMzQ7JHNlcnZlcl9yY1wmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5O1wmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7XHQjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUXG4mIzQzO1x0IyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyXG4mIzQzO1x0IyBnYXRlcyAodGhlIGNvdW50ZXIgaW5lcXVhbGl0aWVzIGFib3ZlIGFyZSB0aGUgcHJpbWFyeSBldmlkZW5jZSkuXG4mIzQzO1x0c2VuZGVyX3JldHI9JChlY2hvIFwmIzM0OyRvdXRcJiMzNDsgfCBhd2sgJiMzOTsvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfSYjMzk7KVxuJiM0MztcdGlmIFsgXCYjMzQ7JChlY2hvIFwmIzM0OyRzZW5kZXJfcmV0clwmIzM0OyB8IGdyZXAgLUVjICYjMzk7XlswLTldJiM0MzskJiMzOTspXCYjMzQ7IC1uZSAxIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IFRDUCBzdHJlYW0gZG9uZTtcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0O3NlbmRlciByZXRyYW5zbWl0cz0kc2VuZGVyX3JldHIgKHNlY29uZGFyeSBzaWduYWwpXCYjMzQ7XG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtRSBcJiMzNDtzZW5kZXJ8cmVjZWl2ZXJcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlc1xuJiM0MztjaGVja190b29sIGV0aHRvb2xcbiYjNDM7Y2hlY2tfdG9vbCBpcGVyZjNcbiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0XG4mIzQzO1xuJiM0MzsjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXG4mIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0dXBfdG9wb1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBEVVQpLlwmIzM0O1xuJiM0Mztkb19waW5nIFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7JHBlZXJfaXBcJiMzNDtcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtJbml0aWFsIHZhbGlkYXRpb24gZmFpbGVkLlwmIzM0O1xuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXG4mIzQzO2RvX3Rzb19zdHJlYW1fdGVzdFxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O0dTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlwmIzM0O1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBBbGwgZ29vZC5cJiMzNDtcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgYW5kIGNvcmUgbmV0d29ya2luZyB0byBkaXNhYmxlIEdSTyBvbiBlbnNsYXZlZCBkZXZpY2VzIGFuZCBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgaW4gSFNSIGZvcndhcmRpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI5ODRhMDBmN2FiMDc1NmE2MTFjZGVkMTcxOWRmZGNmMWU4MWRlYzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAwNTo1Nzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5lYmEyYzI2YTQ5YmE4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0zNDM0LDYgJiM0MzszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspOwogdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpOwogdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNTkzM2M1ZGFiMDllZTEuLmE2Y2YyYWRjODYyNTY1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg0MCw2ICYjNDM7MTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJfQogfQogCiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsKJiM0MzsJZGV2LSZndDt3YW50ZWRfZmVhdHVyZXMgJmFtcDs9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7CiYjNDM7CW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSkKJiM0MzsJCW5ldGRldl9XQVJOKGRldiwgJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBHUk8hXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CW5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHsKJiM0MzsJCW5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpOwomIzQzOwkJbmV0aWZfZGlzYWJsZV9ncm8obG93ZXJfZGV2KTsKJiM0MzsJCW5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqCWRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2UKICAqCUBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jCmluZGV4IDQzNzk0N2RkMDhlZDUzLi4wMmZiMjE2Mjk1MTI4NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuYwpAQCAtMjY5LDYgJiM0MzsyNjksMjIgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTsKIAomIzQzOy8qKgomIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQomIzQzOyAqIEBkZXY6IGRldmljZQomIzQzOyAqCiYjNDM7ICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlCiYjNDM7ICogY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZCBwYWNrZXRzIG1heSBiZQomIzQzOyAqIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJbmV0ZGV2X2xvY2tfb3BzKGRldik7CiYjNDM7CW5ldGlmX2Rpc2FibGVfZ3JvKGRldik7CiYjNDM7CW5ldGRldl91bmxvY2tfb3BzKGRldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTsKJiM0MzsKIC8qKgogICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlCiAgKiBAZGV2OiBkZXZpY2UKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmMKaW5kZXggNTU1NWI3MWFiMTliNTkuLjI0OGNiYjE0MmUyMWUxIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMjMyLDkgJiM0MzsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXNrYi0mZ3Q7ZGV2ID0gbWFzdGVyLSZndDtkZXY7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9IGVsc2UgewogCQlkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJCWhzcl9zdGFnLSZndDtzZXF1ZW5jZV9uciA9IGh0b25zKGhzci0mZ3Q7c2VxdWVuY2VfbnIpOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gdHlwZTsKIAkvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqLwpAQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKIAl9CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzdXBfc2VxdWVuY2VfbnIpOwogCWhzci0mZ3Q7c3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7CiAKQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKIAloc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTsKIAlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIG1hc3Rlci0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiB9CiAKIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24KQEAgLTY1OSw3ICYjNDM7NjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiAKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkJICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8CiYjNDM7CQkJICAgTkVUSUZfRl9IV19DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTY0Li4zZmNkYmFjNDljNTlkYSAxMDA2NDQKLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2dzby5oJmd0OwogI2luY2x1ZGUgJiMzNDtoc3JfbWFpbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHNyX2ZyYW1lcmVnLmgmIzM0OwogCkBAIC02MjEsOSAmIzQzOzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUiB8fAogCSAgICBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHsKIAkJLyogU2VxdWVuY2UgbnIgZm9yIHRoZSBtYXN0ZXIvaW50ZXJsaW5rIG5vZGUgKi8KLQkJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCQlmcmFtZS0mZ3Q7c2VxdWVuY2VfbnIgPSBoc3ItJmd0O3NlcXVlbmNlX25yOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9CiB9CiAKQEAgLTczMSw3ICYjNDM7NzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi8KLXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0MztzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7CiAKQEAgLTc2MCwzICYjNDM7NzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIAlwb3J0LSZndDtkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwogCWtmcmVlX3NrYihza2IpOwogfQomIzQzOwomIzQzOy8qIEdTTyBmYW4tb3V0IGZ1bm5lbDogdW5mb2xkIHN1cGVyLXBhY2tldHMgYmVmb3JlIHBlci1mcmFtZSBwcm9jZXNzaW5nIHNvCiYjNDM7ICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLgomIzQzOyAqLwomIzQzO3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkgewomIzQzOwkJaHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZAomIzQzOwkgKiBvbiB0aGUgbWFzdGVyLCBvciBhcnJpdmluZyB1bnRhZ2dlZCBmcm9tIHRoZSBTQU4gc2lkZSBvbiB0aGUKJiM0MzsJICogaW50ZXJsaW5rLiBBIHN1cGVyLXBhY2tldCBmcm9tIGEgTEFOIHNsYXZlIG1heSBjYXJyeSBwZXItZnJhbWUKJiM0MzsJICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdAomIzQzOwkgKiByZWNvdmVyOyBhbiBhbHJlYWR5LXRhZ2dlZCBIU1IvUFJQIHN1cGVyLXBhY2tldCB2aW9sYXRlcwomIzQzOwkgKiBwZXItZnJhbWUgd2lyZSBzZW1hbnRpY3MuIERyb3AgYm90aC4KJiM0MzsJICovCiYjNDM7CWlmIChwb3J0LSZndDt0eXBlICE9IEhTUl9QVF9NQVNURVIgJmFtcDsmYW1wOyBwb3J0LSZndDt0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspCiYjNDM7CQlnb3RvIGRyb3BfZ3NvOwomIzQzOwlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8CiYjNDM7CSAgICBza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX1BSUCkpCiYjNDM7CQlnb3RvIGRyb3BfZ3NvOwomIzQzOwomIzQzOwkvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZQomIzQzOwkgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbQomIzQzOwkgKiB0aGUgaW50ZXJsaW5rIGZvbGxvd3MgUlggY2hlY2tzdW0gc2VtYW50aWNzLgomIzQzOwkgKi8KJiM0MzsJc2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfTUFTVEVSKTsKJiM0MzsJaWYgKElTX0VSUihzZWdzKSB8fCB1bmxpa2VseSghc2VncykpCiYjNDM7CQlnb3RvIGRyb3BfZ3NvOwomIzQzOwomIzQzOwljb25zdW1lX3NrYihza2IpOwomIzQzOwl3aGlsZSAoc2VncykgewomIzQzOwkJbmV4dCA9IHNlZ3MtJmd0O25leHQ7CiYjNDM7CQlzZWdzLSZndDtuZXh0ID0gTlVMTDsKJiM0MzsJCWhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7CiYjNDM7CQlzZWdzID0gbmV4dDsKJiM0MzsJfQomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7ZHJvcF9nc286CiYjNDM7CXBvcnQtJmd0O2Rldi0mZ3Q7c3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzO30KZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jCmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDQKLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jCkBAIC03MywxNiAmIzQzOzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCiAJfQogCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7CiAKLQkvKiBPbmx5IHRoZSBmcmFtZXMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJsaW5rIHBvcnQgd2lsbCBhc3NpZ24gYQotCSAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLgotCSAqLwotCWlmIChwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHsKLQkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKLQkJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKLQl9IGVsc2UgewotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQl9CiYjNDM7CWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwogCiBmaW5pc2hfY29uc3VtZToKIAlyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDsKQEAgLTE3MCw2ICYjNDM7MTYxLDcgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAocmVzKQogCQlnb3RvIGZhaWxfcnhfaGFuZGxlcjsKIAlkZXZfZGlzYWJsZV9scm8oZGV2KTsKJiM0MzsJZGV2X2Rpc2FibGVfZ3JvKGRldik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzM2QuLjBkMTA1NDc2ZTdjNTBkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsNyBAQAogdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uCiAKIFRFU1RfUFJPR1MgOj0gXAomIzQzOwloc3JfZ3JvX3N1cGVycGFja2V0LnNoIFwKIAloc3JfcGluZy5zaCBcCiAJaHNyX3JlZGJveC5zaCBcCiAJbGlua19mYXVsdHMuc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40Y2EyYTdmMzk1ZWJkMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaApAQCAtMCwwICYjNDM7MSw0MzcgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6CiYjNDM7IwomIzQzOyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdAomIzQzOyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuCiYjNDM7IyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuCiYjNDM7IyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU08KJiM0MzsjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkuIEV2aWRlbmNlOgomIzQzOyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZwomIzQzOyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCYjMzk7cyBMQU4gcG9ydHMuCiYjNDM7IwomIzQzOyMgVG9wb2xvZ3kgKDEwMC42NC4wLjAvMjQpOgomIzQzOyMKJiM0MzsjICAgbnNfc2FuICAgICAgICAgICAgICAgICAgICBuc19kdXQgICAgICAgICAgICAgICAgICAgICAgbnNfcGVlcgomIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgaW50ZXJsaW5rICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICBMQU4gQS9CICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsKJiM0MzsjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118CiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8CiYjNDM7IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsKJiM0MzsjCiYjNDM7IyBTQU4gdHJhZmZpYyByZWFjaGVzIG5zX3BlZXIgb25seSB0aHJvdWdoIGhzcjAmIzM5O3MgZm9yd2FyZCBwYXRoCiYjNDM7IyAoaW50ZXJsaW5rIFJYIC0mZ3Q7IExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZAomIzQzOyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuCiYjNDM7CiYjNDM7c291cmNlIC4vaHNyX2NvbW1vbi5zaAomIzQzOwomIzQzO25zX2R1dD0mIzM0O2hzci1ncm8tZHV0JiMzNDsKJiM0Mztuc19zYW49JiMzNDtoc3ItZ3JvLXNhbiYjMzQ7CiYjNDM7bnNfcGVlcj0mIzM0O2hzci1ncm8tcGVlciYjMzQ7CiYjNDM7c2FuX2lwPSYjMzQ7MTAwLjY0LjAuMSYjMzQ7CiYjNDM7cGVlcl9pcD0mIzM0OzEwMC42NC4wLjMmIzM0OwomIzQzOwomIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKToKJiM0MzsjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGEKJiM0MzsjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLgomIzQzO1NBTl9BVkdfTUlOPTIwNDgKJiM0MztMQU5fQVZHX01BWD0xNTE0CiYjNDM7CiYjNDM7aXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MztzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7d29ya2Rpcj0mIzM0OyYjMzQ7CiYjNDM7cGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7cmNmaWxlPSYjMzQ7JiMzNDsKJiM0MzsKJiM0MztjbGVhbnVwKCkKJiM0Mzt7CiYjNDM7CSMgZXhhY3QtUElEIGtpbGwgb25seSBhZnRlciBSRS12YWxpZGF0aW5nIGlkZW50aXR5IChndWFyZHMgYWdhaW5zdAomIzQzOwkjIFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKQomIzQzOwlpZiBbIC1uICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgXSAmYW1wOyZhbXA7IHZhbGlkX3NlcnZlcl9waWQgJiMzNDske2lwZXJmX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJa2lsbCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWZpCiYjNDM7CWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CWlmIFsgLW4gJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IF07IHRoZW4KJiM0MzsJCSMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXMgYm91bmQgc28gYQomIzQzOwkJIyBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgY2xlYW51cAomIzQzOwkJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQkJa2lsbCAtMCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJCQlzbGVlcCAwLjEKJiM0MzsJCWRvbmUKJiM0MzsJCWtpbGwgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQl3YWl0ICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJc2VydmVyX3dyYXBwZXI9JiMzNDsmIzM0OwomIzQzOwlmaQomIzQzOwkjIGxhc3QgcmVzb3J0LCBuYW1lc3BhY2Utc2NvcGVkIG9ubHk6IFRFUk0gdGhlIGlwZXJmMyBwcm9jZXNzZXMgdGhhdAomIzQzOwkjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMsIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlbgomIzQzOwkjIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZSB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQKJiM0MzsJIyBwa2lsbCB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy4KJiM0MzsJbG9jYWwgX3AgX3N0aWxsCiYjNDM7CWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCWlmIFsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyRfcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF07IHRoZW4KJiM0MzsJCQlraWxsICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCWZpCiYjNDM7CWRvbmUKJiM0MzsJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQlfc3RpbGw9MAomIzQzOwkJZm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyAmIzM0OyRuc19wZWVyJiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIFsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyRfcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF07IHRoZW4KJiM0MzsJCQkJX3N0aWxsPTEKJiM0MzsJCQkJYnJlYWsKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwkJWyAmIzM0OyRfc3RpbGwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCWlmIFsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyRfcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF07IHRoZW4KJiM0MzsJCQlraWxsIC05ICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCWZpCiYjNDM7CWRvbmUKJiM0MzsJIyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5CiYjNDM7CWlmIFsgLW4gJiMzNDske3dvcmtkaXJ9JiMzNDsgXSAmYW1wOyZhbXA7IFsgLWQgJiMzNDske3dvcmtkaXJ9JiMzNDsgXTsgdGhlbgomIzQzOwkJcm0gLXJmICYjMzQ7JHt3b3JrZGlyfSYjMzQ7CiYjNDM7CWZpCiYjNDM7CXdvcmtkaXI9JiMzNDsmIzM0OwomIzQzOwlwaWRmaWxlPSYjMzQ7JiMzNDsKJiM0MzsJcmNmaWxlPSYjMzQ7JiMzNDsKJiM0MzsJaXAgbmV0bnMgZGVsICYjMzQ7JG5zX2R1dCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyRuc19zYW4mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlpcCBuZXRucyBkZWwgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Y2hlY2tfdG9vbCgpCiYjNDM7ewomIzQzOwlpZiAhIGNvbW1hbmQgLXYgJiMzNDskMSYjMzQ7ICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDEmIzM0OwomIzQzOwkJZXhpdCAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO25zeCgpCiYjNDM7ewomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JDEmIzM0OyBiYXNoIC1jICYjMzQ7JDImIzM0OwomIzQzO30KJiM0MzsKJiM0MztzZXR1cF90b3BvKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zCiYjNDM7CiYjNDM7CWNsZWFudXAKJiM0MzsJZm9yIG5zIGluICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7JG5zX3BlZXImIzM0OzsgZG8KJiM0MzsJCWlwIG5ldG5zIGFkZCAmIzM0OyRucyYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgZF9hIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zICYjMzQ7JG5zX3BlZXImIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX2IgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgJiMzNDskbnNfcGVlciYjMzQ7CiYjNDM7CWlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyAmIzM0OyRuc19zYW4mIzM0OwomIzQzOwomIzQzOwkjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uCiYjNDM7CWZvciBpZmFjZSBpbiBkX2EgZF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXAmIzM0OwomIzQzOwlkb25lCiYjNDM7CWZvciBpZmFjZSBpbiBwX2EgcF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgaXAgbGluayBzZXQgJGlmYWNlIHVwJiMzNDsKJiM0MzsJZG9uZQomIzQzOwomIzQzOwluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCBkX2lsIHVwJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwJiMzNDsKJiM0MzsKJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXAomIzQzOwkJaXAgbGluayBzZXQgaHNyMCB1cCYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19wZWVyJiMzNDsgJiMzNDtpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFwKJiM0MzsJCXNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBoc3IxIHVwOyBpcCBhZGRyIGFkZCAkcGVlcl9pcC8yNCBkZXYgaHNyMSYjMzQ7CiYjNDM7CiYjNDM7CSMgTGV0IHRoZSBub2RlcyBzZWUgZWFjaCBvdGhlciYjMzk7cyBzdXBlcnZpc2lvbiBmcmFtZXMuCiYjNDM7CXNsZWVwIDIKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hlY2tfZmVhdHVyZSgpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0mIzM0OyQxJiMzNDsKJiM0MzsJbG9jYWwgaWZhY2U9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIGZlYXR1cmU9JiMzNDskMyYjMzQ7CiYjNDM7CWxvY2FsIHdhbnQ9JiMzNDskNCYjMzQ7CiYjNDM7CiYjNDM7CWlmIG5zeCAmIzM0OyRucyYjMzQ7ICYjMzQ7ZXRodG9vbCAtayAkaWZhY2UmIzM0OyB8IGdyZXAgLXEgJiMzNDteJGZlYXR1cmU6ICR3YW50JiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzICR3YW50IFsgT0sgXSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG5vdCAkd2FudCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MzsjIE9mZi1vci1hYnNlbnQgdmFyaWFudDogZmFpbHMgb25seSB3aGVuIHRoZSBmZWF0dXJlIGlzIHByZXNlbnQgQU5EIG9uLAomIzQzOyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC4KJiM0MztjaGVja19mZWF0dXJlX25vdF9vbigpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0mIzM0OyQxJiMzNDsKJiM0MzsJbG9jYWwgaWZhY2U9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIGZlYXR1cmU9JiMzNDskMyYjMzQ7CiYjNDM7CiYjNDM7CWlmIG5zeCAmIzM0OyRucyYjMzQ7ICYjMzQ7ZXRodG9vbCAtayAkaWZhY2UmIzM0OyB8IGdyZXAgLXEgJiMzNDteJGZlYXR1cmU6IG9uJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIG5vdCBvbiBbIE9LIF0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mztkb19ncm9fZmVhdHVyZV9jaGVja3MoKQomIzQzO3sKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLiYjMzQ7CiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9hIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYiBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZgomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7R1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSByeC1ncm8taHcgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9iIHJ4LWdyby1odyBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2lsIHJ4LWdyby1odyBvZmYKJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0hXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy4mIzM0OwomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZV9ub3Rfb24gJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0eC10Y3A2LXNlZ21lbnRhdGlvbgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LXVkcC1zZWdtZW50YXRpb24KJiM0MzsJY2hlY2tfZmVhdHVyZV9ub3Rfb24gJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0eC1nc28tbGlzdAomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7SFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7YWxsb2Nfd29ya2RpcigpCiYjNDM7ewomIzQzOwkjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc28KJiM0MzsJIyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmUKJiM0MzsJIyBpcyBhIGhhcmQgdGVzdCBmYWlsdXJlLgomIzQzOwl3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwgewomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IG1rdGVtcCAtZCBmYWlsZWQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJZXhpdCAxCiYjNDM7CX0KJiM0MzsJY2htb2QgNzAwICYjMzQ7JHt3b3JrZGlyfSYjMzQ7CiYjNDM7CXBpZGZpbGU9JiMzNDske3dvcmtkaXJ9L2lwZXJmLnBpZCYjMzQ7CiYjNDM7CXJjZmlsZT0mIzM0OyR7d29ya2Rpcn0vaXBlcmYucmMmIzM0OwomIzQzO30KJiM0MzsKJiM0MzsjIE51bWVyaWMsIGFsaXZlLCBjb21tID09IGlwZXJmMywgYW5kIHJlYWxseSBvd25lZCBieSB0aGUgcGVlciBuZXRucy4KJiM0Mzt2YWxpZF9zZXJ2ZXJfcGlkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHA9JiMzNDskMSYjMzQ7CiYjNDM7CiYjNDM7CVtbICYjMzQ7JHAmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgcmV0dXJuIDEKJiM0MzsJa2lsbCAtMCAmIzM0OyRwJiMzNDsgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuIDEKJiM0MzsJWyAmIzM0OyQoY2F0IC9wcm9jLyYjMzQ7JHAmIzM0Oy9jb21tIDImZ3Q7L2Rldi9udWxsKSYjMzQ7ID0gJiMzNDtpcGVyZjMmIzM0OyBdIHx8IHJldHVybiAxCiYjNDM7CWlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsIHwgZ3JlcCAtcXggJiMzNDskcCYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXJ0X2lwZXJmX3NlcnZlcigpCiYjNDM7ewomIzQzOwlsb2NhbCBjYW5kaWRhdGVfcGlkCiYjNDM7CiYjNDM7CSMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHMKJiM0MzsJIyByZWFsIGV4aXQgc3RhdHVzIChuZXRucyBzaGFyZXMgdGhlIFBJRCBuYW1lc3BhY2UgYW5kIHRoZSBob3N0IGZzKS4KJiM0MzsJYWxsb2Nfd29ya2RpcgomIzQzOwkoIG5zeCAmIzM0OyRuc19wZWVyJiMzNDsgJiMzNDtpcGVyZjMgLXMgLTEgJmd0OyAvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsgXAomIzQzOwkJZWNobyBcJCEgJmd0OyAke3BpZGZpbGV9OyBcCiYjNDM7CQl3YWl0IFwkITsgXAomIzQzOwkJZWNobyBcJD8gJmd0OyAke3JjZmlsZX0mIzM0OyApICZhbXA7CiYjNDM7CXNlcnZlcl93cmFwcGVyPSQhCiYjNDM7CSMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0bwomIzQzOwkjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZAomIzQzOwlmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG8KJiM0MzsJCVsgLXMgJiMzNDske3BpZGZpbGV9JiMzNDsgXSAmYW1wOyZhbXA7IGJyZWFrCiYjNDM7CQlzbGVlcCAwLjEKJiM0MzsJZG9uZQomIzQzOwlpZiBbICEgLXMgJiMzNDske3BpZGZpbGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZGlkIG5vdCBwdWJsaXNoIGEgcGlkIChubyBwaWRmaWxlKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJY2FuZGlkYXRlX3BpZD0kKCZsdDsmIzM0OyR7cGlkZmlsZX0mIzM0OykKJiM0MzsJaWYgISB2YWxpZF9zZXJ2ZXJfcGlkICYjMzQ7JHtjYW5kaWRhdGVfcGlkfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2NhbmRpZGF0ZV9waWR9JiMzOTsgZmFpbGVkIHZhbGlkYXRpb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CSMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvbgomIzQzOwlpcGVyZl9waWQ9JiMzNDske2NhbmRpZGF0ZV9waWR9JiMzNDsKJiM0MzsJc2xlZXAgMQomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmcKJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC4KJiM0MztyZWFkX3R4X2NvdW50ZXJzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OyBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG91dCBjbnQKJiM0MzsKJiM0MzsJb3V0PSQobnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldiYjMzQ7IHwgXAomIzQzOwkJYXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OykKJiM0MzsJY250PSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OykKJiM0MzsJaWYgWyAmIzM0OyRjbnQmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2IChyZWNvcmRzPSRjbnQpJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7JG91dCYjMzQ7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO2V2YWxfY291bnRlcl9kZWx0YSgpCiYjNDM7ewomIzQzOwlsb2NhbCBuYW1lPSYjMzQ7JDEmIzM0OyBiMD0mIzM0OyQyJiMzNDsgcDA9JiMzNDskMyYjMzQ7IGIxPSYjMzQ7JDQmIzM0OyBwMT0mIzM0OyQ1JiMzNDsgb3A9JiMzNDskNiYjMzQ7IGxpbWl0PSYjMzQ7JDcmIzM0OwomIzQzOwlsb2NhbCBiZCBwZAomIzQzOwomIzQzOwlpZiAhIFtbICYjMzQ7JGIwJiMzNDsgPX4gXlswLTldJiM0MzskICZhbXA7JmFtcDsgJiMzNDskYjEmIzM0OyA9fiBeWzAtOV0mIzQzOyQgJmFtcDsmYW1wOyBcCiYjNDM7CQkmIzM0OyRwMCYjMzQ7ID1+IF5bMC05XSYjNDM7JCAmYW1wOyZhbXA7ICYjMzQ7JHAxJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWUmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWJkPSQoKGIxIC0gYjApKQomIzQzOwlwZD0kKChwMSAtIHAwKSkKJiM0MzsJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sdCAwIF0gfHwgWyAmIzM0OyRwZCYjMzQ7IC1sZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lIChieXRlcz0kYmQgcGt0cz0kcGQpJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwlpZiBbICYjMzQ7JG9wJiMzNDsgPSAmIzM0O2d0JiMzNDsgXTsgdGhlbgomIzQzOwkJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlbgomIzQzOwkJCWVjaG8gJiMzNDtGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgJmx0Oz0gJGxpbWl0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCXJldHVybiAxCiYjNDM7CQlmaQomIzQzOwllbHNlCiYjNDM7CQlpZiBbICYjMzQ7JGJkJiMzNDsgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCAmZ3Q7ICRsaW1pdCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQkJcmV0PTEKJiM0MzsJCQlyZXR1cm4gMQomIzQzOwkJZmkKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0O0lORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkJiMzNDsgXAomIzQzOwkJJiMzNDsob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdJiMzNDsKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fdHNvX3N0cmVhbV90ZXN0KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmMKJiM0MzsJbG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxCiYjNDM7CWxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMQomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS4mIzM0OwomIzQzOwluc3ggJiMzNDskbnNfc2FuJiMzNDsgJiMzNDtldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb24mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX3NhbiYjMzQ7IHMwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvbgomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7Q291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC4mIzM0OwomIzQzOwlzdGFydF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZQomIzQzOwkjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0cwomIzQzOwkjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWAomIzQzOwkjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlCiYjNDM7CSMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuCiYjNDM7CXNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wCiYjNDM7CXJlYWQgLXIgc2FuX2IwIHNhbl9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19zYW4mIzM0OyBzMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBhX2IwIGFfcDAgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9hKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGJfYjAgYl9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2IpCiYjNDM7RU9GCiYjNDM7CVsgJiMzNDske3JldDotMH0mIzM0OyAtZXEgMCBdIHx8IHJldHVybgomIzQzOwomIzQzOwkjIHJhdGUtY2FwcGVkOiB0aGUgUFJJTUFSWSBkaXNjcmltaW5hdG9yIGlzIHRoZSBjb3VudGVyIGluZXF1YWxpdHkKJiM0MzsJIyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LgomIzQzOwkjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhCiYjNDM7CSMgZnVuY3Rpb25hbCBwcm9ibGVtLgomIzQzOwlpZiAhIG91dD0kKG5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXAomIzQzOwkJLWIgMkcgLXQgMTAmIzM0OyAyJmd0OyZhbXA7MSk7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDomIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJZWNobyAmIzM0OyRvdXQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwomIzQzOwlyZWFkIC1yIHNhbl9iMSBzYW5fcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfc2FuJiMzNDsgczApCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgYV9iMSBhX3AxICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBiX2IxIGJfcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9iKQomIzQzO0VPRgomIzQzOwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtTQU4gczAgVFgmIzM0OyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OyBcCiYjNDM7CQlndCAmIzM0OyRTQU5fQVZHX01JTiYjMzQ7CiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O0RVVCBkX2EgVFgmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7ICYjMzQ7JGFfYjEmIzM0OyAmIzM0OyRhX3AxJiMzNDsgXAomIzQzOwkJbGUgJiMzNDskTEFOX0FWR19NQVgmIzM0OwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtEVVQgZF9iIFRYJiMzNDsgJiMzNDskYl9iMCYjMzQ7ICYjMzQ7JGJfcDAmIzM0OyAmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7IFwKJiM0MzsJCWxlICYjMzQ7JExBTl9BVkdfTUFYJiMzNDsKJiM0MzsJWyAmIzM0OyR7cmV0Oi0wfSYjMzQ7IC1lcSAwIF0gfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgc3VjY2VzcyBwYXRoOiB0aGUgb25lLXNob3Qgc2VydmVyIGV4aXRzIGJ5IGl0c2VsZjsgcmVhcCB0aGUKJiM0MzsJIyB3cmFwcGVyLCB0aGVuIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIHRoZSBzZXJ2ZXImIzM5O3MgcmVhbCBzdGF0dXMKJiM0MzsJd2FpdCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JiMzNDsmIzM0OwomIzQzOwlpZiBbICEgLXMgJiMzNDske3JjZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBzdGF0dXMgZmlsZSBtaXNzaW5nICgke3JjZmlsZX0pJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsJc2VydmVyX3JjPSQoY2F0ICYjMzQ7JHtyY2ZpbGV9JiMzNDspCiYjNDM7CWlmICEgW1sgJiMzNDskc2VydmVyX3JjJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgJiMzNDskc2VydmVyX3JjJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5OyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CiYjNDM7CSMgc2Vjb25kYXJ5IGhlYWx0aCBzaWduYWwgb25seTogYW5jaG9yZWQsIHNpbmdsZS1tYXRjaCwgbnVtZXJpYyDigJQKJiM0MzsJIyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyCiYjNDM7CSMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLgomIzQzOwlzZW5kZXJfcmV0cj0kKGVjaG8gJiMzNDskb3V0JiMzNDsgfCBhd2sgJiMzOTsvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfSYjMzk7KQomIzQzOwlpZiBbICYjMzQ7JChlY2hvICYjMzQ7JHNlbmRlcl9yZXRyJiMzNDsgfCBncmVwIC1FYyAmIzM5O15bMC05XSYjNDM7JCYjMzk7KSYjMzQ7IC1uZSAxIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjYW5ub3QgcGFyc2Ugc2VuZGVyIHJldHJhbnNtaXRzIHJlbGlhYmx5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWVjaG8gJiMzNDskb3V0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0O0lORk86IFRDUCBzdHJlYW0gZG9uZTsmIzM0OyBcCiYjNDM7CQkmIzM0O3NlbmRlciByZXRyYW5zbWl0cz0kc2VuZGVyX3JldHIgKHNlY29uZGFyeSBzaWduYWwpJiMzNDsKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLUUgJiMzNDtzZW5kZXJ8cmVjZWl2ZXImIzM0OwomIzQzO30KJiM0MzsKJiM0MztjaGVja19wcmVyZXF1aXNpdGVzCiYjNDM7Y2hlY2tfdG9vbCBldGh0b29sCiYjNDM7Y2hlY2tfdG9vbCBpcGVyZjMKJiM0MztjaGVja190b29sIHRpbWVvdXQKJiM0MzsKJiM0MzsjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguCiYjNDM7aWYgISBpcCBsaW5rIGhlbHAgaHNyIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBpcHJvdXRlMiBoYXMgbm8gSFNSIGludGVybGluayBzdXBwb3J0JiMzNDsKJiM0MzsJZXhpdCAka3NmdF9za2lwCiYjNDM7ZmkKJiM0MzsKJiM0MztzZXR1cF90b3BvCiYjNDM7CiYjNDM7ZWNobyAmIzM0O0lORk86IEluaXRpYWwgdmFsaWRhdGlvbiBwaW5nIChTQU4gLSZndDsgcGVlciB0aHJvdWdoIHRoZSBEVVQpLiYjMzQ7CiYjNDM7ZG9fcGluZyAmIzM0OyRuc19zYW4mIzM0OyAmIzM0OyRwZWVyX2lwJiMzNDsKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7SW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrcwomIzQzO2RvX3Rzb19zdHJlYW1fdGVzdAomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBBbGwgZ29vZC4mIzM0OwomIzQzO2V4aXQgJHJldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIU1IgR1JPL0dTTyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHR3ZWFraW5nIHRoZSBIU1IgZHJpdmVyIGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB0byBhZGRyZXNzIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIGFuZCBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBkaXNhYmxlIEdSTyBvbiB0aGUgSFNSIG5ldCBkZXZpY2UgdXNpbmcgYG5ldGlmX2Rpc2FibGVfZ3JvKClgIGFuZCBgZGV2X2Rpc2FibGVfZ3JvKClgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZXkmIzM5O3ZlIGFsc28gY2xlYW5lZCB1cCBgaHNyX2Rldl9zZXR1cGAgYnkgcmVtb3ZpbmcgdGhlIGBORVRJRl9GX0dTT19NQVNLYCBmZWF0dXJlLiBUaGV5JiMzOTt2ZSBnb3QgbW9kaWZpY2F0aW9ucyB0byBgaHNyX2ZvcndhcmRfc2tiYCB0byBoYW5kbGUgdGhlIEdTTyBzdXBlci1wYWNrZXRzLCBzZWdtZW50aW5nIHRoZW0gYmVmb3JlIGZvcndhcmRpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBsYXJnZSBwYWNrZXRzIGluIHRoaXMgY29udGV4dC4gVGhlcmUmIzM5O3MgYWxzbyBhIGNhbGwgdG8gYGRldl9kaXNhYmxlX2dybyhkZXYpYCBpbiBgaHNyX3BvcnRkZXZfc2V0dXBgLiBBbmQsIHRoZXJlJiMzOTtzIGEgbmV3IHNlbGZ0ZXN0LCBgaHNyX2dyb19zdXBlcnBhY2tldC5zaGAsIHRvIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcyBleHBlY3RlZCwgd2hpY2ggaXMgZ3JlYXQgdG8gc2VlLgoKTm93LCBmcm9tIHRoZSBmaWxlIGxpc3Qg4oCTIGBuZXQvY29yZS9kZXYuY2AsIGBuZXQvY29yZS9kZXZfYXBpLmNgLCBgbmV0L2hzci9oc3JfZGV2aWNlLmNgLCBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgYW5kIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYCDigJMgdGhpcyBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNvcmUga2VybmVsIG5ldHdvcmsgbG9naWMgYW5kIHRoZSBuZXR3b3JrIGRyaXZlciBpdHNlbGYuIFRoYXTigJlzIHJlYWNoYWJsZSBjb2RlLCBhbmQgSSBrbm93IEhTUiBpcyBhIHZpcnR1YWwgZGV2aWNlLCBtYWtpbmcgaXQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBpcyBoZWxwZnVsLiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBHU08gYW5kIEdSTywgd2hpY2ggYXJlIGNydWNpYWwgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMuCgpOb3csIG15IGZvY3VzIGZvciBmdXp6aW5nIG5lZWRzIHRvIGJlIG9uIHNwZWNpZmljIGZ1bmN0aW9ucywgc3RhcnRpbmcgd2l0aCBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBlbnN1cmUgdGhlIEdSTyBkaXNhYmxpbmcgaXMgc3VjY2Vzc2Z1bC4gVGhlbiwgYGhzcl9mb3J3YXJkX3NrYmAgYW5kIGBoc3JfZGV2X3htaXRgIHdpbGwgYmUga2V5IHRvIHRlc3RpbmcgR1NPIHN1cGVyLXBhY2tldCBoYW5kbGluZyBhbmQgdHJhbnNtaXNzaW9uLCBhbmQgZmluYWxseSwgYGhzcl9oYW5kbGVfZnJhbWVgIHRvIG1ha2Ugc3VyZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIGlzIGludGFjdC4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYENPTkZJR19IU1JgIG9yIHNpbWlsYXIgaW4gYG5ldC9oc3IvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIEhTUiBkcml2ZXIuIFRoaXMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhlIHRlc3QgZW52aXJvbm1lbnQgbWF0Y2hlcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIEhTUiB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIExldCYjMzk7cyBzdGFydCBieSBjcmFja2luZyBvcGVuIHRoZSBgbmV0L2hzci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHBsYWNlIEkgbG9vayBmb3IgZGVwZW5kZW5jaWVzLiBJdCYjMzk7bGwgbGF5IG91dCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLCBhbmQgYW55IHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBvdGhlciBuZXR3b3JraW5nIHN1YnN5c3RlbXMsIGhhcmR3YXJlIGRyaXZlcnMsIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IHRoaXMgSFNSIGZ1bmN0aW9uYWxpdHkgbWlnaHQgcGlnZ3liYWNrIG9uLiBUaGlzIGlzIHdoZXJlIHRoZSB0cnV0aCBsaWVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgSFNSXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBlbmFibGVzIElFQyA2MjQzOSBkZWZpbmVkIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzXG4gIDEwOlx0XHQgIFJlZHVuZGFuY3kgKEhTUikgYW5kIFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFBSUCkuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxuICAxMzpcdFx0ICBEQU5IIChcJiMzNDtEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSXCYjMzQ7KSBvciBEQU5QIChcJiMzNDtEb3VibHlcbiAgMTQ6XHRcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXCYjMzQ7KS4gRm9yIHRoaXMgdG8gd29yaywgeW91ciBMaW51eCBib3hcbiAgMTU6XHRcdCAgbmVlZHMgKGF0IGxlYXN0KSB0d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxuICAxODpcdFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXG4gIDE5Olx0XHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcbiAgMjA6XHRcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcbiAgMjE6XHRcdCAgaW4gdGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQgZmlsdGVycyBmcmFtZXNcbiAgMjI6XHRcdCAgdGhhdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGVhcmxpZXIuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIEZvciBEQU5QLCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgY29ubmVjdGluZyB0byB0d29cbiAgMjU6XHRcdCAgc2VwYXJhdGUgbmV0d29ya3Mgb3ZlciB0aGUgdHdvIHNsYXZlIGludGVyZmFjZXMuIExpa2UgSFNSLCBFdGhlcm5ldFxuICAyNjpcdFx0ICBmcmFtZXMgc2VudCBvdmVyIHRoZSBQUlAgZGV2aWNlIHdpbGwgYmUgc2VudCB0byBib3RoIG5ldHdvcmtzIGdpdmluZ1xuICAyNzpcdFx0ICBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gVW5saWtlIEhTUiwgUFJQIG5ldHdvcmtzXG4gIDI4Olx0XHQgIGNhbiBoYXZlIFNpbmdseSBBdHRhY2hlZCBOb2RlcyAoU0FOKSBzdWNoIGFzIFBDLCBwcmludGVyLCBicmlkZ2VzXG4gIDI5Olx0XHQgIGV0YyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggREFOUCBub2Rlcy5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBjb2RlIGlzIGEgXCYjMzQ7YmVzdCBlZmZvcnRcJiMzNDsgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBzdGFuZGFyZCBhc1xuICAzMjpcdFx0ICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTM6MjAxMCAoSFNSdjApIGFuZCBJRUMgNjI0MzktMzoyMDEyIChIU1J2MSksXG4gIDMzOlx0XHQgIGFuZCBQUlAgc3RhbmRhcmQgZGVzY3JpYmVkIGluIElFQyA2MjQzOS00OjIwMTIgKFBSUCksIGJ1dCBub1xuICAzNDpcdFx0ICBjb21wbGlhbmN5IHRlc3RzIGhhdmUgYmVlbiBtYWRlLiBVc2UgaXByb3V0ZTIgdG8gc2VsZWN0IHRoZSBwcm90b2NvbFxuICAzNTpcdFx0ICB5b3Ugd291bGQgbGlrZSB0byB1c2UuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIFlvdSBuZWVkIHRvIHBlcmZvcm0gYW55IGFuZCBhbGwgbmVjZXNzYXJ5IHRlc3RzIHlvdXJzZWxmIGJlZm9yZVxuICAzODpcdFx0ICByZWx5aW5nIG9uIHRoaXMgY29kZSBpbiBhIHNhZmV0eSBjcml0aWNhbCBzeXN0ZW0hXG4gIDM5Olx0XG4gIDQwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQxOlx0XG4gIDQyOlx0aWYgSFNSXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXG4gIDQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUlAgZHVwbGljYXRlIGRpc2NhcmQgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA0NjpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICA0NzpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgQ292ZXJzIHRoZSBQUlAgZHVwbGljYXRlIGRpc2NhcmQgYWxnb3JpdGhtLlxuICA1MDpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAxNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhTUiBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBIU1Igc2V0dXAsIGFuZCB0aGUgYENPTkZJR19IU1JgIGZsYWcgaXMsIG9mIGNvdXJzZSwgdGhlIG1haW4gY29uZmlndXJhdGlvbiBjb250cm9sLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBkZXZfZGlzYWJsZV9ncm9gLCBgbmV0aWZfZGlzYWJsZV9ncm9gLCBgaHNyX2Rldl94bWl0YCwgYHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYGhzcl9kZXZfc2V0dXBgLCBgaGFuZGxlX3N0ZF9mcmFtZWAsIGBoc3JfZm9yd2FyZF9za2JgLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGFuZCBgaHNyX3BvcnRkZXZfc2V0dXBgLgoKTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGRlZmluZWQ/IGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHJlc2lkZSBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvZGV2X2FwaS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBoc3JfZm9yd2FyZF9za2JgIGlzIGNsZWFybHkgaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGFzIGV4cGVjdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIHN0YXRpYyBvciBleHBvcnRlZC4gYGhzcl9mb3J3YXJkX3NrYmAgaXMgKm5vdCogc3RhdGljLCBidXQgYGhzcl9mb3J3YXJkX3NrYl9vbmVgICppcyogc3RhdGljIHdoaWNoIGltcGxpZXMgc29tZSBpbnRlcm5hbCBoYW5kbGluZy4gYGRldl9kaXNhYmxlX2dyb2AgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZ29vZC4gYG5ldGlmX2Rpc2FibGVfZ3JvYCBpcyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gaXRzIHVzYWdlLgoKQWxyaWdodCwgdGltZSB0byBkaXN0aWxsIHRoZSBlc3NlbmNlIG9mIHdoYXQmIzM5O3MgaW1wb3J0YW50IGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBvbjogYGRldl9kaXNhYmxlX2dyb2AsIGBuZXRpZl9kaXNhYmxlX2dyb2AsIGBoc3JfZm9yd2FyZF9za2JgLCBgaHNyX2Rldl94bWl0YCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBhbmQgYGhzcl9wb3J0ZGV2X3NldHVwYC4KCldhaXQsIGEgc21hbGwgY29ycmVjdGlvbi4gYGhzcl9oYW5kbGVfZnJhbWVgIGlzIHN0YXRpYy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSB0aGF0IGlzIGRlZmluZWQuIExldCBtZSBsb29rIGluIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYCB0byBiZSBzdXJlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX3NsYXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3Jfc2xhdmUuYz0xOT1ib29sIGhzcl9pbnZhbGlkX2Rhbl9pbmdyZXNzX2ZyYW1lKF9fYmUxNiBwcm90b2NvbClcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTIzLVxubmV0L2hzci9oc3Jfc2xhdmUuYzoyNDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjUte1xuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9ODU9Ym9vbCBoc3JfcG9ydF9leGlzdHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODYte1xubmV0L2hzci9oc3Jfc2xhdmUuYzo4NzpcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGhzcl9oYW5kbGVfZnJhbWU7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg4LX1cbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTEzMj1zdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTU5LVxubmV0L2hzci9oc3Jfc2xhdmUuYzoxNjA6XHRyZXMgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGhzcl9oYW5kbGVfZnJhbWUsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy0xNjEtXHRpZiAocmVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIEhTUiBEcml2ZXIgSW50ZWdyYXRpb24qKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgbGF5IG9mIHRoZSBsYW5kIGFzIEkgdW5kZXJzdGFuZCBpdC4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgdGhpcyBIU1Igc3R1ZmYgaW50ZWdyYXRlcyBpbnRvIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjaywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgR1JPLiBJIHNlZSB0aGF0IGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYW4gUlggaGFuZGxlciDigJMgbWFrZXMgc2Vuc2UsIHRoZSBkcml2ZXIgbmVlZHMgdG8gcHJvY2VzcyBpbmNvbWluZyBmcmFtZXMuIFNpbWlsYXJseSwgYGhzcl9kZXZfeG1pdGAgaXMgc3RhdGljLCB3aGljaCBpcyByZWdpc3RlcmVkIGFzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCBzbyB0aGUgZHJpdmVyIGRvZXMgaXRzIHRoaW5nIHRoZXJlLiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnRzIGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnM6IGBoc3JfZm9yd2FyZF9za2JgLCBgZGV2X2Rpc2FibGVfZ3JvYCwgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBrZXkgb25lcyBmb3IgZGlzYWJsaW5nIEdSTyBhbmQgZm9yd2FyZGluZyBwYWNrZXRzIGFwcHJvcHJpYXRlbHkuIEkgZmlndXJlIEkmIzM5O2xsIGJlIHVzaW5nIGBkZXZfZGlzYWJsZV9ncm9gLCBgbmV0aWZfZGlzYWJsZV9ncm9gLCBhbmQgYGhzcl9mb3J3YXJkX3NrYmAgdG8gZ2V0IHRoZSBkZXNpcmVkIGJlaGF2aW9yIOKAkyBkaXNhYmxpbmcgR1JPIGlzIGxpa2VseSBjcnVjaWFsIGZvciBIU1ImIzM5O3MgZHVwbGljYXRlIGZyYW1lIGhhbmRsaW5nLgoKTm93LCBkbyBJIG5lZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRvIHB1bGwgdGhpcyBvZmY/IExldCYjMzk7cyBhc3N1bWUgaXQgZGVwZW5kcyBvbiB0aGUgTkVUIGNvbmZpZy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIHNwZWNpYWwgY29uZmlndXJhdGlvbiBmbGFncyBiZXlvbmQgdGhhdCwgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBkb3VibGUtY2hlY2sgYG5ldC9jb3JlL2Rldi5jYCB0byBjb25maXJtIHRoZSBiZWhhdmlvciBvZiBgbmV0aWZfZGlzYWJsZV9ncm9gLCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgaG93IEdSTyBnZXRzIGRpc2FibGVkIGF0IHRoZSBuZXRpZiBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xODI1PXZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xODQyLVxubmV0L2NvcmUvZGV2LmM6MTg0Mzp2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXYuYy0xODQ0LXtcbi0tXG5uZXQvY29yZS9kZXYuYy0xODU1LVx0XHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcbm5ldC9jb3JlL2Rldi5jOjE4NTY6XHRcdG5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7XG5uZXQvY29yZS9kZXYuYy0xODU3LVx0XHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkyNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OgoKKipDaGVja2luZyBHUk8gRGlzYWJsZW1lbnQqKgoKUmlnaHQsIGBuZXRpZl9kaXNhYmxlX2dyb2AgaXMgZGVmaW5pdGVseSBwcmVzZW50LiBOb3csIEkgbmVlZCB0byBzZWUgKndoZXJlKiBpdCYjMzk7cyBhY3R1YWxseSBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYG5ldC9jb3JlL2Rldl9hcGkuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBmb3IgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGBkZXZfZGlzYWJsZV9ncm9gIHRoZXJlLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgc3RheSBzaGFycCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2Rpc2FibGVfZ3JvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hcGkuYz0yNzA9RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yNzItLyoqXG5uZXQvY29yZS9kZXZfYXBpLmM6MjczOiAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxubmV0L2NvcmUvZGV2X2FwaS5jLTI3NC0gKiBAZGV2OiBkZXZpY2Vcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjc5LSAqL1xubmV0L2NvcmUvZGV2X2FwaS5jOjI4MDp2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4MS17XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4NS19XG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg2OkVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCBhbiBleHBlcnQgYXVkaWVuY2UgaW4gbWluZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBHUk8gYW5kIEZvcndhcmRpbmcqKgoKQWxyaWdodCwgY29uZmlybWVkIOKAkyBgZGV2X2Rpc2FibGVfZ3JvYCBpcyBpbmRlZWQgcHJlc2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcGl2b3QgdG93YXJkcyB0aGUgbGlrZWx5IHNvdXJjZSBvZiBhbnkgcmVsYXRlZCBpc3N1ZXMgaW4gdGhlIEhTUiBjb250ZXh0LiBHaXZlbiB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIG15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGxvb2sgYXQgdGhlIEhTUiBmb3J3YXJkaW5nIGxvZ2ljIGl0c2VsZi4gVGhhdCBsZWFkcyBtZSBkaXJlY3RseSB0byBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHNyX2ZvcndhcmRfc2tiYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBIU1IgZm9yd2FyZGluZyBkZWNpc2lvbnMgYW5kIGFjdGlvbnMgcmVsYXRlZCB0byBTS0JzIHdvdWxkIGJlLiBBbnkgR1JPLXJlbGF0ZWQgYW5vbWFsaWVzIGFyZSBoaWdobHkgbGlrZWx5IHRvIG1hbmlmZXN0IHRoZXJlLiBOb3cgbGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYz02Nzg9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM1LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzM2OnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNy17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc2OC0gKi9cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3Njk6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3MC17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3My1cdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3NzQ6XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzUtXHRcdHJldHVybjtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODAyLVx0XHRzZWdzLVx1MDAzZW5leHQgPSBOVUxMO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjgwMzpcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MDQtXHRcdHNlZ3MgPSBuZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk2OAoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSFNSIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBoc3JfZm9yd2FyZF9za2JgIGlzIGluZGVlZCBwcmVzZW50IGluIHRoaXMgY29kZS4gRXhjZWxsZW50LiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZG9pbmcgc29tZXRoaW5nIHNpZ25pZmljYW50OiBpdCYjMzk7cyBtYWtpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIGFuZCB0aGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgdG8gbWFuYWdlIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIG9uIHRob3NlIGVuc2xhdmVkIGRldmljZXMuIEl0JiMzOTtzIGFsc28gZGVhbGluZyB3aXRoIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgc3VwZXItcGFja2V0cyBzcGVjaWZpY2FsbHkgaW4gdGhlIEhTUiBmb3J3YXJkaW5nIHBhdGguCgpUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtmdXp6aW5nIG9wcG9ydHVuaXR5JiMzNDsgdG8gbWUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGJlaGF2aW9ycywgcGFydGljdWxhcmx5IGFyb3VuZCBvZmZsb2FkIG1lY2hhbmlzbXMgYW5kIHBhY2tldCBoYW5kbGluZywgaXMgcHJpbWUgdGVycml0b3J5IGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBlZGdlIGNhc2VzLgoKSSYjMzk7bGwgd2FudCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIGZvbGxvd2luZyBrZXkgc3ltYm9sczogYGRldl9kaXNhYmxlX2dyb2AsIGBuZXRpZl9kaXNhYmxlX2dyb2AsIGFuZCwgb2YgY291cnNlLCB0aGUgY2VudHJhbCBgaHNyX2ZvcndhcmRfc2tiYCBmdW5jdGlvbi4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCB0b3VjaHBvaW50cyB3aGVyZSB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZC4KCkdpdmVuIHRoYXQgdGhlIGNoYW5nZSBpcyByZWxhdGVkIHRvIHRoZSBgSFNSYCBjb25maWcsIEkgY2FuIGVhc2lseSB0ZXN0IHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIU1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIGFuZCBjb3JlIG5ldHdvcmtpbmcgdG8gZGlzYWJsZSBHUk8gb24gZW5zbGF2ZWQgZGV2aWNlcyBhbmQgaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGluIEhTUiBmb3J3YXJkaW5nLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgYW5kIGNvcmUgbmV0d29ya2luZyB0byBkaXNhYmxlIEdSTyBvbiBlbnNsYXZlZCBkZXZpY2VzIGFuZCBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgaW4gSFNSIGZvcndhcmRpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU3OjQ2LjMxMDc5ODQ3MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjQ3NTI0OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIGFuZCBjb3JlIG5ldHdvcmtpbmcgdG8gZGlzYWJsZSBHUk8gb24gZW5zbGF2ZWQgZGV2aWNlcyBhbmQgaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGluIEhTUiBmb3J3YXJkaW5nLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU3OjQ2LjMxMDgwNTM0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1MzUyMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjk4NGEwMGY3YWIwNzU2YTYxMWNkZWQxNzE5ZGZkY2YxZTgxZGVjNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAwNTo1Nzo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5lYmEyYzI2YTQ5YmE4ZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0zNDM0LDYgKzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gdm9pZCBuZXRpZl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgdW5saW5rKTtcXG4gdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpO1xcbiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggNTkzM2M1ZGFiMDllZTEuLmE2Y2YyYWRjODYyNTY1IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTg0MCw2ICsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFxuK1xcdGRldi1cXHUwMDNld2FudGVkX2ZlYXR1cmVzIFxcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XFxuK1xcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcXG4rXFx0XFx0bmV0ZGV2X1dBUk4oZGV2LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxcXFxuXFxcIik7XFxuK1xcbitcXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XFxuK1xcdFxcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xcbitcXHRcXHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xcbitcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKlxcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG4gICpcXHRAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jXFxuaW5kZXggNDM3OTQ3ZGQwOGVkNTMuLjAyZmIyMTYyOTUxMjg0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xcbisrKyBiL25ldC9jb3JlL2Rldl9hcGkuY1xcbkBAIC0yNjksNiArMjY5LDIyIEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xcbiBcXG4rLyoqXFxuKyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbisgKiBAZGV2OiBkZXZpY2VcXG4rICpcXG4rICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlXFxuKyAqIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWQgcGFja2V0cyBtYXkgYmVcXG4rICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxcbisgKi9cXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4rXFx0bmV0aWZfZGlzYWJsZV9ncm8oZGV2KTtcXG4rXFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XFxuK1xcbiAvKipcXG4gICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlXFxuICAqIEBkZXY6IGRldmljZVxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9kZXZpY2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jXFxuaW5kZXggNTU1NWI3MWFiMTliNTkuLjI0OGNiYjE0MmUyMWUxIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXFxuKysrIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcXG5AQCAtMjMyLDkgKzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBtYXN0ZXItXFx1MDAzZWRldjtcXG4gXFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0XFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4tXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG5AQCAtMzM1LDYgKzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0XFx0aHNyX3N0YWctXFx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVxcdTAwM2VzZXF1ZW5jZV9ucik7XFxuIFxcdFxcdGhzci1cXHUwMDNlc2VxdWVuY2VfbnIrKztcXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gdHlwZTtcXG4gXFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cXG5AQCAtMzU2LDE0ICszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbiBcXHRcXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVxcdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4rXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0fVxcbiBcXG4gXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi1cXHRyZXR1cm47XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbkBAIC0zOTAsNiArMzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVxcdTAwM2VzdXBfc2VxdWVuY2VfbnIpO1xcbiBcXHRoc3ItXFx1MDAzZXN1cF9zZXF1ZW5jZV9ucisrO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuIFxcbkBAIC0zOTcsMTMgKzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XFxuIFxcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXFx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFxuLVxcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbitcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuIFxcbiBcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gfVxcbiBcXG4gLyogQW5ub3VuY2UgKHN1cGVydmlzaW9uIGZyYW1lKSB0aW1lciBmdW5jdGlvblxcbkBAIC02NTksNyArNjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGRldi1cXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xcbiBcXG4gXFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcXG4tXFx0XFx0XFx0ICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8XFxuK1xcdFxcdFxcdCAgIE5FVElGX0ZfSFdfQ1NVTSB8XFxuIFxcdFxcdFxcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ3NvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJoc3JfbWFpbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHNyX2ZyYW1lcmVnLmhcXFwiXFxuIFxcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxcbiBcXHQgICAgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XFxuIFxcdFxcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXFxuLVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVxcdTAwM2VzZXF1ZW5jZV9ucjtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbitzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XFxuIFxcbkBAIC03NjAsMyArNzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4gXFx0cG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiB9XFxuK1xcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xcbisgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXFxuKyAqL1xcbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xcbitcXG4rXFx0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xcbitcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVW5mb2xkIG9ubHkgcGxhaW4tRXRoZXJuZXQgR1NPIHN1cGVyLXBhY2tldHM6IGxvY2FsbHkgZ2VuZXJhdGVkXFxuK1xcdCAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZVxcbitcXHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxcbitcXHQgKiBIU1IgdGFncyAvIFBSUCBSQ1QgdHJhaWxlcnMgdGhhdCBzb2Z0d2FyZSBzZWdtZW50YXRpb24gY2Fubm90XFxuK1xcdCAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzXFxuK1xcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUiBcXHUwMDI2XFx1MDAyNiBwb3J0LVxcdTAwM2V0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287XFxuK1xcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0hTUikgfHxcXG4rXFx0ICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSlcXG4rXFx0XFx0Z290byBkcm9wX2dzbztcXG4rXFxuK1xcdC8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlXFxuK1xcdCAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tXFxuK1xcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXFxuK1xcdCAqL1xcbitcXHRzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xcbitcXHRpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSlcXG4rXFx0XFx0Z290byBkcm9wX2dzbztcXG4rXFxuK1xcdGNvbnN1bWVfc2tiKHNrYik7XFxuK1xcdHdoaWxlIChzZWdzKSB7XFxuK1xcdFxcdG5leHQgPSBzZWdzLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRzZWdzLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4rXFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcXG4rXFx0XFx0c2VncyA9IG5leHQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuO1xcbitcXG4rZHJvcF9nc286XFxuK1xcdHBvcnQtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jXFxuKysrIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbkBAIC03MywxNiArNzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4gXFx0fVxcbiBcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbiBcXG4tXFx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcXG4tXFx0ICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuXFxuLVxcdCAqL1xcbi1cXHRpZiAocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG4tXFx0fVxcbitcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG4gXFxuIGZpbmlzaF9jb25zdW1lOlxcbiBcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG5AQCAtMTcwLDYgKzE2MSw3IEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChyZXMpXFxuIFxcdFxcdGdvdG8gZmFpbF9yeF9oYW5kbGVyO1xcbiBcXHRkZXZfZGlzYWJsZV9scm8oZGV2KTtcXG4rXFx0ZGV2X2Rpc2FibGVfZ3JvKGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuaW5kZXggMzFmYjkzMjZjZjUzM2QuLjBkMTA1NDc2ZTdjNTBkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuQEAgLTMsNiArMyw3IEBAXFxuIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxcbiBcXG4gVEVTVF9QUk9HUyA6PSBcXFxcXFxuK1xcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcXFxcbiBcXHRoc3JfcGluZy5zaCBcXFxcXFxuIFxcdGhzcl9yZWRib3guc2ggXFxcXFxcbiBcXHRsaW5rX2ZhdWx0cy5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRjYTJhN2YzOTVlYmQwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxcbkBAIC0wLDAgKzEsNDM3IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcXG4rI1xcbisjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcXG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXFxuKyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXFxuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XFxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xcbisjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQncyBMQU4gcG9ydHMuXFxuKyNcXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XFxuKyNcXG4rIyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xcbisjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118XFxuKyMgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcXG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xcbisjXFxuKyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJ3MgZm9yd2FyZCBwYXRoXFxuKyMgKGludGVybGluayBSWCAtXFx1MDAzZSBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmRcXG4rIyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cXG4rXFxuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcXG4rXFxuK25zX2R1dD1cXFwiaHNyLWdyby1kdXRcXFwiXFxuK25zX3Nhbj1cXFwiaHNyLWdyby1zYW5cXFwiXFxuK25zX3BlZXI9XFxcImhzci1ncm8tcGVlclxcXCJcXG4rc2FuX2lwPVxcXCIxMDAuNjQuMC4xXFxcIlxcbitwZWVyX2lwPVxcXCIxMDAuNjQuMC4zXFxcIlxcbitcXG4rIyBBZ2dyZWdhdGUgY291bnRlciB0aHJlc2hvbGRzIGZvciB0aGUgc3RyZWFtIHRlc3QgKGJ5dGVzL3BhY2tldHMpOlxcbisjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGFcXG4rIyBndWFyZCB3aXRoIG1hcmdpbiwgbm90IHRoZSBwcm90b2NvbCBtYXhpbXVtIChzZWUgZG9fdHNvX3N0cmVhbV90ZXN0KS5cXG4rU0FOX0FWR19NSU49MjA0OFxcbitMQU5fQVZHX01BWD0xNTE0XFxuK1xcbitpcGVyZl9waWQ9XFxcIlxcXCJcXG4rc2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rd29ya2Rpcj1cXFwiXFxcIlxcbitwaWRmaWxlPVxcXCJcXFwiXFxuK3JjZmlsZT1cXFwiXFxcIlxcbitcXG4rY2xlYW51cCgpXFxuK3tcXG4rXFx0IyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkcyBhZ2FpbnN0XFxuK1xcdCMgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApXFxuK1xcdGlmIFsgLW4gXFxcIiR7aXBlcmZfcGlkfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiB2YWxpZF9zZXJ2ZXJfcGlkIFxcXCIke2lwZXJmX3BpZH1cXFwiOyB0aGVuXFxuK1xcdFxcdGtpbGwgXFxcIiR7aXBlcmZfcGlkfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZmlcXG4rXFx0aXBlcmZfcGlkPVxcXCJcXFwiXFxuK1xcdGlmIFsgLW4gXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdCMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXMgYm91bmQgc28gYVxcbitcXHRcXHQjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwXFxuK1xcdFxcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRcXHRraWxsIC0wIFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcXG4rXFx0XFx0XFx0c2xlZXAgMC4xXFxuK1xcdFxcdGRvbmVcXG4rXFx0XFx0a2lsbCBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdFxcdHdhaXQgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHRzZXJ2ZXJfd3JhcHBlcj1cXFwiXFxcIlxcbitcXHRmaVxcbitcXHQjIGxhc3QgcmVzb3J0LCBuYW1lc3BhY2Utc2NvcGVkIG9ubHk6IFRFUk0gdGhlIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxcbitcXHQjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMsIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlblxcbitcXHQjIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZSB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmRcXG4rXFx0IyBwa2lsbCB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cXG4rXFx0bG9jYWwgX3AgX3N0aWxsXFxuK1xcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXFxcIiRuc19wZWVyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCk7IGRvXFxuK1xcdFxcdGlmIFsgXFxcIiQoY2F0IC9wcm9jL1xcXCIkX3BcXFwiL2NvbW0gMlxcdTAwM2UvZGV2L251bGwpXFxcIiA9IFxcXCJpcGVyZjNcXFwiIF07IHRoZW5cXG4rXFx0XFx0XFx0a2lsbCBcXFwiJF9wXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHRmaVxcbitcXHRkb25lXFxuK1xcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRfc3RpbGw9MFxcbitcXHRcXHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGwpOyBkb1xcbitcXHRcXHRcXHRpZiBbIFxcXCIkKGNhdCAvcHJvYy9cXFwiJF9wXFxcIi9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdOyB0aGVuXFxuK1xcdFxcdFxcdFxcdF9zdGlsbD0xXFxuK1xcdFxcdFxcdFxcdGJyZWFrXFxuK1xcdFxcdFxcdGZpXFxuK1xcdFxcdGRvbmVcXG4rXFx0XFx0WyBcXFwiJF9zdGlsbFxcXCIgLWVxIDAgXSBcXHUwMDI2XFx1MDAyNiBicmVha1xcbitcXHRcXHRzbGVlcCAwLjFcXG4rXFx0ZG9uZVxcbitcXHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGwpOyBkb1xcbitcXHRcXHRpZiBbIFxcXCIkKGNhdCAvcHJvYy9cXFwiJF9wXFxcIi9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdOyB0aGVuXFxuK1xcdFxcdFxcdGtpbGwgLTkgXFxcIiRfcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0ZmlcXG4rXFx0ZG9uZVxcbitcXHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcXG4rXFx0aWYgWyAtbiBcXFwiJHt3b3JrZGlyfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBbIC1kIFxcXCIke3dvcmtkaXJ9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdHJtIC1yZiBcXFwiJHt3b3JrZGlyfVxcXCJcXG4rXFx0ZmlcXG4rXFx0d29ya2Rpcj1cXFwiXFxcIlxcbitcXHRwaWRmaWxlPVxcXCJcXFwiXFxuK1xcdHJjZmlsZT1cXFwiXFxcIlxcbitcXHRpcCBuZXRucyBkZWwgXFxcIiRuc19kdXRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJG5zX3NhblxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZGVsIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rfVxcbitcXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuK2NoZWNrX3Rvb2woKVxcbit7XFxuK1xcdGlmICEgY29tbWFuZCAtdiBcXFwiJDFcXFwiIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDFcXFwiXFxuK1xcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbitcXHRmaVxcbit9XFxuK1xcbituc3goKVxcbit7XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiQxXFxcIiBiYXNoIC1jIFxcXCIkMlxcXCJcXG4rfVxcbitcXG4rc2V0dXBfdG9wbygpXFxuK3tcXG4rXFx0bG9jYWwgbnNcXG4rXFxuK1xcdGNsZWFudXBcXG4rXFx0Zm9yIG5zIGluIFxcXCIkbnNfZHV0XFxcIiBcXFwiJG5zX3NhblxcXCIgXFxcIiRuc19wZWVyXFxcIjsgZG9cXG4rXFx0XFx0aXAgbmV0bnMgYWRkIFxcXCIkbnNcXFwiXFxuK1xcdGRvbmVcXG4rXFxuK1xcdGlwIGxpbmsgYWRkIGRfYSBuZXRucyBcXFwiJG5zX2R1dFxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgXFxcIiRuc19wZWVyXFxcIlxcbitcXHRpcCBsaW5rIGFkZCBkX2IgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zIFxcXCIkbnNfcGVlclxcXCJcXG4rXFx0aXAgbGluayBhZGQgZF9pbCBuZXRucyBcXFwiJG5zX2R1dFxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyBcXFwiJG5zX3NhblxcXCJcXG4rXFxuK1xcdCMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS5cXG4rXFx0Zm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvXFxuK1xcdFxcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgaXAgbGluayBzZXQgJGlmYWNlIHVwXFxcIlxcbitcXHRkb25lXFxuK1xcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcXFwiXFxuK1xcdGRvbmVcXG4rXFxuK1xcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgc2V0IGRfaWwgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImlwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMFxcXCJcXG4rXFxuK1xcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXFxcXFxcbitcXHRcXHRzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXFxcXFxcbitcXHRcXHRpcCBsaW5rIHNldCBoc3IwIHVwXFxcIlxcbitcXHRuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxcXFxuK1xcdFxcdGlwIGxpbmsgc2V0IGhzcjEgdXA7IGlwIGFkZHIgYWRkICRwZWVyX2lwLzI0IGRldiBoc3IxXFxcIlxcbitcXG4rXFx0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJ3Mgc3VwZXJ2aXNpb24gZnJhbWVzLlxcbitcXHRzbGVlcCAyXFxuK31cXG4rXFxuK2NoZWNrX2ZlYXR1cmUoKVxcbit7XFxuK1xcdGxvY2FsIG5zPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgaWZhY2U9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBmZWF0dXJlPVxcXCIkM1xcXCJcXG4rXFx0bG9jYWwgd2FudD1cXFwiJDRcXFwiXFxuK1xcbitcXHRpZiBuc3ggXFxcIiRuc1xcXCIgXFxcImV0aHRvb2wgLWsgJGlmYWNlXFxcIiB8IGdyZXAgLXEgXFxcIl4kZmVhdHVyZTogJHdhbnRcXFwiOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdGZpXFxuK31cXG4rXFxuKyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXFxuKyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC5cXG4rY2hlY2tfZmVhdHVyZV9ub3Rfb24oKVxcbit7XFxuK1xcdGxvY2FsIG5zPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgaWZhY2U9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBmZWF0dXJlPVxcXCIkM1xcXCJcXG4rXFxuK1xcdGlmIG5zeCBcXFwiJG5zXFxcIiBcXFwiZXRodG9vbCAtayAkaWZhY2VcXFwiIHwgZ3JlcCAtcSBcXFwiXiRmZWF0dXJlOiBvblxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvblxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgbm90IG9uIFsgT0sgXVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcXG4re1xcbitcXHRlY2hvIFxcXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXFxcIlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uXFxcIlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2EgcngtZ3JvLWh3IG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2IgcngtZ3JvLWh3IG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2lsIHJ4LWdyby1odyBvZmZcXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiSFctR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uXFxcIlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlX25vdF9vbiBcXFwiJG5zX2R1dFxcXCIgaHNyMCB0eC10Y3A2LXNlZ21lbnRhdGlvblxcbitcXHRjaGVja19mZWF0dXJlX25vdF9vbiBcXFwiJG5zX2R1dFxcXCIgaHNyMCB0eC11ZHAtc2VnbWVudGF0aW9uXFxuK1xcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFxcXCIkbnNfZHV0XFxcIiBoc3IwIHR4LWdzby1saXN0XFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkhTUiBtYXN0ZXIgc3RpbGwgYWR2ZXJ0aXNlcyBHU08tZmFtaWx5IGZlYXR1cmVzLlxcXCJcXG4rfVxcbitcXG4rYWxsb2Nfd29ya2RpcigpXFxuK3tcXG4rXFx0IyBBbGxvY2F0ZWQgb25seSBoZXJlLCBsb25nIGFmdGVyIHRoZSBpbml0aWFsIHRvcG9sb2d5IGNsZWFudXAsIHNvXFxuK1xcdCMgY2xlYW51cCgpIGF0IHNldHVwX3RvcG8oKSB0aW1lIGNhbiBuZXZlciByZW1vdmUgaXQuIG1rdGVtcCBmYWlsdXJlXFxuK1xcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cXG4rXFx0d29ya2Rpcj0kKG1rdGVtcCAtZCAvdG1wL2hzcl9ncm9fdGVzdC5YWFhYWFgpIHx8IHtcXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogbWt0ZW1wIC1kIGZhaWxlZFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRleGl0IDFcXG4rXFx0fVxcbitcXHRjaG1vZCA3MDAgXFxcIiR7d29ya2Rpcn1cXFwiXFxuK1xcdHBpZGZpbGU9XFxcIiR7d29ya2Rpcn0vaXBlcmYucGlkXFxcIlxcbitcXHRyY2ZpbGU9XFxcIiR7d29ya2Rpcn0vaXBlcmYucmNcXFwiXFxuK31cXG4rXFxuKyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBwZWVyIG5ldG5zLlxcbit2YWxpZF9zZXJ2ZXJfcGlkKClcXG4re1xcbitcXHRsb2NhbCBwPVxcXCIkMVxcXCJcXG4rXFxuK1xcdFtbIFxcXCIkcFxcXCIgPX4gXlswLTldKyQgXV0gfHwgcmV0dXJuIDFcXG4rXFx0a2lsbCAtMCBcXFwiJHBcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiAxXFxuK1xcdFsgXFxcIiQoY2F0IC9wcm9jL1xcXCIkcFxcXCIvY29tbSAyXFx1MDAzZS9kZXYvbnVsbClcXFwiID0gXFxcImlwZXJmM1xcXCIgXSB8fCByZXR1cm4gMVxcbitcXHRpcCBuZXRucyBwaWRzIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGwgfCBncmVwIC1xeCBcXFwiJHBcXFwiXFxuK31cXG4rXFxuK3N0YXJ0X2lwZXJmX3NlcnZlcigpXFxuK3tcXG4rXFx0bG9jYWwgY2FuZGlkYXRlX3BpZFxcbitcXG4rXFx0IyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiB0aGUgd3JhcHBlciByZWNvcmRzIGl0cyBleGFjdCBQSUQgYW5kIGl0c1xcbitcXHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxcbitcXHRhbGxvY193b3JrZGlyXFxuK1xcdCggbnN4IFxcXCIkbnNfcGVlclxcXCIgXFxcImlwZXJmMyAtcyAtMSBcXHUwMDNlIC9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjYgXFxcXFxcbitcXHRcXHRlY2hvIFxcXFwkISBcXHUwMDNlICR7cGlkZmlsZX07IFxcXFxcXG4rXFx0XFx0d2FpdCBcXFxcJCE7IFxcXFxcXG4rXFx0XFx0ZWNobyBcXFxcJD8gXFx1MDAzZSAke3JjZmlsZX1cXFwiICkgXFx1MDAyNlxcbitcXHRzZXJ2ZXJfd3JhcHBlcj0kIVxcbitcXHQjIHRoZSB3cmFwcGVyIHdyaXRlcyB0aGUgcGlkZmlsZSBhc3luY2hyb25vdXNseTsgd2FpdCBmb3IgaXQgdG9cXG4rXFx0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcXG4rXFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXFxuK1xcdFxcdFsgLXMgXFxcIiR7cGlkZmlsZX1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0XFx0c2xlZXAgMC4xXFxuK1xcdGRvbmVcXG4rXFx0aWYgWyAhIC1zIFxcXCIke3BpZGZpbGV9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZGlkIG5vdCBwdWJsaXNoIGEgcGlkIChubyBwaWRmaWxlKVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRjYW5kaWRhdGVfcGlkPSQoXFx1MDAzY1xcXCIke3BpZGZpbGV9XFxcIilcXG4rXFx0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFxcXCIke2NhbmRpZGF0ZV9waWR9XFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAnJHtjYW5kaWRhdGVfcGlkfScgZmFpbGVkIHZhbGlkYXRpb25cXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXFxuK1xcdGlwZXJmX3BpZD1cXFwiJHtjYW5kaWRhdGVfcGlkfVxcXCJcXG4rXFx0c2xlZXAgMVxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbisjIFByaW50IFxcXCJcXHUwMDNjYnl0ZXNcXHUwMDNlIFxcdTAwM2NwYWNrZXRzXFx1MDAzZVxcXCIgZm9yIGV4YWN0bHkgb25lIFRYIHJlY29yZCBvZiBucy9kZXY7IGFueXRoaW5nXFxuKyMgZWxzZSAobWlzc2luZywgZHVwbGljYXRlZCwgbm9uLW51bWVyaWMpIGlzIGEgaGFyZCBGQUlMLlxcbityZWFkX3R4X2NvdW50ZXJzKClcXG4re1xcbitcXHRsb2NhbCBucz1cXFwiJDFcXFwiIGRldj1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIG91dCBjbnRcXG4rXFxuK1xcdG91dD0kKG5zeCBcXFwiJG5zXFxcIiBcXFwiaXAgLXMgbGluayBzaG93ICRkZXZcXFwiIHwgXFxcXFxcbitcXHRcXHRhd2sgJy9eICtUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0nKVxcbitcXHRjbnQ9JChlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLWMgJ15bMC05XSogWzAtOV0qJCcpXFxuK1xcdGlmIFsgXFxcIiRjbnRcXFwiIC1uZSAxIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2IChyZWNvcmRzPSRjbnQpXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuK2V2YWxfY291bnRlcl9kZWx0YSgpXFxuK3tcXG4rXFx0bG9jYWwgbmFtZT1cXFwiJDFcXFwiIGIwPVxcXCIkMlxcXCIgcDA9XFxcIiQzXFxcIiBiMT1cXFwiJDRcXFwiIHAxPVxcXCIkNVxcXCIgb3A9XFxcIiQ2XFxcIiBsaW1pdD1cXFwiJDdcXFwiXFxuK1xcdGxvY2FsIGJkIHBkXFxuK1xcbitcXHRpZiAhIFtbIFxcXCIkYjBcXFwiID1+IF5bMC05XSskIFxcdTAwMjZcXHUwMDI2IFxcXCIkYjFcXFwiID1+IF5bMC05XSskIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4rXFx0XFx0XFxcIiRwMFxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcIiRwMVxcXCIgPX4gXlswLTldKyQgXV07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWVcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0YmQ9JCgoYjEgLSBiMCkpXFxuK1xcdHBkPSQoKHAxIC0gcDApKVxcbitcXHRpZiBbIFxcXCIkYmRcXFwiIC1sdCAwIF0gfHwgWyBcXFwiJHBkXFxcIiAtbGUgMCBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNvdW50ZXIgZGVsdGEgaW52YWxpZCBmb3IgJG5hbWUgKGJ5dGVzPSRiZCBwa3RzPSRwZClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aWYgWyBcXFwiJG9wXFxcIiA9IFxcXCJndFxcXCIgXTsgdGhlblxcbitcXHRcXHRpZiBbIFxcXCIkYmRcXFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxcbitcXHRcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXFx1MDAzYz0gJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGVsc2VcXG4rXFx0XFx0aWYgWyBcXFwiJGJkXFxcIiAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwiRkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFxcdTAwM2UgJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXFxcIlxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbitkb190c29fc3RyZWFtX3Rlc3QoKVxcbit7XFxuK1xcdGxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmNcXG4rXFx0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXFxuK1xcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMVxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImV0aHRvb2wgLUsgczAgdHNvIG9uIGdzbyBvblxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX3NhblxcXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkNvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cXFwiXFxuK1xcdHN0YXJ0X2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFxuK1xcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxcbitcXHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xcbitcXHQjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWFxcbitcXHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXFxuK1xcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXFxuK1xcdHNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wXFxuK1xcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19zYW5cXFwiIHMwKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBhX2IwIGFfcDAgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2EpXFxuK0VPRlxcbitcXHRyZWFkIC1yIGJfYjAgYl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYilcXG4rRU9GXFxuK1xcdFsgXFxcIiR7cmV0Oi0wfVxcXCIgLWVxIDAgXSB8fCByZXR1cm5cXG4rXFxuK1xcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxcbitcXHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXFxuK1xcdCMgVW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGFcXG4rXFx0IyBmdW5jdGlvbmFsIHByb2JsZW0uXFxuK1xcdGlmICEgb3V0PSQobnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxcXFxuK1xcdFxcdC1iIDJHIC10IDEwXFxcIiAyXFx1MDAzZVxcdTAwMjYxKTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDpcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFxuK1xcdHJlYWQgLXIgc2FuX2IxIHNhbl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19zYW5cXFwiIHMwKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBhX2IxIGFfcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2EpXFxuK0VPRlxcbitcXHRyZWFkIC1yIGJfYjEgYl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYilcXG4rRU9GXFxuK1xcbitcXHRldmFsX2NvdW50ZXJfZGVsdGEgXFxcIlNBTiBzMCBUWFxcXCIgXFxcIiRzYW5fYjBcXFwiIFxcXCIkc2FuX3AwXFxcIiBcXFwiJHNhbl9iMVxcXCIgXFxcIiRzYW5fcDFcXFwiIFxcXFxcXG4rXFx0XFx0Z3QgXFxcIiRTQU5fQVZHX01JTlxcXCJcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJEVVQgZF9hIFRYXFxcIiBcXFwiJGFfYjBcXFwiIFxcXCIkYV9wMFxcXCIgXFxcIiRhX2IxXFxcIiBcXFwiJGFfcDFcXFwiIFxcXFxcXG4rXFx0XFx0bGUgXFxcIiRMQU5fQVZHX01BWFxcXCJcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJEVVQgZF9iIFRYXFxcIiBcXFwiJGJfYjBcXFwiIFxcXCIkYl9wMFxcXCIgXFxcIiRiX2IxXFxcIiBcXFwiJGJfcDFcXFwiIFxcXFxcXG4rXFx0XFx0bGUgXFxcIiRMQU5fQVZHX01BWFxcXCJcXG4rXFx0WyBcXFwiJHtyZXQ6LTB9XFxcIiAtZXEgMCBdIHx8IHJldHVyblxcbitcXG4rXFx0IyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFwIHRoZVxcbitcXHQjIHdyYXBwZXIsIHRoZW4gUkVRVUlSRSB0aGUgcmNmaWxlIHdpdGggdGhlIHNlcnZlcidzIHJlYWwgc3RhdHVzXFxuK1xcdHdhaXQgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIlxcbitcXHRzZXJ2ZXJfd3JhcHBlcj1cXFwiXFxcIlxcbitcXHRpZiBbICEgLXMgXFxcIiR7cmNmaWxlfVxcXCIgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcdHNlcnZlcl9yYz0kKGNhdCBcXFwiJHtyY2ZpbGV9XFxcIilcXG4rXFx0aWYgISBbWyBcXFwiJHNlcnZlcl9yY1xcXCIgPX4gXlswLTldKyQgXV0gfHwgWyBcXFwiJHNlcnZlcl9yY1xcXCIgLW5lIDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIGV4aXRlZCB3aXRoIHJjPScke3NlcnZlcl9yY30nXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVyblxcbitcXHRmaVxcbitcXHRpcGVyZl9waWQ9XFxcIlxcXCJcXG4rXFxuK1xcdCMgc2Vjb25kYXJ5IGhlYWx0aCBzaWduYWwgb25seTogYW5jaG9yZWQsIHNpbmdsZS1tYXRjaCwgbnVtZXJpYyDigJRcXG4rXFx0IyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyXFxuK1xcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxcbitcXHRzZW5kZXJfcmV0cj0kKGVjaG8gXFxcIiRvdXRcXFwiIHwgYXdrICcvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfScpXFxuK1xcdGlmIFsgXFxcIiQoZWNobyBcXFwiJHNlbmRlcl9yZXRyXFxcIiB8IGdyZXAgLUVjICdeWzAtOV0rJCcpXFxcIiAtbmUgMSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiSU5GTzogVENQIHN0cmVhbSBkb25lO1xcXCIgXFxcXFxcbitcXHRcXHRcXFwic2VuZGVyIHJldHJhbnNtaXRzPSRzZW5kZXJfcmV0ciAoc2Vjb25kYXJ5IHNpZ25hbClcXFwiXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtRSBcXFwic2VuZGVyfHJlY2VpdmVyXFxcIlxcbit9XFxuK1xcbitjaGVja19wcmVyZXF1aXNpdGVzXFxuK2NoZWNrX3Rvb2wgZXRodG9vbFxcbitjaGVja190b29sIGlwZXJmM1xcbitjaGVja190b29sIHRpbWVvdXRcXG4rXFxuKyMgaXByb3V0ZTIgbXVzdCBrbm93IHRoZSBIU1IgaW50ZXJsaW5rIHN5bnRheC5cXG4raWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcXHUwMDNlXFx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK1xcbitzZXR1cF90b3BvXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cXFwiXFxuK2RvX3BpbmcgXFxcIiRuc19zYW5cXFwiIFxcXCIkcGVlcl9pcFxcXCJcXG4rc3RvcF9pZl9lcnJvciBcXFwiSW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cXFwiXFxuK1xcbitkb19ncm9fZmVhdHVyZV9jaGVja3NcXG4rZG9fdHNvX3N0cmVhbV90ZXN0XFxuK3N0b3BfaWZfZXJyb3IgXFxcIkdTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlxcXCJcXG4rXFxuK2VjaG8gXFxcIklORk86IEFsbCBnb29kLlxcXCJcXG4rZXhpdCAkcmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU3OjQ3LjE1Njc4MjY3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyODAxNTI0NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIGFuZCBjb3JlIG5ldHdvcmtpbmcgdG8gZGlzYWJsZSBHUk8gb24gZW5zbGF2ZWQgZGV2aWNlcyBhbmQgaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGluIEhTUiBmb3J3YXJkaW5nLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI5ODRhMDBmN2FiMDc1NmE2MTFjZGVkMTcxOWRmZGNmMWU4MWRlYzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwNTo1Nzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uZWJhMmMyNmE0OWJhOGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMzQzNCw2ICszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgdW5saW5rKTtcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGRldl9sb29wYmFja194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiKTtcbiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDU5MzNjNWRhYjA5ZWUxLi5hNmNmMmFkYzg2MjU2NSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTE4NDAsNiArMTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHR9XG4gfVxuIFxuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2O1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbitcbitcdGRldi1cdTAwM2V3YW50ZWRfZmVhdHVyZXMgXHUwMDI2PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpO1xuK1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcbitcdFx0bmV0ZGV2X1dBUk4oZGV2LCBcImZhaWxlZCB0byBkaXNhYmxlIEdSTyFcXG5cIik7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG4rXHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0fVxuK31cbitcbiAvKipcbiAgKlx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuICAqXHRAZGV2OiBkZXZpY2VcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmNcbmluZGV4IDQzNzk0N2RkMDhlZDUzLi4wMmZiMjE2Mjk1MTI4NCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xuKysrIGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5AQCAtMjY5LDYgKzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2xybyk7XG4gXG4rLyoqXG4rICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4rICogQGRldjogZGV2aWNlXG4rICpcbisgKiBEaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0IGRldmljZS4gIE11c3QgYmVcbisgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlXG4rICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxuKyAqL1xuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4rXHRuZXRpZl9kaXNhYmxlX2dybyhkZXYpO1xuK1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xuK1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4yNDhjYmIxNDJlMjFlMSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHNrYi1cdTAwM2VkZXYgPSBtYXN0ZXItXHUwMDNlZGV2O1xuIFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuQEAgLTMzNSw2ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXNlcXVlbmNlX25yKTtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yKys7XG4gXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gdHlwZTtcbiBcdC8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovXG5AQCAtMzU2LDE0ICszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdHJldHVybjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG5AQCAtMzkwLDYgKzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XG4gXHRoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKys7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuIFxuQEAgLTM5NywxMyArMzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiB9XG4gXG4gLyogQW5ub3VuY2UgKHN1cGVydmlzaW9uIGZyYW1lKSB0aW1lciBmdW5jdGlvblxuQEAgLTY1OSw3ICs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4gXG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8XG4tXHRcdFx0ICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8XG4rXHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gI2luY2x1ZGUgXCJoc3JfbWFpbi5oXCJcbiAjaW5jbHVkZSBcImhzcl9mcmFtZXJlZy5oXCJcbiBcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxuIFx0ICAgIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4gXHRcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXG4tXHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRmcmFtZS1cdTAwM2VzZXF1ZW5jZV9uciA9IGhzci1cdTAwM2VzZXF1ZW5jZV9ucjtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yKys7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtNzMxLDcgKzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuK3N0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbiBcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyBmcmFtZTtcbiBcbkBAIC03NjAsMyArNzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbiBcdGtmcmVlX3NrYihza2IpO1xuIH1cbitcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuKyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci5cbisgKi9cbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xuK1xuK1x0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xuK1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxuK1x0ICogb24gdGhlIG1hc3Rlciwgb3IgYXJyaXZpbmcgdW50YWdnZWQgZnJvbSB0aGUgU0FOIHNpZGUgb24gdGhlXG4rXHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxuK1x0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxuK1x0ICogcmVjb3ZlcjsgYW4gYWxyZWFkeS10YWdnZWQgSFNSL1BSUCBzdXBlci1wYWNrZXQgdmlvbGF0ZXNcbitcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxuK1x0ICovXG4rXHRpZiAocG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XG4rXHQgICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX1BSUCkpXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXG4rXHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxuK1x0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cbitcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4rXHQgKi9cbitcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcbitcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHdoaWxlIChzZWdzKSB7XG4rXHRcdG5leHQgPSBzZWdzLVx1MDAzZW5leHQ7XG4rXHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG4rXHRcdHNlZ3MgPSBuZXh0O1xuK1x0fVxuK1x0cmV0dXJuO1xuK1xuK2Ryb3BfZ3NvOlxuK1x0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xuK1x0a2ZyZWVfc2tiKHNrYik7XG4rfVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5pbmRleCBkOWFmOWU2NWY3MmYwNy4uYzdmZDAyMWYwM2IxZjQgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHR9XG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFxuLVx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcbi1cdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxuLVx0ICovXG4tXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0fVxuK1x0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4gXG4gZmluaXNoX2NvbnN1bWU6XG4gXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbkBAIC0xNzAsNiArMTYxLDcgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gZmFpbF9yeF9oYW5kbGVyO1xuIFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XG4rXHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMGQxMDU0NzZlN2M1MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICszLDcgQEBcbiB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi5cbiBcbiBURVNUX1BST0dTIDo9IFxcXG4rXHRoc3JfZ3JvX3N1cGVycGFja2V0LnNoIFxcXG4gXHRoc3JfcGluZy5zaCBcXFxuIFx0aHNyX3JlZGJveC5zaCBcXFxuIFx0bGlua19mYXVsdHMuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGNhMmE3ZjM5NWViZDBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCArMSw0MzcgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6XG4rI1xuKyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuKyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4rIyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbisjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkuIEV2aWRlbmNlOlxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuKyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCdzIExBTiBwb3J0cy5cbisjXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4rI1xuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xuKyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuKyNcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxuKyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK25zX2R1dD1cImhzci1ncm8tZHV0XCJcbituc19zYW49XCJoc3ItZ3JvLXNhblwiXG4rbnNfcGVlcj1cImhzci1ncm8tcGVlclwiXG4rc2FuX2lwPVwiMTAwLjY0LjAuMVwiXG4rcGVlcl9pcD1cIjEwMC42NC4wLjNcIlxuK1xuKyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcbisjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGFcbisjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLlxuK1NBTl9BVkdfTUlOPTIwNDhcbitMQU5fQVZHX01BWD0xNTE0XG4rXG4raXBlcmZfcGlkPVwiXCJcbitzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rd29ya2Rpcj1cIlwiXG4rcGlkZmlsZT1cIlwiXG4rcmNmaWxlPVwiXCJcbitcbitjbGVhbnVwKClcbit7XG4rXHQjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzIGFnYWluc3RcbitcdCMgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApXG4rXHRpZiBbIC1uIFwiJHtpcGVyZl9waWR9XCIgXSBcdTAwMjZcdTAwMjYgdmFsaWRfc2VydmVyX3BpZCBcIiR7aXBlcmZfcGlkfVwiOyB0aGVuXG4rXHRcdGtpbGwgXCIke2lwZXJmX3BpZH1cIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRmaVxuK1x0aXBlcmZfcGlkPVwiXCJcbitcdGlmIFsgLW4gXCIke3NlcnZlcl93cmFwcGVyfVwiIF07IHRoZW5cbitcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhXG4rXHRcdCMgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlciBoYW5nIGNsZWFudXBcbitcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFx0a2lsbCAtMCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuK1x0XHRcdHNsZWVwIDAuMVxuK1x0XHRkb25lXG4rXHRcdGtpbGwgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0d2FpdCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rXHRmaVxuK1x0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMgcHJvY2Vzc2VzIHRoYXRcbitcdCMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucywgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuXG4rXHQjIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZSB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmRcbitcdCMgcGtpbGwgd291bGQgc2NhbiB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXG4rXHRsb2NhbCBfcCBfc3RpbGxcbitcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRpZiBbIFwiJChjYXQgL3Byb2MvXCIkX3BcIi9jb21tIDJcdTAwM2UvZGV2L251bGwpXCIgPSBcImlwZXJmM1wiIF07IHRoZW5cbitcdFx0XHRraWxsIFwiJF9wXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRmaVxuK1x0ZG9uZVxuK1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdF9zdGlsbD0wXG4rXHRcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRcdGlmIFsgXCIkKGNhdCAvcHJvYy9cIiRfcFwiL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXTsgdGhlblxuK1x0XHRcdFx0X3N0aWxsPTFcbitcdFx0XHRcdGJyZWFrXG4rXHRcdFx0ZmlcbitcdFx0ZG9uZVxuK1x0XHRbIFwiJF9zdGlsbFwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4rXHRcdHNsZWVwIDAuMVxuK1x0ZG9uZVxuK1x0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcIiRuc19wZWVyXCIgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4rXHRcdGlmIFsgXCIkKGNhdCAvcHJvYy9cIiRfcFwiL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXTsgdGhlblxuK1x0XHRcdGtpbGwgLTkgXCIkX3BcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdGZpXG4rXHRkb25lXG4rXHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcbitcdGlmIFsgLW4gXCIke3dvcmtkaXJ9XCIgXSBcdTAwMjZcdTAwMjYgWyAtZCBcIiR7d29ya2Rpcn1cIiBdOyB0aGVuXG4rXHRcdHJtIC1yZiBcIiR7d29ya2Rpcn1cIlxuK1x0ZmlcbitcdHdvcmtkaXI9XCJcIlxuK1x0cGlkZmlsZT1cIlwiXG4rXHRyY2ZpbGU9XCJcIlxuK1x0aXAgbmV0bnMgZGVsIFwiJG5zX2R1dFwiIDJcdTAwM2UvZGV2L251bGxcbitcdGlwIG5ldG5zIGRlbCBcIiRuc19zYW5cIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBuZXRucyBkZWwgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGxcbit9XG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbitjaGVja190b29sKClcbit7XG4rXHRpZiAhIGNvbW1hbmQgLXYgXCIkMVwiIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0ZWNobyBcIlNLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxXCJcbitcdFx0ZXhpdCAka3NmdF9za2lwXG4rXHRmaVxuK31cbitcbituc3goKVxuK3tcbitcdGlwIG5ldG5zIGV4ZWMgXCIkMVwiIGJhc2ggLWMgXCIkMlwiXG4rfVxuK1xuK3NldHVwX3RvcG8oKVxuK3tcbitcdGxvY2FsIG5zXG4rXG4rXHRjbGVhbnVwXG4rXHRmb3IgbnMgaW4gXCIkbnNfZHV0XCIgXCIkbnNfc2FuXCIgXCIkbnNfcGVlclwiOyBkb1xuK1x0XHRpcCBuZXRucyBhZGQgXCIkbnNcIlxuK1x0ZG9uZVxuK1xuK1x0aXAgbGluayBhZGQgZF9hIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFwiJG5zX3BlZXJcIlxuK1x0aXAgbGluayBhZGQgZF9iIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zIFwiJG5zX3BlZXJcIlxuK1x0aXAgbGluayBhZGQgZF9pbCBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFwiJG5zX3NhblwiXG4rXG4rXHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXG4rXHRmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG9cbitcdFx0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcIlxuK1x0ZG9uZVxuK1x0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXG4rXHRcdG5zeCBcIiRuc19wZWVyXCIgXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwiXG4rXHRkb25lXG4rXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIHNldCBkX2lsIHVwXCJcbitcdG5zeCBcIiRuc19zYW5cIiBcImlwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMFwiXG4rXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxuK1x0XHRpcCBsaW5rIHNldCBoc3IwIHVwXCJcbitcdG5zeCBcIiRuc19wZWVyXCIgXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxuK1x0XHRpcCBsaW5rIHNldCBoc3IxIHVwOyBpcCBhZGRyIGFkZCAkcGVlcl9pcC8yNCBkZXYgaHNyMVwiXG4rXG4rXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXG4rXHRzbGVlcCAyXG4rfVxuK1xuK2NoZWNrX2ZlYXR1cmUoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIlxuK1x0bG9jYWwgaWZhY2U9XCIkMlwiXG4rXHRsb2NhbCBmZWF0dXJlPVwiJDNcIlxuK1x0bG9jYWwgd2FudD1cIiQ0XCJcbitcbitcdGlmIG5zeCBcIiRuc1wiIFwiZXRodG9vbCAtayAkaWZhY2VcIiB8IGdyZXAgLXEgXCJeJGZlYXR1cmU6ICR3YW50XCI7IHRoZW5cbitcdFx0ZWNobyBcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdXCJcbitcdGVsc2VcbitcdFx0ZWNobyBcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGZpXG4rfVxuK1xuKyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXG4rIyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LlxuK2NoZWNrX2ZlYXR1cmVfbm90X29uKClcbit7XG4rXHRsb2NhbCBucz1cIiQxXCJcbitcdGxvY2FsIGlmYWNlPVwiJDJcIlxuK1x0bG9jYWwgZmVhdHVyZT1cIiQzXCJcbitcbitcdGlmIG5zeCBcIiRuc1wiIFwiZXRodG9vbCAtayAkaWZhY2VcIiB8IGdyZXAgLXEgXCJeJGZlYXR1cmU6IG9uXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgb25cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXCJcbitcdGZpXG4rfVxuK1xuK2RvX2dyb19mZWF0dXJlX2NoZWNrcygpXG4re1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0c3RvcF9pZl9lcnJvciBcIkdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cIlxuK1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYSByeC1ncm8taHcgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYiByeC1ncm8taHcgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfaWwgcngtZ3JvLWh3IG9mZlxuK1x0c3RvcF9pZl9lcnJvciBcIkhXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cIlxuK1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgaHNyMCBnZW5lcmljLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBoc3IwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwiJG5zX2R1dFwiIGhzcjAgdHgtdGNwNi1zZWdtZW50YXRpb25cbitcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwiJG5zX2R1dFwiIGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvblxuK1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCIkbnNfZHV0XCIgaHNyMCB0eC1nc28tbGlzdFxuK1x0c3RvcF9pZl9lcnJvciBcIkhTUiBtYXN0ZXIgc3RpbGwgYWR2ZXJ0aXNlcyBHU08tZmFtaWx5IGZlYXR1cmVzLlwiXG4rfVxuK1xuK2FsbG9jX3dvcmtkaXIoKVxuK3tcbitcdCMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzb1xuK1x0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcbitcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cbitcdHdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7XG4rXHRcdGVjaG8gXCJGQUlMOiBta3RlbXAgLWQgZmFpbGVkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCAxXG4rXHR9XG4rXHRjaG1vZCA3MDAgXCIke3dvcmtkaXJ9XCJcbitcdHBpZGZpbGU9XCIke3dvcmtkaXJ9L2lwZXJmLnBpZFwiXG4rXHRyY2ZpbGU9XCIke3dvcmtkaXJ9L2lwZXJmLnJjXCJcbit9XG4rXG4rIyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIHBlZXIgbmV0bnMuXG4rdmFsaWRfc2VydmVyX3BpZCgpXG4re1xuK1x0bG9jYWwgcD1cIiQxXCJcbitcbitcdFtbIFwiJHBcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxuK1x0a2lsbCAtMCBcIiRwXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gMVxuK1x0WyBcIiQoY2F0IC9wcm9jL1wiJHBcIi9jb21tIDJcdTAwM2UvZGV2L251bGwpXCIgPSBcImlwZXJmM1wiIF0gfHwgcmV0dXJuIDFcbitcdGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwgfCBncmVwIC1xeCBcIiRwXCJcbit9XG4rXG4rc3RhcnRfaXBlcmZfc2VydmVyKClcbit7XG4rXHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4rXG4rXHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHRoZSB3cmFwcGVyIHJlY29yZHMgaXRzIGV4YWN0IFBJRCBhbmQgaXRzXG4rXHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuK1x0YWxsb2Nfd29ya2RpclxuK1x0KCBuc3ggXCIkbnNfcGVlclwiIFwiaXBlcmYzIC1zIC0xIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IFxcXG4rXHRcdGVjaG8gXFwkISBcdTAwM2UgJHtwaWRmaWxlfTsgXFxcbitcdFx0d2FpdCBcXCQhOyBcXFxuK1x0XHRlY2hvIFxcJD8gXHUwMDNlICR7cmNmaWxlfVwiICkgXHUwMDI2XG4rXHRzZXJ2ZXJfd3JhcHBlcj0kIVxuK1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4rXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuK1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFsgLXMgXCIke3BpZGZpbGV9XCIgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXHRpZiBbICEgLXMgXCIke3BpZGZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQgKG5vIHBpZGZpbGUpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRjYW5kaWRhdGVfcGlkPSQoXHUwMDNjXCIke3BpZGZpbGV9XCIpXG4rXHRpZiAhIHZhbGlkX3NlcnZlcl9waWQgXCIke2NhbmRpZGF0ZV9waWR9XCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICcke2NhbmRpZGF0ZV9waWR9JyBmYWlsZWQgdmFsaWRhdGlvblwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4rXHRpcGVyZl9waWQ9XCIke2NhbmRpZGF0ZV9waWR9XCJcbitcdHNsZWVwIDFcbitcdHJldHVybiAwXG4rfVxuK1xuKyMgUHJpbnQgXCJcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCIgZm9yIGV4YWN0bHkgb25lIFRYIHJlY29yZCBvZiBucy9kZXY7IGFueXRoaW5nXG4rIyBlbHNlIChtaXNzaW5nLCBkdXBsaWNhdGVkLCBub24tbnVtZXJpYykgaXMgYSBoYXJkIEZBSUwuXG4rcmVhZF90eF9jb3VudGVycygpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiIGRldj1cIiQyXCJcbitcdGxvY2FsIG91dCBjbnRcbitcbitcdG91dD0kKG5zeCBcIiRuc1wiIFwiaXAgLXMgbGluayBzaG93ICRkZXZcIiB8IFxcXG4rXHRcdGF3ayAnL14gK1RYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfScpXG4rXHRjbnQ9JChlY2hvIFwiJG91dFwiIHwgZ3JlcCAtYyAnXlswLTldKiBbMC05XSokJylcbitcdGlmIFsgXCIkY250XCIgLW5lIDEgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2IChyZWNvcmRzPSRjbnQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRlY2hvIFwiJG91dFwiXG4rXHRyZXR1cm4gMFxuK31cbitcbitldmFsX2NvdW50ZXJfZGVsdGEoKVxuK3tcbitcdGxvY2FsIG5hbWU9XCIkMVwiIGIwPVwiJDJcIiBwMD1cIiQzXCIgYjE9XCIkNFwiIHAxPVwiJDVcIiBvcD1cIiQ2XCIgbGltaXQ9XCIkN1wiXG4rXHRsb2NhbCBiZCBwZFxuK1xuK1x0aWYgISBbWyBcIiRiMFwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcIiRiMVwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcXFxuK1x0XHRcIiRwMFwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcIiRwMVwiID1+IF5bMC05XSskIF1dOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0YmQ9JCgoYjEgLSBiMCkpXG4rXHRwZD0kKChwMSAtIHAwKSlcbitcdGlmIFsgXCIkYmRcIiAtbHQgMCBdIHx8IFsgXCIkcGRcIiAtbGUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lIChieXRlcz0kYmQgcGt0cz0kcGQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRpZiBbIFwiJG9wXCIgPSBcImd0XCIgXTsgdGhlblxuK1x0XHRpZiBbIFwiJGJkXCIgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIkZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2M9ICRsaW1pdFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRyZXR1cm4gMVxuK1x0XHRmaVxuK1x0ZWxzZVxuK1x0XHRpZiBbIFwiJGJkXCIgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIkZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2UgJGxpbWl0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0XHRyZXQ9MVxuK1x0XHRcdHJldHVybiAxXG4rXHRcdGZpXG4rXHRmaVxuK1x0ZWNobyBcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXCIgXFxcbitcdFx0XCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXCJcbitcdHJldHVybiAwXG4rfVxuK1xuK2RvX3Rzb19zdHJlYW1fdGVzdCgpXG4re1xuK1x0bG9jYWwgb3V0IHNlbmRlcl9yZXRyIHNlcnZlcl9yY1xuK1x0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4rXHRsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIGJfYjAgYl9wMCBiX2IxIGJfcDFcbitcbitcdGVjaG8gXCJJTkZPOiBFbmFibGluZyBUU08vR1NPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlwiXG4rXHRuc3ggXCIkbnNfc2FuXCIgXCJldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb25cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19zYW5cIiBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cbitcdHN0b3BfaWZfZXJyb3IgXCJDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1xuK1x0ZWNobyBcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBIU1IgRFVULlwiXG4rXHRzdGFydF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuXG4rXG4rXHQjIENvdW50ZXIgc25hcHNob3RzIGFyb3VuZCB0aGUgc3RyZWFtIHdpbmRvdy4gVGhlIFNBTi1zaWRlIGF2ZXJhZ2VcbitcdCMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzXG4rXHQjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWFxuK1x0IyAoYWdncmVnYXRlIHByb29mIHRoYXQgYnVsayBvdXRwdXQgd2FzIHNlZ21lbnRlZCBwZXItZnJhbWUpLiBUaGVzZVxuK1x0IyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi5cbitcdHNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wXG4rXHRyZWFkIC1yIHNhbl9iMCBzYW5fcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX3NhblwiIHMwKVxuK0VPRlxuK1x0cmVhZCAtciBhX2IwIGFfcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIGRfYSlcbitFT0ZcbitcdHJlYWQgLXIgYl9iMCBiX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2IpXG4rRU9GXG4rXHRbIFwiJHtyZXQ6LTB9XCIgLWVxIDAgXSB8fCByZXR1cm5cbitcbitcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxuK1x0IyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LlxuK1x0IyBVbmNhcHBlZCBydW5zIGZsYXAgYXQgVk0vQ0kgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYVxuK1x0IyBmdW5jdGlvbmFsIHByb2JsZW0uXG4rXHRpZiAhIG91dD0kKG5zeCBcIiRuc19zYW5cIiBcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXFxcbitcdFx0LWIgMkcgLXQgMTBcIiAyXHUwMDNlXHUwMDI2MSk7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOlwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGVjaG8gXCIkb3V0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1xuK1x0cmVhZCAtciBzYW5fYjEgc2FuX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19zYW5cIiBzMClcbitFT0ZcbitcdHJlYWQgLXIgYV9iMSBhX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2EpXG4rRU9GXG4rXHRyZWFkIC1yIGJfYjEgYl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9iKVxuK0VPRlxuK1xuK1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwiU0FOIHMwIFRYXCIgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCIgXCIkc2FuX2IxXCIgXCIkc2FuX3AxXCIgXFxcbitcdFx0Z3QgXCIkU0FOX0FWR19NSU5cIlxuK1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwiRFVUIGRfYSBUWFwiIFwiJGFfYjBcIiBcIiRhX3AwXCIgXCIkYV9iMVwiIFwiJGFfcDFcIiBcXFxuK1x0XHRsZSBcIiRMQU5fQVZHX01BWFwiXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJEVVQgZF9iIFRYXCIgXCIkYl9iMFwiIFwiJGJfcDBcIiBcIiRiX2IxXCIgXCIkYl9wMVwiIFxcXG4rXHRcdGxlIFwiJExBTl9BVkdfTUFYXCJcbitcdFsgXCIke3JldDotMH1cIiAtZXEgMCBdIHx8IHJldHVyblxuK1xuK1x0IyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFwIHRoZVxuK1x0IyB3cmFwcGVyLCB0aGVuIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIHRoZSBzZXJ2ZXIncyByZWFsIHN0YXR1c1xuK1x0d2FpdCBcIiR7c2VydmVyX3dyYXBwZXJ9XCJcbitcdHNlcnZlcl93cmFwcGVyPVwiXCJcbitcdGlmIFsgISAtcyBcIiR7cmNmaWxlfVwiIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdHNlcnZlcl9yYz0kKGNhdCBcIiR7cmNmaWxlfVwiKVxuK1x0aWYgISBbWyBcIiRzZXJ2ZXJfcmNcIiA9fiBeWzAtOV0rJCBdXSB8fCBbIFwiJHNlcnZlcl9yY1wiIC1uZSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JyR7c2VydmVyX3JjfSdcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRpcGVyZl9waWQ9XCJcIlxuK1xuK1x0IyBzZWNvbmRhcnkgaGVhbHRoIHNpZ25hbCBvbmx5OiBhbmNob3JlZCwgc2luZ2xlLW1hdGNoLCBudW1lcmljIOKAlFxuK1x0IyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyXG4rXHQjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS5cbitcdHNlbmRlcl9yZXRyPSQoZWNobyBcIiRvdXRcIiB8IGF3ayAnL3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0nKVxuK1x0aWYgWyBcIiQoZWNobyBcIiRzZW5kZXJfcmV0clwiIHwgZ3JlcCAtRWMgJ15bMC05XSskJylcIiAtbmUgMSBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBjYW5ub3QgcGFyc2Ugc2VuZGVyIHJldHJhbnNtaXRzIHJlbGlhYmx5XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZWNobyBcIiRvdXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRlY2hvIFwiSU5GTzogVENQIHN0cmVhbSBkb25lO1wiIFxcXG4rXHRcdFwic2VuZGVyIHJldHJhbnNtaXRzPSRzZW5kZXJfcmV0ciAoc2Vjb25kYXJ5IHNpZ25hbClcIlxuK1x0ZWNobyBcIiRvdXRcIiB8IGdyZXAgLUUgXCJzZW5kZXJ8cmVjZWl2ZXJcIlxuK31cbitcbitjaGVja19wcmVyZXF1aXNpdGVzXG4rY2hlY2tfdG9vbCBldGh0b29sXG4rY2hlY2tfdG9vbCBpcGVyZjNcbitjaGVja190b29sIHRpbWVvdXRcbitcbisjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXG4raWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuXG4rXHRlY2hvIFwiU0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFwiXG4rXHRleGl0ICRrc2Z0X3NraXBcbitmaVxuK1xuK3NldHVwX3RvcG9cbitcbitlY2hvIFwiSU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cIlxuK2RvX3BpbmcgXCIkbnNfc2FuXCIgXCIkcGVlcl9pcFwiXG4rc3RvcF9pZl9lcnJvciBcIkluaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuXCJcbitcbitkb19ncm9fZmVhdHVyZV9jaGVja3Ncbitkb190c29fc3RyZWFtX3Rlc3RcbitzdG9wX2lmX2Vycm9yIFwiR1NPIHN1cGVyLXBhY2tldCBzdHJlYW0gdGVzdCBmYWlsZWQuXCJcbitcbitlY2hvIFwiSU5GTzogQWxsIGdvb2QuXCJcbitleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU3OjQ3LjE1Njc4MzY1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjUyMDc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSFNSIEdSTy9HU08gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgdGhlIEhTUiBkcml2ZXIgaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvIGFkZHJlc3MgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgYW5kIEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQgKEdTTykuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gZGlzYWJsZSBHUk8gb24gdGhlIEhTUiBuZXQgZGV2aWNlIHVzaW5nIGBuZXRpZl9kaXNhYmxlX2dybygpYCBhbmQgYGRldl9kaXNhYmxlX2dybygpYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGV5J3ZlIGFsc28gY2xlYW5lZCB1cCBgaHNyX2Rldl9zZXR1cGAgYnkgcmVtb3ZpbmcgdGhlIGBORVRJRl9GX0dTT19NQVNLYCBmZWF0dXJlLiBUaGV5J3ZlIGdvdCBtb2RpZmljYXRpb25zIHRvIGBoc3JfZm9yd2FyZF9za2JgIHRvIGhhbmRsZSB0aGUgR1NPIHN1cGVyLXBhY2tldHMsIHNlZ21lbnRpbmcgdGhlbSBiZWZvcmUgZm9yd2FyZGluZywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIGxhcmdlIHBhY2tldHMgaW4gdGhpcyBjb250ZXh0LiBUaGVyZSdzIGFsc28gYSBjYWxsIHRvIGBkZXZfZGlzYWJsZV9ncm8oZGV2KWAgaW4gYGhzcl9wb3J0ZGV2X3NldHVwYC4gQW5kLCB0aGVyZSdzIGEgbmV3IHNlbGZ0ZXN0LCBgaHNyX2dyb19zdXBlcnBhY2tldC5zaGAsIHRvIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcyBleHBlY3RlZCwgd2hpY2ggaXMgZ3JlYXQgdG8gc2VlLlxuXG5Ob3csIGZyb20gdGhlIGZpbGUgbGlzdCDigJMgYG5ldC9jb3JlL2Rldi5jYCwgYG5ldC9jb3JlL2Rldl9hcGkuY2AsIGBuZXQvaHNyL2hzcl9kZXZpY2UuY2AsIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBhbmQgYG5ldC9oc3IvaHNyX3NsYXZlLmNgIOKAkyB0aGlzIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBrZXJuZWwgbmV0d29yayBsb2dpYyBhbmQgdGhlIG5ldHdvcmsgZHJpdmVyIGl0c2VsZi4gVGhhdOKAmXMgcmVhY2hhYmxlIGNvZGUsIGFuZCBJIGtub3cgSFNSIGlzIGEgdmlydHVhbCBkZXZpY2UsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHdoaWNoIGlzIGhlbHBmdWwuIFRoZSBwYXRjaCBkZWFscyB3aXRoIEdTTyBhbmQgR1JPLCB3aGljaCBhcmUgY3J1Y2lhbCBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcy5cblxuTm93LCBteSBmb2N1cyBmb3IgZnV6emluZyBuZWVkcyB0byBiZSBvbiBzcGVjaWZpYyBmdW5jdGlvbnMsIHN0YXJ0aW5nIHdpdGggYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gZW5zdXJlIHRoZSBHUk8gZGlzYWJsaW5nIGlzIHN1Y2Nlc3NmdWwuIFRoZW4sIGBoc3JfZm9yd2FyZF9za2JgIGFuZCBgaHNyX2Rldl94bWl0YCB3aWxsIGJlIGtleSB0byB0ZXN0aW5nIEdTTyBzdXBlci1wYWNrZXQgaGFuZGxpbmcgYW5kIHRyYW5zbWlzc2lvbiwgYW5kIGZpbmFsbHksIGBoc3JfaGFuZGxlX2ZyYW1lYCB0byBtYWtlIHN1cmUgb3ZlcmFsbCBwYWNrZXQgcHJvY2Vzc2luZyBpcyBpbnRhY3QuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYENPTkZJR19IU1JgIG9yIHNpbWlsYXIgaW4gYG5ldC9oc3IvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIEhTUiBkcml2ZXIuIFRoaXMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhlIHRlc3QgZW52aXJvbm1lbnQgbWF0Y2hlcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTkwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTc6NTMuNzIxOTk0NDYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5Nzc5OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIU1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTc6NTMuODAxNzgzNjIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDgwNTk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIEhTUiB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIExldCdzIHN0YXJ0IGJ5IGNyYWNraW5nIG9wZW4gdGhlIGBuZXQvaHNyL0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBmaXJzdCBwbGFjZSBJIGxvb2sgZm9yIGRlcGVuZGVuY2llcy4gSXQnbGwgbGF5IG91dCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLCBhbmQgYW55IHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcywgaGFyZHdhcmUgZHJpdmVycywgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBIU1IgZnVuY3Rpb25hbGl0eSBtaWdodCBwaWdneWJhY2sgb24uIFRoaXMgaXMgd2hlcmUgdGhlIHRydXRoIGxpZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTc6NTcuOTY2NTkxMzQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2hzci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3lcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEhTUlxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBJRUMgNjI0MzkgZGVmaW5lZCBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzc1xcbiAgMTA6XFx0XFx0ICBSZWR1bmRhbmN5IChIU1IpIGFuZCBQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sIChQUlApLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxcbiAgMTM6XFx0XFx0ICBEQU5IIChcXFwiRG91Ymx5IGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIEhTUlxcXCIpIG9yIERBTlAgKFxcXCJEb3VibHlcXG4gIDE0OlxcdFxcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXFxcIikuIEZvciB0aGlzIHRvIHdvcmssIHlvdXIgTGludXggYm94XFxuICAxNTpcXHRcXHQgIG5lZWRzIChhdCBsZWFzdCkgdHdvIHBoeXNpY2FsIEV0aGVybmV0IGludGVyZmFjZXMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxcbiAgMTg6XFx0XFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXFxuICAxOTpcXHRcXHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcXG4gIDIwOlxcdFxcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcXG4gIDIxOlxcdFxcdCAgaW4gdGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQgZmlsdGVycyBmcmFtZXNcXG4gIDIyOlxcdFxcdCAgdGhhdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGVhcmxpZXIuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgRm9yIERBTlAsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBjb25uZWN0aW5nIHRvIHR3b1xcbiAgMjU6XFx0XFx0ICBzZXBhcmF0ZSBuZXR3b3JrcyBvdmVyIHRoZSB0d28gc2xhdmUgaW50ZXJmYWNlcy4gTGlrZSBIU1IsIEV0aGVybmV0XFxuICAyNjpcXHRcXHQgIGZyYW1lcyBzZW50IG92ZXIgdGhlIFBSUCBkZXZpY2Ugd2lsbCBiZSBzZW50IHRvIGJvdGggbmV0d29ya3MgZ2l2aW5nXFxuICAyNzpcXHRcXHQgIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBVbmxpa2UgSFNSLCBQUlAgbmV0d29ya3NcXG4gIDI4OlxcdFxcdCAgY2FuIGhhdmUgU2luZ2x5IEF0dGFjaGVkIE5vZGVzIChTQU4pIHN1Y2ggYXMgUEMsIHByaW50ZXIsIGJyaWRnZXNcXG4gIDI5OlxcdFxcdCAgZXRjIGFuZCB3aWxsIGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBEQU5QIG5vZGVzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgY29kZSBpcyBhIFxcXCJiZXN0IGVmZm9ydFxcXCIgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBzdGFuZGFyZCBhc1xcbiAgMzI6XFx0XFx0ICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTM6MjAxMCAoSFNSdjApIGFuZCBJRUMgNjI0MzktMzoyMDEyIChIU1J2MSksXFxuICAzMzpcXHRcXHQgIGFuZCBQUlAgc3RhbmRhcmQgZGVzY3JpYmVkIGluIElFQyA2MjQzOS00OjIwMTIgKFBSUCksIGJ1dCBub1xcbiAgMzQ6XFx0XFx0ICBjb21wbGlhbmN5IHRlc3RzIGhhdmUgYmVlbiBtYWRlLiBVc2UgaXByb3V0ZTIgdG8gc2VsZWN0IHRoZSBwcm90b2NvbFxcbiAgMzU6XFx0XFx0ICB5b3Ugd291bGQgbGlrZSB0byB1c2UuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgWW91IG5lZWQgdG8gcGVyZm9ybSBhbnkgYW5kIGFsbCBuZWNlc3NhcnkgdGVzdHMgeW91cnNlbGYgYmVmb3JlXFxuICAzODpcXHRcXHQgIHJlbHlpbmcgb24gdGhpcyBjb2RlIGluIGEgc2FmZXR5IGNyaXRpY2FsIHN5c3RlbSFcXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRpZiBIU1JcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXFxuICA0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICA0NzpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNDg6XFx0XFx0aGVscFxcbiAgNDk6XFx0XFx0ICBDb3ZlcnMgdGhlIFBSUCBkdXBsaWNhdGUgZGlzY2FyZCBhbGdvcml0aG0uXFxuICA1MDpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNTo1Nzo1Ny45NjY2NTI0MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDAwNzk2NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFNSIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBIU1Igc2V0dXAsIGFuZCB0aGUgYENPTkZJR19IU1JgIGZsYWcgaXMsIG9mIGNvdXJzZSwgdGhlIG1haW4gY29uZmlndXJhdGlvbiBjb250cm9sLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGludm9sdmVkLiBMZXQncyBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkOiBgZGV2X2Rpc2FibGVfZ3JvYCwgYG5ldGlmX2Rpc2FibGVfZ3JvYCwgYGhzcl9kZXZfeG1pdGAsIGBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZWAsIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAsIGBoc3JfZGV2X3NldHVwYCwgYGhhbmRsZV9zdGRfZnJhbWVgLCBgaHNyX2ZvcndhcmRfc2tiYCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBhbmQgYGhzcl9wb3J0ZGV2X3NldHVwYC5cblxuTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGRlZmluZWQ/IGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHJlc2lkZSBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvZGV2X2FwaS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBoc3JfZm9yd2FyZF9za2JgIGlzIGNsZWFybHkgaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGFzIGV4cGVjdGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBgaHNyX2ZvcndhcmRfc2tiYCBpcyAqbm90KiBzdGF0aWMsIGJ1dCBgaHNyX2ZvcndhcmRfc2tiX29uZWAgKmlzKiBzdGF0aWMgd2hpY2ggaW1wbGllcyBzb21lIGludGVybmFsIGhhbmRsaW5nLiBgZGV2X2Rpc2FibGVfZ3JvYCBpcyBleHBvcnRlZCwgdGhhdCdzIGdvb2QuIGBuZXRpZl9kaXNhYmxlX2dyb2AgaXMgbm90IGV4cG9ydGVkLCBidXQgaXQncyBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gaXRzIHVzYWdlLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpc3RpbGwgdGhlIGVzc2VuY2Ugb2Ygd2hhdCdzIGltcG9ydGFudCBoZXJlLiBNeSBmb2N1cyBzaG91bGQgYmUgb246IGBkZXZfZGlzYWJsZV9ncm9gLCBgbmV0aWZfZGlzYWJsZV9ncm9gLCBgaHNyX2ZvcndhcmRfc2tiYCwgYGhzcl9kZXZfeG1pdGAsIGBoc3JfaGFuZGxlX2ZyYW1lYCwgYW5kIGBoc3JfcG9ydGRldl9zZXR1cGAuXG5cbldhaXQsIGEgc21hbGwgY29ycmVjdGlvbi4gYGhzcl9oYW5kbGVfZnJhbWVgIGlzIHN0YXRpYy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSB0aGF0IGlzIGRlZmluZWQuIExldCBtZSBsb29rIGluIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYCB0byBiZSBzdXJlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNTo1ODowMy45Njc0NTA2OTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTczMzMzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2hhbmRsZV9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL2hzcl9zbGF2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX3NsYXZlLmM9MTk9Ym9vbCBoc3JfaW52YWxpZF9kYW5faW5ncmVzc19mcmFtZShfX2JlMTYgcHJvdG9jb2wpXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTIzLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6MjQ6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxubmV0L2hzci9oc3Jfc2xhdmUuYy0yNS17XFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTg1PWJvb2wgaHNyX3BvcnRfZXhpc3RzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3Jfc2xhdmUuYy04Ni17XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4NzpcXHRyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKGRldi1cXHUwMDNlcnhfaGFuZGxlcikgPT0gaHNyX2hhbmRsZV9mcmFtZTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg4LX1cXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9MTMyPXN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTE1OS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjE2MDpcXHRyZXMgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGhzcl9oYW5kbGVfZnJhbWUsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTYxLVxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU4OjA0LjA2NDc4NzYzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDM1ODY0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiB0aGUgSFNSIERyaXZlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgbGF5IG9mIHRoZSBsYW5kIGFzIEkgdW5kZXJzdGFuZCBpdC4gSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGlzIEhTUiBzdHVmZiBpbnRlZ3JhdGVzIGludG8gdGhlIGtlcm5lbCBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBHUk8uIEkgc2VlIHRoYXQgYGhzcl9oYW5kbGVfZnJhbWVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQncyByZWdpc3RlcmVkIGFzIGFuIFJYIGhhbmRsZXIg4oCTIG1ha2VzIHNlbnNlLCB0aGUgZHJpdmVyIG5lZWRzIHRvIHByb2Nlc3MgaW5jb21pbmcgZnJhbWVzLiBTaW1pbGFybHksIGBoc3JfZGV2X3htaXRgIGlzIHN0YXRpYywgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgc28gdGhlIGRyaXZlciBkb2VzIGl0cyB0aGluZyB0aGVyZS4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zOiBgaHNyX2ZvcndhcmRfc2tiYCwgYGRldl9kaXNhYmxlX2dyb2AsIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUga2V5IG9uZXMgZm9yIGRpc2FibGluZyBHUk8gYW5kIGZvcndhcmRpbmcgcGFja2V0cyBhcHByb3ByaWF0ZWx5LiBJIGZpZ3VyZSBJJ2xsIGJlIHVzaW5nIGBkZXZfZGlzYWJsZV9ncm9gLCBgbmV0aWZfZGlzYWJsZV9ncm9gLCBhbmQgYGhzcl9mb3J3YXJkX3NrYmAgdG8gZ2V0IHRoZSBkZXNpcmVkIGJlaGF2aW9yIOKAkyBkaXNhYmxpbmcgR1JPIGlzIGxpa2VseSBjcnVjaWFsIGZvciBIU1IncyBkdXBsaWNhdGUgZnJhbWUgaGFuZGxpbmcuXG5cbk5vdywgZG8gSSBuZWVkIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0byBwdWxsIHRoaXMgb2ZmPyBMZXQncyBhc3N1bWUgaXQgZGVwZW5kcyBvbiB0aGUgTkVUIGNvbmZpZy4gSSdtIG5vdCBzZWVpbmcgYW55IG9idmlvdXMgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZsYWdzIGJleW9uZCB0aGF0LCB3aGljaCBpcyBnb29kLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvZGV2LmNgIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yIG9mIGBuZXRpZl9kaXNhYmxlX2dyb2AsIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IGhvdyBHUk8gZ2V0cyBkaXNhYmxlZCBhdCB0aGUgbmV0aWYgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU4OjA4LjcwODM3ODIwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3MTM1ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGlmX2Rpc2FibGVfZ3JvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE4MjU9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTg0Mi1cXG5uZXQvY29yZS9kZXYuYzoxODQzOnZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXYuYy0xODQ0LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE4NTUtXFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XFxubmV0L2NvcmUvZGV2LmM6MTg1NjpcXHRcXHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTE4NTctXFx0XFx0bmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTg6MDkuMjY1NTIwODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcyNTYzNjM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OlxuXG4qKkNoZWNraW5nIEdSTyBEaXNhYmxlbWVudCoqXG5cblJpZ2h0LCBgbmV0aWZfZGlzYWJsZV9ncm9gIGlzIGRlZmluaXRlbHkgcHJlc2VudC4gTm93LCBJIG5lZWQgdG8gc2VlICp3aGVyZSogaXQncyBhY3R1YWxseSBkZWZpbmVkIGFuZCBob3cgaXQncyB1c2VkLiBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBgbmV0L2NvcmUvZGV2X2FwaS5jYCBmaWxlLiBJJ20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBgZGV2X2Rpc2FibGVfZ3JvYCB0aGVyZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIHN0YXkgc2hhcnAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTg6MTEuOTkxMTYwMDgyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjExODMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldl9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZfYXBpLmM9MjcwPUVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNzItLyoqXFxubmV0L2NvcmUvZGV2X2FwaS5jOjI3MzogKiBkZXZfZGlzYWJsZV9ncm8oKSAtIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjc0LSAqIEBkZXY6IGRldmljZVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI3OS0gKi9cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjgwOnZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI4MS17XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg1LX1cXG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg2OkVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNTo1ODoxMi4xMTIzNDg5ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NjQ0NDcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggYW4gZXhwZXJ0IGF1ZGllbmNlIGluIG1pbmQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBHUk8gYW5kIEZvcndhcmRpbmcqKlxuXG5BbHJpZ2h0LCBjb25maXJtZWQg4oCTIGBkZXZfZGlzYWJsZV9ncm9gIGlzIGluZGVlZCBwcmVzZW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBwaXZvdCB0b3dhcmRzIHRoZSBsaWtlbHkgc291cmNlIG9mIGFueSByZWxhdGVkIGlzc3VlcyBpbiB0aGUgSFNSIGNvbnRleHQuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCwgbXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gbG9vayBhdCB0aGUgSFNSIGZvcndhcmRpbmcgbG9naWMgaXRzZWxmLiBUaGF0IGxlYWRzIG1lIGRpcmVjdGx5IHRvIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIEhTUiBmb3J3YXJkaW5nIGRlY2lzaW9ucyBhbmQgYWN0aW9ucyByZWxhdGVkIHRvIFNLQnMgd291bGQgYmUuIEFueSBHUk8tcmVsYXRlZCBhbm9tYWxpZXMgYXJlIGhpZ2hseSBsaWtlbHkgdG8gbWFuaWZlc3QgdGhlcmUuIE5vdyBsZXQncyBkaWcgaW50byB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTg6MTUuMjA4Nzk3Mjg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2ODE3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9Njc4PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM1LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjczNjpzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM3LXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NjgtICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc2OTp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3MC17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzczLVxcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc0OlxcdFxcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MDItXFx0XFx0c2Vncy1cXHUwMDNlbmV4dCA9IE5VTEw7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjgwMzpcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MDQtXFx0XFx0c2VncyA9IG5leHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU4OjE1LjM1MDQ4NTYxNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU0MDQ1NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhTUiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGhzcl9mb3J3YXJkX3NrYmAgaXMgaW5kZWVkIHByZXNlbnQgaW4gdGhpcyBjb2RlLiBFeGNlbGxlbnQuIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkb2luZyBzb21ldGhpbmcgc2lnbmlmaWNhbnQ6IGl0J3MgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIGRyaXZlciBhbmQgdGhlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIHRvIG1hbmFnZSBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBvbiB0aG9zZSBlbnNsYXZlZCBkZXZpY2VzLiBJdCdzIGFsc28gZGVhbGluZyB3aXRoIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgc3VwZXItcGFja2V0cyBzcGVjaWZpY2FsbHkgaW4gdGhlIEhTUiBmb3J3YXJkaW5nIHBhdGguXG5cblRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBcImZ1enppbmcgb3Bwb3J0dW5pdHlcIiB0byBtZS4gVGhlIGludHJvZHVjdGlvbiBvZiBuZXcgYmVoYXZpb3JzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG9mZmxvYWQgbWVjaGFuaXNtcyBhbmQgcGFja2V0IGhhbmRsaW5nLCBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIHVuY292ZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGVkZ2UgY2FzZXMuXG5cbkknbGwgd2FudCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIGZvbGxvd2luZyBrZXkgc3ltYm9sczogYGRldl9kaXNhYmxlX2dyb2AsIGBuZXRpZl9kaXNhYmxlX2dyb2AsIGFuZCwgb2YgY291cnNlLCB0aGUgY2VudHJhbCBgaHNyX2ZvcndhcmRfc2tiYCBmdW5jdGlvbi4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCB0b3VjaHBvaW50cyB3aGVyZSB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZC5cblxuR2l2ZW4gdGhhdCB0aGUgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gdGhlIGBIU1JgIGNvbmZpZywgSSBjYW4gZWFzaWx5IHRlc3QgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5NjgsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU4OjE5LjgwNDUzNTQ5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzc2OTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiLFxuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgYW5kIGNvcmUgbmV0d29ya2luZyB0byBkaXNhYmxlIEdSTyBvbiBlbnNsYXZlZCBkZXZpY2VzIGFuZCBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgaW4gSFNSIGZvcndhcmRpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgICBcIm5ldGlmX2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIGRyaXZlciBhbmQgY29yZSBuZXR3b3JraW5nIHRvIGRpc2FibGUgR1JPIG9uIGVuc2xhdmVkIGRldmljZXMgYW5kIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBpbiBIU1IgZm9yd2FyZGluZy4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 05:39:28 +0000 UTC FinishedAt: 2026-07-26 05:58:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ba712ecfd942b68b21a4b0a5daaf72f6616cc66d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "ba712ecfd942b68b21a4b0a5daaf72f6616cc66d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "290cbf0a-0bd9-46e3-b7fe-b5abc607cef4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dev_disable_gro", "netif_disable_gro", "hsr_forward_skb" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgYW5kIGNvcmUgbmV0d29ya2luZyB0byBkaXNhYmxlIEdSTyBvbiBlbnNsYXZlZCBkZXZpY2VzIGFuZCBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgaW4gSFNSIGZvcndhcmRpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI5ODRhMDBmN2FiMDc1NmE2MTFjZGVkMTcxOWRmZGNmMWU4MWRlYzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwNTo1Nzo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmViYTJjMjZhNDliYThmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlMS4uYTZjZjJhZGM4NjI1NjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xODQwLDYgJiM0MzsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XG4mIzQzO1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiAoTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVykpKVxuJiM0MztcdFx0bmV0ZGV2X1dBUk4oZGV2LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBHUk8hXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikge1xuJiM0MztcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XG4mIzQzO1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICpcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcbiAgKlx0QGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5pbmRleCA0Mzc5NDdkZDA4ZWQ1My4uMDJmYjIxNjI5NTEyODQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuQEAgLTI2OSw2ICYjNDM7MjY5LDIyIEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuJiM0MzsgKiBAZGV2OiBkZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlXG4mIzQzOyAqIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWQgcGFja2V0cyBtYXkgYmVcbiYjNDM7ICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4mIzQzO1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4mIzQzO1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4yNDhjYmIxNDJlMjFlMSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICYjNDM7MjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2ItXHUwMDNlZGV2ID0gbWFzdGVyLVx1MDAzZWRldjtcbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbkBAIC0zMzUsNiAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgJiM0MzszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuQEAgLTM5MCw2ICYjNDM7Mzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICYjNDM7MzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gfVxuIFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cbkBAIC02NTksNyAmIzQzOzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbiYjNDM7XHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtoc3JfbWFpbi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aHNyX2ZyYW1lcmVnLmhcJiMzNDtcbiBcbkBAIC02MjEsOSAmIzQzOzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbiBcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuIFx0XHQvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqL1xuLVx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGZyYW1lLVx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVx1MDAzZXNlcXVlbmNlX25yO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuJiM0MztzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiB7XG4gXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XG4gXG5AQCAtNzYwLDMgJiM0Mzs3NjIsNTAgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFx0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG4mIzQzO1xuJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuJiM0MzsgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbiYjNDM7XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxuJiM0MztcdCAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZVxuJiM0MztcdCAqIGludGVybGluay4gQSBzdXBlci1wYWNrZXQgZnJvbSBhIExBTiBzbGF2ZSBtYXkgY2FycnkgcGVyLWZyYW1lXG4mIzQzO1x0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxuJiM0MztcdCAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzXG4mIzQzO1x0ICogcGVyLWZyYW1lIHdpcmUgc2VtYW50aWNzLiBEcm9wIGJvdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfTUFTVEVSIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXR5cGUgIT0gSFNSX1BUX0lOVEVSTElOSylcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XG4mIzQzO1x0ICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9QUlApKVxuJiM0MztcdFx0Z290byBkcm9wX2dzbztcbiYjNDM7XG4mIzQzO1x0LyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWVcbiYjNDM7XHQgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbVxuJiM0MztcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xuJiM0MztcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuJiM0MztcdFx0Z290byBkcm9wX2dzbztcbiYjNDM7XG4mIzQzO1x0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHR3aGlsZSAoc2Vncykge1xuJiM0MztcdFx0bmV4dCA9IHNlZ3MtXHUwMDNlbmV4dDtcbiYjNDM7XHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xuJiM0MztcdFx0c2VncyA9IG5leHQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2Ryb3BfZ3NvOlxuJiM0MztcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdGtmcmVlX3NrYihza2IpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX3NsYXZlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbkBAIC03MywxNiAmIzQzOzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHR9XG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFxuLVx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcbi1cdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxuLVx0ICovXG4tXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0fVxuJiM0MztcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuIFxuIGZpbmlzaF9jb25zdW1lOlxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG5AQCAtMTcwLDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHJlcylcbiBcdFx0Z290byBmYWlsX3J4X2hhbmRsZXI7XG4gXHRkZXZfZGlzYWJsZV9scm8oZGV2KTtcbiYjNDM7XHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMGQxMDU0NzZlN2M1MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuJiM0MztcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40Y2EyYTdmMzk1ZWJkMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5AQCAtMCwwICYjNDM7MSw0MzcgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVGVzdCBIU1IgaGFuZGxpbmcgb2YgR1JPL0dTTyBzdXBlci1wYWNrZXRzOlxuJiM0MzsjXG4mIzQzOyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuJiM0MzsjICAgICAoZGV2X2Rpc2FibGVfZ3JvKCkpLlxuJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy5cbiYjNDM7IyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbiYjNDM7IyAgICAgc3VwZXItcGFja2V0cykgaXMgdW5mb2xkZWQgYXQgdGhlIEhTUiBmb3J3YXJkIGVudHJ5LiBFdmlkZW5jZTpcbiYjNDM7IyAgICAgaW50ZXJmYWNlLWNvdW50ZXIgZGVsdGFzIHNob3cgc3VwZXItcGFja2V0LXNpemVkIGZyYW1lcyBsZWF2aW5nXG4mIzQzOyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCYjMzk7cyBMQU4gcG9ydHMuXG4mIzQzOyNcbiYjNDM7IyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4mIzQzOyNcbiYjNDM7IyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcbiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICBpbnRlcmxpbmsgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgIExBTiBBL0IgICYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118XG4mIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgICAgICAgICAgICB8IGRfYSAvIGRfYiAgICAgfCAgICAgICAgICAgfCBwX2EgLyBwX2IgfFxuJiM0MzsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsjXG4mIzQzOyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJiMzOTtzIGZvcndhcmQgcGF0aFxuJiM0MzsjIChpbnRlcmxpbmsgUlggLVx1MDAzZSBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmRcbiYjNDM7IyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cbiYjNDM7XG4mIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2hcbiYjNDM7XG4mIzQzO25zX2R1dD1cJiMzNDtoc3ItZ3JvLWR1dFwmIzM0O1xuJiM0Mztuc19zYW49XCYjMzQ7aHNyLWdyby1zYW5cJiMzNDtcbiYjNDM7bnNfcGVlcj1cJiMzNDtoc3ItZ3JvLXBlZXJcJiMzNDtcbiYjNDM7c2FuX2lwPVwmIzM0OzEwMC42NC4wLjFcJiMzNDtcbiYjNDM7cGVlcl9pcD1cJiMzNDsxMDAuNjQuMC4zXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIEFnZ3JlZ2F0ZSBjb3VudGVyIHRocmVzaG9sZHMgZm9yIHRoZSBzdHJlYW0gdGVzdCAoYnl0ZXMvcGFja2V0cyk6XG4mIzQzOyMgU0FOX0FWR19NSU4gcHJvdmVzIEdTTyBzdXBlci1wYWNrZXRzIGxlZnQgdGhlIFNBTjsgTEFOX0FWR19NQVggaXMgYVxuJiM0MzsjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLlxuJiM0MztTQU5fQVZHX01JTj0yMDQ4XG4mIzQzO0xBTl9BVkdfTUFYPTE1MTRcbiYjNDM7XG4mIzQzO2lwZXJmX3BpZD1cJiMzNDtcJiMzNDtcbiYjNDM7c2VydmVyX3dyYXBwZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO3dvcmtkaXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO3BpZGZpbGU9XCYjMzQ7XCYjMzQ7XG4mIzQzO3JjZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzO2NsZWFudXAoKVxuJiM0Mzt7XG4mIzQzO1x0IyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkcyBhZ2FpbnN0XG4mIzQzO1x0IyBQSUQgcmV1c2UgYmV0d2VlbiBwdWJsaWNhdGlvbiBhbmQgY2xlYW51cClcbiYjNDM7XHRpZiBbIC1uIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiB2YWxpZF9zZXJ2ZXJfcGlkIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OzsgdGhlblxuJiM0MztcdFx0a2lsbCBcJiMzNDske2lwZXJmX3BpZH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGZpXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhXG4mIzQzO1x0XHQjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwXG4mIzQzO1x0XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFx0a2lsbCAtMCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXG4mIzQzO1x0XHRcdHNsZWVwIDAuMVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdFx0a2lsbCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0XHR3YWl0IFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMgcHJvY2Vzc2VzIHRoYXRcbiYjNDM7XHQjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMsIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlblxuJiM0MztcdCMgU0lHS0lMTCBhbnkgc3Vydml2b3IgYmVmb3JlIHRvdWNoaW5nIHRoZSBuYW1lc3BhY2UgbmFtZS4gQSBibGluZFxuJiM0MztcdCMgcGtpbGwgd291bGQgc2NhbiB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXG4mIzQzO1x0bG9jYWwgX3AgX3N0aWxsXG4mIzQzO1x0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcJiMzNDskbnNfcGVlclwmIzM0OyAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JChjYXQgL3Byb2MvXCYjMzQ7JF9wXCYjMzQ7L2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcJiMzNDsgPSBcJiMzNDtpcGVyZjNcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0XHRraWxsIFwmIzM0OyRfcFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0XHRmaVxuJiM0MztcdGRvbmVcbiYjNDM7XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdF9zdGlsbD0wXG4mIzQzO1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyRuc19wZWVyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpOyBkb1xuJiM0MztcdFx0XHRpZiBbIFwmIzM0OyQoY2F0IC9wcm9jL1wmIzM0OyRfcFwmIzM0Oy9jb21tIDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7ID0gXCYjMzQ7aXBlcmYzXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFx0XHRfc3RpbGw9MVxuJiM0MztcdFx0XHRcdGJyZWFrXG4mIzQzO1x0XHRcdGZpXG4mIzQzO1x0XHRkb25lXG4mIzQzO1x0XHRbIFwmIzM0OyRfc3RpbGxcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRcdHNsZWVwIDAuMVxuJiM0MztcdGRvbmVcbiYjNDM7XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyRuc19wZWVyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpOyBkb1xuJiM0MztcdFx0aWYgWyBcJiMzNDskKGNhdCAvcHJvYy9cJiMzNDskX3BcJiMzNDsvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwmIzM0OyA9IFwmIzM0O2lwZXJmM1wmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRcdGtpbGwgLTkgXCYjMzQ7JF9wXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdGZpXG4mIzQzO1x0ZG9uZVxuJiM0MztcdCMgcmVtb3ZlIG9ubHkgdGhlIGtub3duIG5vbi1lbXB0eSBwcml2YXRlIGRpcmVjdG9yeVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHt3b3JrZGlyfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBbIC1kIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0cm0gLXJmIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDtcbiYjNDM7XHRmaVxuJiM0MztcdHdvcmtkaXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0cGlkZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7XHRyY2ZpbGU9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0aXAgbmV0bnMgZGVsIFwmIzM0OyRuc19kdXRcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdGlwIG5ldG5zIGRlbCBcJiMzNDskbnNfc2FuXCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRpcCBuZXRucyBkZWwgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7Y2hlY2tfdG9vbCgpXG4mIzQzO3tcbiYjNDM7XHRpZiAhIGNvbW1hbmQgLXYgXCYjMzQ7JDFcJiMzNDsgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwmIzM0O1xuJiM0MztcdFx0ZXhpdCAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7bnN4KClcbiYjNDM7e1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JDFcJiMzNDsgYmFzaCAtYyBcJiMzNDskMlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF90b3BvKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zXG4mIzQzO1xuJiM0MztcdGNsZWFudXBcbiYjNDM7XHRmb3IgbnMgaW4gXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0OyRuc19wZWVyXCYjMzQ7OyBkb1xuJiM0MztcdFx0aXAgbmV0bnMgYWRkIFwmIzM0OyRuc1wmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9hIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgXCYjMzQ7JG5zX3BlZXJcJiMzNDtcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX2IgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcJiMzNDskbnNfcGVlclwmIzM0O1xuJiM0MztcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFwmIzM0OyRuc19zYW5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxuJiM0MztcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xuJiM0MztcdFx0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO1x0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXG4mIzQzO1x0XHRuc3ggXCYjMzQ7JG5zX3BlZXJcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0IGRfaWwgdXBcJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczBcJiMzNDtcbiYjNDM7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxuJiM0MztcdFx0c2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFxcXG4mIzQzO1x0XHRpcCBsaW5rIHNldCBoc3IwIHVwXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19wZWVyXCYjMzQ7IFwmIzM0O2lwIGxpbmsgYWRkIGhzcjEgdHlwZSBoc3IgXFxcbiYjNDM7XHRcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxuJiM0MztcdFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJiMzOTtzIHN1cGVydmlzaW9uIGZyYW1lcy5cbiYjNDM7XHRzbGVlcCAyXG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoZWNrX2ZlYXR1cmUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBpZmFjZT1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXR1cmU9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XHRsb2NhbCB3YW50PVwmIzM0OyQ0XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7ZXRodG9vbCAtayAkaWZhY2VcJiMzNDsgfCBncmVwIC1xIFwmIzM0O14kZmVhdHVyZTogJHdhbnRcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXG4mIzQzOyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC5cbiYjNDM7Y2hlY2tfZmVhdHVyZV9ub3Rfb24oKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBpZmFjZT1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXR1cmU9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgbnN4IFwmIzM0OyRuc1wmIzM0OyBcJiMzNDtldGh0b29sIC1rICRpZmFjZVwmIzM0OyB8IGdyZXAgLXEgXCYjMzQ7XiRmZWF0dXJlOiBvblwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcbiYjNDM7e1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7R1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwmIzM0O1xuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0hXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC10Y3A2LXNlZ21lbnRhdGlvblxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC11ZHAtc2VnbWVudGF0aW9uXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIHR4LWdzby1saXN0XG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy5cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7YWxsb2Nfd29ya2RpcigpXG4mIzQzO3tcbiYjNDM7XHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cbiYjNDM7XHQjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZVxuJiM0MztcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cbiYjNDM7XHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBta3RlbXAgLWQgZmFpbGVkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IDFcbiYjNDM7XHR9XG4mIzQzO1x0Y2htb2QgNzAwIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDtcbiYjNDM7XHRwaWRmaWxlPVwmIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkXCYjMzQ7XG4mIzQzO1x0cmNmaWxlPVwmIzM0OyR7d29ya2Rpcn0vaXBlcmYucmNcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIHBlZXIgbmV0bnMuXG4mIzQzO3ZhbGlkX3NlcnZlcl9waWQoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgcD1cJiMzNDskMVwmIzM0O1xuJiM0MztcbiYjNDM7XHRbWyBcJiMzNDskcFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgcmV0dXJuIDFcbiYjNDM7XHRraWxsIC0wIFwmIzM0OyRwXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcbiYjNDM7XHRbIFwmIzM0OyQoY2F0IC9wcm9jL1wmIzM0OyRwXCYjMzQ7L2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcJiMzNDsgPSBcJiMzNDtpcGVyZjNcJiMzNDsgXSB8fCByZXR1cm4gMVxuJiM0MztcdGlwIG5ldG5zIHBpZHMgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFwmIzM0OyRwXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4mIzQzO1xuJiM0MztcdCMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHNcbiYjNDM7XHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuJiM0MztcdGFsbG9jX3dvcmtkaXJcbiYjNDM7XHQoIG5zeCBcJiMzNDskbnNfcGVlclwmIzM0OyBcJiMzNDtpcGVyZjMgLXMgLTEgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjYgXFxcbiYjNDM7XHRcdGVjaG8gXFwkISBcdTAwM2UgJHtwaWRmaWxlfTsgXFxcbiYjNDM7XHRcdHdhaXQgXFwkITsgXFxcbiYjNDM7XHRcdGVjaG8gXFwkPyBcdTAwM2UgJHtyY2ZpbGV9XCYjMzQ7ICkgXHUwMDI2XG4mIzQzO1x0c2VydmVyX3dyYXBwZXI9JCFcbiYjNDM7XHQjIHRoZSB3cmFwcGVyIHdyaXRlcyB0aGUgcGlkZmlsZSBhc3luY2hyb25vdXNseTsgd2FpdCBmb3IgaXQgdG9cbiYjNDM7XHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuJiM0MztcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuJiM0MztcdFx0WyAtcyBcJiMzNDske3BpZGZpbGV9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4mIzQzO1x0XHRzbGVlcCAwLjFcbiYjNDM7XHRkb25lXG4mIzQzO1x0aWYgWyAhIC1zIFwmIzM0OyR7cGlkZmlsZX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgcHVibGlzaCBhIHBpZCAobm8gcGlkZmlsZSlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0Y2FuZGlkYXRlX3BpZD0kKFx1MDAzY1wmIzM0OyR7cGlkZmlsZX1cJiMzNDspXG4mIzQzO1x0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2NhbmRpZGF0ZV9waWR9JiMzOTsgZmFpbGVkIHZhbGlkYXRpb25cJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDtcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBQcmludCBcJiMzNDtcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCYjMzQ7IGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC5cbiYjNDM7cmVhZF90eF9jb3VudGVycygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz1cJiMzNDskMVwmIzM0OyBkZXY9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBvdXQgY250XG4mIzQzO1xuJiM0MztcdG91dD0kKG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7aXAgLXMgbGluayBzaG93ICRkZXZcJiMzNDsgfCBcXFxuJiM0MztcdFx0YXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OylcbiYjNDM7XHRjbnQ9JChlY2hvIFwmIzM0OyRvdXRcJiMzNDsgfCBncmVwIC1jICYjMzk7XlswLTldKiBbMC05XSokJiMzOTspXG4mIzQzO1x0aWYgWyBcJiMzNDskY250XCYjMzQ7IC1uZSAxIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2IChyZWNvcmRzPSRjbnQpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGVjaG8gXCYjMzQ7JG91dFwmIzM0O1xuJiM0MztcdHJldHVybiAwXG4mIzQzO31cbiYjNDM7XG4mIzQzO2V2YWxfY291bnRlcl9kZWx0YSgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBuYW1lPVwmIzM0OyQxXCYjMzQ7IGIwPVwmIzM0OyQyXCYjMzQ7IHAwPVwmIzM0OyQzXCYjMzQ7IGIxPVwmIzM0OyQ0XCYjMzQ7IHAxPVwmIzM0OyQ1XCYjMzQ7IG9wPVwmIzM0OyQ2XCYjMzQ7IGxpbWl0PVwmIzM0OyQ3XCYjMzQ7XG4mIzQzO1x0bG9jYWwgYmQgcGRcbiYjNDM7XG4mIzQzO1x0aWYgISBbWyBcJiMzNDskYjBcJiMzNDsgPX4gXlswLTldJiM0MzskIFx1MDAyNlx1MDAyNiBcJiMzNDskYjFcJiMzNDsgPX4gXlswLTldJiM0MzskIFx1MDAyNlx1MDAyNiBcXFxuJiM0MztcdFx0XCYjMzQ7JHAwXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBcdTAwMjZcdTAwMjYgXCYjMzQ7JHAxXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRiZD0kKChiMSAtIGIwKSlcbiYjNDM7XHRwZD0kKChwMSAtIHAwKSlcbiYjNDM7XHRpZiBbIFwmIzM0OyRiZFwmIzM0OyAtbHQgMCBdIHx8IFsgXCYjMzQ7JHBkXCYjMzQ7IC1sZSAwIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZSAoYnl0ZXM9JGJkIHBrdHM9JHBkKVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRpZiBbIFwmIzM0OyRvcFwmIzM0OyA9IFwmIzM0O2d0XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JGJkXCYjMzQ7IC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2M9ICRsaW1pdFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0XHRyZXQ9MVxuJiM0MztcdFx0XHRyZXR1cm4gMVxuJiM0MztcdFx0ZmlcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRpZiBbIFwmIzM0OyRiZFwmIzM0OyAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cbiYjNDM7XHRcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNlICRsaW1pdFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0XHRyZXQ9MVxuJiM0MztcdFx0XHRyZXR1cm4gMVxuJiM0MztcdFx0ZmlcbiYjNDM7XHRmaVxuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogJG5hbWUgY291bnRlciBkZWx0YSBieXRlcz0kYmQgcGFja2V0cz0kcGRcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0OyhvcCAkb3AgbGltaXQgJGxpbWl0KSBbIE9LIF1cJiMzNDtcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuJiM0Mztkb190c29fc3RyZWFtX3Rlc3QoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgb3V0IHNlbmRlcl9yZXRyIHNlcnZlcl9yY1xuJiM0MztcdGxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMVxuJiM0MztcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMVxuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvblxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7Q291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogUnVubmluZyAxMHMgVENQIHN0cmVhbSBTQU4gLVx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuXCYjMzQ7XG4mIzQzO1x0c3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHQjIENvdW50ZXIgc25hcHNob3RzIGFyb3VuZCB0aGUgc3RyZWFtIHdpbmRvdy4gVGhlIFNBTi1zaWRlIGF2ZXJhZ2VcbiYjNDM7XHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xuJiM0MztcdCMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYXG4mIzQzO1x0IyAoYWdncmVnYXRlIHByb29mIHRoYXQgYnVsayBvdXRwdXQgd2FzIHNlZ21lbnRlZCBwZXItZnJhbWUpLiBUaGVzZVxuJiM0MztcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXG4mIzQzO1x0c2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTBcbiYjNDM7XHRyZWFkIC1yIHNhbl9iMCBzYW5fcDAgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGFfYjAgYV9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9hKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGJfYjAgYl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iKVxuJiM0MztFT0ZcbiYjNDM7XHRbIFwmIzM0OyR7cmV0Oi0wfVwmIzM0OyAtZXEgMCBdIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHQjIHJhdGUtY2FwcGVkOiB0aGUgUFJJTUFSWSBkaXNjcmltaW5hdG9yIGlzIHRoZSBjb3VudGVyIGluZXF1YWxpdHlcbiYjNDM7XHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXG4mIzQzO1x0IyBVbmNhcHBlZCBydW5zIGZsYXAgYXQgVk0vQ0kgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYVxuJiM0MztcdCMgZnVuY3Rpb25hbCBwcm9ibGVtLlxuJiM0MztcdGlmICEgb3V0PSQobnN4IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxuJiM0MztcdFx0LWIgMkcgLXQgMTBcJiMzNDsgMlx1MDAzZVx1MDAyNjEpOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOlwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0cmVhZCAtciBzYW5fYjEgc2FuX3AxIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX3NhblwmIzM0OyBzMClcbiYjNDM7RU9GXG4mIzQzO1x0cmVhZCAtciBhX2IxIGFfcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYSlcbiYjNDM7RU9GXG4mIzQzO1x0cmVhZCAtciBiX2IxIGJfcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYilcbiYjNDM7RU9GXG4mIzQzO1xuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtTQU4gczAgVFhcJiMzNDsgXCYjMzQ7JHNhbl9iMFwmIzM0OyBcJiMzNDskc2FuX3AwXCYjMzQ7IFwmIzM0OyRzYW5fYjFcJiMzNDsgXCYjMzQ7JHNhbl9wMVwmIzM0OyBcXFxuJiM0MztcdFx0Z3QgXCYjMzQ7JFNBTl9BVkdfTUlOXCYjMzQ7XG4mIzQzO1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwmIzM0O0RVVCBkX2EgVFhcJiMzNDsgXCYjMzQ7JGFfYjBcJiMzNDsgXCYjMzQ7JGFfcDBcJiMzNDsgXCYjMzQ7JGFfYjFcJiMzNDsgXCYjMzQ7JGFfcDFcJiMzNDsgXFxcbiYjNDM7XHRcdGxlIFwmIzM0OyRMQU5fQVZHX01BWFwmIzM0O1xuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtEVVQgZF9iIFRYXCYjMzQ7IFwmIzM0OyRiX2IwXCYjMzQ7IFwmIzM0OyRiX3AwXCYjMzQ7IFwmIzM0OyRiX2IxXCYjMzQ7IFwmIzM0OyRiX3AxXCYjMzQ7IFxcXG4mIzQzO1x0XHRsZSBcJiMzNDskTEFOX0FWR19NQVhcJiMzNDtcbiYjNDM7XHRbIFwmIzM0OyR7cmV0Oi0wfVwmIzM0OyAtZXEgMCBdIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHQjIHN1Y2Nlc3MgcGF0aDogdGhlIG9uZS1zaG90IHNlcnZlciBleGl0cyBieSBpdHNlbGY7IHJlYXAgdGhlXG4mIzQzO1x0IyB3cmFwcGVyLCB0aGVuIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIHRoZSBzZXJ2ZXImIzM5O3MgcmVhbCBzdGF0dXNcbiYjNDM7XHR3YWl0IFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7XG4mIzQzO1x0c2VydmVyX3dyYXBwZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0aWYgWyAhIC1zIFwmIzM0OyR7cmNmaWxlfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0c2VydmVyX3JjPSQoY2F0IFwmIzM0OyR7cmNmaWxlfVwmIzM0OylcbiYjNDM7XHRpZiAhIFtbIFwmIzM0OyRzZXJ2ZXJfcmNcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgXCYjMzQ7JHNlcnZlcl9yY1wmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5O1wmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7XHQjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUXG4mIzQzO1x0IyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyXG4mIzQzO1x0IyBnYXRlcyAodGhlIGNvdW50ZXIgaW5lcXVhbGl0aWVzIGFib3ZlIGFyZSB0aGUgcHJpbWFyeSBldmlkZW5jZSkuXG4mIzQzO1x0c2VuZGVyX3JldHI9JChlY2hvIFwmIzM0OyRvdXRcJiMzNDsgfCBhd2sgJiMzOTsvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfSYjMzk7KVxuJiM0MztcdGlmIFsgXCYjMzQ7JChlY2hvIFwmIzM0OyRzZW5kZXJfcmV0clwmIzM0OyB8IGdyZXAgLUVjICYjMzk7XlswLTldJiM0MzskJiMzOTspXCYjMzQ7IC1uZSAxIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseVwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IFRDUCBzdHJlYW0gZG9uZTtcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0O3NlbmRlciByZXRyYW5zbWl0cz0kc2VuZGVyX3JldHIgKHNlY29uZGFyeSBzaWduYWwpXCYjMzQ7XG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgZ3JlcCAtRSBcJiMzNDtzZW5kZXJ8cmVjZWl2ZXJcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlc1xuJiM0MztjaGVja190b29sIGV0aHRvb2xcbiYjNDM7Y2hlY2tfdG9vbCBpcGVyZjNcbiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0XG4mIzQzO1xuJiM0MzsjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXG4mIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGV4aXQgJGtzZnRfc2tpcFxuJiM0MztmaVxuJiM0MztcbiYjNDM7c2V0dXBfdG9wb1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBEVVQpLlwmIzM0O1xuJiM0Mztkb19waW5nIFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7JHBlZXJfaXBcJiMzNDtcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtJbml0aWFsIHZhbGlkYXRpb24gZmFpbGVkLlwmIzM0O1xuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXG4mIzQzO2RvX3Rzb19zdHJlYW1fdGVzdFxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O0dTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlwmIzM0O1xuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDtJTkZPOiBBbGwgZ29vZC5cJiMzNDtcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgYW5kIGNvcmUgbmV0d29ya2luZyB0byBkaXNhYmxlIEdSTyBvbiBlbnNsYXZlZCBkZXZpY2VzIGFuZCBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgaW4gSFNSIGZvcndhcmRpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI5ODRhMDBmN2FiMDc1NmE2MTFjZGVkMTcxOWRmZGNmMWU4MWRlYzUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAwNTo1Nzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5lYmEyYzI2YTQ5YmE4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0zNDM0LDYgJiM0MzszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspOwogdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpOwogdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNTkzM2M1ZGFiMDllZTEuLmE2Y2YyYWRjODYyNTY1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg0MCw2ICYjNDM7MTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJfQogfQogCiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsKJiM0MzsJZGV2LSZndDt3YW50ZWRfZmVhdHVyZXMgJmFtcDs9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7CiYjNDM7CW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSkKJiM0MzsJCW5ldGRldl9XQVJOKGRldiwgJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBHUk8hXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CW5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHsKJiM0MzsJCW5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpOwomIzQzOwkJbmV0aWZfZGlzYWJsZV9ncm8obG93ZXJfZGV2KTsKJiM0MzsJCW5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqCWRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2UKICAqCUBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jCmluZGV4IDQzNzk0N2RkMDhlZDUzLi4wMmZiMjE2Mjk1MTI4NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuYwpAQCAtMjY5LDYgJiM0MzsyNjksMjIgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTsKIAomIzQzOy8qKgomIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQomIzQzOyAqIEBkZXY6IGRldmljZQomIzQzOyAqCiYjNDM7ICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlCiYjNDM7ICogY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZCBwYWNrZXRzIG1heSBiZQomIzQzOyAqIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJbmV0ZGV2X2xvY2tfb3BzKGRldik7CiYjNDM7CW5ldGlmX2Rpc2FibGVfZ3JvKGRldik7CiYjNDM7CW5ldGRldl91bmxvY2tfb3BzKGRldik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTsKJiM0MzsKIC8qKgogICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlCiAgKiBAZGV2OiBkZXZpY2UKZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmMKaW5kZXggNTU1NWI3MWFiMTliNTkuLjI0OGNiYjE0MmUyMWUxIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMjMyLDkgJiM0MzsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXNrYi0mZ3Q7ZGV2ID0gbWFzdGVyLSZndDtkZXY7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9IGVsc2UgewogCQlkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJCWhzcl9zdGFnLSZndDtzZXF1ZW5jZV9uciA9IGh0b25zKGhzci0mZ3Q7c2VxdWVuY2VfbnIpOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gdHlwZTsKIAkvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqLwpAQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKIAl9CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzdXBfc2VxdWVuY2VfbnIpOwogCWhzci0mZ3Q7c3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7CiAKQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKIAloc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTsKIAlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIG1hc3Rlci0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiB9CiAKIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24KQEAgLTY1OSw3ICYjNDM7NjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiAKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkJICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8CiYjNDM7CQkJICAgTkVUSUZfRl9IV19DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTY0Li4zZmNkYmFjNDljNTlkYSAxMDA2NDQKLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuYwpAQCAtMTIsNiAmIzQzOzEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2dzby5oJmd0OwogI2luY2x1ZGUgJiMzNDtoc3JfbWFpbi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aHNyX2ZyYW1lcmVnLmgmIzM0OwogCkBAIC02MjEsOSAmIzQzOzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUiB8fAogCSAgICBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHsKIAkJLyogU2VxdWVuY2UgbnIgZm9yIHRoZSBtYXN0ZXIvaW50ZXJsaW5rIG5vZGUgKi8KLQkJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCQlmcmFtZS0mZ3Q7c2VxdWVuY2VfbnIgPSBoc3ItJmd0O3NlcXVlbmNlX25yOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9CiB9CiAKQEAgLTczMSw3ICYjNDM7NzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi8KLXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0MztzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7CiAKQEAgLTc2MCwzICYjNDM7NzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIAlwb3J0LSZndDtkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwogCWtmcmVlX3NrYihza2IpOwogfQomIzQzOwomIzQzOy8qIEdTTyBmYW4tb3V0IGZ1bm5lbDogdW5mb2xkIHN1cGVyLXBhY2tldHMgYmVmb3JlIHBlci1mcmFtZSBwcm9jZXNzaW5nIHNvCiYjNDM7ICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLgomIzQzOyAqLwomIzQzO3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkgewomIzQzOwkJaHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZAomIzQzOwkgKiBvbiB0aGUgbWFzdGVyLCBvciBhcnJpdmluZyB1bnRhZ2dlZCBmcm9tIHRoZSBTQU4gc2lkZSBvbiB0aGUKJiM0MzsJICogaW50ZXJsaW5rLiBBIHN1cGVyLXBhY2tldCBmcm9tIGEgTEFOIHNsYXZlIG1heSBjYXJyeSBwZXItZnJhbWUKJiM0MzsJICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdAomIzQzOwkgKiByZWNvdmVyOyBhbiBhbHJlYWR5LXRhZ2dlZCBIU1IvUFJQIHN1cGVyLXBhY2tldCB2aW9sYXRlcwomIzQzOwkgKiBwZXItZnJhbWUgd2lyZSBzZW1hbnRpY3MuIERyb3AgYm90aC4KJiM0MzsJICovCiYjNDM7CWlmIChwb3J0LSZndDt0eXBlICE9IEhTUl9QVF9NQVNURVIgJmFtcDsmYW1wOyBwb3J0LSZndDt0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspCiYjNDM7CQlnb3RvIGRyb3BfZ3NvOwomIzQzOwlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8CiYjNDM7CSAgICBza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX1BSUCkpCiYjNDM7CQlnb3RvIGRyb3BfZ3NvOwomIzQzOwomIzQzOwkvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZQomIzQzOwkgKiBvbmx5IGZvciBsb2NhbGx5IGdlbmVyYXRlZCB0cmFmZmljIG9uIHRoZSBtYXN0ZXI7IGluZ3Jlc3MgZnJvbQomIzQzOwkgKiB0aGUgaW50ZXJsaW5rIGZvbGxvd3MgUlggY2hlY2tzdW0gc2VtYW50aWNzLgomIzQzOwkgKi8KJiM0MzsJc2VncyA9IF9fc2tiX2dzb19zZWdtZW50KHNrYiwgMCwgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfTUFTVEVSKTsKJiM0MzsJaWYgKElTX0VSUihzZWdzKSB8fCB1bmxpa2VseSghc2VncykpCiYjNDM7CQlnb3RvIGRyb3BfZ3NvOwomIzQzOwomIzQzOwljb25zdW1lX3NrYihza2IpOwomIzQzOwl3aGlsZSAoc2VncykgewomIzQzOwkJbmV4dCA9IHNlZ3MtJmd0O25leHQ7CiYjNDM7CQlzZWdzLSZndDtuZXh0ID0gTlVMTDsKJiM0MzsJCWhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7CiYjNDM7CQlzZWdzID0gbmV4dDsKJiM0MzsJfQomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7ZHJvcF9nc286CiYjNDM7CXBvcnQtJmd0O2Rldi0mZ3Q7c3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzO30KZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jCmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDQKLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jCkBAIC03MywxNiAmIzQzOzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCiAJfQogCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7CiAKLQkvKiBPbmx5IHRoZSBmcmFtZXMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJsaW5rIHBvcnQgd2lsbCBhc3NpZ24gYQotCSAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLgotCSAqLwotCWlmIChwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHsKLQkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKLQkJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKLQl9IGVsc2UgewotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQl9CiYjNDM7CWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwogCiBmaW5pc2hfY29uc3VtZToKIAlyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDsKQEAgLTE3MCw2ICYjNDM7MTYxLDcgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAocmVzKQogCQlnb3RvIGZhaWxfcnhfaGFuZGxlcjsKIAlkZXZfZGlzYWJsZV9scm8oZGV2KTsKJiM0MzsJZGV2X2Rpc2FibGVfZ3JvKGRldik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzM2QuLjBkMTA1NDc2ZTdjNTBkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsNyBAQAogdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uCiAKIFRFU1RfUFJPR1MgOj0gXAomIzQzOwloc3JfZ3JvX3N1cGVycGFja2V0LnNoIFwKIAloc3JfcGluZy5zaCBcCiAJaHNyX3JlZGJveC5zaCBcCiAJbGlua19mYXVsdHMuc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40Y2EyYTdmMzk1ZWJkMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaApAQCAtMCwwICYjNDM7MSw0MzcgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6CiYjNDM7IwomIzQzOyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdAomIzQzOyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuCiYjNDM7IyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuCiYjNDM7IyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU08KJiM0MzsjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkuIEV2aWRlbmNlOgomIzQzOyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZwomIzQzOyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCYjMzk7cyBMQU4gcG9ydHMuCiYjNDM7IwomIzQzOyMgVG9wb2xvZ3kgKDEwMC42NC4wLjAvMjQpOgomIzQzOyMKJiM0MzsjICAgbnNfc2FuICAgICAgICAgICAgICAgICAgICBuc19kdXQgICAgICAgICAgICAgICAgICAgICAgbnNfcGVlcgomIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgaW50ZXJsaW5rICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICBMQU4gQS9CICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsKJiM0MzsjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118CiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8CiYjNDM7IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsKJiM0MzsjCiYjNDM7IyBTQU4gdHJhZmZpYyByZWFjaGVzIG5zX3BlZXIgb25seSB0aHJvdWdoIGhzcjAmIzM5O3MgZm9yd2FyZCBwYXRoCiYjNDM7IyAoaW50ZXJsaW5rIFJYIC0mZ3Q7IExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZAomIzQzOyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuCiYjNDM7CiYjNDM7c291cmNlIC4vaHNyX2NvbW1vbi5zaAomIzQzOwomIzQzO25zX2R1dD0mIzM0O2hzci1ncm8tZHV0JiMzNDsKJiM0Mztuc19zYW49JiMzNDtoc3ItZ3JvLXNhbiYjMzQ7CiYjNDM7bnNfcGVlcj0mIzM0O2hzci1ncm8tcGVlciYjMzQ7CiYjNDM7c2FuX2lwPSYjMzQ7MTAwLjY0LjAuMSYjMzQ7CiYjNDM7cGVlcl9pcD0mIzM0OzEwMC42NC4wLjMmIzM0OwomIzQzOwomIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKToKJiM0MzsjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGEKJiM0MzsjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLgomIzQzO1NBTl9BVkdfTUlOPTIwNDgKJiM0MztMQU5fQVZHX01BWD0xNTE0CiYjNDM7CiYjNDM7aXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MztzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7d29ya2Rpcj0mIzM0OyYjMzQ7CiYjNDM7cGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7cmNmaWxlPSYjMzQ7JiMzNDsKJiM0MzsKJiM0MztjbGVhbnVwKCkKJiM0Mzt7CiYjNDM7CSMgZXhhY3QtUElEIGtpbGwgb25seSBhZnRlciBSRS12YWxpZGF0aW5nIGlkZW50aXR5IChndWFyZHMgYWdhaW5zdAomIzQzOwkjIFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKQomIzQzOwlpZiBbIC1uICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgXSAmYW1wOyZhbXA7IHZhbGlkX3NlcnZlcl9waWQgJiMzNDske2lwZXJmX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJa2lsbCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWZpCiYjNDM7CWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CWlmIFsgLW4gJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IF07IHRoZW4KJiM0MzsJCSMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXMgYm91bmQgc28gYQomIzQzOwkJIyBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgY2xlYW51cAomIzQzOwkJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQkJa2lsbCAtMCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJCQlzbGVlcCAwLjEKJiM0MzsJCWRvbmUKJiM0MzsJCWtpbGwgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQl3YWl0ICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJc2VydmVyX3dyYXBwZXI9JiMzNDsmIzM0OwomIzQzOwlmaQomIzQzOwkjIGxhc3QgcmVzb3J0LCBuYW1lc3BhY2Utc2NvcGVkIG9ubHk6IFRFUk0gdGhlIGlwZXJmMyBwcm9jZXNzZXMgdGhhdAomIzQzOwkjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMsIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlbgomIzQzOwkjIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZSB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQKJiM0MzsJIyBwa2lsbCB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy4KJiM0MzsJbG9jYWwgX3AgX3N0aWxsCiYjNDM7CWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCWlmIFsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyRfcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF07IHRoZW4KJiM0MzsJCQlraWxsICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCWZpCiYjNDM7CWRvbmUKJiM0MzsJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQlfc3RpbGw9MAomIzQzOwkJZm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyAmIzM0OyRuc19wZWVyJiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIFsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyRfcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF07IHRoZW4KJiM0MzsJCQkJX3N0aWxsPTEKJiM0MzsJCQkJYnJlYWsKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwkJWyAmIzM0OyRfc3RpbGwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCWlmIFsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyRfcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF07IHRoZW4KJiM0MzsJCQlraWxsIC05ICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCWZpCiYjNDM7CWRvbmUKJiM0MzsJIyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5CiYjNDM7CWlmIFsgLW4gJiMzNDske3dvcmtkaXJ9JiMzNDsgXSAmYW1wOyZhbXA7IFsgLWQgJiMzNDske3dvcmtkaXJ9JiMzNDsgXTsgdGhlbgomIzQzOwkJcm0gLXJmICYjMzQ7JHt3b3JrZGlyfSYjMzQ7CiYjNDM7CWZpCiYjNDM7CXdvcmtkaXI9JiMzNDsmIzM0OwomIzQzOwlwaWRmaWxlPSYjMzQ7JiMzNDsKJiM0MzsJcmNmaWxlPSYjMzQ7JiMzNDsKJiM0MzsJaXAgbmV0bnMgZGVsICYjMzQ7JG5zX2R1dCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CWlwIG5ldG5zIGRlbCAmIzM0OyRuc19zYW4mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwlpcCBuZXRucyBkZWwgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Y2hlY2tfdG9vbCgpCiYjNDM7ewomIzQzOwlpZiAhIGNvbW1hbmQgLXYgJiMzNDskMSYjMzQ7ICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDEmIzM0OwomIzQzOwkJZXhpdCAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO25zeCgpCiYjNDM7ewomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JDEmIzM0OyBiYXNoIC1jICYjMzQ7JDImIzM0OwomIzQzO30KJiM0MzsKJiM0MztzZXR1cF90b3BvKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zCiYjNDM7CiYjNDM7CWNsZWFudXAKJiM0MzsJZm9yIG5zIGluICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7JG5zX3BlZXImIzM0OzsgZG8KJiM0MzsJCWlwIG5ldG5zIGFkZCAmIzM0OyRucyYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgZF9hIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zICYjMzQ7JG5zX3BlZXImIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX2IgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgJiMzNDskbnNfcGVlciYjMzQ7CiYjNDM7CWlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyAmIzM0OyRuc19zYW4mIzM0OwomIzQzOwomIzQzOwkjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uCiYjNDM7CWZvciBpZmFjZSBpbiBkX2EgZF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXAmIzM0OwomIzQzOwlkb25lCiYjNDM7CWZvciBpZmFjZSBpbiBwX2EgcF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgaXAgbGluayBzZXQgJGlmYWNlIHVwJiMzNDsKJiM0MzsJZG9uZQomIzQzOwomIzQzOwluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCBkX2lsIHVwJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwJiMzNDsKJiM0MzsKJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXAomIzQzOwkJaXAgbGluayBzZXQgaHNyMCB1cCYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19wZWVyJiMzNDsgJiMzNDtpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFwKJiM0MzsJCXNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBoc3IxIHVwOyBpcCBhZGRyIGFkZCAkcGVlcl9pcC8yNCBkZXYgaHNyMSYjMzQ7CiYjNDM7CiYjNDM7CSMgTGV0IHRoZSBub2RlcyBzZWUgZWFjaCBvdGhlciYjMzk7cyBzdXBlcnZpc2lvbiBmcmFtZXMuCiYjNDM7CXNsZWVwIDIKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hlY2tfZmVhdHVyZSgpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0mIzM0OyQxJiMzNDsKJiM0MzsJbG9jYWwgaWZhY2U9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIGZlYXR1cmU9JiMzNDskMyYjMzQ7CiYjNDM7CWxvY2FsIHdhbnQ9JiMzNDskNCYjMzQ7CiYjNDM7CiYjNDM7CWlmIG5zeCAmIzM0OyRucyYjMzQ7ICYjMzQ7ZXRodG9vbCAtayAkaWZhY2UmIzM0OyB8IGdyZXAgLXEgJiMzNDteJGZlYXR1cmU6ICR3YW50JiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzICR3YW50IFsgT0sgXSYjMzQ7CiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG5vdCAkd2FudCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MzsjIE9mZi1vci1hYnNlbnQgdmFyaWFudDogZmFpbHMgb25seSB3aGVuIHRoZSBmZWF0dXJlIGlzIHByZXNlbnQgQU5EIG9uLAomIzQzOyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC4KJiM0MztjaGVja19mZWF0dXJlX25vdF9vbigpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0mIzM0OyQxJiMzNDsKJiM0MzsJbG9jYWwgaWZhY2U9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIGZlYXR1cmU9JiMzNDskMyYjMzQ7CiYjNDM7CiYjNDM7CWlmIG5zeCAmIzM0OyRucyYjMzQ7ICYjMzQ7ZXRodG9vbCAtayAkaWZhY2UmIzM0OyB8IGdyZXAgLXEgJiMzNDteJGZlYXR1cmU6IG9uJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CWVsc2UKJiM0MzsJCWVjaG8gJiMzNDtJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIG5vdCBvbiBbIE9LIF0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mztkb19ncm9fZmVhdHVyZV9jaGVja3MoKQomIzQzO3sKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLiYjMzQ7CiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9hIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYiBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZgomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7R1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSByeC1ncm8taHcgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9iIHJ4LWdyby1odyBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2lsIHJ4LWdyby1odyBvZmYKJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0hXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy4mIzM0OwomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZV9ub3Rfb24gJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0eC10Y3A2LXNlZ21lbnRhdGlvbgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LXVkcC1zZWdtZW50YXRpb24KJiM0MzsJY2hlY2tfZmVhdHVyZV9ub3Rfb24gJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0eC1nc28tbGlzdAomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7SFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7YWxsb2Nfd29ya2RpcigpCiYjNDM7ewomIzQzOwkjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc28KJiM0MzsJIyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmUKJiM0MzsJIyBpcyBhIGhhcmQgdGVzdCBmYWlsdXJlLgomIzQzOwl3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwgewomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IG1rdGVtcCAtZCBmYWlsZWQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJZXhpdCAxCiYjNDM7CX0KJiM0MzsJY2htb2QgNzAwICYjMzQ7JHt3b3JrZGlyfSYjMzQ7CiYjNDM7CXBpZGZpbGU9JiMzNDske3dvcmtkaXJ9L2lwZXJmLnBpZCYjMzQ7CiYjNDM7CXJjZmlsZT0mIzM0OyR7d29ya2Rpcn0vaXBlcmYucmMmIzM0OwomIzQzO30KJiM0MzsKJiM0MzsjIE51bWVyaWMsIGFsaXZlLCBjb21tID09IGlwZXJmMywgYW5kIHJlYWxseSBvd25lZCBieSB0aGUgcGVlciBuZXRucy4KJiM0Mzt2YWxpZF9zZXJ2ZXJfcGlkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHA9JiMzNDskMSYjMzQ7CiYjNDM7CiYjNDM7CVtbICYjMzQ7JHAmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgcmV0dXJuIDEKJiM0MzsJa2lsbCAtMCAmIzM0OyRwJiMzNDsgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuIDEKJiM0MzsJWyAmIzM0OyQoY2F0IC9wcm9jLyYjMzQ7JHAmIzM0Oy9jb21tIDImZ3Q7L2Rldi9udWxsKSYjMzQ7ID0gJiMzNDtpcGVyZjMmIzM0OyBdIHx8IHJldHVybiAxCiYjNDM7CWlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsIHwgZ3JlcCAtcXggJiMzNDskcCYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXJ0X2lwZXJmX3NlcnZlcigpCiYjNDM7ewomIzQzOwlsb2NhbCBjYW5kaWRhdGVfcGlkCiYjNDM7CiYjNDM7CSMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHMKJiM0MzsJIyByZWFsIGV4aXQgc3RhdHVzIChuZXRucyBzaGFyZXMgdGhlIFBJRCBuYW1lc3BhY2UgYW5kIHRoZSBob3N0IGZzKS4KJiM0MzsJYWxsb2Nfd29ya2RpcgomIzQzOwkoIG5zeCAmIzM0OyRuc19wZWVyJiMzNDsgJiMzNDtpcGVyZjMgLXMgLTEgJmd0OyAvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsgXAomIzQzOwkJZWNobyBcJCEgJmd0OyAke3BpZGZpbGV9OyBcCiYjNDM7CQl3YWl0IFwkITsgXAomIzQzOwkJZWNobyBcJD8gJmd0OyAke3JjZmlsZX0mIzM0OyApICZhbXA7CiYjNDM7CXNlcnZlcl93cmFwcGVyPSQhCiYjNDM7CSMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0bwomIzQzOwkjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZAomIzQzOwlmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG8KJiM0MzsJCVsgLXMgJiMzNDske3BpZGZpbGV9JiMzNDsgXSAmYW1wOyZhbXA7IGJyZWFrCiYjNDM7CQlzbGVlcCAwLjEKJiM0MzsJZG9uZQomIzQzOwlpZiBbICEgLXMgJiMzNDske3BpZGZpbGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZGlkIG5vdCBwdWJsaXNoIGEgcGlkIChubyBwaWRmaWxlKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJY2FuZGlkYXRlX3BpZD0kKCZsdDsmIzM0OyR7cGlkZmlsZX0mIzM0OykKJiM0MzsJaWYgISB2YWxpZF9zZXJ2ZXJfcGlkICYjMzQ7JHtjYW5kaWRhdGVfcGlkfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2NhbmRpZGF0ZV9waWR9JiMzOTsgZmFpbGVkIHZhbGlkYXRpb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CSMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvbgomIzQzOwlpcGVyZl9waWQ9JiMzNDske2NhbmRpZGF0ZV9waWR9JiMzNDsKJiM0MzsJc2xlZXAgMQomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmcKJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC4KJiM0MztyZWFkX3R4X2NvdW50ZXJzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OyBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG91dCBjbnQKJiM0MzsKJiM0MzsJb3V0PSQobnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldiYjMzQ7IHwgXAomIzQzOwkJYXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OykKJiM0MzsJY250PSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OykKJiM0MzsJaWYgWyAmIzM0OyRjbnQmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2IChyZWNvcmRzPSRjbnQpJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7JG91dCYjMzQ7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO2V2YWxfY291bnRlcl9kZWx0YSgpCiYjNDM7ewomIzQzOwlsb2NhbCBuYW1lPSYjMzQ7JDEmIzM0OyBiMD0mIzM0OyQyJiMzNDsgcDA9JiMzNDskMyYjMzQ7IGIxPSYjMzQ7JDQmIzM0OyBwMT0mIzM0OyQ1JiMzNDsgb3A9JiMzNDskNiYjMzQ7IGxpbWl0PSYjMzQ7JDcmIzM0OwomIzQzOwlsb2NhbCBiZCBwZAomIzQzOwomIzQzOwlpZiAhIFtbICYjMzQ7JGIwJiMzNDsgPX4gXlswLTldJiM0MzskICZhbXA7JmFtcDsgJiMzNDskYjEmIzM0OyA9fiBeWzAtOV0mIzQzOyQgJmFtcDsmYW1wOyBcCiYjNDM7CQkmIzM0OyRwMCYjMzQ7ID1+IF5bMC05XSYjNDM7JCAmYW1wOyZhbXA7ICYjMzQ7JHAxJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWUmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWJkPSQoKGIxIC0gYjApKQomIzQzOwlwZD0kKChwMSAtIHAwKSkKJiM0MzsJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sdCAwIF0gfHwgWyAmIzM0OyRwZCYjMzQ7IC1sZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lIChieXRlcz0kYmQgcGt0cz0kcGQpJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwlpZiBbICYjMzQ7JG9wJiMzNDsgPSAmIzM0O2d0JiMzNDsgXTsgdGhlbgomIzQzOwkJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlbgomIzQzOwkJCWVjaG8gJiMzNDtGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgJmx0Oz0gJGxpbWl0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCXJldHVybiAxCiYjNDM7CQlmaQomIzQzOwllbHNlCiYjNDM7CQlpZiBbICYjMzQ7JGJkJiMzNDsgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCAmZ3Q7ICRsaW1pdCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQkJcmV0PTEKJiM0MzsJCQlyZXR1cm4gMQomIzQzOwkJZmkKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0O0lORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkJiMzNDsgXAomIzQzOwkJJiMzNDsob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdJiMzNDsKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fdHNvX3N0cmVhbV90ZXN0KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmMKJiM0MzsJbG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxCiYjNDM7CWxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMQomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS4mIzM0OwomIzQzOwluc3ggJiMzNDskbnNfc2FuJiMzNDsgJiMzNDtldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb24mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX3NhbiYjMzQ7IHMwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvbgomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7Q291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC4mIzM0OwomIzQzOwlzdGFydF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZQomIzQzOwkjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0cwomIzQzOwkjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWAomIzQzOwkjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlCiYjNDM7CSMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuCiYjNDM7CXNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wCiYjNDM7CXJlYWQgLXIgc2FuX2IwIHNhbl9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19zYW4mIzM0OyBzMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBhX2IwIGFfcDAgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9hKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGJfYjAgYl9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2IpCiYjNDM7RU9GCiYjNDM7CVsgJiMzNDske3JldDotMH0mIzM0OyAtZXEgMCBdIHx8IHJldHVybgomIzQzOwomIzQzOwkjIHJhdGUtY2FwcGVkOiB0aGUgUFJJTUFSWSBkaXNjcmltaW5hdG9yIGlzIHRoZSBjb3VudGVyIGluZXF1YWxpdHkKJiM0MzsJIyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LgomIzQzOwkjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhCiYjNDM7CSMgZnVuY3Rpb25hbCBwcm9ibGVtLgomIzQzOwlpZiAhIG91dD0kKG5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXAomIzQzOwkJLWIgMkcgLXQgMTAmIzM0OyAyJmd0OyZhbXA7MSk7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDomIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJZWNobyAmIzM0OyRvdXQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwomIzQzOwlyZWFkIC1yIHNhbl9iMSBzYW5fcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfc2FuJiMzNDsgczApCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgYV9iMSBhX3AxICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBiX2IxIGJfcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9iKQomIzQzO0VPRgomIzQzOwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtTQU4gczAgVFgmIzM0OyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OyBcCiYjNDM7CQlndCAmIzM0OyRTQU5fQVZHX01JTiYjMzQ7CiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O0RVVCBkX2EgVFgmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7ICYjMzQ7JGFfYjEmIzM0OyAmIzM0OyRhX3AxJiMzNDsgXAomIzQzOwkJbGUgJiMzNDskTEFOX0FWR19NQVgmIzM0OwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtEVVQgZF9iIFRYJiMzNDsgJiMzNDskYl9iMCYjMzQ7ICYjMzQ7JGJfcDAmIzM0OyAmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7IFwKJiM0MzsJCWxlICYjMzQ7JExBTl9BVkdfTUFYJiMzNDsKJiM0MzsJWyAmIzM0OyR7cmV0Oi0wfSYjMzQ7IC1lcSAwIF0gfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgc3VjY2VzcyBwYXRoOiB0aGUgb25lLXNob3Qgc2VydmVyIGV4aXRzIGJ5IGl0c2VsZjsgcmVhcCB0aGUKJiM0MzsJIyB3cmFwcGVyLCB0aGVuIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIHRoZSBzZXJ2ZXImIzM5O3MgcmVhbCBzdGF0dXMKJiM0MzsJd2FpdCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JiMzNDsmIzM0OwomIzQzOwlpZiBbICEgLXMgJiMzNDske3JjZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBzdGF0dXMgZmlsZSBtaXNzaW5nICgke3JjZmlsZX0pJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsJc2VydmVyX3JjPSQoY2F0ICYjMzQ7JHtyY2ZpbGV9JiMzNDspCiYjNDM7CWlmICEgW1sgJiMzNDskc2VydmVyX3JjJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgJiMzNDskc2VydmVyX3JjJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5OyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CiYjNDM7CSMgc2Vjb25kYXJ5IGhlYWx0aCBzaWduYWwgb25seTogYW5jaG9yZWQsIHNpbmdsZS1tYXRjaCwgbnVtZXJpYyDigJQKJiM0MzsJIyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyCiYjNDM7CSMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLgomIzQzOwlzZW5kZXJfcmV0cj0kKGVjaG8gJiMzNDskb3V0JiMzNDsgfCBhd2sgJiMzOTsvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfSYjMzk7KQomIzQzOwlpZiBbICYjMzQ7JChlY2hvICYjMzQ7JHNlbmRlcl9yZXRyJiMzNDsgfCBncmVwIC1FYyAmIzM5O15bMC05XSYjNDM7JCYjMzk7KSYjMzQ7IC1uZSAxIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjYW5ub3QgcGFyc2Ugc2VuZGVyIHJldHJhbnNtaXRzIHJlbGlhYmx5JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCWVjaG8gJiMzNDskb3V0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0O0lORk86IFRDUCBzdHJlYW0gZG9uZTsmIzM0OyBcCiYjNDM7CQkmIzM0O3NlbmRlciByZXRyYW5zbWl0cz0kc2VuZGVyX3JldHIgKHNlY29uZGFyeSBzaWduYWwpJiMzNDsKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLUUgJiMzNDtzZW5kZXJ8cmVjZWl2ZXImIzM0OwomIzQzO30KJiM0MzsKJiM0MztjaGVja19wcmVyZXF1aXNpdGVzCiYjNDM7Y2hlY2tfdG9vbCBldGh0b29sCiYjNDM7Y2hlY2tfdG9vbCBpcGVyZjMKJiM0MztjaGVja190b29sIHRpbWVvdXQKJiM0MzsKJiM0MzsjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguCiYjNDM7aWYgISBpcCBsaW5rIGhlbHAgaHNyIDImZ3Q7JmFtcDsxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiBpcHJvdXRlMiBoYXMgbm8gSFNSIGludGVybGluayBzdXBwb3J0JiMzNDsKJiM0MzsJZXhpdCAka3NmdF9za2lwCiYjNDM7ZmkKJiM0MzsKJiM0MztzZXR1cF90b3BvCiYjNDM7CiYjNDM7ZWNobyAmIzM0O0lORk86IEluaXRpYWwgdmFsaWRhdGlvbiBwaW5nIChTQU4gLSZndDsgcGVlciB0aHJvdWdoIHRoZSBEVVQpLiYjMzQ7CiYjNDM7ZG9fcGluZyAmIzM0OyRuc19zYW4mIzM0OyAmIzM0OyRwZWVyX2lwJiMzNDsKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7SW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrcwomIzQzO2RvX3Rzb19zdHJlYW1fdGVzdAomIzQzO3N0b3BfaWZfZXJyb3IgJiMzNDtHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBBbGwgZ29vZC4mIzM0OwomIzQzO2V4aXQgJHJldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIU1IgR1JPL0dTTyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHR3ZWFraW5nIHRoZSBIU1IgZHJpdmVyIGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB0byBhZGRyZXNzIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIGFuZCBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBkaXNhYmxlIEdSTyBvbiB0aGUgSFNSIG5ldCBkZXZpY2UgdXNpbmcgYG5ldGlmX2Rpc2FibGVfZ3JvKClgIGFuZCBgZGV2X2Rpc2FibGVfZ3JvKClgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZXkmIzM5O3ZlIGFsc28gY2xlYW5lZCB1cCBgaHNyX2Rldl9zZXR1cGAgYnkgcmVtb3ZpbmcgdGhlIGBORVRJRl9GX0dTT19NQVNLYCBmZWF0dXJlLiBUaGV5JiMzOTt2ZSBnb3QgbW9kaWZpY2F0aW9ucyB0byBgaHNyX2ZvcndhcmRfc2tiYCB0byBoYW5kbGUgdGhlIEdTTyBzdXBlci1wYWNrZXRzLCBzZWdtZW50aW5nIHRoZW0gYmVmb3JlIGZvcndhcmRpbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBsYXJnZSBwYWNrZXRzIGluIHRoaXMgY29udGV4dC4gVGhlcmUmIzM5O3MgYWxzbyBhIGNhbGwgdG8gYGRldl9kaXNhYmxlX2dybyhkZXYpYCBpbiBgaHNyX3BvcnRkZXZfc2V0dXBgLiBBbmQsIHRoZXJlJiMzOTtzIGEgbmV3IHNlbGZ0ZXN0LCBgaHNyX2dyb19zdXBlcnBhY2tldC5zaGAsIHRvIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcyBleHBlY3RlZCwgd2hpY2ggaXMgZ3JlYXQgdG8gc2VlLgoKTm93LCBmcm9tIHRoZSBmaWxlIGxpc3Qg4oCTIGBuZXQvY29yZS9kZXYuY2AsIGBuZXQvY29yZS9kZXZfYXBpLmNgLCBgbmV0L2hzci9oc3JfZGV2aWNlLmNgLCBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgYW5kIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYCDigJMgdGhpcyBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGNvcmUga2VybmVsIG5ldHdvcmsgbG9naWMgYW5kIHRoZSBuZXR3b3JrIGRyaXZlciBpdHNlbGYuIFRoYXTigJlzIHJlYWNoYWJsZSBjb2RlLCBhbmQgSSBrbm93IEhTUiBpcyBhIHZpcnR1YWwgZGV2aWNlLCBtYWtpbmcgaXQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB3aGljaCBpcyBoZWxwZnVsLiBUaGUgcGF0Y2ggZGVhbHMgd2l0aCBHU08gYW5kIEdSTywgd2hpY2ggYXJlIGNydWNpYWwgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXMuCgpOb3csIG15IGZvY3VzIGZvciBmdXp6aW5nIG5lZWRzIHRvIGJlIG9uIHNwZWNpZmljIGZ1bmN0aW9ucywgc3RhcnRpbmcgd2l0aCBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBlbnN1cmUgdGhlIEdSTyBkaXNhYmxpbmcgaXMgc3VjY2Vzc2Z1bC4gVGhlbiwgYGhzcl9mb3J3YXJkX3NrYmAgYW5kIGBoc3JfZGV2X3htaXRgIHdpbGwgYmUga2V5IHRvIHRlc3RpbmcgR1NPIHN1cGVyLXBhY2tldCBoYW5kbGluZyBhbmQgdHJhbnNtaXNzaW9uLCBhbmQgZmluYWxseSwgYGhzcl9oYW5kbGVfZnJhbWVgIHRvIG1ha2Ugc3VyZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIGlzIGludGFjdC4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYENPTkZJR19IU1JgIG9yIHNpbWlsYXIgaW4gYG5ldC9oc3IvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIEhTUiBkcml2ZXIuIFRoaXMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhlIHRlc3QgZW52aXJvbm1lbnQgbWF0Y2hlcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIEhTUiB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIExldCYjMzk7cyBzdGFydCBieSBjcmFja2luZyBvcGVuIHRoZSBgbmV0L2hzci9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHBsYWNlIEkgbG9vayBmb3IgZGVwZW5kZW5jaWVzLiBJdCYjMzk7bGwgbGF5IG91dCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLCBhbmQgYW55IHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBvdGhlciBuZXR3b3JraW5nIHN1YnN5c3RlbXMsIGhhcmR3YXJlIGRyaXZlcnMsIG9yIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IHRoaXMgSFNSIGZ1bmN0aW9uYWxpdHkgbWlnaHQgcGlnZ3liYWNrIG9uLiBUaGlzIGlzIHdoZXJlIHRoZSB0cnV0aCBsaWVzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgSFNSXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBlbmFibGVzIElFQyA2MjQzOSBkZWZpbmVkIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzXG4gIDEwOlx0XHQgIFJlZHVuZGFuY3kgKEhTUikgYW5kIFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFBSUCkuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxuICAxMzpcdFx0ICBEQU5IIChcJiMzNDtEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSXCYjMzQ7KSBvciBEQU5QIChcJiMzNDtEb3VibHlcbiAgMTQ6XHRcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXCYjMzQ7KS4gRm9yIHRoaXMgdG8gd29yaywgeW91ciBMaW51eCBib3hcbiAgMTU6XHRcdCAgbmVlZHMgKGF0IGxlYXN0KSB0d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxuICAxODpcdFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXG4gIDE5Olx0XHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcbiAgMjA6XHRcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcbiAgMjE6XHRcdCAgaW4gdGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQgZmlsdGVycyBmcmFtZXNcbiAgMjI6XHRcdCAgdGhhdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGVhcmxpZXIuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIEZvciBEQU5QLCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgY29ubmVjdGluZyB0byB0d29cbiAgMjU6XHRcdCAgc2VwYXJhdGUgbmV0d29ya3Mgb3ZlciB0aGUgdHdvIHNsYXZlIGludGVyZmFjZXMuIExpa2UgSFNSLCBFdGhlcm5ldFxuICAyNjpcdFx0ICBmcmFtZXMgc2VudCBvdmVyIHRoZSBQUlAgZGV2aWNlIHdpbGwgYmUgc2VudCB0byBib3RoIG5ldHdvcmtzIGdpdmluZ1xuICAyNzpcdFx0ICBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gVW5saWtlIEhTUiwgUFJQIG5ldHdvcmtzXG4gIDI4Olx0XHQgIGNhbiBoYXZlIFNpbmdseSBBdHRhY2hlZCBOb2RlcyAoU0FOKSBzdWNoIGFzIFBDLCBwcmludGVyLCBicmlkZ2VzXG4gIDI5Olx0XHQgIGV0YyBhbmQgd2lsbCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggREFOUCBub2Rlcy5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVGhpcyBjb2RlIGlzIGEgXCYjMzQ7YmVzdCBlZmZvcnRcJiMzNDsgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBzdGFuZGFyZCBhc1xuICAzMjpcdFx0ICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTM6MjAxMCAoSFNSdjApIGFuZCBJRUMgNjI0MzktMzoyMDEyIChIU1J2MSksXG4gIDMzOlx0XHQgIGFuZCBQUlAgc3RhbmRhcmQgZGVzY3JpYmVkIGluIElFQyA2MjQzOS00OjIwMTIgKFBSUCksIGJ1dCBub1xuICAzNDpcdFx0ICBjb21wbGlhbmN5IHRlc3RzIGhhdmUgYmVlbiBtYWRlLiBVc2UgaXByb3V0ZTIgdG8gc2VsZWN0IHRoZSBwcm90b2NvbFxuICAzNTpcdFx0ICB5b3Ugd291bGQgbGlrZSB0byB1c2UuXG4gIDM2Olx0XG4gIDM3Olx0XHQgIFlvdSBuZWVkIHRvIHBlcmZvcm0gYW55IGFuZCBhbGwgbmVjZXNzYXJ5IHRlc3RzIHlvdXJzZWxmIGJlZm9yZVxuICAzODpcdFx0ICByZWx5aW5nIG9uIHRoaXMgY29kZSBpbiBhIHNhZmV0eSBjcml0aWNhbCBzeXN0ZW0hXG4gIDM5Olx0XG4gIDQwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQxOlx0XG4gIDQyOlx0aWYgSFNSXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXG4gIDQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUlAgZHVwbGljYXRlIGRpc2NhcmQgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA0NjpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICA0NzpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgQ292ZXJzIHRoZSBQUlAgZHVwbGljYXRlIGRpc2NhcmQgYWxnb3JpdGhtLlxuICA1MDpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAxNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhTUiBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBIU1Igc2V0dXAsIGFuZCB0aGUgYENPTkZJR19IU1JgIGZsYWcgaXMsIG9mIGNvdXJzZSwgdGhlIG1haW4gY29uZmlndXJhdGlvbiBjb250cm9sLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQ6IGBkZXZfZGlzYWJsZV9ncm9gLCBgbmV0aWZfZGlzYWJsZV9ncm9gLCBgaHNyX2Rldl94bWl0YCwgYHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lYCwgYHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lYCwgYGhzcl9kZXZfc2V0dXBgLCBgaGFuZGxlX3N0ZF9mcmFtZWAsIGBoc3JfZm9yd2FyZF9za2JgLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGFuZCBgaHNyX3BvcnRkZXZfc2V0dXBgLgoKTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGRlZmluZWQ/IGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHJlc2lkZSBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvZGV2X2FwaS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBoc3JfZm9yd2FyZF9za2JgIGlzIGNsZWFybHkgaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGFzIGV4cGVjdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYXJlIHN0YXRpYyBvciBleHBvcnRlZC4gYGhzcl9mb3J3YXJkX3NrYmAgaXMgKm5vdCogc3RhdGljLCBidXQgYGhzcl9mb3J3YXJkX3NrYl9vbmVgICppcyogc3RhdGljIHdoaWNoIGltcGxpZXMgc29tZSBpbnRlcm5hbCBoYW5kbGluZy4gYGRldl9kaXNhYmxlX2dyb2AgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZ29vZC4gYG5ldGlmX2Rpc2FibGVfZ3JvYCBpcyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCYjMzk7cyBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gaXRzIHVzYWdlLgoKQWxyaWdodCwgdGltZSB0byBkaXN0aWxsIHRoZSBlc3NlbmNlIG9mIHdoYXQmIzM5O3MgaW1wb3J0YW50IGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBvbjogYGRldl9kaXNhYmxlX2dyb2AsIGBuZXRpZl9kaXNhYmxlX2dyb2AsIGBoc3JfZm9yd2FyZF9za2JgLCBgaHNyX2Rldl94bWl0YCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBhbmQgYGhzcl9wb3J0ZGV2X3NldHVwYC4KCldhaXQsIGEgc21hbGwgY29ycmVjdGlvbi4gYGhzcl9oYW5kbGVfZnJhbWVgIGlzIHN0YXRpYy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSB0aGF0IGlzIGRlZmluZWQuIExldCBtZSBsb29rIGluIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYCB0byBiZSBzdXJlLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX3NsYXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3Jfc2xhdmUuYz0xOT1ib29sIGhzcl9pbnZhbGlkX2Rhbl9pbmdyZXNzX2ZyYW1lKF9fYmUxNiBwcm90b2NvbClcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTIzLVxubmV0L2hzci9oc3Jfc2xhdmUuYzoyNDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjUte1xuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9ODU9Ym9vbCBoc3JfcG9ydF9leGlzdHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODYte1xubmV0L2hzci9oc3Jfc2xhdmUuYzo4NzpcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGhzcl9oYW5kbGVfZnJhbWU7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg4LX1cbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTEzMj1zdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTU5LVxubmV0L2hzci9oc3Jfc2xhdmUuYzoxNjA6XHRyZXMgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGhzcl9oYW5kbGVfZnJhbWUsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy0xNjEtXHRpZiAocmVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIEhTUiBEcml2ZXIgSW50ZWdyYXRpb24qKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgbGF5IG9mIHRoZSBsYW5kIGFzIEkgdW5kZXJzdGFuZCBpdC4gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgdGhpcyBIU1Igc3R1ZmYgaW50ZWdyYXRlcyBpbnRvIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjaywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgR1JPLiBJIHNlZSB0aGF0IGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYW4gUlggaGFuZGxlciDigJMgbWFrZXMgc2Vuc2UsIHRoZSBkcml2ZXIgbmVlZHMgdG8gcHJvY2VzcyBpbmNvbWluZyBmcmFtZXMuIFNpbWlsYXJseSwgYGhzcl9kZXZfeG1pdGAgaXMgc3RhdGljLCB3aGljaCBpcyByZWdpc3RlcmVkIGFzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLCBzbyB0aGUgZHJpdmVyIGRvZXMgaXRzIHRoaW5nIHRoZXJlLiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnRzIGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnM6IGBoc3JfZm9yd2FyZF9za2JgLCBgZGV2X2Rpc2FibGVfZ3JvYCwgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFRoZXNlIGFyZSBjbGVhcmx5IHRoZSBrZXkgb25lcyBmb3IgZGlzYWJsaW5nIEdSTyBhbmQgZm9yd2FyZGluZyBwYWNrZXRzIGFwcHJvcHJpYXRlbHkuIEkgZmlndXJlIEkmIzM5O2xsIGJlIHVzaW5nIGBkZXZfZGlzYWJsZV9ncm9gLCBgbmV0aWZfZGlzYWJsZV9ncm9gLCBhbmQgYGhzcl9mb3J3YXJkX3NrYmAgdG8gZ2V0IHRoZSBkZXNpcmVkIGJlaGF2aW9yIOKAkyBkaXNhYmxpbmcgR1JPIGlzIGxpa2VseSBjcnVjaWFsIGZvciBIU1ImIzM5O3MgZHVwbGljYXRlIGZyYW1lIGhhbmRsaW5nLgoKTm93LCBkbyBJIG5lZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRvIHB1bGwgdGhpcyBvZmY/IExldCYjMzk7cyBhc3N1bWUgaXQgZGVwZW5kcyBvbiB0aGUgTkVUIGNvbmZpZy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIHNwZWNpYWwgY29uZmlndXJhdGlvbiBmbGFncyBiZXlvbmQgdGhhdCwgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBkb3VibGUtY2hlY2sgYG5ldC9jb3JlL2Rldi5jYCB0byBjb25maXJtIHRoZSBiZWhhdmlvciBvZiBgbmV0aWZfZGlzYWJsZV9ncm9gLCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgaG93IEdSTyBnZXRzIGRpc2FibGVkIGF0IHRoZSBuZXRpZiBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xODI1PXZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xODQyLVxubmV0L2NvcmUvZGV2LmM6MTg0Mzp2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXYuYy0xODQ0LXtcbi0tXG5uZXQvY29yZS9kZXYuYy0xODU1LVx0XHRuZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTtcbm5ldC9jb3JlL2Rldi5jOjE4NTY6XHRcdG5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7XG5uZXQvY29yZS9kZXYuYy0xODU3LVx0XHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkyNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OgoKKipDaGVja2luZyBHUk8gRGlzYWJsZW1lbnQqKgoKUmlnaHQsIGBuZXRpZl9kaXNhYmxlX2dyb2AgaXMgZGVmaW5pdGVseSBwcmVzZW50LiBOb3csIEkgbmVlZCB0byBzZWUgKndoZXJlKiBpdCYjMzk7cyBhY3R1YWxseSBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gTGV0IG1lIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYG5ldC9jb3JlL2Rldl9hcGkuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBmb3IgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGBkZXZfZGlzYWJsZV9ncm9gIHRoZXJlLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gR290dGEgc3RheSBzaGFycCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2Rpc2FibGVfZ3JvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hcGkuYz0yNzA9RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuLS1cbm5ldC9jb3JlL2Rldl9hcGkuYy0yNzItLyoqXG5uZXQvY29yZS9kZXZfYXBpLmM6MjczOiAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxubmV0L2NvcmUvZGV2X2FwaS5jLTI3NC0gKiBAZGV2OiBkZXZpY2Vcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjc5LSAqL1xubmV0L2NvcmUvZGV2X2FwaS5jOjI4MDp2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4MS17XG4tLVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4NS19XG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg2OkVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcbm5ldC9jb3JlL2Rldl9hcGkuYy0yODctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzM0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCBhbiBleHBlcnQgYXVkaWVuY2UgaW4gbWluZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBHUk8gYW5kIEZvcndhcmRpbmcqKgoKQWxyaWdodCwgY29uZmlybWVkIOKAkyBgZGV2X2Rpc2FibGVfZ3JvYCBpcyBpbmRlZWQgcHJlc2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcGl2b3QgdG93YXJkcyB0aGUgbGlrZWx5IHNvdXJjZSBvZiBhbnkgcmVsYXRlZCBpc3N1ZXMgaW4gdGhlIEhTUiBjb250ZXh0LiBHaXZlbiB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIG15IGluc3RpbmN0cyB0ZWxsIG1lIHRvIGxvb2sgYXQgdGhlIEhTUiBmb3J3YXJkaW5nIGxvZ2ljIGl0c2VsZi4gVGhhdCBsZWFkcyBtZSBkaXJlY3RseSB0byBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHNyX2ZvcndhcmRfc2tiYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBIU1IgZm9yd2FyZGluZyBkZWNpc2lvbnMgYW5kIGFjdGlvbnMgcmVsYXRlZCB0byBTS0JzIHdvdWxkIGJlLiBBbnkgR1JPLXJlbGF0ZWQgYW5vbWFsaWVzIGFyZSBoaWdobHkgbGlrZWx5IHRvIG1hbmlmZXN0IHRoZXJlLiBOb3cgbGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYz02Nzg9c3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM1LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NzM2OnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNy17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc2OC0gKi9cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3Njk6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3MC17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3My1cdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3NzQ6XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzUtXHRcdHJldHVybjtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODAyLVx0XHRzZWdzLVx1MDAzZW5leHQgPSBOVUxMO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjgwMzpcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MDQtXHRcdHNlZ3MgPSBuZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk2OAoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSFNSIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBoc3JfZm9yd2FyZF9za2JgIGlzIGluZGVlZCBwcmVzZW50IGluIHRoaXMgY29kZS4gRXhjZWxsZW50LiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZG9pbmcgc29tZXRoaW5nIHNpZ25pZmljYW50OiBpdCYjMzk7cyBtYWtpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIGFuZCB0aGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgdG8gbWFuYWdlIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIG9uIHRob3NlIGVuc2xhdmVkIGRldmljZXMuIEl0JiMzOTtzIGFsc28gZGVhbGluZyB3aXRoIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgc3VwZXItcGFja2V0cyBzcGVjaWZpY2FsbHkgaW4gdGhlIEhTUiBmb3J3YXJkaW5nIHBhdGguCgpUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtmdXp6aW5nIG9wcG9ydHVuaXR5JiMzNDsgdG8gbWUuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGJlaGF2aW9ycywgcGFydGljdWxhcmx5IGFyb3VuZCBvZmZsb2FkIG1lY2hhbmlzbXMgYW5kIHBhY2tldCBoYW5kbGluZywgaXMgcHJpbWUgdGVycml0b3J5IGZvciB1bmNvdmVyaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBlZGdlIGNhc2VzLgoKSSYjMzk7bGwgd2FudCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIGZvbGxvd2luZyBrZXkgc3ltYm9sczogYGRldl9kaXNhYmxlX2dyb2AsIGBuZXRpZl9kaXNhYmxlX2dyb2AsIGFuZCwgb2YgY291cnNlLCB0aGUgY2VudHJhbCBgaHNyX2ZvcndhcmRfc2tiYCBmdW5jdGlvbi4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCB0b3VjaHBvaW50cyB3aGVyZSB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZC4KCkdpdmVuIHRoYXQgdGhlIGNoYW5nZSBpcyByZWxhdGVkIHRvIHRoZSBgSFNSYCBjb25maWcsIEkgY2FuIGVhc2lseSB0ZXN0IHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIU1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIGFuZCBjb3JlIG5ldHdvcmtpbmcgdG8gZGlzYWJsZSBHUk8gb24gZW5zbGF2ZWQgZGV2aWNlcyBhbmQgaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGluIEhTUiBmb3J3YXJkaW5nLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgYW5kIGNvcmUgbmV0d29ya2luZyB0byBkaXNhYmxlIEdSTyBvbiBlbnNsYXZlZCBkZXZpY2VzIGFuZCBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgaW4gSFNSIGZvcndhcmRpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU3OjQ2LjMxMDc5ODQ3MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjQ3NTI0OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIGFuZCBjb3JlIG5ldHdvcmtpbmcgdG8gZGlzYWJsZSBHUk8gb24gZW5zbGF2ZWQgZGV2aWNlcyBhbmQgaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGluIEhTUiBmb3J3YXJkaW5nLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU3OjQ2LjMxMDgwNTM0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1MzUyMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjk4NGEwMGY3YWIwNzU2YTYxMWNkZWQxNzE5ZGZkY2YxZTgxZGVjNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAwNTo1Nzo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDk5ODFkNjM3ZjhiNTQ2Li5lYmEyYzI2YTQ5YmE4ZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0zNDM0LDYgKzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gdm9pZCBuZXRpZl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgdW5saW5rKTtcXG4gdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpO1xcbiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpO1xcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggNTkzM2M1ZGFiMDllZTEuLmE2Y2YyYWRjODYyNTY1IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTg0MCw2ICsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFxuK1xcdGRldi1cXHUwMDNld2FudGVkX2ZlYXR1cmVzIFxcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XFxuK1xcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcXG4rXFx0XFx0bmV0ZGV2X1dBUk4oZGV2LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxcXFxuXFxcIik7XFxuK1xcbitcXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XFxuK1xcdFxcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xcbitcXHRcXHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xcbitcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKlxcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG4gICpcXHRAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jXFxuaW5kZXggNDM3OTQ3ZGQwOGVkNTMuLjAyZmIyMTYyOTUxMjg0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xcbisrKyBiL25ldC9jb3JlL2Rldl9hcGkuY1xcbkBAIC0yNjksNiArMjY5LDIyIEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xcbiBcXG4rLyoqXFxuKyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbisgKiBAZGV2OiBkZXZpY2VcXG4rICpcXG4rICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlXFxuKyAqIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWQgcGFja2V0cyBtYXkgYmVcXG4rICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxcbisgKi9cXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4rXFx0bmV0aWZfZGlzYWJsZV9ncm8oZGV2KTtcXG4rXFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XFxuK1xcbiAvKipcXG4gICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlXFxuICAqIEBkZXY6IGRldmljZVxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9kZXZpY2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jXFxuaW5kZXggNTU1NWI3MWFiMTliNTkuLjI0OGNiYjE0MmUyMWUxIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXFxuKysrIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcXG5AQCAtMjMyLDkgKzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBtYXN0ZXItXFx1MDAzZWRldjtcXG4gXFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0XFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4tXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG5AQCAtMzM1LDYgKzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0XFx0aHNyX3N0YWctXFx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVxcdTAwM2VzZXF1ZW5jZV9ucik7XFxuIFxcdFxcdGhzci1cXHUwMDNlc2VxdWVuY2VfbnIrKztcXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gdHlwZTtcXG4gXFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cXG5AQCAtMzU2LDE0ICszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbiBcXHRcXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVxcdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4rXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0fVxcbiBcXG4gXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi1cXHRyZXR1cm47XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbkBAIC0zOTAsNiArMzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVxcdTAwM2VzdXBfc2VxdWVuY2VfbnIpO1xcbiBcXHRoc3ItXFx1MDAzZXN1cF9zZXF1ZW5jZV9ucisrO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XFxuIFxcdGhzcl9zdGFnLVxcdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XFxuIFxcbkBAIC0zOTcsMTMgKzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XFxuIFxcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXFx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFxuLVxcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbitcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuIFxcbiBcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gfVxcbiBcXG4gLyogQW5ub3VuY2UgKHN1cGVydmlzaW9uIGZyYW1lKSB0aW1lciBmdW5jdGlvblxcbkBAIC02NTksNyArNjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGRldi1cXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xcbiBcXG4gXFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcXG4tXFx0XFx0XFx0ICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8XFxuK1xcdFxcdFxcdCAgIE5FVElGX0ZfSFdfQ1NVTSB8XFxuIFxcdFxcdFxcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXFxuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ3NvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJoc3JfbWFpbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHNyX2ZyYW1lcmVnLmhcXFwiXFxuIFxcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxcbiBcXHQgICAgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XFxuIFxcdFxcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXFxuLVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVxcdTAwM2VzZXF1ZW5jZV9ucjtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbitzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XFxuIFxcbkBAIC03NjAsMyArNzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4gXFx0cG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiB9XFxuK1xcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xcbisgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXFxuKyAqL1xcbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xcbitcXG4rXFx0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xcbitcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVW5mb2xkIG9ubHkgcGxhaW4tRXRoZXJuZXQgR1NPIHN1cGVyLXBhY2tldHM6IGxvY2FsbHkgZ2VuZXJhdGVkXFxuK1xcdCAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZVxcbitcXHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxcbitcXHQgKiBIU1IgdGFncyAvIFBSUCBSQ1QgdHJhaWxlcnMgdGhhdCBzb2Z0d2FyZSBzZWdtZW50YXRpb24gY2Fubm90XFxuK1xcdCAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzXFxuK1xcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUiBcXHUwMDI2XFx1MDAyNiBwb3J0LVxcdTAwM2V0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287XFxuK1xcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0hTUikgfHxcXG4rXFx0ICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSlcXG4rXFx0XFx0Z290byBkcm9wX2dzbztcXG4rXFxuK1xcdC8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlXFxuK1xcdCAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tXFxuK1xcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXFxuK1xcdCAqL1xcbitcXHRzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xcbitcXHRpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSlcXG4rXFx0XFx0Z290byBkcm9wX2dzbztcXG4rXFxuK1xcdGNvbnN1bWVfc2tiKHNrYik7XFxuK1xcdHdoaWxlIChzZWdzKSB7XFxuK1xcdFxcdG5leHQgPSBzZWdzLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRzZWdzLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4rXFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcXG4rXFx0XFx0c2VncyA9IG5leHQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuO1xcbitcXG4rZHJvcF9nc286XFxuK1xcdHBvcnQtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbmluZGV4IGQ5YWY5ZTY1ZjcyZjA3Li5jN2ZkMDIxZjAzYjFmNCAxMDA2NDRcXG4tLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jXFxuKysrIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbkBAIC03MywxNiArNzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4gXFx0fVxcbiBcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbiBcXG4tXFx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcXG4tXFx0ICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuXFxuLVxcdCAqL1xcbi1cXHRpZiAocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG4tXFx0fVxcbitcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG4gXFxuIGZpbmlzaF9jb25zdW1lOlxcbiBcXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcXG5AQCAtMTcwLDYgKzE2MSw3IEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChyZXMpXFxuIFxcdFxcdGdvdG8gZmFpbF9yeF9oYW5kbGVyO1xcbiBcXHRkZXZfZGlzYWJsZV9scm8oZGV2KTtcXG4rXFx0ZGV2X2Rpc2FibGVfZ3JvKGRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuaW5kZXggMzFmYjkzMjZjZjUzM2QuLjBkMTA1NDc2ZTdjNTBkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuQEAgLTMsNiArMyw3IEBAXFxuIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxcbiBcXG4gVEVTVF9QUk9HUyA6PSBcXFxcXFxuK1xcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcXFxcbiBcXHRoc3JfcGluZy5zaCBcXFxcXFxuIFxcdGhzcl9yZWRib3guc2ggXFxcXFxcbiBcXHRsaW5rX2ZhdWx0cy5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjRjYTJhN2YzOTVlYmQwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxcbkBAIC0wLDAgKzEsNDM3IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcXG4rI1xcbisjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcXG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXFxuKyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXFxuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XFxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xcbisjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQncyBMQU4gcG9ydHMuXFxuKyNcXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XFxuKyNcXG4rIyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xcbisjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118XFxuKyMgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcXG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xcbisjXFxuKyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJ3MgZm9yd2FyZCBwYXRoXFxuKyMgKGludGVybGluayBSWCAtXFx1MDAzZSBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmRcXG4rIyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cXG4rXFxuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcXG4rXFxuK25zX2R1dD1cXFwiaHNyLWdyby1kdXRcXFwiXFxuK25zX3Nhbj1cXFwiaHNyLWdyby1zYW5cXFwiXFxuK25zX3BlZXI9XFxcImhzci1ncm8tcGVlclxcXCJcXG4rc2FuX2lwPVxcXCIxMDAuNjQuMC4xXFxcIlxcbitwZWVyX2lwPVxcXCIxMDAuNjQuMC4zXFxcIlxcbitcXG4rIyBBZ2dyZWdhdGUgY291bnRlciB0aHJlc2hvbGRzIGZvciB0aGUgc3RyZWFtIHRlc3QgKGJ5dGVzL3BhY2tldHMpOlxcbisjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGFcXG4rIyBndWFyZCB3aXRoIG1hcmdpbiwgbm90IHRoZSBwcm90b2NvbCBtYXhpbXVtIChzZWUgZG9fdHNvX3N0cmVhbV90ZXN0KS5cXG4rU0FOX0FWR19NSU49MjA0OFxcbitMQU5fQVZHX01BWD0xNTE0XFxuK1xcbitpcGVyZl9waWQ9XFxcIlxcXCJcXG4rc2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rd29ya2Rpcj1cXFwiXFxcIlxcbitwaWRmaWxlPVxcXCJcXFwiXFxuK3JjZmlsZT1cXFwiXFxcIlxcbitcXG4rY2xlYW51cCgpXFxuK3tcXG4rXFx0IyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkcyBhZ2FpbnN0XFxuK1xcdCMgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApXFxuK1xcdGlmIFsgLW4gXFxcIiR7aXBlcmZfcGlkfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiB2YWxpZF9zZXJ2ZXJfcGlkIFxcXCIke2lwZXJmX3BpZH1cXFwiOyB0aGVuXFxuK1xcdFxcdGtpbGwgXFxcIiR7aXBlcmZfcGlkfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0ZmlcXG4rXFx0aXBlcmZfcGlkPVxcXCJcXFwiXFxuK1xcdGlmIFsgLW4gXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdCMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXMgYm91bmQgc28gYVxcbitcXHRcXHQjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwXFxuK1xcdFxcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRcXHRraWxsIC0wIFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcXG4rXFx0XFx0XFx0c2xlZXAgMC4xXFxuK1xcdFxcdGRvbmVcXG4rXFx0XFx0a2lsbCBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdFxcdHdhaXQgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHRzZXJ2ZXJfd3JhcHBlcj1cXFwiXFxcIlxcbitcXHRmaVxcbitcXHQjIGxhc3QgcmVzb3J0LCBuYW1lc3BhY2Utc2NvcGVkIG9ubHk6IFRFUk0gdGhlIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxcbitcXHQjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMsIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlblxcbitcXHQjIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZSB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmRcXG4rXFx0IyBwa2lsbCB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cXG4rXFx0bG9jYWwgX3AgX3N0aWxsXFxuK1xcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXFxcIiRuc19wZWVyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCk7IGRvXFxuK1xcdFxcdGlmIFsgXFxcIiQoY2F0IC9wcm9jL1xcXCIkX3BcXFwiL2NvbW0gMlxcdTAwM2UvZGV2L251bGwpXFxcIiA9IFxcXCJpcGVyZjNcXFwiIF07IHRoZW5cXG4rXFx0XFx0XFx0a2lsbCBcXFwiJF9wXFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHRmaVxcbitcXHRkb25lXFxuK1xcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRfc3RpbGw9MFxcbitcXHRcXHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGwpOyBkb1xcbitcXHRcXHRcXHRpZiBbIFxcXCIkKGNhdCAvcHJvYy9cXFwiJF9wXFxcIi9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdOyB0aGVuXFxuK1xcdFxcdFxcdFxcdF9zdGlsbD0xXFxuK1xcdFxcdFxcdFxcdGJyZWFrXFxuK1xcdFxcdFxcdGZpXFxuK1xcdFxcdGRvbmVcXG4rXFx0XFx0WyBcXFwiJF9zdGlsbFxcXCIgLWVxIDAgXSBcXHUwMDI2XFx1MDAyNiBicmVha1xcbitcXHRcXHRzbGVlcCAwLjFcXG4rXFx0ZG9uZVxcbitcXHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGwpOyBkb1xcbitcXHRcXHRpZiBbIFxcXCIkKGNhdCAvcHJvYy9cXFwiJF9wXFxcIi9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdOyB0aGVuXFxuK1xcdFxcdFxcdGtpbGwgLTkgXFxcIiRfcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0ZmlcXG4rXFx0ZG9uZVxcbitcXHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcXG4rXFx0aWYgWyAtbiBcXFwiJHt3b3JrZGlyfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBbIC1kIFxcXCIke3dvcmtkaXJ9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdHJtIC1yZiBcXFwiJHt3b3JrZGlyfVxcXCJcXG4rXFx0ZmlcXG4rXFx0d29ya2Rpcj1cXFwiXFxcIlxcbitcXHRwaWRmaWxlPVxcXCJcXFwiXFxuK1xcdHJjZmlsZT1cXFwiXFxcIlxcbitcXHRpcCBuZXRucyBkZWwgXFxcIiRuc19kdXRcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGlwIG5ldG5zIGRlbCBcXFwiJG5zX3NhblxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0aXAgbmV0bnMgZGVsIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rfVxcbitcXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuK2NoZWNrX3Rvb2woKVxcbit7XFxuK1xcdGlmICEgY29tbWFuZCAtdiBcXFwiJDFcXFwiIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDFcXFwiXFxuK1xcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbitcXHRmaVxcbit9XFxuK1xcbituc3goKVxcbit7XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiQxXFxcIiBiYXNoIC1jIFxcXCIkMlxcXCJcXG4rfVxcbitcXG4rc2V0dXBfdG9wbygpXFxuK3tcXG4rXFx0bG9jYWwgbnNcXG4rXFxuK1xcdGNsZWFudXBcXG4rXFx0Zm9yIG5zIGluIFxcXCIkbnNfZHV0XFxcIiBcXFwiJG5zX3NhblxcXCIgXFxcIiRuc19wZWVyXFxcIjsgZG9cXG4rXFx0XFx0aXAgbmV0bnMgYWRkIFxcXCIkbnNcXFwiXFxuK1xcdGRvbmVcXG4rXFxuK1xcdGlwIGxpbmsgYWRkIGRfYSBuZXRucyBcXFwiJG5zX2R1dFxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgXFxcIiRuc19wZWVyXFxcIlxcbitcXHRpcCBsaW5rIGFkZCBkX2IgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zIFxcXCIkbnNfcGVlclxcXCJcXG4rXFx0aXAgbGluayBhZGQgZF9pbCBuZXRucyBcXFwiJG5zX2R1dFxcXCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyBcXFwiJG5zX3NhblxcXCJcXG4rXFxuK1xcdCMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS5cXG4rXFx0Zm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvXFxuK1xcdFxcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgaXAgbGluayBzZXQgJGlmYWNlIHVwXFxcIlxcbitcXHRkb25lXFxuK1xcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcXFwiXFxuK1xcdGRvbmVcXG4rXFxuK1xcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgc2V0IGRfaWwgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImlwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMFxcXCJcXG4rXFxuK1xcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXFxcXFxcbitcXHRcXHRzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXFxcXFxcbitcXHRcXHRpcCBsaW5rIHNldCBoc3IwIHVwXFxcIlxcbitcXHRuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxcXFxuK1xcdFxcdGlwIGxpbmsgc2V0IGhzcjEgdXA7IGlwIGFkZHIgYWRkICRwZWVyX2lwLzI0IGRldiBoc3IxXFxcIlxcbitcXG4rXFx0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJ3Mgc3VwZXJ2aXNpb24gZnJhbWVzLlxcbitcXHRzbGVlcCAyXFxuK31cXG4rXFxuK2NoZWNrX2ZlYXR1cmUoKVxcbit7XFxuK1xcdGxvY2FsIG5zPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgaWZhY2U9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBmZWF0dXJlPVxcXCIkM1xcXCJcXG4rXFx0bG9jYWwgd2FudD1cXFwiJDRcXFwiXFxuK1xcbitcXHRpZiBuc3ggXFxcIiRuc1xcXCIgXFxcImV0aHRvb2wgLWsgJGlmYWNlXFxcIiB8IGdyZXAgLXEgXFxcIl4kZmVhdHVyZTogJHdhbnRcXFwiOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdXFxcIlxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdGZpXFxuK31cXG4rXFxuKyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXFxuKyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC5cXG4rY2hlY2tfZmVhdHVyZV9ub3Rfb24oKVxcbit7XFxuK1xcdGxvY2FsIG5zPVxcXCIkMVxcXCJcXG4rXFx0bG9jYWwgaWZhY2U9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBmZWF0dXJlPVxcXCIkM1xcXCJcXG4rXFxuK1xcdGlmIG5zeCBcXFwiJG5zXFxcIiBcXFwiZXRodG9vbCAtayAkaWZhY2VcXFwiIHwgZ3JlcCAtcSBcXFwiXiRmZWF0dXJlOiBvblxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvblxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRlbHNlXFxuK1xcdFxcdGVjaG8gXFxcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgbm90IG9uIFsgT0sgXVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcXG4re1xcbitcXHRlY2hvIFxcXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXFxcIlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uXFxcIlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2EgcngtZ3JvLWh3IG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2IgcngtZ3JvLWh3IG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2lsIHJ4LWdyby1odyBvZmZcXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiSFctR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uXFxcIlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlX25vdF9vbiBcXFwiJG5zX2R1dFxcXCIgaHNyMCB0eC10Y3A2LXNlZ21lbnRhdGlvblxcbitcXHRjaGVja19mZWF0dXJlX25vdF9vbiBcXFwiJG5zX2R1dFxcXCIgaHNyMCB0eC11ZHAtc2VnbWVudGF0aW9uXFxuK1xcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFxcXCIkbnNfZHV0XFxcIiBoc3IwIHR4LWdzby1saXN0XFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkhTUiBtYXN0ZXIgc3RpbGwgYWR2ZXJ0aXNlcyBHU08tZmFtaWx5IGZlYXR1cmVzLlxcXCJcXG4rfVxcbitcXG4rYWxsb2Nfd29ya2RpcigpXFxuK3tcXG4rXFx0IyBBbGxvY2F0ZWQgb25seSBoZXJlLCBsb25nIGFmdGVyIHRoZSBpbml0aWFsIHRvcG9sb2d5IGNsZWFudXAsIHNvXFxuK1xcdCMgY2xlYW51cCgpIGF0IHNldHVwX3RvcG8oKSB0aW1lIGNhbiBuZXZlciByZW1vdmUgaXQuIG1rdGVtcCBmYWlsdXJlXFxuK1xcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cXG4rXFx0d29ya2Rpcj0kKG1rdGVtcCAtZCAvdG1wL2hzcl9ncm9fdGVzdC5YWFhYWFgpIHx8IHtcXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogbWt0ZW1wIC1kIGZhaWxlZFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRleGl0IDFcXG4rXFx0fVxcbitcXHRjaG1vZCA3MDAgXFxcIiR7d29ya2Rpcn1cXFwiXFxuK1xcdHBpZGZpbGU9XFxcIiR7d29ya2Rpcn0vaXBlcmYucGlkXFxcIlxcbitcXHRyY2ZpbGU9XFxcIiR7d29ya2Rpcn0vaXBlcmYucmNcXFwiXFxuK31cXG4rXFxuKyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBwZWVyIG5ldG5zLlxcbit2YWxpZF9zZXJ2ZXJfcGlkKClcXG4re1xcbitcXHRsb2NhbCBwPVxcXCIkMVxcXCJcXG4rXFxuK1xcdFtbIFxcXCIkcFxcXCIgPX4gXlswLTldKyQgXV0gfHwgcmV0dXJuIDFcXG4rXFx0a2lsbCAtMCBcXFwiJHBcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiAxXFxuK1xcdFsgXFxcIiQoY2F0IC9wcm9jL1xcXCIkcFxcXCIvY29tbSAyXFx1MDAzZS9kZXYvbnVsbClcXFwiID0gXFxcImlwZXJmM1xcXCIgXSB8fCByZXR1cm4gMVxcbitcXHRpcCBuZXRucyBwaWRzIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGwgfCBncmVwIC1xeCBcXFwiJHBcXFwiXFxuK31cXG4rXFxuK3N0YXJ0X2lwZXJmX3NlcnZlcigpXFxuK3tcXG4rXFx0bG9jYWwgY2FuZGlkYXRlX3BpZFxcbitcXG4rXFx0IyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiB0aGUgd3JhcHBlciByZWNvcmRzIGl0cyBleGFjdCBQSUQgYW5kIGl0c1xcbitcXHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxcbitcXHRhbGxvY193b3JrZGlyXFxuK1xcdCggbnN4IFxcXCIkbnNfcGVlclxcXCIgXFxcImlwZXJmMyAtcyAtMSBcXHUwMDNlIC9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjYgXFxcXFxcbitcXHRcXHRlY2hvIFxcXFwkISBcXHUwMDNlICR7cGlkZmlsZX07IFxcXFxcXG4rXFx0XFx0d2FpdCBcXFxcJCE7IFxcXFxcXG4rXFx0XFx0ZWNobyBcXFxcJD8gXFx1MDAzZSAke3JjZmlsZX1cXFwiICkgXFx1MDAyNlxcbitcXHRzZXJ2ZXJfd3JhcHBlcj0kIVxcbitcXHQjIHRoZSB3cmFwcGVyIHdyaXRlcyB0aGUgcGlkZmlsZSBhc3luY2hyb25vdXNseTsgd2FpdCBmb3IgaXQgdG9cXG4rXFx0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcXG4rXFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXFxuK1xcdFxcdFsgLXMgXFxcIiR7cGlkZmlsZX1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0XFx0c2xlZXAgMC4xXFxuK1xcdGRvbmVcXG4rXFx0aWYgWyAhIC1zIFxcXCIke3BpZGZpbGV9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZGlkIG5vdCBwdWJsaXNoIGEgcGlkIChubyBwaWRmaWxlKVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRjYW5kaWRhdGVfcGlkPSQoXFx1MDAzY1xcXCIke3BpZGZpbGV9XFxcIilcXG4rXFx0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFxcXCIke2NhbmRpZGF0ZV9waWR9XFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAnJHtjYW5kaWRhdGVfcGlkfScgZmFpbGVkIHZhbGlkYXRpb25cXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXFxuK1xcdGlwZXJmX3BpZD1cXFwiJHtjYW5kaWRhdGVfcGlkfVxcXCJcXG4rXFx0c2xlZXAgMVxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbisjIFByaW50IFxcXCJcXHUwMDNjYnl0ZXNcXHUwMDNlIFxcdTAwM2NwYWNrZXRzXFx1MDAzZVxcXCIgZm9yIGV4YWN0bHkgb25lIFRYIHJlY29yZCBvZiBucy9kZXY7IGFueXRoaW5nXFxuKyMgZWxzZSAobWlzc2luZywgZHVwbGljYXRlZCwgbm9uLW51bWVyaWMpIGlzIGEgaGFyZCBGQUlMLlxcbityZWFkX3R4X2NvdW50ZXJzKClcXG4re1xcbitcXHRsb2NhbCBucz1cXFwiJDFcXFwiIGRldj1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIG91dCBjbnRcXG4rXFxuK1xcdG91dD0kKG5zeCBcXFwiJG5zXFxcIiBcXFwiaXAgLXMgbGluayBzaG93ICRkZXZcXFwiIHwgXFxcXFxcbitcXHRcXHRhd2sgJy9eICtUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0nKVxcbitcXHRjbnQ9JChlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLWMgJ15bMC05XSogWzAtOV0qJCcpXFxuK1xcdGlmIFsgXFxcIiRjbnRcXFwiIC1uZSAxIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2IChyZWNvcmRzPSRjbnQpXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuK2V2YWxfY291bnRlcl9kZWx0YSgpXFxuK3tcXG4rXFx0bG9jYWwgbmFtZT1cXFwiJDFcXFwiIGIwPVxcXCIkMlxcXCIgcDA9XFxcIiQzXFxcIiBiMT1cXFwiJDRcXFwiIHAxPVxcXCIkNVxcXCIgb3A9XFxcIiQ2XFxcIiBsaW1pdD1cXFwiJDdcXFwiXFxuK1xcdGxvY2FsIGJkIHBkXFxuK1xcbitcXHRpZiAhIFtbIFxcXCIkYjBcXFwiID1+IF5bMC05XSskIFxcdTAwMjZcXHUwMDI2IFxcXCIkYjFcXFwiID1+IF5bMC05XSskIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4rXFx0XFx0XFxcIiRwMFxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcIiRwMVxcXCIgPX4gXlswLTldKyQgXV07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWVcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0YmQ9JCgoYjEgLSBiMCkpXFxuK1xcdHBkPSQoKHAxIC0gcDApKVxcbitcXHRpZiBbIFxcXCIkYmRcXFwiIC1sdCAwIF0gfHwgWyBcXFwiJHBkXFxcIiAtbGUgMCBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNvdW50ZXIgZGVsdGEgaW52YWxpZCBmb3IgJG5hbWUgKGJ5dGVzPSRiZCBwa3RzPSRwZClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aWYgWyBcXFwiJG9wXFxcIiA9IFxcXCJndFxcXCIgXTsgdGhlblxcbitcXHRcXHRpZiBbIFxcXCIkYmRcXFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxcbitcXHRcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXFx1MDAzYz0gJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGVsc2VcXG4rXFx0XFx0aWYgWyBcXFwiJGJkXFxcIiAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwiRkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFxcdTAwM2UgJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXFxcIlxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbitkb190c29fc3RyZWFtX3Rlc3QoKVxcbit7XFxuK1xcdGxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmNcXG4rXFx0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXFxuK1xcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMVxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImV0aHRvb2wgLUsgczAgdHNvIG9uIGdzbyBvblxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX3NhblxcXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkNvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cXFwiXFxuK1xcdHN0YXJ0X2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFxuK1xcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxcbitcXHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xcbitcXHQjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWFxcbitcXHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXFxuK1xcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXFxuK1xcdHNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wXFxuK1xcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19zYW5cXFwiIHMwKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBhX2IwIGFfcDAgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2EpXFxuK0VPRlxcbitcXHRyZWFkIC1yIGJfYjAgYl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYilcXG4rRU9GXFxuK1xcdFsgXFxcIiR7cmV0Oi0wfVxcXCIgLWVxIDAgXSB8fCByZXR1cm5cXG4rXFxuK1xcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxcbitcXHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXFxuK1xcdCMgVW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGFcXG4rXFx0IyBmdW5jdGlvbmFsIHByb2JsZW0uXFxuK1xcdGlmICEgb3V0PSQobnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxcXFxuK1xcdFxcdC1iIDJHIC10IDEwXFxcIiAyXFx1MDAzZVxcdTAwMjYxKTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDpcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFxuK1xcdHJlYWQgLXIgc2FuX2IxIHNhbl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19zYW5cXFwiIHMwKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBhX2IxIGFfcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2EpXFxuK0VPRlxcbitcXHRyZWFkIC1yIGJfYjEgYl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYilcXG4rRU9GXFxuK1xcbitcXHRldmFsX2NvdW50ZXJfZGVsdGEgXFxcIlNBTiBzMCBUWFxcXCIgXFxcIiRzYW5fYjBcXFwiIFxcXCIkc2FuX3AwXFxcIiBcXFwiJHNhbl9iMVxcXCIgXFxcIiRzYW5fcDFcXFwiIFxcXFxcXG4rXFx0XFx0Z3QgXFxcIiRTQU5fQVZHX01JTlxcXCJcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJEVVQgZF9hIFRYXFxcIiBcXFwiJGFfYjBcXFwiIFxcXCIkYV9wMFxcXCIgXFxcIiRhX2IxXFxcIiBcXFwiJGFfcDFcXFwiIFxcXFxcXG4rXFx0XFx0bGUgXFxcIiRMQU5fQVZHX01BWFxcXCJcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJEVVQgZF9iIFRYXFxcIiBcXFwiJGJfYjBcXFwiIFxcXCIkYl9wMFxcXCIgXFxcIiRiX2IxXFxcIiBcXFwiJGJfcDFcXFwiIFxcXFxcXG4rXFx0XFx0bGUgXFxcIiRMQU5fQVZHX01BWFxcXCJcXG4rXFx0WyBcXFwiJHtyZXQ6LTB9XFxcIiAtZXEgMCBdIHx8IHJldHVyblxcbitcXG4rXFx0IyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFwIHRoZVxcbitcXHQjIHdyYXBwZXIsIHRoZW4gUkVRVUlSRSB0aGUgcmNmaWxlIHdpdGggdGhlIHNlcnZlcidzIHJlYWwgc3RhdHVzXFxuK1xcdHdhaXQgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIlxcbitcXHRzZXJ2ZXJfd3JhcHBlcj1cXFwiXFxcIlxcbitcXHRpZiBbICEgLXMgXFxcIiR7cmNmaWxlfVxcXCIgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcdHNlcnZlcl9yYz0kKGNhdCBcXFwiJHtyY2ZpbGV9XFxcIilcXG4rXFx0aWYgISBbWyBcXFwiJHNlcnZlcl9yY1xcXCIgPX4gXlswLTldKyQgXV0gfHwgWyBcXFwiJHNlcnZlcl9yY1xcXCIgLW5lIDAgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIGV4aXRlZCB3aXRoIHJjPScke3NlcnZlcl9yY30nXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVyblxcbitcXHRmaVxcbitcXHRpcGVyZl9waWQ9XFxcIlxcXCJcXG4rXFxuK1xcdCMgc2Vjb25kYXJ5IGhlYWx0aCBzaWduYWwgb25seTogYW5jaG9yZWQsIHNpbmdsZS1tYXRjaCwgbnVtZXJpYyDigJRcXG4rXFx0IyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyXFxuK1xcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxcbitcXHRzZW5kZXJfcmV0cj0kKGVjaG8gXFxcIiRvdXRcXFwiIHwgYXdrICcvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfScpXFxuK1xcdGlmIFsgXFxcIiQoZWNobyBcXFwiJHNlbmRlcl9yZXRyXFxcIiB8IGdyZXAgLUVjICdeWzAtOV0rJCcpXFxcIiAtbmUgMSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiSU5GTzogVENQIHN0cmVhbSBkb25lO1xcXCIgXFxcXFxcbitcXHRcXHRcXFwic2VuZGVyIHJldHJhbnNtaXRzPSRzZW5kZXJfcmV0ciAoc2Vjb25kYXJ5IHNpZ25hbClcXFwiXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtRSBcXFwic2VuZGVyfHJlY2VpdmVyXFxcIlxcbit9XFxuK1xcbitjaGVja19wcmVyZXF1aXNpdGVzXFxuK2NoZWNrX3Rvb2wgZXRodG9vbFxcbitjaGVja190b29sIGlwZXJmM1xcbitjaGVja190b29sIHRpbWVvdXRcXG4rXFxuKyMgaXByb3V0ZTIgbXVzdCBrbm93IHRoZSBIU1IgaW50ZXJsaW5rIHN5bnRheC5cXG4raWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcXHUwMDNlXFx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK1xcbitzZXR1cF90b3BvXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cXFwiXFxuK2RvX3BpbmcgXFxcIiRuc19zYW5cXFwiIFxcXCIkcGVlcl9pcFxcXCJcXG4rc3RvcF9pZl9lcnJvciBcXFwiSW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cXFwiXFxuK1xcbitkb19ncm9fZmVhdHVyZV9jaGVja3NcXG4rZG9fdHNvX3N0cmVhbV90ZXN0XFxuK3N0b3BfaWZfZXJyb3IgXFxcIkdTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlxcXCJcXG4rXFxuK2VjaG8gXFxcIklORk86IEFsbCBnb29kLlxcXCJcXG4rZXhpdCAkcmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU3OjQ3LjE1Njc4MjY3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyODAxNTI0NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgZHJpdmVyIGFuZCBjb3JlIG5ldHdvcmtpbmcgdG8gZGlzYWJsZSBHUk8gb24gZW5zbGF2ZWQgZGV2aWNlcyBhbmQgaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGluIEhTUiBmb3J3YXJkaW5nLiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBjYW4gYmUgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI5ODRhMDBmN2FiMDc1NmE2MTFjZGVkMTcxOWRmZGNmMWU4MWRlYzVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwNTo1Nzo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Ni4uZWJhMmMyNmE0OWJhOGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMzQzNCw2ICszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgdW5saW5rKTtcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGRldl9sb29wYmFja194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiKTtcbiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDU5MzNjNWRhYjA5ZWUxLi5hNmNmMmFkYzg2MjU2NSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTE4NDAsNiArMTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHR9XG4gfVxuIFxuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2O1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbitcbitcdGRldi1cdTAwM2V3YW50ZWRfZmVhdHVyZXMgXHUwMDI2PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpO1xuK1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcbitcdFx0bmV0ZGV2X1dBUk4oZGV2LCBcImZhaWxlZCB0byBkaXNhYmxlIEdSTyFcXG5cIik7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG4rXHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0fVxuK31cbitcbiAvKipcbiAgKlx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuICAqXHRAZGV2OiBkZXZpY2VcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmNcbmluZGV4IDQzNzk0N2RkMDhlZDUzLi4wMmZiMjE2Mjk1MTI4NCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xuKysrIGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5AQCAtMjY5LDYgKzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2xybyk7XG4gXG4rLyoqXG4rICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4rICogQGRldjogZGV2aWNlXG4rICpcbisgKiBEaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0IGRldmljZS4gIE11c3QgYmVcbisgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlXG4rICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxuKyAqL1xuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4rXHRuZXRpZl9kaXNhYmxlX2dybyhkZXYpO1xuK1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xuK1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjU5Li4yNDhjYmIxNDJlMjFlMSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHNrYi1cdTAwM2VkZXYgPSBtYXN0ZXItXHUwMDNlZGV2O1xuIFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuQEAgLTMzNSw2ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXNlcXVlbmNlX25yKTtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yKys7XG4gXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gdHlwZTtcbiBcdC8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovXG5AQCAtMzU2LDE0ICszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdHJldHVybjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG5AQCAtMzkwLDYgKzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XG4gXHRoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKys7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuIFxuQEAgLTM5NywxMyArMzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiB9XG4gXG4gLyogQW5ub3VuY2UgKHN1cGVydmlzaW9uIGZyYW1lKSB0aW1lciBmdW5jdGlvblxuQEAgLTY1OSw3ICs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4gXG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8XG4tXHRcdFx0ICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8XG4rXHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNjQuLjNmY2RiYWM0OWM1OWRhIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gI2luY2x1ZGUgXCJoc3JfbWFpbi5oXCJcbiAjaW5jbHVkZSBcImhzcl9mcmFtZXJlZy5oXCJcbiBcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxuIFx0ICAgIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4gXHRcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXG4tXHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRmcmFtZS1cdTAwM2VzZXF1ZW5jZV9uciA9IGhzci1cdTAwM2VzZXF1ZW5jZV9ucjtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yKys7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtNzMxLDcgKzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuK3N0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbiBcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyBmcmFtZTtcbiBcbkBAIC03NjAsMyArNzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbiBcdGtmcmVlX3NrYihza2IpO1xuIH1cbitcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuKyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci5cbisgKi9cbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xuK1xuK1x0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xuK1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxuK1x0ICogb24gdGhlIG1hc3Rlciwgb3IgYXJyaXZpbmcgdW50YWdnZWQgZnJvbSB0aGUgU0FOIHNpZGUgb24gdGhlXG4rXHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxuK1x0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxuK1x0ICogcmVjb3ZlcjsgYW4gYWxyZWFkeS10YWdnZWQgSFNSL1BSUCBzdXBlci1wYWNrZXQgdmlvbGF0ZXNcbitcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxuK1x0ICovXG4rXHRpZiAocG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XG4rXHQgICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX1BSUCkpXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXG4rXHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxuK1x0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cbitcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4rXHQgKi9cbitcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcbitcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHdoaWxlIChzZWdzKSB7XG4rXHRcdG5leHQgPSBzZWdzLVx1MDAzZW5leHQ7XG4rXHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG4rXHRcdHNlZ3MgPSBuZXh0O1xuK1x0fVxuK1x0cmV0dXJuO1xuK1xuK2Ryb3BfZ3NvOlxuK1x0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xuK1x0a2ZyZWVfc2tiKHNrYik7XG4rfVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5pbmRleCBkOWFmOWU2NWY3MmYwNy4uYzdmZDAyMWYwM2IxZjQgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHR9XG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFxuLVx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcbi1cdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxuLVx0ICovXG4tXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0fVxuK1x0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4gXG4gZmluaXNoX2NvbnN1bWU6XG4gXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbkBAIC0xNzAsNiArMTYxLDcgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gZmFpbF9yeF9oYW5kbGVyO1xuIFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XG4rXHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzZC4uMGQxMDU0NzZlN2M1MGQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICszLDcgQEBcbiB0b3Bfc3JjZGlyID0gLi4vLi4vLi4vLi4vLi5cbiBcbiBURVNUX1BST0dTIDo9IFxcXG4rXHRoc3JfZ3JvX3N1cGVycGFja2V0LnNoIFxcXG4gXHRoc3JfcGluZy5zaCBcXFxuIFx0aHNyX3JlZGJveC5zaCBcXFxuIFx0bGlua19mYXVsdHMuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNGNhMmE3ZjM5NWViZDBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCArMSw0MzcgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6XG4rI1xuKyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuKyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4rIyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbisjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkuIEV2aWRlbmNlOlxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuKyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCdzIExBTiBwb3J0cy5cbisjXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4rI1xuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xuKyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuKyNcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxuKyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK25zX2R1dD1cImhzci1ncm8tZHV0XCJcbituc19zYW49XCJoc3ItZ3JvLXNhblwiXG4rbnNfcGVlcj1cImhzci1ncm8tcGVlclwiXG4rc2FuX2lwPVwiMTAwLjY0LjAuMVwiXG4rcGVlcl9pcD1cIjEwMC42NC4wLjNcIlxuK1xuKyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcbisjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGFcbisjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLlxuK1NBTl9BVkdfTUlOPTIwNDhcbitMQU5fQVZHX01BWD0xNTE0XG4rXG4raXBlcmZfcGlkPVwiXCJcbitzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rd29ya2Rpcj1cIlwiXG4rcGlkZmlsZT1cIlwiXG4rcmNmaWxlPVwiXCJcbitcbitjbGVhbnVwKClcbit7XG4rXHQjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzIGFnYWluc3RcbitcdCMgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApXG4rXHRpZiBbIC1uIFwiJHtpcGVyZl9waWR9XCIgXSBcdTAwMjZcdTAwMjYgdmFsaWRfc2VydmVyX3BpZCBcIiR7aXBlcmZfcGlkfVwiOyB0aGVuXG4rXHRcdGtpbGwgXCIke2lwZXJmX3BpZH1cIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRmaVxuK1x0aXBlcmZfcGlkPVwiXCJcbitcdGlmIFsgLW4gXCIke3NlcnZlcl93cmFwcGVyfVwiIF07IHRoZW5cbitcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhXG4rXHRcdCMgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlciBoYW5nIGNsZWFudXBcbitcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFx0a2lsbCAtMCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuK1x0XHRcdHNsZWVwIDAuMVxuK1x0XHRkb25lXG4rXHRcdGtpbGwgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0d2FpdCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rXHRmaVxuK1x0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMgcHJvY2Vzc2VzIHRoYXRcbitcdCMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucywgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuXG4rXHQjIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZSB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmRcbitcdCMgcGtpbGwgd291bGQgc2NhbiB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXG4rXHRsb2NhbCBfcCBfc3RpbGxcbitcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRpZiBbIFwiJChjYXQgL3Byb2MvXCIkX3BcIi9jb21tIDJcdTAwM2UvZGV2L251bGwpXCIgPSBcImlwZXJmM1wiIF07IHRoZW5cbitcdFx0XHRraWxsIFwiJF9wXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRmaVxuK1x0ZG9uZVxuK1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdF9zdGlsbD0wXG4rXHRcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRcdGlmIFsgXCIkKGNhdCAvcHJvYy9cIiRfcFwiL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXTsgdGhlblxuK1x0XHRcdFx0X3N0aWxsPTFcbitcdFx0XHRcdGJyZWFrXG4rXHRcdFx0ZmlcbitcdFx0ZG9uZVxuK1x0XHRbIFwiJF9zdGlsbFwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4rXHRcdHNsZWVwIDAuMVxuK1x0ZG9uZVxuK1x0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcIiRuc19wZWVyXCIgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4rXHRcdGlmIFsgXCIkKGNhdCAvcHJvYy9cIiRfcFwiL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXTsgdGhlblxuK1x0XHRcdGtpbGwgLTkgXCIkX3BcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdGZpXG4rXHRkb25lXG4rXHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcbitcdGlmIFsgLW4gXCIke3dvcmtkaXJ9XCIgXSBcdTAwMjZcdTAwMjYgWyAtZCBcIiR7d29ya2Rpcn1cIiBdOyB0aGVuXG4rXHRcdHJtIC1yZiBcIiR7d29ya2Rpcn1cIlxuK1x0ZmlcbitcdHdvcmtkaXI9XCJcIlxuK1x0cGlkZmlsZT1cIlwiXG4rXHRyY2ZpbGU9XCJcIlxuK1x0aXAgbmV0bnMgZGVsIFwiJG5zX2R1dFwiIDJcdTAwM2UvZGV2L251bGxcbitcdGlwIG5ldG5zIGRlbCBcIiRuc19zYW5cIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRpcCBuZXRucyBkZWwgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGxcbit9XG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbitjaGVja190b29sKClcbit7XG4rXHRpZiAhIGNvbW1hbmQgLXYgXCIkMVwiIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0ZWNobyBcIlNLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxXCJcbitcdFx0ZXhpdCAka3NmdF9za2lwXG4rXHRmaVxuK31cbitcbituc3goKVxuK3tcbitcdGlwIG5ldG5zIGV4ZWMgXCIkMVwiIGJhc2ggLWMgXCIkMlwiXG4rfVxuK1xuK3NldHVwX3RvcG8oKVxuK3tcbitcdGxvY2FsIG5zXG4rXG4rXHRjbGVhbnVwXG4rXHRmb3IgbnMgaW4gXCIkbnNfZHV0XCIgXCIkbnNfc2FuXCIgXCIkbnNfcGVlclwiOyBkb1xuK1x0XHRpcCBuZXRucyBhZGQgXCIkbnNcIlxuK1x0ZG9uZVxuK1xuK1x0aXAgbGluayBhZGQgZF9hIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFwiJG5zX3BlZXJcIlxuK1x0aXAgbGluayBhZGQgZF9iIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zIFwiJG5zX3BlZXJcIlxuK1x0aXAgbGluayBhZGQgZF9pbCBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFwiJG5zX3NhblwiXG4rXG4rXHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXG4rXHRmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG9cbitcdFx0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBpcCBsaW5rIHNldCAkaWZhY2UgdXBcIlxuK1x0ZG9uZVxuK1x0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXG4rXHRcdG5zeCBcIiRuc19wZWVyXCIgXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwiXG4rXHRkb25lXG4rXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIHNldCBkX2lsIHVwXCJcbitcdG5zeCBcIiRuc19zYW5cIiBcImlwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMFwiXG4rXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxuK1x0XHRpcCBsaW5rIHNldCBoc3IwIHVwXCJcbitcdG5zeCBcIiRuc19wZWVyXCIgXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxuK1x0XHRpcCBsaW5rIHNldCBoc3IxIHVwOyBpcCBhZGRyIGFkZCAkcGVlcl9pcC8yNCBkZXYgaHNyMVwiXG4rXG4rXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXG4rXHRzbGVlcCAyXG4rfVxuK1xuK2NoZWNrX2ZlYXR1cmUoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIlxuK1x0bG9jYWwgaWZhY2U9XCIkMlwiXG4rXHRsb2NhbCBmZWF0dXJlPVwiJDNcIlxuK1x0bG9jYWwgd2FudD1cIiQ0XCJcbitcbitcdGlmIG5zeCBcIiRuc1wiIFwiZXRodG9vbCAtayAkaWZhY2VcIiB8IGdyZXAgLXEgXCJeJGZlYXR1cmU6ICR3YW50XCI7IHRoZW5cbitcdFx0ZWNobyBcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdXCJcbitcdGVsc2VcbitcdFx0ZWNobyBcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGZpXG4rfVxuK1xuKyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXG4rIyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LlxuK2NoZWNrX2ZlYXR1cmVfbm90X29uKClcbit7XG4rXHRsb2NhbCBucz1cIiQxXCJcbitcdGxvY2FsIGlmYWNlPVwiJDJcIlxuK1x0bG9jYWwgZmVhdHVyZT1cIiQzXCJcbitcbitcdGlmIG5zeCBcIiRuc1wiIFwiZXRodG9vbCAtayAkaWZhY2VcIiB8IGdyZXAgLXEgXCJeJGZlYXR1cmU6IG9uXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgb25cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXCJcbitcdGZpXG4rfVxuK1xuK2RvX2dyb19mZWF0dXJlX2NoZWNrcygpXG4re1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0c3RvcF9pZl9lcnJvciBcIkdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cIlxuK1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYSByeC1ncm8taHcgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYiByeC1ncm8taHcgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfaWwgcngtZ3JvLWh3IG9mZlxuK1x0c3RvcF9pZl9lcnJvciBcIkhXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cIlxuK1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgaHNyMCBnZW5lcmljLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBoc3IwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwiJG5zX2R1dFwiIGhzcjAgdHgtdGNwNi1zZWdtZW50YXRpb25cbitcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwiJG5zX2R1dFwiIGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvblxuK1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCIkbnNfZHV0XCIgaHNyMCB0eC1nc28tbGlzdFxuK1x0c3RvcF9pZl9lcnJvciBcIkhTUiBtYXN0ZXIgc3RpbGwgYWR2ZXJ0aXNlcyBHU08tZmFtaWx5IGZlYXR1cmVzLlwiXG4rfVxuK1xuK2FsbG9jX3dvcmtkaXIoKVxuK3tcbitcdCMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzb1xuK1x0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcbitcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cbitcdHdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7XG4rXHRcdGVjaG8gXCJGQUlMOiBta3RlbXAgLWQgZmFpbGVkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCAxXG4rXHR9XG4rXHRjaG1vZCA3MDAgXCIke3dvcmtkaXJ9XCJcbitcdHBpZGZpbGU9XCIke3dvcmtkaXJ9L2lwZXJmLnBpZFwiXG4rXHRyY2ZpbGU9XCIke3dvcmtkaXJ9L2lwZXJmLnJjXCJcbit9XG4rXG4rIyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIHBlZXIgbmV0bnMuXG4rdmFsaWRfc2VydmVyX3BpZCgpXG4re1xuK1x0bG9jYWwgcD1cIiQxXCJcbitcbitcdFtbIFwiJHBcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxuK1x0a2lsbCAtMCBcIiRwXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gMVxuK1x0WyBcIiQoY2F0IC9wcm9jL1wiJHBcIi9jb21tIDJcdTAwM2UvZGV2L251bGwpXCIgPSBcImlwZXJmM1wiIF0gfHwgcmV0dXJuIDFcbitcdGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwgfCBncmVwIC1xeCBcIiRwXCJcbit9XG4rXG4rc3RhcnRfaXBlcmZfc2VydmVyKClcbit7XG4rXHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4rXG4rXHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHRoZSB3cmFwcGVyIHJlY29yZHMgaXRzIGV4YWN0IFBJRCBhbmQgaXRzXG4rXHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuK1x0YWxsb2Nfd29ya2RpclxuK1x0KCBuc3ggXCIkbnNfcGVlclwiIFwiaXBlcmYzIC1zIC0xIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IFxcXG4rXHRcdGVjaG8gXFwkISBcdTAwM2UgJHtwaWRmaWxlfTsgXFxcbitcdFx0d2FpdCBcXCQhOyBcXFxuK1x0XHRlY2hvIFxcJD8gXHUwMDNlICR7cmNmaWxlfVwiICkgXHUwMDI2XG4rXHRzZXJ2ZXJfd3JhcHBlcj0kIVxuK1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4rXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuK1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFsgLXMgXCIke3BpZGZpbGV9XCIgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXHRpZiBbICEgLXMgXCIke3BpZGZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQgKG5vIHBpZGZpbGUpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRjYW5kaWRhdGVfcGlkPSQoXHUwMDNjXCIke3BpZGZpbGV9XCIpXG4rXHRpZiAhIHZhbGlkX3NlcnZlcl9waWQgXCIke2NhbmRpZGF0ZV9waWR9XCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICcke2NhbmRpZGF0ZV9waWR9JyBmYWlsZWQgdmFsaWRhdGlvblwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4rXHRpcGVyZl9waWQ9XCIke2NhbmRpZGF0ZV9waWR9XCJcbitcdHNsZWVwIDFcbitcdHJldHVybiAwXG4rfVxuK1xuKyMgUHJpbnQgXCJcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCIgZm9yIGV4YWN0bHkgb25lIFRYIHJlY29yZCBvZiBucy9kZXY7IGFueXRoaW5nXG4rIyBlbHNlIChtaXNzaW5nLCBkdXBsaWNhdGVkLCBub24tbnVtZXJpYykgaXMgYSBoYXJkIEZBSUwuXG4rcmVhZF90eF9jb3VudGVycygpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiIGRldj1cIiQyXCJcbitcdGxvY2FsIG91dCBjbnRcbitcbitcdG91dD0kKG5zeCBcIiRuc1wiIFwiaXAgLXMgbGluayBzaG93ICRkZXZcIiB8IFxcXG4rXHRcdGF3ayAnL14gK1RYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfScpXG4rXHRjbnQ9JChlY2hvIFwiJG91dFwiIHwgZ3JlcCAtYyAnXlswLTldKiBbMC05XSokJylcbitcdGlmIFsgXCIkY250XCIgLW5lIDEgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2IChyZWNvcmRzPSRjbnQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRlY2hvIFwiJG91dFwiXG4rXHRyZXR1cm4gMFxuK31cbitcbitldmFsX2NvdW50ZXJfZGVsdGEoKVxuK3tcbitcdGxvY2FsIG5hbWU9XCIkMVwiIGIwPVwiJDJcIiBwMD1cIiQzXCIgYjE9XCIkNFwiIHAxPVwiJDVcIiBvcD1cIiQ2XCIgbGltaXQ9XCIkN1wiXG4rXHRsb2NhbCBiZCBwZFxuK1xuK1x0aWYgISBbWyBcIiRiMFwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcIiRiMVwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcXFxuK1x0XHRcIiRwMFwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcIiRwMVwiID1+IF5bMC05XSskIF1dOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0YmQ9JCgoYjEgLSBiMCkpXG4rXHRwZD0kKChwMSAtIHAwKSlcbitcdGlmIFsgXCIkYmRcIiAtbHQgMCBdIHx8IFsgXCIkcGRcIiAtbGUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lIChieXRlcz0kYmQgcGt0cz0kcGQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRpZiBbIFwiJG9wXCIgPSBcImd0XCIgXTsgdGhlblxuK1x0XHRpZiBbIFwiJGJkXCIgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIkZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2M9ICRsaW1pdFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRyZXR1cm4gMVxuK1x0XHRmaVxuK1x0ZWxzZVxuK1x0XHRpZiBbIFwiJGJkXCIgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIkZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2UgJGxpbWl0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0XHRyZXQ9MVxuK1x0XHRcdHJldHVybiAxXG4rXHRcdGZpXG4rXHRmaVxuK1x0ZWNobyBcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXCIgXFxcbitcdFx0XCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXCJcbitcdHJldHVybiAwXG4rfVxuK1xuK2RvX3Rzb19zdHJlYW1fdGVzdCgpXG4re1xuK1x0bG9jYWwgb3V0IHNlbmRlcl9yZXRyIHNlcnZlcl9yY1xuK1x0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4rXHRsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIGJfYjAgYl9wMCBiX2IxIGJfcDFcbitcbitcdGVjaG8gXCJJTkZPOiBFbmFibGluZyBUU08vR1NPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlwiXG4rXHRuc3ggXCIkbnNfc2FuXCIgXCJldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb25cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19zYW5cIiBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cbitcdHN0b3BfaWZfZXJyb3IgXCJDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1xuK1x0ZWNobyBcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBIU1IgRFVULlwiXG4rXHRzdGFydF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuXG4rXG4rXHQjIENvdW50ZXIgc25hcHNob3RzIGFyb3VuZCB0aGUgc3RyZWFtIHdpbmRvdy4gVGhlIFNBTi1zaWRlIGF2ZXJhZ2VcbitcdCMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzXG4rXHQjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWFxuK1x0IyAoYWdncmVnYXRlIHByb29mIHRoYXQgYnVsayBvdXRwdXQgd2FzIHNlZ21lbnRlZCBwZXItZnJhbWUpLiBUaGVzZVxuK1x0IyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi5cbitcdHNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wXG4rXHRyZWFkIC1yIHNhbl9iMCBzYW5fcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX3NhblwiIHMwKVxuK0VPRlxuK1x0cmVhZCAtciBhX2IwIGFfcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIGRfYSlcbitFT0ZcbitcdHJlYWQgLXIgYl9iMCBiX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2IpXG4rRU9GXG4rXHRbIFwiJHtyZXQ6LTB9XCIgLWVxIDAgXSB8fCByZXR1cm5cbitcbitcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxuK1x0IyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LlxuK1x0IyBVbmNhcHBlZCBydW5zIGZsYXAgYXQgVk0vQ0kgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYVxuK1x0IyBmdW5jdGlvbmFsIHByb2JsZW0uXG4rXHRpZiAhIG91dD0kKG5zeCBcIiRuc19zYW5cIiBcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXFxcbitcdFx0LWIgMkcgLXQgMTBcIiAyXHUwMDNlXHUwMDI2MSk7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOlwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGVjaG8gXCIkb3V0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1xuK1x0cmVhZCAtciBzYW5fYjEgc2FuX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19zYW5cIiBzMClcbitFT0ZcbitcdHJlYWQgLXIgYV9iMSBhX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2EpXG4rRU9GXG4rXHRyZWFkIC1yIGJfYjEgYl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9iKVxuK0VPRlxuK1xuK1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwiU0FOIHMwIFRYXCIgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCIgXCIkc2FuX2IxXCIgXCIkc2FuX3AxXCIgXFxcbitcdFx0Z3QgXCIkU0FOX0FWR19NSU5cIlxuK1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwiRFVUIGRfYSBUWFwiIFwiJGFfYjBcIiBcIiRhX3AwXCIgXCIkYV9iMVwiIFwiJGFfcDFcIiBcXFxuK1x0XHRsZSBcIiRMQU5fQVZHX01BWFwiXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJEVVQgZF9iIFRYXCIgXCIkYl9iMFwiIFwiJGJfcDBcIiBcIiRiX2IxXCIgXCIkYl9wMVwiIFxcXG4rXHRcdGxlIFwiJExBTl9BVkdfTUFYXCJcbitcdFsgXCIke3JldDotMH1cIiAtZXEgMCBdIHx8IHJldHVyblxuK1xuK1x0IyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFwIHRoZVxuK1x0IyB3cmFwcGVyLCB0aGVuIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIHRoZSBzZXJ2ZXIncyByZWFsIHN0YXR1c1xuK1x0d2FpdCBcIiR7c2VydmVyX3dyYXBwZXJ9XCJcbitcdHNlcnZlcl93cmFwcGVyPVwiXCJcbitcdGlmIFsgISAtcyBcIiR7cmNmaWxlfVwiIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdHNlcnZlcl9yYz0kKGNhdCBcIiR7cmNmaWxlfVwiKVxuK1x0aWYgISBbWyBcIiRzZXJ2ZXJfcmNcIiA9fiBeWzAtOV0rJCBdXSB8fCBbIFwiJHNlcnZlcl9yY1wiIC1uZSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JyR7c2VydmVyX3JjfSdcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRpcGVyZl9waWQ9XCJcIlxuK1xuK1x0IyBzZWNvbmRhcnkgaGVhbHRoIHNpZ25hbCBvbmx5OiBhbmNob3JlZCwgc2luZ2xlLW1hdGNoLCBudW1lcmljIOKAlFxuK1x0IyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyXG4rXHQjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS5cbitcdHNlbmRlcl9yZXRyPSQoZWNobyBcIiRvdXRcIiB8IGF3ayAnL3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0nKVxuK1x0aWYgWyBcIiQoZWNobyBcIiRzZW5kZXJfcmV0clwiIHwgZ3JlcCAtRWMgJ15bMC05XSskJylcIiAtbmUgMSBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBjYW5ub3QgcGFyc2Ugc2VuZGVyIHJldHJhbnNtaXRzIHJlbGlhYmx5XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZWNobyBcIiRvdXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRlY2hvIFwiSU5GTzogVENQIHN0cmVhbSBkb25lO1wiIFxcXG4rXHRcdFwic2VuZGVyIHJldHJhbnNtaXRzPSRzZW5kZXJfcmV0ciAoc2Vjb25kYXJ5IHNpZ25hbClcIlxuK1x0ZWNobyBcIiRvdXRcIiB8IGdyZXAgLUUgXCJzZW5kZXJ8cmVjZWl2ZXJcIlxuK31cbitcbitjaGVja19wcmVyZXF1aXNpdGVzXG4rY2hlY2tfdG9vbCBldGh0b29sXG4rY2hlY2tfdG9vbCBpcGVyZjNcbitjaGVja190b29sIHRpbWVvdXRcbitcbisjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXG4raWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcdTAwM2VcdTAwMjYxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuXG4rXHRlY2hvIFwiU0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFwiXG4rXHRleGl0ICRrc2Z0X3NraXBcbitmaVxuK1xuK3NldHVwX3RvcG9cbitcbitlY2hvIFwiSU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cIlxuK2RvX3BpbmcgXCIkbnNfc2FuXCIgXCIkcGVlcl9pcFwiXG4rc3RvcF9pZl9lcnJvciBcIkluaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuXCJcbitcbitkb19ncm9fZmVhdHVyZV9jaGVja3Ncbitkb190c29fc3RyZWFtX3Rlc3RcbitzdG9wX2lmX2Vycm9yIFwiR1NPIHN1cGVyLXBhY2tldCBzdHJlYW0gdGVzdCBmYWlsZWQuXCJcbitcbitlY2hvIFwiSU5GTzogQWxsIGdvb2QuXCJcbitleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU3OjQ3LjE1Njc4MzY1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjUyMDc1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSFNSIEdSTy9HU08gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgdGhlIEhTUiBkcml2ZXIgaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvIGFkZHJlc3MgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgYW5kIEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQgKEdTTykuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0cnlpbmcgdG8gZGlzYWJsZSBHUk8gb24gdGhlIEhTUiBuZXQgZGV2aWNlIHVzaW5nIGBuZXRpZl9kaXNhYmxlX2dybygpYCBhbmQgYGRldl9kaXNhYmxlX2dybygpYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGV5J3ZlIGFsc28gY2xlYW5lZCB1cCBgaHNyX2Rldl9zZXR1cGAgYnkgcmVtb3ZpbmcgdGhlIGBORVRJRl9GX0dTT19NQVNLYCBmZWF0dXJlLiBUaGV5J3ZlIGdvdCBtb2RpZmljYXRpb25zIHRvIGBoc3JfZm9yd2FyZF9za2JgIHRvIGhhbmRsZSB0aGUgR1NPIHN1cGVyLXBhY2tldHMsIHNlZ21lbnRpbmcgdGhlbSBiZWZvcmUgZm9yd2FyZGluZywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIGxhcmdlIHBhY2tldHMgaW4gdGhpcyBjb250ZXh0LiBUaGVyZSdzIGFsc28gYSBjYWxsIHRvIGBkZXZfZGlzYWJsZV9ncm8oZGV2KWAgaW4gYGhzcl9wb3J0ZGV2X3NldHVwYC4gQW5kLCB0aGVyZSdzIGEgbmV3IHNlbGZ0ZXN0LCBgaHNyX2dyb19zdXBlcnBhY2tldC5zaGAsIHRvIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcyBleHBlY3RlZCwgd2hpY2ggaXMgZ3JlYXQgdG8gc2VlLlxuXG5Ob3csIGZyb20gdGhlIGZpbGUgbGlzdCDigJMgYG5ldC9jb3JlL2Rldi5jYCwgYG5ldC9jb3JlL2Rldl9hcGkuY2AsIGBuZXQvaHNyL2hzcl9kZXZpY2UuY2AsIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBhbmQgYG5ldC9oc3IvaHNyX3NsYXZlLmNgIOKAkyB0aGlzIGlzIGRlZmluaXRlbHkgdG91Y2hpbmcgY29yZSBrZXJuZWwgbmV0d29yayBsb2dpYyBhbmQgdGhlIG5ldHdvcmsgZHJpdmVyIGl0c2VsZi4gVGhhdOKAmXMgcmVhY2hhYmxlIGNvZGUsIGFuZCBJIGtub3cgSFNSIGlzIGEgdmlydHVhbCBkZXZpY2UsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHdoaWNoIGlzIGhlbHBmdWwuIFRoZSBwYXRjaCBkZWFscyB3aXRoIEdTTyBhbmQgR1JPLCB3aGljaCBhcmUgY3J1Y2lhbCBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcy5cblxuTm93LCBteSBmb2N1cyBmb3IgZnV6emluZyBuZWVkcyB0byBiZSBvbiBzcGVjaWZpYyBmdW5jdGlvbnMsIHN0YXJ0aW5nIHdpdGggYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gZW5zdXJlIHRoZSBHUk8gZGlzYWJsaW5nIGlzIHN1Y2Nlc3NmdWwuIFRoZW4sIGBoc3JfZm9yd2FyZF9za2JgIGFuZCBgaHNyX2Rldl94bWl0YCB3aWxsIGJlIGtleSB0byB0ZXN0aW5nIEdTTyBzdXBlci1wYWNrZXQgaGFuZGxpbmcgYW5kIHRyYW5zbWlzc2lvbiwgYW5kIGZpbmFsbHksIGBoc3JfaGFuZGxlX2ZyYW1lYCB0byBtYWtlIHN1cmUgb3ZlcmFsbCBwYWNrZXQgcHJvY2Vzc2luZyBpcyBpbnRhY3QuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYENPTkZJR19IU1JgIG9yIHNpbWlsYXIgaW4gYG5ldC9oc3IvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIEhTUiBkcml2ZXIuIFRoaXMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhlIHRlc3QgZW52aXJvbm1lbnQgbWF0Y2hlcyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTkwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTc6NTMuNzIxOTk0NDYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5Nzc5OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIU1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTc6NTMuODAxNzgzNjIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDgwNTk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHNvbWV0aGluZyByZWxhdGVkIHRvIEhTUiB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIExldCdzIHN0YXJ0IGJ5IGNyYWNraW5nIG9wZW4gdGhlIGBuZXQvaHNyL0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHRoZSBmaXJzdCBwbGFjZSBJIGxvb2sgZm9yIGRlcGVuZGVuY2llcy4gSXQnbGwgbGF5IG91dCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLCBhbmQgYW55IHByZXJlcXVpc2l0ZXMgZm9yIGVuYWJsaW5nIHRoaXMgcGFydGljdWxhciBmZWF0dXJlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcywgaGFyZHdhcmUgZHJpdmVycywgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgdGhpcyBIU1IgZnVuY3Rpb25hbGl0eSBtaWdodCBwaWdneWJhY2sgb24uIFRoaXMgaXMgd2hlcmUgdGhlIHRydXRoIGxpZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTc6NTcuOTY2NTkxMzQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2hzci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3lcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEhTUlxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBJRUMgNjI0MzkgZGVmaW5lZCBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzc1xcbiAgMTA6XFx0XFx0ICBSZWR1bmRhbmN5IChIU1IpIGFuZCBQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sIChQUlApLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxcbiAgMTM6XFx0XFx0ICBEQU5IIChcXFwiRG91Ymx5IGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIEhTUlxcXCIpIG9yIERBTlAgKFxcXCJEb3VibHlcXG4gIDE0OlxcdFxcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXFxcIikuIEZvciB0aGlzIHRvIHdvcmssIHlvdXIgTGludXggYm94XFxuICAxNTpcXHRcXHQgIG5lZWRzIChhdCBsZWFzdCkgdHdvIHBoeXNpY2FsIEV0aGVybmV0IGludGVyZmFjZXMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxcbiAgMTg6XFx0XFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXFxuICAxOTpcXHRcXHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcXG4gIDIwOlxcdFxcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcXG4gIDIxOlxcdFxcdCAgaW4gdGhlIHJpbmcgYWN0cyBsaWtlIGEgYnJpZGdlIGZvciBIU1IgZnJhbWVzLCBidXQgZmlsdGVycyBmcmFtZXNcXG4gIDIyOlxcdFxcdCAgdGhhdCBoYXZlIGJlZW4gZm9yd2FyZGVkIGVhcmxpZXIuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgRm9yIERBTlAsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBjb25uZWN0aW5nIHRvIHR3b1xcbiAgMjU6XFx0XFx0ICBzZXBhcmF0ZSBuZXR3b3JrcyBvdmVyIHRoZSB0d28gc2xhdmUgaW50ZXJmYWNlcy4gTGlrZSBIU1IsIEV0aGVybmV0XFxuICAyNjpcXHRcXHQgIGZyYW1lcyBzZW50IG92ZXIgdGhlIFBSUCBkZXZpY2Ugd2lsbCBiZSBzZW50IHRvIGJvdGggbmV0d29ya3MgZ2l2aW5nXFxuICAyNzpcXHRcXHQgIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBVbmxpa2UgSFNSLCBQUlAgbmV0d29ya3NcXG4gIDI4OlxcdFxcdCAgY2FuIGhhdmUgU2luZ2x5IEF0dGFjaGVkIE5vZGVzIChTQU4pIHN1Y2ggYXMgUEMsIHByaW50ZXIsIGJyaWRnZXNcXG4gIDI5OlxcdFxcdCAgZXRjIGFuZCB3aWxsIGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBEQU5QIG5vZGVzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoaXMgY29kZSBpcyBhIFxcXCJiZXN0IGVmZm9ydFxcXCIgdG8gY29tcGx5IHdpdGggdGhlIEhTUiBzdGFuZGFyZCBhc1xcbiAgMzI6XFx0XFx0ICBkZXNjcmliZWQgaW4gSUVDIDYyNDM5LTM6MjAxMCAoSFNSdjApIGFuZCBJRUMgNjI0MzktMzoyMDEyIChIU1J2MSksXFxuICAzMzpcXHRcXHQgIGFuZCBQUlAgc3RhbmRhcmQgZGVzY3JpYmVkIGluIElFQyA2MjQzOS00OjIwMTIgKFBSUCksIGJ1dCBub1xcbiAgMzQ6XFx0XFx0ICBjb21wbGlhbmN5IHRlc3RzIGhhdmUgYmVlbiBtYWRlLiBVc2UgaXByb3V0ZTIgdG8gc2VsZWN0IHRoZSBwcm90b2NvbFxcbiAgMzU6XFx0XFx0ICB5b3Ugd291bGQgbGlrZSB0byB1c2UuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgWW91IG5lZWQgdG8gcGVyZm9ybSBhbnkgYW5kIGFsbCBuZWNlc3NhcnkgdGVzdHMgeW91cnNlbGYgYmVmb3JlXFxuICAzODpcXHRcXHQgIHJlbHlpbmcgb24gdGhpcyBjb2RlIGluIGEgc2FmZXR5IGNyaXRpY2FsIHN5c3RlbSFcXG4gIDM5OlxcdFxcbiAgNDA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRpZiBIU1JcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIFBSUF9EVVBfRElTQ0FSRF9LVU5JVF9URVNUXFxuICA0NTpcXHRcXHR0cmlzdGF0ZSBcXFwiUFJQIGR1cGxpY2F0ZSBkaXNjYXJkIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICA0NzpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNDg6XFx0XFx0aGVscFxcbiAgNDk6XFx0XFx0ICBDb3ZlcnMgdGhlIFBSUCBkdXBsaWNhdGUgZGlzY2FyZCBhbGdvcml0aG0uXFxuICA1MDpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNTo1Nzo1Ny45NjY2NTI0MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDAwNzk2NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFNSIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBIU1Igc2V0dXAsIGFuZCB0aGUgYENPTkZJR19IU1JgIGZsYWcgaXMsIG9mIGNvdXJzZSwgdGhlIG1haW4gY29uZmlndXJhdGlvbiBjb250cm9sLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9uIGxhbmRzY2FwZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBhbmQgbW9kaWZpZWQgZnVuY3Rpb25zIGludm9sdmVkLiBMZXQncyBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkOiBgZGV2X2Rpc2FibGVfZ3JvYCwgYG5ldGlmX2Rpc2FibGVfZ3JvYCwgYGhzcl9kZXZfeG1pdGAsIGBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZWAsIGBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZWAsIGBoc3JfZGV2X3NldHVwYCwgYGhhbmRsZV9zdGRfZnJhbWVgLCBgaHNyX2ZvcndhcmRfc2tiYCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBhbmQgYGhzcl9wb3J0ZGV2X3NldHVwYC5cblxuTm93LCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGRlZmluZWQ/IGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHJlc2lkZSBpbiBgbmV0L2NvcmUvZGV2LmNgIGFuZCBgbmV0L2NvcmUvZGV2X2FwaS5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBoc3JfZm9yd2FyZF9za2JgIGlzIGNsZWFybHkgaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGFzIGV4cGVjdGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBgaHNyX2ZvcndhcmRfc2tiYCBpcyAqbm90KiBzdGF0aWMsIGJ1dCBgaHNyX2ZvcndhcmRfc2tiX29uZWAgKmlzKiBzdGF0aWMgd2hpY2ggaW1wbGllcyBzb21lIGludGVybmFsIGhhbmRsaW5nLiBgZGV2X2Rpc2FibGVfZ3JvYCBpcyBleHBvcnRlZCwgdGhhdCdzIGdvb2QuIGBuZXRpZl9kaXNhYmxlX2dyb2AgaXMgbm90IGV4cG9ydGVkLCBidXQgaXQncyBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGludG8gaXRzIHVzYWdlLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpc3RpbGwgdGhlIGVzc2VuY2Ugb2Ygd2hhdCdzIGltcG9ydGFudCBoZXJlLiBNeSBmb2N1cyBzaG91bGQgYmUgb246IGBkZXZfZGlzYWJsZV9ncm9gLCBgbmV0aWZfZGlzYWJsZV9ncm9gLCBgaHNyX2ZvcndhcmRfc2tiYCwgYGhzcl9kZXZfeG1pdGAsIGBoc3JfaGFuZGxlX2ZyYW1lYCwgYW5kIGBoc3JfcG9ydGRldl9zZXR1cGAuXG5cbldhaXQsIGEgc21hbGwgY29ycmVjdGlvbi4gYGhzcl9oYW5kbGVfZnJhbWVgIGlzIHN0YXRpYy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSB0aGF0IGlzIGRlZmluZWQuIExldCBtZSBsb29rIGluIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYCB0byBiZSBzdXJlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNTo1ODowMy45Njc0NTA2OTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTczMzMzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2hhbmRsZV9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL2hzcl9zbGF2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX3NsYXZlLmM9MTk9Ym9vbCBoc3JfaW52YWxpZF9kYW5faW5ncmVzc19mcmFtZShfX2JlMTYgcHJvdG9jb2wpXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTIzLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6MjQ6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxubmV0L2hzci9oc3Jfc2xhdmUuYy0yNS17XFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTg1PWJvb2wgaHNyX3BvcnRfZXhpc3RzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3Jfc2xhdmUuYy04Ni17XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4NzpcXHRyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKGRldi1cXHUwMDNlcnhfaGFuZGxlcikgPT0gaHNyX2hhbmRsZV9mcmFtZTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg4LX1cXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9MTMyPXN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTE1OS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjE2MDpcXHRyZXMgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGhzcl9oYW5kbGVfZnJhbWUsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTYxLVxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU4OjA0LjA2NDc4NzYzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDM1ODY0NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiB0aGUgSFNSIERyaXZlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgbGF5IG9mIHRoZSBsYW5kIGFzIEkgdW5kZXJzdGFuZCBpdC4gSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGlzIEhTUiBzdHVmZiBpbnRlZ3JhdGVzIGludG8gdGhlIGtlcm5lbCBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBHUk8uIEkgc2VlIHRoYXQgYGhzcl9oYW5kbGVfZnJhbWVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQncyByZWdpc3RlcmVkIGFzIGFuIFJYIGhhbmRsZXIg4oCTIG1ha2VzIHNlbnNlLCB0aGUgZHJpdmVyIG5lZWRzIHRvIHByb2Nlc3MgaW5jb21pbmcgZnJhbWVzLiBTaW1pbGFybHksIGBoc3JfZGV2X3htaXRgIGlzIHN0YXRpYywgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiwgc28gdGhlIGRyaXZlciBkb2VzIGl0cyB0aGluZyB0aGVyZS4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0cyBhcmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zOiBgaHNyX2ZvcndhcmRfc2tiYCwgYGRldl9kaXNhYmxlX2dyb2AsIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUga2V5IG9uZXMgZm9yIGRpc2FibGluZyBHUk8gYW5kIGZvcndhcmRpbmcgcGFja2V0cyBhcHByb3ByaWF0ZWx5LiBJIGZpZ3VyZSBJJ2xsIGJlIHVzaW5nIGBkZXZfZGlzYWJsZV9ncm9gLCBgbmV0aWZfZGlzYWJsZV9ncm9gLCBhbmQgYGhzcl9mb3J3YXJkX3NrYmAgdG8gZ2V0IHRoZSBkZXNpcmVkIGJlaGF2aW9yIOKAkyBkaXNhYmxpbmcgR1JPIGlzIGxpa2VseSBjcnVjaWFsIGZvciBIU1IncyBkdXBsaWNhdGUgZnJhbWUgaGFuZGxpbmcuXG5cbk5vdywgZG8gSSBuZWVkIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0byBwdWxsIHRoaXMgb2ZmPyBMZXQncyBhc3N1bWUgaXQgZGVwZW5kcyBvbiB0aGUgTkVUIGNvbmZpZy4gSSdtIG5vdCBzZWVpbmcgYW55IG9idmlvdXMgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZsYWdzIGJleW9uZCB0aGF0LCB3aGljaCBpcyBnb29kLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBgbmV0L2NvcmUvZGV2LmNgIHRvIGNvbmZpcm0gdGhlIGJlaGF2aW9yIG9mIGBuZXRpZl9kaXNhYmxlX2dyb2AsIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IGhvdyBHUk8gZ2V0cyBkaXNhYmxlZCBhdCB0aGUgbmV0aWYgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU4OjA4LjcwODM3ODIwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3MTM1ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGlmX2Rpc2FibGVfZ3JvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE4MjU9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTg0Mi1cXG5uZXQvY29yZS9kZXYuYzoxODQzOnZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXYuYy0xODQ0LXtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTE4NTUtXFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XFxubmV0L2NvcmUvZGV2LmM6MTg1NjpcXHRcXHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTE4NTctXFx0XFx0bmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTg6MDkuMjY1NTIwODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcyNTYzNjM1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBzdW1tYXJ5OlxuXG4qKkNoZWNraW5nIEdSTyBEaXNhYmxlbWVudCoqXG5cblJpZ2h0LCBgbmV0aWZfZGlzYWJsZV9ncm9gIGlzIGRlZmluaXRlbHkgcHJlc2VudC4gTm93LCBJIG5lZWQgdG8gc2VlICp3aGVyZSogaXQncyBhY3R1YWxseSBkZWZpbmVkIGFuZCBob3cgaXQncyB1c2VkLiBMZXQgbWUgcXVpY2tseSBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBgbmV0L2NvcmUvZGV2X2FwaS5jYCBmaWxlLiBJJ20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBgZGV2X2Rpc2FibGVfZ3JvYCB0aGVyZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEdvdHRhIHN0YXkgc2hhcnAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTI0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTg6MTEuOTkxMTYwMDgyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjExODMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldl9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZfYXBpLmM9MjcwPUVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hcGkuYy0yNzItLyoqXFxubmV0L2NvcmUvZGV2X2FwaS5jOjI3MzogKiBkZXZfZGlzYWJsZV9ncm8oKSAtIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjc0LSAqIEBkZXY6IGRldmljZVxcbi0tXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI3OS0gKi9cXG5uZXQvY29yZS9kZXZfYXBpLmM6MjgwOnZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FwaS5jLTI4MS17XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg1LX1cXG5uZXQvY29yZS9kZXZfYXBpLmM6Mjg2OkVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNTo1ODoxMi4xMTIzNDg5ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NjQ0NDcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggYW4gZXhwZXJ0IGF1ZGllbmNlIGluIG1pbmQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBHUk8gYW5kIEZvcndhcmRpbmcqKlxuXG5BbHJpZ2h0LCBjb25maXJtZWQg4oCTIGBkZXZfZGlzYWJsZV9ncm9gIGlzIGluZGVlZCBwcmVzZW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBwaXZvdCB0b3dhcmRzIHRoZSBsaWtlbHkgc291cmNlIG9mIGFueSByZWxhdGVkIGlzc3VlcyBpbiB0aGUgSFNSIGNvbnRleHQuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCwgbXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gbG9vayBhdCB0aGUgSFNSIGZvcndhcmRpbmcgbG9naWMgaXRzZWxmLiBUaGF0IGxlYWRzIG1lIGRpcmVjdGx5IHRvIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIEhTUiBmb3J3YXJkaW5nIGRlY2lzaW9ucyBhbmQgYWN0aW9ucyByZWxhdGVkIHRvIFNLQnMgd291bGQgYmUuIEFueSBHUk8tcmVsYXRlZCBhbm9tYWxpZXMgYXJlIGhpZ2hseSBsaWtlbHkgdG8gbWFuaWZlc3QgdGhlcmUuIE5vdyBsZXQncyBkaWcgaW50byB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6NTg6MTUuMjA4Nzk3Mjg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2ODE3MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvaHNyX2ZvcndhcmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9Njc4PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM1LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjczNjpzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM3LXtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NjgtICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc2OTp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3MC17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzczLVxcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzc0OlxcdFxcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc1LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MDItXFx0XFx0c2Vncy1cXHUwMDNlbmV4dCA9IE5VTEw7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjgwMzpcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MDQtXFx0XFx0c2VncyA9IG5leHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU4OjE1LjM1MDQ4NTYxNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU0MDQ1NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhTUiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGhzcl9mb3J3YXJkX3NrYmAgaXMgaW5kZWVkIHByZXNlbnQgaW4gdGhpcyBjb2RlLiBFeGNlbGxlbnQuIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkb2luZyBzb21ldGhpbmcgc2lnbmlmaWNhbnQ6IGl0J3MgbWFraW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIGRyaXZlciBhbmQgdGhlIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIHRvIG1hbmFnZSBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBvbiB0aG9zZSBlbnNsYXZlZCBkZXZpY2VzLiBJdCdzIGFsc28gZGVhbGluZyB3aXRoIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgc3VwZXItcGFja2V0cyBzcGVjaWZpY2FsbHkgaW4gdGhlIEhTUiBmb3J3YXJkaW5nIHBhdGguXG5cblRoaXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBcImZ1enppbmcgb3Bwb3J0dW5pdHlcIiB0byBtZS4gVGhlIGludHJvZHVjdGlvbiBvZiBuZXcgYmVoYXZpb3JzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIG9mZmxvYWQgbWVjaGFuaXNtcyBhbmQgcGFja2V0IGhhbmRsaW5nLCBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIHVuY292ZXJpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGVkZ2UgY2FzZXMuXG5cbkknbGwgd2FudCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIGZvbGxvd2luZyBrZXkgc3ltYm9sczogYGRldl9kaXNhYmxlX2dyb2AsIGBuZXRpZl9kaXNhYmxlX2dyb2AsIGFuZCwgb2YgY291cnNlLCB0aGUgY2VudHJhbCBgaHNyX2ZvcndhcmRfc2tiYCBmdW5jdGlvbi4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjcml0aWNhbCB0b3VjaHBvaW50cyB3aGVyZSB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZC5cblxuR2l2ZW4gdGhhdCB0aGUgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gdGhlIGBIU1JgIGNvbmZpZywgSSBjYW4gZWFzaWx5IHRlc3QgdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5NjgsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjU4OjE5LjgwNDUzNTQ5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Mzc2OTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiLFxuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiBkcml2ZXIgYW5kIGNvcmUgbmV0d29ya2luZyB0byBkaXNhYmxlIEdSTyBvbiBlbnNsYXZlZCBkZXZpY2VzIGFuZCBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgaW4gSFNSIGZvcndhcmRpbmcuIFRoZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGNhbiBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgICBcIm5ldGlmX2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIGRyaXZlciBhbmQgY29yZSBuZXR3b3JraW5nIHRvIGRpc2FibGUgR1JPIG9uIGVuc2xhdmVkIGRldmljZXMgYW5kIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBpbiBIU1IgZm9yd2FyZGluZy4gVGhlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgY2FuIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[1] Phase: Succeeded StartedAt: 2026-07-26 05:58:32 +0000 UTC FinishedAt: 2026-07-26 05:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 05:58:32 +0000 UTC FinishedAt: 2026-07-26 05:58:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2] Phase: Succeeded StartedAt: 2026-07-26 05:58:32 +0000 UTC FinishedAt: 2026-07-26 10:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 05:58:32 +0000 UTC FinishedAt: 2026-07-26 10:42:54 +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":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 05:58:32 +0000 UTC FinishedAt: 2026-07-26 05:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 05:58:32 +0000 UTC FinishedAt: 2026-07-26 05:58:37 +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":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow45tjf/series-workflow45tjf-convert-artifact-3261183369/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 05:58:42 +0000 UTC FinishedAt: 2026-07-26 06:42:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 05:58:42 +0000 UTC FinishedAt: 2026-07-26 06:42:59 +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:*406c9f06-48a6-4173-8585-a4ed1b8b4e78,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-workflow45tjf/series-workflow45tjf-convert-artifact-3261183369/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": "cff9bfcc-6aa5-48e2-b503-99c29d243d05", "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-workflow45tjf/series-workflow45tjf-build-action-3338301031/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 05:58:42 +0000 UTC FinishedAt: 2026-07-26 06:42:49 +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:*406c9f06-48a6-4173-8585-a4ed1b8b4e78,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-workflow45tjf/series-workflow45tjf-convert-artifact-3261183369/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": "cff9bfcc-6aa5-48e2-b503-99c29d243d05", "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-workflow45tjf/series-workflow45tjf-build-action-3338301031/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 06:42:59 +0000 UTC FinishedAt: 2026-07-26 06:42:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 06:42:59 +0000 UTC FinishedAt: 2026-07-26 06:42:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 06:42:59 +0000 UTC FinishedAt: 2026-07-26 06:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 06:42:59 +0000 UTC FinishedAt: 2026-07-26 06:43:13 +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":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow45tjf/series-workflow45tjf-convert-artifact-3618761884/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 06:43:21 +0000 UTC FinishedAt: 2026-07-26 06:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 06:43:21 +0000 UTC FinishedAt: 2026-07-26 06:45:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cff9bfcc-6aa5-48e2-b503-99c29d243d05,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-workflow45tjf/series-workflow45tjf-build-action-3338301031/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-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 06:45:15 +0000 UTC FinishedAt: 2026-07-26 06:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 06:45:15 +0000 UTC FinishedAt: 2026-07-26 06:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 06:45:15 +0000 UTC FinishedAt: 2026-07-26 07:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 06:45:15 +0000 UTC FinishedAt: 2026-07-26 07:37:36 +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:*406c9f06-48a6-4173-8585-a4ed1b8b4e78,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-workflow45tjf/series-workflow45tjf-convert-artifact-3618761884/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": "b6919938-ff98-404d-bf6f-f9fbc7eb1b3a", "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-workflow45tjf/series-workflow45tjf-build-action-1202163704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 06:45:15 +0000 UTC FinishedAt: 2026-07-26 07:37:16 +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:*406c9f06-48a6-4173-8585-a4ed1b8b4e78,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-workflow45tjf/series-workflow45tjf-convert-artifact-3618761884/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": "b6919938-ff98-404d-bf6f-f9fbc7eb1b3a", "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-workflow45tjf/series-workflow45tjf-build-action-1202163704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 07:37:36 +0000 UTC FinishedAt: 2026-07-26 07:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 07:37:36 +0000 UTC FinishedAt: 2026-07-26 07:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 07:37:36 +0000 UTC FinishedAt: 2026-07-26 07:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 07:37:36 +0000 UTC FinishedAt: 2026-07-26 07:39:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b6919938-ff98-404d-bf6f-f9fbc7eb1b3a,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-workflow45tjf/series-workflow45tjf-build-action-1202163704/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-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 07:39:38 +0000 UTC FinishedAt: 2026-07-26 10:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 07:39:38 +0000 UTC FinishedAt: 2026-07-26 10:42:54 +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":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"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:*cff9bfcc-6aa5-48e2-b503-99c29d243d05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b6919938-ff98-404d-bf6f-f9fbc7eb1b3a,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-workflow45tjf/series-workflow45tjf-build-action-3338301031/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-workflow45tjf/series-workflow45tjf-build-action-1202163704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 07:39:38 +0000 UTC FinishedAt: 2026-07-26 07:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 07:39:38 +0000 UTC FinishedAt: 2026-07-26 07:39:43 +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":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"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-workflow45tjf/series-workflow45tjf-convert-artifact-4148705381/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 07:39:38 +0000 UTC FinishedAt: 2026-07-26 07:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 07:39:38 +0000 UTC FinishedAt: 2026-07-26 07:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 07:39:38 +0000 UTC FinishedAt: 2026-07-26 07:39:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 07:39:48 +0000 UTC FinishedAt: 2026-07-26 10:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow45tjf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_disable_gro","netif_disable_gro","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba712ecfd942b68b21a4b0a5daaf72f6616cc66d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"290cbf0a-0bd9-46e3-b7fe-b5abc607cef4","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 07:39:48 +0000 UTC FinishedAt: 2026-07-26 10:42:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cff9bfcc-6aa5-48e2-b503-99c29d243d05,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b6919938-ff98-404d-bf6f-f9fbc7eb1b3a,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-workflow45tjf/series-workflow45tjf-build-action-3338301031/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-workflow45tjf/series-workflow45tjf-build-action-1202163704/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-workflow45tjf/series-workflow45tjf-convert-artifact-4148705381/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,}