Name: series-workflows2f55 Phase: Succeeded StartedAt: 2026-08-26 20:22:24 +0000 UTC FinishedAt: 2026-08-27 00:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[0] Phase: Succeeded StartedAt: 2026-08-26 20:22:24 +0000 UTC FinishedAt: 2026-08-26 20:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 20:22:24 +0000 UTC FinishedAt: 2026-08-26 20:27:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6", "NET_VRF", "NET_L3_MASTER_DEV", "IP_MULTIPLE_TABLES", "IP_ADVANCED_ROUTER", "IPV6_MULTIPLE_TABLES", "NET_SCHED", "NET_SCH_NETEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6", "NET_VRF", "NET_L3_MASTER_DEV", "IP_MULTIPLE_TABLES", "IP_ADVANCED_ROUTER", "IPV6_MULTIPLE_TABLES", "NET_SCHED", "NET_SCH_NETEM" ], "series_id": "dc5677d3-bbc1-492d-a4bb-545b42e2d90a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rt_add_uncached_list", "rt_flush_dev", "rt6_uncached_list_add", "rt6_uncached_list_del", "rt6_disable_ip" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDssCiAgICAmIzM0O05FVF9MM19NQVNURVJfREVWJiMzNDssCiAgICAmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBWNl9NVUxUSVBMRV9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfTkVURU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICAgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfYWRkJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2RlbCYjMzQ7LAogICAgJiMzNDtydDZfZGlzYWJsZV9pcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIHVzZXItY29udHJvbGxlZCBsZW5ndGhzIG9yIGJvdW5kcywgYW5kIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGxvY2tpbmcsIG9yIHVzZS1hZnRlci1mcmVlIChlLmcuLCBpZiBhIHJvdXRlIGlzIG5vdCBwcm9wZXJseSBmbHVzaGVkKSwgd2hpY2ggYXJlIHdlbGwgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFja2luZyB1bmNhY2hlZCByb3V0ZXMgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGZyb20gYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHRvIGEgcGVyLUNQVSBoYXNoIHRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIFRoZSB0ZXN0IHNjcmlwdCBpbmRpY2F0ZXMgdGhhdCBWUkYgYW5kIE5FVEVNIGFyZSB1c2VkIHRvIHRyaWdnZXIgc3BlY2lmaWMgZWRnZSBjYXNlcyAobGlrZSBtaXNtYXRjaGVkIGRldmljZXMgaW4gSVB2NiksIHNvIGVuYWJsaW5nIHRob3NlIGNvbmZpZ3MgaXMgaW1wb3J0YW50IGZvciB0aG9yb3VnaCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGJlNGU3YWM0YjdjYzFiZDJjYWNjMWJmZWZkYmI2Nzg0NWViZDAzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIwOjI0OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCA2MDRjYzUxZGZkOWJjLi4zZjliYzFlYzcyY2NlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTc0LDYgJiM0Mzs3NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWdtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tcm91dGUuaFx1MDAzZVxuQEAgLTE1NTIsMTEgJiM0MzsxNTUzLDIyIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhlYWQ7XG4gfTtcbiBcbi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7XG4mIzQzOyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4mIzQzOyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9TSVpFXHRCSVQoUlRfVU5DQUNIRURfSEFTSF9CSVRTKVxuJiM0MztcbiYjNDM7c3RydWN0IHVuY2FjaGVkX3RhYmxlIHtcbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUX1VOQ0FDSEVEX0hBU0hfU0laRV07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX2xpc3QpO1xuJiM0MztcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcdTAwMjZydF91bmNhY2hlZF90YWJsZSk7XG4mIzQzO1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuJiM0MztcbiYjNDM7XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIoZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpLFxuJiM0MztcdFx0XHRcdCAgICAgIFJUX1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTg4LDE0ICYjNDM7MTYwMCwxOCBAQCB2b2lkIHJ0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuJiM0MztcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbiYjNDM7XG4mIzQzO1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuJiM0MztcdFx0XHRpZiAoZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpICE9IGRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihydC1cdTAwM2Vkc3QuZGV2X3JjdSwgYmxhY2tob2xlX25ldGRldik7XG4gXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKGRldiwgYmxhY2tob2xlX25ldGRldixcbkBAIC0zNzcxLDEwICYjNDM7Mzc4NywxNiBAQCBpbnQgX19pbml0IGlwX3J0X2luaXQodm9pZClcbiBcdGlwX3RzdGFtcHMgPSBpZGVudHNfaGFzaCAmIzQzOyAoaXBfaWRlbnRzX21hc2sgJiM0MzsgMSkgKiBzaXplb2YoKmlwX2lkZW50cyk7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbiYjNDM7XHRcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XG4mIzQzO1x0XHRpbnQgYnVja2V0O1xuJiM0MztcbiYjNDM7XHRcdHRhYmxlID0gcGVyX2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4mIzQzO1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggMTZkZmFjNTRhMjU5YS4uODYwNTMwMDc0MDI3YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC00MCw2ICYjNDM7NDAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uc3Byb3h5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpcGhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbkBAIC0xMzMsMTEgJiM0MzsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0aGVhZDtcbiB9O1xuIFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XG4mIzQzOyNkZWZpbmUgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUU1x0NlxuJiM0MzsjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChSVDZfVU5DQUNIRURfSEFTSF9CSVRTKVxuJiM0MztcbiYjNDM7c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7XG4mIzQzO1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVDZfVU5DQUNIRURfSEFTSF9TSVpFXTtcbiYjNDM7XHQvKiBSb3V0ZXMgdGhhdCBtdXN0IGJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIHR3byBkaWZmZXJlbnQgZGV2aWNlcy4gKi9cbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG4gXG4gdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydClcbiB7XG4tXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCk7XG4mIzQzO1x0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4mIzQzO1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuJiM0MztcbiYjNDM7XHRpZiAocnQtXHUwMDNlcnQ2aV9pZGV2IFx1MDAyNlx1MDAyNiBydC1cdTAwM2VydDZpX2lkZXYtXHUwMDNlZGV2ICE9IHJ0X2RldilcbiYjNDM7XHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2g7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKHJ0X2RldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTtcbiBcbiBcdHJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7XG4gXG5AQCAtMTU3LDQwICYjNDM7MTc1LDUwIEBAIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dWwtXHUwMDNlaGVhZCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuJiM0MztcdFx0c3RydWN0IGluZXQ2X2RldiAqcnRfaWRldiA9IHJ0LVx1MDAzZXJ0NmlfaWRldjtcbiYjNDM7XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4mIzQzO1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocnRfaWRldiBcdTAwMjZcdTAwMjYgcnRfaWRldi1cdTAwM2VkZXYgPT0gZGV2KSB7XG4mIzQzO1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuJiM0MztcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbiYjNDM7XHRcdFx0aGFuZGxlZCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJ0X2RldiA9PSBkZXYpIHtcbiYjNDM7XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4mIzQzO1x0XHRcdG5ldGRldl9yZWZfcmVwbGFjZShydF9kZXYsIGJsYWNraG9sZV9uZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZydC1cdTAwM2Vkc3QuZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChoYW5kbGVkKVxuJiM0MztcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGludCBjcHU7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0LCBjcHUpO1xuLVx0XHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbiYjNDM7XHRcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuJiM0MztcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHRhYmxlID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuJiM0MztcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7XG4mIzQzO1x0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaCwgZGV2KTtcbiBcdH1cbiB9XG4gXG5AQCAtNjk4MiwxMCAmIzQzOzcwMTAsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxuICNlbmRpZlxuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbiYjNDM7XHRcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuJiM0MztcdFx0aW50IGJ1Y2tldDtcbiYjNDM7XG4mIzQzO1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcbiYjNDM7XHRcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFx1MDAzYyBSVDZfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaC5oZWFkKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLmxvY2spO1xuIFx0fVxuIFxuIG91dDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuQEAgLTM4NSw2ICYjNDM7Mzg1LDM3IEBAIHJ1bl90ZXN0cygpXG4gXHRjbGVhbnVwX3hmcm1fZGV2XG4gfVxuIFxuJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgc2VuZGVyX3BpZFxuJiM0MztcdGxvY2FsIGJhY2tsb2dcbiYjNDM7XHRsb2NhbCByY1xuJiM0MztcbiYjNDM7XHQjIEEgbG9jYWwgcm91dGUgdGhyb3VnaCBhIFZSRiB1c2VzIHRoZSBWUkYgYXMgZHN0LmRldiB3aGlsZSByZXRhaW5pbmdcbiYjNDM7XHQjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkXG4mIzQzO1x0IyByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkZWxldGVkLlxuJiM0MztcdHJ1bl9jbWRfaG9zdDEgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHNcbiYjNDM7XHRpcCAtNiAtbmV0bnMgXCYjMzQ7JGhvc3QxXCYjMzQ7IHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JGhvc3QxXCYjMzQ7IC4vbXNnX3plcm9jb3B5IC02IFxcXG4mIzQzO1x0XHQtUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFxcXG4mIzQzO1x0XHRcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4mIzQzO1x0c2VuZGVyX3BpZD0kIVxuJiM0MztcdHdhaXQgXCYjMzQ7JHNlbmRlcl9waWRcJiMzNDtcbiYjNDM7XHRyYz0kP1xuJiM0MztcdGxvZ190ZXN0ICRyYyAwIFwmIzM0O0NyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wmIzM0O1xuJiM0MztcdFsgJHJjIC1uZSAwIF0gXHUwMDI2XHUwMDI2IHJldHVyblxuJiM0MztcbiYjNDM7XHRiYWNrbG9nPSQoaXAgbmV0bnMgZXhlYyBcJiMzNDskaG9zdDFcJiMzNDsgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KVxuJiM0MztcdGlmICEgZWNobyBcJiMzNDskYmFja2xvZ1wmIzM0OyB8IGdyZXAgLUVxICYjMzk7YmFja2xvZyAuKiBbMS05XVswLTldKnAmIzM5OzsgdGhlblxuJiM0MztcdFx0bG9nX3Rlc3QgMSAwIFwmIzM0O1JldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcJiMzNDtcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0bG9nX3Rlc3QgMCAwIFwmIzM0O1JldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcJiMzNDtcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMFxuJiM0MztcdGxvZ190ZXN0ICQ/IDAgXCYjMzQ7Rmx1c2ggdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuICMgdXNhZ2VcbiBcbkBAIC00MjUsNiAmIzQzOzQ1NiwxMCBAQCBlY2hvXG4gZWNobyBcJiMzNDtuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlXCYjMzQ7XG4gcnVuX3Rlc3RzXG4gXG4mIzQzO2VjaG9cbiYjNDM7ZWNobyBcJiMzNDtVbmNhY2hlZCBJUHY2IHJvdXRlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXCYjMzQ7XG4mIzQzO3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaFxuJiM0MztcbiBwcmludGYgXCYjMzQ7XFxuVGVzdHMgcGFzc2VkOiAlM2RcXG5cJiMzNDsgJHtuc3VjY2Vzc31cbiBwcmludGYgXCYjMzQ7VGVzdHMgZmFpbGVkOiAlM2RcXG5cJiMzNDsgICAke25mYWlsfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVUX1ZSRiYjMzQ7LAogICAgJiMzNDtORVRfTDNfTUFTVEVSX0RFViYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSVBMRV9UQUJMRVMmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgICAmIzM0O0lQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX05FVEVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRfYWRkX3VuY2FjaGVkX2xpc3QmIzM0OywKICAgICYjMzQ7cnRfZmx1c2hfZGV2JiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2FkZCYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9kZWwmIzM0OywKICAgICYjMzQ7cnQ2X2Rpc2FibGVfaXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3IgdHJhY2tpbmcgdW5jYWNoZWQgcm91dGVzIGluIGJvdGggSVB2NCBhbmQgSVB2NiBmcm9tIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB0byBhIHBlci1DUFUgaGFzaCB0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIGhvdyB1bmNhY2hlZCByb3V0ZXMgYXJlIGFkZGVkLCBkZWxldGVkLCBhbmQgZmx1c2hlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBUaGUgdGVzdCBzY3JpcHQgaW5kaWNhdGVzIHRoYXQgVlJGIGFuZCBORVRFTSBhcmUgdXNlZCB0byB0cmlnZ2VyIHNwZWNpZmljIGVkZ2UgY2FzZXMgKGxpa2UgbWlzbWF0Y2hlZCBkZXZpY2VzIGluIElQdjYpLCBzbyBlbmFibGluZyB0aG9zZSBjb25maWdzIGlzIGltcG9ydGFudCBmb3IgdGhvcm91Z2ggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiZTRlN2FjNGI3Y2MxYmQyY2FjYzFiZmVmZGJiNjc4NDVlYmQwMzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAyMDoyNDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDYwNGNjNTFkZmQ5YmMuLjNmOWJjMWVjNzJjY2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtNzQsNiAmIzQzOzc0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWdtcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BrdF9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21yb3V0ZS5oJmd0OwpAQCAtMTU1MiwxMSAmIzQzOzE1NTMsMjIgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQJaGVhZDsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydF91bmNhY2hlZF9saXN0KTsKJiM0MzsjZGVmaW5lIFJUX1VOQ0FDSEVEX0hBU0hfQklUUwk2CiYjNDM7I2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkUJQklUKFJUX1VOQ0FDSEVEX0hBU0hfQklUUykKJiM0MzsKJiM0MztzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgewomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUX1VOQ0FDSEVEX0hBU0hfU0laRV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTsKIAogdm9pZCBydF9hZGRfdW5jYWNoZWRfbGlzdChzdHJ1Y3QgcnRhYmxlICpydCkKIHsKLQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cigmYW1wO3J0X3VuY2FjaGVkX2xpc3QpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF90YWJsZSk7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKJiM0MzsKJiM0MzsJdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2hhc2hfcHRyKGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KSwKJiM0MzsJCQkJICAgICAgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07CiAKIAlydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDsKIApAQCAtMTU4OCwxNCAmIzQzOzE2MDAsMTggQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3Blcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIoZGV2LCBSVF9VTkNBQ0hFRF9IQVNIX0JJVFMpXTsKIAogCQlpZiAobGlzdF9lbXB0eSgmYW1wO3VsLSZndDtoZWFkKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKLQkJCWlmIChydC0mZ3Q7ZHN0LmRldiAhPSBkZXYpCiYjNDM7CQkJaWYgKGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KSAhPSBkZXYpCiAJCQkJY29udGludWU7CiAJCQlyY3VfYXNzaWduX3BvaW50ZXIocnQtJmd0O2RzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTsKIAkJCW5ldGRldl9yZWZfcmVwbGFjZShkZXYsIGJsYWNraG9sZV9uZXRkZXYsCkBAIC0zNzcxLDEwICYjNDM7Mzc4NywxNiBAQCBpbnQgX19pbml0IGlwX3J0X2luaXQodm9pZCkKIAlpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggJiM0MzsgKGlwX2lkZW50c19tYXNrICYjNDM7IDEpICogc2l6ZW9mKCppcF9pZGVudHMpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3Blcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlpbnQgYnVja2V0OwomIzQzOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0X3VuY2FjaGVkX3RhYmxlLCBjcHUpOwomIzQzOwkJZm9yIChidWNrZXQgPSAwOyBidWNrZXQgJmx0OyBSVF9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2J1Y2tldF07CiAKLQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7Ci0JCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwomIzQzOwkJCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJfQogCX0KICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCWlwX3J0X2FjY3QgPSBfX2FsbG9jX3BlcmNwdSgyNTYgKiBzaXplb2Yoc3RydWN0IGlwX3J0X2FjY3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfcnRfYWNjdCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggMTZkZmFjNTRhMjU5YS4uODYwNTMwMDc0MDI3YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC00MCw2ICYjNDM7NDAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbnNwcm94eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2poYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2lwaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRfbmFtZXNwYWNlLmgmZ3Q7CkBAIC0xMzMsMTEgJiM0MzsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQJaGVhZDsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7CiYjNDM7I2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9CSVRTCTYKJiM0MzsjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkUJQklUKFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpCiYjNDM7CiYjNDM7c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRV07CiYjNDM7CS8qIFJvdXRlcyB0aGF0IG11c3QgYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggdHdvIGRpZmZlcmVudCBkZXZpY2VzLiAqLwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7CiAKIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7Ci0Jc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCk7CiYjNDM7CXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldigmYW1wO3J0LSZndDtkc3QpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CWlmIChydC0mZ3Q7cnQ2aV9pZGV2ICZhbXA7JmFtcDsgcnQtJmd0O3J0NmlfaWRldi0mZ3Q7ZGV2ICE9IHJ0X2RldikKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2g7CiYjNDM7CWVsc2UKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihydF9kZXYsCiYjNDM7CQkJCQkgICAgICBSVDZfVU5DQUNIRURfSEFTSF9CSVRTKV07CiAKIAlydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDsKIApAQCAtMTU3LDQwICYjNDM7MTc1LDUwIEBAIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlOwomIzQzOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3VsLSZndDtoZWFkKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsICZhbXA7dWwtJmd0O2hlYWQsIGRzdC5ydF91bmNhY2hlZCkgewomIzQzOwkJc3RydWN0IGluZXQ2X2RldiAqcnRfaWRldiA9IHJ0LSZndDtydDZpX2lkZXY7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldigmYW1wO3J0LSZndDtkc3QpOwomIzQzOwkJYm9vbCBoYW5kbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CQlpZiAocnRfaWRldiAmYW1wOyZhbXA7IHJ0X2lkZXYtJmd0O2RldiA9PSBkZXYpIHsKJiM0MzsJCQlydC0mZ3Q7cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7CiYjNDM7CQkJaW42X2Rldl9wdXQocnRfaWRldik7CiYjNDM7CQkJaGFuZGxlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocnRfZGV2ID09IGRldikgewomIzQzOwkJCXJ0LSZndDtkc3QuZGV2ID0gYmxhY2tob2xlX25ldGRldjsKJiM0MzsJCQluZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LAomIzQzOwkJCQkJICAgJmFtcDtydC0mZ3Q7ZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKJiM0MzsJCQloYW5kbGVkID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChoYW5kbGVkKQomIzQzOwkJCWxpc3RfZGVsX2luaXQoJmFtcDtydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF9saXN0LCBjcHUpOwotCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTsKJiM0MzsJCXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsOwogCi0JCWlmIChsaXN0X2VtcHR5KCZhbXA7dWwtJmd0O2hlYWQpKQotCQkJY29udGludWU7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsICZhbXA7dWwtJmd0O2hlYWQsIGRzdC5ydF91bmNhY2hlZCkgewotCQkJc3RydWN0IGluZXQ2X2RldiAqcnRfaWRldiA9IHJ0LSZndDtydDZpX2lkZXY7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gcnQtJmd0O2RzdC5kZXY7Ci0JCQlib29sIGhhbmRsZWQgPSBmYWxzZTsKLQotCQkJaWYgKHJ0X2lkZXYgJmFtcDsmYW1wOyBydF9pZGV2LSZndDtkZXYgPT0gZGV2KSB7Ci0JCQkJcnQtJmd0O3J0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpOwotCQkJCWluNl9kZXZfcHV0KHJ0X2lkZXYpOwotCQkJCWhhbmRsZWQgPSB0cnVlOwotCQkJfQotCi0JCQlpZiAocnRfZGV2ID09IGRldikgewotCQkJCXJ0LSZndDtkc3QuZGV2ID0gYmxhY2tob2xlX25ldGRldjsKLQkJCQluZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LAotCQkJCQkJICAgJmFtcDtydC0mZ3Q7ZHN0LmRldl90cmFja2VyLAotCQkJCQkJICAgR0ZQX0FUT01JQyk7Ci0JCQkJaGFuZGxlZCA9IHRydWU7Ci0JCQl9Ci0JCQlpZiAoaGFuZGxlZCkKLQkJCQlsaXN0X2RlbF9pbml0KCZhbXA7cnQtJmd0O2RzdC5ydF91bmNhY2hlZCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpOwomIzQzOwkJdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2hhc2hfcHRyKGRldiwgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldOwomIzQzOwkJcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7CiYjNDM7CQlydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCgmYW1wO3RhYmxlLSZndDttaXNtYXRjaCwgZGV2KTsKIAl9CiB9CiAKQEAgLTY5ODIsMTAgJiM0Mzs3MDEwLDE4IEBAIGludCBfX2luaXQgaXA2X3JvdXRlX2luaXQodm9pZCkKICNlbmRpZgogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF9saXN0LCBjcHUpOwomIzQzOwkJc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlpbnQgYnVja2V0OwomIzQzOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCWZvciAoYnVja2V0ID0gMDsgYnVja2V0ICZsdDsgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0JiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbYnVja2V0XTsKIAotCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKLQkJc3Bpbl9sb2NrX2luaXQoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7CiYjNDM7CQkJc3Bpbl9sb2NrX2luaXQoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQl9CiYjNDM7CQlJTklUX0xJU1RfSEVBRCgmYW1wO3RhYmxlLSZndDttaXNtYXRjaC5oZWFkKTsKJiM0MzsJCXNwaW5fbG9ja19pbml0KCZhbXA7dGFibGUtJmd0O21pc21hdGNoLmxvY2spOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoCmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2gKQEAgLTM4NSw2ICYjNDM7Mzg1LDM3IEBAIHJ1bl90ZXN0cygpCiAJY2xlYW51cF94ZnJtX2RldgogfQogCiYjNDM7dGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHNlbmRlcl9waWQKJiM0MzsJbG9jYWwgYmFja2xvZwomIzQzOwlsb2NhbCByYwomIzQzOwomIzQzOwkjIEEgbG9jYWwgcm91dGUgdGhyb3VnaCBhIFZSRiB1c2VzIHRoZSBWUkYgYXMgZHN0LmRldiB3aGlsZSByZXRhaW5pbmcKJiM0MzsJIyB0aGUgVlJGIG1lbWJlciBpbnRlcmZhY2UgaW4gcnQ2aV9pZGV2LiBSYXcgaGVhZGVyIHNlbmRzIGNyZWF0ZSB1bmNhY2hlZAomIzQzOwkjIHJvdXRlcywgYW5kIG5ldGVtIGtlZXBzIHRoZW0gcmVmZXJlbmNlZCB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIGRlbGV0ZWQuCiYjNDM7CXJ1bl9jbWRfaG9zdDEgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHMKJiM0MzsJaXAgLTYgLW5ldG5zICYjMzQ7JGhvc3QxJiMzNDsgcm91dGUgYWRkIGxvY2FsICR7SE9TVDFfNn0vMTI4IGRldiBldGgwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskaG9zdDEmIzM0OyAuL21zZ196ZXJvY29weSAtNiBcCiYjNDM7CQktUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFwKJiM0MzsJCSZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsKJiM0MzsJc2VuZGVyX3BpZD0kIQomIzQzOwl3YWl0ICYjMzQ7JHNlbmRlcl9waWQmIzM0OwomIzQzOwlyYz0kPwomIzQzOwlsb2dfdGVzdCAkcmMgMCAmIzM0O0NyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlcyYjMzQ7CiYjNDM7CVsgJHJjIC1uZSAwIF0gJmFtcDsmYW1wOyByZXR1cm4KJiM0MzsKJiM0MzsJYmFja2xvZz0kKGlwIG5ldG5zIGV4ZWMgJiMzNDskaG9zdDEmIzM0OyB0YyAtcyBxZGlzYyBzaG93IGRldiAke1ZSRn0pCiYjNDM7CWlmICEgZWNobyAmIzM0OyRiYWNrbG9nJiMzNDsgfCBncmVwIC1FcSAmIzM5O2JhY2tsb2cgLiogWzEtOV1bMC05XSpwJiMzOTs7IHRoZW4KJiM0MzsJCWxvZ190ZXN0IDEgMCAmIzM0O1JldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2MmIzM0OwomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWxvZ190ZXN0IDAgMCAmIzM0O1JldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2MmIzM0OwomIzQzOwomIzQzOwlydW5fY21kX2hvc3QxIHRpbWVvdXQgMiBpcCBsaW5rIGRlbCBldGgwCiYjNDM7CWxvZ190ZXN0ICQ/IDAgJiMzNDtGbHVzaCB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlcyYjMzQ7CiYjNDM7fQomIzQzOwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgdXNhZ2UKIApAQCAtNDI1LDYgJiM0Mzs0NTYsMTAgQEAgZWNobwogZWNobyAmIzM0O25ldGVtIHFkaXNjIG9uIFZSRiBkZXZpY2UmIzM0OwogcnVuX3Rlc3RzCiAKJiM0MztlY2hvCiYjNDM7ZWNobyAmIzM0O1VuY2FjaGVkIElQdjYgcm91dGUgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzO3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaAomIzQzOwogcHJpbnRmICYjMzQ7XG5UZXN0cyBwYXNzZWQ6ICUzZFxuJiMzNDsgJHtuc3VjY2Vzc30KIHByaW50ZiAmIzM0O1Rlc3RzIGZhaWxlZDogJTNkXG4mIzM0OyAgICR7bmZhaWx9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3JlIFJvdXRpbmcgU3RhY2sgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiwgb3IgcG9zc2libHkgYSBidWcgZml4LCBpbiB0aGUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUuIEl0JiMzOTtzIHRhcmdldGluZyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgZ29hbCBpcyB0byBtb3ZlIGF3YXkgZnJvbSBwZXItQ1BVIGxpc3RzIGZvciB1bmNhY2hlZCByb3V0ZXMgYW5kIGluc3RlYWQgdXNlIGEgaGFzaCB0YWJsZS4gVGhhdCYjMzk7cyBhIGdvb2QgbW92ZTsgdGhlIGhhc2ggdGFibGUgc2hvdWxkIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHJvdXRlcyBvciBmcmVxdWVudCBkZXZpY2UgZGVsZXRpb25zLCBhcyB0aGlzIGFwcHJvYWNoIHdvdWxkIGltcHJvdmUgZmx1c2hpbmcgb2YgdW5jYWNoZWQgcm91dGVzIHdoZW4gYSBkZXZpY2UgaXMgZGVsZXRlZC4KClRoZSBjb21taXQgaW50cm9kdWNlcyBgcnRfdW5jYWNoZWRfdGFibGVgIGFuZCBgcnQ2X3VuY2FjaGVkX3RhYmxlYCwgd2hpY2ggYXJlIGVzc2VudGlhbGx5IGFycmF5cyBvZiBgdW5jYWNoZWRfbGlzdGAgYnVja2V0cy4gSW4gSVB2NiwgdGhleSYjMzk7dmUgYWxzbyBhZGRlZCBhIGBtaXNtYXRjaGAgbGlzdCwgd2hpY2ggSSYjMzk7bGwgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaGF0JiMzOTtzIGxpa2VseSBmb3Igcm91dGVzIHRoYXQsIGZvciB3aGF0ZXZlciByZWFzb24sIG5lZWQgdG8gYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggbXVsdGlwbGUgaW50ZXJmYWNlcy4KCkkgc2VlIHRoYXQgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdW5jYWNoZWQgcm91dGUgbWFuYWdlbWVudCwgYXJlIGdldHRpbmcgbW9kaWZpZWQ6IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAsIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YC4KCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGZ1bmRhbWVudGFsIGhlcmUsIGl0JiMzOTtzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nLiBCdXQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBJIHNob3VsZCBkaWcgZGVlcGVyIHRvIGNvbnNpZGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciB0ZXN0aW5nIGFuZCBlZGdlIGNhc2VzLiBUaGUgdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hgIHVzZXMgVlJGLCBuZXRlbSwgYW5kIHJhd19oZHJpbmNsLCBzbyBpdCYjMzk7cyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgYENPTkZJR19ORVRfVlJGYCBhbmQgYENPTkZJR19ORVRfU0NIX05FVEVNYCBhcmUgZGVmaW5pdGVseSB3b3J0aCBjb25zaWRlcmluZywgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gdGVzdGluZyB0aGUgJiMzOTttaXNtYXRjaCYjMzk7IHNjZW5hcmlvIGluIElQdjYuIEkgc2hvdWxkIGFsc28gdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0X2FkZF91bmNhY2hlZF9saXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3JvdXRlLmg9MjcwPXZvaWQgZmliX21vZGlmeV9wcmVmaXhfbWV0cmljKHN0cnVjdCBpbl9pZmFkZHIgKmlmYSwgdTMyIG5ld19tZXRyaWMpO1xuaW5jbHVkZS9uZXQvcm91dGUuaC0yNzEtXG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI3Mjp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KTtcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjczLXZvaWQgcnRfZGVsX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTUyMT1zdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLCBzdHJ1Y3QgcnRhYmxlICpydClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE1MzktXHRcdGlmIChvcmlnKSB7XG5uZXQvaXB2NC9yb3V0ZS5jOjE1NDA6XHRcdFx0cnRfYWRkX3VuY2FjaGVkX2xpc3Qob3JpZyk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE1NDEtXHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2b3JpZy1cdTAwM2Vkc3QpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU2Mz1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTU2NC1cbm5ldC9pcHY0L3JvdXRlLmM6MTU2NTp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxubmV0L2lwdjQvcm91dGUuYy0xNTY2LXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE2MzI9c3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE2NzctXHRcdFx0fVxubmV0L2lwdjQvcm91dGUuYzoxNjc4Olx0XHRcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTY3OS1cdFx0fVxubmV0L2lwdjQvcm91dGUuYy0xNjgwLVx0fSBlbHNlXG5uZXQvaXB2NC9yb3V0ZS5jOjE2ODE6XHRcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTY4Mi1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIzMDg9aXBfcm91dGVfaW5wdXRfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MDItXHRcdGlmICh1bmxpa2VseSghcnRfY2FjaGVfcm91dGUobmhjLCBydGgpKSlcbm5ldC9pcHY0L3JvdXRlLmM6MjUwMzpcdFx0XHRydF9hZGRfdW5jYWNoZWRfbGlzdChydGgpO1xubmV0L2lwdjQvcm91dGUuYy0yNTA0LVx0fVxuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jPTY2PXN0YXRpYyBpbnQgeGZybTRfZmlsbF9kc3Qoc3RydWN0IHhmcm1fZHN0ICp4ZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTkwLVx0eGRzdC1cdTAwM2V1LnJ0LnJ0X210dV9sb2NrZWQgPSBydC1cdTAwM2VydF9tdHVfbG9ja2VkO1xubmV0L2lwdjQveGZybTRfcG9saWN5LmM6OTE6XHRydF9hZGRfdW5jYWNoZWRfbGlzdChcdTAwMjZ4ZHN0LVx1MDAzZXUucnQpO1xubmV0L2lwdjQveGZybTRfcG9saWN5LmMtOTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGl0IHRvdWNoZXM6IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAsIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YC4gVGhlc2UgYXJlIGFsbCAqY29yZSogbmV0d29ya2luZyBmdW5jdGlvbnMuIE5vdGhpbmcgcGVyaXBoZXJhbCwgdGhlc2UgYXJlIGZ1bmRhbWVudGFsLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGFyZSBiZWluZyBtb2RpZmllZCByYWlzZXMgYSBmbGFnOyBpdCBtZWFucyB0aGVyZSYjMzk7cyBwb3RlbnRpYWxseSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiByb3V0aW5nLCBjYWNoaW5nLCBhbmQgZGV2aWNlIGZsdXNoaW5nLCBsaWtlbHkgYXQgYSBsb3cgbGV2ZWwuCgpUaGUgYWNjb21wYW55aW5nIHRlc3Qgc2NyaXB0IG1lbnRpb25zIFZSRiBhbmQgTkVURU0uIEludGVyZXN0aW5nLiBWUkYgbWVhbnMgVmlydHVhbCBSb3V0aW5nIGFuZCBGb3J3YXJkaW5nLCBhbmQgTkVURU0sIE5ldHdvcmsgRW11bGF0aW9uLCBjb3VsZCBtZWFuIHRoYXQgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB3b3JrIHdpdGggcm91dGluZyB3aXRoaW4gYSBzZWdtZW50ZWQgbmV0d29yayBlbnZpcm9ubWVudCBvciB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgdG8gc2ltdWxhdGUgbmV0d29yayBjb25kaXRpb25zIHN1Y2ggYXMgbGF0ZW5jeSwgcGFja2V0IGxvc3MsIG9yIGppdHRlciB0byB0ZXN0IHRoZSBjaGFuZ2VzIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGludmVzdGlnYXRlIHRoZSB1c2VzIG9mIHRob3NlIG9wdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgZWZmZWN0cy4KCkJlZm9yZSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBgcnRfZmx1c2hfZGV2YCBpcyBub3JtYWxseSBjYWxsZWQuIEl0JiMzOTtzIGEgc3RhbmRhcmQgaG91c2VrZWVwaW5nIGZ1bmN0aW9uLCBJIG5lZWQgdG8ga25vdyB0aGUgdHlwaWNhbCBleGVjdXRpb24gcGF0aHMgYmVmb3JlIEkgbG9vayBmb3IgYW55IG5ldyBvbmVzLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIHVudXN1YWwgY2FsbHMgb3IgY2FsbHMgZnJvbSBub24tc3RhbmRhcmQgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgcGF0Y2gmIzM5O3MgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydF9mbHVzaF9kZXYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcm91dGUuaD0xMzE9dm9pZCBydF9jYWNoZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQpO1xuaW5jbHVkZS9uZXQvcm91dGUuaDoxMzI6dm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL25ldC9yb3V0ZS5oLTEzMy1cbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNTA2PXN0YXRpYyBpbnQgZmliX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE3LVx0XHRmaWJfZGlzYWJsZV9pcChkZXYsIGV2ZW50LCB0cnVlKTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MTg6XHRcdHJ0X2ZsdXNoX2RldihkZXYpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUxOS1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU5MT1zdGF0aWMgdm9pZCBpcHY0X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTYtXG5uZXQvaXB2NC9yb3V0ZS5jOjE1OTc6dm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L3JvdXRlLmMtMTU5OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqRmx1c2hpbmcgdGhlIFJvdXRpbmcgVGFibGVzIFVwb24gRGV2aWNlIFVucmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcm91dGluZyB0YWJsZXMgYXJlIGhhbmRsZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gYHJ0X2ZsdXNoX2RldmAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSwgYW5kIEkgc2VlIGl0IGdldHMgdHJpZ2dlcmVkIGZyb20gYGZpYl9uZXRkZXZfZXZlbnRgIHNwZWNpZmljYWxseSB3aGVuIGEgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudCBvY2N1cnMuIFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0OyB3ZSBuZWVkIHRvIGNsZWFyIG91dCBhbnkgcm91dGluZyBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBhIGRldmljZSB3aGVuIGl0JiMzOTtzIGdvaW5nIGF3YXkuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZW4gSSBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NiB3aGljaCBpcyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCB3aGljaCBhbHNvIGRlYWxzIHdpdGggdGhlIG5ldGRldiBldmVudHMsIHdoaWNoIGxpa2VseSBoYW5kbGVzIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgY2xlYW4gdXAuIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5IHRvIGVuc3VyZSB0aGlzIGlzIGFzIGludGVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTE3OD1zdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yMDktXG5uZXQvaXB2Ni9yb3V0ZS5jOjIxMDpzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY2L3JvdXRlLmMtMjExLXtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTUwNzE9dm9pZCBydDZfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTA3My1cdHJ0Nl9zeW5jX2Rvd25fZGV2KGRldiwgZXZlbnQpO1xubmV0L2lwdjYvcm91dGUuYzo1MDc0Olx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KGRldik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzUtXHRuZWlnaF9pZmRvd24oXHUwMDI2bmRfdGJsLCBkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgdGhpcyBsb29rcyBwcm9taXNpbmcsIGRlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIHJ1bi4gTGV0JiMzOTtzIHNlZS4uLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHRvIHRhcmdldC4gUmlnaHQsIHRoZSBvbmVzIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFyZSBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIEhtbSwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgZGVjbGFyZWQgYXMgc3RhdGljOyB0eXBpY2FsbHksIHRob3NlIGFyZSBpbmxpbmVkLiBIb3dldmVyLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnQ2X2Rpc2FibGVfaXBgLCB3aGljaCBpcyBnbG9iYWwgYW5kIGV4cG9ydGVkLCBzbyBtYXliZSB0aGF0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludC4gSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgaGF2ZSBhIGxvb2sgYXQgYHJ0Nl9kaXNhYmxlX2lwYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0Nl9kaXNhYmxlX2lwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTIyNz12b2lkIHJ0Nl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgbmhfZmxhZ3MpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjI4OnZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMjktdm9pZCBydDZfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzY9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg4OC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg4OTpcdHJ0Nl9kaXNhYmxlX2lwKGRldiwgZXZlbnQpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zODkwLVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MzM2Mz1zdHJ1Y3QgZHN0X2VudHJ5ICppY21wNl9kc3RfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzODgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjMzODk6XHQvKiBBZGQgdGhpcyBkc3QgaW50byB1bmNhY2hlZF9saXN0IHNvIHRoYXQgcnQ2X2Rpc2FibGVfaXAoKSBjYW5cbm5ldC9pcHY2L3JvdXRlLmMtMzM5MC1cdCAqIGRvIHByb3BlciByZWxlYXNlIG9mIHRoZSBuZXRfZGV2aWNlXG4tLVxubmV0L2lwdjYvcm91dGUuYz01MDU1PXZvaWQgcnQ2X3N5bmNfZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzAtXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzE6dm9pZCBydDZfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxubmV0L2lwdjYvcm91dGUuYy01MDcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEdsb2JhbCBWYXJpYWJsZXMgYW5kIEV4cG9ydGVkIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gc29tZSBrZXkgc3ltYm9scyBoZXJlLiBgcnQ2X2Rpc2FibGVfaXBgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBJJiMzOTttIGFsc28gbm90aW5nIHRoYXQgYHJ0X2ZsdXNoX2RldmAsIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgYXJlIGFsbCBnbG9iYWwuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IGdsb2JhbHMgb2Z0ZW4gcmVwcmVzZW50IHNoYXJlZCBzdGF0ZSBvciBjcml0aWNhbCBmdW5jdGlvbmFsaXRpZXMuIE15IG5leHQgdGhvdWdodCBpcyB0byBzcGVjaWZpY2FsbHkgY29uZmlybSBpZiBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBLbm93aW5nIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYWNjZXNzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIG15IG5leHQgc3RlcHMgaW4gdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnJ0X2FkZF91bmNhY2hlZF9saXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI1OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRm9jdXNpbmcgb24gTm9uLVN0YXRpYyBGdW5jdGlvbiBEZXNpZ24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSByZWFsaXppbmcgaXQgZG9lc24mIzM5O3QgKm5lY2Vzc2FyaWx5KiBoYXZlIHRvIGJlIGV4cG9ydGVkIHRvIGEgbW9kdWxlIGluIHRoZSBzdHJpY3Qgc2Vuc2UuIFRoZSBjcml0aWNhbCBhc3BlY3QgaXMgc2ltcGx5IHRoYXQgaXQgbmVlZHMgdG8gYmUgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyB0aGUgY29yZSByZXF1aXJlbWVudC4gV2UmIzM5O3JlIGFpbWluZyBmb3IgYSBjZXJ0YWluIGxldmVsIG9mIHZpc2liaWxpdHkgb3IgYWNjZXNzLCBub3QgbmVjZXNzYXJpbHkgbW9kdWxhcml0eSBmb3IgaXRzIG93biBzYWtlLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aXNpdCB0aGF0IGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIGl0cyBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBjb25zaWRlciBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24gZ29hbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2FkZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0yMzA9dm9pZCBydDZfbXVsdGlwYXRoX3JlYmFsYW5jZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjMxLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjMyOnZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjMzLXZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MTQ2PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTE0Ny1cbm5ldC9pcHY2L3JvdXRlLmM6MTQ4OnZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXG5uZXQvaXB2Ni9yb3V0ZS5jLTE0OS17XG4tLVxubmV0L2lwdjYvcm91dGUuYz0yMzAxPXN0cnVjdCBydDZfaW5mbyAqaXA2X3BvbF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDItXHRcdFx0LyogMSByZWZjbnQgaXMgdGFrZW4gZHVyaW5nIGlwNl9ydF9jYWNoZV9hbGxvYygpLlxubmV0L2lwdjYvcm91dGUuYzoyMzQzOlx0XHRcdCAqIEFzIHJ0Nl91bmNhY2hlZF9saXN0X2FkZCgpIGRvZXMgbm90IGNvbnN1bWUgcmVmY250LFxubmV0L2lwdjYvcm91dGUuYy0yMzQ0LVx0XHRcdCAqIHRoaXMgcmVmY250IGlzIGFsd2F5cyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGV2ZW5cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDYtXHRcdFx0ICovXG5uZXQvaXB2Ni9yb3V0ZS5jOjIzNDc6XHRcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHJ0KTtcbm5ldC9pcHY2L3JvdXRlLmMtMjM0OC1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzNjM9c3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0zMzkxLVx0ICovXG5uZXQvaXB2Ni9yb3V0ZS5jOjMzOTI6XHRydDZfdW5jYWNoZWRfbGlzdF9hZGQocnQpO1xubmV0L2lwdjYvcm91dGUuYy0zMzkzLVxuLS1cbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTgwPXN0YXRpYyBpbnQgeGZybTZfZmlsbF9kc3Qoc3RydWN0IHhmcm1fZHN0ICp4ZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEwMi1cdHhkc3QtXHUwMDNldS5ydDYucnQ2aV9zcmMgPSBydC1cdTAwM2VydDZpX3NyYztcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jOjEwMzpcdHJ0Nl91bmNhY2hlZF9saXN0X2FkZChcdTAwMjZ4ZHN0LVx1MDAzZXUucnQ2KTtcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEwNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgYXJlIGdsb2JhbCBmdW5jdGlvbnMg4oCTIHRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBwb3RlbnRpYWwgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRob3NlIGFyZSBiZWluZyBjYWxsZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkZWZpbmVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHNlZWluZyBgTkVUX1ZSRmAsIGBORVRfU0NIX05FVEVNYCwgYElORVRgLCBhbmQgYElQVjZgLiBJbnRlcmVzdGluZywgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQ/IENvbnRleHQgaXMga2luZyBoZXJlIQoKVGhlIHRlc3Qgc2NyaXB0IHVzZXMgYHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzYC4gQWgsIGBORVRfU0NIX05FVEVNYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGdpdmVuIHRoZSBgbmV0ZW1gIGNvbW1hbmQgYmVpbmcgdXNlZDsgdGhhdCBvbmUgaXMgb2J2aW91cywgbm93LiBBbmQgb2YgY291cnNlLCBgTkVUX1ZSRmAgaXMgcmVsZXZhbnQsIGdpdmVuIHRoYXQgaXQmIzM5O3MgdXNpbmcgdGhlIHZpcnR1YWwgcm91dGluZyBhbmQgZm9yd2FyZGluZyBjb250ZXh0LgoKSSB0aGluayBpdCYjMzk7cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgYE5FVF9WUkZgIGFuZCBgTkVUX1NDSF9ORVRFTWAgdG8gbG9vayBhdCB0aGUgS2NvbmZpZywganVzdCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBJJiMzOTttIG1pc3NpbmcuIEFsd2F5cyBwYXlzIHRvIGJlIHRob3JvdWdoIHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZSRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQ2Mz1jb25maWcgTkVUS0lUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ3Mjpjb25maWcgTkVUX1ZSRlxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzMtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfTkVURU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTg0PWNvbmZpZyBORVRfU0NIX0dSRURcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0xOTQtXG5uZXQvc2NoZWQvS2NvbmZpZzoxOTU6Y29uZmlnIE5FVF9TQ0hfTkVURU1cbm5ldC9zY2hlZC9LY29uZmlnLTE5Ni1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgZW11bGF0b3IgKE5FVEVNKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgTkVUX1ZSRiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgTkVUX1ZSRmAgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpczogYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gQXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMsIHBhcmFtZXRlcnMsIG9yIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYWNjb3VudCBmb3IgYmV5b25kIHdoYXQgSSYjMzk7dmUgYWxyZWFkeSBjb25zaWRlcmVkPyBJJiMzOTttIHRoaW5raW5nIGJleW9uZCB0aGUgb2J2aW91cywgdGhlIHRoaW5ncyBJJiMzOTt2ZSBsaWtlbHkgYWxyZWFkeSBjaGVja2VkIG11bHRpcGxlIHRpbWVzLiBBcmUgdGhlcmUgc3VidGxlIGludGVyYWN0aW9ucywgb2JzY3VyZSBmbGFncywgb3IgcGxhdGZvcm0tc3BlY2lmaWMgbnVhbmNlcyB0aGF0IGNvdWxkIGJpdGUgbWUgbGF0ZXI/IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSB3YW50IHRvIGVuc3VyZSB0aGlzIGVudGlyZSB2aXJ0dWFsIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgc2V0dXAgaXMgdHJ1bHkgY29tcGxldGUgYW5kIHJvYnVzdC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgSSYjMzk7bSBvdmVybG9va2luZyB0aGF0IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBkb3duIHRoZSBsaW5lIC0gSSYjMzk7bSBhbHJlYWR5IGVudmlzaW9uaW5nIHBvdGVudGlhbCB0cm91Ymxlc2hvb3Rpbmcgc2NlbmFyaW9zLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIGhhdmUgdG8gZXhoYXVzdGl2ZWx5IHRoaW5rIHRocm91Z2ggaWYgSSBoYXZlIGFjY291bnRlZCBmb3IgZXZlcnl0aGluZywgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2UgSSBoYXZlIHRvIHRoaW5rIGFib3V0LiBUaGF0JiMzOTtzIG15IGltbWVkaWF0ZSBmb2N1cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcyOlx0Y29uZmlnIE5FVF9WUkZcbiA0NzM6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgUm91dGluZyBhbmQgRm9yd2FyZGluZyAoTGl0ZSlcJiMzNDtcbiA0NzQ6XHRcdGRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTXG4gNDc1Olx0XHRkZXBlbmRzIG9uIE5FVF9MM19NQVNURVJfREVWXG4gNDc2Olx0XHRkZXBlbmRzIG9uIElQVjZfTVVMVElQTEVfVEFCTEVTIHx8IElQVjY9blxuIDQ3NzpcdFx0aGVscFxuIDQ3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciBtYXBwaW5nIGludGVyZmFjZXMgaW50byBWUkYmIzM5O3MuIFRoZVxuIDQ3OTpcdFx0ICBzdXBwb3J0IGVuYWJsZXMgVlJGIGRldmljZXMuXG4gNDgwOlx0XG4gNDgxOlx0Y29uZmlnIFZTT0NLTU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjIyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgcmVxdWVzdGVkOgoKKipOZXR3b3JrIFJvdXRpbmcgVGFibGUgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgc29tZSBjcml0aWNhbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhyZWUga2V5IGZsYWdzOiBgSVBfTVVMVElQTEVfVEFCTEVTYCwgYE5FVF9MM19NQVNURVJfREVWYCwgYW5kIGBJUFY2X01VTFRJUExFX1RBQkxFU2AuIFRoZXNlIGFyZSBhbGwgaGlnaGx5IHJlbGV2YW50IHRvIGhvdyBhIHN5c3RlbSBoYW5kbGVzIHJvdXRpbmcgaW5mb3JtYXRpb24gYW5kIHRoZSB1c2Ugb2YgbXVsdGlwbGUgcm91dGluZyB0YWJsZXMuIFdpdGggYElQX01VTFRJUExFX1RBQkxFU2AsIEkmIzM5O20gZW52aXNpb25pbmcgdGhlIHNldHVwIG9mIG11bHRpcGxlIHJvdXRpbmcgdGFibGVzIGZvciBJUHY0LiBUaGVuIGBJUFY2X01VTFRJUExFX1RBQkxFU2AgY29tZXMgaW50byBwbGF5IGFuZCBkZWFscyB3aXRoIHRoZSBzaW1pbGFyIHNldHVwIGZvciBJUHY2LCBhbGxvd2luZyBmb3IgbW9yZSBjb21wbGV4IHJvdXRpbmcgZGVjaXNpb25zIGJhc2VkIG9uIHBvbGljeSBvciBvdGhlciBjcml0ZXJpYS4gRmluYWxseSBgTkVUX0wzX01BU1RFUl9ERVZgIC0gdGhpcyBmbGFnIG1ha2VzIG1lIHRoaW5rIGFib3V0IGEgbWFzdGVyIG5ldHdvcmsgZGV2aWNlIGNvbnRyb2xsaW5nIGxheWVyIDMgcm91dGluZyBkZWNpc2lvbnMsIHdoaWNoIGNvdWxkIGJlIGV4dHJlbWVseSB1c2VmdWwgaW4gbWFueSBlbnZpcm9ubWVudHMuIEkgYW0gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHNjZW5hcmlvcyBpbiBteSBoZWFkLCB0aGlua2luZyBhYm91dCBwb2xpY3kgcm91dGluZywgVlJGLCBhbmQgaXNvbGF0aW9uLiBJdCYjMzk7cyByZWFsbHkgdGhlIGJhc2lzIGZvciBhbGwgc29ydHMgb2YgaW50ZXJlc3RpbmcgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgSSBjYW4gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBhbmQgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfTDNfTUFTVEVSX0RFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbDNtZGV2L0tjb25maWctNS1cbm5ldC9sM21kZXYvS2NvbmZpZzo2OmNvbmZpZyBORVRfTDNfTUFTVEVSX0RFVlxubmV0L2wzbWRldi9LY29uZmlnLTctXHRib29sIFwmIzM0O0wzIE1hc3RlciBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2wzbWRldi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICA2Olx0Y29uZmlnIE5FVF9MM19NQVNURVJfREVWXG4gICA3Olx0XHRib29sIFwmIzM0O0wzIE1hc3RlciBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUIHx8IElQVjZcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgZ2x1ZSBiZXR3ZWVuIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBkZXZpY2VcbiAgMTE6XHRcdCAgZHJpdmVycyB0byBzdXBwb3J0IEwzIG1hc3RlciBkZXZpY2VzIGxpa2UgVlJGLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczOAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipFeGFtaW5pbmcgTmV0d29yayBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXR3b3JrIHNldHVwIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciB3aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlLiBGaXJzdCBhbmQgZm9yZW1vc3QsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0aGUgYE5FVF9MM19NQVNURVJfREVWYCBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIG5vbi1uZWdvdGlhYmxlIGZvciBob3cgdGhpcyBzeXN0ZW0gaXMgYXJjaGl0ZWN0ZWQsIEkgY2FuIHNlZSB0aGF0LiBCZXlvbmQgdGhhdCwgYW5kIHRvIGFsbG93IGZvciBwcm9wZXIgcm91dGluZyBhbmQgdHJhZmZpYyBtYW5hZ2VtZW50LCBJJiMzOTtsbCBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGBJUF9NVUxUSVBMRV9UQUJMRVNgIGFuZCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLiBNdWx0aXBsZSByb3V0aW5nIHRhYmxlcyB3aWxsIHByb3ZpZGUgdGhlIGZsZXhpYmlsaXR5IHRoaXMgZGVtYW5kcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01VTFRJUExFX1RBQkxFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTU2PWNvbmZpZyBJUF9GSUJfVFJJRV9TVEFUU1xuLS1cbm5ldC9pcHY0L0tjb25maWctNjItXG5uZXQvaXB2NC9LY29uZmlnOjYzOmNvbmZpZyBJUF9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctNjQtXHRib29sIFwmIzM0O0lQOiBwb2xpY3kgcm91dGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjM6XHRjb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXG4gIDY0Olx0XHRib29sIFwmIzM0O0lQOiBwb2xpY3kgcm91dGluZ1wmIzM0O1xuICA2NTpcdFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcbiAgNjY6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAgNjc6XHRcdGhlbHBcbiAgNjg6XHRcdCAgTm9ybWFsbHksIGEgcm91dGVyIGRlY2lkZXMgd2hhdCB0byBkbyB3aXRoIGEgcmVjZWl2ZWQgcGFja2V0IGJhc2VkXG4gIDY5Olx0XHQgIHNvbGVseSBvbiB0aGUgcGFja2V0JiMzOTtzIGZpbmFsIGRlc3RpbmF0aW9uIGFkZHJlc3MuIElmIHlvdSBzYXkgWSBoZXJlLFxuICA3MDpcdFx0ICB0aGUgTGludXggcm91dGVyIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgdGhlIHBhY2tldCYjMzk7cyBzb3VyY2VcbiAgNzE6XHRcdCAgYWRkcmVzcyBpbnRvIGFjY291bnQuIEZ1cnRoZXJtb3JlLCB0aGUgVE9TIChUeXBlLU9mLVNlcnZpY2UpIGZpZWxkXG4gIDcyOlx0XHQgIG9mIHRoZSBwYWNrZXQgY2FuIGJlIHVzZWQgZm9yIHJvdXRpbmcgZGVjaXNpb25zIGFzIHdlbGwuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjMzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0OgoKKipGb2N1c2luZyBJbjogVGhlIE5lZWQgZm9yIGBJUF9BRFZBTkNFRF9ST1VURVJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjdXQgdG8gdGhlIGNoYXNlLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyBwcmV0dHkgY2xlYXI6IFdlJiMzOTtyZSBhdCBhIHBvaW50IHdoZXJlIHRoZSBzdGFuZGFyZCwgb3V0LW9mLXRoZS1ib3ggSVAgcm91dGluZyBzZXR1cCBqdXN0IHdvbiYjMzk7dCBjdXQgaXQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uLCBhIGRlc2lnbiwgb3IgYSBzZXQgb2YgcmVxdWlyZW1lbnRzIHRoYXQgZGVtYW5kcyBtb3JlIGdyYW51bGFyIGNvbnRyb2wsIG1vcmUgc29waGlzdGljYXRlZCBmZWF0dXJlIHNldHMsIGFuZCBwcm9iYWJseSBtb3JlIHJvYnVzdCBwZXJmb3JtYW5jZSB0aGFuIGEgYmFzaWMgcm91dGVyIGNhbiBwcm92aWRlLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBzaW1wbGUgY29ubmVjdGl2aXR5OyBpdCYjMzk7cyBhYm91dCBhZHZhbmNlZCByb3V0aW5nIHByb3RvY29scywgdHJhZmZpYyBlbmdpbmVlcmluZywgcGVyaGFwcyBldmVuIG5ldHdvcmsgYXV0b21hdGlvbiBhbmQgcHJvZ3JhbW1hYmlsaXR5LiBUaGUgdmVyeSBmYWN0IHRoYXQgYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgdGhlIGZvY3VzLCBzYXlzIHNvbWV0aGluZyBhYm91dCB0aGUgY29tcGxleGl0eSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBJdCBjb3VsZCBiZSBzY2FsZSwgc2VjdXJpdHksIG9yIGEgbWl4IG9mIGJvdGggdGhhdCBpcyBwdXNoaW5nIHVzIGluIHRoYXQgZGlyZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfQURWQU5DRURfUk9VVEVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NT1jb25maWcgSVBfTVVMVElDQVNUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNC1cbm5ldC9pcHY0L0tjb25maWc6MTU6Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxubmV0L2lwdjQvS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7SVA6IGFkdmFuY2VkIHJvdXRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHRjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXG4gIDE2Olx0XHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgSWYgeW91IGludGVuZCB0byBydW4geW91ciBMaW51eCBib3ggbW9zdGx5IGFzIGEgcm91dGVyLCBpLmUuIGFzIGFcbiAgMTk6XHRcdCAgY29tcHV0ZXIgdGhhdCBmb3J3YXJkcyBhbmQgcmVkaXN0cmlidXRlcyBuZXR3b3JrIHBhY2tldHMsIHNheSBZOyB5b3VcbiAgMjA6XHRcdCAgd2lsbCB0aGVuIGJlIHByZXNlbnRlZCB3aXRoIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFsbG93IG1vcmUgcHJlY2lzZVxuICAyMTpcdFx0ICBjb250cm9sIGFib3V0IHRoZSByb3V0aW5nIHByb2Nlc3MuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZSBrZXJuZWw6XG4gIDI0Olx0XHQgIGFuc3dlcmluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdHdvOgoKKipQcmVsaW1pbmFyeSBBc3Nlc3NtZW50IG9mIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBJUF9BRFZBTkNFRF9ST1VURVJgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0IHNlZW1zLiBObyByZWFsIGRlcGVuZGVuY2llcyBJIGNhbiBpbW1lZGlhdGVseSBpZGVudGlmeS4gSXQgc2hvdWxkIGJlIHByZXR0eSBlYXN5IHRvIHdvcmsgd2l0aCBpbiBpc29sYXRpb24sIHdoaWNoIGlzIGFsd2F5cyBuaWNlLgoKTm93LCB3aGF0IGFib3V0IHRoYXQgYElQVjZfTVVMVElQTEVfVEFCTEVTYCBvcHRpb24/IE5lZWQgdG8gZ2l2ZSB0aGF0IG9uZSBhIGJpdCBtb3JlIHRob3VnaHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBhbmQgc2VlIGlmIGl0IGhpbmdlcyBvbiBhbnl0aGluZyBlbHNlIGluIHRoZSBzdGFjay4gUHJvYmFibHkgd29ydGggY3Jvc3MtcmVmZXJlbmNpbmcgdGhhdCB3aXRoIG90aGVyIGZlYXR1cmVzLiBHb3R0YSBtYWtlIHN1cmUgaXQgZG9lc24mIzM5O3QgY3JlYXRlIGFueSB1bmV4cGVjdGVkIGNvbmZsaWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MjMyPWNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzc6XHRjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyMzg6XHRcdGJvb2wgXCYjMzQ7SVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcJiMzNDtcbiAyMzk6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyNDA6XHRcdGhlbHBcbiAyNDE6XHRcdCAgU3VwcG9ydCBtdWx0aXBsZSByb3V0aW5nIHRhYmxlcy5cbiAyNDI6XHRcbiAyNDM6XHRjb25maWcgSVBWNl9TVUJUUkVFU1xuIDI0NDpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4gMjQ1Olx0XHRkZXBlbmRzIG9uIElQVjZfTVVMVElQTEVfVEFCTEVTXG4gMjQ2Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgc28gYElQVjZfTVVMVElQTEVfVEFCTEVTYCBhcHBlYXJzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgbm8gZ290Y2hhcyB0aGVyZSwgbm8gaGlkZGVuIGRlcGVuZGVuY2llcyB0byB0cmlwIG1lIHVwLiBUaGF0JiMzOTtzIGdvb2QsIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGggb24gdGhhdCBvbmUuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgTkVUX1NDSF9ORVRFTWAuIEkgd2FudCB0byBkaWcgaW50byB0aGF0IG9uZSBhIGJpdCBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdGNvbmZpZyBORVRfU0NIX05FVEVNXG4gMTk2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGVtdWxhdG9yIChORVRFTSlcJiMzNDtcbiAxOTc6XHRcdGhlbHBcbiAxOTg6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW11bGF0ZSBuZXR3b3JrIGRlbGF5LCBsb3NzLCBhbmQgcGFja2V0XG4gMTk5Olx0XHQgIHJlLW9yZGVyaW5nLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB0byBzaW11bGF0ZSBuZXR3b3JrcyB3aGVuXG4gMjAwOlx0XHQgIHRlc3RpbmcgYXBwbGljYXRpb25zIG9yIHByb3RvY29scy5cbiAyMDE6XHRcbiAyMDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDIwMzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfbmV0ZW0uXG4gMjA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTM3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxpbmcgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIG9yIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBhbGwgaGluZ2VzIG9uIGBORVRfU0NIRURgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0JiMzOTtzIHRoZSBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgYW5kL29yIGZhaXIgcXVldWVpbmcgbWVudSwgd2hpY2ggbWVhbnMgKmV2ZXJ5dGhpbmcqIHJlbGF0ZWQgdG8gaG93IG5ldHdvcmsgdHJhZmZpYyBnZXRzIHByaW9yaXRpemVkIGFuZCBoYW5kbGVkIGlzIGltcGFjdGVkIGJ5IHRoaXMuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHBvdGVudGlhbGx5IGh1Z2UsIGRlcGVuZGluZyBvbiB3aGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2l0aGluIGBORVRfU0NIRURgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGF0JiMzOTtzICp1c2luZyogYE5FVF9TQ0hFRGAgdG8gZGV0ZXJtaW5lIGl0cyBpbXBhY3QuIEl0IGFmZmVjdHMgcGVyZm9ybWFuY2UgYW5kIHdoaWNoIGFwcHMvZGF0YSBoYXZlIHByaW9yaXR5IG92ZXIgb3RoZXJzLiBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDY6XHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBORVRfU0NIX0ZJRk9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcbiAgMTE6XHRcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xuICAxMjpcdFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xuICAxMzpcdFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcbiAgMTQ6XHRcdCAgXCYjMzQ7ZmFpcmx5XCYjMzQ7IGhhdmUgYmVlbiBwcm9wb3NlZC5cbiAgMTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0d29yayBDb25maWd1cmF0aW9uIGFuZCBSb3V0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgc2NoZWR1bGluZyBhc3BlY3RzLCBoZW5jZSB0aGUgbmVlZCBmb3IgYE5FVF9TQ0hFRGAuIE5vdywgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aDogYElORVRgLCBgSVBWNmAsIGBORVRfVlJGYCwgYE5FVF9MM19NQVNURVJfREVWYCwgYElQX01VTFRJUExFX1RBQkxFU2AsIGBJUF9BRFZBTkNFRF9ST1VURVJgLCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLCBgTkVUX1NDSEVEYCwgYW5kIGBORVRfU0NIX05FVEVNYC4gVGhpcyBnaXZlcyBtZSB0aGUgYnJvYWQgcGljdHVyZS4KCk15IG1haW4gYXJlYSBvZiBjb25jZXJuIGFyZSB0aGVzZSBrZXkgc3ltYm9sczogYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCwgYW5kLCBpbXBvcnRhbnRseSwgYHJ0Nl9kaXNhYmxlX2lwYC4gSeKAmW0gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIG1hbmFnZW1lbnQuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgcnQ2X2Rpc2FibGVfaXBgIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLiBZZXMsIHRoYXQmIzM5O3MgcmlnaHQuIGBydDZfZGlzYWJsZV9pcGAgY2FsbHMgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUgYmVoYXZpb3IgSSBleHBlY3QuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBydF9mbHVzaF9kZXZgLiBBaCwgSSB0aG91Z2h0IEkgc2F3IHNvbWV0aGluZy4uLiBgaXB2NF9kc3RfZGVzdHJveWAuLi4gbm8sIHdhaXQsIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBMZXQgbWUgcmUtZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgcnRfZmx1c2hfZGV2YC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNydWNpYWwgZGVwZW5kZW5jeSBvciBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRfZmx1c2hfZGV2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3JvdXRlLmg9MTMxPXZvaWQgcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0KTtcbmluY2x1ZGUvbmV0L3JvdXRlLmg6MTMyOnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9uZXQvcm91dGUuaC0xMzMtXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUxNy1cdFx0ZmliX2Rpc2FibGVfaXAoZGV2LCBldmVudCwgdHJ1ZSk7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNTE4Olx0XHRydF9mbHVzaF9kZXYoZGV2KTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MTktXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE1OTE9c3RhdGljIHZvaWQgaXB2NF9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTk2LVxubmV0L2lwdjQvcm91dGUuYzoxNTk3OnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4NAoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiA1NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdW5jYWNoZWQgcm91dGVzLiBJIHNlZSBgcnRfZmx1c2hfZGV2YCBiZWluZyBjYWxsZWQgYnkgYGZpYl9uZXRkZXZfZXZlbnRgLCB3aGljaCBpcyBhIG5vdGlmaWVyLiBUaGF0JiMzOTtzIGZpbmUsIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBBUEkgZW50cnlwb2ludCBhbmQgYGZpYl9uZXRkZXZfZXZlbnRgIGlzIHRoZSBvbmx5IGNhbGxlciBvZiBgcnRfZmx1c2hfZGV2YCwgc28gd2UmIzM5O3JlIGdvb2QgdG8gaW5jbHVkZSBpdC4gU2ltaWxhcmx5LCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpcyB1c2VkIGluIGtleSBwbGFjZXMgbGlrZSBgaXA2X3BvbF9yb3V0ZWAsIGBpY21wNl9kc3RfYWxsb2NgLCBhbmQgYHhmcm02X2ZpbGxfZHN0YCBhbmQgYHJ0X2FkZF91bmNhY2hlZF9saXN0YCBpcyB1c2VkIGluIGEgc2ltaWxhciBzZXQgb2YgZ29vZCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBjb3JlIGNoYW5nZS4gVGhlIHBhdGNoIHNoaWZ0cyBmcm9tIGEgc2ltcGxlIHBlci1DUFUgbGlzdCB0byBhIHBlci1DUFUgaGFzaCB0YWJsZSBvZiBsaXN0cy4gSVB2NiBnZXRzIGFuIGV4dHJhIGBtaXNtYXRjaGAgbGlzdCB0aHJvd24gaW4uIFRoYXQgbWVhbnMgdGhlIGxvZ2ljIGluIGZ1bmN0aW9ucyBsaWtlIGBydF9mbHVzaF9kZXZgIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBhcmUgZ29pbmcgdG8gYmUgcmV3cml0dGVuIHRvIGl0ZXJhdGUgb3ZlciBidWNrZXRzIG9yIHRoYXQgbmV3IG1pc21hdGNoIGxpc3QsIHdoaWNoIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKi4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4KClNvLCBsZXQmIzM5O3MgYXNzZW1ibGUgb3VyIHBsYW4uIEdpdmVuIHRoaXMgZnVuY3Rpb25hbCBzaGlmdCBhbmQgdGhlIGxpa2VseSBlZGdlIGNhc2VzLCBJIHdhbnQgdG8ga2VlcCB0aGUgdGVzdGluZyB2ZXJ5IGZvY3VzZWQuIFRoZSBjb25maWdzIHNwZWNpZmllZCBhcmUgcmVsZXZhbnQsIGVzcGVjaWFsbHkgdGhlIG9uZXMgdGhhdCB0cmlnZ2VyIHNwZWNpZmljIG5ldHdvcmtpbmcgZmVhdHVyZXMgbGlrZSBWUkYsIE5ldGVtIGFuZCBtdWx0aXBsZSByb3V0aW5nIHRhYmxlcy4gU28gdGhhdCBpbmNsdWRlcyBgSU5FVGAsIGBJUFY2YCwgYE5FVF9WUkZgLCBgTkVUX0wzX01BU1RFUl9ERVZgLCBgSVBfTVVMVElQTEVfVEFCTEVTYCwgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGBJUFY2X01VTFRJUExFX1RBQkxFU2AsIGBORVRfU0NIRURgIGFuZCBgTkVUX1NDSF9ORVRFTWAuCgpUaGUgY29yZSBzeW1ib2xzIEkmIzM5O20gZm9jdXNpbmcgb24gZm9yIHRoaXMgcGF0Y2ggYXJlOiBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgIGFuZCBgcnQ2X2Rpc2FibGVfaXBgLiBUaGUgVlJGIGFuZCBOZXRlbSBjb25maWdzIGxpa2VseSBoaW50IGF0IHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB3ZSYjMzk7bGwgc2VlIGludGVyZXN0aW5nIGJlaGF2aW9yLCBsaWtlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzIGluIElQdjYsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgd2Ugd2FudCB0byBjYXRjaC4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgaGFuZGxlZCwgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCBzbyB0aGlzIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O05FVF9WUkYmIzM0OywKICAgICYjMzQ7TkVUX0wzX01BU1RFUl9ERVYmIzM0OywKICAgICYjMzQ7SVBfTVVMVElQTEVfVEFCTEVTJiMzNDssCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUFY2X01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9ORVRFTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0X2FkZF91bmNhY2hlZF9saXN0JiMzNDssCiAgICAmIzM0O3J0X2ZsdXNoX2RldiYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9hZGQmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfZGVsJiMzNDssCiAgICAmIzM0O3J0Nl9kaXNhYmxlX2lwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIGRhdGEgc3RydWN0dXJlIHVzZWQgZm9yIHRyYWNraW5nIHVuY2FjaGVkIHJvdXRlcyBpbiBib3RoIElQdjQgYW5kIElQdjYgZnJvbSBhIHNpbmdsZSBwZXItQ1BVIGxpc3QgdG8gYSBwZXItQ1BVIGhhc2ggdGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBob3cgdW5jYWNoZWQgcm91dGVzIGFyZSBhZGRlZCwgZGVsZXRlZCwgYW5kIGZsdXNoZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gVGhlIHRlc3Qgc2NyaXB0IGluZGljYXRlcyB0aGF0IFZSRiBhbmQgTkVURU0gYXJlIHVzZWQgdG8gdHJpZ2dlciBzcGVjaWZpYyBlZGdlIGNhc2VzIChsaWtlIG1pc21hdGNoZWQgZGV2aWNlcyBpbiBJUHY2KSwgc28gZW5hYmxpbmcgdGhvc2UgY29uZmlncyBpcyBpbXBvcnRhbnQgZm9yIHRob3JvdWdoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDssCiAgICAmIzM0O05FVF9MM19NQVNURVJfREVWJiMzNDssCiAgICAmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBWNl9NVUxUSVBMRV9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfTkVURU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICAgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfYWRkJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2RlbCYjMzQ7LAogICAgJiMzNDtydDZfZGlzYWJsZV9pcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFja2luZyB1bmNhY2hlZCByb3V0ZXMgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGZyb20gYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHRvIGEgcGVyLUNQVSBoYXNoIHRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIFRoZSB0ZXN0IHNjcmlwdCBpbmRpY2F0ZXMgdGhhdCBWUkYgYW5kIE5FVEVNIGFyZSB1c2VkIHRvIHRyaWdnZXIgc3BlY2lmaWMgZWRnZSBjYXNlcyAobGlrZSBtaXNtYXRjaGVkIGRldmljZXMgaW4gSVB2NiksIHNvIGVuYWJsaW5nIHRob3NlIGNvbmZpZ3MgaXMgaW1wb3J0YW50IGZvciB0aG9yb3VnaCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIHVzZXItY29udHJvbGxlZCBsZW5ndGhzIG9yIGJvdW5kcywgYW5kIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGxvY2tpbmcsIG9yIHVzZS1hZnRlci1mcmVlIChlLmcuLCBpZiBhIHJvdXRlIGlzIG5vdCBwcm9wZXJseSBmbHVzaGVkKSwgd2hpY2ggYXJlIHdlbGwgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYmU0ZTdhYzRiN2NjMWJkMmNhY2MxYmZlZmRiYjY3ODQ1ZWJkMDM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMjA6MjQ6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCA2MDRjYzUxZGZkOWJjLi4zZjliYzFlYzcyY2NlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTc0LDYgJiM0Mzs3NCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lnbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wa3Rfc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tcm91dGUuaCZndDsKQEAgLTE1NTIsMTEgJiM0MzsxNTUzLDIyIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhlYWQ7CiB9OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7CiYjNDM7I2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX0JJVFMJNgomIzQzOyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9TSVpFCUJJVChSVF9VTkNBQ0hFRF9IQVNIX0JJVFMpCiYjNDM7CiYjNDM7c3RydWN0IHVuY2FjaGVkX3RhYmxlIHsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVF9VTkNBQ0hFRF9IQVNIX1NJWkVdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX3RhYmxlLCBydF91bmNhY2hlZF90YWJsZSk7CiAKIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpCiB7Ci0Jc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF9saXN0KTsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCksCiYjNDM7CQkJCSAgICAgIFJUX1VOQ0FDSEVEX0hBU0hfQklUUyldOwogCiAJcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7CiAKQEAgLTE1ODgsMTQgJiM0MzsxNjAwLDE4IEBAIHZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDtwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsOwomIzQzOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0X3VuY2FjaGVkX3RhYmxlLCBjcHUpOwomIzQzOwkJdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07CiAKIAkJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCiAJCQljb250aW51ZTsKIAogCQlzcGluX2xvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgJmFtcDt1bC0mZ3Q7aGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7Ci0JCQlpZiAocnQtJmd0O2RzdC5kZXYgIT0gZGV2KQomIzQzOwkJCWlmIChkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCkgIT0gZGV2KQogCQkJCWNvbnRpbnVlOwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0LSZndDtkc3QuZGV2X3JjdSwgYmxhY2tob2xlX25ldGRldik7CiAJCQluZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LApAQCAtMzc3MSwxMCAmIzQzOzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpCiAJaXBfdHN0YW1wcyA9IGlkZW50c19oYXNoICYjNDM7IChpcF9pZGVudHNfbWFzayAmIzQzOyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDtwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJaW50IGJ1Y2tldDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCWZvciAoYnVja2V0ID0gMDsgYnVja2V0ICZsdDsgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1tidWNrZXRdOwogCi0JCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKJiM0MzsJCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCX0KIAl9CiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSUQKIAlpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDE2ZGZhYzU0YTI1OWEuLjg2MDUzMDA3NDAyN2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtNDAsNiAmIzQzOzQwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zZXFfZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25zcHJveHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2hhc2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9qaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NpcGhhc2guaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0X25hbWVzcGFjZS5oJmd0OwpAQCAtMTMzLDExICYjNDM7MTM0LDI4IEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhlYWQ7CiB9OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnQ2X3VuY2FjaGVkX2xpc3QpOwomIzQzOyNkZWZpbmUgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUwk2CiYjNDM7I2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFCUJJVChSVDZfVU5DQUNIRURfSEFTSF9CSVRTKQomIzQzOwomIzQzO3N0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgewomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUNl9VTkNBQ0hFRF9IQVNIX1NJWkVdOwomIzQzOwkvKiBSb3V0ZXMgdGhhdCBtdXN0IGJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIHR3byBkaWZmZXJlbnQgZGV2aWNlcy4gKi8KJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgbWlzbWF0Y2g7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlLCBydDZfdW5jYWNoZWRfdGFibGUpOwogCiB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogewotCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX2xpc3QpOwomIzQzOwlzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX3RhYmxlKTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KTsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsOwomIzQzOwomIzQzOwlpZiAocnQtJmd0O3J0NmlfaWRldiAmYW1wOyZhbXA7IHJ0LSZndDtydDZpX2lkZXYtJmd0O2RldiAhPSBydF9kZXYpCiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O21pc21hdGNoOwomIzQzOwllbHNlCiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIocnRfZGV2LAomIzQzOwkJCQkJICAgICAgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldOwogCiAJcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7CiAKQEAgLTE1Nyw0MCAmIzQzOzE3NSw1MCBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTsKJiM0MzsKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKJiM0MzsJCXN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC0mZ3Q7cnQ2aV9pZGV2OwomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KTsKJiM0MzsJCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwomIzQzOwomIzQzOwkJaWYgKHJ0X2lkZXYgJmFtcDsmYW1wOyBydF9pZGV2LSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJcnQtJmd0O3J0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpOwomIzQzOwkJCWluNl9kZXZfcHV0KHJ0X2lkZXYpOwomIzQzOwkJCWhhbmRsZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJ0X2RldiA9PSBkZXYpIHsKJiM0MzsJCQlydC0mZ3Q7ZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7CiYjNDM7CQkJbmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldiwKJiM0MzsJCQkJCSAgICZhbXA7cnQtJmd0O2RzdC5kZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7CiYjNDM7CQkJaGFuZGxlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoaGFuZGxlZCkKJiM0MzsJCQlsaXN0X2RlbF9pbml0KCZhbXA7cnQtJmd0O2RzdC5ydF91bmNhY2hlZCk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTsKLQkJc3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7CiYjNDM7CQlzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKIAotCQlpZiAobGlzdF9lbXB0eSgmYW1wO3VsLSZndDtoZWFkKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKLQkJCXN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC0mZ3Q7cnQ2aV9pZGV2OwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LSZndDtkc3QuZGV2OwotCQkJYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLQkJCWlmIChydF9pZGV2ICZhbXA7JmFtcDsgcnRfaWRldi0mZ3Q7ZGV2ID09IGRldikgewotCQkJCXJ0LSZndDtydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTsKLQkJCQlpbjZfZGV2X3B1dChydF9pZGV2KTsKLQkJCQloYW5kbGVkID0gdHJ1ZTsKLQkJCX0KLQotCQkJaWYgKHJ0X2RldiA9PSBkZXYpIHsKLQkJCQlydC0mZ3Q7ZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7Ci0JCQkJbmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldiwKLQkJCQkJCSAgICZhbXA7cnQtJmd0O2RzdC5kZXZfdHJhY2tlciwKLQkJCQkJCSAgIEdGUF9BVE9NSUMpOwotCQkJCWhhbmRsZWQgPSB0cnVlOwotCQkJfQotCQkJaWYgKGhhbmRsZWQpCi0JCQkJbGlzdF9kZWxfaW5pdCgmYW1wO3J0LSZndDtkc3QucnRfdW5jYWNoZWQpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkZXYsIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTsKJiM0MzsJCXJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpOwomIzQzOwkJcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2gsIGRldik7CiAJfQogfQogCkBAIC02OTgyLDEwICYjNDM7NzAxMCwxOCBAQCBpbnQgX19pbml0IGlwNl9yb3V0ZV9pbml0KHZvaWQpCiAjZW5kaWYKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJaW50IGJ1Y2tldDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQlmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCAmbHQ7IFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2J1Y2tldF07CiAKLQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7Ci0JCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwomIzQzOwkJCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJfQomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2guaGVhZCk7CiYjNDM7CQlzcGluX2xvY2tfaW5pdCgmYW1wO3RhYmxlLSZndDttaXNtYXRjaC5sb2NrKTsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaAppbmRleCBiNjRkZDg5MTY5OWQzLi40ZjQwOWQxMzVhOTlhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoCkBAIC0zODUsNiAmIzQzOzM4NSwzNyBAQCBydW5fdGVzdHMoKQogCWNsZWFudXBfeGZybV9kZXYKIH0KIAomIzQzO3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaCgpCiYjNDM7ewomIzQzOwlsb2NhbCBzZW5kZXJfcGlkCiYjNDM7CWxvY2FsIGJhY2tsb2cKJiM0MzsJbG9jYWwgcmMKJiM0MzsKJiM0MzsJIyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nCiYjNDM7CSMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWQKJiM0MzsJIyByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkZWxldGVkLgomIzQzOwlydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzCiYjNDM7CWlwIC02IC1uZXRucyAmIzM0OyRob3N0MSYjMzQ7IHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JGhvc3QxJiMzNDsgLi9tc2dfemVyb2NvcHkgLTYgXAomIzQzOwkJLVMgJHtIT1NUMV82fSAtRCAke0hPU1QxXzZ9IC1zIDEyMDAgLXQgMCByYXdfaGRyaW5jbCBcCiYjNDM7CQkmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxICZhbXA7CiYjNDM7CXNlbmRlcl9waWQ9JCEKJiM0MzsJd2FpdCAmIzM0OyRzZW5kZXJfcGlkJiMzNDsKJiM0MzsJcmM9JD8KJiM0MzsJbG9nX3Rlc3QgJHJjIDAgJiMzNDtDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzOwlbICRyYyAtbmUgMCBdICZhbXA7JmFtcDsgcmV0dXJuCiYjNDM7CiYjNDM7CWJhY2tsb2c9JChpcCBuZXRucyBleGVjICYjMzQ7JGhvc3QxJiMzNDsgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KQomIzQzOwlpZiAhIGVjaG8gJiMzNDskYmFja2xvZyYjMzQ7IHwgZ3JlcCAtRXEgJiMzOTtiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCYjMzk7OyB0aGVuCiYjNDM7CQlsb2dfdGVzdCAxIDAgJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjJiMzNDsKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwlsb2dfdGVzdCAwIDAgJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMAomIzQzOwlsb2dfdGVzdCAkPyAwICYjMzQ7Rmx1c2ggdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzO30KJiM0MzsKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHVzYWdlCiAKQEAgLTQyNSw2ICYjNDM7NDU2LDEwIEBAIGVjaG8KIGVjaG8gJiMzNDtuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlJiMzNDsKIHJ1bl90ZXN0cwogCiYjNDM7ZWNobwomIzQzO2VjaG8gJiMzNDtVbmNhY2hlZCBJUHY2IHJvdXRlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzJiMzNDsKJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2gKJiM0MzsKIHByaW50ZiAmIzM0O1xuVGVzdHMgcGFzc2VkOiAlM2RcbiYjMzQ7ICR7bnN1Y2Nlc3N9CiBwcmludGYgJiMzNDtUZXN0cyBmYWlsZWQ6ICUzZFxuJiMzNDsgICAke25mYWlsfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzA0CgkJCQkJCQlvdXRwdXQ6IDI3NQoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOPWZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYCDigJMgcHJldHR5IGZ1bmRhbWVudGFsIHJvdXRpbmcgY29kZS4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHN3aXRjaCBmcm9tIGEgc2ltcGxlIGxpbmtlZCBsaXN0IChgcnRfdW5jYWNoZWRfbGlzdGApIHRvIGEgaGFzaCB0YWJsZSBvZiBsaXN0cywgcGVyIENQVSwga2V5ZWQgb2ZmIGBkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdClgLiAgVGhpcyBoYXNoIHRhYmxlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZyBzdHJ1Y3R1cmUgZm9yIElQdjYuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBpcyBhaW1lZCBhdCBpbXByb3Zpbmcgb3IgcmVzb2x2aW5nIGlzc3VlcyByZWxhdGVkIHRvIGZsdXNoaW5nIHRoZXNlIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgcmVtb3ZlZC4KCkltcG9ydGFudGx5LCB0aGlzIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIGEgbWFzc2l2ZSByZWxpZWYuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgY2hhbmdlcyB0aGF0IGludGVyYWN0IHdpdGggdXNlci1jb250cm9sbGVkIGxlbmd0aHMgb3IgYm91bmRzLiAgVGhhdCBlbGltaW5hdGVzIGEgd2hvbGUgY2xhc3Mgb2YgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zIHJpZ2h0IGF3YXkuCgpJJiMzOTttIHZlcmlmeWluZyB0aGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgYHN0cnVjdCB1bmNhY2hlZF90YWJsZWAsIGFyZSBkZWZpbmVkIGFuZCBhbGxvY2F0ZWQgd2l0aCBgREVGSU5FX1BFUl9DUFVfQUxJR05FRGAuICBgREVGSU5FX1BFUl9DUFVfQUxJR05FRGAgaXMga25vd24gdG8gemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnksIG1lYW5pbmcgd2UmIzM5O3JlIHN0YXJ0aW5nIGZyb20gYSBzYWZlIHN0YXRlLiBUaGUgYGJ1Y2tldHNgIGFycmF5IHdpdGhpbiB0aGUgaGFzaCB0YWJsZSBpcyBpbml0aWFsaXplZCBpbiBgaXBfcnRfaW5pdGAgYW5kIGBpcDZfcm91dGVfaW5pdGAgd2l0aCBgSU5JVF9MSVNUX0hFQURgIGFuZCBgc3Bpbl9sb2NrX2luaXRgLCB3aGljaCBhcmUgcHJldHR5IHN0YW5kYXJkIGFuZCBzYWZlIGluaXRpYWxpemF0aW9uIHByYWN0aWNlcy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIGFuZCB0aGVyZSBpcyBubyB1c2VyIHNwYWNlIGludGVyYWN0aW9uLgoKSSBoYXZlIGRvdWJsZS1jaGVja2VkIHRoZSBkaWZmIGFuZCB2ZXJpZmllZCB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIGNoYW5nZSBpcyBjb250YWluZWQgaW50ZXJuYWxseSwgYW5kIG9wZXJhdGVzIHdpdGggemVyby1pbml0aWFsaXplZCBtZW1vcnkgdGhhdCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgSSBhbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByaXNrIGhlcmUsIGlmIGFueSwgbGllcyBpbiB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGxpc3QgbWFuaXB1bGF0aW9uLCBsb2NraW5nIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggS0FTQU4sIGFuZCBMT0NLREVQIGFyZSBzZXQgdXAgdG8gaGFuZGxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdW5jYWNoZWQgcm91dGVzIGluIElQdjQgYW5kIElQdjYgYnkgcmVwbGFjaW5nIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB3aXRoIGEgcGVyLUNQVSBoYXNoIHRhYmxlIChhbmQgYW4gYWRkaXRpb25hbCBgbWlzbWF0Y2hgIGxpc3QgZm9yIElQdjYpLiBUaGlzIGlzIGRvbmUgdG8gb3B0aW1pemUgb3IgZml4IHRoZSBmbHVzaGluZyBvZiB1bmNhY2hlZCByb3V0ZXMgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwga2VybmVsIGRhdGEgc3RydWN0dXJlcyAoYHN0cnVjdCB1bmNhY2hlZF90YWJsZWAsIGBzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlYCkgd2hpY2ggYXJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHZpYSBgREVGSU5FX1BFUl9DUFVfQUxJR05FRGAgKGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgaW4gdGhlIHBlci1DUFUgQlNTKSBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW4gdGhlIHN1YnN5c3RlbSBpbml0IGZ1bmN0aW9ucyAoYGlwX3J0X2luaXRgLCBgaXA2X3JvdXRlX2luaXRgKS4gXG5cblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byB1c2VyLWNvbnRyb2xsZWQgbGVuZ3RocyBvciBib3VuZHMsIGFuZCBubyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBsb2NraW5nLCBvciB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSByb3V0ZSBpcyBub3QgcHJvcGVybHkgZmx1c2hlZCksIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIHVzZXItY29udHJvbGxlZCBsZW5ndGhzIG9yIGJvdW5kcywgYW5kIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGxvY2tpbmcsIG9yIHVzZS1hZnRlci1mcmVlIChlLmcuLCBpZiBhIHJvdXRlIGlzIG5vdCBwcm9wZXJseSBmbHVzaGVkKSwgd2hpY2ggYXJlIHdlbGwgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNDoyNi42NzI5MDI4ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUyMjI5MTMyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTkVUX1ZSRlwiLFxuICAgIFwiTkVUX0wzX01BU1RFUl9ERVZcIixcbiAgICBcIklQX01VTFRJUExFX1RBQkxFU1wiLFxuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gICAgXCJJUFY2X01VTFRJUExFX1RBQkxFU1wiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX05FVEVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRfYWRkX3VuY2FjaGVkX2xpc3RcIixcbiAgICBcInJ0X2ZsdXNoX2RldlwiLFxuICAgIFwicnQ2X3VuY2FjaGVkX2xpc3RfYWRkXCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9kZWxcIixcbiAgICBcInJ0Nl9kaXNhYmxlX2lwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdW5jYWNoZWQgcm91dGVzIGluIElQdjQgYW5kIElQdjYgYnkgcmVwbGFjaW5nIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB3aXRoIGEgcGVyLUNQVSBoYXNoIHRhYmxlIChhbmQgYW4gYWRkaXRpb25hbCBgbWlzbWF0Y2hgIGxpc3QgZm9yIElQdjYpLiBUaGlzIGlzIGRvbmUgdG8gb3B0aW1pemUgb3IgZml4IHRoZSBmbHVzaGluZyBvZiB1bmNhY2hlZCByb3V0ZXMgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcXG5cXG5UaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGNoYW5nZXMgdG8gdXNlci1jb250cm9sbGVkIGxlbmd0aHMgb3IgYm91bmRzLCBhbmQgbm8gY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsaXN0IG1hbmlwdWxhdGlvbiwgbG9ja2luZywgb3IgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgcm91dGUgaXMgbm90IHByb3Blcmx5IGZsdXNoZWQpLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3IgdHJhY2tpbmcgdW5jYWNoZWQgcm91dGVzIGluIGJvdGggSVB2NCBhbmQgSVB2NiBmcm9tIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB0byBhIHBlci1DUFUgaGFzaCB0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIGhvdyB1bmNhY2hlZCByb3V0ZXMgYXJlIGFkZGVkLCBkZWxldGVkLCBhbmQgZmx1c2hlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBUaGUgdGVzdCBzY3JpcHQgaW5kaWNhdGVzIHRoYXQgVlJGIGFuZCBORVRFTSBhcmUgdXNlZCB0byB0cmlnZ2VyIHNwZWNpZmljIGVkZ2UgY2FzZXMgKGxpa2UgbWlzbWF0Y2hlZCBkZXZpY2VzIGluIElQdjYpLCBzbyBlbmFibGluZyB0aG9zZSBjb25maWdzIGlzIGltcG9ydGFudCBmb3IgdGhvcm91Z2ggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjQ6MjYuNjcyOTA4NjE5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYzNDExOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYmU0ZTdhYzRiN2NjMWJkMmNhY2MxYmZlZmRiYjY3ODQ1ZWJkMDM2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIwOjI0OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXFxuaW5kZXggNjA0Y2M1MWRmZDliYy4uM2Y5YmMxZWM3MmNjZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xcbkBAIC03NCw2ICs3NCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lnbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXJvdXRlLmhcXHUwMDNlXFxuQEAgLTE1NTIsMTEgKzE1NTMsMjIgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0aGVhZDtcXG4gfTtcXG4gXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydF91bmNhY2hlZF9saXN0KTtcXG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX0JJVFNcXHQ2XFxuKyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9TSVpFXFx0QklUKFJUX1VOQ0FDSEVEX0hBU0hfQklUUylcXG4rXFxuK3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7XFxuK1xcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xcbiBcXG4gdm9pZCBydF9hZGRfdW5jYWNoZWRfbGlzdChzdHJ1Y3QgcnRhYmxlICpydClcXG4ge1xcbi1cXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XFxuK1xcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUpO1xcbitcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuK1xcbitcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFxcdTAwMjZydC1cXHUwMDNlZHN0KSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XFxuIFxcbiBcXHRydC1cXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcXG4gXFxuQEAgLTE1ODgsMTQgKzE2MDAsMTggQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aW50IGNwdTtcXG4gXFxuIFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4tXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcXG4rXFx0XFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcXG4rXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xcbitcXG4rXFx0XFx0dGFibGUgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7XFxuK1xcdFxcdHVsID0gXFx1MDAyNnRhYmxlLVxcdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XFxuIFxcbiBcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2dWwtXFx1MDAzZWhlYWQpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XFxuLVxcdFxcdFxcdGlmIChydC1cXHUwMDNlZHN0LmRldiAhPSBkZXYpXFxuK1xcdFxcdFxcdGlmIChkc3RfZGV2KFxcdTAwMjZydC1cXHUwMDNlZHN0KSAhPSBkZXYpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIocnQtXFx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcXG4gXFx0XFx0XFx0bmV0ZGV2X3JlZl9yZXBsYWNlKGRldiwgYmxhY2tob2xlX25ldGRldixcXG5AQCAtMzc3MSwxMCArMzc4NywxNiBAQCBpbnQgX19pbml0IGlwX3J0X2luaXQodm9pZClcXG4gXFx0aXBfdHN0YW1wcyA9IGlkZW50c19oYXNoICsgKGlwX2lkZW50c19tYXNrICsgMSkgKiBzaXplb2YoKmlwX2lkZW50cyk7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFxcdTAwMjZwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7XFxuK1xcdFxcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XFxuK1xcdFxcdGludCBidWNrZXQ7XFxuK1xcbitcXHRcXHR0YWJsZSA9IHBlcl9jcHVfcHRyKFxcdTAwMjZydF91bmNhY2hlZF90YWJsZSwgY3B1KTtcXG4rXFx0XFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXFx1MDAzYyBSVF9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1tidWNrZXRdO1xcbiBcXG4tXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG4tXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRFxcbiBcXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcXG5pbmRleCAxNmRmYWM1NGEyNTlhLi44NjA1MzAwNzQwMjdjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuQEAgLTQwLDYgKzQwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3Byb3h5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9oYXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lwaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG5AQCAtMTMzLDExICsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0aGVhZDtcXG4gfTtcXG4gXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XFxuKyNkZWZpbmUgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUU1xcdDZcXG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFXFx0QklUKFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXFxuK1xcbitzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcXG4rXFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVDZfVU5DQUNIRURfSEFTSF9TSVpFXTtcXG4rXFx0LyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovXFxuK1xcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xcbit9O1xcbitcXG4rc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG4gXFxuIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXFxuIHtcXG4tXFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcXG4rXFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbitcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuK1xcbitcXHRpZiAocnQtXFx1MDAzZXJ0NmlfaWRldiBcXHUwMDI2XFx1MDAyNiBydC1cXHUwMDNlcnQ2aV9pZGV2LVxcdTAwM2VkZXYgIT0gcnRfZGV2KVxcbitcXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlbWlzbWF0Y2g7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBSVDZfVU5DQUNIRURfSEFTSF9CSVRTKV07XFxuIFxcbiBcXHRydC1cXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcXG4gXFxuQEAgLTE1Nyw0MCArMTc1LDUwIEBAIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcXG4rXFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XFxuK1xcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cXHUwMDNlcnQ2aV9pZGV2O1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuK1xcdFxcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKHJ0X2lkZXYgXFx1MDAyNlxcdTAwMjYgcnRfaWRldi1cXHUwMDNlZGV2ID09IGRldikge1xcbitcXHRcXHRcXHRydC1cXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XFxuK1xcdFxcdFxcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xcbitcXHRcXHRcXHRoYW5kbGVkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHJ0X2RldiA9PSBkZXYpIHtcXG4rXFx0XFx0XFx0cnQtXFx1MDAzZWRzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2O1xcbitcXHRcXHRcXHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cnQtXFx1MDAzZWRzdC5kZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdFxcdGhhbmRsZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChoYW5kbGVkKVxcbitcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZydC1cXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRpbnQgY3B1O1xcbiBcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbi1cXHRcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XFxuLVxcdFxcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xcbitcXHRcXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcXG4rXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xcbiBcXG4tXFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCBcXHUwMDI2dWwtXFx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXFx1MDAzZXJ0NmlfaWRldjtcXG4tXFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVxcdTAwM2Vkc3QuZGV2O1xcbi1cXHRcXHRcXHRib29sIGhhbmRsZWQgPSBmYWxzZTtcXG4tXFxuLVxcdFxcdFxcdGlmIChydF9pZGV2IFxcdTAwMjZcXHUwMDI2IHJ0X2lkZXYtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG4tXFx0XFx0XFx0XFx0cnQtXFx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xcbi1cXHRcXHRcXHRcXHRpbjZfZGV2X3B1dChydF9pZGV2KTtcXG4tXFx0XFx0XFx0XFx0aGFuZGxlZCA9IHRydWU7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdGlmIChydF9kZXYgPT0gZGV2KSB7XFxuLVxcdFxcdFxcdFxcdHJ0LVxcdTAwM2Vkc3QuZGV2ID0gYmxhY2tob2xlX25ldGRldjtcXG4tXFx0XFx0XFx0XFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QuZGV2X3RyYWNrZXIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIEdGUF9BVE9NSUMpO1xcbi1cXHRcXHRcXHRcXHRoYW5kbGVkID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoaGFuZGxlZClcXG4tXFx0XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0dGFibGUgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbitcXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTtcXG4rXFx0XFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7XFxuK1xcdFxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbWlzbWF0Y2gsIGRldik7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtNjk4MiwxMCArNzAxMCwxOCBAQCBpbnQgX19pbml0IGlwNl9yb3V0ZV9pbml0KHZvaWQpXFxuICNlbmRpZlxcbiBcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbi1cXHRcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XFxuK1xcdFxcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xcbitcXHRcXHRpbnQgYnVja2V0O1xcbitcXG4rXFx0XFx0dGFibGUgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbitcXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1tidWNrZXRdO1xcbiBcXG4tXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG4tXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dGFibGUtXFx1MDAzZW1pc21hdGNoLmhlYWQpO1xcbitcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dGFibGUtXFx1MDAzZW1pc21hdGNoLmxvY2spO1xcbiBcXHR9XFxuIFxcbiBvdXQ6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxcbmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXFxuQEAgLTM4NSw2ICszODUsMzcgQEAgcnVuX3Rlc3RzKClcXG4gXFx0Y2xlYW51cF94ZnJtX2RldlxcbiB9XFxuIFxcbit0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKVxcbit7XFxuK1xcdGxvY2FsIHNlbmRlcl9waWRcXG4rXFx0bG9jYWwgYmFja2xvZ1xcbitcXHRsb2NhbCByY1xcbitcXG4rXFx0IyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nXFxuK1xcdCMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWRcXG4rXFx0IyByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkZWxldGVkLlxcbitcXHRydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzXFxuK1xcdGlwIC02IC1uZXRucyBcXFwiJGhvc3QxXFxcIiByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDBcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJGhvc3QxXFxcIiAuL21zZ196ZXJvY29weSAtNiBcXFxcXFxuK1xcdFxcdC1TICR7SE9TVDFfNn0gLUQgJHtIT1NUMV82fSAtcyAxMjAwIC10IDAgcmF3X2hkcmluY2wgXFxcXFxcbitcXHRcXHRcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcbitcXHRzZW5kZXJfcGlkPSQhXFxuK1xcdHdhaXQgXFxcIiRzZW5kZXJfcGlkXFxcIlxcbitcXHRyYz0kP1xcbitcXHRsb2dfdGVzdCAkcmMgMCBcXFwiQ3JlYXRlIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXFxcIlxcbitcXHRbICRyYyAtbmUgMCBdIFxcdTAwMjZcXHUwMDI2IHJldHVyblxcbitcXG4rXFx0YmFja2xvZz0kKGlwIG5ldG5zIGV4ZWMgXFxcIiRob3N0MVxcXCIgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KVxcbitcXHRpZiAhIGVjaG8gXFxcIiRiYWNrbG9nXFxcIiB8IGdyZXAgLUVxICdiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCc7IHRoZW5cXG4rXFx0XFx0bG9nX3Rlc3QgMSAwIFxcXCJSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXFxcIlxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0bG9nX3Rlc3QgMCAwIFxcXCJSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXFxcIlxcbitcXG4rXFx0cnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMFxcbitcXHRsb2dfdGVzdCAkPyAwIFxcXCJGbHVzaCB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1xcXCJcXG4rfVxcbitcXG4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcXG4gIyB1c2FnZVxcbiBcXG5AQCAtNDI1LDYgKzQ1NiwxMCBAQCBlY2hvXFxuIGVjaG8gXFxcIm5ldGVtIHFkaXNjIG9uIFZSRiBkZXZpY2VcXFwiXFxuIHJ1bl90ZXN0c1xcbiBcXG4rZWNob1xcbitlY2hvIFxcXCJVbmNhY2hlZCBJUHY2IHJvdXRlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXFxcIlxcbit0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2hcXG4rXFxuIHByaW50ZiBcXFwiXFxcXG5UZXN0cyBwYXNzZWQ6ICUzZFxcXFxuXFxcIiAke25zdWNjZXNzfVxcbiBwcmludGYgXFxcIlRlc3RzIGZhaWxlZDogJTNkXFxcXG5cXFwiICAgJHtuZmFpbH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI0OjI3LjA4MDAxNDEyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzMzkzOTM1NTU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRfVlJGXCIsXG4gICAgXCJORVRfTDNfTUFTVEVSX0RFVlwiLFxuICAgIFwiSVBfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQVjZfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfTkVURU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLFxuICAgIFwicnRfZmx1c2hfZGV2XCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9hZGRcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2RlbFwiLFxuICAgIFwicnQ2X2Rpc2FibGVfaXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFja2luZyB1bmNhY2hlZCByb3V0ZXMgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGZyb20gYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHRvIGEgcGVyLUNQVSBoYXNoIHRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIFRoZSB0ZXN0IHNjcmlwdCBpbmRpY2F0ZXMgdGhhdCBWUkYgYW5kIE5FVEVNIGFyZSB1c2VkIHRvIHRyaWdnZXIgc3BlY2lmaWMgZWRnZSBjYXNlcyAobGlrZSBtaXNtYXRjaGVkIGRldmljZXMgaW4gSVB2NiksIHNvIGVuYWJsaW5nIHRob3NlIGNvbmZpZ3MgaXMgaW1wb3J0YW50IGZvciB0aG9yb3VnaCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYmU0ZTdhYzRiN2NjMWJkMmNhY2MxYmZlZmRiYjY3ODQ1ZWJkMDM2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjA6MjQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggNjA0Y2M1MWRmZDliYy4uM2Y5YmMxZWM3MmNjZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbisrKyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC03NCw2ICs3NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZ21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21yb3V0ZS5oXHUwMDNlXG5AQCAtMTU1MiwxMSArMTU1MywyMiBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpO1xuKyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChSVF9VTkNBQ0hFRF9IQVNIX0JJVFMpXG4rXG4rc3RydWN0IHVuY2FjaGVkX3RhYmxlIHtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcbit9O1xuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xuIFxuIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG4ge1xuLVx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUpO1xuK1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KSxcbitcdFx0XHRcdCAgICAgIFJUX1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTg4LDE0ICsxNjAwLDE4IEBAIHZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpbnQgY3B1O1xuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4rXHRcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XG4rXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbitcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydF91bmNhY2hlZF90YWJsZSwgY3B1KTtcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuK1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgKzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4gXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuK1x0XHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xuK1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuK1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggMTZkZmFjNTRhMjU5YS4uODYwNTMwMDc0MDI3YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC00MCw2ICs0MCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG5AQCAtMTMzLDExICsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0aGVhZDtcbiB9O1xuIFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFXHRCSVQoUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUylcbitcbitzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRV07XG4rXHQvKiBSb3V0ZXMgdGhhdCBtdXN0IGJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIHR3byBkaWZmZXJlbnQgZGV2aWNlcy4gKi9cbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcbitcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlKTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XG4rXG4rXHRpZiAocnQtXHUwMDNlcnQ2aV9pZGV2IFx1MDAyNlx1MDAyNiBydC1cdTAwM2VydDZpX2lkZXYtXHUwMDNlZGV2ICE9IHJ0X2RldilcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaDtcbitcdGVsc2VcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKHJ0X2RldixcbitcdFx0XHRcdFx0ICAgICAgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTcsNDAgKzE3NSw1MCBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuK1x0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbitcbitcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuK1x0XHRcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xuK1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4rXHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4rXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRpZiAoaGFuZGxlZClcbitcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4tXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuK1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTtcbitcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7XG4rXHRcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLCBkZXYpO1xuIFx0fVxuIH1cbiBcbkBAIC02OTgyLDEwICs3MDEwLDE4IEBAIGludCBfX2luaXQgaXA2X3JvdXRlX2luaXQodm9pZClcbiAjZW5kaWZcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4rXHRcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcbitcdFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCsrKSB7XG4rXHRcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1tidWNrZXRdO1xuIFxuLVx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbi1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4rXHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRcdH1cbitcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2guaGVhZCk7XG4rXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLmxvY2spO1xuIFx0fVxuIFxuIG91dDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuQEAgLTM4NSw2ICszODUsMzcgQEAgcnVuX3Rlc3RzKClcbiBcdGNsZWFudXBfeGZybV9kZXZcbiB9XG4gXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKClcbit7XG4rXHRsb2NhbCBzZW5kZXJfcGlkXG4rXHRsb2NhbCBiYWNrbG9nXG4rXHRsb2NhbCByY1xuK1xuK1x0IyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nXG4rXHQjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkXG4rXHQjIHJvdXRlcywgYW5kIG5ldGVtIGtlZXBzIHRoZW0gcmVmZXJlbmNlZCB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIGRlbGV0ZWQuXG4rXHRydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzXG4rXHRpcCAtNiAtbmV0bnMgXCIkaG9zdDFcIiByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDBcbitcdGlwIG5ldG5zIGV4ZWMgXCIkaG9zdDFcIiAuL21zZ196ZXJvY29weSAtNiBcXFxuK1x0XHQtUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbitcdHNlbmRlcl9waWQ9JCFcbitcdHdhaXQgXCIkc2VuZGVyX3BpZFwiXG4rXHRyYz0kP1xuK1x0bG9nX3Rlc3QgJHJjIDAgXCJDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcIlxuK1x0WyAkcmMgLW5lIDAgXSBcdTAwMjZcdTAwMjYgcmV0dXJuXG4rXG4rXHRiYWNrbG9nPSQoaXAgbmV0bnMgZXhlYyBcIiRob3N0MVwiIHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSlcbitcdGlmICEgZWNobyBcIiRiYWNrbG9nXCIgfCBncmVwIC1FcSAnYmFja2xvZyAuKiBbMS05XVswLTldKnAnOyB0aGVuXG4rXHRcdGxvZ190ZXN0IDEgMCBcIlJldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcIlxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRsb2dfdGVzdCAwIDAgXCJSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXCJcbitcbitcdHJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDBcbitcdGxvZ190ZXN0ICQ/IDAgXCJGbHVzaCB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rfVxuK1xuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIyB1c2FnZVxuIFxuQEAgLTQyNSw2ICs0NTYsMTAgQEAgZWNob1xuIGVjaG8gXCJuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlXCJcbiBydW5fdGVzdHNcbiBcbitlY2hvXG4rZWNobyBcIlVuY2FjaGVkIElQdjYgcm91dGUgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcIlxuK3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaFxuK1xuIHByaW50ZiBcIlxcblRlc3RzIHBhc3NlZDogJTNkXFxuXCIgJHtuc3VjY2Vzc31cbiBwcmludGYgXCJUZXN0cyBmYWlsZWQ6ICUzZFxcblwiICAgJHtuZmFpbH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI0OjI3LjA4MDAxNTkzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NTE0Nzc4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29yZSBSb3V0aW5nIFN0YWNrIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiwgb3IgcG9zc2libHkgYSBidWcgZml4LCBpbiB0aGUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUuIEl0J3MgdGFyZ2V0aW5nIGBuZXQvaXB2NC9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBnb2FsIGlzIHRvIG1vdmUgYXdheSBmcm9tIHBlci1DUFUgbGlzdHMgZm9yIHVuY2FjaGVkIHJvdXRlcyBhbmQgaW5zdGVhZCB1c2UgYSBoYXNoIHRhYmxlLiBUaGF0J3MgYSBnb29kIG1vdmU7IHRoZSBoYXNoIHRhYmxlIHNob3VsZCBiZSBzaWduaWZpY2FudGx5IGZhc3RlciwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhIGxhcmdlIG51bWJlciBvZiByb3V0ZXMgb3IgZnJlcXVlbnQgZGV2aWNlIGRlbGV0aW9ucywgYXMgdGhpcyBhcHByb2FjaCB3b3VsZCBpbXByb3ZlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgZGV2aWNlIGlzIGRlbGV0ZWQuXG5cblRoZSBjb21taXQgaW50cm9kdWNlcyBgcnRfdW5jYWNoZWRfdGFibGVgIGFuZCBgcnQ2X3VuY2FjaGVkX3RhYmxlYCwgd2hpY2ggYXJlIGVzc2VudGlhbGx5IGFycmF5cyBvZiBgdW5jYWNoZWRfbGlzdGAgYnVja2V0cy4gSW4gSVB2NiwgdGhleSd2ZSBhbHNvIGFkZGVkIGEgYG1pc21hdGNoYCBsaXN0LCB3aGljaCBJJ2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhhdCdzIGxpa2VseSBmb3Igcm91dGVzIHRoYXQsIGZvciB3aGF0ZXZlciByZWFzb24sIG5lZWQgdG8gYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggbXVsdGlwbGUgaW50ZXJmYWNlcy5cblxuSSBzZWUgdGhhdCB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byB1bmNhY2hlZCByb3V0ZSBtYW5hZ2VtZW50LCBhcmUgZ2V0dGluZyBtb2RpZmllZDogYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCwgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgLlxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGZ1bmRhbWVudGFsIGhlcmUsIGl0J3MgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcuIEJ1dCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIEkgc2hvdWxkIGRpZyBkZWVwZXIgdG8gY29uc2lkZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIHRlc3RpbmcgYW5kIGVkZ2UgY2FzZXMuIFRoZSB0ZXN0IHNjcmlwdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaGAgdXNlcyBWUkYsIG5ldGVtLCBhbmQgcmF3X2hkcmluY2wsIHNvIGl0J3MgYSBnb29kIGluZGljYXRvciB0aGF0IGBDT05GSUdfTkVUX1ZSRmAgYW5kIGBDT05GSUdfTkVUX1NDSF9ORVRFTWAgYXJlIGRlZmluaXRlbHkgd29ydGggY29uc2lkZXJpbmcsIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIHRlc3RpbmcgdGhlICdtaXNtYXRjaCcgc2NlbmFyaW8gaW4gSVB2Ni4gSSBzaG91bGQgYWxzbyB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNDozNS43MzE0OTYzNDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMzQ3Njg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9yb3V0ZS5oPTI3MD12b2lkIGZpYl9tb2RpZnlfcHJlZml4X21ldHJpYyhzdHJ1Y3QgaW5faWZhZGRyICppZmEsIHUzMiBuZXdfbWV0cmljKTtcXG5pbmNsdWRlL25ldC9yb3V0ZS5oLTI3MS1cXG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI3Mjp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KTtcXG5pbmNsdWRlL25ldC9yb3V0ZS5oLTI3My12b2lkIHJ0X2RlbF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTUyMT1zdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLCBzdHJ1Y3QgcnRhYmxlICpydClcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTUzOS1cXHRcXHRpZiAob3JpZykge1xcbm5ldC9pcHY0L3JvdXRlLmM6MTU0MDpcXHRcXHRcXHRydF9hZGRfdW5jYWNoZWRfbGlzdChvcmlnKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NDEtXFx0XFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNm9yaWctXFx1MDAzZWRzdCk7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1NjM9c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX3RhYmxlLCBydF91bmNhY2hlZF90YWJsZSk7XFxubmV0L2lwdjQvcm91dGUuYy0xNTY0LVxcbm5ldC9pcHY0L3JvdXRlLmM6MTU2NTp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU2Ni17XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE2MzI9c3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcixcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTY3Ny1cXHRcXHRcXHR9XFxubmV0L2lwdjQvcm91dGUuYzoxNjc4OlxcdFxcdFxcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE2NzktXFx0XFx0fVxcbm5ldC9pcHY0L3JvdXRlLmMtMTY4MC1cXHR9IGVsc2VcXG5uZXQvaXB2NC9yb3V0ZS5jOjE2ODE6XFx0XFx0cnRfYWRkX3VuY2FjaGVkX2xpc3QocnQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTY4Mi1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjMwOD1pcF9yb3V0ZV9pbnB1dF9zbG93KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTAyLVxcdFxcdGlmICh1bmxpa2VseSghcnRfY2FjaGVfcm91dGUobmhjLCBydGgpKSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjI1MDM6XFx0XFx0XFx0cnRfYWRkX3VuY2FjaGVkX2xpc3QocnRoKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MDQtXFx0fVxcbi0tXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM9NjY9c3RhdGljIGludCB4ZnJtNF9maWxsX2RzdChzdHJ1Y3QgeGZybV9kc3QgKnhkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy05MC1cXHR4ZHN0LVxcdTAwM2V1LnJ0LnJ0X210dV9sb2NrZWQgPSBydC1cXHUwMDNlcnRfbXR1X2xvY2tlZDtcXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzo5MTpcXHRydF9hZGRfdW5jYWNoZWRfbGlzdChcXHUwMDI2eGRzdC1cXHUwMDNldS5ydCk7XFxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtOTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI0OjM3LjY0NDk3OTc1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Nzc3OTkzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgaXQgdG91Y2hlczogYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCwgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgLiBUaGVzZSBhcmUgYWxsICpjb3JlKiBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gTm90aGluZyBwZXJpcGhlcmFsLCB0aGVzZSBhcmUgZnVuZGFtZW50YWwuIFRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGJlaW5nIG1vZGlmaWVkIHJhaXNlcyBhIGZsYWc7IGl0IG1lYW5zIHRoZXJlJ3MgcG90ZW50aWFsbHkgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gcm91dGluZywgY2FjaGluZywgYW5kIGRldmljZSBmbHVzaGluZywgbGlrZWx5IGF0IGEgbG93IGxldmVsLlxuXG5UaGUgYWNjb21wYW55aW5nIHRlc3Qgc2NyaXB0IG1lbnRpb25zIFZSRiBhbmQgTkVURU0uIEludGVyZXN0aW5nLiBWUkYgbWVhbnMgVmlydHVhbCBSb3V0aW5nIGFuZCBGb3J3YXJkaW5nLCBhbmQgTkVURU0sIE5ldHdvcmsgRW11bGF0aW9uLCBjb3VsZCBtZWFuIHRoYXQgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB3b3JrIHdpdGggcm91dGluZyB3aXRoaW4gYSBzZWdtZW50ZWQgbmV0d29yayBlbnZpcm9ubWVudCBvciB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgdG8gc2ltdWxhdGUgbmV0d29yayBjb25kaXRpb25zIHN1Y2ggYXMgbGF0ZW5jeSwgcGFja2V0IGxvc3MsIG9yIGppdHRlciB0byB0ZXN0IHRoZSBjaGFuZ2VzIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGludmVzdGlnYXRlIHRoZSB1c2VzIG9mIHRob3NlIG9wdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgZWZmZWN0cy5cblxuQmVmb3JlIGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGBydF9mbHVzaF9kZXZgIGlzIG5vcm1hbGx5IGNhbGxlZC4gSXQncyBhIHN0YW5kYXJkIGhvdXNla2VlcGluZyBmdW5jdGlvbiwgSSBuZWVkIHRvIGtub3cgdGhlIHR5cGljYWwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBJIGxvb2sgZm9yIGFueSBuZXcgb25lcy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiB1bnVzdWFsIGNhbGxzIG9yIGNhbGxzIGZyb20gbm9uLXN0YW5kYXJkIHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIHBhdGNoJ3MgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNDo0Mi4yMjI3ODE1NzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MjU2NDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydF9mbHVzaF9kZXZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcm91dGUuaD0xMzE9dm9pZCBydF9jYWNoZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L3JvdXRlLmg6MTMyOnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMTMzLVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE3LVxcdFxcdGZpYl9kaXNhYmxlX2lwKGRldiwgZXZlbnQsIHRydWUpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MTg6XFx0XFx0cnRfZmx1c2hfZGV2KGRldik7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUxOS1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1OTE9c3RhdGljIHZvaWQgaXB2NF9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTYtXFxubmV0L2lwdjQvcm91dGUuYzoxNTk3OnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvcm91dGUuYy0xNTk4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjQ6NDQuMTA1MzUxNjg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4NzAwOTI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipGbHVzaGluZyB0aGUgUm91dGluZyBUYWJsZXMgVXBvbiBEZXZpY2UgVW5yZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgcm91dGluZyB0YWJsZXMgYXJlIGhhbmRsZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gYHJ0X2ZsdXNoX2RldmAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSwgYW5kIEkgc2VlIGl0IGdldHMgdHJpZ2dlcmVkIGZyb20gYGZpYl9uZXRkZXZfZXZlbnRgIHNwZWNpZmljYWxseSB3aGVuIGEgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudCBvY2N1cnMuIFRoYXQncyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdDsgd2UgbmVlZCB0byBjbGVhciBvdXQgYW55IHJvdXRpbmcgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2Ugd2hlbiBpdCdzIGdvaW5nIGF3YXkuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZW4gSSBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NiB3aGljaCBpcyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCB3aGljaCBhbHNvIGRlYWxzIHdpdGggdGhlIG5ldGRldiBldmVudHMsIHdoaWNoIGxpa2VseSBoYW5kbGVzIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgY2xlYW4gdXAuIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5IHRvIGVuc3VyZSB0aGlzIGlzIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjQ6NDkuMDkyMzYzNjMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTU1OTE2MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9MTc4PXN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjA5LVxcbm5ldC9pcHY2L3JvdXRlLmM6MjEwOnN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY2L3JvdXRlLmMtMjExLXtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NTA3MT12b2lkIHJ0Nl9kaXNhYmxlX2lwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzMtXFx0cnQ2X3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCk7XFxubmV0L2lwdjYvcm91dGUuYzo1MDc0OlxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihkZXYpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNTA3NS1cXHRuZWlnaF9pZmRvd24oXFx1MDAyNm5kX3RibCwgZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjQ6NTAuODQ3OTYwNTA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNzczOTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLCBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBydW4uIExldCdzIHNlZS4uLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHRvIHRhcmdldC4gUmlnaHQsIHRoZSBvbmVzIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFyZSBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIEhtbSwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgZGVjbGFyZWQgYXMgc3RhdGljOyB0eXBpY2FsbHksIHRob3NlIGFyZSBpbmxpbmVkLiBIb3dldmVyLCBpdCdzIGNhbGxlZCBmcm9tIGBydDZfZGlzYWJsZV9pcGAsIHdoaWNoIGlzIGdsb2JhbCBhbmQgZXhwb3J0ZWQsIHNvIG1heWJlIHRoYXQncyBhIGdvb2QgZW50cnkgcG9pbnQuIEp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgaGF2ZSBhIGxvb2sgYXQgYHJ0Nl9kaXNhYmxlX2lwYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNDo1NS43NjU3MDE2MzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjg3MTc2ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnQ2X2Rpc2FibGVfaXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjI3PXZvaWQgcnQ2X3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncyk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjI4OnZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjI5LXZvaWQgcnQ2X3N5bmNfZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCk7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzY9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODg4LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg4OTpcXHRydDZfZGlzYWJsZV9pcChkZXYsIGV2ZW50KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4OTAtXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzNjM9c3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzODgtXFxubmV0L2lwdjYvcm91dGUuYzozMzg5OlxcdC8qIEFkZCB0aGlzIGRzdCBpbnRvIHVuY2FjaGVkX2xpc3Qgc28gdGhhdCBydDZfZGlzYWJsZV9pcCgpIGNhblxcbm5ldC9pcHY2L3JvdXRlLmMtMzM5MC1cXHQgKiBkbyBwcm9wZXIgcmVsZWFzZSBvZiB0aGUgbmV0X2RldmljZVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDU1PXZvaWQgcnQ2X3N5bmNfZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3MC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzE6dm9pZCBydDZfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI0OjU3LjQ5NDQyNTI1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM1OTIxMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEdsb2JhbCBWYXJpYWJsZXMgYW5kIEV4cG9ydGVkIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHNvbWUga2V5IHN5bWJvbHMgaGVyZS4gYHJ0Nl9kaXNhYmxlX2lwYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4gSSdtIGFsc28gbm90aW5nIHRoYXQgYHJ0X2ZsdXNoX2RldmAsIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgYXJlIGFsbCBnbG9iYWwuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgZ2xvYmFscyBvZnRlbiByZXByZXNlbnQgc2hhcmVkIHN0YXRlIG9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdGllcy4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIHNwZWNpZmljYWxseSBjb25maXJtIGlmIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEtub3dpbmcgaWYgaXQncyBleHBvcnRlZCBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGFjY2Vzc2liaWxpdHkgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjAxLjEzMDM0ODc5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NzYwOTQ5NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcnRfYWRkX3VuY2FjaGVkX2xpc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjAzLjM3Nzk2NTc3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU4NTAxNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZvY3VzaW5nIG9uIE5vbi1TdGF0aWMgRnVuY3Rpb24gRGVzaWduKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgZnVuY3Rpb24sIGFuZCBJJ20gcmVhbGl6aW5nIGl0IGRvZXNuJ3QgKm5lY2Vzc2FyaWx5KiBoYXZlIHRvIGJlIGV4cG9ydGVkIHRvIGEgbW9kdWxlIGluIHRoZSBzdHJpY3Qgc2Vuc2UuIFRoZSBjcml0aWNhbCBhc3BlY3QgaXMgc2ltcGx5IHRoYXQgaXQgbmVlZHMgdG8gYmUgbm9uLXN0YXRpYy4gVGhhdCdzIHRoZSBjb3JlIHJlcXVpcmVtZW50LiBXZSdyZSBhaW1pbmcgZm9yIGEgY2VydGFpbiBsZXZlbCBvZiB2aXNpYmlsaXR5IG9yIGFjY2Vzcywgbm90IG5lY2Vzc2FyaWx5IG1vZHVsYXJpdHkgZm9yIGl0cyBvd24gc2FrZS4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJldmlzaXQgdGhhdCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBmdW5jdGlvbi4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgY29uc2lkZXIgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduIGdvYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjU5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MDguNzM2NDY5ODE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE4OTIxMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0yMzA9dm9pZCBydDZfbXVsdGlwYXRoX3JlYmFsYW5jZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIzMS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoyMzI6dm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydCk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjMzLXZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0xNDY9c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTE0Ny1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjE0ODp2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMTQ5LXtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjMwMT1zdHJ1Y3QgcnQ2X2luZm8gKmlwNl9wb2xfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDItXFx0XFx0XFx0LyogMSByZWZjbnQgaXMgdGFrZW4gZHVyaW5nIGlwNl9ydF9jYWNoZV9hbGxvYygpLlxcbm5ldC9pcHY2L3JvdXRlLmM6MjM0MzpcXHRcXHRcXHQgKiBBcyBydDZfdW5jYWNoZWRfbGlzdF9hZGQoKSBkb2VzIG5vdCBjb25zdW1lIHJlZmNudCxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDQtXFx0XFx0XFx0ICogdGhpcyByZWZjbnQgaXMgYWx3YXlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgZXZlblxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yMzQ2LVxcdFxcdFxcdCAqL1xcbm5ldC9pcHY2L3JvdXRlLmM6MjM0NzpcXHRcXHRcXHRydDZfdW5jYWNoZWRfbGlzdF9hZGQocnQpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMjM0OC1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MzM2Mz1zdHJ1Y3QgZHN0X2VudHJ5ICppY21wNl9kc3RfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzM5MS1cXHQgKi9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMzOTI6XFx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHJ0KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzOTMtXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYz04MD1zdGF0aWMgaW50IHhmcm02X2ZpbGxfZHN0KHN0cnVjdCB4ZnJtX2RzdCAqeGRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEwMi1cXHR4ZHN0LVxcdTAwM2V1LnJ0Ni5ydDZpX3NyYyA9IHJ0LVxcdTAwM2VydDZpX3NyYztcXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzoxMDM6XFx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKFxcdTAwMjZ4ZHN0LVxcdTAwM2V1LnJ0Nik7XFxubmV0L2lwdjYveGZybTZfcG9saWN5LmMtMTA0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNToxMC4zNTUzOTkwODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3MzI4NDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgIGFyZSBnbG9iYWwgZnVuY3Rpb25zIOKAkyB0aGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBwb3RlbnRpYWwgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRob3NlIGFyZSBiZWluZyBjYWxsZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZGVmaW5lZCBjb25maWd1cmF0aW9ucy4gSSdtIHNlZWluZyBgTkVUX1ZSRmAsIGBORVRfU0NIX05FVEVNYCwgYElORVRgLCBhbmQgYElQVjZgLiBJbnRlcmVzdGluZywgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQ/IENvbnRleHQgaXMga2luZyBoZXJlIVxuXG5UaGUgdGVzdCBzY3JpcHQgdXNlcyBgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHNgLiBBaCwgYE5FVF9TQ0hfTkVURU1gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgZ2l2ZW4gdGhlIGBuZXRlbWAgY29tbWFuZCBiZWluZyB1c2VkOyB0aGF0IG9uZSBpcyBvYnZpb3VzLCBub3cuIEFuZCBvZiBjb3Vyc2UsIGBORVRfVlJGYCBpcyByZWxldmFudCwgZ2l2ZW4gdGhhdCBpdCdzIHVzaW5nIHRoZSB2aXJ0dWFsIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgY29udGV4dC5cblxuSSB0aGluayBpdCdzIHdvcnRoIGRvdWJsZS1jaGVja2luZyBgTkVUX1ZSRmAgYW5kIGBORVRfU0NIX05FVEVNYCB0byBsb29rIGF0IHRoZSBLY29uZmlnLCBqdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBpbXBsaWNhdGlvbnMgSSdtIG1pc3NpbmcuIEFsd2F5cyBwYXlzIHRvIGJlIHRob3JvdWdoIHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNToxNi41Mjg2ODU1NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTk4NzEwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WUkZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz00NjM9Y29uZmlnIE5FVEtJVFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzEtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NzI6Y29uZmlnIE5FVF9WUkZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ3My1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBSb3V0aW5nIGFuZCBGb3J3YXJkaW5nIChMaXRlKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MTguNTQ4NTY0MDUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNjg5ODQ5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMDY2OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MjAuNjE3NTUyODMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY2OTM2NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIX05FVEVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE4ND1jb25maWcgTkVUX1NDSF9HUkVEXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xOTQtXFxubmV0L3NjaGVkL0tjb25maWc6MTk1OmNvbmZpZyBORVRfU0NIX05FVEVNXFxubmV0L3NjaGVkL0tjb25maWctMTk2LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGVtdWxhdG9yIChORVRFTSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjIyLjI4NDQ5NTAwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk2NDQ3NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipJbnZlc3RpZ2F0aW5nIE5FVF9WUkYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIGBORVRfVlJGYCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBBcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbiBlbGVtZW50cywgcGFyYW1ldGVycywgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBhY2NvdW50IGZvciBiZXlvbmQgd2hhdCBJJ3ZlIGFscmVhZHkgY29uc2lkZXJlZD8gSSdtIHRoaW5raW5nIGJleW9uZCB0aGUgb2J2aW91cywgdGhlIHRoaW5ncyBJJ3ZlIGxpa2VseSBhbHJlYWR5IGNoZWNrZWQgbXVsdGlwbGUgdGltZXMuIEFyZSB0aGVyZSBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBvYnNjdXJlIGZsYWdzLCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBudWFuY2VzIHRoYXQgY291bGQgYml0ZSBtZSBsYXRlcj8gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gZW5zdXJlIHRoaXMgZW50aXJlIHZpcnR1YWwgcm91dGluZyBhbmQgZm9yd2FyZGluZyBzZXR1cCBpcyB0cnVseSBjb21wbGV0ZSBhbmQgcm9idXN0LiBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSdzIGFueXRoaW5nIEknbSBvdmVybG9va2luZyB0aGF0IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBkb3duIHRoZSBsaW5lIC0gSSdtIGFscmVhZHkgZW52aXNpb25pbmcgcG90ZW50aWFsIHRyb3VibGVzaG9vdGluZyBzY2VuYXJpb3MuIFNvLCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgaGF2ZSB0byBleGhhdXN0aXZlbHkgdGhpbmsgdGhyb3VnaCBpZiBJIGhhdmUgYWNjb3VudGVkIGZvciBldmVyeXRoaW5nLCBvciBpZiB0aGVyZSdzIHNvbWV0aGluZyBlbHNlIEkgaGF2ZSB0byB0aGluayBhYm91dC4gVGhhdCdzIG15IGltbWVkaWF0ZSBmb2N1cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MjYuMjgwOTQ1MTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzI6XFx0Y29uZmlnIE5FVF9WUkZcXG4gNDczOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXFxcIlxcbiA0NzQ6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSVBMRV9UQUJMRVNcXG4gNDc1OlxcdFxcdGRlcGVuZHMgb24gTkVUX0wzX01BU1RFUl9ERVZcXG4gNDc2OlxcdFxcdGRlcGVuZHMgb24gSVBWNl9NVUxUSVBMRV9UQUJMRVMgfHwgSVBWNj1uXFxuIDQ3NzpcXHRcXHRoZWxwXFxuIDQ3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIG1hcHBpbmcgaW50ZXJmYWNlcyBpbnRvIFZSRidzLiBUaGVcXG4gNDc5OlxcdFxcdCAgc3VwcG9ydCBlbmFibGVzIFZSRiBkZXZpY2VzLlxcbiA0ODA6XFx0XFxuIDQ4MTpcXHRjb25maWcgVlNPQ0tNT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MjYuMjgxMDE2NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDg3OTkyMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSByZXF1ZXN0ZWQ6XG5cbioqTmV0d29yayBSb3V0aW5nIFRhYmxlIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBzb21lIGNyaXRpY2FsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRocmVlIGtleSBmbGFnczogYElQX01VTFRJUExFX1RBQkxFU2AsIGBORVRfTDNfTUFTVEVSX0RFVmAsIGFuZCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLiBUaGVzZSBhcmUgYWxsIGhpZ2hseSByZWxldmFudCB0byBob3cgYSBzeXN0ZW0gaGFuZGxlcyByb3V0aW5nIGluZm9ybWF0aW9uIGFuZCB0aGUgdXNlIG9mIG11bHRpcGxlIHJvdXRpbmcgdGFibGVzLiBXaXRoIGBJUF9NVUxUSVBMRV9UQUJMRVNgLCBJJ20gZW52aXNpb25pbmcgdGhlIHNldHVwIG9mIG11bHRpcGxlIHJvdXRpbmcgdGFibGVzIGZvciBJUHY0LiBUaGVuIGBJUFY2X01VTFRJUExFX1RBQkxFU2AgY29tZXMgaW50byBwbGF5IGFuZCBkZWFscyB3aXRoIHRoZSBzaW1pbGFyIHNldHVwIGZvciBJUHY2LCBhbGxvd2luZyBmb3IgbW9yZSBjb21wbGV4IHJvdXRpbmcgZGVjaXNpb25zIGJhc2VkIG9uIHBvbGljeSBvciBvdGhlciBjcml0ZXJpYS4gRmluYWxseSBgTkVUX0wzX01BU1RFUl9ERVZgIC0gdGhpcyBmbGFnIG1ha2VzIG1lIHRoaW5rIGFib3V0IGEgbWFzdGVyIG5ldHdvcmsgZGV2aWNlIGNvbnRyb2xsaW5nIGxheWVyIDMgcm91dGluZyBkZWNpc2lvbnMsIHdoaWNoIGNvdWxkIGJlIGV4dHJlbWVseSB1c2VmdWwgaW4gbWFueSBlbnZpcm9ubWVudHMuIEkgYW0gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHNjZW5hcmlvcyBpbiBteSBoZWFkLCB0aGlua2luZyBhYm91dCBwb2xpY3kgcm91dGluZywgVlJGLCBhbmQgaXNvbGF0aW9uLiBJdCdzIHJlYWxseSB0aGUgYmFzaXMgZm9yIGFsbCBzb3J0cyBvZiBpbnRlcmVzdGluZyBhcmNoaXRlY3R1cmVzLiBJJ20gd29uZGVyaW5nIGlmIEkgY2FuIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgYW5kIGhvdyB0aGV5IGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIyMiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MzIuMzY5MDExMzA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMzMjAxNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfTDNfTUFTVEVSX0RFVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDNtZGV2L0tjb25maWctNS1cXG5uZXQvbDNtZGV2L0tjb25maWc6Njpjb25maWcgTkVUX0wzX01BU1RFUl9ERVZcXG5uZXQvbDNtZGV2L0tjb25maWctNy1cXHRib29sIFxcXCJMMyBNYXN0ZXIgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjM0LjEwMjIxOTE4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDcwMTA1MTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTE2MDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjM4LjE3MjMyNzAyOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbDNtZGV2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgNjpcXHRjb25maWcgTkVUX0wzX01BU1RFUl9ERVZcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkwzIE1hc3RlciBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVCB8fCBJUFY2XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGdsdWUgYmV0d2VlbiBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgZGV2aWNlXFxuICAxMTpcXHRcXHQgIGRyaXZlcnMgdG8gc3VwcG9ydCBMMyBtYXN0ZXIgZGV2aWNlcyBsaWtlIFZSRi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MzguMTcyMzk0MjI5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjUxNTEwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgTmV0d29yayBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBzZXR1cCBhbmQgaXQncyBiZWNvbWluZyBjbGVhciB3aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlLiBGaXJzdCBhbmQgZm9yZW1vc3QsIEknbSBnb2luZyB0byBuZWVkIHRoZSBgTkVUX0wzX01BU1RFUl9ERVZgIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyBub24tbmVnb3RpYWJsZSBmb3IgaG93IHRoaXMgc3lzdGVtIGlzIGFyY2hpdGVjdGVkLCBJIGNhbiBzZWUgdGhhdC4gQmV5b25kIHRoYXQsIGFuZCB0byBhbGxvdyBmb3IgcHJvcGVyIHJvdXRpbmcgYW5kIHRyYWZmaWMgbWFuYWdlbWVudCwgSSdsbCBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGBJUF9NVUxUSVBMRV9UQUJMRVNgIGFuZCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLiBNdWx0aXBsZSByb3V0aW5nIHRhYmxlcyB3aWxsIHByb3ZpZGUgdGhlIGZsZXhpYmlsaXR5IHRoaXMgZGVtYW5kcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjQxLjUzNzU1MzcwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMjY5NDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NTY9Y29uZmlnIElQX0ZJQl9UUklFX1NUQVRTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTYyLVxcbm5ldC9pcHY0L0tjb25maWc6NjM6Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY0L0tjb25maWctNjQtXFx0Ym9vbCBcXFwiSVA6IHBvbGljeSByb3V0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNTo0My4yNjAyNTcyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMTQ0NDY5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMjAyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NDUuNTc0NzA4MTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MzpcXHRjb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXFxuICA2NDpcXHRcXHRib29sIFxcXCJJUDogcG9saWN5IHJvdXRpbmdcXFwiXFxuICA2NTpcXHRcXHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgNjY6XFx0XFx0c2VsZWN0IEZJQl9SVUxFU1xcbiAgNjc6XFx0XFx0aGVscFxcbiAgNjg6XFx0XFx0ICBOb3JtYWxseSwgYSByb3V0ZXIgZGVjaWRlcyB3aGF0IHRvIGRvIHdpdGggYSByZWNlaXZlZCBwYWNrZXQgYmFzZWRcXG4gIDY5OlxcdFxcdCAgc29sZWx5IG9uIHRoZSBwYWNrZXQncyBmaW5hbCBkZXN0aW5hdGlvbiBhZGRyZXNzLiBJZiB5b3Ugc2F5IFkgaGVyZSxcXG4gIDcwOlxcdFxcdCAgdGhlIExpbnV4IHJvdXRlciB3aWxsIGFsc28gYmUgYWJsZSB0byB0YWtlIHRoZSBwYWNrZXQncyBzb3VyY2VcXG4gIDcxOlxcdFxcdCAgYWRkcmVzcyBpbnRvIGFjY291bnQuIEZ1cnRoZXJtb3JlLCB0aGUgVE9TIChUeXBlLU9mLVNlcnZpY2UpIGZpZWxkXFxuICA3MjpcXHRcXHQgIG9mIHRoZSBwYWNrZXQgY2FuIGJlIHVzZWQgZm9yIHJvdXRpbmcgZGVjaXNpb25zIGFzIHdlbGwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjQ1LjU3NDgwNjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2ODMzNjIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodDpcblxuKipGb2N1c2luZyBJbjogVGhlIE5lZWQgZm9yIGBJUF9BRFZBTkNFRF9ST1VURVJgKipcblxuQWxyaWdodCwgbGV0J3MgY3V0IHRvIHRoZSBjaGFzZS4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgcHJldHR5IGNsZWFyOiBXZSdyZSBhdCBhIHBvaW50IHdoZXJlIHRoZSBzdGFuZGFyZCwgb3V0LW9mLXRoZS1ib3ggSVAgcm91dGluZyBzZXR1cCBqdXN0IHdvbid0IGN1dCBpdC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiwgYSBkZXNpZ24sIG9yIGEgc2V0IG9mIHJlcXVpcmVtZW50cyB0aGF0IGRlbWFuZHMgbW9yZSBncmFudWxhciBjb250cm9sLCBtb3JlIHNvcGhpc3RpY2F0ZWQgZmVhdHVyZSBzZXRzLCBhbmQgcHJvYmFibHkgbW9yZSByb2J1c3QgcGVyZm9ybWFuY2UgdGhhbiBhIGJhc2ljIHJvdXRlciBjYW4gcHJvdmlkZS4gVGhpcyBpc24ndCBhYm91dCBzaW1wbGUgY29ubmVjdGl2aXR5OyBpdCdzIGFib3V0IGFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2xzLCB0cmFmZmljIGVuZ2luZWVyaW5nLCBwZXJoYXBzIGV2ZW4gbmV0d29yayBhdXRvbWF0aW9uIGFuZCBwcm9ncmFtbWFiaWxpdHkuIFRoZSB2ZXJ5IGZhY3QgdGhhdCBgSVBfQURWQU5DRURfUk9VVEVSYCBpcyB0aGUgZm9jdXMsIHNheXMgc29tZXRoaW5nIGFib3V0IHRoZSBjb21wbGV4aXR5IHdlJ3JlIGRlYWxpbmcgd2l0aC4gSXQgY291bGQgYmUgc2NhbGUsIHNlY3VyaXR5LCBvciBhIG1peCBvZiBib3RoIHRoYXQgaXMgcHVzaGluZyB1cyBpbiB0aGF0IGRpcmVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjQ5LjQ0MzE0NTA4M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMjk2ODc2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NT1jb25maWcgSVBfTVVMVElDQVNUXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE0LVxcbm5ldC9pcHY0L0tjb25maWc6MTU6Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxcbm5ldC9pcHY0L0tjb25maWctMTYtXFx0Ym9vbCBcXFwiSVA6IGFkdmFuY2VkIHJvdXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NTEuMTQ2MTE5NjJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEyODM1MDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEyNTUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNTo1My4yNzQ0NzQ0MTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiSVA6IGFkdmFuY2VkIHJvdXRlclxcXCJcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgSWYgeW91IGludGVuZCB0byBydW4geW91ciBMaW51eCBib3ggbW9zdGx5IGFzIGEgcm91dGVyLCBpLmUuIGFzIGFcXG4gIDE5OlxcdFxcdCAgY29tcHV0ZXIgdGhhdCBmb3J3YXJkcyBhbmQgcmVkaXN0cmlidXRlcyBuZXR3b3JrIHBhY2tldHMsIHNheSBZOyB5b3VcXG4gIDIwOlxcdFxcdCAgd2lsbCB0aGVuIGJlIHByZXNlbnRlZCB3aXRoIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFsbG93IG1vcmUgcHJlY2lzZVxcbiAgMjE6XFx0XFx0ICBjb250cm9sIGFib3V0IHRoZSByb3V0aW5nIHByb2Nlc3MuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgVGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbid0IGRpcmVjdGx5IGFmZmVjdCB0aGUga2VybmVsOlxcbiAgMjQ6XFx0XFx0ICBhbnN3ZXJpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NTMuMjc0NTc5NDg5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDE3NDUzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHR3bzpcblxuKipQcmVsaW1pbmFyeSBBc3Nlc3NtZW50IG9mIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaXQgc2VlbXMuIE5vIHJlYWwgZGVwZW5kZW5jaWVzIEkgY2FuIGltbWVkaWF0ZWx5IGlkZW50aWZ5LiBJdCBzaG91bGQgYmUgcHJldHR5IGVhc3kgdG8gd29yayB3aXRoIGluIGlzb2xhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIG5pY2UuXG5cbk5vdywgd2hhdCBhYm91dCB0aGF0IGBJUFY2X01VTFRJUExFX1RBQkxFU2Agb3B0aW9uPyBOZWVkIHRvIGdpdmUgdGhhdCBvbmUgYSBiaXQgbW9yZSB0aG91Z2h0LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBhbmQgc2VlIGlmIGl0IGhpbmdlcyBvbiBhbnl0aGluZyBlbHNlIGluIHRoZSBzdGFjay4gUHJvYmFibHkgd29ydGggY3Jvc3MtcmVmZXJlbmNpbmcgdGhhdCB3aXRoIG90aGVyIGZlYXR1cmVzLiBHb3R0YSBtYWtlIHN1cmUgaXQgZG9lc24ndCBjcmVhdGUgYW55IHVuZXhwZWN0ZWQgY29uZmxpY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc1NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NTcuMTc2MzI3NjgxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4OTI4MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTIzMj1jb25maWcgSVBWNl9GT1VfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cXHRib29sIFxcXCJJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NTguOTQ1MjY2MDM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyODUyMDM5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMzA0NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjY6MDEuMjMwNDcyOTM3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM3OlxcdGNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbiAyMzg6XFx0XFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuIDIzOTpcXHRcXHRzZWxlY3QgRklCX1JVTEVTXFxuIDI0MDpcXHRcXHRoZWxwXFxuIDI0MTpcXHRcXHQgIFN1cHBvcnQgbXVsdGlwbGUgcm91dGluZyB0YWJsZXMuXFxuIDI0MjpcXHRcXG4gMjQzOlxcdGNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuIDI0NDpcXHRcXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbiAyNDU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X01VTFRJUExFX1RBQkxFU1xcbiAyNDY6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjowMS4yMzA1NDI4MjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODk5ODAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgIGFwcGVhcnMgc3RyYWlnaHRmb3J3YXJkIOKAkyBubyBnb3RjaGFzIHRoZXJlLCBubyBoaWRkZW4gZGVwZW5kZW5jaWVzIHRvIHRyaXAgbWUgdXAuIFRoYXQncyBnb29kLCBhIGNsZWFuIGJpbGwgb2YgaGVhbHRoIG9uIHRoYXQgb25lLiBOb3csIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgTkVUX1NDSF9ORVRFTWAuIEkgd2FudCB0byBkaWcgaW50byB0aGF0IG9uZSBhIGJpdCBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjIzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjowNC42NDk1NDM3MDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHRjb25maWcgTkVUX1NDSF9ORVRFTVxcbiAxOTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgZW11bGF0b3IgKE5FVEVNKVxcXCJcXG4gMTk3OlxcdFxcdGhlbHBcXG4gMTk4OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW11bGF0ZSBuZXR3b3JrIGRlbGF5LCBsb3NzLCBhbmQgcGFja2V0XFxuIDE5OTpcXHRcXHQgIHJlLW9yZGVyaW5nLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB0byBzaW11bGF0ZSBuZXR3b3JrcyB3aGVuXFxuIDIwMDpcXHRcXHQgIHRlc3RpbmcgYXBwbGljYXRpb25zIG9yIHByb3RvY29scy5cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDIwMzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9uZXRlbS5cXG4gMjA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjowNC42NDk2NTEyODlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0Njg4NzA3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0d29yayBTY2hlZHVsaW5nIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUgb3IgY29uZmlndXJhdGlvbiwgYW5kIGl0IGFsbCBoaW5nZXMgb24gYE5FVF9TQ0hFRGAuIFJpZ2h0LCB0aGF0J3MgdGhlIGtleS4gVGhhdCdzIHRoZSBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgYW5kL29yIGZhaXIgcXVldWVpbmcgbWVudSwgd2hpY2ggbWVhbnMgKmV2ZXJ5dGhpbmcqIHJlbGF0ZWQgdG8gaG93IG5ldHdvcmsgdHJhZmZpYyBnZXRzIHByaW9yaXRpemVkIGFuZCBoYW5kbGVkIGlzIGltcGFjdGVkIGJ5IHRoaXMuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHBvdGVudGlhbGx5IGh1Z2UsIGRlcGVuZGluZyBvbiB3aGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2l0aGluIGBORVRfU0NIRURgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGF0J3MgKnVzaW5nKiBgTkVUX1NDSEVEYCB0byBkZXRlcm1pbmUgaXRzIGltcGFjdC4gSXQgYWZmZWN0cyBwZXJmb3JtYW5jZSBhbmQgd2hpY2ggYXBwcy9kYXRhIGhhdmUgcHJpb3JpdHkgb3ZlciBvdGhlcnMuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI2OjE1LjExODUyNTU4OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTU1OTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSEVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnLTUtXFxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxcbm5ldC9zY2hlZC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjoxNi44NTgwOTAwMjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1NzQxMzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEzODAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjoyMi45MTU1MDUzODRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgNjpcXHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xcbiAgMTE6XFx0XFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXFxuICAxMjpcXHRcXHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXFxuICAxMzpcXHRcXHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xcbiAgMTQ6XFx0XFx0ICBcXFwiZmFpcmx5XFxcIiBoYXZlIGJlZW4gcHJvcG9zZWQuXFxuICAxNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjY6MjIuOTE1NTg4MTU0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzMxMjk2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTmV0d29yayBDb25maWd1cmF0aW9uIGFuZCBSb3V0aW5nKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgYXNwZWN0cywgaGVuY2UgdGhlIG5lZWQgZm9yIGBORVRfU0NIRURgLiBOb3csIGxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9ucyBJJ20gd29ya2luZyB3aXRoOiBgSU5FVGAsIGBJUFY2YCwgYE5FVF9WUkZgLCBgTkVUX0wzX01BU1RFUl9ERVZgLCBgSVBfTVVMVElQTEVfVEFCTEVTYCwgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGBJUFY2X01VTFRJUExFX1RBQkxFU2AsIGBORVRfU0NIRURgLCBhbmQgYE5FVF9TQ0hfTkVURU1gLiBUaGlzIGdpdmVzIG1lIHRoZSBicm9hZCBwaWN0dXJlLlxuXG5NeSBtYWluIGFyZWEgb2YgY29uY2VybiBhcmUgdGhlc2Uga2V5IHN5bWJvbHM6IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAsIGFuZCwgaW1wb3J0YW50bHksIGBydDZfZGlzYWJsZV9pcGAuIEnigJltIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgcnQ2X2Rpc2FibGVfaXBgIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLiBZZXMsIHRoYXQncyByaWdodC4gYHJ0Nl9kaXNhYmxlX2lwYCBjYWxscyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBiZWhhdmlvciBJIGV4cGVjdC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBydF9mbHVzaF9kZXZgLiBBaCwgSSB0aG91Z2h0IEkgc2F3IHNvbWV0aGluZy4uLiBgaXB2NF9kc3RfZGVzdHJveWAuLi4gbm8sIHdhaXQsIHRoYXQncyBub3QgcmlnaHQuIExldCBtZSByZS1leGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBydF9mbHVzaF9kZXZgLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIGRlcGVuZGVuY3kgb3IgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjY6MjguMjg4NzIwNTAzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE2NTk1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0X2ZsdXNoX2RldlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9yb3V0ZS5oPTEzMT12b2lkIHJ0X2NhY2hlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCk7XFxuaW5jbHVkZS9uZXQvcm91dGUuaDoxMzI6dm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9uZXQvcm91dGUuaC0xMzMtXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNTA2PXN0YXRpYyBpbnQgZmliX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MTctXFx0XFx0ZmliX2Rpc2FibGVfaXAoZGV2LCBldmVudCwgdHJ1ZSk7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTUxODpcXHRcXHRydF9mbHVzaF9kZXYoZGV2KTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE5LVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTU5MT1zdGF0aWMgdm9pZCBpcHY0X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU5Ni1cXG5uZXQvaXB2NC9yb3V0ZS5jOjE1OTc6dm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjozMC4zMDUzMjE3MDdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MzI1MTM5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGRhdGEgc3RydWN0dXJlIGZvciB1bmNhY2hlZCByb3V0ZXMuIEkgc2VlIGBydF9mbHVzaF9kZXZgIGJlaW5nIGNhbGxlZCBieSBgZmliX25ldGRldl9ldmVudGAsIHdoaWNoIGlzIGEgbm90aWZpZXIuIFRoYXQncyBmaW5lLCBpdCdzIG5vdCBhIGRpcmVjdCBBUEkgZW50cnlwb2ludCBhbmQgYGZpYl9uZXRkZXZfZXZlbnRgIGlzIHRoZSBvbmx5IGNhbGxlciBvZiBgcnRfZmx1c2hfZGV2YCwgc28gd2UncmUgZ29vZCB0byBpbmNsdWRlIGl0LiBTaW1pbGFybHksIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGlzIHVzZWQgaW4ga2V5IHBsYWNlcyBsaWtlIGBpcDZfcG9sX3JvdXRlYCwgYGljbXA2X2RzdF9hbGxvY2AsIGFuZCBgeGZybTZfZmlsbF9kc3RgIGFuZCBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGlzIHVzZWQgaW4gYSBzaW1pbGFyIHNldCBvZiBnb29kIGZ1bmN0aW9ucy5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBjb3JlIGNoYW5nZS4gVGhlIHBhdGNoIHNoaWZ0cyBmcm9tIGEgc2ltcGxlIHBlci1DUFUgbGlzdCB0byBhIHBlci1DUFUgaGFzaCB0YWJsZSBvZiBsaXN0cy4gSVB2NiBnZXRzIGFuIGV4dHJhIGBtaXNtYXRjaGAgbGlzdCB0aHJvd24gaW4uIFRoYXQgbWVhbnMgdGhlIGxvZ2ljIGluIGZ1bmN0aW9ucyBsaWtlIGBydF9mbHVzaF9kZXZgIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBhcmUgZ29pbmcgdG8gYmUgcmV3cml0dGVuIHRvIGl0ZXJhdGUgb3ZlciBidWNrZXRzIG9yIHRoYXQgbmV3IG1pc21hdGNoIGxpc3QsIHdoaWNoIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKi4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS5cblxuU28sIGxldCdzIGFzc2VtYmxlIG91ciBwbGFuLiBHaXZlbiB0aGlzIGZ1bmN0aW9uYWwgc2hpZnQgYW5kIHRoZSBsaWtlbHkgZWRnZSBjYXNlcywgSSB3YW50IHRvIGtlZXAgdGhlIHRlc3RpbmcgdmVyeSBmb2N1c2VkLiBUaGUgY29uZmlncyBzcGVjaWZpZWQgYXJlIHJlbGV2YW50LCBlc3BlY2lhbGx5IHRoZSBvbmVzIHRoYXQgdHJpZ2dlciBzcGVjaWZpYyBuZXR3b3JraW5nIGZlYXR1cmVzIGxpa2UgVlJGLCBOZXRlbSBhbmQgbXVsdGlwbGUgcm91dGluZyB0YWJsZXMuIFNvIHRoYXQgaW5jbHVkZXMgYElORVRgLCBgSVBWNmAsIGBORVRfVlJGYCwgYE5FVF9MM19NQVNURVJfREVWYCwgYElQX01VTFRJUExFX1RBQkxFU2AsIGBJUF9BRFZBTkNFRF9ST1VURVJgLCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLCBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfTkVURU1gLlxuXG5UaGUgY29yZSBzeW1ib2xzIEknbSBmb2N1c2luZyBvbiBmb3IgdGhpcyBwYXRjaCBhcmU6IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgYW5kIGBydDZfZGlzYWJsZV9pcGAuIFRoZSBWUkYgYW5kIE5ldGVtIGNvbmZpZ3MgbGlrZWx5IGhpbnQgYXQgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHdlJ2xsIHNlZSBpbnRlcmVzdGluZyBiZWhhdmlvciwgbGlrZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlcyBpbiBJUHY2LCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHdlIHdhbnQgdG8gY2F0Y2guIFRoZSBwYXRjaCBjaGFuZ2VzIGhvdyB1bmNhY2hlZCByb3V0ZXMgYXJlIGhhbmRsZWQsIGFkZGVkLCBkZWxldGVkLCBhbmQgZmx1c2hlZCB3aGVuIGEgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZCwgc28gdGhpcyBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4ODQsIk91dHB1dFRva2VucyI6MjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI2OjQwLjkzNzg0MDYyOVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTI1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRfVlJGXCIsXG4gICAgXCJORVRfTDNfTUFTVEVSX0RFVlwiLFxuICAgIFwiSVBfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQVjZfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfTkVURU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLFxuICAgIFwicnRfZmx1c2hfZGV2XCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9hZGRcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2RlbFwiLFxuICAgIFwicnQ2X2Rpc2FibGVfaXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFja2luZyB1bmNhY2hlZCByb3V0ZXMgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGZyb20gYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHRvIGEgcGVyLUNQVSBoYXNoIHRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIFRoZSB0ZXN0IHNjcmlwdCBpbmRpY2F0ZXMgdGhhdCBWUkYgYW5kIE5FVEVNIGFyZSB1c2VkIHRvIHRyaWdnZXIgc3BlY2lmaWMgZWRnZSBjYXNlcyAobGlrZSBtaXNtYXRjaGVkIGRldmljZXMgaW4gSVB2NiksIHNvIGVuYWJsaW5nIHRob3NlIGNvbmZpZ3MgaXMgaW1wb3J0YW50IGZvciB0aG9yb3VnaCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIk5FVF9WUkZcIixcbiAgICBcIk5FVF9MM19NQVNURVJfREVWXCIsXG4gICAgXCJJUF9NVUxUSVBMRV9UQUJMRVNcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICAgIFwiSVBWNl9NVUxUSVBMRV9UQUJMRVNcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9ORVRFTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0X2FkZF91bmNhY2hlZF9saXN0XCIsXG4gICAgXCJydF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiLFxuICAgIFwicnQ2X3VuY2FjaGVkX2xpc3RfZGVsXCIsXG4gICAgXCJydDZfZGlzYWJsZV9pcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGRhdGEgc3RydWN0dXJlIHVzZWQgZm9yIHRyYWNraW5nIHVuY2FjaGVkIHJvdXRlcyBpbiBib3RoIElQdjQgYW5kIElQdjYgZnJvbSBhIHNpbmdsZSBwZXItQ1BVIGxpc3QgdG8gYSBwZXItQ1BVIGhhc2ggdGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBob3cgdW5jYWNoZWQgcm91dGVzIGFyZSBhZGRlZCwgZGVsZXRlZCwgYW5kIGZsdXNoZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gVGhlIHRlc3Qgc2NyaXB0IGluZGljYXRlcyB0aGF0IFZSRiBhbmQgTkVURU0gYXJlIHVzZWQgdG8gdHJpZ2dlciBzcGVjaWZpYyBlZGdlIGNhc2VzIChsaWtlIG1pc21hdGNoZWQgZGV2aWNlcyBpbiBJUHY2KSwgc28gZW5hYmxpbmcgdGhvc2UgY29uZmlncyBpcyBpbXBvcnRhbnQgZm9yIHRob3JvdWdoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI2OjQxLjAxOTM3Mzk1NVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzY0MzMzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjo0MS4wMTk4ODI5NjVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA4NzU5MjA0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgdW5jYWNoZWRfdGFibGVgLCBgc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZWApIHdoaWNoIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCB2aWEgYERFRklORV9QRVJfQ1BVX0FMSUdORURgIChhbmQgdGh1cyB6ZXJvLWluaXRpYWxpemVkIGluIHRoZSBwZXItQ1BVIEJTUykgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkIGluIHRoZSBzdWJzeXN0ZW0gaW5pdCBmdW5jdGlvbnMgKGBpcF9ydF9pbml0YCwgYGlwNl9yb3V0ZV9pbml0YCkuIFxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byB1c2VyLWNvbnRyb2xsZWQgbGVuZ3RocyBvciBib3VuZHMsIGFuZCBubyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBsb2NraW5nLCBvciB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSByb3V0ZSBpcyBub3QgcHJvcGVybHkgZmx1c2hlZCksIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYmU0ZTdhYzRiN2NjMWJkMmNhY2MxYmZlZmRiYjY3ODQ1ZWJkMDM2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjA6MjQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggNjA0Y2M1MWRmZDliYy4uM2Y5YmMxZWM3MmNjZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbisrKyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC03NCw2ICs3NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZ21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21yb3V0ZS5oXHUwMDNlXG5AQCAtMTU1MiwxMSArMTU1MywyMiBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpO1xuKyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChSVF9VTkNBQ0hFRF9IQVNIX0JJVFMpXG4rXG4rc3RydWN0IHVuY2FjaGVkX3RhYmxlIHtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcbit9O1xuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xuIFxuIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG4ge1xuLVx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUpO1xuK1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KSxcbitcdFx0XHRcdCAgICAgIFJUX1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTg4LDE0ICsxNjAwLDE4IEBAIHZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpbnQgY3B1O1xuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4rXHRcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XG4rXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbitcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydF91bmNhY2hlZF90YWJsZSwgY3B1KTtcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuK1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgKzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4gXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuK1x0XHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xuK1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuK1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggMTZkZmFjNTRhMjU5YS4uODYwNTMwMDc0MDI3YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC00MCw2ICs0MCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG5AQCAtMTMzLDExICsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0aGVhZDtcbiB9O1xuIFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFXHRCSVQoUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUylcbitcbitzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRV07XG4rXHQvKiBSb3V0ZXMgdGhhdCBtdXN0IGJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIHR3byBkaWZmZXJlbnQgZGV2aWNlcy4gKi9cbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcbitcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlKTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XG4rXG4rXHRpZiAocnQtXHUwMDNlcnQ2aV9pZGV2IFx1MDAyNlx1MDAyNiBydC1cdTAwM2VydDZpX2lkZXYtXHUwMDNlZGV2ICE9IHJ0X2RldilcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaDtcbitcdGVsc2VcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKHJ0X2RldixcbitcdFx0XHRcdFx0ICAgICAgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTcsNDAgKzE3NSw1MCBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuK1x0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbitcbitcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuK1x0XHRcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xuK1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4rXHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4rXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRpZiAoaGFuZGxlZClcbitcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4tXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuK1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTtcbitcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7XG4rXHRcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLCBkZXYpO1xuIFx0fVxuIH1cbiBcbkBAIC02OTgyLDEwICs3MDEwLDE4IEBAIGludCBfX2luaXQgaXA2X3JvdXRlX2luaXQodm9pZClcbiAjZW5kaWZcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4rXHRcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcbitcdFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCsrKSB7XG4rXHRcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1tidWNrZXRdO1xuIFxuLVx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbi1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4rXHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRcdH1cbitcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2guaGVhZCk7XG4rXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLmxvY2spO1xuIFx0fVxuIFxuIG91dDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuQEAgLTM4NSw2ICszODUsMzcgQEAgcnVuX3Rlc3RzKClcbiBcdGNsZWFudXBfeGZybV9kZXZcbiB9XG4gXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKClcbit7XG4rXHRsb2NhbCBzZW5kZXJfcGlkXG4rXHRsb2NhbCBiYWNrbG9nXG4rXHRsb2NhbCByY1xuK1xuK1x0IyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nXG4rXHQjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkXG4rXHQjIHJvdXRlcywgYW5kIG5ldGVtIGtlZXBzIHRoZW0gcmVmZXJlbmNlZCB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIGRlbGV0ZWQuXG4rXHRydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzXG4rXHRpcCAtNiAtbmV0bnMgXCIkaG9zdDFcIiByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDBcbitcdGlwIG5ldG5zIGV4ZWMgXCIkaG9zdDFcIiAuL21zZ196ZXJvY29weSAtNiBcXFxuK1x0XHQtUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbitcdHNlbmRlcl9waWQ9JCFcbitcdHdhaXQgXCIkc2VuZGVyX3BpZFwiXG4rXHRyYz0kP1xuK1x0bG9nX3Rlc3QgJHJjIDAgXCJDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcIlxuK1x0WyAkcmMgLW5lIDAgXSBcdTAwMjZcdTAwMjYgcmV0dXJuXG4rXG4rXHRiYWNrbG9nPSQoaXAgbmV0bnMgZXhlYyBcIiRob3N0MVwiIHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSlcbitcdGlmICEgZWNobyBcIiRiYWNrbG9nXCIgfCBncmVwIC1FcSAnYmFja2xvZyAuKiBbMS05XVswLTldKnAnOyB0aGVuXG4rXHRcdGxvZ190ZXN0IDEgMCBcIlJldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcIlxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRsb2dfdGVzdCAwIDAgXCJSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXCJcbitcbitcdHJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDBcbitcdGxvZ190ZXN0ICQ/IDAgXCJGbHVzaCB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rfVxuK1xuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIyB1c2FnZVxuIFxuQEAgLTQyNSw2ICs0NTYsMTAgQEAgZWNob1xuIGVjaG8gXCJuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlXCJcbiBydW5fdGVzdHNcbiBcbitlY2hvXG4rZWNobyBcIlVuY2FjaGVkIElQdjYgcm91dGUgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcIlxuK3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaFxuK1xuIHByaW50ZiBcIlxcblRlc3RzIHBhc3NlZDogJTNkXFxuXCIgJHtuc3VjY2Vzc31cbiBwcmludGYgXCJUZXN0cyBmYWlsZWQ6ICUzZFxcblwiICAgJHtuZmFpbH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI2OjQxLjAxOTg4MzkwNVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg3NTg5OTExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOPWZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBLTVNBTiBpc24ndCBuZWNlc3NhcnkgaGVyZS4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYCDigJMgcHJldHR5IGZ1bmRhbWVudGFsIHJvdXRpbmcgY29kZS4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHN3aXRjaCBmcm9tIGEgc2ltcGxlIGxpbmtlZCBsaXN0IChgcnRfdW5jYWNoZWRfbGlzdGApIHRvIGEgaGFzaCB0YWJsZSBvZiBsaXN0cywgcGVyIENQVSwga2V5ZWQgb2ZmIGBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdClgLiAgVGhpcyBoYXNoIHRhYmxlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZyBzdHJ1Y3R1cmUgZm9yIElQdjYuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBpcyBhaW1lZCBhdCBpbXByb3Zpbmcgb3IgcmVzb2x2aW5nIGlzc3VlcyByZWxhdGVkIHRvIGZsdXNoaW5nIHRoZXNlIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgcmVtb3ZlZC5cblxuSW1wb3J0YW50bHksIHRoaXMgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZSBjaGFuZ2UuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgYSBtYXNzaXZlIHJlbGllZi4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IGNoYW5nZXMgdGhhdCBpbnRlcmFjdCB3aXRoIHVzZXItY29udHJvbGxlZCBsZW5ndGhzIG9yIGJvdW5kcy4gIFRoYXQgZWxpbWluYXRlcyBhIHdob2xlIGNsYXNzIG9mIHBvdGVudGlhbCBLTVNBTiBjb25jZXJucyByaWdodCBhd2F5LlxuXG5JJ20gdmVyaWZ5aW5nIHRoYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbGlrZSBgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYXJlIGRlZmluZWQgYW5kIGFsbG9jYXRlZCB3aXRoIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYC4gIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCBpcyBrbm93biB0byB6ZXJvLWluaXRpYWxpemUgdGhlIG1lbW9yeSwgbWVhbmluZyB3ZSdyZSBzdGFydGluZyBmcm9tIGEgc2FmZSBzdGF0ZS4gVGhlIGBidWNrZXRzYCBhcnJheSB3aXRoaW4gdGhlIGhhc2ggdGFibGUgaXMgaW5pdGlhbGl6ZWQgaW4gYGlwX3J0X2luaXRgIGFuZCBgaXA2X3JvdXRlX2luaXRgIHdpdGggYElOSVRfTElTVF9IRUFEYCBhbmQgYHNwaW5fbG9ja19pbml0YCwgd2hpY2ggYXJlIHByZXR0eSBzdGFuZGFyZCBhbmQgc2FmZSBpbml0aWFsaXphdGlvbiBwcmFjdGljZXMuIEknbSBub3Qgc2VlaW5nIGFueSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIGFuZCB0aGVyZSBpcyBubyB1c2VyIHNwYWNlIGludGVyYWN0aW9uLlxuXG5JIGhhdmUgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgYW5kIHZlcmlmaWVkIHRoYXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBjaGFuZ2UgaXMgY29udGFpbmVkIGludGVybmFsbHksIGFuZCBvcGVyYXRlcyB3aXRoIHplcm8taW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIEkgYW0gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcmlzayBoZXJlLCBpZiBhbnksIGxpZXMgaW4gdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsaXN0IG1hbmlwdWxhdGlvbiwgbG9ja2luZyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIEtBU0FOLCBhbmQgTE9DS0RFUCBhcmUgc2V0IHVwIHRvIGhhbmRsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNCwiT3V0cHV0VG9rZW5zIjoyNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjo1MS44OTU3ODY2OTZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgdW5jYWNoZWRfdGFibGVgLCBgc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZWApIHdoaWNoIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCB2aWEgYERFRklORV9QRVJfQ1BVX0FMSUdORURgIChhbmQgdGh1cyB6ZXJvLWluaXRpYWxpemVkIGluIHRoZSBwZXItQ1BVIEJTUykgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkIGluIHRoZSBzdWJzeXN0ZW0gaW5pdCBmdW5jdGlvbnMgKGBpcF9ydF9pbml0YCwgYGlwNl9yb3V0ZV9pbml0YCkuIFxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byB1c2VyLWNvbnRyb2xsZWQgbGVuZ3RocyBvciBib3VuZHMsIGFuZCBubyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBsb2NraW5nLCBvciB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSByb3V0ZSBpcyBub3QgcHJvcGVybHkgZmx1c2hlZCksIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdW5jYWNoZWQgcm91dGVzIGluIElQdjQgYW5kIElQdjYgYnkgcmVwbGFjaW5nIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB3aXRoIGEgcGVyLUNQVSBoYXNoIHRhYmxlIChhbmQgYW4gYWRkaXRpb25hbCBgbWlzbWF0Y2hgIGxpc3QgZm9yIElQdjYpLiBUaGlzIGlzIGRvbmUgdG8gb3B0aW1pemUgb3IgZml4IHRoZSBmbHVzaGluZyBvZiB1bmNhY2hlZCByb3V0ZXMgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcXG5cXG5UaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGNoYW5nZXMgdG8gdXNlci1jb250cm9sbGVkIGxlbmd0aHMgb3IgYm91bmRzLCBhbmQgbm8gY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsaXN0IG1hbmlwdWxhdGlvbiwgbG9ja2luZywgb3IgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgcm91dGUgaXMgbm90IHByb3Blcmx5IGZsdXNoZWQpLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflows2f55[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 20:22:24 +0000 UTC FinishedAt: 2026-08-26 20:26:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6", "NET_VRF", "NET_L3_MASTER_DEV", "IP_MULTIPLE_TABLES", "IP_ADVANCED_ROUTER", "IPV6_MULTIPLE_TABLES", "NET_SCHED", "NET_SCH_NETEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6", "NET_VRF", "NET_L3_MASTER_DEV", "IP_MULTIPLE_TABLES", "IP_ADVANCED_ROUTER", "IPV6_MULTIPLE_TABLES", "NET_SCHED", "NET_SCH_NETEM" ], "series_id": "dc5677d3-bbc1-492d-a4bb-545b42e2d90a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rt_add_uncached_list", "rt_flush_dev", "rt6_uncached_list_add", "rt6_uncached_list_del", "rt6_disable_ip" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDssCiAgICAmIzM0O05FVF9MM19NQVNURVJfREVWJiMzNDssCiAgICAmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBWNl9NVUxUSVBMRV9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfTkVURU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICAgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfYWRkJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2RlbCYjMzQ7LAogICAgJiMzNDtydDZfZGlzYWJsZV9pcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIHVzZXItY29udHJvbGxlZCBsZW5ndGhzIG9yIGJvdW5kcywgYW5kIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGxvY2tpbmcsIG9yIHVzZS1hZnRlci1mcmVlIChlLmcuLCBpZiBhIHJvdXRlIGlzIG5vdCBwcm9wZXJseSBmbHVzaGVkKSwgd2hpY2ggYXJlIHdlbGwgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFja2luZyB1bmNhY2hlZCByb3V0ZXMgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGZyb20gYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHRvIGEgcGVyLUNQVSBoYXNoIHRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIFRoZSB0ZXN0IHNjcmlwdCBpbmRpY2F0ZXMgdGhhdCBWUkYgYW5kIE5FVEVNIGFyZSB1c2VkIHRvIHRyaWdnZXIgc3BlY2lmaWMgZWRnZSBjYXNlcyAobGlrZSBtaXNtYXRjaGVkIGRldmljZXMgaW4gSVB2NiksIHNvIGVuYWJsaW5nIHRob3NlIGNvbmZpZ3MgaXMgaW1wb3J0YW50IGZvciB0aG9yb3VnaCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGJlNGU3YWM0YjdjYzFiZDJjYWNjMWJmZWZkYmI2Nzg0NWViZDAzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIwOjI0OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCA2MDRjYzUxZGZkOWJjLi4zZjliYzFlYzcyY2NlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTc0LDYgJiM0Mzs3NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWdtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tcm91dGUuaFx1MDAzZVxuQEAgLTE1NTIsMTEgJiM0MzsxNTUzLDIyIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhlYWQ7XG4gfTtcbiBcbi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7XG4mIzQzOyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4mIzQzOyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9TSVpFXHRCSVQoUlRfVU5DQUNIRURfSEFTSF9CSVRTKVxuJiM0MztcbiYjNDM7c3RydWN0IHVuY2FjaGVkX3RhYmxlIHtcbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUX1VOQ0FDSEVEX0hBU0hfU0laRV07XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX2xpc3QpO1xuJiM0MztcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcdTAwMjZydF91bmNhY2hlZF90YWJsZSk7XG4mIzQzO1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuJiM0MztcbiYjNDM7XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIoZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpLFxuJiM0MztcdFx0XHRcdCAgICAgIFJUX1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTg4LDE0ICYjNDM7MTYwMCwxOCBAQCB2b2lkIHJ0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuJiM0MztcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbiYjNDM7XG4mIzQzO1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuJiM0MztcdFx0XHRpZiAoZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpICE9IGRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihydC1cdTAwM2Vkc3QuZGV2X3JjdSwgYmxhY2tob2xlX25ldGRldik7XG4gXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKGRldiwgYmxhY2tob2xlX25ldGRldixcbkBAIC0zNzcxLDEwICYjNDM7Mzc4NywxNiBAQCBpbnQgX19pbml0IGlwX3J0X2luaXQodm9pZClcbiBcdGlwX3RzdGFtcHMgPSBpZGVudHNfaGFzaCAmIzQzOyAoaXBfaWRlbnRzX21hc2sgJiM0MzsgMSkgKiBzaXplb2YoKmlwX2lkZW50cyk7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbiYjNDM7XHRcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XG4mIzQzO1x0XHRpbnQgYnVja2V0O1xuJiM0MztcbiYjNDM7XHRcdHRhYmxlID0gcGVyX2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4mIzQzO1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggMTZkZmFjNTRhMjU5YS4uODYwNTMwMDc0MDI3YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC00MCw2ICYjNDM7NDAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uc3Byb3h5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpcGhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbkBAIC0xMzMsMTEgJiM0MzsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0aGVhZDtcbiB9O1xuIFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XG4mIzQzOyNkZWZpbmUgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUU1x0NlxuJiM0MzsjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChSVDZfVU5DQUNIRURfSEFTSF9CSVRTKVxuJiM0MztcbiYjNDM7c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7XG4mIzQzO1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVDZfVU5DQUNIRURfSEFTSF9TSVpFXTtcbiYjNDM7XHQvKiBSb3V0ZXMgdGhhdCBtdXN0IGJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIHR3byBkaWZmZXJlbnQgZGV2aWNlcy4gKi9cbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG4gXG4gdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydClcbiB7XG4tXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCk7XG4mIzQzO1x0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4mIzQzO1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuJiM0MztcbiYjNDM7XHRpZiAocnQtXHUwMDNlcnQ2aV9pZGV2IFx1MDAyNlx1MDAyNiBydC1cdTAwM2VydDZpX2lkZXYtXHUwMDNlZGV2ICE9IHJ0X2RldilcbiYjNDM7XHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2g7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKHJ0X2RldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTtcbiBcbiBcdHJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7XG4gXG5AQCAtMTU3LDQwICYjNDM7MTc1LDUwIEBAIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dWwtXHUwMDNlaGVhZCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuJiM0MztcdFx0c3RydWN0IGluZXQ2X2RldiAqcnRfaWRldiA9IHJ0LVx1MDAzZXJ0NmlfaWRldjtcbiYjNDM7XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4mIzQzO1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocnRfaWRldiBcdTAwMjZcdTAwMjYgcnRfaWRldi1cdTAwM2VkZXYgPT0gZGV2KSB7XG4mIzQzO1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuJiM0MztcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbiYjNDM7XHRcdFx0aGFuZGxlZCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJ0X2RldiA9PSBkZXYpIHtcbiYjNDM7XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4mIzQzO1x0XHRcdG5ldGRldl9yZWZfcmVwbGFjZShydF9kZXYsIGJsYWNraG9sZV9uZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZydC1cdTAwM2Vkc3QuZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChoYW5kbGVkKVxuJiM0MztcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGludCBjcHU7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0LCBjcHUpO1xuLVx0XHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbiYjNDM7XHRcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuJiM0MztcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHRhYmxlID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuJiM0MztcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7XG4mIzQzO1x0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaCwgZGV2KTtcbiBcdH1cbiB9XG4gXG5AQCAtNjk4MiwxMCAmIzQzOzcwMTAsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxuICNlbmRpZlxuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbiYjNDM7XHRcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuJiM0MztcdFx0aW50IGJ1Y2tldDtcbiYjNDM7XG4mIzQzO1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcbiYjNDM7XHRcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFx1MDAzYyBSVDZfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaC5oZWFkKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLmxvY2spO1xuIFx0fVxuIFxuIG91dDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuQEAgLTM4NSw2ICYjNDM7Mzg1LDM3IEBAIHJ1bl90ZXN0cygpXG4gXHRjbGVhbnVwX3hmcm1fZGV2XG4gfVxuIFxuJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgc2VuZGVyX3BpZFxuJiM0MztcdGxvY2FsIGJhY2tsb2dcbiYjNDM7XHRsb2NhbCByY1xuJiM0MztcbiYjNDM7XHQjIEEgbG9jYWwgcm91dGUgdGhyb3VnaCBhIFZSRiB1c2VzIHRoZSBWUkYgYXMgZHN0LmRldiB3aGlsZSByZXRhaW5pbmdcbiYjNDM7XHQjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkXG4mIzQzO1x0IyByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkZWxldGVkLlxuJiM0MztcdHJ1bl9jbWRfaG9zdDEgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHNcbiYjNDM7XHRpcCAtNiAtbmV0bnMgXCYjMzQ7JGhvc3QxXCYjMzQ7IHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMFxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JGhvc3QxXCYjMzQ7IC4vbXNnX3plcm9jb3B5IC02IFxcXG4mIzQzO1x0XHQtUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFxcXG4mIzQzO1x0XHRcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4mIzQzO1x0c2VuZGVyX3BpZD0kIVxuJiM0MztcdHdhaXQgXCYjMzQ7JHNlbmRlcl9waWRcJiMzNDtcbiYjNDM7XHRyYz0kP1xuJiM0MztcdGxvZ190ZXN0ICRyYyAwIFwmIzM0O0NyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wmIzM0O1xuJiM0MztcdFsgJHJjIC1uZSAwIF0gXHUwMDI2XHUwMDI2IHJldHVyblxuJiM0MztcbiYjNDM7XHRiYWNrbG9nPSQoaXAgbmV0bnMgZXhlYyBcJiMzNDskaG9zdDFcJiMzNDsgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KVxuJiM0MztcdGlmICEgZWNobyBcJiMzNDskYmFja2xvZ1wmIzM0OyB8IGdyZXAgLUVxICYjMzk7YmFja2xvZyAuKiBbMS05XVswLTldKnAmIzM5OzsgdGhlblxuJiM0MztcdFx0bG9nX3Rlc3QgMSAwIFwmIzM0O1JldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcJiMzNDtcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0bG9nX3Rlc3QgMCAwIFwmIzM0O1JldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcJiMzNDtcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMFxuJiM0MztcdGxvZ190ZXN0ICQ/IDAgXCYjMzQ7Rmx1c2ggdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuICMgdXNhZ2VcbiBcbkBAIC00MjUsNiAmIzQzOzQ1NiwxMCBAQCBlY2hvXG4gZWNobyBcJiMzNDtuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlXCYjMzQ7XG4gcnVuX3Rlc3RzXG4gXG4mIzQzO2VjaG9cbiYjNDM7ZWNobyBcJiMzNDtVbmNhY2hlZCBJUHY2IHJvdXRlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXCYjMzQ7XG4mIzQzO3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaFxuJiM0MztcbiBwcmludGYgXCYjMzQ7XFxuVGVzdHMgcGFzc2VkOiAlM2RcXG5cJiMzNDsgJHtuc3VjY2Vzc31cbiBwcmludGYgXCYjMzQ7VGVzdHMgZmFpbGVkOiAlM2RcXG5cJiMzNDsgICAke25mYWlsfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7TkVUX1ZSRiYjMzQ7LAogICAgJiMzNDtORVRfTDNfTUFTVEVSX0RFViYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSVBMRV9UQUJMRVMmIzM0OywKICAgICYjMzQ7SVBfQURWQU5DRURfUk9VVEVSJiMzNDssCiAgICAmIzM0O0lQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfU0NIX05FVEVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRfYWRkX3VuY2FjaGVkX2xpc3QmIzM0OywKICAgICYjMzQ7cnRfZmx1c2hfZGV2JiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2FkZCYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9kZWwmIzM0OywKICAgICYjMzQ7cnQ2X2Rpc2FibGVfaXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3IgdHJhY2tpbmcgdW5jYWNoZWQgcm91dGVzIGluIGJvdGggSVB2NCBhbmQgSVB2NiBmcm9tIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB0byBhIHBlci1DUFUgaGFzaCB0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIGhvdyB1bmNhY2hlZCByb3V0ZXMgYXJlIGFkZGVkLCBkZWxldGVkLCBhbmQgZmx1c2hlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBUaGUgdGVzdCBzY3JpcHQgaW5kaWNhdGVzIHRoYXQgVlJGIGFuZCBORVRFTSBhcmUgdXNlZCB0byB0cmlnZ2VyIHNwZWNpZmljIGVkZ2UgY2FzZXMgKGxpa2UgbWlzbWF0Y2hlZCBkZXZpY2VzIGluIElQdjYpLCBzbyBlbmFibGluZyB0aG9zZSBjb25maWdzIGlzIGltcG9ydGFudCBmb3IgdGhvcm91Z2ggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRiZTRlN2FjNGI3Y2MxYmQyY2FjYzFiZmVmZGJiNjc4NDVlYmQwMzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAyMDoyNDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDYwNGNjNTFkZmQ5YmMuLjNmOWJjMWVjNzJjY2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtNzQsNiAmIzQzOzc0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW5ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWdtcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BrdF9zY2hlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21yb3V0ZS5oJmd0OwpAQCAtMTU1MiwxMSAmIzQzOzE1NTMsMjIgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQJaGVhZDsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydF91bmNhY2hlZF9saXN0KTsKJiM0MzsjZGVmaW5lIFJUX1VOQ0FDSEVEX0hBU0hfQklUUwk2CiYjNDM7I2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkUJQklUKFJUX1VOQ0FDSEVEX0hBU0hfQklUUykKJiM0MzsKJiM0MztzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgewomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUX1VOQ0FDSEVEX0hBU0hfU0laRV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTsKIAogdm9pZCBydF9hZGRfdW5jYWNoZWRfbGlzdChzdHJ1Y3QgcnRhYmxlICpydCkKIHsKLQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cigmYW1wO3J0X3VuY2FjaGVkX2xpc3QpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF90YWJsZSk7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKJiM0MzsKJiM0MzsJdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2hhc2hfcHRyKGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KSwKJiM0MzsJCQkJICAgICAgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07CiAKIAlydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDsKIApAQCAtMTU4OCwxNCAmIzQzOzE2MDAsMTggQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3Blcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIoZGV2LCBSVF9VTkNBQ0hFRF9IQVNIX0JJVFMpXTsKIAogCQlpZiAobGlzdF9lbXB0eSgmYW1wO3VsLSZndDtoZWFkKSkKIAkJCWNvbnRpbnVlOwogCiAJCXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKLQkJCWlmIChydC0mZ3Q7ZHN0LmRldiAhPSBkZXYpCiYjNDM7CQkJaWYgKGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KSAhPSBkZXYpCiAJCQkJY29udGludWU7CiAJCQlyY3VfYXNzaWduX3BvaW50ZXIocnQtJmd0O2RzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTsKIAkJCW5ldGRldl9yZWZfcmVwbGFjZShkZXYsIGJsYWNraG9sZV9uZXRkZXYsCkBAIC0zNzcxLDEwICYjNDM7Mzc4NywxNiBAQCBpbnQgX19pbml0IGlwX3J0X2luaXQodm9pZCkKIAlpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggJiM0MzsgKGlwX2lkZW50c19tYXNrICYjNDM7IDEpICogc2l6ZW9mKCppcF9pZGVudHMpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3Blcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlpbnQgYnVja2V0OwomIzQzOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0X3VuY2FjaGVkX3RhYmxlLCBjcHUpOwomIzQzOwkJZm9yIChidWNrZXQgPSAwOyBidWNrZXQgJmx0OyBSVF9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2J1Y2tldF07CiAKLQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7Ci0JCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwomIzQzOwkJCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJfQogCX0KICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCWlwX3J0X2FjY3QgPSBfX2FsbG9jX3BlcmNwdSgyNTYgKiBzaXplb2Yoc3RydWN0IGlwX3J0X2FjY3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfcnRfYWNjdCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggMTZkZmFjNTRhMjU5YS4uODYwNTMwMDc0MDI3YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC00MCw2ICYjNDM7NDAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbnNwcm94eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2poYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2lwaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRfbmFtZXNwYWNlLmgmZ3Q7CkBAIC0xMzMsMTEgJiM0MzsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQJaGVhZDsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7CiYjNDM7I2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9CSVRTCTYKJiM0MzsjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkUJQklUKFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpCiYjNDM7CiYjNDM7c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRV07CiYjNDM7CS8qIFJvdXRlcyB0aGF0IG11c3QgYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggdHdvIGRpZmZlcmVudCBkZXZpY2VzLiAqLwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7CiAKIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7Ci0Jc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCk7CiYjNDM7CXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldigmYW1wO3J0LSZndDtkc3QpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CWlmIChydC0mZ3Q7cnQ2aV9pZGV2ICZhbXA7JmFtcDsgcnQtJmd0O3J0NmlfaWRldi0mZ3Q7ZGV2ICE9IHJ0X2RldikKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2g7CiYjNDM7CWVsc2UKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihydF9kZXYsCiYjNDM7CQkJCQkgICAgICBSVDZfVU5DQUNIRURfSEFTSF9CSVRTKV07CiAKIAlydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDsKIApAQCAtMTU3LDQwICYjNDM7MTc1LDUwIEBAIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlOwomIzQzOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3VsLSZndDtoZWFkKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsICZhbXA7dWwtJmd0O2hlYWQsIGRzdC5ydF91bmNhY2hlZCkgewomIzQzOwkJc3RydWN0IGluZXQ2X2RldiAqcnRfaWRldiA9IHJ0LSZndDtydDZpX2lkZXY7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldigmYW1wO3J0LSZndDtkc3QpOwomIzQzOwkJYm9vbCBoYW5kbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CQlpZiAocnRfaWRldiAmYW1wOyZhbXA7IHJ0X2lkZXYtJmd0O2RldiA9PSBkZXYpIHsKJiM0MzsJCQlydC0mZ3Q7cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7CiYjNDM7CQkJaW42X2Rldl9wdXQocnRfaWRldik7CiYjNDM7CQkJaGFuZGxlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocnRfZGV2ID09IGRldikgewomIzQzOwkJCXJ0LSZndDtkc3QuZGV2ID0gYmxhY2tob2xlX25ldGRldjsKJiM0MzsJCQluZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LAomIzQzOwkJCQkJICAgJmFtcDtydC0mZ3Q7ZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKJiM0MzsJCQloYW5kbGVkID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChoYW5kbGVkKQomIzQzOwkJCWxpc3RfZGVsX2luaXQoJmFtcDtydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF9saXN0LCBjcHUpOwotCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTsKJiM0MzsJCXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsOwogCi0JCWlmIChsaXN0X2VtcHR5KCZhbXA7dWwtJmd0O2hlYWQpKQotCQkJY29udGludWU7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsICZhbXA7dWwtJmd0O2hlYWQsIGRzdC5ydF91bmNhY2hlZCkgewotCQkJc3RydWN0IGluZXQ2X2RldiAqcnRfaWRldiA9IHJ0LSZndDtydDZpX2lkZXY7Ci0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gcnQtJmd0O2RzdC5kZXY7Ci0JCQlib29sIGhhbmRsZWQgPSBmYWxzZTsKLQotCQkJaWYgKHJ0X2lkZXYgJmFtcDsmYW1wOyBydF9pZGV2LSZndDtkZXYgPT0gZGV2KSB7Ci0JCQkJcnQtJmd0O3J0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpOwotCQkJCWluNl9kZXZfcHV0KHJ0X2lkZXYpOwotCQkJCWhhbmRsZWQgPSB0cnVlOwotCQkJfQotCi0JCQlpZiAocnRfZGV2ID09IGRldikgewotCQkJCXJ0LSZndDtkc3QuZGV2ID0gYmxhY2tob2xlX25ldGRldjsKLQkJCQluZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LAotCQkJCQkJICAgJmFtcDtydC0mZ3Q7ZHN0LmRldl90cmFja2VyLAotCQkJCQkJICAgR0ZQX0FUT01JQyk7Ci0JCQkJaGFuZGxlZCA9IHRydWU7Ci0JCQl9Ci0JCQlpZiAoaGFuZGxlZCkKLQkJCQlsaXN0X2RlbF9pbml0KCZhbXA7cnQtJmd0O2RzdC5ydF91bmNhY2hlZCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpOwomIzQzOwkJdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2hhc2hfcHRyKGRldiwgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldOwomIzQzOwkJcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7CiYjNDM7CQlydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCgmYW1wO3RhYmxlLSZndDttaXNtYXRjaCwgZGV2KTsKIAl9CiB9CiAKQEAgLTY5ODIsMTAgJiM0Mzs3MDEwLDE4IEBAIGludCBfX2luaXQgaXA2X3JvdXRlX2luaXQodm9pZCkKICNlbmRpZgogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF9saXN0LCBjcHUpOwomIzQzOwkJc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlpbnQgYnVja2V0OwomIzQzOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCWZvciAoYnVja2V0ID0gMDsgYnVja2V0ICZsdDsgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0JiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbYnVja2V0XTsKIAotCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKLQkJc3Bpbl9sb2NrX2luaXQoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7CiYjNDM7CQkJc3Bpbl9sb2NrX2luaXQoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQl9CiYjNDM7CQlJTklUX0xJU1RfSEVBRCgmYW1wO3RhYmxlLSZndDttaXNtYXRjaC5oZWFkKTsKJiM0MzsJCXNwaW5fbG9ja19pbml0KCZhbXA7dGFibGUtJmd0O21pc21hdGNoLmxvY2spOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoCmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2gKQEAgLTM4NSw2ICYjNDM7Mzg1LDM3IEBAIHJ1bl90ZXN0cygpCiAJY2xlYW51cF94ZnJtX2RldgogfQogCiYjNDM7dGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHNlbmRlcl9waWQKJiM0MzsJbG9jYWwgYmFja2xvZwomIzQzOwlsb2NhbCByYwomIzQzOwomIzQzOwkjIEEgbG9jYWwgcm91dGUgdGhyb3VnaCBhIFZSRiB1c2VzIHRoZSBWUkYgYXMgZHN0LmRldiB3aGlsZSByZXRhaW5pbmcKJiM0MzsJIyB0aGUgVlJGIG1lbWJlciBpbnRlcmZhY2UgaW4gcnQ2aV9pZGV2LiBSYXcgaGVhZGVyIHNlbmRzIGNyZWF0ZSB1bmNhY2hlZAomIzQzOwkjIHJvdXRlcywgYW5kIG5ldGVtIGtlZXBzIHRoZW0gcmVmZXJlbmNlZCB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIGRlbGV0ZWQuCiYjNDM7CXJ1bl9jbWRfaG9zdDEgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHMKJiM0MzsJaXAgLTYgLW5ldG5zICYjMzQ7JGhvc3QxJiMzNDsgcm91dGUgYWRkIGxvY2FsICR7SE9TVDFfNn0vMTI4IGRldiBldGgwCiYjNDM7CWlwIG5ldG5zIGV4ZWMgJiMzNDskaG9zdDEmIzM0OyAuL21zZ196ZXJvY29weSAtNiBcCiYjNDM7CQktUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFwKJiM0MzsJCSZndDsvZGV2L251bGwgMiZndDsmYW1wOzEgJmFtcDsKJiM0MzsJc2VuZGVyX3BpZD0kIQomIzQzOwl3YWl0ICYjMzQ7JHNlbmRlcl9waWQmIzM0OwomIzQzOwlyYz0kPwomIzQzOwlsb2dfdGVzdCAkcmMgMCAmIzM0O0NyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlcyYjMzQ7CiYjNDM7CVsgJHJjIC1uZSAwIF0gJmFtcDsmYW1wOyByZXR1cm4KJiM0MzsKJiM0MzsJYmFja2xvZz0kKGlwIG5ldG5zIGV4ZWMgJiMzNDskaG9zdDEmIzM0OyB0YyAtcyBxZGlzYyBzaG93IGRldiAke1ZSRn0pCiYjNDM7CWlmICEgZWNobyAmIzM0OyRiYWNrbG9nJiMzNDsgfCBncmVwIC1FcSAmIzM5O2JhY2tsb2cgLiogWzEtOV1bMC05XSpwJiMzOTs7IHRoZW4KJiM0MzsJCWxvZ190ZXN0IDEgMCAmIzM0O1JldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2MmIzM0OwomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWxvZ190ZXN0IDAgMCAmIzM0O1JldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2MmIzM0OwomIzQzOwomIzQzOwlydW5fY21kX2hvc3QxIHRpbWVvdXQgMiBpcCBsaW5rIGRlbCBldGgwCiYjNDM7CWxvZ190ZXN0ICQ/IDAgJiMzNDtGbHVzaCB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlcyYjMzQ7CiYjNDM7fQomIzQzOwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgdXNhZ2UKIApAQCAtNDI1LDYgJiM0Mzs0NTYsMTAgQEAgZWNobwogZWNobyAmIzM0O25ldGVtIHFkaXNjIG9uIFZSRiBkZXZpY2UmIzM0OwogcnVuX3Rlc3RzCiAKJiM0MztlY2hvCiYjNDM7ZWNobyAmIzM0O1VuY2FjaGVkIElQdjYgcm91dGUgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzO3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaAomIzQzOwogcHJpbnRmICYjMzQ7XG5UZXN0cyBwYXNzZWQ6ICUzZFxuJiMzNDsgJHtuc3VjY2Vzc30KIHByaW50ZiAmIzM0O1Rlc3RzIGZhaWxlZDogJTNkXG4mIzM0OyAgICR7bmZhaWx9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3JlIFJvdXRpbmcgU3RhY2sgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiwgb3IgcG9zc2libHkgYSBidWcgZml4LCBpbiB0aGUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUuIEl0JiMzOTtzIHRhcmdldGluZyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgZ29hbCBpcyB0byBtb3ZlIGF3YXkgZnJvbSBwZXItQ1BVIGxpc3RzIGZvciB1bmNhY2hlZCByb3V0ZXMgYW5kIGluc3RlYWQgdXNlIGEgaGFzaCB0YWJsZS4gVGhhdCYjMzk7cyBhIGdvb2QgbW92ZTsgdGhlIGhhc2ggdGFibGUgc2hvdWxkIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHJvdXRlcyBvciBmcmVxdWVudCBkZXZpY2UgZGVsZXRpb25zLCBhcyB0aGlzIGFwcHJvYWNoIHdvdWxkIGltcHJvdmUgZmx1c2hpbmcgb2YgdW5jYWNoZWQgcm91dGVzIHdoZW4gYSBkZXZpY2UgaXMgZGVsZXRlZC4KClRoZSBjb21taXQgaW50cm9kdWNlcyBgcnRfdW5jYWNoZWRfdGFibGVgIGFuZCBgcnQ2X3VuY2FjaGVkX3RhYmxlYCwgd2hpY2ggYXJlIGVzc2VudGlhbGx5IGFycmF5cyBvZiBgdW5jYWNoZWRfbGlzdGAgYnVja2V0cy4gSW4gSVB2NiwgdGhleSYjMzk7dmUgYWxzbyBhZGRlZCBhIGBtaXNtYXRjaGAgbGlzdCwgd2hpY2ggSSYjMzk7bGwgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvLiBUaGF0JiMzOTtzIGxpa2VseSBmb3Igcm91dGVzIHRoYXQsIGZvciB3aGF0ZXZlciByZWFzb24sIG5lZWQgdG8gYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggbXVsdGlwbGUgaW50ZXJmYWNlcy4KCkkgc2VlIHRoYXQgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdW5jYWNoZWQgcm91dGUgbWFuYWdlbWVudCwgYXJlIGdldHRpbmcgbW9kaWZpZWQ6IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAsIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YC4KCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGZ1bmRhbWVudGFsIGhlcmUsIGl0JiMzOTtzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nLiBCdXQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBJIHNob3VsZCBkaWcgZGVlcGVyIHRvIGNvbnNpZGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGZvciB0ZXN0aW5nIGFuZCBlZGdlIGNhc2VzLiBUaGUgdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hgIHVzZXMgVlJGLCBuZXRlbSwgYW5kIHJhd19oZHJpbmNsLCBzbyBpdCYjMzk7cyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgYENPTkZJR19ORVRfVlJGYCBhbmQgYENPTkZJR19ORVRfU0NIX05FVEVNYCBhcmUgZGVmaW5pdGVseSB3b3J0aCBjb25zaWRlcmluZywgcGFydGljdWxhcmx5IHdoZW4gaXQgY29tZXMgdG8gdGVzdGluZyB0aGUgJiMzOTttaXNtYXRjaCYjMzk7IHNjZW5hcmlvIGluIElQdjYuIEkgc2hvdWxkIGFsc28gdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0X2FkZF91bmNhY2hlZF9saXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3JvdXRlLmg9MjcwPXZvaWQgZmliX21vZGlmeV9wcmVmaXhfbWV0cmljKHN0cnVjdCBpbl9pZmFkZHIgKmlmYSwgdTMyIG5ld19tZXRyaWMpO1xuaW5jbHVkZS9uZXQvcm91dGUuaC0yNzEtXG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI3Mjp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KTtcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMjczLXZvaWQgcnRfZGVsX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTUyMT1zdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLCBzdHJ1Y3QgcnRhYmxlICpydClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE1MzktXHRcdGlmIChvcmlnKSB7XG5uZXQvaXB2NC9yb3V0ZS5jOjE1NDA6XHRcdFx0cnRfYWRkX3VuY2FjaGVkX2xpc3Qob3JpZyk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE1NDEtXHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2b3JpZy1cdTAwM2Vkc3QpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU2Mz1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTU2NC1cbm5ldC9pcHY0L3JvdXRlLmM6MTU2NTp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxubmV0L2lwdjQvcm91dGUuYy0xNTY2LXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE2MzI9c3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE2NzctXHRcdFx0fVxubmV0L2lwdjQvcm91dGUuYzoxNjc4Olx0XHRcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTY3OS1cdFx0fVxubmV0L2lwdjQvcm91dGUuYy0xNjgwLVx0fSBlbHNlXG5uZXQvaXB2NC9yb3V0ZS5jOjE2ODE6XHRcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTY4Mi1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIzMDg9aXBfcm91dGVfaW5wdXRfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MDItXHRcdGlmICh1bmxpa2VseSghcnRfY2FjaGVfcm91dGUobmhjLCBydGgpKSlcbm5ldC9pcHY0L3JvdXRlLmM6MjUwMzpcdFx0XHRydF9hZGRfdW5jYWNoZWRfbGlzdChydGgpO1xubmV0L2lwdjQvcm91dGUuYy0yNTA0LVx0fVxuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jPTY2PXN0YXRpYyBpbnQgeGZybTRfZmlsbF9kc3Qoc3RydWN0IHhmcm1fZHN0ICp4ZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTkwLVx0eGRzdC1cdTAwM2V1LnJ0LnJ0X210dV9sb2NrZWQgPSBydC1cdTAwM2VydF9tdHVfbG9ja2VkO1xubmV0L2lwdjQveGZybTRfcG9saWN5LmM6OTE6XHRydF9hZGRfdW5jYWNoZWRfbGlzdChcdTAwMjZ4ZHN0LVx1MDAzZXUucnQpO1xubmV0L2lwdjQveGZybTRfcG9saWN5LmMtOTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0OAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGl0IHRvdWNoZXM6IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAsIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YC4gVGhlc2UgYXJlIGFsbCAqY29yZSogbmV0d29ya2luZyBmdW5jdGlvbnMuIE5vdGhpbmcgcGVyaXBoZXJhbCwgdGhlc2UgYXJlIGZ1bmRhbWVudGFsLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGFyZSBiZWluZyBtb2RpZmllZCByYWlzZXMgYSBmbGFnOyBpdCBtZWFucyB0aGVyZSYjMzk7cyBwb3RlbnRpYWxseSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiByb3V0aW5nLCBjYWNoaW5nLCBhbmQgZGV2aWNlIGZsdXNoaW5nLCBsaWtlbHkgYXQgYSBsb3cgbGV2ZWwuCgpUaGUgYWNjb21wYW55aW5nIHRlc3Qgc2NyaXB0IG1lbnRpb25zIFZSRiBhbmQgTkVURU0uIEludGVyZXN0aW5nLiBWUkYgbWVhbnMgVmlydHVhbCBSb3V0aW5nIGFuZCBGb3J3YXJkaW5nLCBhbmQgTkVURU0sIE5ldHdvcmsgRW11bGF0aW9uLCBjb3VsZCBtZWFuIHRoYXQgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB3b3JrIHdpdGggcm91dGluZyB3aXRoaW4gYSBzZWdtZW50ZWQgbmV0d29yayBlbnZpcm9ubWVudCBvciB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgdG8gc2ltdWxhdGUgbmV0d29yayBjb25kaXRpb25zIHN1Y2ggYXMgbGF0ZW5jeSwgcGFja2V0IGxvc3MsIG9yIGppdHRlciB0byB0ZXN0IHRoZSBjaGFuZ2VzIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGludmVzdGlnYXRlIHRoZSB1c2VzIG9mIHRob3NlIG9wdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgZWZmZWN0cy4KCkJlZm9yZSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgKmhvdyogdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBgcnRfZmx1c2hfZGV2YCBpcyBub3JtYWxseSBjYWxsZWQuIEl0JiMzOTtzIGEgc3RhbmRhcmQgaG91c2VrZWVwaW5nIGZ1bmN0aW9uLCBJIG5lZWQgdG8ga25vdyB0aGUgdHlwaWNhbCBleGVjdXRpb24gcGF0aHMgYmVmb3JlIEkgbG9vayBmb3IgYW55IG5ldyBvbmVzLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIHVudXN1YWwgY2FsbHMgb3IgY2FsbHMgZnJvbSBub24tc3RhbmRhcmQgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgcGF0Y2gmIzM5O3MgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydF9mbHVzaF9kZXYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcm91dGUuaD0xMzE9dm9pZCBydF9jYWNoZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQpO1xuaW5jbHVkZS9uZXQvcm91dGUuaDoxMzI6dm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL25ldC9yb3V0ZS5oLTEzMy1cbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNTA2PXN0YXRpYyBpbnQgZmliX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE3LVx0XHRmaWJfZGlzYWJsZV9pcChkZXYsIGV2ZW50LCB0cnVlKTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MTg6XHRcdHJ0X2ZsdXNoX2RldihkZXYpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUxOS1cdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU5MT1zdGF0aWMgdm9pZCBpcHY0X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTYtXG5uZXQvaXB2NC9yb3V0ZS5jOjE1OTc6dm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L3JvdXRlLmMtMTU5OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqRmx1c2hpbmcgdGhlIFJvdXRpbmcgVGFibGVzIFVwb24gRGV2aWNlIFVucmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgcm91dGluZyB0YWJsZXMgYXJlIGhhbmRsZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gYHJ0X2ZsdXNoX2RldmAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSwgYW5kIEkgc2VlIGl0IGdldHMgdHJpZ2dlcmVkIGZyb20gYGZpYl9uZXRkZXZfZXZlbnRgIHNwZWNpZmljYWxseSB3aGVuIGEgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudCBvY2N1cnMuIFRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0OyB3ZSBuZWVkIHRvIGNsZWFyIG91dCBhbnkgcm91dGluZyBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBhIGRldmljZSB3aGVuIGl0JiMzOTtzIGdvaW5nIGF3YXkuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZW4gSSBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NiB3aGljaCBpcyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCB3aGljaCBhbHNvIGRlYWxzIHdpdGggdGhlIG5ldGRldiBldmVudHMsIHdoaWNoIGxpa2VseSBoYW5kbGVzIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgY2xlYW4gdXAuIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5IHRvIGVuc3VyZSB0aGlzIGlzIGFzIGludGVuZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jPTE3OD1zdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yMDktXG5uZXQvaXB2Ni9yb3V0ZS5jOjIxMDpzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY2L3JvdXRlLmMtMjExLXtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTUwNzE9dm9pZCBydDZfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTA3My1cdHJ0Nl9zeW5jX2Rvd25fZGV2KGRldiwgZXZlbnQpO1xubmV0L2lwdjYvcm91dGUuYzo1MDc0Olx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KGRldik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzUtXHRuZWlnaF9pZmRvd24oXHUwMDI2bmRfdGJsLCBkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgdGhpcyBsb29rcyBwcm9taXNpbmcsIGRlZmluaXRlbHkgd29ydGggYSBmdXp6aW5nIHJ1bi4gTGV0JiMzOTtzIHNlZS4uLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHRvIHRhcmdldC4gUmlnaHQsIHRoZSBvbmVzIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFyZSBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIEhtbSwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgZGVjbGFyZWQgYXMgc3RhdGljOyB0eXBpY2FsbHksIHRob3NlIGFyZSBpbmxpbmVkLiBIb3dldmVyLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnQ2X2Rpc2FibGVfaXBgLCB3aGljaCBpcyBnbG9iYWwgYW5kIGV4cG9ydGVkLCBzbyBtYXliZSB0aGF0JiMzOTtzIGEgZ29vZCBlbnRyeSBwb2ludC4gSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgaGF2ZSBhIGxvb2sgYXQgYHJ0Nl9kaXNhYmxlX2lwYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0Nl9kaXNhYmxlX2lwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTIyNz12b2lkIHJ0Nl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgbmhfZmxhZ3MpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjI4OnZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMjktdm9pZCBydDZfc3luY19kb3duX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzY9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzg4OC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg4OTpcdHJ0Nl9kaXNhYmxlX2lwKGRldiwgZXZlbnQpO1xubmV0L2lwdjYvYWRkcmNvbmYuYy0zODkwLVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MzM2Mz1zdHJ1Y3QgZHN0X2VudHJ5ICppY21wNl9kc3RfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzODgtXG5uZXQvaXB2Ni9yb3V0ZS5jOjMzODk6XHQvKiBBZGQgdGhpcyBkc3QgaW50byB1bmNhY2hlZF9saXN0IHNvIHRoYXQgcnQ2X2Rpc2FibGVfaXAoKSBjYW5cbm5ldC9pcHY2L3JvdXRlLmMtMzM5MC1cdCAqIGRvIHByb3BlciByZWxlYXNlIG9mIHRoZSBuZXRfZGV2aWNlXG4tLVxubmV0L2lwdjYvcm91dGUuYz01MDU1PXZvaWQgcnQ2X3N5bmNfZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzAtXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzE6dm9pZCBydDZfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxubmV0L2lwdjYvcm91dGUuYy01MDcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEdsb2JhbCBWYXJpYWJsZXMgYW5kIEV4cG9ydGVkIFN5bWJvbHMqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gc29tZSBrZXkgc3ltYm9scyBoZXJlLiBgcnQ2X2Rpc2FibGVfaXBgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBJJiMzOTttIGFsc28gbm90aW5nIHRoYXQgYHJ0X2ZsdXNoX2RldmAsIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgYXJlIGFsbCBnbG9iYWwuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IGdsb2JhbHMgb2Z0ZW4gcmVwcmVzZW50IHNoYXJlZCBzdGF0ZSBvciBjcml0aWNhbCBmdW5jdGlvbmFsaXRpZXMuIE15IG5leHQgdGhvdWdodCBpcyB0byBzcGVjaWZpY2FsbHkgY29uZmlybSBpZiBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBLbm93aW5nIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYWNjZXNzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9uIHdpdGggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIG15IG5leHQgc3RlcHMgaW4gdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnJ0X2FkZF91bmNhY2hlZF9saXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI1OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRm9jdXNpbmcgb24gTm9uLVN0YXRpYyBGdW5jdGlvbiBEZXNpZ24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSByZWFsaXppbmcgaXQgZG9lc24mIzM5O3QgKm5lY2Vzc2FyaWx5KiBoYXZlIHRvIGJlIGV4cG9ydGVkIHRvIGEgbW9kdWxlIGluIHRoZSBzdHJpY3Qgc2Vuc2UuIFRoZSBjcml0aWNhbCBhc3BlY3QgaXMgc2ltcGx5IHRoYXQgaXQgbmVlZHMgdG8gYmUgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyB0aGUgY29yZSByZXF1aXJlbWVudC4gV2UmIzM5O3JlIGFpbWluZyBmb3IgYSBjZXJ0YWluIGxldmVsIG9mIHZpc2liaWxpdHkgb3IgYWNjZXNzLCBub3QgbmVjZXNzYXJpbHkgbW9kdWxhcml0eSBmb3IgaXRzIG93biBzYWtlLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aXNpdCB0aGF0IGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIGl0cyBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBjb25zaWRlciBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBkZXNpZ24gZ29hbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2FkZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0yMzA9dm9pZCBydDZfbXVsdGlwYXRoX3JlYmFsYW5jZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjMxLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjMyOnZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjMzLXZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MTQ2PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTE0Ny1cbm5ldC9pcHY2L3JvdXRlLmM6MTQ4OnZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXG5uZXQvaXB2Ni9yb3V0ZS5jLTE0OS17XG4tLVxubmV0L2lwdjYvcm91dGUuYz0yMzAxPXN0cnVjdCBydDZfaW5mbyAqaXA2X3BvbF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDItXHRcdFx0LyogMSByZWZjbnQgaXMgdGFrZW4gZHVyaW5nIGlwNl9ydF9jYWNoZV9hbGxvYygpLlxubmV0L2lwdjYvcm91dGUuYzoyMzQzOlx0XHRcdCAqIEFzIHJ0Nl91bmNhY2hlZF9saXN0X2FkZCgpIGRvZXMgbm90IGNvbnN1bWUgcmVmY250LFxubmV0L2lwdjYvcm91dGUuYy0yMzQ0LVx0XHRcdCAqIHRoaXMgcmVmY250IGlzIGFsd2F5cyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGV2ZW5cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDYtXHRcdFx0ICovXG5uZXQvaXB2Ni9yb3V0ZS5jOjIzNDc6XHRcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHJ0KTtcbm5ldC9pcHY2L3JvdXRlLmMtMjM0OC1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzNjM9c3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0zMzkxLVx0ICovXG5uZXQvaXB2Ni9yb3V0ZS5jOjMzOTI6XHRydDZfdW5jYWNoZWRfbGlzdF9hZGQocnQpO1xubmV0L2lwdjYvcm91dGUuYy0zMzkzLVxuLS1cbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTgwPXN0YXRpYyBpbnQgeGZybTZfZmlsbF9kc3Qoc3RydWN0IHhmcm1fZHN0ICp4ZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEwMi1cdHhkc3QtXHUwMDNldS5ydDYucnQ2aV9zcmMgPSBydC1cdTAwM2VydDZpX3NyYztcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jOjEwMzpcdHJ0Nl91bmNhY2hlZF9saXN0X2FkZChcdTAwMjZ4ZHN0LVx1MDAzZXUucnQ2KTtcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEwNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgYXJlIGdsb2JhbCBmdW5jdGlvbnMg4oCTIHRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBwb3RlbnRpYWwgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRob3NlIGFyZSBiZWluZyBjYWxsZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkZWZpbmVkIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHNlZWluZyBgTkVUX1ZSRmAsIGBORVRfU0NIX05FVEVNYCwgYElORVRgLCBhbmQgYElQVjZgLiBJbnRlcmVzdGluZywgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQ/IENvbnRleHQgaXMga2luZyBoZXJlIQoKVGhlIHRlc3Qgc2NyaXB0IHVzZXMgYHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzYC4gQWgsIGBORVRfU0NIX05FVEVNYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGdpdmVuIHRoZSBgbmV0ZW1gIGNvbW1hbmQgYmVpbmcgdXNlZDsgdGhhdCBvbmUgaXMgb2J2aW91cywgbm93LiBBbmQgb2YgY291cnNlLCBgTkVUX1ZSRmAgaXMgcmVsZXZhbnQsIGdpdmVuIHRoYXQgaXQmIzM5O3MgdXNpbmcgdGhlIHZpcnR1YWwgcm91dGluZyBhbmQgZm9yd2FyZGluZyBjb250ZXh0LgoKSSB0aGluayBpdCYjMzk7cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgYE5FVF9WUkZgIGFuZCBgTkVUX1NDSF9ORVRFTWAgdG8gbG9vayBhdCB0aGUgS2NvbmZpZywganVzdCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBJJiMzOTttIG1pc3NpbmcuIEFsd2F5cyBwYXlzIHRvIGJlIHRob3JvdWdoIHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZSRiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQ2Mz1jb25maWcgTkVUS0lUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ3Mjpjb25maWcgTkVUX1ZSRlxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzMtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfTkVURU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTg0PWNvbmZpZyBORVRfU0NIX0dSRURcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0xOTQtXG5uZXQvc2NoZWQvS2NvbmZpZzoxOTU6Y29uZmlnIE5FVF9TQ0hfTkVURU1cbm5ldC9zY2hlZC9LY29uZmlnLTE5Ni1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgZW11bGF0b3IgKE5FVEVNKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgTkVUX1ZSRiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgTkVUX1ZSRmAgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpczogYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gQXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb24gZWxlbWVudHMsIHBhcmFtZXRlcnMsIG9yIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYWNjb3VudCBmb3IgYmV5b25kIHdoYXQgSSYjMzk7dmUgYWxyZWFkeSBjb25zaWRlcmVkPyBJJiMzOTttIHRoaW5raW5nIGJleW9uZCB0aGUgb2J2aW91cywgdGhlIHRoaW5ncyBJJiMzOTt2ZSBsaWtlbHkgYWxyZWFkeSBjaGVja2VkIG11bHRpcGxlIHRpbWVzLiBBcmUgdGhlcmUgc3VidGxlIGludGVyYWN0aW9ucywgb2JzY3VyZSBmbGFncywgb3IgcGxhdGZvcm0tc3BlY2lmaWMgbnVhbmNlcyB0aGF0IGNvdWxkIGJpdGUgbWUgbGF0ZXI/IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSB3YW50IHRvIGVuc3VyZSB0aGlzIGVudGlyZSB2aXJ0dWFsIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgc2V0dXAgaXMgdHJ1bHkgY29tcGxldGUgYW5kIHJvYnVzdC4gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgSSYjMzk7bSBvdmVybG9va2luZyB0aGF0IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBkb3duIHRoZSBsaW5lIC0gSSYjMzk7bSBhbHJlYWR5IGVudmlzaW9uaW5nIHBvdGVudGlhbCB0cm91Ymxlc2hvb3Rpbmcgc2NlbmFyaW9zLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIGhhdmUgdG8gZXhoYXVzdGl2ZWx5IHRoaW5rIHRocm91Z2ggaWYgSSBoYXZlIGFjY291bnRlZCBmb3IgZXZlcnl0aGluZywgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGVsc2UgSSBoYXZlIHRvIHRoaW5rIGFib3V0LiBUaGF0JiMzOTtzIG15IGltbWVkaWF0ZSBmb2N1cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcyOlx0Y29uZmlnIE5FVF9WUkZcbiA0NzM6XHRcdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgUm91dGluZyBhbmQgRm9yd2FyZGluZyAoTGl0ZSlcJiMzNDtcbiA0NzQ6XHRcdGRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTXG4gNDc1Olx0XHRkZXBlbmRzIG9uIE5FVF9MM19NQVNURVJfREVWXG4gNDc2Olx0XHRkZXBlbmRzIG9uIElQVjZfTVVMVElQTEVfVEFCTEVTIHx8IElQVjY9blxuIDQ3NzpcdFx0aGVscFxuIDQ3ODpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciBtYXBwaW5nIGludGVyZmFjZXMgaW50byBWUkYmIzM5O3MuIFRoZVxuIDQ3OTpcdFx0ICBzdXBwb3J0IGVuYWJsZXMgVlJGIGRldmljZXMuXG4gNDgwOlx0XG4gNDgxOlx0Y29uZmlnIFZTT0NLTU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjIyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSYjMzk7dmUgcmVxdWVzdGVkOgoKKipOZXR3b3JrIFJvdXRpbmcgVGFibGUgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgc29tZSBjcml0aWNhbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhyZWUga2V5IGZsYWdzOiBgSVBfTVVMVElQTEVfVEFCTEVTYCwgYE5FVF9MM19NQVNURVJfREVWYCwgYW5kIGBJUFY2X01VTFRJUExFX1RBQkxFU2AuIFRoZXNlIGFyZSBhbGwgaGlnaGx5IHJlbGV2YW50IHRvIGhvdyBhIHN5c3RlbSBoYW5kbGVzIHJvdXRpbmcgaW5mb3JtYXRpb24gYW5kIHRoZSB1c2Ugb2YgbXVsdGlwbGUgcm91dGluZyB0YWJsZXMuIFdpdGggYElQX01VTFRJUExFX1RBQkxFU2AsIEkmIzM5O20gZW52aXNpb25pbmcgdGhlIHNldHVwIG9mIG11bHRpcGxlIHJvdXRpbmcgdGFibGVzIGZvciBJUHY0LiBUaGVuIGBJUFY2X01VTFRJUExFX1RBQkxFU2AgY29tZXMgaW50byBwbGF5IGFuZCBkZWFscyB3aXRoIHRoZSBzaW1pbGFyIHNldHVwIGZvciBJUHY2LCBhbGxvd2luZyBmb3IgbW9yZSBjb21wbGV4IHJvdXRpbmcgZGVjaXNpb25zIGJhc2VkIG9uIHBvbGljeSBvciBvdGhlciBjcml0ZXJpYS4gRmluYWxseSBgTkVUX0wzX01BU1RFUl9ERVZgIC0gdGhpcyBmbGFnIG1ha2VzIG1lIHRoaW5rIGFib3V0IGEgbWFzdGVyIG5ldHdvcmsgZGV2aWNlIGNvbnRyb2xsaW5nIGxheWVyIDMgcm91dGluZyBkZWNpc2lvbnMsIHdoaWNoIGNvdWxkIGJlIGV4dHJlbWVseSB1c2VmdWwgaW4gbWFueSBlbnZpcm9ubWVudHMuIEkgYW0gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHNjZW5hcmlvcyBpbiBteSBoZWFkLCB0aGlua2luZyBhYm91dCBwb2xpY3kgcm91dGluZywgVlJGLCBhbmQgaXNvbGF0aW9uLiBJdCYjMzk7cyByZWFsbHkgdGhlIGJhc2lzIGZvciBhbGwgc29ydHMgb2YgaW50ZXJlc3RpbmcgYXJjaGl0ZWN0dXJlcy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgSSBjYW4gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBhbmQgaG93IHRoZXkgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfTDNfTUFTVEVSX0RFViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbDNtZGV2L0tjb25maWctNS1cbm5ldC9sM21kZXYvS2NvbmZpZzo2OmNvbmZpZyBORVRfTDNfTUFTVEVSX0RFVlxubmV0L2wzbWRldi9LY29uZmlnLTctXHRib29sIFwmIzM0O0wzIE1hc3RlciBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2wzbWRldi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICA2Olx0Y29uZmlnIE5FVF9MM19NQVNURVJfREVWXG4gICA3Olx0XHRib29sIFwmIzM0O0wzIE1hc3RlciBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUIHx8IElQVjZcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgZ2x1ZSBiZXR3ZWVuIGNvcmUgbmV0d29ya2luZyBjb2RlIGFuZCBkZXZpY2VcbiAgMTE6XHRcdCAgZHJpdmVycyB0byBzdXBwb3J0IEwzIG1hc3RlciBkZXZpY2VzIGxpa2UgVlJGLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczOAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nOgoKKipFeGFtaW5pbmcgTmV0d29yayBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXR3b3JrIHNldHVwIGFuZCBpdCYjMzk7cyBiZWNvbWluZyBjbGVhciB3aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlLiBGaXJzdCBhbmQgZm9yZW1vc3QsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0aGUgYE5FVF9MM19NQVNURVJfREVWYCBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIG5vbi1uZWdvdGlhYmxlIGZvciBob3cgdGhpcyBzeXN0ZW0gaXMgYXJjaGl0ZWN0ZWQsIEkgY2FuIHNlZSB0aGF0LiBCZXlvbmQgdGhhdCwgYW5kIHRvIGFsbG93IGZvciBwcm9wZXIgcm91dGluZyBhbmQgdHJhZmZpYyBtYW5hZ2VtZW50LCBJJiMzOTtsbCBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGBJUF9NVUxUSVBMRV9UQUJMRVNgIGFuZCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLiBNdWx0aXBsZSByb3V0aW5nIHRhYmxlcyB3aWxsIHByb3ZpZGUgdGhlIGZsZXhpYmlsaXR5IHRoaXMgZGVtYW5kcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX01VTFRJUExFX1RBQkxFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTU2PWNvbmZpZyBJUF9GSUJfVFJJRV9TVEFUU1xuLS1cbm5ldC9pcHY0L0tjb25maWctNjItXG5uZXQvaXB2NC9LY29uZmlnOjYzOmNvbmZpZyBJUF9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctNjQtXHRib29sIFwmIzM0O0lQOiBwb2xpY3kgcm91dGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjM6XHRjb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXG4gIDY0Olx0XHRib29sIFwmIzM0O0lQOiBwb2xpY3kgcm91dGluZ1wmIzM0O1xuICA2NTpcdFx0ZGVwZW5kcyBvbiBJUF9BRFZBTkNFRF9ST1VURVJcbiAgNjY6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAgNjc6XHRcdGhlbHBcbiAgNjg6XHRcdCAgTm9ybWFsbHksIGEgcm91dGVyIGRlY2lkZXMgd2hhdCB0byBkbyB3aXRoIGEgcmVjZWl2ZWQgcGFja2V0IGJhc2VkXG4gIDY5Olx0XHQgIHNvbGVseSBvbiB0aGUgcGFja2V0JiMzOTtzIGZpbmFsIGRlc3RpbmF0aW9uIGFkZHJlc3MuIElmIHlvdSBzYXkgWSBoZXJlLFxuICA3MDpcdFx0ICB0aGUgTGludXggcm91dGVyIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgdGhlIHBhY2tldCYjMzk7cyBzb3VyY2VcbiAgNzE6XHRcdCAgYWRkcmVzcyBpbnRvIGFjY291bnQuIEZ1cnRoZXJtb3JlLCB0aGUgVE9TIChUeXBlLU9mLVNlcnZpY2UpIGZpZWxkXG4gIDcyOlx0XHQgIG9mIHRoZSBwYWNrZXQgY2FuIGJlIHVzZWQgZm9yIHJvdXRpbmcgZGVjaXNpb25zIGFzIHdlbGwuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjMzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0OgoKKipGb2N1c2luZyBJbjogVGhlIE5lZWQgZm9yIGBJUF9BRFZBTkNFRF9ST1VURVJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjdXQgdG8gdGhlIGNoYXNlLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyBwcmV0dHkgY2xlYXI6IFdlJiMzOTtyZSBhdCBhIHBvaW50IHdoZXJlIHRoZSBzdGFuZGFyZCwgb3V0LW9mLXRoZS1ib3ggSVAgcm91dGluZyBzZXR1cCBqdXN0IHdvbiYjMzk7dCBjdXQgaXQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc2l0dWF0aW9uLCBhIGRlc2lnbiwgb3IgYSBzZXQgb2YgcmVxdWlyZW1lbnRzIHRoYXQgZGVtYW5kcyBtb3JlIGdyYW51bGFyIGNvbnRyb2wsIG1vcmUgc29waGlzdGljYXRlZCBmZWF0dXJlIHNldHMsIGFuZCBwcm9iYWJseSBtb3JlIHJvYnVzdCBwZXJmb3JtYW5jZSB0aGFuIGEgYmFzaWMgcm91dGVyIGNhbiBwcm92aWRlLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBzaW1wbGUgY29ubmVjdGl2aXR5OyBpdCYjMzk7cyBhYm91dCBhZHZhbmNlZCByb3V0aW5nIHByb3RvY29scywgdHJhZmZpYyBlbmdpbmVlcmluZywgcGVyaGFwcyBldmVuIG5ldHdvcmsgYXV0b21hdGlvbiBhbmQgcHJvZ3JhbW1hYmlsaXR5LiBUaGUgdmVyeSBmYWN0IHRoYXQgYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgdGhlIGZvY3VzLCBzYXlzIHNvbWV0aGluZyBhYm91dCB0aGUgY29tcGxleGl0eSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBJdCBjb3VsZCBiZSBzY2FsZSwgc2VjdXJpdHksIG9yIGEgbWl4IG9mIGJvdGggdGhhdCBpcyBwdXNoaW5nIHVzIGluIHRoYXQgZGlyZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfQURWQU5DRURfUk9VVEVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NT1jb25maWcgSVBfTVVMVElDQVNUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNC1cbm5ldC9pcHY0L0tjb25maWc6MTU6Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxubmV0L2lwdjQvS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7SVA6IGFkdmFuY2VkIHJvdXRlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU1MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHRjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXG4gIDE2Olx0XHRib29sIFwmIzM0O0lQOiBhZHZhbmNlZCByb3V0ZXJcJiMzNDtcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgSWYgeW91IGludGVuZCB0byBydW4geW91ciBMaW51eCBib3ggbW9zdGx5IGFzIGEgcm91dGVyLCBpLmUuIGFzIGFcbiAgMTk6XHRcdCAgY29tcHV0ZXIgdGhhdCBmb3J3YXJkcyBhbmQgcmVkaXN0cmlidXRlcyBuZXR3b3JrIHBhY2tldHMsIHNheSBZOyB5b3VcbiAgMjA6XHRcdCAgd2lsbCB0aGVuIGJlIHByZXNlbnRlZCB3aXRoIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFsbG93IG1vcmUgcHJlY2lzZVxuICAyMTpcdFx0ICBjb250cm9sIGFib3V0IHRoZSByb3V0aW5nIHByb2Nlc3MuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZSBrZXJuZWw6XG4gIDI0Olx0XHQgIGFuc3dlcmluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdHdvOgoKKipQcmVsaW1pbmFyeSBBc3Nlc3NtZW50IG9mIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBJUF9BRFZBTkNFRF9ST1VURVJgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0IHNlZW1zLiBObyByZWFsIGRlcGVuZGVuY2llcyBJIGNhbiBpbW1lZGlhdGVseSBpZGVudGlmeS4gSXQgc2hvdWxkIGJlIHByZXR0eSBlYXN5IHRvIHdvcmsgd2l0aCBpbiBpc29sYXRpb24sIHdoaWNoIGlzIGFsd2F5cyBuaWNlLgoKTm93LCB3aGF0IGFib3V0IHRoYXQgYElQVjZfTVVMVElQTEVfVEFCTEVTYCBvcHRpb24/IE5lZWQgdG8gZ2l2ZSB0aGF0IG9uZSBhIGJpdCBtb3JlIHRob3VnaHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBhbmQgc2VlIGlmIGl0IGhpbmdlcyBvbiBhbnl0aGluZyBlbHNlIGluIHRoZSBzdGFjay4gUHJvYmFibHkgd29ydGggY3Jvc3MtcmVmZXJlbmNpbmcgdGhhdCB3aXRoIG90aGVyIGZlYXR1cmVzLiBHb3R0YSBtYWtlIHN1cmUgaXQgZG9lc24mIzM5O3QgY3JlYXRlIGFueSB1bmV4cGVjdGVkIGNvbmZsaWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MjMyPWNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yMzgtXHRib29sIFwmIzM0O0lQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzc6XHRjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbiAyMzg6XHRcdGJvb2wgXCYjMzQ7SVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcJiMzNDtcbiAyMzk6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyNDA6XHRcdGhlbHBcbiAyNDE6XHRcdCAgU3VwcG9ydCBtdWx0aXBsZSByb3V0aW5nIHRhYmxlcy5cbiAyNDI6XHRcbiAyNDM6XHRjb25maWcgSVBWNl9TVUJUUkVFU1xuIDI0NDpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4gMjQ1Olx0XHRkZXBlbmRzIG9uIElQVjZfTVVMVElQTEVfVEFCTEVTXG4gMjQ2Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgc28gYElQVjZfTVVMVElQTEVfVEFCTEVTYCBhcHBlYXJzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgbm8gZ290Y2hhcyB0aGVyZSwgbm8gaGlkZGVuIGRlcGVuZGVuY2llcyB0byB0cmlwIG1lIHVwLiBUaGF0JiMzOTtzIGdvb2QsIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGggb24gdGhhdCBvbmUuIE5vdywgbGV0JiMzOTtzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgTkVUX1NDSF9ORVRFTWAuIEkgd2FudCB0byBkaWcgaW50byB0aGF0IG9uZSBhIGJpdCBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NTpcdGNvbmZpZyBORVRfU0NIX05FVEVNXG4gMTk2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGVtdWxhdG9yIChORVRFTSlcJiMzNDtcbiAxOTc6XHRcdGhlbHBcbiAxOTg6XHRcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW11bGF0ZSBuZXR3b3JrIGRlbGF5LCBsb3NzLCBhbmQgcGFja2V0XG4gMTk5Olx0XHQgIHJlLW9yZGVyaW5nLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB0byBzaW11bGF0ZSBuZXR3b3JrcyB3aGVuXG4gMjAwOlx0XHQgIHRlc3RpbmcgYXBwbGljYXRpb25zIG9yIHByb3RvY29scy5cbiAyMDE6XHRcbiAyMDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDIwMzpcdFx0ICB3aWxsIGJlIGNhbGxlZCBzY2hfbmV0ZW0uXG4gMjA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTM3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFNjaGVkdWxpbmcgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIG9yIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBhbGwgaGluZ2VzIG9uIGBORVRfU0NIRURgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0JiMzOTtzIHRoZSBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgYW5kL29yIGZhaXIgcXVldWVpbmcgbWVudSwgd2hpY2ggbWVhbnMgKmV2ZXJ5dGhpbmcqIHJlbGF0ZWQgdG8gaG93IG5ldHdvcmsgdHJhZmZpYyBnZXRzIHByaW9yaXRpemVkIGFuZCBoYW5kbGVkIGlzIGltcGFjdGVkIGJ5IHRoaXMuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHBvdGVudGlhbGx5IGh1Z2UsIGRlcGVuZGluZyBvbiB3aGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2l0aGluIGBORVRfU0NIRURgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGF0JiMzOTtzICp1c2luZyogYE5FVF9TQ0hFRGAgdG8gZGV0ZXJtaW5lIGl0cyBpbXBhY3QuIEl0IGFmZmVjdHMgcGVyZm9ybWFuY2UgYW5kIHdoaWNoIGFwcHMvZGF0YSBoYXZlIHByaW9yaXR5IG92ZXIgb3RoZXJzLiBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU0NIRUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDY6XHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBORVRfU0NIX0ZJRk9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmtcbiAgMTE6XHRcdCAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0b1xuICAxMjpcdFx0ICBkZWxheSwgYW5kIHdoaWNoIG9uZXMgdG8gZHJvcC4gVGhpcyBpcyB0aGUgam9iIG9mIHRoZSBxdWV1ZWluZ1xuICAxMzpcdFx0ICBkaXNjaXBsaW5lcywgc2V2ZXJhbCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBmb3IgaG93IHRvIGRvIHRoaXNcbiAgMTQ6XHRcdCAgXCYjMzQ7ZmFpcmx5XCYjMzQ7IGhhdmUgYmVlbiBwcm9wb3NlZC5cbiAgMTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0d29yayBDb25maWd1cmF0aW9uIGFuZCBSb3V0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgc2NoZWR1bGluZyBhc3BlY3RzLCBoZW5jZSB0aGUgbmVlZCBmb3IgYE5FVF9TQ0hFRGAuIE5vdywgbGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTttIHdvcmtpbmcgd2l0aDogYElORVRgLCBgSVBWNmAsIGBORVRfVlJGYCwgYE5FVF9MM19NQVNURVJfREVWYCwgYElQX01VTFRJUExFX1RBQkxFU2AsIGBJUF9BRFZBTkNFRF9ST1VURVJgLCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLCBgTkVUX1NDSEVEYCwgYW5kIGBORVRfU0NIX05FVEVNYC4gVGhpcyBnaXZlcyBtZSB0aGUgYnJvYWQgcGljdHVyZS4KCk15IG1haW4gYXJlYSBvZiBjb25jZXJuIGFyZSB0aGVzZSBrZXkgc3ltYm9sczogYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCwgYW5kLCBpbXBvcnRhbnRseSwgYHJ0Nl9kaXNhYmxlX2lwYC4gSeKAmW0gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIG1hbmFnZW1lbnQuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgcnQ2X2Rpc2FibGVfaXBgIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLiBZZXMsIHRoYXQmIzM5O3MgcmlnaHQuIGBydDZfZGlzYWJsZV9pcGAgY2FsbHMgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAsIHdoaWNoIGlzIHByZWNpc2VseSB0aGUgYmVoYXZpb3IgSSBleHBlY3QuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBydF9mbHVzaF9kZXZgLiBBaCwgSSB0aG91Z2h0IEkgc2F3IHNvbWV0aGluZy4uLiBgaXB2NF9kc3RfZGVzdHJveWAuLi4gbm8sIHdhaXQsIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBMZXQgbWUgcmUtZXhhbWluZSB0aGUgY2FsbGVycyBvZiBgcnRfZmx1c2hfZGV2YC4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNydWNpYWwgZGVwZW5kZW5jeSBvciBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRfZmx1c2hfZGV2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3JvdXRlLmg9MTMxPXZvaWQgcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0KTtcbmluY2x1ZGUvbmV0L3JvdXRlLmg6MTMyOnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9uZXQvcm91dGUuaC0xMzMtXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUxNy1cdFx0ZmliX2Rpc2FibGVfaXAoZGV2LCBldmVudCwgdHJ1ZSk7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYzoxNTE4Olx0XHRydF9mbHVzaF9kZXYoZGV2KTtcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MTktXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE1OTE9c3RhdGljIHZvaWQgaXB2NF9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTk2LVxubmV0L2lwdjQvcm91dGUuYzoxNTk3OnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg4NAoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiA1NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdW5jYWNoZWQgcm91dGVzLiBJIHNlZSBgcnRfZmx1c2hfZGV2YCBiZWluZyBjYWxsZWQgYnkgYGZpYl9uZXRkZXZfZXZlbnRgLCB3aGljaCBpcyBhIG5vdGlmaWVyLiBUaGF0JiMzOTtzIGZpbmUsIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCBBUEkgZW50cnlwb2ludCBhbmQgYGZpYl9uZXRkZXZfZXZlbnRgIGlzIHRoZSBvbmx5IGNhbGxlciBvZiBgcnRfZmx1c2hfZGV2YCwgc28gd2UmIzM5O3JlIGdvb2QgdG8gaW5jbHVkZSBpdC4gU2ltaWxhcmx5LCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpcyB1c2VkIGluIGtleSBwbGFjZXMgbGlrZSBgaXA2X3BvbF9yb3V0ZWAsIGBpY21wNl9kc3RfYWxsb2NgLCBhbmQgYHhmcm02X2ZpbGxfZHN0YCBhbmQgYHJ0X2FkZF91bmNhY2hlZF9saXN0YCBpcyB1c2VkIGluIGEgc2ltaWxhciBzZXQgb2YgZ29vZCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBjb3JlIGNoYW5nZS4gVGhlIHBhdGNoIHNoaWZ0cyBmcm9tIGEgc2ltcGxlIHBlci1DUFUgbGlzdCB0byBhIHBlci1DUFUgaGFzaCB0YWJsZSBvZiBsaXN0cy4gSVB2NiBnZXRzIGFuIGV4dHJhIGBtaXNtYXRjaGAgbGlzdCB0aHJvd24gaW4uIFRoYXQgbWVhbnMgdGhlIGxvZ2ljIGluIGZ1bmN0aW9ucyBsaWtlIGBydF9mbHVzaF9kZXZgIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBhcmUgZ29pbmcgdG8gYmUgcmV3cml0dGVuIHRvIGl0ZXJhdGUgb3ZlciBidWNrZXRzIG9yIHRoYXQgbmV3IG1pc21hdGNoIGxpc3QsIHdoaWNoIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKi4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4KClNvLCBsZXQmIzM5O3MgYXNzZW1ibGUgb3VyIHBsYW4uIEdpdmVuIHRoaXMgZnVuY3Rpb25hbCBzaGlmdCBhbmQgdGhlIGxpa2VseSBlZGdlIGNhc2VzLCBJIHdhbnQgdG8ga2VlcCB0aGUgdGVzdGluZyB2ZXJ5IGZvY3VzZWQuIFRoZSBjb25maWdzIHNwZWNpZmllZCBhcmUgcmVsZXZhbnQsIGVzcGVjaWFsbHkgdGhlIG9uZXMgdGhhdCB0cmlnZ2VyIHNwZWNpZmljIG5ldHdvcmtpbmcgZmVhdHVyZXMgbGlrZSBWUkYsIE5ldGVtIGFuZCBtdWx0aXBsZSByb3V0aW5nIHRhYmxlcy4gU28gdGhhdCBpbmNsdWRlcyBgSU5FVGAsIGBJUFY2YCwgYE5FVF9WUkZgLCBgTkVUX0wzX01BU1RFUl9ERVZgLCBgSVBfTVVMVElQTEVfVEFCTEVTYCwgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGBJUFY2X01VTFRJUExFX1RBQkxFU2AsIGBORVRfU0NIRURgIGFuZCBgTkVUX1NDSF9ORVRFTWAuCgpUaGUgY29yZSBzeW1ib2xzIEkmIzM5O20gZm9jdXNpbmcgb24gZm9yIHRoaXMgcGF0Y2ggYXJlOiBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgIGFuZCBgcnQ2X2Rpc2FibGVfaXBgLiBUaGUgVlJGIGFuZCBOZXRlbSBjb25maWdzIGxpa2VseSBoaW50IGF0IHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB3ZSYjMzk7bGwgc2VlIGludGVyZXN0aW5nIGJlaGF2aW9yLCBsaWtlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzIGluIElQdjYsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgd2Ugd2FudCB0byBjYXRjaC4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgaGFuZGxlZCwgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCBzbyB0aGlzIGlzIGNyaXRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O05FVF9WUkYmIzM0OywKICAgICYjMzQ7TkVUX0wzX01BU1RFUl9ERVYmIzM0OywKICAgICYjMzQ7SVBfTVVMVElQTEVfVEFCTEVTJiMzNDssCiAgICAmIzM0O0lQX0FEVkFOQ0VEX1JPVVRFUiYjMzQ7LAogICAgJiMzNDtJUFY2X01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX1NDSF9ORVRFTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0X2FkZF91bmNhY2hlZF9saXN0JiMzNDssCiAgICAmIzM0O3J0X2ZsdXNoX2RldiYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9hZGQmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfZGVsJiMzNDssCiAgICAmIzM0O3J0Nl9kaXNhYmxlX2lwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIGRhdGEgc3RydWN0dXJlIHVzZWQgZm9yIHRyYWNraW5nIHVuY2FjaGVkIHJvdXRlcyBpbiBib3RoIElQdjQgYW5kIElQdjYgZnJvbSBhIHNpbmdsZSBwZXItQ1BVIGxpc3QgdG8gYSBwZXItQ1BVIGhhc2ggdGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBob3cgdW5jYWNoZWQgcm91dGVzIGFyZSBhZGRlZCwgZGVsZXRlZCwgYW5kIGZsdXNoZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gVGhlIHRlc3Qgc2NyaXB0IGluZGljYXRlcyB0aGF0IFZSRiBhbmQgTkVURU0gYXJlIHVzZWQgdG8gdHJpZ2dlciBzcGVjaWZpYyBlZGdlIGNhc2VzIChsaWtlIG1pc21hdGNoZWQgZGV2aWNlcyBpbiBJUHY2KSwgc28gZW5hYmxpbmcgdGhvc2UgY29uZmlncyBpcyBpbXBvcnRhbnQgZm9yIHRob3JvdWdoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtORVRfVlJGJiMzNDssCiAgICAmIzM0O05FVF9MM19NQVNURVJfREVWJiMzNDssCiAgICAmIzM0O0lQX01VTFRJUExFX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtJUF9BRFZBTkNFRF9ST1VURVImIzM0OywKICAgICYjMzQ7SVBWNl9NVUxUSVBMRV9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9TQ0hfTkVURU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICAgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfYWRkJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2RlbCYjMzQ7LAogICAgJiMzNDtydDZfZGlzYWJsZV9pcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFja2luZyB1bmNhY2hlZCByb3V0ZXMgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGZyb20gYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHRvIGEgcGVyLUNQVSBoYXNoIHRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIFRoZSB0ZXN0IHNjcmlwdCBpbmRpY2F0ZXMgdGhhdCBWUkYgYW5kIE5FVEVNIGFyZSB1c2VkIHRvIHRyaWdnZXIgc3BlY2lmaWMgZWRnZSBjYXNlcyAobGlrZSBtaXNtYXRjaGVkIGRldmljZXMgaW4gSVB2NiksIHNvIGVuYWJsaW5nIHRob3NlIGNvbmZpZ3MgaXMgaW1wb3J0YW50IGZvciB0aG9yb3VnaCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIwOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIHVzZXItY29udHJvbGxlZCBsZW5ndGhzIG9yIGJvdW5kcywgYW5kIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGxvY2tpbmcsIG9yIHVzZS1hZnRlci1mcmVlIChlLmcuLCBpZiBhIHJvdXRlIGlzIG5vdCBwcm9wZXJseSBmbHVzaGVkKSwgd2hpY2ggYXJlIHdlbGwgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYmU0ZTdhYzRiN2NjMWJkMmNhY2MxYmZlZmRiYjY3ODQ1ZWJkMDM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMjA6MjQ6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCA2MDRjYzUxZGZkOWJjLi4zZjliYzFlYzcyY2NlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTc0LDYgJiM0Mzs3NCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lnbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wa3Rfc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tcm91dGUuaCZndDsKQEAgLTE1NTIsMTEgJiM0MzsxNTUzLDIyIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhlYWQ7CiB9OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7CiYjNDM7I2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX0JJVFMJNgomIzQzOyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9TSVpFCUJJVChSVF9VTkNBQ0hFRF9IQVNIX0JJVFMpCiYjNDM7CiYjNDM7c3RydWN0IHVuY2FjaGVkX3RhYmxlIHsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVF9VTkNBQ0hFRF9IQVNIX1NJWkVdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX3RhYmxlLCBydF91bmNhY2hlZF90YWJsZSk7CiAKIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpCiB7Ci0Jc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF9saXN0KTsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCksCiYjNDM7CQkJCSAgICAgIFJUX1VOQ0FDSEVEX0hBU0hfQklUUyldOwogCiAJcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7CiAKQEAgLTE1ODgsMTQgJiM0MzsxNjAwLDE4IEBAIHZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDtwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsOwomIzQzOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0X3VuY2FjaGVkX3RhYmxlLCBjcHUpOwomIzQzOwkJdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07CiAKIAkJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCiAJCQljb250aW51ZTsKIAogCQlzcGluX2xvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgJmFtcDt1bC0mZ3Q7aGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7Ci0JCQlpZiAocnQtJmd0O2RzdC5kZXYgIT0gZGV2KQomIzQzOwkJCWlmIChkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCkgIT0gZGV2KQogCQkJCWNvbnRpbnVlOwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0LSZndDtkc3QuZGV2X3JjdSwgYmxhY2tob2xlX25ldGRldik7CiAJCQluZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LApAQCAtMzc3MSwxMCAmIzQzOzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpCiAJaXBfdHN0YW1wcyA9IGlkZW50c19oYXNoICYjNDM7IChpcF9pZGVudHNfbWFzayAmIzQzOyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDtwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJaW50IGJ1Y2tldDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCWZvciAoYnVja2V0ID0gMDsgYnVja2V0ICZsdDsgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1tidWNrZXRdOwogCi0JCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKJiM0MzsJCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCX0KIAl9CiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSUQKIAlpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDE2ZGZhYzU0YTI1OWEuLjg2MDUzMDA3NDAyN2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtNDAsNiAmIzQzOzQwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zZXFfZmlsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25zcHJveHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2hhc2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9qaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NpcGhhc2guaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0X25hbWVzcGFjZS5oJmd0OwpAQCAtMTMzLDExICYjNDM7MTM0LDI4IEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhlYWQ7CiB9OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnQ2X3VuY2FjaGVkX2xpc3QpOwomIzQzOyNkZWZpbmUgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUwk2CiYjNDM7I2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFCUJJVChSVDZfVU5DQUNIRURfSEFTSF9CSVRTKQomIzQzOwomIzQzO3N0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgewomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUNl9VTkNBQ0hFRF9IQVNIX1NJWkVdOwomIzQzOwkvKiBSb3V0ZXMgdGhhdCBtdXN0IGJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIHR3byBkaWZmZXJlbnQgZGV2aWNlcy4gKi8KJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgbWlzbWF0Y2g7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlLCBydDZfdW5jYWNoZWRfdGFibGUpOwogCiB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogewotCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX2xpc3QpOwomIzQzOwlzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX3RhYmxlKTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KTsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsOwomIzQzOwomIzQzOwlpZiAocnQtJmd0O3J0NmlfaWRldiAmYW1wOyZhbXA7IHJ0LSZndDtydDZpX2lkZXYtJmd0O2RldiAhPSBydF9kZXYpCiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O21pc21hdGNoOwomIzQzOwllbHNlCiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIocnRfZGV2LAomIzQzOwkJCQkJICAgICAgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldOwogCiAJcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7CiAKQEAgLTE1Nyw0MCAmIzQzOzE3NSw1MCBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTsKJiM0MzsKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKJiM0MzsJCXN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC0mZ3Q7cnQ2aV9pZGV2OwomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KTsKJiM0MzsJCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwomIzQzOwomIzQzOwkJaWYgKHJ0X2lkZXYgJmFtcDsmYW1wOyBydF9pZGV2LSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJcnQtJmd0O3J0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpOwomIzQzOwkJCWluNl9kZXZfcHV0KHJ0X2lkZXYpOwomIzQzOwkJCWhhbmRsZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJ0X2RldiA9PSBkZXYpIHsKJiM0MzsJCQlydC0mZ3Q7ZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7CiYjNDM7CQkJbmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldiwKJiM0MzsJCQkJCSAgICZhbXA7cnQtJmd0O2RzdC5kZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7CiYjNDM7CQkJaGFuZGxlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoaGFuZGxlZCkKJiM0MzsJCQlsaXN0X2RlbF9pbml0KCZhbXA7cnQtJmd0O2RzdC5ydF91bmNhY2hlZCk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTsKLQkJc3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7CiYjNDM7CQlzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKIAotCQlpZiAobGlzdF9lbXB0eSgmYW1wO3VsLSZndDtoZWFkKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKLQkJCXN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC0mZ3Q7cnQ2aV9pZGV2OwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LSZndDtkc3QuZGV2OwotCQkJYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLQkJCWlmIChydF9pZGV2ICZhbXA7JmFtcDsgcnRfaWRldi0mZ3Q7ZGV2ID09IGRldikgewotCQkJCXJ0LSZndDtydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTsKLQkJCQlpbjZfZGV2X3B1dChydF9pZGV2KTsKLQkJCQloYW5kbGVkID0gdHJ1ZTsKLQkJCX0KLQotCQkJaWYgKHJ0X2RldiA9PSBkZXYpIHsKLQkJCQlydC0mZ3Q7ZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7Ci0JCQkJbmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldiwKLQkJCQkJCSAgICZhbXA7cnQtJmd0O2RzdC5kZXZfdHJhY2tlciwKLQkJCQkJCSAgIEdGUF9BVE9NSUMpOwotCQkJCWhhbmRsZWQgPSB0cnVlOwotCQkJfQotCQkJaWYgKGhhbmRsZWQpCi0JCQkJbGlzdF9kZWxfaW5pdCgmYW1wO3J0LSZndDtkc3QucnRfdW5jYWNoZWQpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkZXYsIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTsKJiM0MzsJCXJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpOwomIzQzOwkJcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2gsIGRldik7CiAJfQogfQogCkBAIC02OTgyLDEwICYjNDM7NzAxMCwxOCBAQCBpbnQgX19pbml0IGlwNl9yb3V0ZV9pbml0KHZvaWQpCiAjZW5kaWYKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJaW50IGJ1Y2tldDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQlmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCAmbHQ7IFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2J1Y2tldF07CiAKLQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7Ci0JCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwomIzQzOwkJCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJfQomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2guaGVhZCk7CiYjNDM7CQlzcGluX2xvY2tfaW5pdCgmYW1wO3RhYmxlLSZndDttaXNtYXRjaC5sb2NrKTsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaAppbmRleCBiNjRkZDg5MTY5OWQzLi40ZjQwOWQxMzVhOTlhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoCkBAIC0zODUsNiAmIzQzOzM4NSwzNyBAQCBydW5fdGVzdHMoKQogCWNsZWFudXBfeGZybV9kZXYKIH0KIAomIzQzO3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaCgpCiYjNDM7ewomIzQzOwlsb2NhbCBzZW5kZXJfcGlkCiYjNDM7CWxvY2FsIGJhY2tsb2cKJiM0MzsJbG9jYWwgcmMKJiM0MzsKJiM0MzsJIyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nCiYjNDM7CSMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWQKJiM0MzsJIyByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkZWxldGVkLgomIzQzOwlydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzCiYjNDM7CWlwIC02IC1uZXRucyAmIzM0OyRob3N0MSYjMzQ7IHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JGhvc3QxJiMzNDsgLi9tc2dfemVyb2NvcHkgLTYgXAomIzQzOwkJLVMgJHtIT1NUMV82fSAtRCAke0hPU1QxXzZ9IC1zIDEyMDAgLXQgMCByYXdfaGRyaW5jbCBcCiYjNDM7CQkmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxICZhbXA7CiYjNDM7CXNlbmRlcl9waWQ9JCEKJiM0MzsJd2FpdCAmIzM0OyRzZW5kZXJfcGlkJiMzNDsKJiM0MzsJcmM9JD8KJiM0MzsJbG9nX3Rlc3QgJHJjIDAgJiMzNDtDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzOwlbICRyYyAtbmUgMCBdICZhbXA7JmFtcDsgcmV0dXJuCiYjNDM7CiYjNDM7CWJhY2tsb2c9JChpcCBuZXRucyBleGVjICYjMzQ7JGhvc3QxJiMzNDsgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KQomIzQzOwlpZiAhIGVjaG8gJiMzNDskYmFja2xvZyYjMzQ7IHwgZ3JlcCAtRXEgJiMzOTtiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCYjMzk7OyB0aGVuCiYjNDM7CQlsb2dfdGVzdCAxIDAgJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjJiMzNDsKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwlsb2dfdGVzdCAwIDAgJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMAomIzQzOwlsb2dfdGVzdCAkPyAwICYjMzQ7Rmx1c2ggdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzO30KJiM0MzsKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHVzYWdlCiAKQEAgLTQyNSw2ICYjNDM7NDU2LDEwIEBAIGVjaG8KIGVjaG8gJiMzNDtuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlJiMzNDsKIHJ1bl90ZXN0cwogCiYjNDM7ZWNobwomIzQzO2VjaG8gJiMzNDtVbmNhY2hlZCBJUHY2IHJvdXRlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzJiMzNDsKJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2gKJiM0MzsKIHByaW50ZiAmIzM0O1xuVGVzdHMgcGFzc2VkOiAlM2RcbiYjMzQ7ICR7bnN1Y2Nlc3N9CiBwcmludGYgJiMzNDtUZXN0cyBmYWlsZWQ6ICUzZFxuJiMzNDsgICAke25mYWlsfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzA0CgkJCQkJCQlvdXRwdXQ6IDI3NQoJCQkJCQkJdGhvdWdodHM6IDU2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOPWZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZS4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYCDigJMgcHJldHR5IGZ1bmRhbWVudGFsIHJvdXRpbmcgY29kZS4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHN3aXRjaCBmcm9tIGEgc2ltcGxlIGxpbmtlZCBsaXN0IChgcnRfdW5jYWNoZWRfbGlzdGApIHRvIGEgaGFzaCB0YWJsZSBvZiBsaXN0cywgcGVyIENQVSwga2V5ZWQgb2ZmIGBkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdClgLiAgVGhpcyBoYXNoIHRhYmxlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZyBzdHJ1Y3R1cmUgZm9yIElQdjYuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBpcyBhaW1lZCBhdCBpbXByb3Zpbmcgb3IgcmVzb2x2aW5nIGlzc3VlcyByZWxhdGVkIHRvIGZsdXNoaW5nIHRoZXNlIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgcmVtb3ZlZC4KCkltcG9ydGFudGx5LCB0aGlzIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIHdoaWNoIGlzIGEgbWFzc2l2ZSByZWxpZWYuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgYmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgY2hhbmdlcyB0aGF0IGludGVyYWN0IHdpdGggdXNlci1jb250cm9sbGVkIGxlbmd0aHMgb3IgYm91bmRzLiAgVGhhdCBlbGltaW5hdGVzIGEgd2hvbGUgY2xhc3Mgb2YgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zIHJpZ2h0IGF3YXkuCgpJJiMzOTttIHZlcmlmeWluZyB0aGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGxpa2UgYHN0cnVjdCB1bmNhY2hlZF90YWJsZWAsIGFyZSBkZWZpbmVkIGFuZCBhbGxvY2F0ZWQgd2l0aCBgREVGSU5FX1BFUl9DUFVfQUxJR05FRGAuICBgREVGSU5FX1BFUl9DUFVfQUxJR05FRGAgaXMga25vd24gdG8gemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnksIG1lYW5pbmcgd2UmIzM5O3JlIHN0YXJ0aW5nIGZyb20gYSBzYWZlIHN0YXRlLiBUaGUgYGJ1Y2tldHNgIGFycmF5IHdpdGhpbiB0aGUgaGFzaCB0YWJsZSBpcyBpbml0aWFsaXplZCBpbiBgaXBfcnRfaW5pdGAgYW5kIGBpcDZfcm91dGVfaW5pdGAgd2l0aCBgSU5JVF9MSVNUX0hFQURgIGFuZCBgc3Bpbl9sb2NrX2luaXRgLCB3aGljaCBhcmUgcHJldHR5IHN0YW5kYXJkIGFuZCBzYWZlIGluaXRpYWxpemF0aW9uIHByYWN0aWNlcy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIGFuZCB0aGVyZSBpcyBubyB1c2VyIHNwYWNlIGludGVyYWN0aW9uLgoKSSBoYXZlIGRvdWJsZS1jaGVja2VkIHRoZSBkaWZmIGFuZCB2ZXJpZmllZCB0aGF0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIHplcm8taW5pdGlhbGl6ZWQgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGlzIGNoYW5nZSBpcyBjb250YWluZWQgaW50ZXJuYWxseSwgYW5kIG9wZXJhdGVzIHdpdGggemVyby1pbml0aWFsaXplZCBtZW1vcnkgdGhhdCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgSSBhbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSByaXNrIGhlcmUsIGlmIGFueSwgbGllcyBpbiB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGxpc3QgbWFuaXB1bGF0aW9uLCBsb2NraW5nIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgd2hpY2ggS0FTQU4sIGFuZCBMT0NLREVQIGFyZSBzZXQgdXAgdG8gaGFuZGxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdW5jYWNoZWQgcm91dGVzIGluIElQdjQgYW5kIElQdjYgYnkgcmVwbGFjaW5nIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB3aXRoIGEgcGVyLUNQVSBoYXNoIHRhYmxlIChhbmQgYW4gYWRkaXRpb25hbCBgbWlzbWF0Y2hgIGxpc3QgZm9yIElQdjYpLiBUaGlzIGlzIGRvbmUgdG8gb3B0aW1pemUgb3IgZml4IHRoZSBmbHVzaGluZyBvZiB1bmNhY2hlZCByb3V0ZXMgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gXG5cblRoZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwga2VybmVsIGRhdGEgc3RydWN0dXJlcyAoYHN0cnVjdCB1bmNhY2hlZF90YWJsZWAsIGBzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlYCkgd2hpY2ggYXJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHZpYSBgREVGSU5FX1BFUl9DUFVfQUxJR05FRGAgKGFuZCB0aHVzIHplcm8taW5pdGlhbGl6ZWQgaW4gdGhlIHBlci1DUFUgQlNTKSBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaW4gdGhlIHN1YnN5c3RlbSBpbml0IGZ1bmN0aW9ucyAoYGlwX3J0X2luaXRgLCBgaXA2X3JvdXRlX2luaXRgKS4gXG5cblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byB1c2VyLWNvbnRyb2xsZWQgbGVuZ3RocyBvciBib3VuZHMsIGFuZCBubyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBsb2NraW5nLCBvciB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSByb3V0ZSBpcyBub3QgcHJvcGVybHkgZmx1c2hlZCksIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjaGFuZ2VzIHRvIHVzZXItY29udHJvbGxlZCBsZW5ndGhzIG9yIGJvdW5kcywgYW5kIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbGlzdCBtYW5pcHVsYXRpb24sIGxvY2tpbmcsIG9yIHVzZS1hZnRlci1mcmVlIChlLmcuLCBpZiBhIHJvdXRlIGlzIG5vdCBwcm9wZXJseSBmbHVzaGVkKSwgd2hpY2ggYXJlIHdlbGwgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNDoyNi42NzI5MDI4ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUyMjI5MTMyMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiTkVUX1ZSRlwiLFxuICAgIFwiTkVUX0wzX01BU1RFUl9ERVZcIixcbiAgICBcIklQX01VTFRJUExFX1RBQkxFU1wiLFxuICAgIFwiSVBfQURWQU5DRURfUk9VVEVSXCIsXG4gICAgXCJJUFY2X01VTFRJUExFX1RBQkxFU1wiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfU0NIX05FVEVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRfYWRkX3VuY2FjaGVkX2xpc3RcIixcbiAgICBcInJ0X2ZsdXNoX2RldlwiLFxuICAgIFwicnQ2X3VuY2FjaGVkX2xpc3RfYWRkXCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9kZWxcIixcbiAgICBcInJ0Nl9kaXNhYmxlX2lwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdW5jYWNoZWQgcm91dGVzIGluIElQdjQgYW5kIElQdjYgYnkgcmVwbGFjaW5nIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB3aXRoIGEgcGVyLUNQVSBoYXNoIHRhYmxlIChhbmQgYW4gYWRkaXRpb25hbCBgbWlzbWF0Y2hgIGxpc3QgZm9yIElQdjYpLiBUaGlzIGlzIGRvbmUgdG8gb3B0aW1pemUgb3IgZml4IHRoZSBmbHVzaGluZyBvZiB1bmNhY2hlZCByb3V0ZXMgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcXG5cXG5UaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGNoYW5nZXMgdG8gdXNlci1jb250cm9sbGVkIGxlbmd0aHMgb3IgYm91bmRzLCBhbmQgbm8gY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsaXN0IG1hbmlwdWxhdGlvbiwgbG9ja2luZywgb3IgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgcm91dGUgaXMgbm90IHByb3Blcmx5IGZsdXNoZWQpLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3IgdHJhY2tpbmcgdW5jYWNoZWQgcm91dGVzIGluIGJvdGggSVB2NCBhbmQgSVB2NiBmcm9tIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB0byBhIHBlci1DUFUgaGFzaCB0YWJsZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIGhvdyB1bmNhY2hlZCByb3V0ZXMgYXJlIGFkZGVkLCBkZWxldGVkLCBhbmQgZmx1c2hlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBUaGUgdGVzdCBzY3JpcHQgaW5kaWNhdGVzIHRoYXQgVlJGIGFuZCBORVRFTSBhcmUgdXNlZCB0byB0cmlnZ2VyIHNwZWNpZmljIGVkZ2UgY2FzZXMgKGxpa2UgbWlzbWF0Y2hlZCBkZXZpY2VzIGluIElQdjYpLCBzbyBlbmFibGluZyB0aG9zZSBjb25maWdzIGlzIGltcG9ydGFudCBmb3IgdGhvcm91Z2ggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjQ6MjYuNjcyOTA4NjE5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDYzNDExOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYmU0ZTdhYzRiN2NjMWJkMmNhY2MxYmZlZmRiYjY3ODQ1ZWJkMDM2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIwOjI0OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXFxuaW5kZXggNjA0Y2M1MWRmZDliYy4uM2Y5YmMxZWM3MmNjZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xcbkBAIC03NCw2ICs3NCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lnbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXJvdXRlLmhcXHUwMDNlXFxuQEAgLTE1NTIsMTEgKzE1NTMsMjIgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0aGVhZDtcXG4gfTtcXG4gXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydF91bmNhY2hlZF9saXN0KTtcXG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX0JJVFNcXHQ2XFxuKyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9TSVpFXFx0QklUKFJUX1VOQ0FDSEVEX0hBU0hfQklUUylcXG4rXFxuK3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7XFxuK1xcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xcbiBcXG4gdm9pZCBydF9hZGRfdW5jYWNoZWRfbGlzdChzdHJ1Y3QgcnRhYmxlICpydClcXG4ge1xcbi1cXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XFxuK1xcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUpO1xcbitcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuK1xcbitcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFxcdTAwMjZydC1cXHUwMDNlZHN0KSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XFxuIFxcbiBcXHRydC1cXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcXG4gXFxuQEAgLTE1ODgsMTQgKzE2MDAsMTggQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aW50IGNwdTtcXG4gXFxuIFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4tXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcXG4rXFx0XFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcXG4rXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xcbitcXG4rXFx0XFx0dGFibGUgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7XFxuK1xcdFxcdHVsID0gXFx1MDAyNnRhYmxlLVxcdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XFxuIFxcbiBcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2dWwtXFx1MDAzZWhlYWQpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XFxuLVxcdFxcdFxcdGlmIChydC1cXHUwMDNlZHN0LmRldiAhPSBkZXYpXFxuK1xcdFxcdFxcdGlmIChkc3RfZGV2KFxcdTAwMjZydC1cXHUwMDNlZHN0KSAhPSBkZXYpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIocnQtXFx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcXG4gXFx0XFx0XFx0bmV0ZGV2X3JlZl9yZXBsYWNlKGRldiwgYmxhY2tob2xlX25ldGRldixcXG5AQCAtMzc3MSwxMCArMzc4NywxNiBAQCBpbnQgX19pbml0IGlwX3J0X2luaXQodm9pZClcXG4gXFx0aXBfdHN0YW1wcyA9IGlkZW50c19oYXNoICsgKGlwX2lkZW50c19tYXNrICsgMSkgKiBzaXplb2YoKmlwX2lkZW50cyk7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFxcdTAwMjZwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7XFxuK1xcdFxcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XFxuK1xcdFxcdGludCBidWNrZXQ7XFxuK1xcbitcXHRcXHR0YWJsZSA9IHBlcl9jcHVfcHRyKFxcdTAwMjZydF91bmNhY2hlZF90YWJsZSwgY3B1KTtcXG4rXFx0XFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXFx1MDAzYyBSVF9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1tidWNrZXRdO1xcbiBcXG4tXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG4tXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRFxcbiBcXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcXG5pbmRleCAxNmRmYWM1NGEyNTlhLi44NjA1MzAwNzQwMjdjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuQEAgLTQwLDYgKzQwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3Byb3h5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9oYXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lwaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG5AQCAtMTMzLDExICsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0aGVhZDtcXG4gfTtcXG4gXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XFxuKyNkZWZpbmUgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUU1xcdDZcXG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFXFx0QklUKFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXFxuK1xcbitzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcXG4rXFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVDZfVU5DQUNIRURfSEFTSF9TSVpFXTtcXG4rXFx0LyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovXFxuK1xcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xcbit9O1xcbitcXG4rc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG4gXFxuIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXFxuIHtcXG4tXFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcXG4rXFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbitcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuK1xcbitcXHRpZiAocnQtXFx1MDAzZXJ0NmlfaWRldiBcXHUwMDI2XFx1MDAyNiBydC1cXHUwMDNlcnQ2aV9pZGV2LVxcdTAwM2VkZXYgIT0gcnRfZGV2KVxcbitcXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlbWlzbWF0Y2g7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBSVDZfVU5DQUNIRURfSEFTSF9CSVRTKV07XFxuIFxcbiBcXHRydC1cXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcXG4gXFxuQEAgLTE1Nyw0MCArMTc1LDUwIEBAIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcXG4rXFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XFxuK1xcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cXHUwMDNlcnQ2aV9pZGV2O1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuK1xcdFxcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKHJ0X2lkZXYgXFx1MDAyNlxcdTAwMjYgcnRfaWRldi1cXHUwMDNlZGV2ID09IGRldikge1xcbitcXHRcXHRcXHRydC1cXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XFxuK1xcdFxcdFxcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xcbitcXHRcXHRcXHRoYW5kbGVkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHJ0X2RldiA9PSBkZXYpIHtcXG4rXFx0XFx0XFx0cnQtXFx1MDAzZWRzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2O1xcbitcXHRcXHRcXHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cnQtXFx1MDAzZWRzdC5kZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdFxcdGhhbmRsZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChoYW5kbGVkKVxcbitcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZydC1cXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRpbnQgY3B1O1xcbiBcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbi1cXHRcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XFxuLVxcdFxcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xcbitcXHRcXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcXG4rXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xcbiBcXG4tXFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCBcXHUwMDI2dWwtXFx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXFx1MDAzZXJ0NmlfaWRldjtcXG4tXFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVxcdTAwM2Vkc3QuZGV2O1xcbi1cXHRcXHRcXHRib29sIGhhbmRsZWQgPSBmYWxzZTtcXG4tXFxuLVxcdFxcdFxcdGlmIChydF9pZGV2IFxcdTAwMjZcXHUwMDI2IHJ0X2lkZXYtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG4tXFx0XFx0XFx0XFx0cnQtXFx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xcbi1cXHRcXHRcXHRcXHRpbjZfZGV2X3B1dChydF9pZGV2KTtcXG4tXFx0XFx0XFx0XFx0aGFuZGxlZCA9IHRydWU7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdGlmIChydF9kZXYgPT0gZGV2KSB7XFxuLVxcdFxcdFxcdFxcdHJ0LVxcdTAwM2Vkc3QuZGV2ID0gYmxhY2tob2xlX25ldGRldjtcXG4tXFx0XFx0XFx0XFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QuZGV2X3RyYWNrZXIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIEdGUF9BVE9NSUMpO1xcbi1cXHRcXHRcXHRcXHRoYW5kbGVkID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoaGFuZGxlZClcXG4tXFx0XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0dGFibGUgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbitcXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTtcXG4rXFx0XFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7XFxuK1xcdFxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbWlzbWF0Y2gsIGRldik7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtNjk4MiwxMCArNzAxMCwxOCBAQCBpbnQgX19pbml0IGlwNl9yb3V0ZV9pbml0KHZvaWQpXFxuICNlbmRpZlxcbiBcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbi1cXHRcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XFxuK1xcdFxcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xcbitcXHRcXHRpbnQgYnVja2V0O1xcbitcXG4rXFx0XFx0dGFibGUgPSBwZXJfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbitcXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1tidWNrZXRdO1xcbiBcXG4tXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG4tXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dGFibGUtXFx1MDAzZW1pc21hdGNoLmhlYWQpO1xcbitcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dGFibGUtXFx1MDAzZW1pc21hdGNoLmxvY2spO1xcbiBcXHR9XFxuIFxcbiBvdXQ6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxcbmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXFxuQEAgLTM4NSw2ICszODUsMzcgQEAgcnVuX3Rlc3RzKClcXG4gXFx0Y2xlYW51cF94ZnJtX2RldlxcbiB9XFxuIFxcbit0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKVxcbit7XFxuK1xcdGxvY2FsIHNlbmRlcl9waWRcXG4rXFx0bG9jYWwgYmFja2xvZ1xcbitcXHRsb2NhbCByY1xcbitcXG4rXFx0IyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nXFxuK1xcdCMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWRcXG4rXFx0IyByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkZWxldGVkLlxcbitcXHRydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzXFxuK1xcdGlwIC02IC1uZXRucyBcXFwiJGhvc3QxXFxcIiByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDBcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJGhvc3QxXFxcIiAuL21zZ196ZXJvY29weSAtNiBcXFxcXFxuK1xcdFxcdC1TICR7SE9TVDFfNn0gLUQgJHtIT1NUMV82fSAtcyAxMjAwIC10IDAgcmF3X2hkcmluY2wgXFxcXFxcbitcXHRcXHRcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcbitcXHRzZW5kZXJfcGlkPSQhXFxuK1xcdHdhaXQgXFxcIiRzZW5kZXJfcGlkXFxcIlxcbitcXHRyYz0kP1xcbitcXHRsb2dfdGVzdCAkcmMgMCBcXFwiQ3JlYXRlIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXFxcIlxcbitcXHRbICRyYyAtbmUgMCBdIFxcdTAwMjZcXHUwMDI2IHJldHVyblxcbitcXG4rXFx0YmFja2xvZz0kKGlwIG5ldG5zIGV4ZWMgXFxcIiRob3N0MVxcXCIgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KVxcbitcXHRpZiAhIGVjaG8gXFxcIiRiYWNrbG9nXFxcIiB8IGdyZXAgLUVxICdiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCc7IHRoZW5cXG4rXFx0XFx0bG9nX3Rlc3QgMSAwIFxcXCJSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXFxcIlxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0bG9nX3Rlc3QgMCAwIFxcXCJSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXFxcIlxcbitcXG4rXFx0cnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMFxcbitcXHRsb2dfdGVzdCAkPyAwIFxcXCJGbHVzaCB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1xcXCJcXG4rfVxcbitcXG4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcXG4gIyB1c2FnZVxcbiBcXG5AQCAtNDI1LDYgKzQ1NiwxMCBAQCBlY2hvXFxuIGVjaG8gXFxcIm5ldGVtIHFkaXNjIG9uIFZSRiBkZXZpY2VcXFwiXFxuIHJ1bl90ZXN0c1xcbiBcXG4rZWNob1xcbitlY2hvIFxcXCJVbmNhY2hlZCBJUHY2IHJvdXRlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXFxcIlxcbit0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2hcXG4rXFxuIHByaW50ZiBcXFwiXFxcXG5UZXN0cyBwYXNzZWQ6ICUzZFxcXFxuXFxcIiAke25zdWNjZXNzfVxcbiBwcmludGYgXFxcIlRlc3RzIGZhaWxlZDogJTNkXFxcXG5cXFwiICAgJHtuZmFpbH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI0OjI3LjA4MDAxNDEyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzMzkzOTM1NTU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRfVlJGXCIsXG4gICAgXCJORVRfTDNfTUFTVEVSX0RFVlwiLFxuICAgIFwiSVBfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQVjZfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfTkVURU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLFxuICAgIFwicnRfZmx1c2hfZGV2XCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9hZGRcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2RlbFwiLFxuICAgIFwicnQ2X2Rpc2FibGVfaXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFja2luZyB1bmNhY2hlZCByb3V0ZXMgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGZyb20gYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHRvIGEgcGVyLUNQVSBoYXNoIHRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIFRoZSB0ZXN0IHNjcmlwdCBpbmRpY2F0ZXMgdGhhdCBWUkYgYW5kIE5FVEVNIGFyZSB1c2VkIHRvIHRyaWdnZXIgc3BlY2lmaWMgZWRnZSBjYXNlcyAobGlrZSBtaXNtYXRjaGVkIGRldmljZXMgaW4gSVB2NiksIHNvIGVuYWJsaW5nIHRob3NlIGNvbmZpZ3MgaXMgaW1wb3J0YW50IGZvciB0aG9yb3VnaCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYmU0ZTdhYzRiN2NjMWJkMmNhY2MxYmZlZmRiYjY3ODQ1ZWJkMDM2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjA6MjQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggNjA0Y2M1MWRmZDliYy4uM2Y5YmMxZWM3MmNjZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbisrKyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC03NCw2ICs3NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZ21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21yb3V0ZS5oXHUwMDNlXG5AQCAtMTU1MiwxMSArMTU1MywyMiBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpO1xuKyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChSVF9VTkNBQ0hFRF9IQVNIX0JJVFMpXG4rXG4rc3RydWN0IHVuY2FjaGVkX3RhYmxlIHtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcbit9O1xuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xuIFxuIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG4ge1xuLVx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUpO1xuK1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KSxcbitcdFx0XHRcdCAgICAgIFJUX1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTg4LDE0ICsxNjAwLDE4IEBAIHZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpbnQgY3B1O1xuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4rXHRcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XG4rXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbitcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydF91bmNhY2hlZF90YWJsZSwgY3B1KTtcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuK1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgKzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4gXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuK1x0XHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xuK1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuK1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggMTZkZmFjNTRhMjU5YS4uODYwNTMwMDc0MDI3YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC00MCw2ICs0MCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG5AQCAtMTMzLDExICsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0aGVhZDtcbiB9O1xuIFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFXHRCSVQoUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUylcbitcbitzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRV07XG4rXHQvKiBSb3V0ZXMgdGhhdCBtdXN0IGJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIHR3byBkaWZmZXJlbnQgZGV2aWNlcy4gKi9cbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcbitcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlKTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XG4rXG4rXHRpZiAocnQtXHUwMDNlcnQ2aV9pZGV2IFx1MDAyNlx1MDAyNiBydC1cdTAwM2VydDZpX2lkZXYtXHUwMDNlZGV2ICE9IHJ0X2RldilcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaDtcbitcdGVsc2VcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKHJ0X2RldixcbitcdFx0XHRcdFx0ICAgICAgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTcsNDAgKzE3NSw1MCBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuK1x0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbitcbitcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuK1x0XHRcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xuK1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4rXHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4rXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRpZiAoaGFuZGxlZClcbitcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4tXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuK1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTtcbitcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7XG4rXHRcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLCBkZXYpO1xuIFx0fVxuIH1cbiBcbkBAIC02OTgyLDEwICs3MDEwLDE4IEBAIGludCBfX2luaXQgaXA2X3JvdXRlX2luaXQodm9pZClcbiAjZW5kaWZcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4rXHRcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcbitcdFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCsrKSB7XG4rXHRcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1tidWNrZXRdO1xuIFxuLVx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbi1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4rXHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRcdH1cbitcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2guaGVhZCk7XG4rXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLmxvY2spO1xuIFx0fVxuIFxuIG91dDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuQEAgLTM4NSw2ICszODUsMzcgQEAgcnVuX3Rlc3RzKClcbiBcdGNsZWFudXBfeGZybV9kZXZcbiB9XG4gXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKClcbit7XG4rXHRsb2NhbCBzZW5kZXJfcGlkXG4rXHRsb2NhbCBiYWNrbG9nXG4rXHRsb2NhbCByY1xuK1xuK1x0IyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nXG4rXHQjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkXG4rXHQjIHJvdXRlcywgYW5kIG5ldGVtIGtlZXBzIHRoZW0gcmVmZXJlbmNlZCB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIGRlbGV0ZWQuXG4rXHRydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzXG4rXHRpcCAtNiAtbmV0bnMgXCIkaG9zdDFcIiByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDBcbitcdGlwIG5ldG5zIGV4ZWMgXCIkaG9zdDFcIiAuL21zZ196ZXJvY29weSAtNiBcXFxuK1x0XHQtUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbitcdHNlbmRlcl9waWQ9JCFcbitcdHdhaXQgXCIkc2VuZGVyX3BpZFwiXG4rXHRyYz0kP1xuK1x0bG9nX3Rlc3QgJHJjIDAgXCJDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcIlxuK1x0WyAkcmMgLW5lIDAgXSBcdTAwMjZcdTAwMjYgcmV0dXJuXG4rXG4rXHRiYWNrbG9nPSQoaXAgbmV0bnMgZXhlYyBcIiRob3N0MVwiIHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSlcbitcdGlmICEgZWNobyBcIiRiYWNrbG9nXCIgfCBncmVwIC1FcSAnYmFja2xvZyAuKiBbMS05XVswLTldKnAnOyB0aGVuXG4rXHRcdGxvZ190ZXN0IDEgMCBcIlJldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcIlxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRsb2dfdGVzdCAwIDAgXCJSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXCJcbitcbitcdHJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDBcbitcdGxvZ190ZXN0ICQ/IDAgXCJGbHVzaCB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rfVxuK1xuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIyB1c2FnZVxuIFxuQEAgLTQyNSw2ICs0NTYsMTAgQEAgZWNob1xuIGVjaG8gXCJuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlXCJcbiBydW5fdGVzdHNcbiBcbitlY2hvXG4rZWNobyBcIlVuY2FjaGVkIElQdjYgcm91dGUgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcIlxuK3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaFxuK1xuIHByaW50ZiBcIlxcblRlc3RzIHBhc3NlZDogJTNkXFxuXCIgJHtuc3VjY2Vzc31cbiBwcmludGYgXCJUZXN0cyBmYWlsZWQ6ICUzZFxcblwiICAgJHtuZmFpbH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI0OjI3LjA4MDAxNTkzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NTE0Nzc4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29yZSBSb3V0aW5nIFN0YWNrIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiwgb3IgcG9zc2libHkgYSBidWcgZml4LCBpbiB0aGUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUuIEl0J3MgdGFyZ2V0aW5nIGBuZXQvaXB2NC9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBnb2FsIGlzIHRvIG1vdmUgYXdheSBmcm9tIHBlci1DUFUgbGlzdHMgZm9yIHVuY2FjaGVkIHJvdXRlcyBhbmQgaW5zdGVhZCB1c2UgYSBoYXNoIHRhYmxlLiBUaGF0J3MgYSBnb29kIG1vdmU7IHRoZSBoYXNoIHRhYmxlIHNob3VsZCBiZSBzaWduaWZpY2FudGx5IGZhc3RlciwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhIGxhcmdlIG51bWJlciBvZiByb3V0ZXMgb3IgZnJlcXVlbnQgZGV2aWNlIGRlbGV0aW9ucywgYXMgdGhpcyBhcHByb2FjaCB3b3VsZCBpbXByb3ZlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgZGV2aWNlIGlzIGRlbGV0ZWQuXG5cblRoZSBjb21taXQgaW50cm9kdWNlcyBgcnRfdW5jYWNoZWRfdGFibGVgIGFuZCBgcnQ2X3VuY2FjaGVkX3RhYmxlYCwgd2hpY2ggYXJlIGVzc2VudGlhbGx5IGFycmF5cyBvZiBgdW5jYWNoZWRfbGlzdGAgYnVja2V0cy4gSW4gSVB2NiwgdGhleSd2ZSBhbHNvIGFkZGVkIGEgYG1pc21hdGNoYCBsaXN0LCB3aGljaCBJJ2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhhdCdzIGxpa2VseSBmb3Igcm91dGVzIHRoYXQsIGZvciB3aGF0ZXZlciByZWFzb24sIG5lZWQgdG8gYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggbXVsdGlwbGUgaW50ZXJmYWNlcy5cblxuSSBzZWUgdGhhdCB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byB1bmNhY2hlZCByb3V0ZSBtYW5hZ2VtZW50LCBhcmUgZ2V0dGluZyBtb2RpZmllZDogYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCwgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgLlxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGZ1bmRhbWVudGFsIGhlcmUsIGl0J3MgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcuIEJ1dCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIEkgc2hvdWxkIGRpZyBkZWVwZXIgdG8gY29uc2lkZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIHRlc3RpbmcgYW5kIGVkZ2UgY2FzZXMuIFRoZSB0ZXN0IHNjcmlwdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaGAgdXNlcyBWUkYsIG5ldGVtLCBhbmQgcmF3X2hkcmluY2wsIHNvIGl0J3MgYSBnb29kIGluZGljYXRvciB0aGF0IGBDT05GSUdfTkVUX1ZSRmAgYW5kIGBDT05GSUdfTkVUX1NDSF9ORVRFTWAgYXJlIGRlZmluaXRlbHkgd29ydGggY29uc2lkZXJpbmcsIHBhcnRpY3VsYXJseSB3aGVuIGl0IGNvbWVzIHRvIHRlc3RpbmcgdGhlICdtaXNtYXRjaCcgc2NlbmFyaW8gaW4gSVB2Ni4gSSBzaG91bGQgYWxzbyB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNDozNS43MzE0OTYzNDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMzQ3Njg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9yb3V0ZS5oPTI3MD12b2lkIGZpYl9tb2RpZnlfcHJlZml4X21ldHJpYyhzdHJ1Y3QgaW5faWZhZGRyICppZmEsIHUzMiBuZXdfbWV0cmljKTtcXG5pbmNsdWRlL25ldC9yb3V0ZS5oLTI3MS1cXG5pbmNsdWRlL25ldC9yb3V0ZS5oOjI3Mjp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KTtcXG5pbmNsdWRlL25ldC9yb3V0ZS5oLTI3My12b2lkIHJ0X2RlbF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTUyMT1zdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLCBzdHJ1Y3QgcnRhYmxlICpydClcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTUzOS1cXHRcXHRpZiAob3JpZykge1xcbm5ldC9pcHY0L3JvdXRlLmM6MTU0MDpcXHRcXHRcXHRydF9hZGRfdW5jYWNoZWRfbGlzdChvcmlnKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NDEtXFx0XFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNm9yaWctXFx1MDAzZWRzdCk7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1NjM9c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX3RhYmxlLCBydF91bmNhY2hlZF90YWJsZSk7XFxubmV0L2lwdjQvcm91dGUuYy0xNTY0LVxcbm5ldC9pcHY0L3JvdXRlLmM6MTU2NTp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU2Ni17XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE2MzI9c3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcixcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTY3Ny1cXHRcXHRcXHR9XFxubmV0L2lwdjQvcm91dGUuYzoxNjc4OlxcdFxcdFxcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE2NzktXFx0XFx0fVxcbm5ldC9pcHY0L3JvdXRlLmMtMTY4MC1cXHR9IGVsc2VcXG5uZXQvaXB2NC9yb3V0ZS5jOjE2ODE6XFx0XFx0cnRfYWRkX3VuY2FjaGVkX2xpc3QocnQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTY4Mi1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjMwOD1pcF9yb3V0ZV9pbnB1dF9zbG93KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTAyLVxcdFxcdGlmICh1bmxpa2VseSghcnRfY2FjaGVfcm91dGUobmhjLCBydGgpKSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjI1MDM6XFx0XFx0XFx0cnRfYWRkX3VuY2FjaGVkX2xpc3QocnRoKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MDQtXFx0fVxcbi0tXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM9NjY9c3RhdGljIGludCB4ZnJtNF9maWxsX2RzdChzdHJ1Y3QgeGZybV9kc3QgKnhkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy05MC1cXHR4ZHN0LVxcdTAwM2V1LnJ0LnJ0X210dV9sb2NrZWQgPSBydC1cXHUwMDNlcnRfbXR1X2xvY2tlZDtcXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzo5MTpcXHRydF9hZGRfdW5jYWNoZWRfbGlzdChcXHUwMDI2eGRzdC1cXHUwMDNldS5ydCk7XFxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtOTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI0OjM3LjY0NDk3OTc1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Nzc3OTkzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgaXQgdG91Y2hlczogYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCwgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgLiBUaGVzZSBhcmUgYWxsICpjb3JlKiBuZXR3b3JraW5nIGZ1bmN0aW9ucy4gTm90aGluZyBwZXJpcGhlcmFsLCB0aGVzZSBhcmUgZnVuZGFtZW50YWwuIFRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGJlaW5nIG1vZGlmaWVkIHJhaXNlcyBhIGZsYWc7IGl0IG1lYW5zIHRoZXJlJ3MgcG90ZW50aWFsbHkgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gcm91dGluZywgY2FjaGluZywgYW5kIGRldmljZSBmbHVzaGluZywgbGlrZWx5IGF0IGEgbG93IGxldmVsLlxuXG5UaGUgYWNjb21wYW55aW5nIHRlc3Qgc2NyaXB0IG1lbnRpb25zIFZSRiBhbmQgTkVURU0uIEludGVyZXN0aW5nLiBWUkYgbWVhbnMgVmlydHVhbCBSb3V0aW5nIGFuZCBGb3J3YXJkaW5nLCBhbmQgTkVURU0sIE5ldHdvcmsgRW11bGF0aW9uLCBjb3VsZCBtZWFuIHRoYXQgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB3b3JrIHdpdGggcm91dGluZyB3aXRoaW4gYSBzZWdtZW50ZWQgbmV0d29yayBlbnZpcm9ubWVudCBvciB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgdG8gc2ltdWxhdGUgbmV0d29yayBjb25kaXRpb25zIHN1Y2ggYXMgbGF0ZW5jeSwgcGFja2V0IGxvc3MsIG9yIGppdHRlciB0byB0ZXN0IHRoZSBjaGFuZ2VzIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGludmVzdGlnYXRlIHRoZSB1c2VzIG9mIHRob3NlIG9wdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlaXIgZWZmZWN0cy5cblxuQmVmb3JlIGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiAqaG93KiB0aGVzZSBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGBydF9mbHVzaF9kZXZgIGlzIG5vcm1hbGx5IGNhbGxlZC4gSXQncyBhIHN0YW5kYXJkIGhvdXNla2VlcGluZyBmdW5jdGlvbiwgSSBuZWVkIHRvIGtub3cgdGhlIHR5cGljYWwgZXhlY3V0aW9uIHBhdGhzIGJlZm9yZSBJIGxvb2sgZm9yIGFueSBuZXcgb25lcy4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiB1bnVzdWFsIGNhbGxzIG9yIGNhbGxzIGZyb20gbm9uLXN0YW5kYXJkIHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIHBhdGNoJ3MgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNDo0Mi4yMjI3ODE1NzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MjU2NDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydF9mbHVzaF9kZXZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcm91dGUuaD0xMzE9dm9pZCBydF9jYWNoZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L3JvdXRlLmg6MTMyOnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbmV0L3JvdXRlLmgtMTMzLVxcbi0tXFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE3LVxcdFxcdGZpYl9kaXNhYmxlX2lwKGRldiwgZXZlbnQsIHRydWUpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MTg6XFx0XFx0cnRfZmx1c2hfZGV2KGRldik7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUxOS1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1OTE9c3RhdGljIHZvaWQgaXB2NF9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTYtXFxubmV0L2lwdjQvcm91dGUuYzoxNTk3OnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvcm91dGUuYy0xNTk4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjQ6NDQuMTA1MzUxNjg2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4NzAwOTI5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipGbHVzaGluZyB0aGUgUm91dGluZyBUYWJsZXMgVXBvbiBEZXZpY2UgVW5yZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgcm91dGluZyB0YWJsZXMgYXJlIGhhbmRsZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gYHJ0X2ZsdXNoX2RldmAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24gaGVyZSwgYW5kIEkgc2VlIGl0IGdldHMgdHJpZ2dlcmVkIGZyb20gYGZpYl9uZXRkZXZfZXZlbnRgIHNwZWNpZmljYWxseSB3aGVuIGEgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudCBvY2N1cnMuIFRoYXQncyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdDsgd2UgbmVlZCB0byBjbGVhciBvdXQgYW55IHJvdXRpbmcgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2Ugd2hlbiBpdCdzIGdvaW5nIGF3YXkuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZW4gSSBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gSVB2NiB3aGljaCBpcyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCB3aGljaCBhbHNvIGRlYWxzIHdpdGggdGhlIG5ldGRldiBldmVudHMsIHdoaWNoIGxpa2VseSBoYW5kbGVzIGFuIGFkZGl0aW9uYWwgbGV2ZWwgb2YgY2xlYW4gdXAuIEkgd2lsbCBuZWVkIHRvIGxvb2sgaW50byB0aGlzIG1vcmUgZGVlcGx5IHRvIGVuc3VyZSB0aGlzIGlzIGFzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjQ6NDkuMDkyMzYzNjMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTU1OTE2MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9MTc4PXN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjA5LVxcbm5ldC9pcHY2L3JvdXRlLmM6MjEwOnN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY2L3JvdXRlLmMtMjExLXtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NTA3MT12b2lkIHJ0Nl9kaXNhYmxlX2lwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzMtXFx0cnQ2X3N5bmNfZG93bl9kZXYoZGV2LCBldmVudCk7XFxubmV0L2lwdjYvcm91dGUuYzo1MDc0OlxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihkZXYpO1xcbm5ldC9pcHY2L3JvdXRlLmMtNTA3NS1cXHRuZWlnaF9pZmRvd24oXFx1MDAyNm5kX3RibCwgZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjQ6NTAuODQ3OTYwNTA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNzczOTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLCBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBydW4uIExldCdzIHNlZS4uLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHRvIHRhcmdldC4gUmlnaHQsIHRoZSBvbmVzIHRoYXQgc2VlbSBtb3N0IHJlbGV2YW50IGFyZSBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIEhtbSwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgZGVjbGFyZWQgYXMgc3RhdGljOyB0eXBpY2FsbHksIHRob3NlIGFyZSBpbmxpbmVkLiBIb3dldmVyLCBpdCdzIGNhbGxlZCBmcm9tIGBydDZfZGlzYWJsZV9pcGAsIHdoaWNoIGlzIGdsb2JhbCBhbmQgZXhwb3J0ZWQsIHNvIG1heWJlIHRoYXQncyBhIGdvb2QgZW50cnkgcG9pbnQuIEp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgaGF2ZSBhIGxvb2sgYXQgYHJ0Nl9kaXNhYmxlX2lwYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE3NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNDo1NS43NjU3MDE2MzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Mjg3MTc2ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnQ2X2Rpc2FibGVfaXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjI3PXZvaWQgcnQ2X3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBuaF9mbGFncyk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjI4OnZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjI5LXZvaWQgcnQ2X3N5bmNfZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCk7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM4NzY9c3RhdGljIGludCBhZGRyY29uZl9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1bnJlZ2lzdGVyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0zODg4LVxcbm5ldC9pcHY2L2FkZHJjb25mLmM6Mzg4OTpcXHRydDZfZGlzYWJsZV9pcChkZXYsIGV2ZW50KTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM4OTAtXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzNjM9c3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzODgtXFxubmV0L2lwdjYvcm91dGUuYzozMzg5OlxcdC8qIEFkZCB0aGlzIGRzdCBpbnRvIHVuY2FjaGVkX2xpc3Qgc28gdGhhdCBydDZfZGlzYWJsZV9pcCgpIGNhblxcbm5ldC9pcHY2L3JvdXRlLmMtMzM5MC1cXHQgKiBkbyBwcm9wZXIgcmVsZWFzZSBvZiB0aGUgbmV0X2RldmljZVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDU1PXZvaWQgcnQ2X3N5bmNfZG93bl9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3MC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzE6dm9pZCBydDZfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI0OjU3LjQ5NDQyNTI1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM1OTIxMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEdsb2JhbCBWYXJpYWJsZXMgYW5kIEV4cG9ydGVkIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHNvbWUga2V5IHN5bWJvbHMgaGVyZS4gYHJ0Nl9kaXNhYmxlX2lwYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4gSSdtIGFsc28gbm90aW5nIHRoYXQgYHJ0X2ZsdXNoX2RldmAsIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgYXJlIGFsbCBnbG9iYWwuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgZ2xvYmFscyBvZnRlbiByZXByZXNlbnQgc2hhcmVkIHN0YXRlIG9yIGNyaXRpY2FsIGZ1bmN0aW9uYWxpdGllcy4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIHNwZWNpZmljYWxseSBjb25maXJtIGlmIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIEtub3dpbmcgaWYgaXQncyBleHBvcnRlZCBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGFjY2Vzc2liaWxpdHkgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzIGluIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjAxLjEzMDM0ODc5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0NzYwOTQ5NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcnRfYWRkX3VuY2FjaGVkX2xpc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjAzLjM3Nzk2NTc3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzU4NTAxNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZvY3VzaW5nIG9uIE5vbi1TdGF0aWMgRnVuY3Rpb24gRGVzaWduKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgZnVuY3Rpb24sIGFuZCBJJ20gcmVhbGl6aW5nIGl0IGRvZXNuJ3QgKm5lY2Vzc2FyaWx5KiBoYXZlIHRvIGJlIGV4cG9ydGVkIHRvIGEgbW9kdWxlIGluIHRoZSBzdHJpY3Qgc2Vuc2UuIFRoZSBjcml0aWNhbCBhc3BlY3QgaXMgc2ltcGx5IHRoYXQgaXQgbmVlZHMgdG8gYmUgbm9uLXN0YXRpYy4gVGhhdCdzIHRoZSBjb3JlIHJlcXVpcmVtZW50LiBXZSdyZSBhaW1pbmcgZm9yIGEgY2VydGFpbiBsZXZlbCBvZiB2aXNpYmlsaXR5IG9yIGFjY2Vzcywgbm90IG5lY2Vzc2FyaWx5IG1vZHVsYXJpdHkgZm9yIGl0cyBvd24gc2FrZS4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJldmlzaXQgdGhhdCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBmdW5jdGlvbi4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgY29uc2lkZXIgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduIGdvYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjU5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MDguNzM2NDY5ODE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE4OTIxMjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0yMzA9dm9pZCBydDZfbXVsdGlwYXRoX3JlYmFsYW5jZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIzMS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoyMzI6dm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydCk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjMzLXZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQpO1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0xNDY9c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTE0Ny1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjE0ODp2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMTQ5LXtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjMwMT1zdHJ1Y3QgcnQ2X2luZm8gKmlwNl9wb2xfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDItXFx0XFx0XFx0LyogMSByZWZjbnQgaXMgdGFrZW4gZHVyaW5nIGlwNl9ydF9jYWNoZV9hbGxvYygpLlxcbm5ldC9pcHY2L3JvdXRlLmM6MjM0MzpcXHRcXHRcXHQgKiBBcyBydDZfdW5jYWNoZWRfbGlzdF9hZGQoKSBkb2VzIG5vdCBjb25zdW1lIHJlZmNudCxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDQtXFx0XFx0XFx0ICogdGhpcyByZWZjbnQgaXMgYWx3YXlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgZXZlblxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yMzQ2LVxcdFxcdFxcdCAqL1xcbm5ldC9pcHY2L3JvdXRlLmM6MjM0NzpcXHRcXHRcXHRydDZfdW5jYWNoZWRfbGlzdF9hZGQocnQpO1xcbm5ldC9pcHY2L3JvdXRlLmMtMjM0OC1cXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MzM2Mz1zdHJ1Y3QgZHN0X2VudHJ5ICppY21wNl9kc3RfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzM5MS1cXHQgKi9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMzOTI6XFx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHJ0KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzOTMtXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYz04MD1zdGF0aWMgaW50IHhmcm02X2ZpbGxfZHN0KHN0cnVjdCB4ZnJtX2RzdCAqeGRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEwMi1cXHR4ZHN0LVxcdTAwM2V1LnJ0Ni5ydDZpX3NyYyA9IHJ0LVxcdTAwM2VydDZpX3NyYztcXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzoxMDM6XFx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKFxcdTAwMjZ4ZHN0LVxcdTAwM2V1LnJ0Nik7XFxubmV0L2lwdjYveGZybTZfcG9saWN5LmMtMTA0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNToxMC4zNTUzOTkwODRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3MzI4NDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgIGFyZSBnbG9iYWwgZnVuY3Rpb25zIOKAkyB0aGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBwb3RlbnRpYWwgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRob3NlIGFyZSBiZWluZyBjYWxsZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZGVmaW5lZCBjb25maWd1cmF0aW9ucy4gSSdtIHNlZWluZyBgTkVUX1ZSRmAsIGBORVRfU0NIX05FVEVNYCwgYElORVRgLCBhbmQgYElQVjZgLiBJbnRlcmVzdGluZywgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQ/IENvbnRleHQgaXMga2luZyBoZXJlIVxuXG5UaGUgdGVzdCBzY3JpcHQgdXNlcyBgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHNgLiBBaCwgYE5FVF9TQ0hfTkVURU1gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQgZ2l2ZW4gdGhlIGBuZXRlbWAgY29tbWFuZCBiZWluZyB1c2VkOyB0aGF0IG9uZSBpcyBvYnZpb3VzLCBub3cuIEFuZCBvZiBjb3Vyc2UsIGBORVRfVlJGYCBpcyByZWxldmFudCwgZ2l2ZW4gdGhhdCBpdCdzIHVzaW5nIHRoZSB2aXJ0dWFsIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgY29udGV4dC5cblxuSSB0aGluayBpdCdzIHdvcnRoIGRvdWJsZS1jaGVja2luZyBgTkVUX1ZSRmAgYW5kIGBORVRfU0NIX05FVEVNYCB0byBsb29rIGF0IHRoZSBLY29uZmlnLCBqdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBpbXBsaWNhdGlvbnMgSSdtIG1pc3NpbmcuIEFsd2F5cyBwYXlzIHRvIGJlIHRob3JvdWdoIHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNToxNi41Mjg2ODU1NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTk4NzEwOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WUkZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz00NjM9Y29uZmlnIE5FVEtJVFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzEtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NzI6Y29uZmlnIE5FVF9WUkZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ3My1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBSb3V0aW5nIGFuZCBGb3J3YXJkaW5nIChMaXRlKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MTguNTQ4NTY0MDUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNjg5ODQ5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMDY2OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MjAuNjE3NTUyODMzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY2OTM2NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfU0NIX05FVEVNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE4ND1jb25maWcgTkVUX1NDSF9HUkVEXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xOTQtXFxubmV0L3NjaGVkL0tjb25maWc6MTk1OmNvbmZpZyBORVRfU0NIX05FVEVNXFxubmV0L3NjaGVkL0tjb25maWctMTk2LVxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGVtdWxhdG9yIChORVRFTSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjIyLjI4NDQ5NTAwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk2NDQ3NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipJbnZlc3RpZ2F0aW5nIE5FVF9WUkYgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIGBORVRfVlJGYCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBBcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbiBlbGVtZW50cywgcGFyYW1ldGVycywgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBhY2NvdW50IGZvciBiZXlvbmQgd2hhdCBJJ3ZlIGFscmVhZHkgY29uc2lkZXJlZD8gSSdtIHRoaW5raW5nIGJleW9uZCB0aGUgb2J2aW91cywgdGhlIHRoaW5ncyBJJ3ZlIGxpa2VseSBhbHJlYWR5IGNoZWNrZWQgbXVsdGlwbGUgdGltZXMuIEFyZSB0aGVyZSBzdWJ0bGUgaW50ZXJhY3Rpb25zLCBvYnNjdXJlIGZsYWdzLCBvciBwbGF0Zm9ybS1zcGVjaWZpYyBudWFuY2VzIHRoYXQgY291bGQgYml0ZSBtZSBsYXRlcj8gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdhbnQgdG8gZW5zdXJlIHRoaXMgZW50aXJlIHZpcnR1YWwgcm91dGluZyBhbmQgZm9yd2FyZGluZyBzZXR1cCBpcyB0cnVseSBjb21wbGV0ZSBhbmQgcm9idXN0LiBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSdzIGFueXRoaW5nIEknbSBvdmVybG9va2luZyB0aGF0IG1pZ2h0IGNhdXNlIGEgcHJvYmxlbSBkb3duIHRoZSBsaW5lIC0gSSdtIGFscmVhZHkgZW52aXNpb25pbmcgcG90ZW50aWFsIHRyb3VibGVzaG9vdGluZyBzY2VuYXJpb3MuIFNvLCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgaGF2ZSB0byBleGhhdXN0aXZlbHkgdGhpbmsgdGhyb3VnaCBpZiBJIGhhdmUgYWNjb3VudGVkIGZvciBldmVyeXRoaW5nLCBvciBpZiB0aGVyZSdzIHNvbWV0aGluZyBlbHNlIEkgaGF2ZSB0byB0aGluayBhYm91dC4gVGhhdCdzIG15IGltbWVkaWF0ZSBmb2N1cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MjYuMjgwOTQ1MTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzIsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzI6XFx0Y29uZmlnIE5FVF9WUkZcXG4gNDczOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXFxcIlxcbiA0NzQ6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSVBMRV9UQUJMRVNcXG4gNDc1OlxcdFxcdGRlcGVuZHMgb24gTkVUX0wzX01BU1RFUl9ERVZcXG4gNDc2OlxcdFxcdGRlcGVuZHMgb24gSVBWNl9NVUxUSVBMRV9UQUJMRVMgfHwgSVBWNj1uXFxuIDQ3NzpcXHRcXHRoZWxwXFxuIDQ3ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIG1hcHBpbmcgaW50ZXJmYWNlcyBpbnRvIFZSRidzLiBUaGVcXG4gNDc5OlxcdFxcdCAgc3VwcG9ydCBlbmFibGVzIFZSRiBkZXZpY2VzLlxcbiA0ODA6XFx0XFxuIDQ4MTpcXHRjb25maWcgVlNPQ0tNT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MjYuMjgxMDE2NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDg3OTkyMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSByZXF1ZXN0ZWQ6XG5cbioqTmV0d29yayBSb3V0aW5nIFRhYmxlIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBzb21lIGNyaXRpY2FsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRocmVlIGtleSBmbGFnczogYElQX01VTFRJUExFX1RBQkxFU2AsIGBORVRfTDNfTUFTVEVSX0RFVmAsIGFuZCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLiBUaGVzZSBhcmUgYWxsIGhpZ2hseSByZWxldmFudCB0byBob3cgYSBzeXN0ZW0gaGFuZGxlcyByb3V0aW5nIGluZm9ybWF0aW9uIGFuZCB0aGUgdXNlIG9mIG11bHRpcGxlIHJvdXRpbmcgdGFibGVzLiBXaXRoIGBJUF9NVUxUSVBMRV9UQUJMRVNgLCBJJ20gZW52aXNpb25pbmcgdGhlIHNldHVwIG9mIG11bHRpcGxlIHJvdXRpbmcgdGFibGVzIGZvciBJUHY0LiBUaGVuIGBJUFY2X01VTFRJUExFX1RBQkxFU2AgY29tZXMgaW50byBwbGF5IGFuZCBkZWFscyB3aXRoIHRoZSBzaW1pbGFyIHNldHVwIGZvciBJUHY2LCBhbGxvd2luZyBmb3IgbW9yZSBjb21wbGV4IHJvdXRpbmcgZGVjaXNpb25zIGJhc2VkIG9uIHBvbGljeSBvciBvdGhlciBjcml0ZXJpYS4gRmluYWxseSBgTkVUX0wzX01BU1RFUl9ERVZgIC0gdGhpcyBmbGFnIG1ha2VzIG1lIHRoaW5rIGFib3V0IGEgbWFzdGVyIG5ldHdvcmsgZGV2aWNlIGNvbnRyb2xsaW5nIGxheWVyIDMgcm91dGluZyBkZWNpc2lvbnMsIHdoaWNoIGNvdWxkIGJlIGV4dHJlbWVseSB1c2VmdWwgaW4gbWFueSBlbnZpcm9ubWVudHMuIEkgYW0gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHNjZW5hcmlvcyBpbiBteSBoZWFkLCB0aGlua2luZyBhYm91dCBwb2xpY3kgcm91dGluZywgVlJGLCBhbmQgaXNvbGF0aW9uLiBJdCdzIHJlYWxseSB0aGUgYmFzaXMgZm9yIGFsbCBzb3J0cyBvZiBpbnRlcmVzdGluZyBhcmNoaXRlY3R1cmVzLiBJJ20gd29uZGVyaW5nIGlmIEkgY2FuIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgYW5kIGhvdyB0aGV5IGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIyMiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MzIuMzY5MDExMzA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMzMjAxNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfTDNfTUFTVEVSX0RFVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDNtZGV2L0tjb25maWctNS1cXG5uZXQvbDNtZGV2L0tjb25maWc6Njpjb25maWcgTkVUX0wzX01BU1RFUl9ERVZcXG5uZXQvbDNtZGV2L0tjb25maWctNy1cXHRib29sIFxcXCJMMyBNYXN0ZXIgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjM0LjEwMjIxOTE4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDcwMTA1MTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTE2MDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjM4LjE3MjMyNzAyOVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbDNtZGV2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgNjpcXHRjb25maWcgTkVUX0wzX01BU1RFUl9ERVZcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkwzIE1hc3RlciBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVCB8fCBJUFY2XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGdsdWUgYmV0d2VlbiBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgZGV2aWNlXFxuICAxMTpcXHRcXHQgIGRyaXZlcnMgdG8gc3VwcG9ydCBMMyBtYXN0ZXIgZGV2aWNlcyBsaWtlIFZSRi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6MzguMTcyMzk0MjI5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjUxNTEwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgTmV0d29yayBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV0d29yayBzZXR1cCBhbmQgaXQncyBiZWNvbWluZyBjbGVhciB3aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlLiBGaXJzdCBhbmQgZm9yZW1vc3QsIEknbSBnb2luZyB0byBuZWVkIHRoZSBgTkVUX0wzX01BU1RFUl9ERVZgIGZ1bmN0aW9uYWxpdHkuIFRoYXQncyBub24tbmVnb3RpYWJsZSBmb3IgaG93IHRoaXMgc3lzdGVtIGlzIGFyY2hpdGVjdGVkLCBJIGNhbiBzZWUgdGhhdC4gQmV5b25kIHRoYXQsIGFuZCB0byBhbGxvdyBmb3IgcHJvcGVyIHJvdXRpbmcgYW5kIHRyYWZmaWMgbWFuYWdlbWVudCwgSSdsbCBkZWZpbml0ZWx5IG5lZWQgdG8gZW5hYmxlIGBJUF9NVUxUSVBMRV9UQUJMRVNgIGFuZCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLiBNdWx0aXBsZSByb3V0aW5nIHRhYmxlcyB3aWxsIHByb3ZpZGUgdGhlIGZsZXhpYmlsaXR5IHRoaXMgZGVtYW5kcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjQxLjUzNzU1MzcwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMjY5NDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NTY9Y29uZmlnIElQX0ZJQl9UUklFX1NUQVRTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTYyLVxcbm5ldC9pcHY0L0tjb25maWc6NjM6Y29uZmlnIElQX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY0L0tjb25maWctNjQtXFx0Ym9vbCBcXFwiSVA6IHBvbGljeSByb3V0aW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNTo0My4yNjAyNTcyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMTQ0NDY5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMjAyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NDUuNTc0NzA4MTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MzpcXHRjb25maWcgSVBfTVVMVElQTEVfVEFCTEVTXFxuICA2NDpcXHRcXHRib29sIFxcXCJJUDogcG9saWN5IHJvdXRpbmdcXFwiXFxuICA2NTpcXHRcXHRkZXBlbmRzIG9uIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgNjY6XFx0XFx0c2VsZWN0IEZJQl9SVUxFU1xcbiAgNjc6XFx0XFx0aGVscFxcbiAgNjg6XFx0XFx0ICBOb3JtYWxseSwgYSByb3V0ZXIgZGVjaWRlcyB3aGF0IHRvIGRvIHdpdGggYSByZWNlaXZlZCBwYWNrZXQgYmFzZWRcXG4gIDY5OlxcdFxcdCAgc29sZWx5IG9uIHRoZSBwYWNrZXQncyBmaW5hbCBkZXN0aW5hdGlvbiBhZGRyZXNzLiBJZiB5b3Ugc2F5IFkgaGVyZSxcXG4gIDcwOlxcdFxcdCAgdGhlIExpbnV4IHJvdXRlciB3aWxsIGFsc28gYmUgYWJsZSB0byB0YWtlIHRoZSBwYWNrZXQncyBzb3VyY2VcXG4gIDcxOlxcdFxcdCAgYWRkcmVzcyBpbnRvIGFjY291bnQuIEZ1cnRoZXJtb3JlLCB0aGUgVE9TIChUeXBlLU9mLVNlcnZpY2UpIGZpZWxkXFxuICA3MjpcXHRcXHQgIG9mIHRoZSBwYWNrZXQgY2FuIGJlIHVzZWQgZm9yIHJvdXRpbmcgZGVjaXNpb25zIGFzIHdlbGwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjQ1LjU3NDgwNjdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2ODMzNjIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodDpcblxuKipGb2N1c2luZyBJbjogVGhlIE5lZWQgZm9yIGBJUF9BRFZBTkNFRF9ST1VURVJgKipcblxuQWxyaWdodCwgbGV0J3MgY3V0IHRvIHRoZSBjaGFzZS4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgcHJldHR5IGNsZWFyOiBXZSdyZSBhdCBhIHBvaW50IHdoZXJlIHRoZSBzdGFuZGFyZCwgb3V0LW9mLXRoZS1ib3ggSVAgcm91dGluZyBzZXR1cCBqdXN0IHdvbid0IGN1dCBpdC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiwgYSBkZXNpZ24sIG9yIGEgc2V0IG9mIHJlcXVpcmVtZW50cyB0aGF0IGRlbWFuZHMgbW9yZSBncmFudWxhciBjb250cm9sLCBtb3JlIHNvcGhpc3RpY2F0ZWQgZmVhdHVyZSBzZXRzLCBhbmQgcHJvYmFibHkgbW9yZSByb2J1c3QgcGVyZm9ybWFuY2UgdGhhbiBhIGJhc2ljIHJvdXRlciBjYW4gcHJvdmlkZS4gVGhpcyBpc24ndCBhYm91dCBzaW1wbGUgY29ubmVjdGl2aXR5OyBpdCdzIGFib3V0IGFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2xzLCB0cmFmZmljIGVuZ2luZWVyaW5nLCBwZXJoYXBzIGV2ZW4gbmV0d29yayBhdXRvbWF0aW9uIGFuZCBwcm9ncmFtbWFiaWxpdHkuIFRoZSB2ZXJ5IGZhY3QgdGhhdCBgSVBfQURWQU5DRURfUk9VVEVSYCBpcyB0aGUgZm9jdXMsIHNheXMgc29tZXRoaW5nIGFib3V0IHRoZSBjb21wbGV4aXR5IHdlJ3JlIGRlYWxpbmcgd2l0aC4gSXQgY291bGQgYmUgc2NhbGUsIHNlY3VyaXR5LCBvciBhIG1peCBvZiBib3RoIHRoYXQgaXMgcHVzaGluZyB1cyBpbiB0aGF0IGRpcmVjdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI1OjQ5LjQ0MzE0NTA4M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMjk2ODc2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfQURWQU5DRURfUk9VVEVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9NT1jb25maWcgSVBfTVVMVElDQVNUXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE0LVxcbm5ldC9pcHY0L0tjb25maWc6MTU6Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxcbm5ldC9pcHY0L0tjb25maWctMTYtXFx0Ym9vbCBcXFwiSVA6IGFkdmFuY2VkIHJvdXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NTEuMTQ2MTE5NjJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEyODM1MDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEyNTUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNTo1My4yNzQ0NzQ0MTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0Y29uZmlnIElQX0FEVkFOQ0VEX1JPVVRFUlxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiSVA6IGFkdmFuY2VkIHJvdXRlclxcXCJcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgSWYgeW91IGludGVuZCB0byBydW4geW91ciBMaW51eCBib3ggbW9zdGx5IGFzIGEgcm91dGVyLCBpLmUuIGFzIGFcXG4gIDE5OlxcdFxcdCAgY29tcHV0ZXIgdGhhdCBmb3J3YXJkcyBhbmQgcmVkaXN0cmlidXRlcyBuZXR3b3JrIHBhY2tldHMsIHNheSBZOyB5b3VcXG4gIDIwOlxcdFxcdCAgd2lsbCB0aGVuIGJlIHByZXNlbnRlZCB3aXRoIHNldmVyYWwgb3B0aW9ucyB0aGF0IGFsbG93IG1vcmUgcHJlY2lzZVxcbiAgMjE6XFx0XFx0ICBjb250cm9sIGFib3V0IHRoZSByb3V0aW5nIHByb2Nlc3MuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgVGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbid0IGRpcmVjdGx5IGFmZmVjdCB0aGUga2VybmVsOlxcbiAgMjQ6XFx0XFx0ICBhbnN3ZXJpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NTMuMjc0NTc5NDg5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDE3NDUzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHR3bzpcblxuKipQcmVsaW1pbmFyeSBBc3Nlc3NtZW50IG9mIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gYElQX0FEVkFOQ0VEX1JPVVRFUmAgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaXQgc2VlbXMuIE5vIHJlYWwgZGVwZW5kZW5jaWVzIEkgY2FuIGltbWVkaWF0ZWx5IGlkZW50aWZ5LiBJdCBzaG91bGQgYmUgcHJldHR5IGVhc3kgdG8gd29yayB3aXRoIGluIGlzb2xhdGlvbiwgd2hpY2ggaXMgYWx3YXlzIG5pY2UuXG5cbk5vdywgd2hhdCBhYm91dCB0aGF0IGBJUFY2X01VTFRJUExFX1RBQkxFU2Agb3B0aW9uPyBOZWVkIHRvIGdpdmUgdGhhdCBvbmUgYSBiaXQgbW9yZSB0aG91Z2h0LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBhbmQgc2VlIGlmIGl0IGhpbmdlcyBvbiBhbnl0aGluZyBlbHNlIGluIHRoZSBzdGFjay4gUHJvYmFibHkgd29ydGggY3Jvc3MtcmVmZXJlbmNpbmcgdGhhdCB3aXRoIG90aGVyIGZlYXR1cmVzLiBHb3R0YSBtYWtlIHN1cmUgaXQgZG9lc24ndCBjcmVhdGUgYW55IHVuZXhwZWN0ZWQgY29uZmxpY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc1NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NTcuMTc2MzI3NjgxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4OTI4MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTIzMj1jb25maWcgSVBWNl9GT1VfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cXHRib29sIFxcXCJJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjU6NTguOTQ1MjY2MDM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyODUyMDM5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxMzA0NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjY6MDEuMjMwNDcyOTM3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM3LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM3OlxcdGNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbiAyMzg6XFx0XFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuIDIzOTpcXHRcXHRzZWxlY3QgRklCX1JVTEVTXFxuIDI0MDpcXHRcXHRoZWxwXFxuIDI0MTpcXHRcXHQgIFN1cHBvcnQgbXVsdGlwbGUgcm91dGluZyB0YWJsZXMuXFxuIDI0MjpcXHRcXG4gMjQzOlxcdGNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuIDI0NDpcXHRcXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbiAyNDU6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2X01VTFRJUExFX1RBQkxFU1xcbiAyNDY6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjowMS4yMzA1NDI4MjdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODk5ODAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgIGFwcGVhcnMgc3RyYWlnaHRmb3J3YXJkIOKAkyBubyBnb3RjaGFzIHRoZXJlLCBubyBoaWRkZW4gZGVwZW5kZW5jaWVzIHRvIHRyaXAgbWUgdXAuIFRoYXQncyBnb29kLCBhIGNsZWFuIGJpbGwgb2YgaGVhbHRoIG9uIHRoYXQgb25lLiBOb3csIGxldCdzIHBpdm90IGFuZCB0YWtlIGEgbG9vayBhdCBgTkVUX1NDSF9ORVRFTWAuIEkgd2FudCB0byBkaWcgaW50byB0aGF0IG9uZSBhIGJpdCBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjIzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjowNC42NDk1NDM3MDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5NTpcXHRjb25maWcgTkVUX1NDSF9ORVRFTVxcbiAxOTY6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgZW11bGF0b3IgKE5FVEVNKVxcXCJcXG4gMTk3OlxcdFxcdGhlbHBcXG4gMTk4OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW11bGF0ZSBuZXR3b3JrIGRlbGF5LCBsb3NzLCBhbmQgcGFja2V0XFxuIDE5OTpcXHRcXHQgIHJlLW9yZGVyaW5nLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCB0byBzaW11bGF0ZSBuZXR3b3JrcyB3aGVuXFxuIDIwMDpcXHRcXHQgIHRlc3RpbmcgYXBwbGljYXRpb25zIG9yIHByb3RvY29scy5cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDIwMzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHNjaF9uZXRlbS5cXG4gMjA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjowNC42NDk2NTEyODlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0Njg4NzA3MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgTmV0d29yayBTY2hlZHVsaW5nIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUgb3IgY29uZmlndXJhdGlvbiwgYW5kIGl0IGFsbCBoaW5nZXMgb24gYE5FVF9TQ0hFRGAuIFJpZ2h0LCB0aGF0J3MgdGhlIGtleS4gVGhhdCdzIHRoZSBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgYW5kL29yIGZhaXIgcXVldWVpbmcgbWVudSwgd2hpY2ggbWVhbnMgKmV2ZXJ5dGhpbmcqIHJlbGF0ZWQgdG8gaG93IG5ldHdvcmsgdHJhZmZpYyBnZXRzIHByaW9yaXRpemVkIGFuZCBoYW5kbGVkIGlzIGltcGFjdGVkIGJ5IHRoaXMuIFRoZSBpbXBsaWNhdGlvbnMgYXJlIHBvdGVudGlhbGx5IGh1Z2UsIGRlcGVuZGluZyBvbiB3aGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2l0aGluIGBORVRfU0NIRURgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB3aGF0J3MgKnVzaW5nKiBgTkVUX1NDSEVEYCB0byBkZXRlcm1pbmUgaXRzIGltcGFjdC4gSXQgYWZmZWN0cyBwZXJmb3JtYW5jZSBhbmQgd2hpY2ggYXBwcy9kYXRhIGhhdmUgcHJpb3JpdHkgb3ZlciBvdGhlcnMuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI2OjE1LjExODUyNTU4OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTU1OTMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NDSEVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnLTUtXFxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxcbm5ldC9zY2hlZC9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjoxNi44NTgwOTAwMjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA1NzQxMzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEzODAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjoyMi45MTU1MDUzODRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgNjpcXHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xcbiAgMTE6XFx0XFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXFxuICAxMjpcXHRcXHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXFxuICAxMzpcXHRcXHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xcbiAgMTQ6XFx0XFx0ICBcXFwiZmFpcmx5XFxcIiBoYXZlIGJlZW4gcHJvcG9zZWQuXFxuICAxNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjY6MjIuOTE1NTg4MTU0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzMxMjk2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTmV0d29yayBDb25maWd1cmF0aW9uIGFuZCBSb3V0aW5nKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBuZXR3b3JrIHNjaGVkdWxpbmcgYXNwZWN0cywgaGVuY2UgdGhlIG5lZWQgZm9yIGBORVRfU0NIRURgLiBOb3csIGxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9ucyBJJ20gd29ya2luZyB3aXRoOiBgSU5FVGAsIGBJUFY2YCwgYE5FVF9WUkZgLCBgTkVUX0wzX01BU1RFUl9ERVZgLCBgSVBfTVVMVElQTEVfVEFCTEVTYCwgYElQX0FEVkFOQ0VEX1JPVVRFUmAsIGBJUFY2X01VTFRJUExFX1RBQkxFU2AsIGBORVRfU0NIRURgLCBhbmQgYE5FVF9TQ0hfTkVURU1gLiBUaGlzIGdpdmVzIG1lIHRoZSBicm9hZCBwaWN0dXJlLlxuXG5NeSBtYWluIGFyZWEgb2YgY29uY2VybiBhcmUgdGhlc2Uga2V5IHN5bWJvbHM6IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAsIGFuZCwgaW1wb3J0YW50bHksIGBydDZfZGlzYWJsZV9pcGAuIEnigJltIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgcnQ2X2Rpc2FibGVfaXBgIGlzIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLiBZZXMsIHRoYXQncyByaWdodC4gYHJ0Nl9kaXNhYmxlX2lwYCBjYWxscyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBiZWhhdmlvciBJIGV4cGVjdC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsaW5nIGBydF9mbHVzaF9kZXZgLiBBaCwgSSB0aG91Z2h0IEkgc2F3IHNvbWV0aGluZy4uLiBgaXB2NF9kc3RfZGVzdHJveWAuLi4gbm8sIHdhaXQsIHRoYXQncyBub3QgcmlnaHQuIExldCBtZSByZS1leGFtaW5lIHRoZSBjYWxsZXJzIG9mIGBydF9mbHVzaF9kZXZgLiBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBjcnVjaWFsIGRlcGVuZGVuY3kgb3IgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTkyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjA6MjY6MjguMjg4NzIwNTAzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE2NTk1MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0X2ZsdXNoX2RldlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9yb3V0ZS5oPTEzMT12b2lkIHJ0X2NhY2hlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCk7XFxuaW5jbHVkZS9uZXQvcm91dGUuaDoxMzI6dm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9uZXQvcm91dGUuaC0xMzMtXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYz0xNTA2PXN0YXRpYyBpbnQgZmliX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MTctXFx0XFx0ZmliX2Rpc2FibGVfaXAoZGV2LCBldmVudCwgdHJ1ZSk7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTUxODpcXHRcXHRydF9mbHVzaF9kZXYoZGV2KTtcXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE5LVxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTU5MT1zdGF0aWMgdm9pZCBpcHY0X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU5Ni1cXG5uZXQvaXB2NC9yb3V0ZS5jOjE1OTc6dm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjozMC4zMDUzMjE3MDdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MzI1MTM5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZy4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGRhdGEgc3RydWN0dXJlIGZvciB1bmNhY2hlZCByb3V0ZXMuIEkgc2VlIGBydF9mbHVzaF9kZXZgIGJlaW5nIGNhbGxlZCBieSBgZmliX25ldGRldl9ldmVudGAsIHdoaWNoIGlzIGEgbm90aWZpZXIuIFRoYXQncyBmaW5lLCBpdCdzIG5vdCBhIGRpcmVjdCBBUEkgZW50cnlwb2ludCBhbmQgYGZpYl9uZXRkZXZfZXZlbnRgIGlzIHRoZSBvbmx5IGNhbGxlciBvZiBgcnRfZmx1c2hfZGV2YCwgc28gd2UncmUgZ29vZCB0byBpbmNsdWRlIGl0LiBTaW1pbGFybHksIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGlzIHVzZWQgaW4ga2V5IHBsYWNlcyBsaWtlIGBpcDZfcG9sX3JvdXRlYCwgYGljbXA2X2RzdF9hbGxvY2AsIGFuZCBgeGZybTZfZmlsbF9kc3RgIGFuZCBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGlzIHVzZWQgaW4gYSBzaW1pbGFyIHNldCBvZiBnb29kIGZ1bmN0aW9ucy5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBjb3JlIGNoYW5nZS4gVGhlIHBhdGNoIHNoaWZ0cyBmcm9tIGEgc2ltcGxlIHBlci1DUFUgbGlzdCB0byBhIHBlci1DUFUgaGFzaCB0YWJsZSBvZiBsaXN0cy4gSVB2NiBnZXRzIGFuIGV4dHJhIGBtaXNtYXRjaGAgbGlzdCB0aHJvd24gaW4uIFRoYXQgbWVhbnMgdGhlIGxvZ2ljIGluIGZ1bmN0aW9ucyBsaWtlIGBydF9mbHVzaF9kZXZgIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBhcmUgZ29pbmcgdG8gYmUgcmV3cml0dGVuIHRvIGl0ZXJhdGUgb3ZlciBidWNrZXRzIG9yIHRoYXQgbmV3IG1pc21hdGNoIGxpc3QsIHdoaWNoIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKi4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS5cblxuU28sIGxldCdzIGFzc2VtYmxlIG91ciBwbGFuLiBHaXZlbiB0aGlzIGZ1bmN0aW9uYWwgc2hpZnQgYW5kIHRoZSBsaWtlbHkgZWRnZSBjYXNlcywgSSB3YW50IHRvIGtlZXAgdGhlIHRlc3RpbmcgdmVyeSBmb2N1c2VkLiBUaGUgY29uZmlncyBzcGVjaWZpZWQgYXJlIHJlbGV2YW50LCBlc3BlY2lhbGx5IHRoZSBvbmVzIHRoYXQgdHJpZ2dlciBzcGVjaWZpYyBuZXR3b3JraW5nIGZlYXR1cmVzIGxpa2UgVlJGLCBOZXRlbSBhbmQgbXVsdGlwbGUgcm91dGluZyB0YWJsZXMuIFNvIHRoYXQgaW5jbHVkZXMgYElORVRgLCBgSVBWNmAsIGBORVRfVlJGYCwgYE5FVF9MM19NQVNURVJfREVWYCwgYElQX01VTFRJUExFX1RBQkxFU2AsIGBJUF9BRFZBTkNFRF9ST1VURVJgLCBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgLCBgTkVUX1NDSEVEYCBhbmQgYE5FVF9TQ0hfTkVURU1gLlxuXG5UaGUgY29yZSBzeW1ib2xzIEknbSBmb2N1c2luZyBvbiBmb3IgdGhpcyBwYXRjaCBhcmU6IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgYW5kIGBydDZfZGlzYWJsZV9pcGAuIFRoZSBWUkYgYW5kIE5ldGVtIGNvbmZpZ3MgbGlrZWx5IGhpbnQgYXQgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHdlJ2xsIHNlZSBpbnRlcmVzdGluZyBiZWhhdmlvciwgbGlrZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlcyBpbiBJUHY2LCB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHdlIHdhbnQgdG8gY2F0Y2guIFRoZSBwYXRjaCBjaGFuZ2VzIGhvdyB1bmNhY2hlZCByb3V0ZXMgYXJlIGhhbmRsZWQsIGFkZGVkLCBkZWxldGVkLCBhbmQgZmx1c2hlZCB3aGVuIGEgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZCwgc28gdGhpcyBpcyBjcml0aWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4ODQsIk91dHB1dFRva2VucyI6MjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI2OjQwLjkzNzg0MDYyOVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTI1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJORVRfVlJGXCIsXG4gICAgXCJORVRfTDNfTUFTVEVSX0RFVlwiLFxuICAgIFwiSVBfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJJUF9BRFZBTkNFRF9ST1VURVJcIixcbiAgICBcIklQVjZfTVVMVElQTEVfVEFCTEVTXCIsXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9TQ0hfTkVURU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLFxuICAgIFwicnRfZmx1c2hfZGV2XCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9hZGRcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2RlbFwiLFxuICAgIFwicnQ2X2Rpc2FibGVfaXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciB0cmFja2luZyB1bmNhY2hlZCByb3V0ZXMgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGZyb20gYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHRvIGEgcGVyLUNQVSBoYXNoIHRhYmxlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHVuY2FjaGVkIHJvdXRlcyBhcmUgYWRkZWQsIGRlbGV0ZWQsIGFuZCBmbHVzaGVkIHdoZW4gYSBuZXR3b3JrIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQuIFRoZSB0ZXN0IHNjcmlwdCBpbmRpY2F0ZXMgdGhhdCBWUkYgYW5kIE5FVEVNIGFyZSB1c2VkIHRvIHRyaWdnZXIgc3BlY2lmaWMgZWRnZSBjYXNlcyAobGlrZSBtaXNtYXRjaGVkIGRldmljZXMgaW4gSVB2NiksIHNvIGVuYWJsaW5nIHRob3NlIGNvbmZpZ3MgaXMgaW1wb3J0YW50IGZvciB0aG9yb3VnaCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIk5FVF9WUkZcIixcbiAgICBcIk5FVF9MM19NQVNURVJfREVWXCIsXG4gICAgXCJJUF9NVUxUSVBMRV9UQUJMRVNcIixcbiAgICBcIklQX0FEVkFOQ0VEX1JPVVRFUlwiLFxuICAgIFwiSVBWNl9NVUxUSVBMRV9UQUJMRVNcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX1NDSF9ORVRFTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0X2FkZF91bmNhY2hlZF9saXN0XCIsXG4gICAgXCJydF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiLFxuICAgIFwicnQ2X3VuY2FjaGVkX2xpc3RfZGVsXCIsXG4gICAgXCJydDZfZGlzYWJsZV9pcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGRhdGEgc3RydWN0dXJlIHVzZWQgZm9yIHRyYWNraW5nIHVuY2FjaGVkIHJvdXRlcyBpbiBib3RoIElQdjQgYW5kIElQdjYgZnJvbSBhIHNpbmdsZSBwZXItQ1BVIGxpc3QgdG8gYSBwZXItQ1BVIGhhc2ggdGFibGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBob3cgdW5jYWNoZWQgcm91dGVzIGFyZSBhZGRlZCwgZGVsZXRlZCwgYW5kIGZsdXNoZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gVGhlIHRlc3Qgc2NyaXB0IGluZGljYXRlcyB0aGF0IFZSRiBhbmQgTkVURU0gYXJlIHVzZWQgdG8gdHJpZ2dlciBzcGVjaWZpYyBlZGdlIGNhc2VzIChsaWtlIG1pc21hdGNoZWQgZGV2aWNlcyBpbiBJUHY2KSwgc28gZW5hYmxpbmcgdGhvc2UgY29uZmlncyBpcyBpbXBvcnRhbnQgZm9yIHRob3JvdWdoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI2OjQxLjAxOTM3Mzk1NVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NzY0MzMzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjo0MS4wMTk4ODI5NjVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA4NzU5MjA0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgdW5jYWNoZWRfdGFibGVgLCBgc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZWApIHdoaWNoIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCB2aWEgYERFRklORV9QRVJfQ1BVX0FMSUdORURgIChhbmQgdGh1cyB6ZXJvLWluaXRpYWxpemVkIGluIHRoZSBwZXItQ1BVIEJTUykgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkIGluIHRoZSBzdWJzeXN0ZW0gaW5pdCBmdW5jdGlvbnMgKGBpcF9ydF9pbml0YCwgYGlwNl9yb3V0ZV9pbml0YCkuIFxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byB1c2VyLWNvbnRyb2xsZWQgbGVuZ3RocyBvciBib3VuZHMsIGFuZCBubyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBsb2NraW5nLCBvciB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSByb3V0ZSBpcyBub3QgcHJvcGVybHkgZmx1c2hlZCksIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYmU0ZTdhYzRiN2NjMWJkMmNhY2MxYmZlZmRiYjY3ODQ1ZWJkMDM2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjA6MjQ6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggNjA0Y2M1MWRmZDliYy4uM2Y5YmMxZWM3MmNjZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbisrKyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC03NCw2ICs3NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZ21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21yb3V0ZS5oXHUwMDNlXG5AQCAtMTU1MiwxMSArMTU1MywyMiBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpO1xuKyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChSVF9VTkNBQ0hFRF9IQVNIX0JJVFMpXG4rXG4rc3RydWN0IHVuY2FjaGVkX3RhYmxlIHtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcbit9O1xuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xuIFxuIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG4ge1xuLVx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUpO1xuK1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KSxcbitcdFx0XHRcdCAgICAgIFJUX1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTg4LDE0ICsxNjAwLDE4IEBAIHZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpbnQgY3B1O1xuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4rXHRcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XG4rXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbitcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydF91bmNhY2hlZF90YWJsZSwgY3B1KTtcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldiwgUlRfVU5DQUNIRURfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuK1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgKzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4gXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuK1x0XHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xuK1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuK1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggMTZkZmFjNTRhMjU5YS4uODYwNTMwMDc0MDI3YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC00MCw2ICs0MCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG5AQCAtMTMzLDExICsxMzQsMjggQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0aGVhZDtcbiB9O1xuIFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9CSVRTXHQ2XG4rI2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFXHRCSVQoUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUylcbitcbitzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRV07XG4rXHQvKiBSb3V0ZXMgdGhhdCBtdXN0IGJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIHR3byBkaWZmZXJlbnQgZGV2aWNlcy4gKi9cbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcbitcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlKTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XG4rXG4rXHRpZiAocnQtXHUwMDNlcnQ2aV9pZGV2IFx1MDAyNlx1MDAyNiBydC1cdTAwM2VydDZpX2lkZXYtXHUwMDNlZGV2ICE9IHJ0X2RldilcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaDtcbitcdGVsc2VcbitcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKHJ0X2RldixcbitcdFx0XHRcdFx0ICAgICAgUlQ2X1VOQ0FDSEVEX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTcsNDAgKzE3NSw1MCBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuK1x0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbitcbitcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuK1x0XHRcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xuK1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4rXHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4rXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRpZiAoaGFuZGxlZClcbitcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4tXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuK1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsIFJUNl9VTkNBQ0hFRF9IQVNIX0JJVFMpXTtcbitcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2godWwsIGRldik7XG4rXHRcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLCBkZXYpO1xuIFx0fVxuIH1cbiBcbkBAIC02OTgyLDEwICs3MDEwLDE4IEBAIGludCBfX2luaXQgaXA2X3JvdXRlX2luaXQodm9pZClcbiAjZW5kaWZcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4rXHRcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcbitcdFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXHUwMDNjIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCsrKSB7XG4rXHRcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1tidWNrZXRdO1xuIFxuLVx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbi1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4rXHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRcdH1cbitcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2guaGVhZCk7XG4rXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoLmxvY2spO1xuIFx0fVxuIFxuIG91dDpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbmluZGV4IGI2NGRkODkxNjk5ZDMuLjRmNDA5ZDEzNWE5OWEgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuQEAgLTM4NSw2ICszODUsMzcgQEAgcnVuX3Rlc3RzKClcbiBcdGNsZWFudXBfeGZybV9kZXZcbiB9XG4gXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKClcbit7XG4rXHRsb2NhbCBzZW5kZXJfcGlkXG4rXHRsb2NhbCBiYWNrbG9nXG4rXHRsb2NhbCByY1xuK1xuK1x0IyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nXG4rXHQjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkXG4rXHQjIHJvdXRlcywgYW5kIG5ldGVtIGtlZXBzIHRoZW0gcmVmZXJlbmNlZCB3aGlsZSB0aGUgaW50ZXJmYWNlIGlzIGRlbGV0ZWQuXG4rXHRydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzXG4rXHRpcCAtNiAtbmV0bnMgXCIkaG9zdDFcIiByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDBcbitcdGlwIG5ldG5zIGV4ZWMgXCIkaG9zdDFcIiAuL21zZ196ZXJvY29weSAtNiBcXFxuK1x0XHQtUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFxcXG4rXHRcdFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbitcdHNlbmRlcl9waWQ9JCFcbitcdHdhaXQgXCIkc2VuZGVyX3BpZFwiXG4rXHRyYz0kP1xuK1x0bG9nX3Rlc3QgJHJjIDAgXCJDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcIlxuK1x0WyAkcmMgLW5lIDAgXSBcdTAwMjZcdTAwMjYgcmV0dXJuXG4rXG4rXHRiYWNrbG9nPSQoaXAgbmV0bnMgZXhlYyBcIiRob3N0MVwiIHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSlcbitcdGlmICEgZWNobyBcIiRiYWNrbG9nXCIgfCBncmVwIC1FcSAnYmFja2xvZyAuKiBbMS05XVswLTldKnAnOyB0aGVuXG4rXHRcdGxvZ190ZXN0IDEgMCBcIlJldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcIlxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRsb2dfdGVzdCAwIDAgXCJSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXCJcbitcbitcdHJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDBcbitcdGxvZ190ZXN0ICQ/IDAgXCJGbHVzaCB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rfVxuK1xuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIyB1c2FnZVxuIFxuQEAgLTQyNSw2ICs0NTYsMTAgQEAgZWNob1xuIGVjaG8gXCJuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlXCJcbiBydW5fdGVzdHNcbiBcbitlY2hvXG4rZWNobyBcIlVuY2FjaGVkIElQdjYgcm91dGUgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcIlxuK3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaFxuK1xuIHByaW50ZiBcIlxcblRlc3RzIHBhc3NlZDogJTNkXFxuXCIgJHtuc3VjY2Vzc31cbiBwcmludGYgXCJUZXN0cyBmYWlsZWQ6ICUzZFxcblwiICAgJHtuZmFpbH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIwOjI2OjQxLjAxOTg4MzkwNVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg3NTg5OTExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBOZWVkc0tNU0FOPWZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBLTVNBTiBpc24ndCBuZWNlc3NhcnkgaGVyZS4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYCDigJMgcHJldHR5IGZ1bmRhbWVudGFsIHJvdXRpbmcgY29kZS4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHN3aXRjaCBmcm9tIGEgc2ltcGxlIGxpbmtlZCBsaXN0IChgcnRfdW5jYWNoZWRfbGlzdGApIHRvIGEgaGFzaCB0YWJsZSBvZiBsaXN0cywgcGVyIENQVSwga2V5ZWQgb2ZmIGBkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdClgLiAgVGhpcyBoYXNoIHRhYmxlIHN0cnVjdHVyZSBoYXMgYSBtYXRjaGluZyBzdHJ1Y3R1cmUgZm9yIElQdjYuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhpcyBpcyBhaW1lZCBhdCBpbXByb3Zpbmcgb3IgcmVzb2x2aW5nIGlzc3VlcyByZWxhdGVkIHRvIGZsdXNoaW5nIHRoZXNlIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgcmVtb3ZlZC5cblxuSW1wb3J0YW50bHksIHRoaXMgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZSBjaGFuZ2UuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgd2hpY2ggaXMgYSBtYXNzaXZlIHJlbGllZi4gVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnRyb2R1Y2UgYW55IGNoYW5nZXMgdGhhdCBpbnRlcmFjdCB3aXRoIHVzZXItY29udHJvbGxlZCBsZW5ndGhzIG9yIGJvdW5kcy4gIFRoYXQgZWxpbWluYXRlcyBhIHdob2xlIGNsYXNzIG9mIHBvdGVudGlhbCBLTVNBTiBjb25jZXJucyByaWdodCBhd2F5LlxuXG5JJ20gdmVyaWZ5aW5nIHRoYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbGlrZSBgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYXJlIGRlZmluZWQgYW5kIGFsbG9jYXRlZCB3aXRoIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYC4gIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCBpcyBrbm93biB0byB6ZXJvLWluaXRpYWxpemUgdGhlIG1lbW9yeSwgbWVhbmluZyB3ZSdyZSBzdGFydGluZyBmcm9tIGEgc2FmZSBzdGF0ZS4gVGhlIGBidWNrZXRzYCBhcnJheSB3aXRoaW4gdGhlIGhhc2ggdGFibGUgaXMgaW5pdGlhbGl6ZWQgaW4gYGlwX3J0X2luaXRgIGFuZCBgaXA2X3JvdXRlX2luaXRgIHdpdGggYElOSVRfTElTVF9IRUFEYCBhbmQgYHNwaW5fbG9ja19pbml0YCwgd2hpY2ggYXJlIHByZXR0eSBzdGFuZGFyZCBhbmQgc2FmZSBpbml0aWFsaXphdGlvbiBwcmFjdGljZXMuIEknbSBub3Qgc2VlaW5nIGFueSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIGFuZCB0aGVyZSBpcyBubyB1c2VyIHNwYWNlIGludGVyYWN0aW9uLlxuXG5JIGhhdmUgZG91YmxlLWNoZWNrZWQgdGhlIGRpZmYgYW5kIHZlcmlmaWVkIHRoYXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBjaGFuZ2UgaXMgY29udGFpbmVkIGludGVybmFsbHksIGFuZCBvcGVyYXRlcyB3aXRoIHplcm8taW5pdGlhbGl6ZWQgbWVtb3J5IHRoYXQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIEkgYW0gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcmlzayBoZXJlLCBpZiBhbnksIGxpZXMgaW4gdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsaXN0IG1hbmlwdWxhdGlvbiwgbG9ja2luZyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIEtBU0FOLCBhbmQgTE9DS0RFUCBhcmUgc2V0IHVwIHRvIGhhbmRsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNCwiT3V0cHV0VG9rZW5zIjoyNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMDoyNjo1MS44OTU3ODY2OTZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCB0cmFja2luZyBvZiB1bmNhY2hlZCByb3V0ZXMgaW4gSVB2NCBhbmQgSVB2NiBieSByZXBsYWNpbmcgYSBzaW5nbGUgcGVyLUNQVSBsaXN0IHdpdGggYSBwZXItQ1BVIGhhc2ggdGFibGUgKGFuZCBhbiBhZGRpdGlvbmFsIGBtaXNtYXRjaGAgbGlzdCBmb3IgSVB2NikuIFRoaXMgaXMgZG9uZSB0byBvcHRpbWl6ZSBvciBmaXggdGhlIGZsdXNoaW5nIG9mIHVuY2FjaGVkIHJvdXRlcyB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLiBcXG5cXG5UaGUgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgdW5jYWNoZWRfdGFibGVgLCBgc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZWApIHdoaWNoIGFyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCB2aWEgYERFRklORV9QRVJfQ1BVX0FMSUdORURgIChhbmQgdGh1cyB6ZXJvLWluaXRpYWxpemVkIGluIHRoZSBwZXItQ1BVIEJTUykgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkIGluIHRoZSBzdWJzeXN0ZW0gaW5pdCBmdW5jdGlvbnMgKGBpcF9ydF9pbml0YCwgYGlwNl9yb3V0ZV9pbml0YCkuIFxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY2hhbmdlcyB0byB1c2VyLWNvbnRyb2xsZWQgbGVuZ3RocyBvciBib3VuZHMsIGFuZCBubyBjb21wbGV4IGFsbG9jYXRpb25zIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxpc3QgbWFuaXB1bGF0aW9uLCBsb2NraW5nLCBvciB1c2UtYWZ0ZXItZnJlZSAoZS5nLiwgaWYgYSByb3V0ZSBpcyBub3QgcHJvcGVybHkgZmx1c2hlZCksIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgdHJhY2tpbmcgb2YgdW5jYWNoZWQgcm91dGVzIGluIElQdjQgYW5kIElQdjYgYnkgcmVwbGFjaW5nIGEgc2luZ2xlIHBlci1DUFUgbGlzdCB3aXRoIGEgcGVyLUNQVSBoYXNoIHRhYmxlIChhbmQgYW4gYWRkaXRpb25hbCBgbWlzbWF0Y2hgIGxpc3QgZm9yIElQdjYpLiBUaGlzIGlzIGRvbmUgdG8gb3B0aW1pemUgb3IgZml4IHRoZSBmbHVzaGluZyBvZiB1bmNhY2hlZCByb3V0ZXMgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZC4gXFxuXFxuVGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IHVuY2FjaGVkX3RhYmxlYCwgYHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGVgKSB3aGljaCBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgdmlhIGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCAoYW5kIHRodXMgemVyby1pbml0aWFsaXplZCBpbiB0aGUgcGVyLUNQVSBCU1MpIGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBpbiB0aGUgc3Vic3lzdGVtIGluaXQgZnVuY3Rpb25zIChgaXBfcnRfaW5pdGAsIGBpcDZfcm91dGVfaW5pdGApLiBcXG5cXG5UaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGNoYW5nZXMgdG8gdXNlci1jb250cm9sbGVkIGxlbmd0aHMgb3IgYm91bmRzLCBhbmQgbm8gY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsaXN0IG1hbmlwdWxhdGlvbiwgbG9ja2luZywgb3IgdXNlLWFmdGVyLWZyZWUgKGUuZy4sIGlmIGEgcm91dGUgaXMgbm90IHByb3Blcmx5IGZsdXNoZWQpLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflows2f55[1] Phase: Succeeded StartedAt: 2026-08-26 20:27:03 +0000 UTC FinishedAt: 2026-08-26 20:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 20:27:03 +0000 UTC FinishedAt: 2026-08-26 20:27:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2] Phase: Succeeded StartedAt: 2026-08-26 20:27:03 +0000 UTC FinishedAt: 2026-08-27 00:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 20:27:03 +0000 UTC FinishedAt: 2026-08-27 00:06:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 20:27:03 +0000 UTC FinishedAt: 2026-08-26 20:27:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 20:27:03 +0000 UTC FinishedAt: 2026-08-26 20:27:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflows2f55/series-workflows2f55-convert-artifact-1540628977/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 20:27:13 +0000 UTC FinishedAt: 2026-08-26 20:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 20:27:13 +0000 UTC FinishedAt: 2026-08-26 20:43:26 +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:*fe975eab-8e91-4848-931f-d407ca59d65b,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-workflows2f55/series-workflows2f55-convert-artifact-1540628977/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": "ffa8cab1-0707-4b7e-b284-c8a2aefdebf3", "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-workflows2f55/series-workflows2f55-build-action-2285820959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 20:27:13 +0000 UTC FinishedAt: 2026-08-26 20:43:16 +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:*fe975eab-8e91-4848-931f-d407ca59d65b,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-workflows2f55/series-workflows2f55-convert-artifact-1540628977/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": "ffa8cab1-0707-4b7e-b284-c8a2aefdebf3", "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-workflows2f55/series-workflows2f55-build-action-2285820959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 20:43:26 +0000 UTC FinishedAt: 2026-08-26 20:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 20:43:26 +0000 UTC FinishedAt: 2026-08-26 20:43:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 20:43:26 +0000 UTC FinishedAt: 2026-08-26 20:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 20:43:26 +0000 UTC FinishedAt: 2026-08-26 20:43:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflows2f55/series-workflows2f55-convert-artifact-394207812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 20:43:36 +0000 UTC FinishedAt: 2026-08-26 20:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 20:43:36 +0000 UTC FinishedAt: 2026-08-26 20:45:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ffa8cab1-0707-4b7e-b284-c8a2aefdebf3,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-workflows2f55/series-workflows2f55-build-action-2285820959/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-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 20:45:39 +0000 UTC FinishedAt: 2026-08-26 20:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 20:45:39 +0000 UTC FinishedAt: 2026-08-26 20:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 20:45:39 +0000 UTC FinishedAt: 2026-08-26 21:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 20:45:39 +0000 UTC FinishedAt: 2026-08-26 21:02:09 +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:*fe975eab-8e91-4848-931f-d407ca59d65b,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-workflows2f55/series-workflows2f55-convert-artifact-394207812/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": "1f6ba13a-fb07-45a5-987c-74ffb90b725b", "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-workflows2f55/series-workflows2f55-build-action-2264222288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 20:45:39 +0000 UTC FinishedAt: 2026-08-26 21:01:59 +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:*fe975eab-8e91-4848-931f-d407ca59d65b,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-workflows2f55/series-workflows2f55-convert-artifact-394207812/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": "1f6ba13a-fb07-45a5-987c-74ffb90b725b", "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-workflows2f55/series-workflows2f55-build-action-2264222288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 21:02:09 +0000 UTC FinishedAt: 2026-08-26 21:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 21:02:09 +0000 UTC FinishedAt: 2026-08-26 21:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 21:02:09 +0000 UTC FinishedAt: 2026-08-26 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 21:02:09 +0000 UTC FinishedAt: 2026-08-26 21:03:59 +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:*1f6ba13a-fb07-45a5-987c-74ffb90b725b,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-workflows2f55/series-workflows2f55-build-action-2264222288/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-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 21:04:09 +0000 UTC FinishedAt: 2026-08-27 00:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 21:04:09 +0000 UTC FinishedAt: 2026-08-27 00:06:13 +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":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"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:*ffa8cab1-0707-4b7e-b284-c8a2aefdebf3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1f6ba13a-fb07-45a5-987c-74ffb90b725b,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-workflows2f55/series-workflows2f55-build-action-2285820959/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-workflows2f55/series-workflows2f55-build-action-2264222288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 21:04:09 +0000 UTC FinishedAt: 2026-08-26 21:04:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 21:04:09 +0000 UTC FinishedAt: 2026-08-26 21:04:15 +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":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"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-workflows2f55/series-workflows2f55-convert-artifact-1893437773/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 21:04:09 +0000 UTC FinishedAt: 2026-08-26 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 21:04:09 +0000 UTC FinishedAt: 2026-08-26 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 21:04:09 +0000 UTC FinishedAt: 2026-08-26 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 21:04:20 +0000 UTC FinishedAt: 2026-08-27 00:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2f55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_del","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","NET_VRF","NET_L3_MASTER_DEV","IP_MULTIPLE_TABLES","IP_ADVANCED_ROUTER","IPV6_MULTIPLE_TABLES","NET_SCHED","NET_SCH_NETEM"],"series_id":"dc5677d3-bbc1-492d-a4bb-545b42e2d90a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 21:04:20 +0000 UTC FinishedAt: 2026-08-27 00:06:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ffa8cab1-0707-4b7e-b284-c8a2aefdebf3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1f6ba13a-fb07-45a5-987c-74ffb90b725b,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-workflows2f55/series-workflows2f55-build-action-2285820959/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-workflows2f55/series-workflows2f55-build-action-2264222288/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-workflows2f55/series-workflows2f55-convert-artifact-1893437773/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,}