Name: series-workflowzk92h Phase: Succeeded StartedAt: 2026-08-08 21:11:15 +0000 UTC FinishedAt: 2026-08-09 01:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[0] Phase: Succeeded StartedAt: 2026-08-08 21:11:15 +0000 UTC FinishedAt: 2026-08-08 21:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 21:11:15 +0000 UTC FinishedAt: 2026-08-08 21:18:08 +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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_RAW_GADGET", "USB_DUMMY_HCD", "USB_GADGET", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_RAW_GADGET", "USB_DUMMY_HCD", "USB_GADGET", "USB" ], "series_id": "a86dc359-008d-4864-a62b-9f5bd248813e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "raw_ioctl", "raw_release", "gadget_bind", "gadget_unbind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9SQVdfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9EVU1NWV9IQ0QmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYXdfaW9jdGwmIzM0OywKICAgICYjMzQ7cmF3X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Z2FkZ2V0X2JpbmQmIzM0OywKICAgICYjMzQ7Z2FkZ2V0X3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYHJ3c2VtYCkgdG8gcHJvdGVjdCBgZGV2LVx1MDAzZWdhZGdldGAgYW5kIGVuZHBvaW50IHJlcXVlc3RzIGZyb20gY29uY3VycmVudCBhY2Nlc3MgZHVyaW5nIGBnYWRnZXRfdW5iaW5kKClgLiBUaGlzIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgd2hlbiBlbmRwb2ludHMgYXJlIGFjY2Vzc2VkIG9yIHJlcXVlc3RzIGFyZSBxdWV1ZWQvZGVxdWV1ZWQgd2hpbGUgdGhlIGdhZGdldCBpcyB1bmJpbmRpbmcuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBjb25jdXJyZW5jeSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAobGlrZSBMT0NLREVQKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYWxsb2NhdGlvbnMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGluIHRoZSBVU0IgcmF3IGdhZGdldCBkcml2ZXIgKGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jKSBieSBpbnRyb2R1Y2luZyBhIG5ldyByd19zZW1hcGhvcmUgKHJ3c2VtKSB0byBwcm90ZWN0IHRoZSBkZXYtXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJiZGRlNjYzYzRjYTk5ZWFiMjdkYzY3ZWRlMWUzMjVkZmQ4OTY5OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjE0OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbmluZGV4IDRmZWJmOGRhYzdjYTUuLjEzOWEwZmEwY2VlYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbkBAIC0xNjAsNiAmIzQzOzE2MCw3IEBAIGVudW0gZGV2X3N0YXRlIHtcbiBzdHJ1Y3QgcmF3X2RldiB7XG4gXHRzdHJ1Y3Qga3JlZlx0XHRcdGNvdW50O1xuIFx0c3BpbmxvY2tfdFx0XHRcdGxvY2s7XG4mIzQzO1x0c3RydWN0IHJ3X3NlbWFwaG9yZVx0XHRyd3NlbTtcbiBcbiBcdGNvbnN0IGNoYXJcdFx0XHQqdWRjX25hbWU7XG4gXHRzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXJcdGRyaXZlcjtcbkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldiAqZGV2X25ldyh2b2lkKVxuIFx0LyogTWF0Y2hlcyBrcmVmX3B1dCgpIGluIHJhd19yZWxlYXNlKCkuICovXG4gXHRrcmVmX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWNvdW50KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpbml0X3J3c2VtKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2ZGV2LVx1MDAzZWVwMF9kb25lKTtcbiBcdHJhd19ldmVudF9xdWV1ZV9pbml0KFx1MDAyNmRldi1cdTAwM2VxdWV1ZSk7XG4gXHRkZXYtXHUwMDNlZHJpdmVyX2lkX251bWJlciA9IC0xO1xuQEAgLTIxMiwyMCAmIzQzOzIxNCw3IEBAIHN0YXRpYyB2b2lkIGRldl9mcmVlKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0a2ZyZWUoZGV2LVx1MDAzZWRyaXZlci5kcml2ZXIubmFtZSk7XG4gXHRpZiAoZGV2LVx1MDAzZWRyaXZlcl9pZF9udW1iZXIgXHUwMDNlPSAwKVxuIFx0XHRpZGFfZnJlZShcdTAwMjZkcml2ZXJfaWRfbnVtYmVycywgZGV2LVx1MDAzZWRyaXZlcl9pZF9udW1iZXIpO1xuLVx0aWYgKGRldi1cdTAwM2VyZXEpIHtcbi1cdFx0aWYgKGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZClcbi1cdFx0XHR1c2JfZXBfZGVxdWV1ZShkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWVwMCwgZGV2LVx1MDAzZXJlcSk7XG4tXHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuLVx0fVxuIFx0cmF3X2V2ZW50X3F1ZXVlX2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VlcHNfbnVtOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0dXNiX2VwX2Rpc2FibGUoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4tXHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuLVx0XHRrZnJlZShkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpO1xuLVx0XHRkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7XG4tXHR9XG4gXHRrZnJlZShkZXYpO1xuIH1cbiBcbkBAIC0zMTYsNiAmIzQzOzMwNSwxMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4gXHRyZXQgPSByYXdfcXVldWVfZXZlbnQoZGV2LCBVU0JfUkFXX0VWRU5UX0NPTk5FQ1QsIDAsIE5VTEwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRkZXZfZXJyKFx1MDAyNmdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBxdWV1ZSBjb25uZWN0IGV2ZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRkZXYtXHUwMDNlZ2FkZ2V0ID0gTlVMTDtcbiYjNDM7XHRcdGRldi1cdTAwM2VyZXEgPSBOVUxMO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCByZXEpO1xuIFx0XHRzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC0zMjgsOCAmIzQzOzMyMiwzMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4gc3RhdGljIHZvaWQgZ2FkZ2V0X3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxuIHtcbiBcdHN0cnVjdCByYXdfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCBpO1xuIFxuIFx0c2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGRvd25fd3JpdGUoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7XG4mIzQzO1x0ZGV2LVx1MDAzZWdhZGdldCA9IE5VTEw7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlZXBzX251bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnN0YXRlICE9IFNUQVRFX0VQX0RJU0FCTEVEKSB7XG4mIzQzO1x0XHRcdHVzYl9lcF9kaXNhYmxlKGRldi1cdTAwM2VlcHNbaV0uZXApO1xuJiM0MztcdFx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VlcHNbaV0uZXAsIGRldi1cdTAwM2VlcHNbaV0ucmVxKTtcbiYjNDM7XHRcdFx0a2ZyZWUoZGV2LVx1MDAzZWVwc1tpXS5lcC1cdTAwM2VkZXNjKTtcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZGV2LVx1MDAzZXJlcSkge1xuJiM0MztcdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiYjNDM7XHRcdGRldi1cdTAwM2VyZXEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHR1cF93cml0ZShcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcbiBcdC8qIE1hdGNoZXMga3JlZl9nZXQoKSBpbiBnYWRnZXRfYmluZCgpLiAqL1xuIFx0a3JlZl9wdXQoXHUwMDI2ZGV2LVx1MDAzZWNvdW50LCBkZXZfZnJlZSk7XG4gfVxuQEAgLTQ1MCwxMCAmIzQzOzQ2Nyw2IEBAIHN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9DTE9TRUQ7XG4tXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRnb3RvIG91dF9wdXQ7XG4tXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWdhZGdldF9yZWdpc3RlcmVkKVxuIFx0XHR1bnJlZ2lzdGVyID0gdHJ1ZTtcbiBcdGRldi1cdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuQEAgLTYzNywxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFxuIFx0ZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlKTtcbiBcdGlmIChQVFJfRVJSKGV2ZW50KSA9PSAtRUlOVFIpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCYjMzQ7ZXZlbnQgZmV0Y2hpbmcgaW50ZXJydXB0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtldmVudCBmZXRjaGluZyBpbnRlcnJ1cHRlZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVFI7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKGV2ZW50KSkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXG5cJiMzNDspO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRkZXYtXHUwMDNlc3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEO1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtNjk4LDEzICYjNDM7NzExLDEzIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmICgoaW4gXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlZXAwX2luX3BlbmRpbmcpIHx8XG4gXHRcdFx0KCFpbiBcdTAwMjZcdTAwMjYgIWRldi1cdTAwM2VlcDBfb3V0X3BlbmRpbmcpKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuQEAgLTcyNSw5ICYjNDM7NzM4LDE3IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcdGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZCA9IHRydWU7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4mIzQzO1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDtcbiYjNDM7XHR9XG4gXHRyZXQgPSB1c2JfZXBfcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEsIEdGUF9LRVJORUwpO1xuJiM0MztcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuQEAgLTczNSw4ICYjNDM7NzU2LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcbiBcdHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZShcdTAwMjZkZXYtXHUwMDNlZXAwX2RvbmUpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDt3YWl0IGludGVycnVwdGVkXFxuXCYjMzQ7KTtcbi1cdFx0dXNiX2VwX2RlcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDt3YWl0IGludGVycnVwdGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcdFx0aWYgKGRldi1cdTAwM2VnYWRnZXQpXG4mIzQzO1x0XHRcdHVzYl9lcF9kZXF1ZXVlKGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiYjNDM7XHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZkZXYtXHUwMDNlZXAwX2RvbmUpO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRpZiAoZGV2LVx1MDAzZWVwMF9zdGF0dXMgPT0gLUVDT05OUkVTRVQpXG5AQCAtODEyLDE5ICYjNDM7ODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwMF91cmJfcXVldWVkKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKCFkZXYtXHUwMDNlZXAwX2luX3BlbmRpbmcgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlZXAwX291dF9wZW5kaW5nKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIG5vIHJlcXVlc3QgcGVuZGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIG5vIHJlcXVlc3QgcGVuZGluZ1xcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0cmV0ID0gdXNiX2VwX3NldF9oYWx0KGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCB1c2JfZXBfc2V0X2hhbHQgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4gXG4gXHRpZiAoZGV2LVx1MDAzZWVwMF9pbl9wZW5kaW5nKVxuQEAgLTg4NCwxMyAmIzQzOzkwOCwxMyBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9lbmFibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdFx0ZXAtXHUwMDNlZXAtXHUwMDNlZGVzYyA9IGRlc2M7XG4gXHRcdHJldCA9IHVzYl9lcF9lbmFibGUoZXAtXHUwMDNlZXApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCYjMzQ7ZmFpbCwgdXNiX2VwX2VuYWJsZSByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbiBcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdGVwLVx1MDAzZXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLVx1MDAzZWVwLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFlcC1cdTAwM2VyZXEpIHtcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCB1c2JfZXBfYWxsb2NfcmVxdWVzdCBmYWlsZWRcXG5cJiMzNDspO1xuIFx0XHRcdHVzYl9lcF9kaXNhYmxlKGVwLVx1MDAzZWVwKTtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTkwMywxMCAmIzQzOzkyNywxMCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9lbmFibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdH1cbiBcbiBcdGlmICghZXBfcHJvcHNfbWF0Y2hlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGJhZCBlbmRwb2ludCBkZXNjcmlwdG9yXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdH0gZWxzZSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIG5vIGVuZHBvaW50cyBhdmFpbGFibGVcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCBubyBlbmRwb2ludHMgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0fVxuIFxuQEAgLTkzOSwxOCAmIzQzOzk2MywxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIGRpc2FibGUgYWxyZWFkeSBpbiBwcm9ncmVzc1xcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnVyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuQEAgLTk1OCwxMyAmIzQzOzk4MiwyNSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IHRydWU7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4mIzQzO1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuIFx0dXNiX2VwX2Rpc2FibGUoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4mIzQzO1x0dXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtXHUwMDNlZXBzW2ldLmVwLCBkZXYtXHUwMDNlZXBzW2ldLnJlcSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0dXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtXHUwMDNlZXBzW2ldLmVwLCBkZXYtXHUwMDNlZXBzW2ldLnJlcSk7XG4gXHRrZnJlZShkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpO1xuIFx0ZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEO1xuIFx0ZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtOTk0LDI0ICYjNDM7MTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCBkaXNhYmxlIGlzIGluIHByb2dyZXNzXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0udXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCYjMzQ7ZmFpbCwgd2FpdGluZyBmb3IgdXJiIGNvbXBsZXRpb25cXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCBjYW4mIzM5O3QgaGFsdC93ZWRnZSBJU08gZW5kcG9pbnRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTAyMCwxNyAmIzQzOzEwNTYsMTcgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2Uoc3RydWN0IHJhd19kZXYgKmRldixcbiBcdGlmIChzZXQgXHUwMDI2XHUwMDI2IGhhbHQpIHtcbiBcdFx0cmV0ID0gdXNiX2VwX3NldF9oYWx0KGRldi1cdTAwM2VlcHNbaV0uZXApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbiBcdH0gZWxzZSBpZiAoIXNldCBcdTAwMjZcdTAwMjYgaGFsdCkge1xuIFx0XHRyZXQgPSB1c2JfZXBfY2xlYXJfaGFsdChkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCB1c2JfZXBfY2xlYXJfaGFsdCByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbiBcdH0gZWxzZSBpZiAoc2V0IFx1MDAyNlx1MDAyNiAhaGFsdCkge1xuIFx0XHRyZXQgPSB1c2JfZXBfc2V0X3dlZGdlKGRldi1cdTAwM2VlcHNbaV0uZXApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIHVzYl9lcF9zZXRfd2VkZ2UgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4gXHR9XG4gXG5AQCAtMTA3NSwyOSAmIzQzOzExMTEsMjkgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChpby1cdTAwM2VlcCBcdTAwM2U9IGRldi1cdTAwM2VlcHNfbnVtKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGludmFsaWQgZW5kcG9pbnRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCBpbnZhbGlkIGVuZHBvaW50XFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0ZXAgPSBcdTAwMjZkZXYtXHUwMDNlZXBzW2lvLVx1MDAzZWVwXTtcbiBcdGlmIChlcC1cdTAwM2VzdGF0ZSAhPSBTVEFURV9FUF9FTkFCTEVEKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChlcC1cdTAwM2VkaXNhYmxpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIGVuZHBvaW50IGlzIGFscmVhZHkgYmVpbmcgZGlzYWJsZWRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChlcC1cdTAwM2V1cmJfcXVldWVkKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGluICE9IHVzYl9lbmRwb2ludF9kaXJfaW4oZXAtXHUwMDNlZXAtXHUwMDNlZGVzYykpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuQEAgLTExMTEsOSAmIzQzOzExNDcsMTcgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRlcC1cdTAwM2V1cmJfcXVldWVkID0gdHJ1ZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiYjNDM7XHRkb3duX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiYjNDM7XHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuJiM0MztcdH1cbiBcdHJldCA9IHVzYl9lcF9xdWV1ZShlcC1cdTAwM2VlcCwgZXAtXHUwMDNlcmVxLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDtcbkBAIC0xMTIxLDggJiM0MzsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFxuIFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRvbmUpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDt3YWl0IGludGVycnVwdGVkXFxuXCYjMzQ7KTtcbi1cdFx0dXNiX2VwX2RlcXVldWUoZXAtXHUwMDNlZXAsIGVwLVx1MDAzZXJlcSk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O3dhaXQgaW50ZXJydXB0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4mIzQzO1x0XHRpZiAoZGV2LVx1MDAzZWdhZGdldClcbiYjNDM7XHRcdFx0dXNiX2VwX2RlcXVldWUoZXAtXHUwMDNlZXAsIGVwLVx1MDAzZXJlcSk7XG4mIzQzO1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZG9uZSk7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGlmIChlcC1cdTAwM2VzdGF0dXMgPT0gLUVDT05OUkVTRVQpXG5AQCAtMTIxNSwxMiAmIzQzOzEyNjIsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4tXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgZ2FkZ2V0IGlzIG5vdCBib3VuZFxcblwmIzM0Oyk7XG4tXHRcdHJldCA9IC1FQlVTWTtcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4tXHR1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtXHUwMDNlZ2FkZ2V0LCAyICogdmFsdWUpO1xuJiM0MztcdHJldCA9IHVzYl9nYWRnZXRfdmJ1c19kcmF3KGRldi1cdTAwM2VnYWRnZXQsIDIgKiB2YWx1ZSk7XG4mIzQzO1x0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9SQVdfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9EVU1NWV9IQ0QmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYXdfaW9jdGwmIzM0OywKICAgICYjMzQ7cmF3X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Z2FkZ2V0X2JpbmQmIzM0OywKICAgICYjMzQ7Z2FkZ2V0X3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGluIHRoZSBVU0IgcmF3IGdhZGdldCBkcml2ZXIgKGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jKSBieSBpbnRyb2R1Y2luZyBhIG5ldyByd19zZW1hcGhvcmUgKHJ3c2VtKSB0byBwcm90ZWN0IHRoZSBkZXYtXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiZGRlNjYzYzRjYTk5ZWFiMjdkYzY3ZWRlMWUzMjVkZmQ4OTY5OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjE0OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwppbmRleCA0ZmViZjhkYWM3Y2E1Li4xMzlhMGZhMGNlZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwpAQCAtMTYwLDYgJiM0MzsxNjAsNyBAQCBlbnVtIGRldl9zdGF0ZSB7CiBzdHJ1Y3QgcmF3X2RldiB7CiAJc3RydWN0IGtyZWYJCQljb3VudDsKIAlzcGlubG9ja190CQkJbG9jazsKJiM0MzsJc3RydWN0IHJ3X3NlbWFwaG9yZQkJcndzZW07CiAKIAljb25zdCBjaGFyCQkJKnVkY19uYW1lOwogCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcglkcml2ZXI7CkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldiAqZGV2X25ldyh2b2lkKQogCS8qIE1hdGNoZXMga3JlZl9wdXQoKSBpbiByYXdfcmVsZWFzZSgpLiAqLwogCWtyZWZfaW5pdCgmYW1wO2Rldi0mZ3Q7Y291bnQpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDtsb2NrKTsKJiM0MzsJaW5pdF9yd3NlbSgmYW1wO2Rldi0mZ3Q7cndzZW0pOwogCWluaXRfY29tcGxldGlvbigmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCXJhd19ldmVudF9xdWV1ZV9pbml0KCZhbXA7ZGV2LSZndDtxdWV1ZSk7CiAJZGV2LSZndDtkcml2ZXJfaWRfbnVtYmVyID0gLTE7CkBAIC0yMTIsMjAgJiM0MzsyMTQsNyBAQCBzdGF0aWMgdm9pZCBkZXZfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIAlrZnJlZShkZXYtJmd0O2RyaXZlci5kcml2ZXIubmFtZSk7CiAJaWYgKGRldi0mZ3Q7ZHJpdmVyX2lkX251bWJlciAmZ3Q7PSAwKQogCQlpZGFfZnJlZSgmYW1wO2RyaXZlcl9pZF9udW1iZXJzLCBkZXYtJmd0O2RyaXZlcl9pZF9udW1iZXIpOwotCWlmIChkZXYtJmd0O3JlcSkgewotCQlpZiAoZGV2LSZndDtlcDBfdXJiX3F1ZXVlZCkKLQkJCXVzYl9lcF9kZXF1ZXVlKGRldi0mZ3Q7Z2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7Ci0JfQogCXJhd19ldmVudF9xdWV1ZV9kZXN0cm95KCZhbXA7ZGV2LSZndDtxdWV1ZSk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7ZXBzX251bTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGRldi0mZ3Q7ZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKQotCQkJY29udGludWU7Ci0JCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKLQkJa2ZyZWUoZGV2LSZndDtlcHNbaV0uZXAtJmd0O2Rlc2MpOwotCQlkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwotCX0KIAlrZnJlZShkZXYpOwogfQogCkBAIC0zMTYsNiAmIzQzOzMwNSwxMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCiAJcmV0ID0gcmF3X3F1ZXVlX2V2ZW50KGRldiwgVVNCX1JBV19FVkVOVF9DT05ORUNULCAwLCBOVUxMKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlkZXZfZXJyKCZhbXA7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHF1ZXVlIGNvbm5lY3QgZXZlbnRcbiYjMzQ7KTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlkZXYtJmd0O2dhZGdldCA9IE5VTEw7CiYjNDM7CQlkZXYtJmd0O3JlcSA9IE5VTEw7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0mZ3Q7ZXAwLCByZXEpOwogCQlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0zMjgsOCAmIzQzOzMyMiwzMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCiBzdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CiAJc3RydWN0IHJhd19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgaTsKIAogCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpOwomIzQzOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWRldi0mZ3Q7c3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEOwomIzQzOwlkZXYtJmd0O2dhZGdldCA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7ZXBzX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSAhPSBTVEFURV9FUF9ESVNBQkxFRCkgewomIzQzOwkJCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKJiM0MzsJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi0mZ3Q7ZXBzW2ldLmVwLCBkZXYtJmd0O2Vwc1tpXS5yZXEpOwomIzQzOwkJCWtmcmVlKGRldi0mZ3Q7ZXBzW2ldLmVwLSZndDtkZXNjKTsKJiM0MzsJCQlkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChkZXYtJmd0O3JlcSkgewomIzQzOwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwomIzQzOwkJZGV2LSZndDtyZXEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CXVwX3dyaXRlKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CiAJLyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIGdhZGdldF9iaW5kKCkuICovCiAJa3JlZl9wdXQoJmFtcDtkZXYtJmd0O2NvdW50LCBkZXZfZnJlZSk7CiB9CkBAIC00NTAsMTAgJiM0Mzs0NjcsNiBAQCBzdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJZGV2LSZndDtzdGF0ZSA9IFNUQVRFX0RFVl9DTE9TRUQ7Ci0JaWYgKCFkZXYtJmd0O2dhZGdldCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JCWdvdG8gb3V0X3B1dDsKLQl9CiAJaWYgKGRldi0mZ3Q7Z2FkZ2V0X3JlZ2lzdGVyZWQpCiAJCXVucmVnaXN0ZXIgPSB0cnVlOwogCWRldi0mZ3Q7Z2FkZ2V0X3JlZ2lzdGVyZWQgPSBmYWxzZTsKQEAgLTYzNywxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCiAJZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goJmFtcDtkZXYtJmd0O3F1ZXVlKTsKIAlpZiAoUFRSX0VSUihldmVudCkgPT0gLUVJTlRSKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2V2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2V2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQogCWlmIChJU19FUlIoZXZlbnQpKSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byBmZXRjaCBldmVudFxuJiMzNDspOwomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcbiYjMzQ7KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAkJZGV2LSZndDtzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKQEAgLTY5OCwxMyAmIzQzOzcxMSwxMyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGRldi0mZ3Q7ZXAwX3VyYl9xdWV1ZWQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKChpbiAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9pbl9wZW5kaW5nKSB8fAogCQkJKCFpbiAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9vdXRfcGVuZGluZykpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CkBAIC03MjUsOSAmIzQzOzczOCwxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sCiAJZGV2LSZndDtlcDBfdXJiX3F1ZXVlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJdXBfcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKJiM0MzsJfQogCXJldCA9IHVzYl9lcF9xdWV1ZShkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKQEAgLTczNSw4ICYjNDM7NzU2LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbywKIAogCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCWlmIChyZXQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7d2FpdCBpbnRlcnJ1cHRlZFxuJiMzNDspOwotCQl1c2JfZXBfZGVxdWV1ZShkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O3dhaXQgaW50ZXJydXB0ZWRcbiYjMzQ7KTsKJiM0MzsJCWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJaWYgKGRldi0mZ3Q7Z2FkZ2V0KQomIzQzOwkJCXVzYl9lcF9kZXF1ZXVlKGRldi0mZ3Q7Z2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2LSZndDtlcDBfc3RhdHVzID09IC1FQ09OTlJFU0VUKQpAQCAtODEyLDE5ICYjNDM7ODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2VwMF91cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcbiYjMzQ7KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmICghZGV2LSZndDtlcDBfaW5fcGVuZGluZyAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9vdXRfcGVuZGluZykgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgbm8gcmVxdWVzdCBwZW5kaW5nXG4mIzM0Oyk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgdXNiX2VwX3NldF9oYWx0IHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAogCWlmIChkZXYtJmd0O2VwMF9pbl9wZW5kaW5nKQpAQCAtODg0LDEzICYjNDM7OTA4LDEzIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQllcC0mZ3Q7ZXAtJmd0O2Rlc2MgPSBkZXNjOwogCQlyZXQgPSB1c2JfZXBfZW5hYmxlKGVwLSZndDtlcCk7CiAJCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwKJiM0MzsJCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgdXNiX2VwX2VuYWJsZSByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJCWVwLSZndDtyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcC0mZ3Q7ZXAsIEdGUF9BVE9NSUMpOwogCQlpZiAoIWVwLSZndDtyZXEpIHsKLQkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfYWxsb2NfcmVxdWVzdCBmYWlsZWRcbiYjMzQ7KTsKIAkJCXVzYl9lcF9kaXNhYmxlKGVwLSZndDtlcCk7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtOTAzLDEwICYjNDM7OTI3LDEwIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCX0KIAogCWlmICghZXBfcHJvcHNfbWF0Y2hlZCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCX0gZWxzZSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIG5vIGVuZHBvaW50cyBhdmFpbGFibGVcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgbm8gZW5kcG9pbnRzIGF2YWlsYWJsZVxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJfQogCkBAIC05MzksMTggJiM0Mzs5NjMsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZGlzYWJsZSBhbHJlYWR5IGluIHByb2dyZXNzXG4mIzM0Oyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGRldi0mZ3Q7ZXBzW2ldLnVyYl9xdWV1ZWQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgd2FpdGluZyBmb3IgdXJiIGNvbXBsZXRpb25cbiYjMzQ7KTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtOTU4LDEzICYjNDM7OTgyLDI1IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIAlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSB0cnVlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsJaWYgKCFkZXYtJmd0O2dhZGdldCkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQogCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKJiM0MzsJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKIAlrZnJlZShkZXYtJmd0O2Vwc1tpXS5lcC0mZ3Q7ZGVzYyk7CiAJZGV2LSZndDtlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDsKIAlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwpAQCAtOTk0LDI0ICYjNDM7MTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZGlzYWJsZSBpcyBpbiBwcm9ncmVzc1xuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS51cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXG4mIzM0Oyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZGV2LSZndDtlcHNbaV0uZXAtJmd0O2Rlc2MpKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIGNhbiYjMzk7dCBoYWx0L3dlZGdlIElTTyBlbmRwb2ludFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMDIwLDE3ICYjNDM7MTA1NiwxNyBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LAogCWlmIChzZXQgJmFtcDsmYW1wOyBoYWx0KSB7CiAJCXJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtJmd0O2Vwc1tpXS5lcCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJfSBlbHNlIGlmICghc2V0ICZhbXA7JmFtcDsgaGFsdCkgewogCQlyZXQgPSB1c2JfZXBfY2xlYXJfaGFsdChkZXYtJmd0O2Vwc1tpXS5lcCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9jbGVhcl9oYWx0IHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAl9IGVsc2UgaWYgKHNldCAmYW1wOyZhbXA7ICFoYWx0KSB7CiAJCXJldCA9IHVzYl9lcF9zZXRfd2VkZ2UoZGV2LSZndDtlcHNbaV0uZXApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfc2V0X3dlZGdlIHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAl9CiAKQEAgLTEwNzUsMjkgJiM0MzsxMTExLDI5IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChpby0mZ3Q7ZXAgJmd0Oz0gZGV2LSZndDtlcHNfbnVtKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIGludmFsaWQgZW5kcG9pbnRcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgaW52YWxpZCBlbmRwb2ludFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWVwID0gJmFtcDtkZXYtJmd0O2Vwc1tpby0mZ3Q7ZXBdOwogCWlmIChlcC0mZ3Q7c3RhdGUgIT0gU1RBVEVfRVBfRU5BQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGVwLSZndDtkaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZW5kcG9pbnQgaXMgYWxyZWFkeSBiZWluZyBkaXNhYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGVwLSZndDt1cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcbiYjMzQ7KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChpbiAhPSB1c2JfZW5kcG9pbnRfZGlyX2luKGVwLSZndDtlcC0mZ3Q7ZGVzYykpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtMTExMSw5ICYjNDM7MTE0NywxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbywKIAllcC0mZ3Q7dXJiX3F1ZXVlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJdXBfcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKJiM0MzsJfQogCXJldCA9IHVzYl9lcF9xdWV1ZShlcC0mZ3Q7ZXAsIGVwLSZndDtyZXEsIEdGUF9LRVJORUwpOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwKJiM0MzsJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7CkBAIC0xMTIxLDggJiM0MzsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLAogCiAJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZhbXA7ZG9uZSk7CiAJaWYgKHJldCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDt3YWl0IGludGVycnVwdGVkXG4mIzM0Oyk7Ci0JCXVzYl9lcF9kZXF1ZXVlKGVwLSZndDtlcCwgZXAtJmd0O3JlcSk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O3dhaXQgaW50ZXJydXB0ZWRcbiYjMzQ7KTsKJiM0MzsJCWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJaWYgKGRldi0mZ3Q7Z2FkZ2V0KQomIzQzOwkJCXVzYl9lcF9kZXF1ZXVlKGVwLSZndDtlcCwgZXAtJmd0O3JlcSk7CiYjNDM7CQl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDtkb25lKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAkJaWYgKGVwLSZndDtzdGF0dXMgPT0gLUVDT05OUkVTRVQpCkBAIC0xMjE1LDEyICYjNDM7MTI2MiwxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF92YnVzX2RyYXcoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7Ci0JCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgZ2FkZ2V0IGlzIG5vdCBib3VuZFxuJiMzNDspOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KLQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtJmd0O2dhZGdldCwgMiAqIHZhbHVlKTsKJiM0MzsJcmV0ID0gdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LSZndDtnYWRnZXQsIDIgKiB2YWx1ZSk7CiYjNDM7CXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIAogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVVNCIFJhdyBHYWRnZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNgLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGByd19zZW1hcGhvcmVgIGNhbGxlZCBgcndzZW1gIHdpdGhpbiB0aGUgYHN0cnVjdCByYXdfZGV2YC4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBpbXBsZW1lbnRpbmcgcmVhZC13cml0ZSBsb2NraW5nLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgY29uY3VycmVuY3kuIGBnYWRnZXRfdW5iaW5kYCBpcyBub3cgdXNpbmcgYGRvd25fd3JpdGVgIGFuZCBgdXBfd3JpdGVgIOKAkyBzbyB0aGF0JiMzOTtzIGZvciBleGNsdXNpdmUgYWNjZXNzIGR1cmluZyB1bmJpbmRpbmcsIGdvb2QuIEFuZCB0aGUgYHJhd19wcm9jZXNzX2VwMF9pb2AsIGByYXdfaW9jdGxfZXBfZGlzYWJsZWAsIGByYXdfcHJvY2Vzc19lcF9pb2AsIGFuZCBgcmF3X2lvY3RsX3ZidXNfZHJhd2AgZnVuY3Rpb25zIGFyZSBlbXBsb3lpbmcgYGRvd25fcmVhZGAgYW5kIGB1cF9yZWFkYC4gVGhpcyBpcyBjbGFzc2ljIHJlYWRlci13cml0ZXIgbG9jayB1c2FnZSwgYWxsb3dpbmcgbXVsdGlwbGUgcmVhZGVycyBidXQgZXhjbHVzaXZlIHdyaXRpbmcuIFNlZW1zIGxpa2UgYSBzb2xpZCBzeW5jaHJvbml6YXRpb24gZml4IGZvciB0aGUgVVNCIHJhdyBnYWRnZXQgZHJpdmVyLgoKQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYmlnZ2VyIHBpY3R1cmUuIElzIHRoaXMgVVNCIHJhdyBnYWRnZXQgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgY29kZSBpcyBhY3R1YWxseSB1c2VkLiBBaCwgcmlnaHQsIGBDT05GSUdfVVNCX1JBV19HQURHRVRgIOKAkyB0aGF0JiMzOTtzIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciwgaXNuJiMzOTt0IGl0PyBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpdCYjMzk7cyBoZWF2aWx5IHRhcmdldGVkIGJ5IHN5emthbGxlci4gVGhhdOKAmXMgYSBnb29kIHNpZ24g4oCTIGlmIHN5emthbGxlciBpcyBmdXp6aW5nIGl0LCB0aGVuIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgcXVpY2tseeKApiB5ZXMsIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY2AuLi4gYW5kIGp1c3QgdG8gYmUgc3VyZSwgbGV0JiMzOTtzIGdyZXAgZm9yIGBDT05GSUdfVVNCX1JBV19HQURHRVRgIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBBbHJpZ2h0LCBhbGwgY2hlY2tzIG91dC4gVGhpcyBwYXRjaCwgd2hpbGUgc2VlbWluZ2x5IHN0cmFpZ2h0Zm9yd2FyZCwgaXMgYWRkcmVzc2luZyBhIGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBhIHBhcnQgb2YgdGhlIGtlcm5lbCB0aGF0IGlzIGFjdGl2ZWx5IHVzZWQgYW5kIGV4cG9zZWQgdG8gZnV6emluZywgd2hpY2ggbWVhbnMgaXTigJlzIGVzc2VudGlhbCB0byBiZSBjb3JyZWN0IGFuZCByb2J1c3QuIFRoZSBjaGFuZ2UgdG8gdGhlIGBkZXZfZGJnYCBhbmQgYGRldl9lcnJgIG1hY3JvcyBpcyBqdXN0IGEgY2xlYW51cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVU0JfUkFXX0dBREdFVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdD0xMz1pbiBwcm9kdWN0aW9uLiBVc2UgR2FkZ2V0RlMgaW5zdGVhZC5cbkRvY3VtZW50YXRpb24vdXNiL3Jhdy1nYWRnZXQucnN0LTE0LVxuRG9jdW1lbnRhdGlvbi91c2IvcmF3LWdhZGdldC5yc3Q6MTU6RW5hYmxlZCB3aXRoIENPTkZJR19VU0JfUkFXX0dBREdFVC5cbkRvY3VtZW50YXRpb24vdXNiL3Jhdy1nYWRnZXQucnN0LTE2LVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz01MDE9Y29uZmlnIFVTQl9HX1dFQkNBTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy01MTUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6NTE2OmNvbmZpZyBVU0JfUkFXX0dBREdFVFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTUxNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBSYXcgR2FkZ2V0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQpXHQmIzQzOz0gdGNtX3VzYl9nYWRnZXQub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfVVNCX1JBV19HQURHRVQpXHQmIzQzOz0gcmF3X2dhZGdldC5vXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9yYXdfZ2FkZ2V0LmgtNy1cbmluY2x1ZGUvdWFwaS9saW51eC91c2IvcmF3X2dhZGdldC5oOjg6I2lmbmRlZiBfVUFQSV9fTElOVVhfVVNCX1JBV19HQURHRVRfSFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9yYXdfZ2FkZ2V0Lmg6OTojZGVmaW5lIF9VQVBJX19MSU5VWF9VU0JfUkFXX0dBREdFVF9IXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaC0xMC1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaD0xNjA9c3RydWN0IHVzYl9yYXdfZXBzX2luZm8ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC91c2IvcmF3X2dhZGdldC5oLTI1OC1cbmluY2x1ZGUvdWFwaS9saW51eC91c2IvcmF3X2dhZGdldC5oOjI1OTojZW5kaWYgLyogX1VBUElfX0xJTlVYX1VTQl9SQVdfR0FER0VUX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBVU0IgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgdGhhdCYjMzk7cyBncmFiYmluZyBteSBhdHRlbnRpb24gaXMgYFVTQl9SQVdfR0FER0VUYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGNhbiYjMzk7dCBqdXN0IHRha2UgdGhpcyBhdCBmYWNlIHZhbHVlOyBJIG5lZWQgdG8ga25vdyAqd2h5KiBpdCYjMzk7cyBhY3RpdmUuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG11c3QgbWV0aWN1bG91c2x5IGV4YW1pbmUgaXRzIGRlcGVuZGVuY2llcy4gS25vd2luZyB3aGF0IG90aGVyIGNvbXBvbmVudHMgcmVseSBvbiB0aGlzIHNldHRpbmcsIG9yIHdoYXQgdGhpcyBzZXR0aW5nIHJlbGllcyBvbiwgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaXRzIGZ1bGwgZnVuY3Rpb24gYW5kIHBvdGVudGlhbCBpbXBhY3QuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSB3aWxsIGlsbHVtaW5hdGUgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbnMgYW5kIGNvbnN0cmFpbnRzIGF0IHBsYXkgaGVyZS4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZXZhbHVhdGluZyB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyBkZXNpZ24gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfUkFXX0dBREdFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9NTAxPWNvbmZpZyBVU0JfR19XRUJDQU1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNTE1LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjUxNjpjb25maWcgVVNCX1JBV19HQURHRVRcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVU0IgUmF3IEdhZGdldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBVU0IgR2FkZ2V0IExlZ2FjeSBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIGFyb3VuZCBsaW5lIDUxNi4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhhdCBwcm9iYWJseSBwbGFjZXMgbWUgbmVhciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHNwZWNpZmljIGNvbnRyb2xsZXIgb3IgZmVhdHVyZSB3aXRoaW4gdGhlIGxlZ2FjeSBVU0IgZ2FkZ2V0IHN1YnN5c3RlbS4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGxpZSAtIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtLCBhIGxlZ2FjeSBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgb3IgYSBwYXJ0aWN1bGFyIGRlYnVnZ2luZyBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBjb25maWd1cmVkIGF0IHRoYXQgbGV2ZWwsIGhvdyBhIHNwZWNpZmljIG9wdGlvbiBpcyBlbmFibGVkLiBMZXRzIGdldCB0aGUgY29udGV4dCwgYW5kIHRyYWNlIHRoaXMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0XHQgIGRldmljZS4gSXQgcHJvdmlkZXMgYSB1c2Vyc3BhY2UgQVBJIHRvIHByb2Nlc3MgVVZDIGNvbnRyb2wgcmVxdWVzdHNcbiA1MTE6XHRcdCAgYW5kIHN0cmVhbSB2aWRlbyBkYXRhIHRvIHRoZSBob3N0LlxuIDUxMjpcdFxuIDUxMzpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4gNTE0Olx0XHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFwmIzM0O2dfd2ViY2FtXCYjMzQ7LlxuIDUxNTpcdFxuIDUxNjpcdGNvbmZpZyBVU0JfUkFXX0dBREdFVFxuIDUxNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIFJhdyBHYWRnZXRcJiMzNDtcbiA1MTg6XHRcdGhlbHBcbiA1MTk6XHRcdCAgVVNCIFJhdyBHYWRnZXQgaXMgYSBnYWRnZXQgZHJpdmVyIHRoYXQgZ2l2ZXMgdXNlcnNwYWNlIGxvdy1sZXZlbFxuIDUyMDpcdFx0ICBjb250cm9sIG92ZXIgdGhlIGdhZGdldCYjMzk7cyBjb21tdW5pY2F0aW9uIHByb2Nlc3MuXG4gNTIxOlx0XG4gNTIyOlx0XHQgIExpa2UgYW55IG90aGVyIGdhZGdldCBkcml2ZXIsIFJhdyBHYWRnZXQgaW1wbGVtZW50cyBVU0IgZGV2aWNlcyB2aWFcbiA1MjM6XHRcdCAgdGhlIFVTQiBnYWRnZXQgQVBJLiBVbmxpa2UgbW9zdCBnYWRnZXQgZHJpdmVycywgUmF3IEdhZGdldCBkb2VzIG5vdFxuIDUyNDpcdFx0ICBpbXBsZW1lbnQgYW55IGNvbmNyZXRlIFVTQiBmdW5jdGlvbnMgaXRzZWxmIGJ1dCByZXF1aXJlcyB1c2Vyc3BhY2VcbiA1MjU6XHRcdCAgdG8gZG8gdGhhdC5cbiA1MjY6XHRcbiA1Mjc6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vdXNiL3Jhdy1nYWRnZXQucnN0IGZvciBkZXRhaWxzLlxuIDUyODpcdFxuIDUyOTpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBvciBmZWF0dXJlLCB3aGF0ZXZlciBpdCBpcywgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGFueSBleHBsaWNpdGx5IGRlZmluZWQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYmV5b25kIGl0cyBwYXJlbnQsIGBVU0JfR0FER0VUYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBidXQgbm90IG5lY2Vzc2FyaWx5IGEgcmVkIGZsYWcuIEl0IGNvdWxkIGltcGx5IGEgZmV3IHRoaW5ncyDigJMgbWF5YmUgaXQmIzM5O3MgY29yZSB0byB0aGUgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIG9yIHBlcmhhcHMgaXRzIGRlcGVuZGVuY2llcyBhcmUgaW1wbGljaXRseSBoYW5kbGVkIHdpdGhpbiB0aGUgYFVTQl9HQURHRVRgIGNvbmZpZ3VyYXRpb24gaXRzZWxmLiBIbW0uLi4gTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBwYXJlbnQgY29uZmlnLCBgVVNCX0dBREdFVGAsIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSXQgY291bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBzaXR1YXRpb24uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGl0cyBkZWZpbml0aW9uIG5vdywgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGFueXRoaW5nIHRoZXJlIHRoYXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgVVNCX0dBREdFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE2LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTc6bWVudWNvbmZpZyBVU0JfR0FER0VUXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzQyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTcuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmb3IgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IHN0YXJ0cywgYXQgbGVhc3QgaW4gYSBsb3Qgb2YgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIG1haW4gYENPTkZJR19VU0JfR0FER0VUYCBvcHRpb24gZGVmaW5lZCB0aGVyZSwgb3IgbWF5YmUgYSByZWxldmFudCBtZW51IGJsb2NrIHRoYXQgZW5jb21wYXNzZXMgYSBsb3Qgb2YgdGhlIHN1Yi1vcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgaGlnaC1sZXZlbCBzdHJ1Y3R1cmUgb2YgaG93IHRoZSBkaWZmZXJlbnQgVVNCIGdhZGdldCBkcml2ZXJzIGFuZCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdCNcbiAgMTY6XHRcbiAgMTc6XHRtZW51Y29uZmlnIFVTQl9HQURHRVRcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgMjA6XHRcdHNlbGVjdCBOTFNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXG4gIDIzOlx0XHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cbiAgMjQ6XHRcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcbiAgMjU6XHRcdCAgIHlvdSBjYW4mIzM5O3QgY29ubmVjdCBhIFwmIzM0O3RvLXRoZS1ob3N0XCYjMzQ7IGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXG4gIDI2Olx0XG4gIDI3Olx0XHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcbiAgMjg6XHRcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcbiAgMjk6XHRcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxuICAzMDpcdFx0ICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmVcbiAgMzE6XHRcdCAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgXCYjMzQ7RUhDSVwmIzM0OywgXCYjMzQ7T0hDSVwmIzM0OyxcbiAgMzI6XHRcdCAgIG9yIFwmIzM0O1VIQ0lcJiMzNDssIGFuZCBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gc291dGhicmlkZ2VzIG9uIFBDXG4gIDMzOlx0XHQgICBtb3RoZXJib2FyZHMuXG4gIDM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjc0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVTQiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGNvbmZpZ3VyZSBzb21lIFVTQiBzZXR0aW5ncy4gVGhlIGNvcmUgb3B0aW9ucyBJJiMzOTttIHNlZWluZyBoZXJlIGFyZSBgVVNCX0dBREdFVGAgYW5kIGBVU0JfUkFXX0dBREdFVGAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IHBsYXllcnMgZm9yIGVuYWJsaW5nIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gV2FpdCBhIG1pbnV0ZeKApiB0aGVyZSYjMzk7cyBhbHNvIGBVU0JfRFVNTVlfSENEYC4gSSYjMzk7dmUgdXNlZCB0aGlzIGJlZm9yZSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlciBpdHMgcm9sZS4gSXQgbG9va3MgbGlrZSBgVVNCX0RVTU1ZX0hDRGAgaXMgdGhlIGtleSB0byBlbXVsYXRpbmcgdGhlIGhvc3QgY29udHJvbGxlciBpbiBzb2Z0d2FyZS4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBvbmUgdG8gY2hlY2ssIGxldCYjMzk7cyBmb2N1cyBvbiB0aGF0IGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9EVU1NWV9IQ0QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnPTQyMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jZG5zMi9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyNy1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZzo0Mjg6Y29uZmlnIFVTQl9EVU1NWV9IQ0RcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZy00MjktXHR0cmlzdGF0ZSBcJiMzNDtEdW1teSBIQ0QgKERFVkVMT1BNRU5UKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYyMwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MjguIEkga25vdyBmcm9tIHBhc3QgZXhwZXJpZW5jZSB0aGlzIGlzIHVzdWFsbHkgd2hlcmUgd2Ugc3RhcnQgZ2V0dGluZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBVREMgKFVTQiBEZXZpY2UgQ29udHJvbGxlcikgb3B0aW9ucywgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgcmVsZXZhbnQgdG8gdGhlIHZhcmlvdXMgVVNCIGRldmljZSBjb250cm9sbGVyIGRyaXZlcnMuIFRoaXMgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gZGlmZmVyZW50IGdhZGdldCBkcml2ZXJzLCBhbmQgaG93IHRoZSBjb3JlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIFVTQiAzLjAgc3VwcG9ydCwgYW5kIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQgd2l0aCBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYW50aWNpcGF0aW5nIGEgY2xlYXIgcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdpdGggaGVscGZ1bCBoZWxwIHRleHQuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjU6XHQjIExBU1QgLS0gZHVtbXkvZW11bGF0ZWQgY29udHJvbGxlclxuIDQyNjpcdCNcbiA0Mjc6XHRcbiA0Mjg6XHRjb25maWcgVVNCX0RVTU1ZX0hDRFxuIDQyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7RHVtbXkgSENEIChERVZFTE9QTUVOVClcJiMzNDtcbiA0MzA6XHRcdGRlcGVuZHMgb24gVVNCPXkgfHwgKFVTQj1tIFx1MDAyNlx1MDAyNiBVU0JfR0FER0VUPW0pXG4gNDMxOlx0XHRoZWxwXG4gNDMyOlx0XHQgIFRoaXMgaG9zdCBjb250cm9sbGVyIGRyaXZlciBlbXVsYXRlcyBVU0IsIGxvb3BpbmcgYWxsIGRhdGEgdHJhbnNmZXJcbiA0MzM6XHRcdCAgcmVxdWVzdHMgYmFjayB0byBhIFVTQiBcJiMzNDtnYWRnZXQgZHJpdmVyXCYjMzQ7IGluIHRoZSBzYW1lIGhvc3QuICBUaGUgaG9zdFxuIDQzNDpcdFx0ICBzaWRlIGlzIHRoZSBjb250cm9sbGVyOyB0aGUgZ2FkZ2V0IHNpZGUgaXMgdGhlIGRldmljZS4gIEdhZGdldCBkcml2ZXJzXG4gNDM1Olx0XHQgIGNhbiBiZSBoaWdoLCBmdWxsLCBvciBsb3cgc3BlZWQ7IGFuZCB0aGV5IGhhdmUgYWNjZXNzIHRvIGVuZHBvaW50c1xuIDQzNjpcdFx0ICBsaWtlIHRob3NlIGZyb20gTkVUMjI4MCwgUFhBMnh4LCBvciBTQTExMDAgaGFyZHdhcmUuXG4gNDM3Olx0XG4gNDM4Olx0XHQgIFRoaXMgbWF5IGhlbHAgaW4gc29tZSBzdGFnZXMgb2YgY3JlYXRpbmcgYSBkcml2ZXIgdG8gZW1iZWQgaW4gYVxuIDQzOTpcdFx0ICBMaW51eCBkZXZpY2UsIHNpbmNlIGl0IGxldHMgeW91IGRlYnVnIHNldmVyYWwgcGFydHMgb2YgdGhlIGdhZGdldFxuIDQ0MDpcdFx0ICBkcml2ZXIgd2l0aG91dCBpdHMgaGFyZHdhcmUgb3IgZHJpdmVycyBiZWluZyBpbnZvbHZlZC5cbiA0NDE6XHRcbiA0NDI6XHRcdCAgU2luY2Ugc3VjaCBhIGdhZGdldCBzaWRlIGRyaXZlciBuZWVkcyB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIGhvc3RcbiA0NDM6XHRcdCAgc2lkZSBMaW51eC1VU0IgZGV2aWNlIGRyaXZlciwgdGhpcyBtYXkgaGVscCB0byBkZWJ1ZyBib3RoIHNpZGVzXG4gNDQ0Olx0XHQgIG9mIGEgVVNCIHByb3RvY29sIHN0YWNrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgVVNCX0RVTU1ZX0hDRCBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgaW50ZWdyYXRpbmcgYFVTQl9EVU1NWV9IQ0RgLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhpcyBjaGFuZ2UgbmVjZXNzaXRhdGVzIGFkanVzdG1lbnRzIHRvIG91ciBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8ga25vdyB3aGljaCBmdW5jdGlvbnMgYXJlIG5vdyBzdXNjZXB0aWJsZSB0bywgYW5kIHRoZXJlZm9yZSBuZWVkLCBkZWVwZXIgc2NydXRpbnkuCgpMb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbXBhY3RpbmcgYGdhZGdldF91bmJpbmRgLCBgcmF3X3JlbGVhc2VgLCBgcmF3X2lvY3RsX2V2ZW50X2ZldGNoYCwgYHJhd19wcm9jZXNzX2VwMF9pb2AsIGByYXdfaW9jdGxfZXAwX3N0YWxsYCwgYHJhd19pb2N0bF9lcF9lbmFibGVgLCBgcmF3X2lvY3RsX2VwX2Rpc2FibGVgLCBgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlYCwgYHJhd19wcm9jZXNzX2VwX2lvYCwgYW5kIGByYXdfaW9jdGxfdmJ1c19kcmF3YC4KCkZyb20gYSBxdWljayBnbGFuY2UsIGl0JiMzOTtzIGNsZWFyIHRoZXNlIGFyZSBwcmltYXJpbHkgcmVsYXRlZCB0byBpb2N0bHMgb3IgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGludm9rZWQgdGhyb3VnaCBpb2N0bHMuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHRob3NlIHNpbmNlIHRoYXQmIzM5O3MgYSBsaWtlbHkgYXR0YWNrIHN1cmZhY2UuCgpOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGVudHJ5IHBvaW50cyBhbmQgb3ZlcmFsbCBpbnRlcmFjdGlvbiBmbG93LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNgIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBpb2N0bHMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGh1cywgd2hlcmUgbXkgZnV6emluZyB2ZWN0b3JzIGJlY29tZSBtb3N0IGVmZmVjdGl2ZS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJlZ2luIGZvcm11bGF0aW5nIHRoZSByaWdodCB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9NDYxPXN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ4MC1cdFx0XHRcdHJldCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo0ODE6XHRcdC8qIE1hdGNoZXMga3JlZl9nZXQoKSBpbiByYXdfaW9jdGxfcnVuKCkuICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00ODItXHRcdGtyZWZfcHV0KFx1MDAyNmRldi1cdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ5Mi1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjQ5MzpzdGF0aWMgaW50IHJhd19pb2N0bF9pbml0KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00OTQte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5MS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjU5MjpzdGF0aWMgaW50IHJhd19pb2N0bF9ydW4oc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5My17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNjI3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NjI4OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2V2ZW50X2ZldGNoKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy02Mjkte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTY5Nj1zdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NzgyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF93cml0ZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03OTUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo3OTY6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc5Ny17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODE5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6ODIwOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODIxLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjMtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo4NjQ6c3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjUte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTk0My1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjk0NDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy05NDUte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEwMDktXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMDEwOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMDExLVx0XHR1bnNpZ25lZCBsb25nIHZhbHVlLCBib29sIHNldCwgYm9vbCBoYWx0KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTEwOTQ9c3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTE5MC1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjExOTE6c3RhdGljIGludCByYXdfaW9jdGxfZXBfd3JpdGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTExOTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDQtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjA1OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDYte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMjgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjI5OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2NvbmZpZ3VyZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIzMC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTI1My1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyNTQ6c3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjU1LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMjk0PXN0YXRpYyB2b2lkIGZpbGxfZXBfbGltaXRzKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3Jhd19lcF9saW1pdHMgKmxpbWl0cylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjk5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTMwMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcHNfaW5mbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTMwMS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM0Ni1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNDc6c3RhdGljIGxvbmcgcmF3X2lvY3RsKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNDgte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNTYtXHRjYXNlIFVTQl9SQVdfSU9DVExfSU5JVDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNTc6XHRcdHJldCA9IHJhd19pb2N0bF9pbml0KGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1OC1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzU5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX1JVTjpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjA6XHRcdHJldCA9IHJhd19pb2N0bF9ydW4oZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzYxLVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjItXHRjYXNlIFVTQl9SQVdfSU9DVExfRVZFTlRfRkVUQ0g6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzYzOlx0XHRyZXQgPSByYXdfaW9jdGxfZXZlbnRfZmV0Y2goZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY0LVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjUtXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1dSSVRFOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2NjpcdFx0cmV0ID0gcmF3X2lvY3RsX2VwMF93cml0ZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjctXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2OC1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUDBfUkVBRDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjk6XHRcdHJldCA9IHJhd19pb2N0bF9lcDBfcmVhZChkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzAtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3MS1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9FTkFCTEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzcyOlx0XHRyZXQgPSByYXdfaW9jdGxfZXBfZW5hYmxlKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3My1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzc0LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0RJU0FCTEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzc1Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfZGlzYWJsZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzYtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3Ny1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9XUklURTpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNzg6XHRcdHJldCA9IHJhd19pb2N0bF9lcF93cml0ZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzktXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4MC1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9SRUFEOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4MTpcdFx0cmV0ID0gcmF3X2lvY3RsX2VwX3JlYWQoZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzgyLVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODMtXHRjYXNlIFVTQl9SQVdfSU9DVExfQ09ORklHVVJFOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4NDpcdFx0cmV0ID0gcmF3X2lvY3RsX2NvbmZpZ3VyZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODUtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4Ni1cdGNhc2UgVVNCX1JBV19JT0NUTF9WQlVTX0RSQVc6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzg3Olx0XHRyZXQgPSByYXdfaW9jdGxfdmJ1c19kcmF3KGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4OC1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQU19JTkZPOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM5MDpcdFx0cmV0ID0gcmF3X2lvY3RsX2Vwc19pbmZvKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5MS1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzkyLVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQMF9TVEFMTDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTM6XHRcdHJldCA9IHJhd19pb2N0bF9lcDBfc3RhbGwoZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk0LVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTUtXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfU0VUX0hBTFQ6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzk2Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk3LVx0XHRcdFx0XHRkZXYsIHZhbHVlLCB0cnVlLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0NMRUFSX0hBTFQ6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDAwOlx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDAxLVx0XHRcdFx0XHRkZXYsIHZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQwMy1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9TRVRfV0VER0U6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDA0Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDA1LVx0XHRcdFx0XHRkZXYsIHZhbHVlLCB0cnVlLCBmYWxzZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfZm9wcyA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MTctXHQub3BlbiA9XHRcdFx0cmF3X29wZW4sXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDE4Olx0LnVubG9ja2VkX2lvY3RsID1cdHJhd19pb2N0bCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MTk6XHQuY29tcGF0X2lvY3RsID1cdFx0cmF3X2lvY3RsLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQyMC1cdC5yZWxlYXNlID1cdFx0cmF3X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTg5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBTeW1ib2wgRm9jdXMgZm9yIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyByZWZpbmUgdGhpcy4gSSYjMzk7dmUgYmVlbiBnaXZlbiBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgZ2FkZ2V0X3VuYmluZGAsIGByYXdfcmVsZWFzZWAsIGByYXdfaW9jdGxfZXZlbnRfZmV0Y2hgLCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCwgZXRjLiBJJiMzOTttIHNlZWluZyBhIHBhdHRlcm4gaGVyZS4KClRoZSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aGluayBhYm91dCB0aGUgKmVudHJ5IHBvaW50cyogaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIHRydWx5IHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYHJhd19wcm9jZXNzX2VwMF9pb2AgaXMgYSBzaWduaWZpY2FudCBvbmUsIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYHJhd19pb2N0bF9lcDBfd3JpdGVgIGFuZCBgcmF3X2lvY3RsX2VwMF9yZWFkYC4gU2ltaWxhcmx5LCBgcmF3X3Byb2Nlc3NfZXBfaW9gIGlzIGNhbGxlZCBieSBgcmF3X2lvY3RsX2VwX3dyaXRlYCBhbmQgYHJhd19pb2N0bF9lcF9yZWFkYC4KClNvLCB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGV4YW1pbmUgYXJlOiBgZ2FkZ2V0X3VuYmluZGAsIGByYXdfcmVsZWFzZWAsIGByYXdfaW9jdGxfZXZlbnRfZmV0Y2hgLCB0aGVuIGFsbCB0aGUgaW9jdGwgZnVuY3Rpb25zIGZvciBlcDAgYW5kIGVwLCBhbmQgYHJhd19pb2N0bF92YnVzX2RyYXdgLiBJIGFsc28gaGF2ZSB0byBjaGVjayBpZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIGFyZSBgc3RhdGljYCBhbmQgaWYgdGhleSBhcmUgaW5saW5lZC4gVGhvc2UgaW50ZXJuYWwgZnVuY3Rpb25zIGFyZSBsYXJnZSBzbyBJIGRvdWJ0IHRoZXkgYXJlIGlubGluZWQuIEJ1dCB0byBiZSBzYWZlLCBJIGhhdmUgdG8gaW5jbHVkZSB0aGUgaW9jdGwgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLiBUaGlzIGlzIHRoZSBtb3JlIGFjY3VyYXRlIGxpc3QgdG8gZm9jdXMgb24uIFdhaXQsIGBnYWRnZXRfdW5iaW5kYCBpcyBhIGNhbGxiYWNrLCBzbyBJIHdpbGwgaGF2ZSB0byBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X2lvY3RsX2VwMF93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTY5Nj1zdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NzgyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF93cml0ZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMzQ3PXN0YXRpYyBsb25nIHJhd19pb2N0bChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2NS1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUDBfV1JJVEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzY2Olx0XHRyZXQgPSByYXdfaW9jdGxfZXAwX3dyaXRlKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgcmF3X2lvY3RsYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGZvY3VzZWQsIG5hdHVyYWxseSwgb24gdGhlIGZ1bmN0aW9uIGByYXdfaW9jdGxgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIHRoaW5nIHdvcmtzIOKAkyBpdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBvdXIgbG93LWxldmVsIGludGVyYWN0aW9uIHdpdGggZGV2aWNlcyBpcyBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgYWRoZXJlcyB0byB0aGUgZXhwZWN0ZWQgc3RhbmRhcmRzLiBJJiMzOTttIGtlZW4gdG8gZW5zdXJlIGl0IGZ1bmN0aW9ucyB3aXRoIGEgc2VjdXJlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9NDYxPXN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ4MC1cdFx0XHRcdHJldCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo0ODE6XHRcdC8qIE1hdGNoZXMga3JlZl9nZXQoKSBpbiByYXdfaW9jdGxfcnVuKCkuICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00ODItXHRcdGtyZWZfcHV0KFx1MDAyNmRldi1cdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ5Mi1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjQ5MzpzdGF0aWMgaW50IHJhd19pb2N0bF9pbml0KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00OTQte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5MS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjU5MjpzdGF0aWMgaW50IHJhd19pb2N0bF9ydW4oc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5My17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNjI3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NjI4OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2V2ZW50X2ZldGNoKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy02Mjkte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTY5Nj1zdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NzgyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF93cml0ZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03OTUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo3OTY6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc5Ny17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODE5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6ODIwOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODIxLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjMtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo4NjQ6c3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjUte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTk0My1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjk0NDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy05NDUte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEwMDktXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMDEwOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMDExLVx0XHR1bnNpZ25lZCBsb25nIHZhbHVlLCBib29sIHNldCwgYm9vbCBoYWx0KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTEwOTQ9c3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTE5MC1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjExOTE6c3RhdGljIGludCByYXdfaW9jdGxfZXBfd3JpdGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTExOTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDQtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjA1OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDYte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMjgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjI5OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2NvbmZpZ3VyZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIzMC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTI1My1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyNTQ6c3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjU1LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMjk0PXN0YXRpYyB2b2lkIGZpbGxfZXBfbGltaXRzKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3Jhd19lcF9saW1pdHMgKmxpbWl0cylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjk5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTMwMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcHNfaW5mbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTMwMS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM0Ni1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNDc6c3RhdGljIGxvbmcgcmF3X2lvY3RsKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNDgte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNTYtXHRjYXNlIFVTQl9SQVdfSU9DVExfSU5JVDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNTc6XHRcdHJldCA9IHJhd19pb2N0bF9pbml0KGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1OC1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzU5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX1JVTjpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjA6XHRcdHJldCA9IHJhd19pb2N0bF9ydW4oZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzYxLVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjItXHRjYXNlIFVTQl9SQVdfSU9DVExfRVZFTlRfRkVUQ0g6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzYzOlx0XHRyZXQgPSByYXdfaW9jdGxfZXZlbnRfZmV0Y2goZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY0LVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjUtXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1dSSVRFOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2NjpcdFx0cmV0ID0gcmF3X2lvY3RsX2VwMF93cml0ZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjctXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2OC1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUDBfUkVBRDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjk6XHRcdHJldCA9IHJhd19pb2N0bF9lcDBfcmVhZChkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzAtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3MS1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9FTkFCTEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzcyOlx0XHRyZXQgPSByYXdfaW9jdGxfZXBfZW5hYmxlKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3My1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzc0LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0RJU0FCTEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzc1Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfZGlzYWJsZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzYtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3Ny1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9XUklURTpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNzg6XHRcdHJldCA9IHJhd19pb2N0bF9lcF93cml0ZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzktXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4MC1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9SRUFEOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4MTpcdFx0cmV0ID0gcmF3X2lvY3RsX2VwX3JlYWQoZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzgyLVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODMtXHRjYXNlIFVTQl9SQVdfSU9DVExfQ09ORklHVVJFOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4NDpcdFx0cmV0ID0gcmF3X2lvY3RsX2NvbmZpZ3VyZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODUtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4Ni1cdGNhc2UgVVNCX1JBV19JT0NUTF9WQlVTX0RSQVc6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzg3Olx0XHRyZXQgPSByYXdfaW9jdGxfdmJ1c19kcmF3KGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4OC1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQU19JTkZPOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM5MDpcdFx0cmV0ID0gcmF3X2lvY3RsX2Vwc19pbmZvKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5MS1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzkyLVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQMF9TVEFMTDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTM6XHRcdHJldCA9IHJhd19pb2N0bF9lcDBfc3RhbGwoZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk0LVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTUtXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfU0VUX0hBTFQ6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzk2Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk3LVx0XHRcdFx0XHRkZXYsIHZhbHVlLCB0cnVlLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0NMRUFSX0hBTFQ6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDAwOlx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDAxLVx0XHRcdFx0XHRkZXYsIHZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQwMy1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9TRVRfV0VER0U6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDA0Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDA1LVx0XHRcdFx0XHRkZXYsIHZhbHVlLCB0cnVlLCBmYWxzZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfZm9wcyA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MTctXHQub3BlbiA9XHRcdFx0cmF3X29wZW4sXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDE4Olx0LnVubG9ja2VkX2lvY3RsID1cdHJhd19pb2N0bCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MTk6XHQuY29tcGF0X2lvY3RsID1cdFx0cmF3X2lvY3RsLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQyMC1cdC5yZWxlYXNlID1cdFx0cmF3X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZm9jdXNpbmcgb24gdGhlIGtleSB0ZWNobmljYWwgYXNwZWN0cyBhcyBpZiAqSSogd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpcy4KCioqRm9jdXNpbmcgdGhlIEludmVzdGlnYXRpb246IEVudHJ5IFBvaW50cyBhbmQgU3RhdGljIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGByYXdfaW9jdGxgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHdlIG5lZWQgdG8gZ3Jvay4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBkaXNwYXRjaGVyIGZvciBldmVyeXRoaW5nIGVsc2UgZ29pbmcgb24uIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyB1bmRlcnN0YW5kaW5nICpob3cqIGl0IGhhbmRsZXMgdGhlIHZhcmlvdXMgaW9jdGxzLiBTaW5jZSBgcmF3X2lvY3RsYCBoYW5kcyBvZmYgZXhlY3V0aW9uIHRvIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIGxpa2UgYGdhZGdldF91bmJpbmRgLCBJJiMzOTttIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGByYXdfaW9jdGxgIGFuZCBgZ2FkZ2V0X3VuYmluZGAuCgpIb2xkIG9uLi4uIGBnYWRnZXRfdW5iaW5kYCBpcyBhbHNvIHN0YXRpYz8gVGhhdCYjMzk7cyBpbnRlcmVzdGluZyBhbmQgY291bGQgYmUgc2lnbmlmaWNhbnQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5IOKAkyBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbiBpcyBjb3JyZWN0IGFib3V0IGl0cyBzY29wZSBhbmQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gdXNlZCBmb3IgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvciB0byByZXN0cmljdCBhY2Nlc3MsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgY29udGV4dCBpcyBlc3NlbnRpYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgb3ZlcmFsbCBmbG93LiBPa2F5LCBjb25maXJtIGBnYWRnZXRfdW5iaW5kYCBpcyBpbmRlZWQgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRfdW5iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MjcwPXN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zMTYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzozMTc6XHQvKiBNYXRjaGVzIGtyZWZfcHV0KCkgaW4gZ2FkZ2V0X3VuYmluZCgpLiAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzE4LVx0a3JlZl9nZXQoXHUwMDI2ZGV2LVx1MDAzZWNvdW50KTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zMjEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzozMjI6c3RhdGljIHZvaWQgZ2FkZ2V0X3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzIzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz00OTM9c3RhdGljIGludCByYXdfaW9jdGxfaW5pdChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU2NS1cdGRldi1cdTAwM2Vkcml2ZXIuYmluZCA9IGdhZGdldF9iaW5kO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NTY2Olx0ZGV2LVx1MDAzZWRyaXZlci51bmJpbmQgPSBnYWRnZXRfdW5iaW5kO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNTY3LVx0ZGV2LVx1MDAzZWRyaXZlci5zdXNwZW5kID0gZ2FkZ2V0X3N1c3BlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgRm9jdXNpbmcgb24gU3BlY2lmaWMgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBhbmFseXppbmcgdGhpcyBjb2RlIGFuZCB0aGUgcHJvbXB0IGlzIGd1aWRpbmcgbWUgdG93YXJkIHByaW9yaXRpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgZ2FkZ2V0X3VuYmluZGAgaXMgc3RhdGljLCB3aGljaCBzZWVtcyB0byBjb250cmFkaWN0IHRoYXQgZ3VpZGFuY2UuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYGRldi0mZ3Q7ZHJpdmVyLnVuYmluZCA9IGdhZGdldF91bmJpbmQ7YCkuIFRoZXJlZm9yZSwgaXQgKmNhbm5vdCogYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMuCgpTaW1pbGFybHksIEkgcmVhbGl6ZWQgdGhhdCBgcmF3X2lvY3RsYCBhbmQgYHJhd19yZWxlYXNlYCBhcmUgYXNzaWduZWQgdG8gYHJhd19mb3BzLnVubG9ja2VkX2lvY3RsYCBhbmQgYHJhd19mb3BzLnJlbGVhc2VgIHJlc3BlY3RpdmVseS4gQWdhaW4sIGR1ZSB0byB0aGUgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50cywgdGhlc2UgYWxzbyBtZWV0IHRoZSBjcml0ZXJpYSBhbmQgc2hvdWxkIGJlIGdvb2QgY2FuZGlkYXRlcyB0byBmb2N1cyBvbi4KCkkgdGhlbiBjb25zaWRlcmVkIHdoZXRoZXIgZnVuY3Rpb25zIGNhbGxlZCBmcm9tIHdpdGhpbiBgcmF3X2lvY3RsYCwgbGlrZSBgcmF3X2lvY3RsX2VwMF93cml0ZWAsIG1pZ2h0IGJlIGlubGluZWQgZHVlIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiBUaGF0JiMzOTtzIGEgdmFsaWQgY29uY2VybiwgYW5kIHJlaW5mb3JjZXMgdGhhdCBmb2N1c2luZyBvbiBgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYW5kLCBiYWNrIHRvIGl0LCBgZ2FkZ2V0X3VuYmluZGAgaXMgdGhlIG1vc3QgZGlyZWN0IHBhdGguCgpOb3csIEkgd2FudCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbi4gYFVTQl9SQVdfR0FER0VUYCBzZWVtcyB0byBiZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0sIGFzIGV4cGVjdGVkLiBCdXQgSSBuZWVkIGBVU0JfRFVNTVlfSENEYCB0byBlbXVsYXRlIHRoZSBob3N0IGNvbnRyb2xsZXIgdGhhdCBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBiaW5kIHRoZSBnYWRnZXQgdG8gdGhlIGhvc3QgY29udHJvbGxlci4gTGFzdGx5LCBzaW5jZSBib3RoIGFyZSBVU0IgcmVsYXRlZCwgYFVTQl9HQURHRVRgIGlzIHRoZSBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZy4gVGh1cywgdGhlIGNvcnJlY3QgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZTogYFVTQl9SQVdfR0FER0VUYCwgYFVTQl9EVU1NWV9IQ0RgLCBhbmQgYFVTQl9HQURHRVRgLgoKQW5kLCBhcyBhIGZpbmFsIGNoZWNrLCBJIHdpbGwgZ28gYmFjayBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgSSBhbSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1JBV19HQURHRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTUwMT1jb25maWcgVVNCX0dfV0VCQ0FNXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTUxNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo1MTY6Y29uZmlnIFVTQl9SQVdfR0FER0VUXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNTE3LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIFJhdyBHYWRnZXRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBpdC4KCioqVVNCX1JBV19HQURHRVQgS2NvbmZpZyBSZXZpZXcqKgoKQWxyaWdodCwgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYFVTQl9SQVdfR0FER0VUYCBLY29uZmlnLiBJJiMzOTt2ZSB3b3JrZWQgd2l0aCB0aGlzIGEgZmV3IHRpbWVzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gcmV2aXNpdCB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIEkmIzM5O20gcG90ZW50aWFsbHkgaW50ZWdyYXRpbmcgb3IgZGVidWdnaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHJhdyBVU0IgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHkuIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjcnlzdGFsIGNsZWFyIG9uIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIHBhcnRpY3VsYXIgcHJvamVjdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhlcmUgdGhhdCBtaWdodCBqb2cgbXkgbWVtb3J5IG9yIHByb3ZpZGUgYSBuZXcgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTY6XHRjb25maWcgVVNCX1JBV19HQURHRVRcbiA1MTc6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBSYXcgR2FkZ2V0XCYjMzQ7XG4gNTE4Olx0XHRoZWxwXG4gNTE5Olx0XHQgIFVTQiBSYXcgR2FkZ2V0IGlzIGEgZ2FkZ2V0IGRyaXZlciB0aGF0IGdpdmVzIHVzZXJzcGFjZSBsb3ctbGV2ZWxcbiA1MjA6XHRcdCAgY29udHJvbCBvdmVyIHRoZSBnYWRnZXQmIzM5O3MgY29tbXVuaWNhdGlvbiBwcm9jZXNzLlxuIDUyMTpcdFxuIDUyMjpcdFx0ICBMaWtlIGFueSBvdGhlciBnYWRnZXQgZHJpdmVyLCBSYXcgR2FkZ2V0IGltcGxlbWVudHMgVVNCIGRldmljZXMgdmlhXG4gNTIzOlx0XHQgIHRoZSBVU0IgZ2FkZ2V0IEFQSS4gVW5saWtlIG1vc3QgZ2FkZ2V0IGRyaXZlcnMsIFJhdyBHYWRnZXQgZG9lcyBub3RcbiA1MjQ6XHRcdCAgaW1wbGVtZW50IGFueSBjb25jcmV0ZSBVU0IgZnVuY3Rpb25zIGl0c2VsZiBidXQgcmVxdWlyZXMgdXNlcnNwYWNlXG4gNTI1Olx0XHQgIHRvIGRvIHRoYXQuXG4gNTI2Olx0XG4gNTI3Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdCBmb3IgZGV0YWlscy5cbiA1Mjg6XHRcbiA1Mjk6XHRcdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuIDUzMDpcdFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcJiMzNDtyYXdfZ2FkZ2V0XCYjMzQ7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA3OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZS1FdmFsdWF0aW5nIFVTQl9EVU1NWV9IQ0QgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbywgSSYjMzk7bSB0YWtpbmcgYW5vdGhlciBsb29rIGF0IHRoaXMuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIGNsZWFuIOKAkyBubyBkZXBlbmRlbmNpZXMgZmxhZ2dlZCBpbml0aWFsbHkuIEhvd2V2ZXIsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSB0aGluZ3MgY2FuIGJlIGRlY2VwdGl2ZWx5IHNpbXBsZSBhdCBmaXJzdCBnbGFuY2UuIEl0JiMzOTtzIGEgZ29vZCBoYWJpdCB0byBkb3VibGUtY2hlY2ssIGVzcGVjaWFsbHkgd2l0aCBhIHBlcmlwaGVyYWwgZHJpdmVyIGxpa2UgYSBkdW1teSBob3N0IGNvbnRyb2xsZXIuIEkgd2FudCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSwgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiBzaGFyZWQgcmVzb3VyY2VzLCBvciBldmVuIGFyY2hpdGVjdHVyYWwgYXNzdW1wdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gR290dGEga2VlcCBhIGxhc2VyIGZvY3VzIG9uIHRoaXMsIGFuZCB2ZXJpZnkgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaW1wbGljaXQgbGlua2FnZXMgdGhhdCBjb3VsZCBjcmVhdGUgZnV0dXJlIGhlYWRhY2hlcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgdHJ1bHkgaXNvbGF0ZWQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBVU0JfRFVNTVlfSENEYCBtb2R1bGUgYW5kIGl0cyBhc3NvY2lhdGVkIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFnYWluIHRvIGVsaW1pbmF0ZSAqYW55KiBwb3RlbnRpYWwgZGVwZW5kZW5jeSBhbWJpZ3VpdGllcy4gVGltZSB0byBiZSBtZXRpY3Vsb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI4Olx0Y29uZmlnIFVTQl9EVU1NWV9IQ0RcbiA0Mjk6XHRcdHRyaXN0YXRlIFwmIzM0O0R1bW15IEhDRCAoREVWRUxPUE1FTlQpXCYjMzQ7XG4gNDMwOlx0XHRkZXBlbmRzIG9uIFVTQj15IHx8IChVU0I9bSBcdTAwMjZcdTAwMjYgVVNCX0dBREdFVD1tKVxuIDQzMTpcdFx0aGVscFxuIDQzMjpcdFx0ICBUaGlzIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZW11bGF0ZXMgVVNCLCBsb29waW5nIGFsbCBkYXRhIHRyYW5zZmVyXG4gNDMzOlx0XHQgIHJlcXVlc3RzIGJhY2sgdG8gYSBVU0IgXCYjMzQ7Z2FkZ2V0IGRyaXZlclwmIzM0OyBpbiB0aGUgc2FtZSBob3N0LiAgVGhlIGhvc3RcbiA0MzQ6XHRcdCAgc2lkZSBpcyB0aGUgY29udHJvbGxlcjsgdGhlIGdhZGdldCBzaWRlIGlzIHRoZSBkZXZpY2UuICBHYWRnZXQgZHJpdmVyc1xuIDQzNTpcdFx0ICBjYW4gYmUgaGlnaCwgZnVsbCwgb3IgbG93IHNwZWVkOyBhbmQgdGhleSBoYXZlIGFjY2VzcyB0byBlbmRwb2ludHNcbiA0MzY6XHRcdCAgbGlrZSB0aG9zZSBmcm9tIE5FVDIyODAsIFBYQTJ4eCwgb3IgU0ExMTAwIGhhcmR3YXJlLlxuIDQzNzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKlVTQiBEZXBlbmRlbmN5IENoZWNrKioKClJpZ2h0LCB0aGlzIHByb2Nlc3MgaXMgY29udGluZ2VudCBvbiBgVVNCYCBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIHRoZSBmaXJzdCBjcml0aWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGF0IGBVU0JgIGlzIGVuYWJsZWQgYW5kIGNvcnJlY3RseSBjb25maWd1cmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBXZSBjYW4mIzM5O3QgcHJvY2VlZCB3aXRob3V0IHRoYXQgZm91bmRhdGlvbmFsIHN1cHBvcnQuCgpOZXh0LCBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgZmluZXIgZGV0YWlscyBvZiBob3cgYFVTQl9HQURHRVRgIGlzIHNldCB1cC4gVG8gZnVsbHkgZXZhbHVhdGUgdGhlIHNpdHVhdGlvbiwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBVU0JfR0FER0VUYC4gQXJlIHRoZXJlIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCByZWxpZXMgb24/IExldCYjMzk7cyB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIG5lZWRlZCBpcyBpbiBwbGFjZS4gSSBoYXZlIHRvIGtub3cgYWxsIHRoZSBtb3ZpbmcgcGFydHMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBhbGwgdGhlIHBvdGVudGlhbCBzdGlja2luZyBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE3Olx0bWVudWNvbmZpZyBVU0JfR0FER0VUXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgR2FkZ2V0IFN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdHNlbGVjdCBVU0JfQ09NTU9OXG4gIDIwOlx0XHRzZWxlY3QgTkxTXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgICBVU0IgaXMgYSBob3N0L2RldmljZSBwcm90b2NvbCwgb3JnYW5pemVkIHdpdGggb25lIGhvc3QgKHN1Y2ggYXMgYVxuICAyMzpcdFx0ICAgUEMpIGNvbnRyb2xsaW5nIHVwIHRvIDEyNyBwZXJpcGhlcmFsIGRldmljZXMuXG4gIDI0Olx0XHQgICBUaGUgVVNCIGhhcmR3YXJlIGlzIGFzeW1tZXRyaWMsIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzZXQgdXA6XG4gIDI1Olx0XHQgICB5b3UgY2FuJiMzOTt0IGNvbm5lY3QgYSBcJiMzNDt0by10aGUtaG9zdFwmIzM0OyBjb25uZWN0b3IgdG8gYSBwZXJpcGhlcmFsLlxuICAyNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk1NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgVVNCX0dBREdFVGAgY29uZmlndXJhdGlvbiBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBwcmV0dHkgZmxleGlibGU7IG5vIGhhcmQgZGVwZW5kZW5jaWVzIHRoYXQgSSBjYW4gc3BvdCBpbW1lZGlhdGVseS4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0IGZvciBhIGdhZGdldCBkcml2ZXIgY29yZS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBVU0JfUkFXX0dBREdFVGAsIGBVU0JfRFVNTVlfSENEYCwgYFVTQl9HQURHRVRgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG92ZXJhcmNoaW5nIGBVU0JgIGNvbmZpZ3VyYXRpb24gaXRzZWxmLiBLZWVwaW5nIHRob3NlIGluIG1pbmQgaGVscHMgbWUgZnJhbWUgdGhlIHNjb3BlIG9mIHRoaXMuCgpSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIGltcGFjdGVkIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0IGtleSBzeW1ib2xzIGFyZSBiZWluZyB0b3VjaGVkLCBzdGFydGluZyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0czogYHJhd19pb2N0bGAsIGByYXdfcmVsZWFzZWAsIGFuZCBgZ2FkZ2V0X3VuYmluZGAuIFRoZXkgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byBleGFtaW5lLgoKV2FpdCBhIHNlY29uZOKApiB0aGlzIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBnYWRnZXRfYmluZGAuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCDigJMgYGdhZGdldF9iaW5kYCBvZnRlbiBpbnZvbHZlcyBpbml0aWFsaXphdGlvbiBhbmQgYXR0YWNobWVudCB0byBhIHNwZWNpZmljIFVTQiBjb250cm9sbGVyLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG9uIHRoZSBjaGFuZ2VzIHRoZXJlLCBzbyBsZXQgbWUgZG8gYSBxdWljayBzY2FuIHRvIGNvbmZpcm0gdGhlIG1vZGlmaWNhdGlvbiBpcyBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTI1Nz1zdGF0aWMgdTggZ2V0X2VwX2FkZHIoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0yNjktXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoyNzA6c3RhdGljIGludCBnYWRnZXRfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMjcxLVx0XHRcdHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTMyMj1zdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzQ5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MzUwOlx0LyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIGdhZGdldF9iaW5kKCkuICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zNTEtXHRrcmVmX3B1dChcdTAwMjZkZXYtXHUwMDNlY291bnQsIGRldl9mcmVlKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz00OTM9c3RhdGljIGludCByYXdfaW9jdGxfaW5pdChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU2NC1cdGRldi1cdTAwM2Vkcml2ZXIuZGlzY29ubmVjdCA9IGdhZGdldF9kaXNjb25uZWN0O1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NTY1Olx0ZGV2LVx1MDAzZWRyaXZlci5iaW5kID0gZ2FkZ2V0X2JpbmQ7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy01NjYtXHRkZXYtXHUwMDNlZHJpdmVyLnVuYmluZCA9IGdhZGdldF91bmJpbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzcxCgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDk1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBVU0IgUmF3IEdhZGdldCBEcml2ZXIgU3luY2hyb25pemF0aW9uIEZpeGVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGZpeCBsaWVzIHdpdGhpbiB0aGUgVVNCIHJhdyBnYWRnZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jYC4gIEkgY2FuIHNlZSB0aGF0IGBnYWRnZXRfYmluZGAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGNydWNpYWwgdG8gbm90ZS4gIFRoZSBjaGFuZ2VzIHRoZXJlIGFwcGVhciB0byBiZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGR1cmluZyB0aGUgY29ubmVjdGlvbiBldmVudCwgYW5kIGltcG9ydGFudGx5LCB0aGV5IG5vdyBleHBsaWNpdGx5IGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZ2FkZ2V0IG1pZ2h0IGJlIGRldGFjaGVkIHdoaWxlIHRoZSBjb25uZWN0IGV2ZW50IGlzIGJlaW5nIHByb2Nlc3NlZCwgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjaGVjayBpZiBgcmF3X2lvY3RsX3J1bmAgd2FzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBhY3R1YWwgZW50cnkgcG9pbnQuIGByYXdfaW9jdGxgICppcyogdGhlIGVudHJ5IHBvaW50IGZvciBhbGwgaW9jdGxzLCB3aGljaCBpcyBtdWNoIG1vcmUgcmVsZXZhbnQuICBUaGUgcHJvbXB0IHN1Z2dlc3RzIHByaW9yaXRpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgbGlzdGluZyBzcGVjaWZpYyBoYW5kbGVycyBsaWtlIGByYXdfaW9jdGxfZXAwX3dyaXRlYCwgYnV0IGdpdmVuIHRoYXQgaXTigJlzIHNtYWxsLCBpdOKAmXMgcHJvYmFibHkgaW5saW5lZC4gSSBhbSBlcnJpbmcgb24gdGhlIHNpZGUgb2YgY2F1dGlvbi4gYHJhd19pb2N0bGAgaXMgdGhlIGRlZmluaXRpdmUgY2hvaWNlLgoKTGV0JiMzOTtzIHNlZeKApiBJJiMzOTt2ZSBhbHNvIGlkZW50aWZpZWQgYHJhd19yZWxlYXNlYCBhcyBtb2RpZmllZC4gU2luY2UgdGhpcyBpcyBhYm91dCBmcmVlaW5nIHJlc291cmNlcywgd2hpY2ggY2FuIGNyZWF0ZSByYWNlcywgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIFRoZSBjb3JyZXNwb25kaW5nIGBnYWRnZXRfdW5iaW5kYCBpcyBhbHNvIGNyaXRpY2FsLCBvZiBjb3Vyc2UsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVuIHRoZSBkZXZpY2UgaXMgYmVpbmcgZGlzY29ubmVjdGVkLiBUaG9zZSBmdW5jdGlvbiBjYWxscyAoYHJhd19pb2N0bGAsIGByYXdfcmVsZWFzZWAsIGBnYWRnZXRfYmluZGAsIGBnYWRnZXRfdW5iaW5kYCkgYXJlIHRoZSBrZXksIHRoZW4uCgpJJiMzOTt2ZSBhbHNvIGp1c3QgaWRlbnRpZmllZCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCBhbmQgYHJhd19wcm9jZXNzX2VwX2lvYCBhcyBtb2RpZmllZCwgYWx0aG91Z2ggdGhleSYjMzk7cmUgc3RhdGljLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBzeW5jaHJvbml6YXRpb24gdmlhIHRoZSBgcndfc2VtYXBob3JlYCAoYHJ3c2VtYCkgdG8gcHJvdGVjdCB0aGUgYGRldi0mZ3Q7Z2FkZ2V0YCBwb2ludGVyIGFuZCBlbmRwb2ludCBvcGVyYXRpb25zLiAgSeKAmXZlIHJlLWV2YWx1YXRlZCBhbmQgZGVjaWRlZCB0byBrZWVwIHRoZSBsaXN0IG9mIGByYXdfaW9jdGxgLCBgcmF3X3JlbGVhc2VgLCBgZ2FkZ2V0X2JpbmRgLCBhbmQgYGdhZGdldF91bmJpbmRgIGFzIHRoZSByZWxldmFudCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZ+KApiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4gIEl0JiMzOTtzIGEgcmF3IGdhZGdldCBkcml2ZXIsIHNvIGl0JiMzOTtzIGxpa2VseSBhY2Nlc3NlZCBmcm9tIHVzZXJzcGFjZS4gYFVTQl9SQVdfR0FER0VUYCBzZWVtcyB0byBiZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoaXMgc3BlY2lmaWMgbW9kdWxlLCBhbmQgYFVTQl9EVU1NWV9IQ0RgIGlzIHRoZSBkdW1teSBIQ0QuIEl0IGlzIHVzZWQgZm9yIGZ1enppbmcuIGBVU0JfR0FER0VUYCBpcyB0aGUgZ2FkZ2V0IHN1YnN5c3RlbSwgYW5kIGBVU0JgIHJlcHJlc2VudHMgdGhlIHVuZGVybHlpbmcgVVNCIHN1YnN5c3RlbS4gIFRoZXJlZm9yZSwgYFVTQl9SQVdfR0FER0VUYCwgYFVTQl9EVU1NWV9IQ0RgLCBgVVNCX0dBREdFVGAsIGFuZCBgVVNCYCBhcmUgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyLgoKU28sIGhlcmUmIzM5O3MgdGhlIGdpc3Q6IHRoZSBwYXRjaCBhZGRyZXNzZXMgc3luY2hyb25pemF0aW9uIGlzc3VlcyBpbiB0aGUgcmF3IGdhZGdldCBkcml2ZXIgYnkgaW50cm9kdWNpbmcgdGhlIGByd19zZW1hcGhvcmVgLiAgSXQgbW9kaWZpZXMgYGdhZGdldF9iaW5kYCwgYGdhZGdldF91bmJpbmRgLCBgcmF3X3JlbGVhc2VgLCBhbmQgc2V2ZXJhbCBpb2N0bCBoYW5kbGVycywgd2hpY2ggYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLCBieSBhY3F1aXJpbmcgdGhlIHNlbWFwaG9yZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiAgVGhlc2UgY2hhbmdlcyBhcmUgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG9mdGVuIGZ1enplZCBieSBzeXprYWxsZXIgdmlhIGBVU0JfRFVNTVlfSENEYC4KClRoZSBwcmltYXJ5IHN5bWJvbHMgb2YgaW50ZXJlc3QgYXJlOiBgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYGdhZGdldF9iaW5kYCwgYGdhZGdldF91bmJpbmRgLgpUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlOiBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGBVU0JfR0FER0VUYCwgYW5kIGBVU0JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1JBV19HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0RVTU1ZX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jhd19pb2N0bCYjMzQ7LAogICAgJiMzNDtyYXdfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtnYWRnZXRfYmluZCYjMzQ7LAogICAgJiMzNDtnYWRnZXRfdW5iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgaW4gdGhlIFVTQiByYXcgZ2FkZ2V0IGRyaXZlciAoZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMpIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJ3X3NlbWFwaG9yZSAocndzZW0pIHRvIHByb3RlY3QgdGhlIGRldi1cdTAwM2VnYWRnZXQgcG9pbnRlciBhbmQgZW5kcG9pbnQgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgZ2FkZ2V0X2JpbmQsIGdhZGdldF91bmJpbmQsIHJhd19yZWxlYXNlLCBhbmQgc2V2ZXJhbCBpb2N0bCBoYW5kbGVycyB0byBwcm9wZXJseSBhY3F1aXJlIHRoZSBzZW1hcGhvcmUgYW5kIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gdGhlIGdhZGdldCBpcyB1bmJvdW5kIG9yIGVuZHBvaW50cyBhcmUgZGlzYWJsZWQuIFNpbmNlIHRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgKG9mdGVuIGZ1enplZCBieSBzeXprYWxsZXIgdmlhIFVTQl9EVU1NWV9IQ0QpLCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29uY3VycmVuY3kgY29udHJvbCBhcmUgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfUkFXX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF3X2lvY3RsJiMzNDssCiAgICAmIzM0O3Jhd19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2dhZGdldF9iaW5kJiMzNDssCiAgICAmIzM0O2dhZGdldF91bmJpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc3luY2hyb25pemF0aW9uIGlzc3VlcyBpbiB0aGUgVVNCIHJhdyBnYWRnZXQgZHJpdmVyIChkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYykgYnkgaW50cm9kdWNpbmcgYSBuZXcgcndfc2VtYXBob3JlIChyd3NlbSkgdG8gcHJvdGVjdCB0aGUgZGV2LVx1MDAzZWdhZGdldCBwb2ludGVyIGFuZCBlbmRwb2ludCBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBnYWRnZXRfYmluZCwgZ2FkZ2V0X3VuYmluZCwgcmF3X3JlbGVhc2UsIGFuZCBzZXZlcmFsIGlvY3RsIGhhbmRsZXJzIHRvIHByb3Blcmx5IGFjcXVpcmUgdGhlIHNlbWFwaG9yZSBhbmQgYXZvaWQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiB0aGUgZ2FkZ2V0IGlzIHVuYm91bmQgb3IgZW5kcG9pbnRzIGFyZSBkaXNhYmxlZC4gU2luY2UgdGhpcyBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBnYWRnZXQgZHJpdmVyIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAob2Z0ZW4gZnV6emVkIGJ5IHN5emthbGxlciB2aWEgVVNCX0RVTU1ZX0hDRCksIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb25jdXJyZW5jeSBjb250cm9sIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIChgcndzZW1gKSB0byBwcm90ZWN0IGBkZXYtXHUwMDNlZ2FkZ2V0YCBhbmQgZW5kcG9pbnQgcmVxdWVzdHMgZnJvbSBjb25jdXJyZW50IGFjY2VzcyBkdXJpbmcgYGdhZGdldF91bmJpbmQoKWAuIFRoaXMgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGVuZHBvaW50cyBhcmUgYWNjZXNzZWQgb3IgcmVxdWVzdHMgYXJlIHF1ZXVlZC9kZXF1ZXVlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHVuYmluZGluZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChsaWtlIExPQ0tERVApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBhbGxvY2F0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiZGRlNjYzYzRjYTk5ZWFiMjdkYzY3ZWRlMWUzMjVkZmQ4OTY5OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjE0OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwppbmRleCA0ZmViZjhkYWM3Y2E1Li4xMzlhMGZhMGNlZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwpAQCAtMTYwLDYgJiM0MzsxNjAsNyBAQCBlbnVtIGRldl9zdGF0ZSB7CiBzdHJ1Y3QgcmF3X2RldiB7CiAJc3RydWN0IGtyZWYJCQljb3VudDsKIAlzcGlubG9ja190CQkJbG9jazsKJiM0MzsJc3RydWN0IHJ3X3NlbWFwaG9yZQkJcndzZW07CiAKIAljb25zdCBjaGFyCQkJKnVkY19uYW1lOwogCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcglkcml2ZXI7CkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldiAqZGV2X25ldyh2b2lkKQogCS8qIE1hdGNoZXMga3JlZl9wdXQoKSBpbiByYXdfcmVsZWFzZSgpLiAqLwogCWtyZWZfaW5pdCgmYW1wO2Rldi0mZ3Q7Y291bnQpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDtsb2NrKTsKJiM0MzsJaW5pdF9yd3NlbSgmYW1wO2Rldi0mZ3Q7cndzZW0pOwogCWluaXRfY29tcGxldGlvbigmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCXJhd19ldmVudF9xdWV1ZV9pbml0KCZhbXA7ZGV2LSZndDtxdWV1ZSk7CiAJZGV2LSZndDtkcml2ZXJfaWRfbnVtYmVyID0gLTE7CkBAIC0yMTIsMjAgJiM0MzsyMTQsNyBAQCBzdGF0aWMgdm9pZCBkZXZfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIAlrZnJlZShkZXYtJmd0O2RyaXZlci5kcml2ZXIubmFtZSk7CiAJaWYgKGRldi0mZ3Q7ZHJpdmVyX2lkX251bWJlciAmZ3Q7PSAwKQogCQlpZGFfZnJlZSgmYW1wO2RyaXZlcl9pZF9udW1iZXJzLCBkZXYtJmd0O2RyaXZlcl9pZF9udW1iZXIpOwotCWlmIChkZXYtJmd0O3JlcSkgewotCQlpZiAoZGV2LSZndDtlcDBfdXJiX3F1ZXVlZCkKLQkJCXVzYl9lcF9kZXF1ZXVlKGRldi0mZ3Q7Z2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7Ci0JfQogCXJhd19ldmVudF9xdWV1ZV9kZXN0cm95KCZhbXA7ZGV2LSZndDtxdWV1ZSk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7ZXBzX251bTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGRldi0mZ3Q7ZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKQotCQkJY29udGludWU7Ci0JCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKLQkJa2ZyZWUoZGV2LSZndDtlcHNbaV0uZXAtJmd0O2Rlc2MpOwotCQlkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwotCX0KIAlrZnJlZShkZXYpOwogfQogCkBAIC0zMTYsNiAmIzQzOzMwNSwxMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCiAJcmV0ID0gcmF3X3F1ZXVlX2V2ZW50KGRldiwgVVNCX1JBV19FVkVOVF9DT05ORUNULCAwLCBOVUxMKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlkZXZfZXJyKCZhbXA7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHF1ZXVlIGNvbm5lY3QgZXZlbnRcbiYjMzQ7KTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlkZXYtJmd0O2dhZGdldCA9IE5VTEw7CiYjNDM7CQlkZXYtJmd0O3JlcSA9IE5VTEw7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0mZ3Q7ZXAwLCByZXEpOwogCQlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0zMjgsOCAmIzQzOzMyMiwzMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCiBzdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CiAJc3RydWN0IHJhd19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgaTsKIAogCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpOwomIzQzOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWRldi0mZ3Q7c3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEOwomIzQzOwlkZXYtJmd0O2dhZGdldCA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7ZXBzX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSAhPSBTVEFURV9FUF9ESVNBQkxFRCkgewomIzQzOwkJCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKJiM0MzsJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi0mZ3Q7ZXBzW2ldLmVwLCBkZXYtJmd0O2Vwc1tpXS5yZXEpOwomIzQzOwkJCWtmcmVlKGRldi0mZ3Q7ZXBzW2ldLmVwLSZndDtkZXNjKTsKJiM0MzsJCQlkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChkZXYtJmd0O3JlcSkgewomIzQzOwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwomIzQzOwkJZGV2LSZndDtyZXEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CXVwX3dyaXRlKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CiAJLyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIGdhZGdldF9iaW5kKCkuICovCiAJa3JlZl9wdXQoJmFtcDtkZXYtJmd0O2NvdW50LCBkZXZfZnJlZSk7CiB9CkBAIC00NTAsMTAgJiM0Mzs0NjcsNiBAQCBzdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJZGV2LSZndDtzdGF0ZSA9IFNUQVRFX0RFVl9DTE9TRUQ7Ci0JaWYgKCFkZXYtJmd0O2dhZGdldCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JCWdvdG8gb3V0X3B1dDsKLQl9CiAJaWYgKGRldi0mZ3Q7Z2FkZ2V0X3JlZ2lzdGVyZWQpCiAJCXVucmVnaXN0ZXIgPSB0cnVlOwogCWRldi0mZ3Q7Z2FkZ2V0X3JlZ2lzdGVyZWQgPSBmYWxzZTsKQEAgLTYzNywxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCiAJZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goJmFtcDtkZXYtJmd0O3F1ZXVlKTsKIAlpZiAoUFRSX0VSUihldmVudCkgPT0gLUVJTlRSKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2V2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2V2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQogCWlmIChJU19FUlIoZXZlbnQpKSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byBmZXRjaCBldmVudFxuJiMzNDspOwomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcbiYjMzQ7KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAkJZGV2LSZndDtzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKQEAgLTY5OCwxMyAmIzQzOzcxMSwxMyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGRldi0mZ3Q7ZXAwX3VyYl9xdWV1ZWQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKChpbiAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9pbl9wZW5kaW5nKSB8fAogCQkJKCFpbiAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9vdXRfcGVuZGluZykpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CkBAIC03MjUsOSAmIzQzOzczOCwxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sCiAJZGV2LSZndDtlcDBfdXJiX3F1ZXVlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJdXBfcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKJiM0MzsJfQogCXJldCA9IHVzYl9lcF9xdWV1ZShkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKQEAgLTczNSw4ICYjNDM7NzU2LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbywKIAogCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCWlmIChyZXQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7d2FpdCBpbnRlcnJ1cHRlZFxuJiMzNDspOwotCQl1c2JfZXBfZGVxdWV1ZShkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O3dhaXQgaW50ZXJydXB0ZWRcbiYjMzQ7KTsKJiM0MzsJCWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJaWYgKGRldi0mZ3Q7Z2FkZ2V0KQomIzQzOwkJCXVzYl9lcF9kZXF1ZXVlKGRldi0mZ3Q7Z2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2LSZndDtlcDBfc3RhdHVzID09IC1FQ09OTlJFU0VUKQpAQCAtODEyLDE5ICYjNDM7ODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2VwMF91cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcbiYjMzQ7KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmICghZGV2LSZndDtlcDBfaW5fcGVuZGluZyAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9vdXRfcGVuZGluZykgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgbm8gcmVxdWVzdCBwZW5kaW5nXG4mIzM0Oyk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgdXNiX2VwX3NldF9oYWx0IHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAogCWlmIChkZXYtJmd0O2VwMF9pbl9wZW5kaW5nKQpAQCAtODg0LDEzICYjNDM7OTA4LDEzIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQllcC0mZ3Q7ZXAtJmd0O2Rlc2MgPSBkZXNjOwogCQlyZXQgPSB1c2JfZXBfZW5hYmxlKGVwLSZndDtlcCk7CiAJCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwKJiM0MzsJCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgdXNiX2VwX2VuYWJsZSByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJCWVwLSZndDtyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcC0mZ3Q7ZXAsIEdGUF9BVE9NSUMpOwogCQlpZiAoIWVwLSZndDtyZXEpIHsKLQkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfYWxsb2NfcmVxdWVzdCBmYWlsZWRcbiYjMzQ7KTsKIAkJCXVzYl9lcF9kaXNhYmxlKGVwLSZndDtlcCk7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtOTAzLDEwICYjNDM7OTI3LDEwIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCX0KIAogCWlmICghZXBfcHJvcHNfbWF0Y2hlZCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCX0gZWxzZSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIG5vIGVuZHBvaW50cyBhdmFpbGFibGVcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgbm8gZW5kcG9pbnRzIGF2YWlsYWJsZVxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJfQogCkBAIC05MzksMTggJiM0Mzs5NjMsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZGlzYWJsZSBhbHJlYWR5IGluIHByb2dyZXNzXG4mIzM0Oyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGRldi0mZ3Q7ZXBzW2ldLnVyYl9xdWV1ZWQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgd2FpdGluZyBmb3IgdXJiIGNvbXBsZXRpb25cbiYjMzQ7KTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtOTU4LDEzICYjNDM7OTgyLDI1IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIAlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSB0cnVlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsJaWYgKCFkZXYtJmd0O2dhZGdldCkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQogCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKJiM0MzsJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKIAlrZnJlZShkZXYtJmd0O2Vwc1tpXS5lcC0mZ3Q7ZGVzYyk7CiAJZGV2LSZndDtlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDsKIAlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwpAQCAtOTk0LDI0ICYjNDM7MTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZGlzYWJsZSBpcyBpbiBwcm9ncmVzc1xuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS51cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXG4mIzM0Oyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZGV2LSZndDtlcHNbaV0uZXAtJmd0O2Rlc2MpKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIGNhbiYjMzk7dCBoYWx0L3dlZGdlIElTTyBlbmRwb2ludFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMDIwLDE3ICYjNDM7MTA1NiwxNyBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LAogCWlmIChzZXQgJmFtcDsmYW1wOyBoYWx0KSB7CiAJCXJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtJmd0O2Vwc1tpXS5lcCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJfSBlbHNlIGlmICghc2V0ICZhbXA7JmFtcDsgaGFsdCkgewogCQlyZXQgPSB1c2JfZXBfY2xlYXJfaGFsdChkZXYtJmd0O2Vwc1tpXS5lcCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9jbGVhcl9oYWx0IHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAl9IGVsc2UgaWYgKHNldCAmYW1wOyZhbXA7ICFoYWx0KSB7CiAJCXJldCA9IHVzYl9lcF9zZXRfd2VkZ2UoZGV2LSZndDtlcHNbaV0uZXApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfc2V0X3dlZGdlIHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAl9CiAKQEAgLTEwNzUsMjkgJiM0MzsxMTExLDI5IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChpby0mZ3Q7ZXAgJmd0Oz0gZGV2LSZndDtlcHNfbnVtKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIGludmFsaWQgZW5kcG9pbnRcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgaW52YWxpZCBlbmRwb2ludFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWVwID0gJmFtcDtkZXYtJmd0O2Vwc1tpby0mZ3Q7ZXBdOwogCWlmIChlcC0mZ3Q7c3RhdGUgIT0gU1RBVEVfRVBfRU5BQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGVwLSZndDtkaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZW5kcG9pbnQgaXMgYWxyZWFkeSBiZWluZyBkaXNhYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGVwLSZndDt1cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcbiYjMzQ7KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChpbiAhPSB1c2JfZW5kcG9pbnRfZGlyX2luKGVwLSZndDtlcC0mZ3Q7ZGVzYykpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtMTExMSw5ICYjNDM7MTE0NywxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbywKIAllcC0mZ3Q7dXJiX3F1ZXVlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJdXBfcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKJiM0MzsJfQogCXJldCA9IHVzYl9lcF9xdWV1ZShlcC0mZ3Q7ZXAsIGVwLSZndDtyZXEsIEdGUF9LRVJORUwpOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwKJiM0MzsJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7CkBAIC0xMTIxLDggJiM0MzsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLAogCiAJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZhbXA7ZG9uZSk7CiAJaWYgKHJldCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDt3YWl0IGludGVycnVwdGVkXG4mIzM0Oyk7Ci0JCXVzYl9lcF9kZXF1ZXVlKGVwLSZndDtlcCwgZXAtJmd0O3JlcSk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O3dhaXQgaW50ZXJydXB0ZWRcbiYjMzQ7KTsKJiM0MzsJCWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJaWYgKGRldi0mZ3Q7Z2FkZ2V0KQomIzQzOwkJCXVzYl9lcF9kZXF1ZXVlKGVwLSZndDtlcCwgZXAtJmd0O3JlcSk7CiYjNDM7CQl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDtkb25lKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAkJaWYgKGVwLSZndDtzdGF0dXMgPT0gLUVDT05OUkVTRVQpCkBAIC0xMjE1LDEyICYjNDM7MTI2MiwxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF92YnVzX2RyYXcoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7Ci0JCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgZ2FkZ2V0IGlzIG5vdCBib3VuZFxuJiMzNDspOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KLQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtJmd0O2dhZGdldCwgMiAqIHZhbHVlKTsKJiM0MzsJcmV0ID0gdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LSZndDtnYWRnZXQsIDIgKiB2YWx1ZSk7CiYjNDM7CXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIAogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM0CgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDY1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBSYXcgR2FkZ2V0IERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNgLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29uY3VycmVuY3kgaXNzdWUsIHNwZWNpZmljYWxseSBhIHJhY2UgY29uZGl0aW9uIGFyb3VuZCB0aGUgYGRldi0mZ3Q7Z2FkZ2V0YCBwb2ludGVyIGFuZCBlbmRwb2ludCByZXF1ZXN0cy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgYGdhZGdldF91bmJpbmRgIGNvdWxkIGJlIHJ1bm5pbmcgY29uY3VycmVudGx5IHdpdGggb3RoZXIgb3BlcmF0aW9ucywgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGFjY2Vzc2luZyBgZGV2LSZndDtnYWRnZXRgIG9yIGl0cyBhc3NvY2lhdGVkIHJlcXVlc3RzIChgZGV2LSZndDtyZXFgLCBgZGV2LSZndDtlcHNbaV0ucmVxYCkuCgpUaGUgc29sdXRpb24gaXMgY2xlYXI6IGludHJvZHVjZSBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIChgcndzZW1gKSB3aXRoaW4gdGhlIGBzdHJ1Y3QgcmF3X2RldmAuIFRoaXMgd2lsbCBhY3QgYXMgb3VyIGxvY2tpbmcgbWVjaGFuaXNtIHRvIHByb3RlY3QgdGhvc2UgY3JpdGljYWwgc2VjdGlvbnMuIFRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIHJlZmxlY3QgdGhpczoKCjEuICBBIG5ldyBgcndzZW1gIGlzIGFkZGVkIHRvIHRoZSBgcmF3X2RldmAgc3RydWN0LgoyLiAgYGRldl9uZXcoKWAgaW5pdGlhbGl6ZXMgdGhlIHNlbWFwaG9yZS4KMy4gIGBkZXZfZnJlZSgpYCBub3cgZGVmZXJzIHJlcXVlc3QgY2xlYW51cCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSBtb3ZpbmcgaXQgdG8gYGdhZGdldF91bmJpbmRgIG5vdy4KNC4gIGBnYWRnZXRfYmluZCgpYCBzZWVzIGEgY2hhbmdlIHRvIGhhbmRsZSBgcmF3X3F1ZXVlX2V2ZW50YCBmYWlsaW5nIGJ5IGNsZWFuaW5nIHVwIHRoZSBgZGV2LSZndDtyZXFgLgo1LiAgYGdhZGdldF91bmJpbmQoKWAgaXMgd2hlcmUgdGhlIGNvcmUgbG9ja2luZyBoYXBwZW5zLiBJdCB0YWtlcyBhIHdyaXRlIGxvY2sgKGBkb3duX3dyaXRlYCkgdG8gc2FmZWx5IHNldCBgZGV2LSZndDtnYWRnZXRgIHRvIGBOVUxMYCwgZGlzYWJsZSB0aGUgZW5kcG9pbnRzLCBmcmVlIHRoZSByZXF1ZXN0cywgYW5kIHNldCBgZGV2LSZndDtyZXEgPSBOVUxMYC4gVGhpcyBpcyB0aGUgY3JpdGljYWwgc2VjdGlvbiB3ZSBuZWVkIHRvIHByb3RlY3QuCjYuICBTZXZlcmFsIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGByYXdfcmVsZWFzZSgpYCwgYHJhd19pb2N0bF9ldmVudF9mZXRjaGAsIGByYXdfcHJvY2Vzc19lcDBfaW9gLCBgcmF3X2lvY3RsX2VwX2Rpc2FibGVgLCBgcmF3X3Byb2Nlc3NfZXBfaW9gLCBhbmQgYHJhd19pb2N0bF92YnVzX2RyYXdgLCBhbGwgYWNxdWlyZSBhIHJlYWQgbG9jayAoYGRvd25fcmVhZGApIGJlZm9yZSBhY2Nlc3NpbmcgYGRldi0mZ3Q7Z2FkZ2V0YCBvciBxdWV1aW5nL2RlcXVldWluZyByZXF1ZXN0cy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhleSBkb24mIzM5O3Qgc3RlcCBvbiBgZ2FkZ2V0X3VuYmluZGAmIzM5O3MgdG9lcy4KClRoZSBvdmVyYWxsIGdvYWwgaXMgdG8gZWxpbWluYXRlIHBvdGVudGlhbCBVQUYgYW5kIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYnkgZW5zdXJpbmcgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2VzcyB0byBgZGV2LSZndDtnYWRnZXRgIGFuZCBpdHMgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEkgY2FuIHNlZSB0aGUgbG9ja2luZyBzY2hlbWUgaXMgcm9idXN0IGhlcmUuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55ICpuZXcqIHByb2JsZW1zLCBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBBIHF1aWNrIHNjYW4gb2YgdGhlIHBhdGNoIHJldmVhbHMgbm90aGluZyB0aGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgY29uY2Vybi4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBhcmUgYXBwYXJlbnQuIEdpdmVuIHRoYXQgdGhlIGZpeCBpcyBmb2N1c2VkIHNvbGVseSBvbiBjb25jdXJyZW5jeSBhbmQgbG9ja2luZywgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHRoZSBhcHByb3ByaWF0ZSB0b29scyB0byBsb29rIGZvciBVQUYgb3IgZGF0YSByYWNlcy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIGEgY2xlYW4gZml4IGZvciBhIGNvbmN1cnJlbmN5IGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIChgcndzZW1gKSB0byBwcm90ZWN0IGBkZXYtXHUwMDNlZ2FkZ2V0YCBhbmQgZW5kcG9pbnQgcmVxdWVzdHMgZnJvbSBjb25jdXJyZW50IGFjY2VzcyBkdXJpbmcgYGdhZGdldF91bmJpbmQoKWAuIFRoaXMgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGVuZHBvaW50cyBhcmUgYWNjZXNzZWQgb3IgcmVxdWVzdHMgYXJlIHF1ZXVlZC9kZXF1ZXVlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHVuYmluZGluZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChsaWtlIExPQ0tERVApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBhbGxvY2F0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGByd3NlbWApIHRvIHByb3RlY3QgYGRldi1cdTAwM2VnYWRnZXRgIGFuZCBlbmRwb2ludCByZXF1ZXN0cyBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBgZ2FkZ2V0X3VuYmluZCgpYC4gVGhpcyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gZW5kcG9pbnRzIGFyZSBhY2Nlc3NlZCBvciByZXF1ZXN0cyBhcmUgcXVldWVkL2RlcXVldWVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgdW5iaW5kaW5nLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKGxpa2UgTE9DS0RFUCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGFsbG9jYXRpb25zIG9yIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTQ6NDQuMjM1NDEzODA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMTQyNjYxODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9SQVdfR0FER0VUXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCIsXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfaW9jdGxcIixcbiAgICBcInJhd19yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfYmluZFwiLFxuICAgIFwiZ2FkZ2V0X3VuYmluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIChgcndzZW1gKSB0byBwcm90ZWN0IGBkZXYtXFx1MDAzZWdhZGdldGAgYW5kIGVuZHBvaW50IHJlcXVlc3RzIGZyb20gY29uY3VycmVudCBhY2Nlc3MgZHVyaW5nIGBnYWRnZXRfdW5iaW5kKClgLiBUaGlzIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgd2hlbiBlbmRwb2ludHMgYXJlIGFjY2Vzc2VkIG9yIHJlcXVlc3RzIGFyZSBxdWV1ZWQvZGVxdWV1ZWQgd2hpbGUgdGhlIGdhZGdldCBpcyB1bmJpbmRpbmcuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBjb25jdXJyZW5jeSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAobGlrZSBMT0NLREVQKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYWxsb2NhdGlvbnMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgaW4gdGhlIFVTQiByYXcgZ2FkZ2V0IGRyaXZlciAoZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMpIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJ3X3NlbWFwaG9yZSAocndzZW0pIHRvIHByb3RlY3QgdGhlIGRldi1cXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTQ6NDQuMjM1NDE5MjA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyMzI3NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmJkZGU2NjNjNGNhOTllYWIyN2RjNjdlZGUxZTMyNWRmZDg5Njk4ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjE0OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcXG5pbmRleCA0ZmViZjhkYWM3Y2E1Li4xMzlhMGZhMGNlZWEzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcXG5AQCAtMTYwLDYgKzE2MCw3IEBAIGVudW0gZGV2X3N0YXRlIHtcXG4gc3RydWN0IHJhd19kZXYge1xcbiBcXHRzdHJ1Y3Qga3JlZlxcdFxcdFxcdGNvdW50O1xcbiBcXHRzcGlubG9ja190XFx0XFx0XFx0bG9jaztcXG4rXFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdFxcdHJ3c2VtO1xcbiBcXG4gXFx0Y29uc3QgY2hhclxcdFxcdFxcdCp1ZGNfbmFtZTtcXG4gXFx0c3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyXFx0ZHJpdmVyO1xcbkBAIC0xOTYsNiArMTk3LDcgQEAgc3RhdGljIHN0cnVjdCByYXdfZGV2ICpkZXZfbmV3KHZvaWQpXFxuIFxcdC8qIE1hdGNoZXMga3JlZl9wdXQoKSBpbiByYXdfcmVsZWFzZSgpLiAqL1xcbiBcXHRrcmVmX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlY291bnQpO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aW5pdF9yd3NlbShcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuIFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZGV2LVxcdTAwM2VlcDBfZG9uZSk7XFxuIFxcdHJhd19ldmVudF9xdWV1ZV9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXF1ZXVlKTtcXG4gXFx0ZGV2LVxcdTAwM2Vkcml2ZXJfaWRfbnVtYmVyID0gLTE7XFxuQEAgLTIxMiwyMCArMjE0LDcgQEAgc3RhdGljIHZvaWQgZGV2X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdGtmcmVlKGRldi1cXHUwMDNlZHJpdmVyLmRyaXZlci5uYW1lKTtcXG4gXFx0aWYgKGRldi1cXHUwMDNlZHJpdmVyX2lkX251bWJlciBcXHUwMDNlPSAwKVxcbiBcXHRcXHRpZGFfZnJlZShcXHUwMDI2ZHJpdmVyX2lkX251bWJlcnMsIGRldi1cXHUwMDNlZHJpdmVyX2lkX251bWJlcik7XFxuLVxcdGlmIChkZXYtXFx1MDAzZXJlcSkge1xcbi1cXHRcXHRpZiAoZGV2LVxcdTAwM2VlcDBfdXJiX3F1ZXVlZClcXG4tXFx0XFx0XFx0dXNiX2VwX2RlcXVldWUoZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWVwMCwgZGV2LVxcdTAwM2VyZXEpO1xcbi1cXHRcXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4tXFx0fVxcbiBcXHRyYXdfZXZlbnRfcXVldWVfZGVzdHJveShcXHUwMDI2ZGV2LVxcdTAwM2VxdWV1ZSk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZWVwc19udW07IGkrKykge1xcbi1cXHRcXHRpZiAoZGV2LVxcdTAwM2VlcHNbaV0uc3RhdGUgPT0gU1RBVEVfRVBfRElTQUJMRUQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR1c2JfZXBfZGlzYWJsZShkZXYtXFx1MDAzZWVwc1tpXS5lcCk7XFxuLVxcdFxcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVxcdTAwM2VlcHNbaV0uZXAsIGRldi1cXHUwMDNlZXBzW2ldLnJlcSk7XFxuLVxcdFxcdGtmcmVlKGRldi1cXHUwMDNlZXBzW2ldLmVwLVxcdTAwM2VkZXNjKTtcXG4tXFx0XFx0ZGV2LVxcdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcXG4tXFx0fVxcbiBcXHRrZnJlZShkZXYpO1xcbiB9XFxuIFxcbkBAIC0zMTYsNiArMzA1LDExIEBAIHN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4gXFx0cmV0ID0gcmF3X3F1ZXVlX2V2ZW50KGRldiwgVVNCX1JBV19FVkVOVF9DT05ORUNULCAwLCBOVUxMKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2Z2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gcXVldWUgY29ubmVjdCBldmVudFxcXFxuXFxcIik7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0ZGV2LVxcdTAwM2VnYWRnZXQgPSBOVUxMO1xcbitcXHRcXHRkZXYtXFx1MDAzZXJlcSA9IE5VTEw7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC1cXHUwMDNlZXAwLCByZXEpO1xcbiBcXHRcXHRzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbkBAIC0zMjgsOCArMzIyLDMxIEBAIHN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4gc3RhdGljIHZvaWQgZ2FkZ2V0X3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxcbiB7XFxuIFxcdHN0cnVjdCByYXdfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTtcXG4rXFxuK1xcdGRvd25fd3JpdGUoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGRldi1cXHUwMDNlc3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEO1xcbitcXHRkZXYtXFx1MDAzZWdhZGdldCA9IE5VTEw7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlZXBzX251bTsgaSsrKSB7XFxuK1xcdFxcdGlmIChkZXYtXFx1MDAzZWVwc1tpXS5zdGF0ZSAhPSBTVEFURV9FUF9ESVNBQkxFRCkge1xcbitcXHRcXHRcXHR1c2JfZXBfZGlzYWJsZShkZXYtXFx1MDAzZWVwc1tpXS5lcCk7XFxuK1xcdFxcdFxcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVxcdTAwM2VlcHNbaV0uZXAsIGRldi1cXHUwMDNlZXBzW2ldLnJlcSk7XFxuK1xcdFxcdFxcdGtmcmVlKGRldi1cXHUwMDNlZXBzW2ldLmVwLVxcdTAwM2VkZXNjKTtcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmIChkZXYtXFx1MDAzZXJlcSkge1xcbitcXHRcXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC1cXHUwMDNlZXAwLCBkZXYtXFx1MDAzZXJlcSk7XFxuK1xcdFxcdGRldi1cXHUwMDNlcmVxID0gTlVMTDtcXG4rXFx0fVxcbitcXHR1cF93cml0ZShcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuK1xcbiBcXHQvKiBNYXRjaGVzIGtyZWZfZ2V0KCkgaW4gZ2FkZ2V0X2JpbmQoKS4gKi9cXG4gXFx0a3JlZl9wdXQoXFx1MDAyNmRldi1cXHUwMDNlY291bnQsIGRldl9mcmVlKTtcXG4gfVxcbkBAIC00NTAsMTAgKzQ2Nyw2IEBAIHN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRkZXYtXFx1MDAzZXN0YXRlID0gU1RBVEVfREVWX0NMT1NFRDtcXG4tXFx0aWYgKCFkZXYtXFx1MDAzZWdhZGdldCkge1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0XFx0Z290byBvdXRfcHV0O1xcbi1cXHR9XFxuIFxcdGlmIChkZXYtXFx1MDAzZWdhZGdldF9yZWdpc3RlcmVkKVxcbiBcXHRcXHR1bnJlZ2lzdGVyID0gdHJ1ZTtcXG4gXFx0ZGV2LVxcdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZCA9IGZhbHNlO1xcbkBAIC02MzcsMTEgKzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbiBcXG4gXFx0ZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goXFx1MDAyNmRldi1cXHUwMDNlcXVldWUpO1xcbiBcXHRpZiAoUFRSX0VSUihldmVudCkgPT0gLUVJTlRSKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJldmVudCBmZXRjaGluZyBpbnRlcnJ1cHRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJldmVudCBmZXRjaGluZyBpbnRlcnJ1cHRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIFxcdH1cXG4gXFx0aWYgKElTX0VSUihldmVudCkpIHtcXG4tXFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBmZXRjaCBldmVudFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXFxcblxcXCIpO1xcbiBcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdGRldi1cXHUwMDNlc3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5AQCAtNjk4LDEzICs3MTEsMTMgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGRldi1cXHUwMDNlZXAwX3VyYl9xdWV1ZWQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoKGluIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZWVwMF9pbl9wZW5kaW5nKSB8fFxcbiBcXHRcXHRcXHQoIWluIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZWVwMF9vdXRfcGVuZGluZykpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIHdyb25nIGRpcmVjdGlvblxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbkBAIC03MjUsOSArNzM4LDE3IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcXG4gXFx0ZGV2LVxcdTAwM2VlcDBfdXJiX3F1ZXVlZCA9IHRydWU7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4rXFx0ZG93bl9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZWdhZGdldCkge1xcbitcXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXHRcXHR1cF9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XFxuK1xcdH1cXG4gXFx0cmV0ID0gdXNiX2VwX3F1ZXVlKGRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxLCBHRlBfS0VSTkVMKTtcXG4rXFx0dXBfcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XFxuQEAgLTczNSw4ICs3NTYsMTEgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbiBcXG4gXFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkZXYtXFx1MDAzZWVwMF9kb25lKTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LCBcXFwid2FpdCBpbnRlcnJ1cHRlZFxcXFxuXFxcIik7XFxuLVxcdFxcdHVzYl9lcF9kZXF1ZXVlKGRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldiwgXFxcIndhaXQgaW50ZXJydXB0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRkb3duX3JlYWQoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2VnYWRnZXQpXFxuK1xcdFxcdFxcdHVzYl9lcF9kZXF1ZXVlKGRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuIFxcdFxcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNmRldi1cXHUwMDNlZXAwX2RvbmUpO1xcbiBcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdGlmIChkZXYtXFx1MDAzZWVwMF9zdGF0dXMgPT0gLUVDT05OUkVTRVQpXFxuQEAgLTgxMiwxOSArODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGRldi1cXHUwMDNlZXAwX3VyYl9xdWV1ZWQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoIWRldi1cXHUwMDNlZXAwX2luX3BlbmRpbmcgXFx1MDAyNlxcdTAwMjYgIWRldi1cXHUwMDNlZXAwX291dF9wZW5kaW5nKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgbm8gcmVxdWVzdCBwZW5kaW5nXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVCVVNZO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZXAwKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsXFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcXCJmYWlsLCB1c2JfZXBfc2V0X2hhbHQgcmV0dXJuZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcbiBcXHRpZiAoZGV2LVxcdTAwM2VlcDBfaW5fcGVuZGluZylcXG5AQCAtODg0LDEzICs5MDgsMTMgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuIFxcdFxcdGVwLVxcdTAwM2VlcC1cXHUwMDNlZGVzYyA9IGRlc2M7XFxuIFxcdFxcdHJldCA9IHVzYl9lcF9lbmFibGUoZXAtXFx1MDAzZWVwKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIHVzYl9lcF9lbmFibGUgcmV0dXJuZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZXAtXFx1MDAzZXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLVxcdTAwM2VlcCwgR0ZQX0FUT01JQyk7XFxuIFxcdFxcdGlmICghZXAtXFx1MDAzZXJlcSkge1xcbi1cXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHRcXFwiZmFpbCwgdXNiX2VwX2FsbG9jX3JlcXVlc3QgZmFpbGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0dXNiX2VwX2Rpc2FibGUoZXAtXFx1MDAzZWVwKTtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtOTAzLDEwICs5MjcsMTAgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuIFxcdH1cXG4gXFxuIFxcdGlmICghZXBfcHJvcHNfbWF0Y2hlZCkge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgYmFkIGVuZHBvaW50IGRlc2NyaXB0b3JcXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgYmFkIGVuZHBvaW50IGRlc2NyaXB0b3JcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgbm8gZW5kcG9pbnRzIGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCBubyBlbmRwb2ludHMgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVCVVNZO1xcbiBcXHR9XFxuIFxcbkBAIC05MzksMTggKzk2MywxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoZGV2LVxcdTAwM2VlcHNbaV0uc3RhdGUgPT0gU1RBVEVfRVBfRElTQUJMRUQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldiwgXFxcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcdGlmIChkZXYtXFx1MDAzZWVwc1tpXS5kaXNhYmxpbmcpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIGRpc2FibGUgYWxyZWFkeSBpbiBwcm9ncmVzc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoZGV2LVxcdTAwM2VlcHNbaV0udXJiX3F1ZXVlZCkge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LFxcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHRcXFwiZmFpbCwgd2FpdGluZyBmb3IgdXJiIGNvbXBsZXRpb25cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuQEAgLTk1OCwxMyArOTgyLDI1IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG4gXFx0ZGV2LVxcdTAwM2VlcHNbaV0uZGlzYWJsaW5nID0gdHJ1ZTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbitcXHRkb3duX3JlYWQoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRpZiAoIWRldi1cXHUwMDNlZ2FkZ2V0KSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdHVwX3JlYWQoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdGRldi1cXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IGZhbHNlO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4gXFx0dXNiX2VwX2Rpc2FibGUoZGV2LVxcdTAwM2VlcHNbaV0uZXApO1xcbitcXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cXHUwMDNlZXBzW2ldLmVwLCBkZXYtXFx1MDAzZWVwc1tpXS5yZXEpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cXHUwMDNlZXBzW2ldLmVwLCBkZXYtXFx1MDAzZWVwc1tpXS5yZXEpO1xcbiBcXHRrZnJlZShkZXYtXFx1MDAzZWVwc1tpXS5lcC1cXHUwMDNlZGVzYyk7XFxuIFxcdGRldi1cXHUwMDNlZXBzW2ldLnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7XFxuIFxcdGRldi1cXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IGZhbHNlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHVwX3JlYWQoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRyZXR1cm4gcmV0O1xcbiBcXG4gb3V0X3VubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuQEAgLTk5NCwyNCArMTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGRldi1cXHUwMDNlZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoZGV2LVxcdTAwM2VlcHNbaV0uZGlzYWJsaW5nKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsXFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcXCJmYWlsLCBkaXNhYmxlIGlzIGluIHByb2dyZXNzXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcdGlmIChkZXYtXFx1MDAzZWVwc1tpXS51cmJfcXVldWVkKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsXFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcXCJmYWlsLCB3YWl0aW5nIGZvciB1cmIgY29tcGxldGlvblxcXFxuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhkZXYtXFx1MDAzZWVwc1tpXS5lcC1cXHUwMDNlZGVzYykpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIGNhbid0IGhhbHQvd2VkZ2UgSVNPIGVuZHBvaW50XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbkBAIC0xMDIwLDE3ICsxMDU2LDE3IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXFxuIFxcdGlmIChzZXQgXFx1MDAyNlxcdTAwMjYgaGFsdCkge1xcbiBcXHRcXHRyZXQgPSB1c2JfZXBfc2V0X2hhbHQoZGV2LVxcdTAwM2VlcHNbaV0uZXApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gXFx0fSBlbHNlIGlmICghc2V0IFxcdTAwMjZcXHUwMDI2IGhhbHQpIHtcXG4gXFx0XFx0cmV0ID0gdXNiX2VwX2NsZWFyX2hhbHQoZGV2LVxcdTAwM2VlcHNbaV0uZXApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIHVzYl9lcF9jbGVhcl9oYWx0IHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHR9IGVsc2UgaWYgKHNldCBcXHUwMDI2XFx1MDAyNiAhaGFsdCkge1xcbiBcXHRcXHRyZXQgPSB1c2JfZXBfc2V0X3dlZGdlKGRldi1cXHUwMDNlZXBzW2ldLmVwKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcXCJmYWlsLCB1c2JfZXBfc2V0X3dlZGdlIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHR9XFxuIFxcbkBAIC0xMDc1LDI5ICsxMTExLDI5IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGlvLVxcdTAwM2VlcCBcXHUwMDNlPSBkZXYtXFx1MDAzZWVwc19udW0pIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIGludmFsaWQgZW5kcG9pbnRcXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgaW52YWxpZCBlbmRwb2ludFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRlcCA9IFxcdTAwMjZkZXYtXFx1MDAzZWVwc1tpby1cXHUwMDNlZXBdO1xcbiBcXHRpZiAoZXAtXFx1MDAzZXN0YXRlICE9IFNUQVRFX0VQX0VOQUJMRUQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldiwgXFxcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVCVVNZO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGVwLVxcdTAwM2VkaXNhYmxpbmcpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIGVuZHBvaW50IGlzIGFscmVhZHkgYmVpbmcgZGlzYWJsZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoZXAtXFx1MDAzZXVyYl9xdWV1ZWQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoaW4gIT0gdXNiX2VuZHBvaW50X2Rpcl9pbihlcC1cXHUwMDNlZXAtXFx1MDAzZWRlc2MpKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuQEAgLTExMTEsOSArMTE0NywxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcXG4gXFx0ZXAtXFx1MDAzZXVyYl9xdWV1ZWQgPSB0cnVlO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuK1xcdGRvd25fcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuK1xcdGlmICghZGV2LVxcdTAwM2VnYWRnZXQpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xcbitcXHR9XFxuIFxcdHJldCA9IHVzYl9lcF9xdWV1ZShlcC1cXHUwMDNlZXAsIGVwLVxcdTAwM2VyZXEsIEdGUF9LRVJORUwpO1xcbitcXHR1cF9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LFxcbitcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHRcXFwiZmFpbCwgdXNiX2VwX3F1ZXVlIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdGdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDtcXG5AQCAtMTEyMSw4ICsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbiBcXG4gXFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkb25lKTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LCBcXFwid2FpdCBpbnRlcnJ1cHRlZFxcXFxuXFxcIik7XFxuLVxcdFxcdHVzYl9lcF9kZXF1ZXVlKGVwLVxcdTAwM2VlcCwgZXAtXFx1MDAzZXJlcSk7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJ3YWl0IGludGVycnVwdGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4rXFx0XFx0aWYgKGRldi1cXHUwMDNlZ2FkZ2V0KVxcbitcXHRcXHRcXHR1c2JfZXBfZGVxdWV1ZShlcC1cXHUwMDNlZXAsIGVwLVxcdTAwM2VyZXEpO1xcbitcXHRcXHR1cF9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4gXFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2ZG9uZSk7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0aWYgKGVwLVxcdTAwM2VzdGF0dXMgPT0gLUVDT05OUkVTRVQpXFxuQEAgLTEyMTUsMTIgKzEyNjIsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGRvd25fcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuIFxcdGlmICghZGV2LVxcdTAwM2VnYWRnZXQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldiwgXFxcImZhaWwsIGdhZGdldCBpcyBub3QgYm91bmRcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLVxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4tXFx0dXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LVxcdTAwM2VnYWRnZXQsIDIgKiB2YWx1ZSk7XFxuK1xcdHJldCA9IHVzYl9nYWRnZXRfdmJ1c19kcmF3KGRldi1cXHUwMDNlZ2FkZ2V0LCAyICogdmFsdWUpO1xcbitcXHR1cF9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTQ6NDUuNDY4NzY5MDQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgwNjQ5NTg2ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9SQVdfR0FER0VUXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCIsXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfaW9jdGxcIixcbiAgICBcInJhd19yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfYmluZFwiLFxuICAgIFwiZ2FkZ2V0X3VuYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgaW4gdGhlIFVTQiByYXcgZ2FkZ2V0IGRyaXZlciAoZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMpIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJ3X3NlbWFwaG9yZSAocndzZW0pIHRvIHByb3RlY3QgdGhlIGRldi1cXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmJkZGU2NjNjNGNhOTllYWIyN2RjNjdlZGUxZTMyNWRmZDg5Njk4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMjE6MTQ6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXG5pbmRleCA0ZmViZjhkYWM3Y2E1Li4xMzlhMGZhMGNlZWEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXG5AQCAtMTYwLDYgKzE2MCw3IEBAIGVudW0gZGV2X3N0YXRlIHtcbiBzdHJ1Y3QgcmF3X2RldiB7XG4gXHRzdHJ1Y3Qga3JlZlx0XHRcdGNvdW50O1xuIFx0c3BpbmxvY2tfdFx0XHRcdGxvY2s7XG4rXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRcdHJ3c2VtO1xuIFxuIFx0Y29uc3QgY2hhclx0XHRcdCp1ZGNfbmFtZTtcbiBcdHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlclx0ZHJpdmVyO1xuQEAgLTE5Niw2ICsxOTcsNyBAQCBzdGF0aWMgc3RydWN0IHJhd19kZXYgKmRldl9uZXcodm9pZClcbiBcdC8qIE1hdGNoZXMga3JlZl9wdXQoKSBpbiByYXdfcmVsZWFzZSgpLiAqL1xuIFx0a3JlZl9pbml0KFx1MDAyNmRldi1cdTAwM2Vjb3VudCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4rXHRpbml0X3J3c2VtKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2ZGV2LVx1MDAzZWVwMF9kb25lKTtcbiBcdHJhd19ldmVudF9xdWV1ZV9pbml0KFx1MDAyNmRldi1cdTAwM2VxdWV1ZSk7XG4gXHRkZXYtXHUwMDNlZHJpdmVyX2lkX251bWJlciA9IC0xO1xuQEAgLTIxMiwyMCArMjE0LDcgQEAgc3RhdGljIHZvaWQgZGV2X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpXG4gXHRrZnJlZShkZXYtXHUwMDNlZHJpdmVyLmRyaXZlci5uYW1lKTtcbiBcdGlmIChkZXYtXHUwMDNlZHJpdmVyX2lkX251bWJlciBcdTAwM2U9IDApXG4gXHRcdGlkYV9mcmVlKFx1MDAyNmRyaXZlcl9pZF9udW1iZXJzLCBkZXYtXHUwMDNlZHJpdmVyX2lkX251bWJlcik7XG4tXHRpZiAoZGV2LVx1MDAzZXJlcSkge1xuLVx0XHRpZiAoZGV2LVx1MDAzZWVwMF91cmJfcXVldWVkKVxuLVx0XHRcdHVzYl9lcF9kZXF1ZXVlKGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbi1cdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWVwMCwgZGV2LVx1MDAzZXJlcSk7XG4tXHR9XG4gXHRyYXdfZXZlbnRfcXVldWVfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlcXVldWUpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZWVwc19udW07IGkrKykge1xuLVx0XHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0dXNiX2VwX2Rpc2FibGUoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4tXHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuLVx0XHRrZnJlZShkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpO1xuLVx0XHRkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7XG4tXHR9XG4gXHRrZnJlZShkZXYpO1xuIH1cbiBcbkBAIC0zMTYsNiArMzA1LDExIEBAIHN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcbiBcdHJldCA9IHJhd19xdWV1ZV9ldmVudChkZXYsIFVTQl9SQVdfRVZFTlRfQ09OTkVDVCwgMCwgTlVMTCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2Z2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gcXVldWUgY29ubmVjdCBldmVudFxcblwiKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0ZGV2LVx1MDAzZWdhZGdldCA9IE5VTEw7XG4rXHRcdGRldi1cdTAwM2VyZXEgPSBOVUxMO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LVx1MDAzZWVwMCwgcmVxKTtcbiBcdFx0c2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG5AQCAtMzI4LDggKzMyMiwzMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4gc3RhdGljIHZvaWQgZ2FkZ2V0X3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxuIHtcbiBcdHN0cnVjdCByYXdfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgaTtcbiBcbiBcdHNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpO1xuK1xuK1x0ZG93bl93cml0ZShcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7XG4rXHRkZXYtXHUwMDNlZ2FkZ2V0ID0gTlVMTDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VlcHNfbnVtOyBpKyspIHtcbitcdFx0aWYgKGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgIT0gU1RBVEVfRVBfRElTQUJMRUQpIHtcbitcdFx0XHR1c2JfZXBfZGlzYWJsZShkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbitcdFx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VlcHNbaV0uZXAsIGRldi1cdTAwM2VlcHNbaV0ucmVxKTtcbitcdFx0XHRrZnJlZShkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpO1xuK1x0XHRcdGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGRldi1cdTAwM2VyZXEpIHtcbitcdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbitcdFx0ZGV2LVx1MDAzZXJlcSA9IE5VTEw7XG4rXHR9XG4rXHR1cF93cml0ZShcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1xuIFx0LyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIGdhZGdldF9iaW5kKCkuICovXG4gXHRrcmVmX3B1dChcdTAwMjZkZXYtXHUwMDNlY291bnQsIGRldl9mcmVlKTtcbiB9XG5AQCAtNDUwLDEwICs0NjcsNiBAQCBzdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRkZXYtXHUwMDNlc3RhdGUgPSBTVEFURV9ERVZfQ0xPU0VEO1xuLVx0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4tXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0Z290byBvdXRfcHV0O1xuLVx0fVxuIFx0aWYgKGRldi1cdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZClcbiBcdFx0dW5yZWdpc3RlciA9IHRydWU7XG4gXHRkZXYtXHUwMDNlZ2FkZ2V0X3JlZ2lzdGVyZWQgPSBmYWxzZTtcbkBAIC02MzcsMTEgKzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFxuIFx0ZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlKTtcbiBcdGlmIChQVFJfRVJSKGV2ZW50KSA9PSAtRUlOVFIpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJldmVudCBmZXRjaGluZyBpbnRlcnJ1cHRlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImV2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0fVxuIFx0aWYgKElTX0VSUihldmVudCkpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXG5cIik7XG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXG5cIik7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7XG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC02OTgsMTMgKzcxMSwxMyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXAwX3VyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKChpbiBcdTAwMjZcdTAwMjYgIWRldi1cdTAwM2VlcDBfaW5fcGVuZGluZykgfHxcbiBcdFx0XHQoIWluIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZWVwMF9vdXRfcGVuZGluZykpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuQEAgLTcyNSw5ICs3MzgsMTcgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFx0ZGV2LVx1MDAzZWVwMF91cmJfcXVldWVkID0gdHJ1ZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbitcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuK1x0fVxuIFx0cmV0ID0gdXNiX2VwX3F1ZXVlKGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxLCBHRlBfS0VSTkVMKTtcbitcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuQEAgLTczNSw4ICs3NTYsMTEgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFxuIFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRldi1cdTAwM2VlcDBfZG9uZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwid2FpdCBpbnRlcnJ1cHRlZFxcblwiKTtcbi1cdFx0dXNiX2VwX2RlcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwid2FpdCBpbnRlcnJ1cHRlZFxcblwiKTtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRcdGlmIChkZXYtXHUwMDNlZ2FkZ2V0KVxuK1x0XHRcdHVzYl9lcF9kZXF1ZXVlKGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmRldi1cdTAwM2VlcDBfZG9uZSk7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGlmIChkZXYtXHUwMDNlZXAwX3N0YXR1cyA9PSAtRUNPTk5SRVNFVClcbkBAIC04MTIsMTkgKzgzNiwxOSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcDBfc3RhbGwoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoIWRldi1cdTAwM2VlcDBfaW5fcGVuZGluZyBcdTAwMjZcdTAwMjYgIWRldi1cdTAwM2VlcDBfb3V0X3BlbmRpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0cmV0ID0gdXNiX2VwX3NldF9oYWx0KGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgdXNiX2VwX3NldF9oYWx0IHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4gXG4gXHRpZiAoZGV2LVx1MDAzZWVwMF9pbl9wZW5kaW5nKVxuQEAgLTg4NCwxMyArOTA4LDEzIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0XHRlcC1cdTAwM2VlcC1cdTAwM2VkZXNjID0gZGVzYztcbiBcdFx0cmV0ID0gdXNiX2VwX2VuYWJsZShlcC1cdTAwM2VlcCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgdXNiX2VwX2VuYWJsZSByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbiBcdFx0ZXAtXHUwMDNlcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAtXHUwMDNlZXAsIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIWVwLVx1MDAzZXJlcSkge1xuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfYWxsb2NfcmVxdWVzdCBmYWlsZWRcXG5cIik7XG4gXHRcdFx0dXNiX2VwX2Rpc2FibGUoZXAtXHUwMDNlZXApO1xuIFx0XHRcdHJldCA9IC1FTk9NRU07XG5AQCAtOTAzLDEwICs5MjcsMTAgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHR9XG4gXG4gXHRpZiAoIWVwX3Byb3BzX21hdGNoZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGJhZCBlbmRwb2ludCBkZXNjcmlwdG9yXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBubyBlbmRwb2ludHMgYXZhaWxhYmxlXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgbm8gZW5kcG9pbnRzIGF2YWlsYWJsZVxcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0fVxuIFxuQEAgLTkzOSwxOCArOTYzLDE4IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgPT0gU1RBVEVfRVBfRElTQUJMRUQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCBkaXNhYmxlIGFscmVhZHkgaW4gcHJvZ3Jlc3NcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnVyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB3YWl0aW5nIGZvciB1cmIgY29tcGxldGlvblxcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuQEAgLTk1OCwxMyArOTgyLDI1IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nID0gdHJ1ZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbitcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0ZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuIFx0dXNiX2VwX2Rpc2FibGUoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4rXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VlcHNbaV0uZXAsIGRldi1cdTAwM2VlcHNbaV0ucmVxKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VlcHNbaV0uZXAsIGRldi1cdTAwM2VlcHNbaV0ucmVxKTtcbiBcdGtmcmVlKGRldi1cdTAwM2VlcHNbaV0uZXAtXHUwMDNlZGVzYyk7XG4gXHRkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7XG4gXHRkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IGZhbHNlO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0cmV0dXJuIHJldDtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTk5NCwyNCArMTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZykge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIGRpc2FibGUgaXMgaW4gcHJvZ3Jlc3NcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnVyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB3YWl0aW5nIGZvciB1cmIgY29tcGxldGlvblxcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZGV2LVx1MDAzZWVwc1tpXS5lcC1cdTAwM2VkZXNjKSkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIGNhbid0IGhhbHQvd2VkZ2UgSVNPIGVuZHBvaW50XFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTAyMCwxNyArMTA1NiwxNyBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxuIFx0aWYgKHNldCBcdTAwMjZcdTAwMjYgaGFsdCkge1xuIFx0XHRyZXQgPSB1c2JfZXBfc2V0X2hhbHQoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0fSBlbHNlIGlmICghc2V0IFx1MDAyNlx1MDAyNiBoYWx0KSB7XG4gXHRcdHJldCA9IHVzYl9lcF9jbGVhcl9oYWx0KGRldi1cdTAwM2VlcHNbaV0uZXApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfY2xlYXJfaGFsdCByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0fSBlbHNlIGlmIChzZXQgXHUwMDI2XHUwMDI2ICFoYWx0KSB7XG4gXHRcdHJldCA9IHVzYl9lcF9zZXRfd2VkZ2UoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9zZXRfd2VkZ2UgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbiBcdH1cbiBcbkBAIC0xMDc1LDI5ICsxMTExLDI5IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoaW8tXHUwMDNlZXAgXHUwMDNlPSBkZXYtXHUwMDNlZXBzX251bSkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGludmFsaWQgZW5kcG9pbnRcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBpbnZhbGlkIGVuZHBvaW50XFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRlcCA9IFx1MDAyNmRldi1cdTAwM2VlcHNbaW8tXHUwMDNlZXBdO1xuIFx0aWYgKGVwLVx1MDAzZXN0YXRlICE9IFNUQVRFX0VQX0VOQUJMRUQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChlcC1cdTAwM2VkaXNhYmxpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCBlbmRwb2ludCBpcyBhbHJlYWR5IGJlaW5nIGRpc2FibGVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChlcC1cdTAwM2V1cmJfcXVldWVkKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChpbiAhPSB1c2JfZW5kcG9pbnRfZGlyX2luKGVwLVx1MDAzZWVwLVx1MDAzZWRlc2MpKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG5AQCAtMTExMSw5ICsxMTQ3LDE3IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFx0ZXAtXHUwMDNldXJiX3F1ZXVlZCA9IHRydWU7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4rXHRkb3duX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdGlmICghZGV2LVx1MDAzZWdhZGdldCkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDtcbitcdH1cbiBcdHJldCA9IHVzYl9lcF9xdWV1ZShlcC1cdTAwM2VlcCwgZXAtXHUwMDNlcmVxLCBHRlBfS0VSTkVMKTtcbitcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuQEAgLTExMjEsOCArMTE2NSwxMSBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcbiBcdHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZShcdTAwMjZkb25lKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJ3YWl0IGludGVycnVwdGVkXFxuXCIpO1xuLVx0XHR1c2JfZXBfZGVxdWV1ZShlcC1cdTAwM2VlcCwgZXAtXHUwMDNlcmVxKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcIndhaXQgaW50ZXJydXB0ZWRcXG5cIik7XG4rXHRcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0XHRpZiAoZGV2LVx1MDAzZWdhZGdldClcbitcdFx0XHR1c2JfZXBfZGVxdWV1ZShlcC1cdTAwM2VlcCwgZXAtXHUwMDNlcmVxKTtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmRvbmUpO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRpZiAoZXAtXHUwMDNlc3RhdHVzID09IC1FQ09OTlJFU0VUKVxuQEAgLTEyMTUsMTIgKzEyNjIsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4tXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBnYWRnZXQgaXMgbm90IGJvdW5kXFxuXCIpO1xuLVx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuLVx0dXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LVx1MDAzZWdhZGdldCwgMiAqIHZhbHVlKTtcbitcdHJldCA9IHVzYl9nYWRnZXRfdmJ1c19kcmF3KGRldi1cdTAwM2VnYWRnZXQsIDIgKiB2YWx1ZSk7XG4rXHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNDo0NS40Njg3NzA1OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjU0MTE3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBSYXcgR2FkZ2V0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRvdWNoaW5nIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSBgcndfc2VtYXBob3JlYCBjYWxsZWQgYHJ3c2VtYCB3aXRoaW4gdGhlIGBzdHJ1Y3QgcmF3X2RldmAuIExvb2tzIGxpa2UgdGhleSdyZSBpbXBsZW1lbnRpbmcgcmVhZC13cml0ZSBsb2NraW5nLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgY29uY3VycmVuY3kuIGBnYWRnZXRfdW5iaW5kYCBpcyBub3cgdXNpbmcgYGRvd25fd3JpdGVgIGFuZCBgdXBfd3JpdGVgIOKAkyBzbyB0aGF0J3MgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgZHVyaW5nIHVuYmluZGluZywgZ29vZC4gQW5kIHRoZSBgcmF3X3Byb2Nlc3NfZXAwX2lvYCwgYHJhd19pb2N0bF9lcF9kaXNhYmxlYCwgYHJhd19wcm9jZXNzX2VwX2lvYCwgYW5kIGByYXdfaW9jdGxfdmJ1c19kcmF3YCBmdW5jdGlvbnMgYXJlIGVtcGxveWluZyBgZG93bl9yZWFkYCBhbmQgYHVwX3JlYWRgLiBUaGlzIGlzIGNsYXNzaWMgcmVhZGVyLXdyaXRlciBsb2NrIHVzYWdlLCBhbGxvd2luZyBtdWx0aXBsZSByZWFkZXJzIGJ1dCBleGNsdXNpdmUgd3JpdGluZy4gU2VlbXMgbGlrZSBhIHNvbGlkIHN5bmNocm9uaXphdGlvbiBmaXggZm9yIHRoZSBVU0IgcmF3IGdhZGdldCBkcml2ZXIuXG5cbkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLiBJcyB0aGlzIFVTQiByYXcgZ2FkZ2V0IGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGNvZGUgaXMgYWN0dWFsbHkgdXNlZC4gQWgsIHJpZ2h0LCBgQ09ORklHX1VTQl9SQVdfR0FER0VUYCDigJMgdGhhdCdzIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciwgaXNuJ3QgaXQ/IEFuZCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGl0J3MgaGVhdmlseSB0YXJnZXRlZCBieSBzeXprYWxsZXIuIFRoYXTigJlzIGEgZ29vZCBzaWduIOKAkyBpZiBzeXprYWxsZXIgaXMgZnV6emluZyBpdCwgdGhlbiBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgcXVpY2tseeKApiB5ZXMsIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY2AuLi4gYW5kIGp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgZ3JlcCBmb3IgYENPTkZJR19VU0JfUkFXX0dBREdFVGAgaW4gdGhlIGtlcm5lbCBjb25maWcgZmlsZXMuIEFscmlnaHQsIGFsbCBjaGVja3Mgb3V0LiBUaGlzIHBhdGNoLCB3aGlsZSBzZWVtaW5nbHkgc3RyYWlnaHRmb3J3YXJkLCBpcyBhZGRyZXNzaW5nIGEgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGlzc3VlIGluIGEgcGFydCBvZiB0aGUga2VybmVsIHRoYXQgaXMgYWN0aXZlbHkgdXNlZCBhbmQgZXhwb3NlZCB0byBmdXp6aW5nLCB3aGljaCBtZWFucyBpdOKAmXMgZXNzZW50aWFsIHRvIGJlIGNvcnJlY3QgYW5kIHJvYnVzdC4gVGhlIGNoYW5nZSB0byB0aGUgYGRldl9kYmdgIGFuZCBgZGV2X2VycmAgbWFjcm9zIGlzIGp1c3QgYSBjbGVhbnVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzM3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTQ6NTQuNzIyODkxMjk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTEwMjU2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVVNCX1JBV19HQURHRVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi91c2IvcmF3LWdhZGdldC5yc3Q9MTM9aW4gcHJvZHVjdGlvbi4gVXNlIEdhZGdldEZTIGluc3RlYWQuXFxuRG9jdW1lbnRhdGlvbi91c2IvcmF3LWdhZGdldC5yc3QtMTQtXFxuRG9jdW1lbnRhdGlvbi91c2IvcmF3LWdhZGdldC5yc3Q6MTU6RW5hYmxlZCB3aXRoIENPTkZJR19VU0JfUkFXX0dBREdFVC5cXG5Eb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdC0xNi1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz01MDE9Y29uZmlnIFVTQl9HX1dFQkNBTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTUxNS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6NTE2OmNvbmZpZyBVU0JfUkFXX0dBREdFVFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy01MTctXFx0dHJpc3RhdGUgXFxcIlVTQiBSYXcgR2FkZ2V0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQpXFx0Kz0gdGNtX3VzYl9nYWRnZXQub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX1VTQl9SQVdfR0FER0VUKVxcdCs9IHJhd19nYWRnZXQub1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9yYXdfZ2FkZ2V0LmgtNy1cXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaDo4OiNpZm5kZWYgX1VBUElfX0xJTlVYX1VTQl9SQVdfR0FER0VUX0hcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaDo5OiNkZWZpbmUgX1VBUElfX0xJTlVYX1VTQl9SQVdfR0FER0VUX0hcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaC0xMC1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC91c2IvcmF3X2dhZGdldC5oPTE2MD1zdHJ1Y3QgdXNiX3Jhd19lcHNfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaC0yNTgtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9yYXdfZ2FkZ2V0Lmg6MjU5OiNlbmRpZiAvKiBfVUFQSV9fTElOVVhfVVNCX1JBV19HQURHRVRfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNDo1Ni40MTM5MjI0OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM0MTQ0NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFVTQiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQncyBncmFiYmluZyBteSBhdHRlbnRpb24gaXMgYFVTQl9SQVdfR0FER0VUYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGNhbid0IGp1c3QgdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWU7IEkgbmVlZCB0byBrbm93ICp3aHkqIGl0J3MgYWN0aXZlLiBUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBtdXN0IG1ldGljdWxvdXNseSBleGFtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIEtub3dpbmcgd2hhdCBvdGhlciBjb21wb25lbnRzIHJlbHkgb24gdGhpcyBzZXR0aW5nLCBvciB3aGF0IHRoaXMgc2V0dGluZyByZWxpZXMgb24sIGlzIGNydWNpYWwgZm9yIGdyYXNwaW5nIGl0cyBmdWxsIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgd2lsbCBpbGx1bWluYXRlIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb25zIGFuZCBjb25zdHJhaW50cyBhdCBwbGF5IGhlcmUuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIGV2YWx1YXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24ncyBkZXNpZ24gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTU6MDAuMDQ4MDcwNzM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDU4NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfUkFXX0dBREdFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTUwMT1jb25maWcgVVNCX0dfV0VCQ0FNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNTE1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo1MTY6Y29uZmlnIFVTQl9SQVdfR0FER0VUXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTUxNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIFJhdyBHYWRnZXRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjAwLjA5OTUzMjk2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzMyNTMzNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVU0IgR2FkZ2V0IExlZ2FjeSBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNvbWV0aGluZyBhcm91bmQgbGluZSA1MTYuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQgcHJvYmFibHkgcGxhY2VzIG1lIG5lYXIgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBzcGVjaWZpYyBjb250cm9sbGVyIG9yIGZlYXR1cmUgd2l0aGluIHRoZSBsZWdhY3kgVVNCIGdhZGdldCBzdWJzeXN0ZW0uIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdHMgbGllIC0gd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybSwgYSBsZWdhY3kgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIG9yIGEgcGFydGljdWxhciBkZWJ1Z2dpbmcgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgY29uZmlndXJlZCBhdCB0aGF0IGxldmVsLCBob3cgYSBzcGVjaWZpYyBvcHRpb24gaXMgZW5hYmxlZC4gTGV0cyBnZXQgdGhlIGNvbnRleHQsIGFuZCB0cmFjZSB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNToxNS44MzIwNjkwNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdFxcdCAgZGV2aWNlLiBJdCBwcm92aWRlcyBhIHVzZXJzcGFjZSBBUEkgdG8gcHJvY2VzcyBVVkMgY29udHJvbCByZXF1ZXN0c1xcbiA1MTE6XFx0XFx0ICBhbmQgc3RyZWFtIHZpZGVvIGRhdGEgdG8gdGhlIGhvc3QuXFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdCAgU2F5IFxcXCJ5XFxcIiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXFxcIm1cXFwiIHRvIGJ1aWxkIGFcXG4gNTE0OlxcdFxcdCAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgXFxcImdfd2ViY2FtXFxcIi5cXG4gNTE1OlxcdFxcbiA1MTY6XFx0Y29uZmlnIFVTQl9SQVdfR0FER0VUXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIFJhdyBHYWRnZXRcXFwiXFxuIDUxODpcXHRcXHRoZWxwXFxuIDUxOTpcXHRcXHQgIFVTQiBSYXcgR2FkZ2V0IGlzIGEgZ2FkZ2V0IGRyaXZlciB0aGF0IGdpdmVzIHVzZXJzcGFjZSBsb3ctbGV2ZWxcXG4gNTIwOlxcdFxcdCAgY29udHJvbCBvdmVyIHRoZSBnYWRnZXQncyBjb21tdW5pY2F0aW9uIHByb2Nlc3MuXFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdCAgTGlrZSBhbnkgb3RoZXIgZ2FkZ2V0IGRyaXZlciwgUmF3IEdhZGdldCBpbXBsZW1lbnRzIFVTQiBkZXZpY2VzIHZpYVxcbiA1MjM6XFx0XFx0ICB0aGUgVVNCIGdhZGdldCBBUEkuIFVubGlrZSBtb3N0IGdhZGdldCBkcml2ZXJzLCBSYXcgR2FkZ2V0IGRvZXMgbm90XFxuIDUyNDpcXHRcXHQgIGltcGxlbWVudCBhbnkgY29uY3JldGUgVVNCIGZ1bmN0aW9ucyBpdHNlbGYgYnV0IHJlcXVpcmVzIHVzZXJzcGFjZVxcbiA1MjU6XFx0XFx0ICB0byBkbyB0aGF0LlxcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdCBmb3IgZGV0YWlscy5cXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNToxNS44MzIxNTE3NDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM2MDM1NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoaXMgcGFydGljdWxhciBtb2R1bGUgb3IgZmVhdHVyZSwgd2hhdGV2ZXIgaXQgaXMsIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBleHBsaWNpdGx5IGRlZmluZWQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYmV5b25kIGl0cyBwYXJlbnQsIGBVU0JfR0FER0VUYC4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSByZWQgZmxhZy4gSXQgY291bGQgaW1wbHkgYSBmZXcgdGhpbmdzIOKAkyBtYXliZSBpdCdzIGNvcmUgdG8gdGhlIGdhZGdldCBmdW5jdGlvbmFsaXR5LCBvciBwZXJoYXBzIGl0cyBkZXBlbmRlbmNpZXMgYXJlIGltcGxpY2l0bHkgaGFuZGxlZCB3aXRoaW4gdGhlIGBVU0JfR0FER0VUYCBjb25maWd1cmF0aW9uIGl0c2VsZi4gSG1tLi4uIExldCdzIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBwYXJlbnQgY29uZmlnLCBgVVNCX0dBREdFVGAsIHRvIHNlZSB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJdCBjb3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi4gSSdsbCB0YWtlIGEgbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBub3csIGFuZCBzZWUgaWYgSSBjYW4gZmluZCBhbnl0aGluZyB0aGVyZSB0aGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjIxLjE2ODE4OTU1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2MTQzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBVU0JfR0FER0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE3Om1lbnVjb25maWcgVVNCX0dBREdFVFxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJVU0IgR2FkZ2V0IFN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjIxLjIyOTgwODc1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU0OTYyMzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNy4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eSBzdGFydHMsIGF0IGxlYXN0IGluIGEgbG90IG9mIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIG1haW4gYENPTkZJR19VU0JfR0FER0VUYCBvcHRpb24gZGVmaW5lZCB0aGVyZSwgb3IgbWF5YmUgYSByZWxldmFudCBtZW51IGJsb2NrIHRoYXQgZW5jb21wYXNzZXMgYSBsb3Qgb2YgdGhlIHN1Yi1vcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgaGlnaC1sZXZlbCBzdHJ1Y3R1cmUgb2YgaG93IHRoZSBkaWZmZXJlbnQgVVNCIGdhZGdldCBkcml2ZXJzIGFuZCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzQyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTU6MjYuMzg0NzczNzE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHQjXFxuICAxNjpcXHRcXG4gIDE3OlxcdG1lbnVjb25maWcgVVNCX0dBREdFVFxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBHYWRnZXQgU3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdHNlbGVjdCBVU0JfQ09NTU9OXFxuICAyMDpcXHRcXHRzZWxlY3QgTkxTXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgICBVU0IgaXMgYSBob3N0L2RldmljZSBwcm90b2NvbCwgb3JnYW5pemVkIHdpdGggb25lIGhvc3QgKHN1Y2ggYXMgYVxcbiAgMjM6XFx0XFx0ICAgUEMpIGNvbnRyb2xsaW5nIHVwIHRvIDEyNyBwZXJpcGhlcmFsIGRldmljZXMuXFxuICAyNDpcXHRcXHQgICBUaGUgVVNCIGhhcmR3YXJlIGlzIGFzeW1tZXRyaWMsIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzZXQgdXA6XFxuICAyNTpcXHRcXHQgICB5b3UgY2FuJ3QgY29ubmVjdCBhIFxcXCJ0by10aGUtaG9zdFxcXCIgY29ubmVjdG9yIHRvIGEgcGVyaXBoZXJhbC5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICAgTGludXggY2FuIHJ1biBpbiB0aGUgaG9zdCwgb3IgaW4gdGhlIHBlcmlwaGVyYWwuICBJbiBib3RoIGNhc2VzXFxuICAyODpcXHRcXHQgICB5b3UgbmVlZCBhIGxvdyBsZXZlbCBidXMgY29udHJvbGxlciBkcml2ZXIsIGFuZCBzb21lIHNvZnR3YXJlXFxuICAyOTpcXHRcXHQgICB0YWxraW5nIHRvIGl0LiAgUGVyaXBoZXJhbCBjb250cm9sbGVycyBhcmUgb2Z0ZW4gZGlzY3JldGUgc2lsaWNvbixcXG4gIDMwOlxcdFxcdCAgIG9yIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIENQVSBpbiBhIG1pY3JvY29udHJvbGxlci4gIFRoZSBtb3JlXFxuICAzMTpcXHRcXHQgICBmYW1pbGlhciBob3N0IHNpZGUgY29udHJvbGxlcnMgaGF2ZSBuYW1lcyBsaWtlIFxcXCJFSENJXFxcIiwgXFxcIk9IQ0lcXFwiLFxcbiAgMzI6XFx0XFx0ICAgb3IgXFxcIlVIQ0lcXFwiLCBhbmQgYXJlIHVzdWFsbHkgaW50ZWdyYXRlZCBpbnRvIHNvdXRoYnJpZGdlcyBvbiBQQ1xcbiAgMzM6XFx0XFx0ICAgbW90aGVyYm9hcmRzLlxcbiAgMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjI2LjM4NDg4MDkzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMzODg0OTkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVTQiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gY29uZmlndXJlIHNvbWUgVVNCIHNldHRpbmdzLiBUaGUgY29yZSBvcHRpb25zIEknbSBzZWVpbmcgaGVyZSBhcmUgYFVTQl9HQURHRVRgIGFuZCBgVVNCX1JBV19HQURHRVRgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgcHJpbWFyeSBwbGF5ZXJzIGZvciBlbmFibGluZyBVU0IgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHkuIFdhaXQgYSBtaW51dGXigKYgdGhlcmUncyBhbHNvIGBVU0JfRFVNTVlfSENEYC4gSSd2ZSB1c2VkIHRoaXMgYmVmb3JlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgaXRzIHJvbGUuIEl0IGxvb2tzIGxpa2UgYFVTQl9EVU1NWV9IQ0RgIGlzIHRoZSBrZXkgdG8gZW11bGF0aW5nIHRoZSBob3N0IGNvbnRyb2xsZXIgaW4gc29mdHdhcmUuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBpbXBvcnRhbnQgb25lIHRvIGNoZWNrLCBsZXQncyBmb2N1cyBvbiB0aGF0IGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjQwLjcyMzczNTQ5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMDc5MDU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0RVTU1ZX0hDRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWc9NDIyPXNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jZG5zMi9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyNy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWc6NDI4OmNvbmZpZyBVU0JfRFVNTVlfSENEXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyOS1cXHR0cmlzdGF0ZSBcXFwiRHVtbXkgSENEIChERVZFTE9QTUVOVClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjQzLjYzNDUzMTQ0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzI4NDQ3NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBLY29uZmlnIGZpbGU6XG5cbioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWdgIGZpbGUuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDI4LiBJIGtub3cgZnJvbSBwYXN0IGV4cGVyaWVuY2UgdGhpcyBpcyB1c3VhbGx5IHdoZXJlIHdlIHN0YXJ0IGdldHRpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgVURDIChVU0IgRGV2aWNlIENvbnRyb2xsZXIpIG9wdGlvbnMsIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgcmVsZXZhbnQgdG8gdGhlIHZhcmlvdXMgVVNCIGRldmljZSBjb250cm9sbGVyIGRyaXZlcnMuIFRoaXMgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gZGlmZmVyZW50IGdhZGdldCBkcml2ZXJzLCBhbmQgaG93IHRoZSBjb3JlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgVVNCIDMuMCBzdXBwb3J0LCBhbmQgaG93IHRoYXQncyBoYW5kbGVkIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBJJ20gYW50aWNpcGF0aW5nIGEgY2xlYXIgcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdpdGggaGVscGZ1bCBoZWxwIHRleHQuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNTo1MS45NjI5ODE0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdCMgTEFTVCAtLSBkdW1teS9lbXVsYXRlZCBjb250cm9sbGVyXFxuIDQyNjpcXHQjXFxuIDQyNzpcXHRcXG4gNDI4OlxcdGNvbmZpZyBVU0JfRFVNTVlfSENEXFxuIDQyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiRHVtbXkgSENEIChERVZFTE9QTUVOVClcXFwiXFxuIDQzMDpcXHRcXHRkZXBlbmRzIG9uIFVTQj15IHx8IChVU0I9bSBcXHUwMDI2XFx1MDAyNiBVU0JfR0FER0VUPW0pXFxuIDQzMTpcXHRcXHRoZWxwXFxuIDQzMjpcXHRcXHQgIFRoaXMgaG9zdCBjb250cm9sbGVyIGRyaXZlciBlbXVsYXRlcyBVU0IsIGxvb3BpbmcgYWxsIGRhdGEgdHJhbnNmZXJcXG4gNDMzOlxcdFxcdCAgcmVxdWVzdHMgYmFjayB0byBhIFVTQiBcXFwiZ2FkZ2V0IGRyaXZlclxcXCIgaW4gdGhlIHNhbWUgaG9zdC4gIFRoZSBob3N0XFxuIDQzNDpcXHRcXHQgIHNpZGUgaXMgdGhlIGNvbnRyb2xsZXI7IHRoZSBnYWRnZXQgc2lkZSBpcyB0aGUgZGV2aWNlLiAgR2FkZ2V0IGRyaXZlcnNcXG4gNDM1OlxcdFxcdCAgY2FuIGJlIGhpZ2gsIGZ1bGwsIG9yIGxvdyBzcGVlZDsgYW5kIHRoZXkgaGF2ZSBhY2Nlc3MgdG8gZW5kcG9pbnRzXFxuIDQzNjpcXHRcXHQgIGxpa2UgdGhvc2UgZnJvbSBORVQyMjgwLCBQWEEyeHgsIG9yIFNBMTEwMCBoYXJkd2FyZS5cXG4gNDM3OlxcdFxcbiA0Mzg6XFx0XFx0ICBUaGlzIG1heSBoZWxwIGluIHNvbWUgc3RhZ2VzIG9mIGNyZWF0aW5nIGEgZHJpdmVyIHRvIGVtYmVkIGluIGFcXG4gNDM5OlxcdFxcdCAgTGludXggZGV2aWNlLCBzaW5jZSBpdCBsZXRzIHlvdSBkZWJ1ZyBzZXZlcmFsIHBhcnRzIG9mIHRoZSBnYWRnZXRcXG4gNDQwOlxcdFxcdCAgZHJpdmVyIHdpdGhvdXQgaXRzIGhhcmR3YXJlIG9yIGRyaXZlcnMgYmVpbmcgaW52b2x2ZWQuXFxuIDQ0MTpcXHRcXG4gNDQyOlxcdFxcdCAgU2luY2Ugc3VjaCBhIGdhZGdldCBzaWRlIGRyaXZlciBuZWVkcyB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIGhvc3RcXG4gNDQzOlxcdFxcdCAgc2lkZSBMaW51eC1VU0IgZGV2aWNlIGRyaXZlciwgdGhpcyBtYXkgaGVscCB0byBkZWJ1ZyBib3RoIHNpZGVzXFxuIDQ0NDpcXHRcXHQgIG9mIGEgVVNCIHByb3RvY29sIHN0YWNrLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNTo1MS45NjMwNzI2OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDM1MTMzODMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgVVNCX0RVTU1ZX0hDRCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHdlJ3JlIGludGVncmF0aW5nIGBVU0JfRFVNTVlfSENEYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlcyBhZGp1c3RtZW50cyB0byBvdXIgZnV6emluZyBzdHJhdGVneS4gSSBuZWVkIHRvIGtub3cgd2hpY2ggZnVuY3Rpb25zIGFyZSBub3cgc3VzY2VwdGlibGUgdG8sIGFuZCB0aGVyZWZvcmUgbmVlZCwgZGVlcGVyIHNjcnV0aW55LlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpdCdzIGltcGFjdGluZyBgZ2FkZ2V0X3VuYmluZGAsIGByYXdfcmVsZWFzZWAsIGByYXdfaW9jdGxfZXZlbnRfZmV0Y2hgLCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCwgYHJhd19pb2N0bF9lcDBfc3RhbGxgLCBgcmF3X2lvY3RsX2VwX2VuYWJsZWAsIGByYXdfaW9jdGxfZXBfZGlzYWJsZWAsIGByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2VgLCBgcmF3X3Byb2Nlc3NfZXBfaW9gLCBhbmQgYHJhd19pb2N0bF92YnVzX2RyYXdgLlxuXG5Gcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCdzIGNsZWFyIHRoZXNlIGFyZSBwcmltYXJpbHkgcmVsYXRlZCB0byBpb2N0bHMgb3IgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGludm9rZWQgdGhyb3VnaCBpb2N0bHMuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHRob3NlIHNpbmNlIHRoYXQncyBhIGxpa2VseSBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBlbnRyeSBwb2ludHMgYW5kIG92ZXJhbGwgaW50ZXJhY3Rpb24gZmxvdywgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNgIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBpb2N0bHMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGh1cywgd2hlcmUgbXkgZnV6emluZyB2ZWN0b3JzIGJlY29tZSBtb3N0IGVmZmVjdGl2ZS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJlZ2luIGZvcm11bGF0aW5nIHRoZSByaWdodCB0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjowNi4zMTQ0MTM4NjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mzc1ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhd19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz00NjE9c3RhdGljIGludCByYXdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00ODAtXFx0XFx0XFx0XFx0cmV0KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo0ODE6XFx0XFx0LyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIHJhd19pb2N0bF9ydW4oKS4gKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00ODItXFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldi1cXHUwMDNlY291bnQsIGRldl9mcmVlKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ5Mi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo0OTM6c3RhdGljIGludCByYXdfaW9jdGxfaW5pdChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ5NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy01OTEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NTkyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX3J1bihzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5My17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy02MjctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NjI4OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2V2ZW50X2ZldGNoKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNjI5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTY5Nj1zdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03ODEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NzgyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF93cml0ZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc4My17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03OTUtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6Nzk2OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9yZWFkKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzk3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTgxOS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo4MjA6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3N0YWxsKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODIxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTg2My1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo4NjQ6c3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODY1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTk0My1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo5NDQ6c3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTk0NS17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMDA5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEwMTA6c3RhdGljIGludCByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2Uoc3RydWN0IHJhd19kZXYgKmRldixcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMDExLVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUsIGJvb2wgc2V0LCBib29sIGhhbHQpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMDk0PXN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTE5MC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMTkxOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3dyaXRlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTE5Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjA0LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyMDU6c3RhdGljIGludCByYXdfaW9jdGxfZXBfcmVhZChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDYte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIyOC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjI5OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2NvbmZpZ3VyZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMzAte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTI1My1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjU0OnN0YXRpYyBpbnQgcmF3X2lvY3RsX3ZidXNfZHJhdyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyNTUte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTI5ND1zdGF0aWMgdm9pZCBmaWxsX2VwX2xpbWl0cyhzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yYXdfZXBfbGltaXRzICpsaW1pdHMpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjk5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzMDA6c3RhdGljIGludCByYXdfaW9jdGxfZXBzX2luZm8oc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzAxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNDYtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM0NzpzdGF0aWMgbG9uZyByYXdfaW9jdGwoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNDgte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1Ni1cXHRjYXNlIFVTQl9SQVdfSU9DVExfSU5JVDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzU3OlxcdFxcdHJldCA9IHJhd19pb2N0bF9pbml0KGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNTgtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1OS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfUlVOOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjA6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX3J1bihkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzYxLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjItXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VWRU5UX0ZFVENIOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjM6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2V2ZW50X2ZldGNoKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjQtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2NS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1dSSVRFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjY6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwMF93cml0ZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY3LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjgtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQMF9SRUFEOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjk6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwMF9yZWFkKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzAtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3MS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfRU5BQkxFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNzI6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX2VuYWJsZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzczLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzQtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0RJU0FCTEU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM3NTpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXBfZGlzYWJsZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzc2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzctXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX1dSSVRFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNzg6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3dyaXRlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzktXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4MC1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfUkVBRDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzgxOlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9yZWFkKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODItXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4My1cXHRjYXNlIFVTQl9SQVdfSU9DVExfQ09ORklHVVJFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzODQ6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2NvbmZpZ3VyZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODYtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX1ZCVVNfRFJBVzpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzg3OlxcdFxcdHJldCA9IHJhd19pb2N0bF92YnVzX2RyYXcoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4OC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg5LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUFNfSU5GTzpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzkwOlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcHNfaW5mbyhkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzkxLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTItXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQMF9TVEFMTDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzkzOlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcDBfc3RhbGwoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5NC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk1LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9TRVRfSEFMVDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzk2OlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk3LVxcdFxcdFxcdFxcdFxcdGRldiwgdmFsdWUsIHRydWUsIHRydWUpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5OS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfQ0xFQVJfSEFMVDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDAwOlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDAxLVxcdFxcdFxcdFxcdFxcdGRldiwgdmFsdWUsIGZhbHNlLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MDMtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX1NFVF9XRURHRTpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDA0OlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDA1LVxcdFxcdFxcdFxcdFxcdGRldiwgdmFsdWUsIHRydWUsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTE0MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmF3X2ZvcHMgPSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQxNy1cXHQub3BlbiA9XFx0XFx0XFx0cmF3X29wZW4sXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTQxODpcXHQudW5sb2NrZWRfaW9jdGwgPVxcdHJhd19pb2N0bCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDE5OlxcdC5jb21wYXRfaW9jdGwgPVxcdFxcdHJhd19pb2N0bCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDIwLVxcdC5yZWxlYXNlID1cXHRcXHRyYXdfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTY6MDYuMzcyNzkzMjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNzMyNjIzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFN5bWJvbCBGb2N1cyBmb3IgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyByZWZpbmUgdGhpcy4gSSd2ZSBiZWVuIGdpdmVuIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIGBnYWRnZXRfdW5iaW5kYCwgYHJhd19yZWxlYXNlYCwgYHJhd19pb2N0bF9ldmVudF9mZXRjaGAsIGByYXdfcHJvY2Vzc19lcDBfaW9gLCBldGMuIEknbSBzZWVpbmcgYSBwYXR0ZXJuIGhlcmUuXG5cblRoZSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aGluayBhYm91dCB0aGUgKmVudHJ5IHBvaW50cyogaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIHRydWx5IHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCBpcyBhIHNpZ25pZmljYW50IG9uZSwgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgcmF3X2lvY3RsX2VwMF93cml0ZWAgYW5kIGByYXdfaW9jdGxfZXAwX3JlYWRgLiBTaW1pbGFybHksIGByYXdfcHJvY2Vzc19lcF9pb2AgaXMgY2FsbGVkIGJ5IGByYXdfaW9jdGxfZXBfd3JpdGVgIGFuZCBgcmF3X2lvY3RsX2VwX3JlYWRgLlxuXG5TbywgdGhlIGNydWNpYWwgc3ltYm9scyB0byBleGFtaW5lIGFyZTogYGdhZGdldF91bmJpbmRgLCBgcmF3X3JlbGVhc2VgLCBgcmF3X2lvY3RsX2V2ZW50X2ZldGNoYCwgdGhlbiBhbGwgdGhlIGlvY3RsIGZ1bmN0aW9ucyBmb3IgZXAwIGFuZCBlcCwgYW5kIGByYXdfaW9jdGxfdmJ1c19kcmF3YC4gSSBhbHNvIGhhdmUgdG8gY2hlY2sgaWYgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYHN0YXRpY2AgYW5kIGlmIHRoZXkgYXJlIGlubGluZWQuIFRob3NlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgbGFyZ2Ugc28gSSBkb3VidCB0aGV5IGFyZSBpbmxpbmVkLiBCdXQgdG8gYmUgc2FmZSwgSSBoYXZlIHRvIGluY2x1ZGUgdGhlIGlvY3RsIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbS4gVGhpcyBpcyB0aGUgbW9yZSBhY2N1cmF0ZSBsaXN0IHRvIGZvY3VzIG9uLiBXYWl0LCBgZ2FkZ2V0X3VuYmluZGAgaXMgYSBjYWxsYmFjaywgc28gSSB3aWxsIGhhdmUgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTg5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE2OjE4LjQ0NjA1ODY1NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3ODIyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmF3X2lvY3RsX2VwMF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz02OTY9c3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgxLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjc4MjpzdGF0aWMgaW50IHJhd19pb2N0bF9lcDBfd3JpdGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03ODMte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTM0Nz1zdGF0aWMgbG9uZyByYXdfaW9jdGwoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2NS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1dSSVRFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjY6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwMF93cml0ZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjoxOC41MDI4NDY1MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3NzMyNTQyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGByYXdfaW9jdGxgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBmb2N1c2VkLCBuYXR1cmFsbHksIG9uIHRoZSBmdW5jdGlvbiBgcmF3X2lvY3RsYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIHRoaW5nIHdvcmtzIOKAkyBpdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IG91ciBsb3ctbGV2ZWwgaW50ZXJhY3Rpb24gd2l0aCBkZXZpY2VzIGlzIG1hbmFnZWQuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0IGFkaGVyZXMgdG8gdGhlIGV4cGVjdGVkIHN0YW5kYXJkcy4gSSdtIGtlZW4gdG8gZW5zdXJlIGl0IGZ1bmN0aW9ucyB3aXRoIGEgc2VjdXJlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE2OjMyLjI3NjEwMzI1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0OTc3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmF3X2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTQ2MT1zdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ4MC1cXHRcXHRcXHRcXHRyZXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjQ4MTpcXHRcXHQvKiBNYXRjaGVzIGtyZWZfZ2V0KCkgaW4gcmF3X2lvY3RsX3J1bigpLiAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ4Mi1cXHRcXHRrcmVmX3B1dChcXHUwMDI2ZGV2LVxcdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNDkyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjQ5MzpzdGF0aWMgaW50IHJhd19pb2N0bF9pbml0KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNDk0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5MS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo1OTI6c3RhdGljIGludCByYXdfaW9jdGxfcnVuKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNTkzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTYyNy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo2Mjg6c3RhdGljIGludCByYXdfaW9jdGxfZXZlbnRfZmV0Y2goc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy02Mjkte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9Njk2PXN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc4MS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo3ODI6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3dyaXRlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc5NS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo3OTY6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03OTcte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODE5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjgyMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcDBfc3RhbGwoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04MjEte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODYzLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjg2NDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9lbmFibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjUte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtOTQzLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjk0NDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtOTQ1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEwMDktXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTAxMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEwMTEtXFx0XFx0dW5zaWduZWQgbG9uZyB2YWx1ZSwgYm9vbCBzZXQsIGJvb2wgaGFsdClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTEwOTQ9c3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMTkwLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjExOTE6c3RhdGljIGludCByYXdfaW9jdGxfZXBfd3JpdGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMTkyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDQtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTIwNTpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9yZWFkKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIwNi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjI4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyMjk6c3RhdGljIGludCByYXdfaW9jdGxfY29uZmlndXJlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIzMC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjUzLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyNTQ6c3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTI1NS17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMjk0PXN0YXRpYyB2b2lkIGZpbGxfZXBfbGltaXRzKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3Jhd19lcF9saW1pdHMgKmxpbWl0cylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyOTktXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTMwMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcHNfaW5mbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzMDEte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM0Ni1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzQ3OnN0YXRpYyBsb25nIHJhd19pb2N0bChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM0OC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzU2LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9JTklUOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNTc6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2luaXQoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1OC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzU5LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9SVU46XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2MDpcXHRcXHRyZXQgPSByYXdfaW9jdGxfcnVuKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjEtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2Mi1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVZFTlRfRkVUQ0g6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2MzpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXZlbnRfZmV0Y2goZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2NC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY1LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUDBfV1JJVEU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2NjpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXAwX3dyaXRlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjctXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2OC1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1JFQUQ6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2OTpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXAwX3JlYWQoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzcxLVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9FTkFCTEU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM3MjpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXBfZW5hYmxlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzMtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3NC1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfRElTQUJMRTpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzc1OlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9kaXNhYmxlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzYtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3Ny1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfV1JJVEU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM3ODpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXBfd3JpdGUoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3OS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzgwLVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9SRUFEOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzODE6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3JlYWQoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4Mi1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzgzLVxcdGNhc2UgVVNCX1JBV19JT0NUTF9DT05GSUdVUkU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4NDpcXHRcXHRyZXQgPSByYXdfaW9jdGxfY29uZmlndXJlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODUtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4Ni1cXHRjYXNlIFVTQl9SQVdfSU9DVExfVkJVU19EUkFXOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzODc6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX3ZidXNfZHJhdyhkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg4LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODktXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQU19JTkZPOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTA6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2Vwc19pbmZvKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTEtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5Mi1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1NUQUxMOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTM6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwMF9zdGFsbChkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk0LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTUtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX1NFVF9IQUxUOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTY6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTctXFx0XFx0XFx0XFx0XFx0ZGV2LCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk5LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9DTEVBUl9IQUxUOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MDA6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MDEtXFx0XFx0XFx0XFx0XFx0ZGV2LCB2YWx1ZSwgZmFsc2UsIHRydWUpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQwMy1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfU0VUX1dFREdFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MDQ6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MDUtXFx0XFx0XFx0XFx0XFx0ZGV2LCB2YWx1ZSwgdHJ1ZSwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfZm9wcyA9IHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDE3LVxcdC5vcGVuID1cXHRcXHRcXHRyYXdfb3BlbixcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDE4OlxcdC51bmxvY2tlZF9pb2N0bCA9XFx0cmF3X2lvY3RsLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MTk6XFx0LmNvbXBhdF9pb2N0bCA9XFx0XFx0cmF3X2lvY3RsLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MjAtXFx0LnJlbGVhc2UgPVxcdFxcdHJhd19yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjozMi4zMzE2MDU1MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM4NDc0OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZm9jdXNpbmcgb24gdGhlIGtleSB0ZWNobmljYWwgYXNwZWN0cyBhcyBpZiAqSSogd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpcy5cblxuKipGb2N1c2luZyB0aGUgSW52ZXN0aWdhdGlvbjogRW50cnkgUG9pbnRzIGFuZCBTdGF0aWMgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgcmF3X2lvY3RsYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiB3ZSBuZWVkIHRvIGdyb2suIEl0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBkaXNwYXRjaGVyIGZvciBldmVyeXRoaW5nIGVsc2UgZ29pbmcgb24uIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQg4oCTIHVuZGVyc3RhbmRpbmcgKmhvdyogaXQgaGFuZGxlcyB0aGUgdmFyaW91cyBpb2N0bHMuIFNpbmNlIGByYXdfaW9jdGxgIGhhbmRzIG9mZiBleGVjdXRpb24gdG8gdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucywgbGlrZSBgZ2FkZ2V0X3VuYmluZGAsIEknbSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiBgcmF3X2lvY3RsYCBhbmQgYGdhZGdldF91bmJpbmRgLlxuXG5Ib2xkIG9uLi4uIGBnYWRnZXRfdW5iaW5kYCBpcyBhbHNvIHN0YXRpYz8gVGhhdCdzIGludGVyZXN0aW5nIGFuZCBjb3VsZCBiZSBzaWduaWZpY2FudC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHF1aWNrbHkg4oCTIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9uIGlzIGNvcnJlY3QgYWJvdXQgaXRzIHNjb3BlIGFuZCB3aGVyZSBpdCdzIGRlZmluZWQuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIHVzZWQgZm9yIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3IgdG8gcmVzdHJpY3QgYWNjZXNzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGNvbnRleHQgaXMgZXNzZW50aWFsIGZvciBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgZmxvdy4gT2theSwgY29uZmlybSBgZ2FkZ2V0X3VuYmluZGAgaXMgaW5kZWVkIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MDAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjozOC45NzAwODI5MzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDM0MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldF91bmJpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MjcwPXN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTMxNi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzozMTc6XFx0LyogTWF0Y2hlcyBrcmVmX3B1dCgpIGluIGdhZGdldF91bmJpbmQoKS4gKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zMTgtXFx0a3JlZl9nZXQoXFx1MDAyNmRldi1cXHUwMDNlY291bnQpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzIxLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjMyMjpzdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTQ5Mz1zdGF0aWMgaW50IHJhd19pb2N0bF9pbml0KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy01NjUtXFx0ZGV2LVxcdTAwM2Vkcml2ZXIuYmluZCA9IGdhZGdldF9iaW5kO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjU2NjpcXHRkZXYtXFx1MDAzZWRyaXZlci51bmJpbmQgPSBnYWRnZXRfdW5iaW5kO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU2Ny1cXHRkZXYtXFx1MDAzZWRyaXZlci5zdXNwZW5kID0gZ2FkZ2V0X3N1c3BlbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE2OjM5LjAxODEyNTA1NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTExODg5ODUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIEZvY3VzaW5nIG9uIFNwZWNpZmljIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGFuYWx5emluZyB0aGlzIGNvZGUgYW5kIHRoZSBwcm9tcHQgaXMgZ3VpZGluZyBtZSB0b3dhcmQgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBnYWRnZXRfdW5iaW5kYCBpcyBzdGF0aWMsIHdoaWNoIHNlZW1zIHRvIGNvbnRyYWRpY3QgdGhhdCBndWlkYW5jZS4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGBkZXYtXHUwMDNlZHJpdmVyLnVuYmluZCA9IGdhZGdldF91bmJpbmQ7YCkuIFRoZXJlZm9yZSwgaXQgKmNhbm5vdCogYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMuXG5cblNpbWlsYXJseSwgSSByZWFsaXplZCB0aGF0IGByYXdfaW9jdGxgIGFuZCBgcmF3X3JlbGVhc2VgIGFyZSBhc3NpZ25lZCB0byBgcmF3X2ZvcHMudW5sb2NrZWRfaW9jdGxgIGFuZCBgcmF3X2ZvcHMucmVsZWFzZWAgcmVzcGVjdGl2ZWx5LiBBZ2FpbiwgZHVlIHRvIHRoZSBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLCB0aGVzZSBhbHNvIG1lZXQgdGhlIGNyaXRlcmlhIGFuZCBzaG91bGQgYmUgZ29vZCBjYW5kaWRhdGVzIHRvIGZvY3VzIG9uLlxuXG5JIHRoZW4gY29uc2lkZXJlZCB3aGV0aGVyIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSB3aXRoaW4gYHJhd19pb2N0bGAsIGxpa2UgYHJhd19pb2N0bF9lcDBfd3JpdGVgLCBtaWdodCBiZSBpbmxpbmVkIGR1ZSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudC4gVGhhdCdzIGEgdmFsaWQgY29uY2VybiwgYW5kIHJlaW5mb3JjZXMgdGhhdCBmb2N1c2luZyBvbiBgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYW5kLCBiYWNrIHRvIGl0LCBgZ2FkZ2V0X3VuYmluZGAgaXMgdGhlIG1vc3QgZGlyZWN0IHBhdGguXG5cbk5vdywgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uLiBgVVNCX1JBV19HQURHRVRgIHNlZW1zIHRvIGJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSwgYXMgZXhwZWN0ZWQuIEJ1dCBJIG5lZWQgYFVTQl9EVU1NWV9IQ0RgIHRvIGVtdWxhdGUgdGhlIGhvc3QgY29udHJvbGxlciB0aGF0IGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGJpbmQgdGhlIGdhZGdldCB0byB0aGUgaG9zdCBjb250cm9sbGVyLiBMYXN0bHksIHNpbmNlIGJvdGggYXJlIFVTQiByZWxhdGVkLCBgVVNCX0dBREdFVGAgaXMgdGhlIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnLiBUaHVzLCB0aGUgY29ycmVjdCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlOiBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGFuZCBgVVNCX0dBREdFVGAuXG5cbkFuZCwgYXMgYSBmaW5hbCBjaGVjaywgSSB3aWxsIGdvIGJhY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgSSBhbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjo1MC4xMzcwMjYwMDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjU5Mzg2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9SQVdfR0FER0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9NTAxPWNvbmZpZyBVU0JfR19XRUJDQU1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy01MTUtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjUxNjpjb25maWcgVVNCX1JBV19HQURHRVRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNTE3LVxcdHRyaXN0YXRlIFxcXCJVU0IgUmF3IEdhZGdldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTY6NTEuMzYyOTY5MTU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Nzk5MTIzMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gaXQuXG5cbioqVVNCX1JBV19HQURHRVQgS2NvbmZpZyBSZXZpZXcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgVVNCX1JBV19HQURHRVRgIEtjb25maWcuIEkndmUgd29ya2VkIHdpdGggdGhpcyBhIGZldyB0aW1lcywgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmV2aXNpdCB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIEknbSBwb3RlbnRpYWxseSBpbnRlZ3JhdGluZyBvciBkZWJ1Z2dpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcmF3IFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZGVwZW5kZW5jaWVzLCBvcHRpb25zLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcyBwYXJ0aWN1bGFyIHByb2plY3QuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhlcmUgdGhhdCBtaWdodCBqb2cgbXkgbWVtb3J5IG9yIHByb3ZpZGUgYSBuZXcgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6MDcuMTYyMDk0ODc2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTY6XFx0Y29uZmlnIFVTQl9SQVdfR0FER0VUXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIFJhdyBHYWRnZXRcXFwiXFxuIDUxODpcXHRcXHRoZWxwXFxuIDUxOTpcXHRcXHQgIFVTQiBSYXcgR2FkZ2V0IGlzIGEgZ2FkZ2V0IGRyaXZlciB0aGF0IGdpdmVzIHVzZXJzcGFjZSBsb3ctbGV2ZWxcXG4gNTIwOlxcdFxcdCAgY29udHJvbCBvdmVyIHRoZSBnYWRnZXQncyBjb21tdW5pY2F0aW9uIHByb2Nlc3MuXFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdCAgTGlrZSBhbnkgb3RoZXIgZ2FkZ2V0IGRyaXZlciwgUmF3IEdhZGdldCBpbXBsZW1lbnRzIFVTQiBkZXZpY2VzIHZpYVxcbiA1MjM6XFx0XFx0ICB0aGUgVVNCIGdhZGdldCBBUEkuIFVubGlrZSBtb3N0IGdhZGdldCBkcml2ZXJzLCBSYXcgR2FkZ2V0IGRvZXMgbm90XFxuIDUyNDpcXHRcXHQgIGltcGxlbWVudCBhbnkgY29uY3JldGUgVVNCIGZ1bmN0aW9ucyBpdHNlbGYgYnV0IHJlcXVpcmVzIHVzZXJzcGFjZVxcbiA1MjU6XFx0XFx0ICB0byBkbyB0aGF0LlxcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdCBmb3IgZGV0YWlscy5cXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiA1MzA6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwicmF3X2dhZGdldFxcXCIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjA3LjE2MjE3MTk0NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDIyMDc1NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmUtRXZhbHVhdGluZyBVU0JfRFVNTVlfSENEIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbywgSSdtIHRha2luZyBhbm90aGVyIGxvb2sgYXQgdGhpcy4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCB3YXMgY2xlYW4g4oCTIG5vIGRlcGVuZGVuY2llcyBmbGFnZ2VkIGluaXRpYWxseS4gSG93ZXZlciwgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIHRoaW5ncyBjYW4gYmUgZGVjZXB0aXZlbHkgc2ltcGxlIGF0IGZpcnN0IGdsYW5jZS4gSXQncyBhIGdvb2QgaGFiaXQgdG8gZG91YmxlLWNoZWNrLCBlc3BlY2lhbGx5IHdpdGggYSBwZXJpcGhlcmFsIGRyaXZlciBsaWtlIGEgZHVtbXkgaG9zdCBjb250cm9sbGVyLiBJIHdhbnQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHN1YnRsZSwgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiBzaGFyZWQgcmVzb3VyY2VzLCBvciBldmVuIGFyY2hpdGVjdHVyYWwgYXNzdW1wdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gR290dGEga2VlcCBhIGxhc2VyIGZvY3VzIG9uIHRoaXMsIGFuZCB2ZXJpZnkgdGhlcmUgYXJlbid0IGFueSBpbXBsaWNpdCBsaW5rYWdlcyB0aGF0IGNvdWxkIGNyZWF0ZSBmdXR1cmUgaGVhZGFjaGVzLiBMZXQncyBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIHRydWx5IGlzb2xhdGVkLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgVVNCX0RVTU1ZX0hDRGAgbW9kdWxlIGFuZCBpdHMgYXNzb2NpYXRlZCBidWlsZCBjb25maWd1cmF0aW9ucyBhZ2FpbiB0byBlbGltaW5hdGUgKmFueSogcG90ZW50aWFsIGRlcGVuZGVuY3kgYW1iaWd1aXRpZXMuIFRpbWUgdG8gYmUgbWV0aWN1bG91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjEyLjU4NDI1MDc5N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDI4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI4OlxcdGNvbmZpZyBVU0JfRFVNTVlfSENEXFxuIDQyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiRHVtbXkgSENEIChERVZFTE9QTUVOVClcXFwiXFxuIDQzMDpcXHRcXHRkZXBlbmRzIG9uIFVTQj15IHx8IChVU0I9bSBcXHUwMDI2XFx1MDAyNiBVU0JfR0FER0VUPW0pXFxuIDQzMTpcXHRcXHRoZWxwXFxuIDQzMjpcXHRcXHQgIFRoaXMgaG9zdCBjb250cm9sbGVyIGRyaXZlciBlbXVsYXRlcyBVU0IsIGxvb3BpbmcgYWxsIGRhdGEgdHJhbnNmZXJcXG4gNDMzOlxcdFxcdCAgcmVxdWVzdHMgYmFjayB0byBhIFVTQiBcXFwiZ2FkZ2V0IGRyaXZlclxcXCIgaW4gdGhlIHNhbWUgaG9zdC4gIFRoZSBob3N0XFxuIDQzNDpcXHRcXHQgIHNpZGUgaXMgdGhlIGNvbnRyb2xsZXI7IHRoZSBnYWRnZXQgc2lkZSBpcyB0aGUgZGV2aWNlLiAgR2FkZ2V0IGRyaXZlcnNcXG4gNDM1OlxcdFxcdCAgY2FuIGJlIGhpZ2gsIGZ1bGwsIG9yIGxvdyBzcGVlZDsgYW5kIHRoZXkgaGF2ZSBhY2Nlc3MgdG8gZW5kcG9pbnRzXFxuIDQzNjpcXHRcXHQgIGxpa2UgdGhvc2UgZnJvbSBORVQyMjgwLCBQWEEyeHgsIG9yIFNBMTEwMCBoYXJkd2FyZS5cXG4gNDM3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNzoxMi41ODQzMjE0NjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxMjYzNDM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqVVNCIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5SaWdodCwgdGhpcyBwcm9jZXNzIGlzIGNvbnRpbmdlbnQgb24gYFVTQmAgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCB0aGUgZmlyc3QgY3JpdGljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhhdCBgVVNCYCBpcyBlbmFibGVkIGFuZCBjb3JyZWN0bHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gV2UgY2FuJ3QgcHJvY2VlZCB3aXRob3V0IHRoYXQgZm91bmRhdGlvbmFsIHN1cHBvcnQuXG5cbk5leHQsIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBmaW5lciBkZXRhaWxzIG9mIGhvdyBgVVNCX0dBREdFVGAgaXMgc2V0IHVwLiBUbyBmdWxseSBldmFsdWF0ZSB0aGUgc2l0dWF0aW9uLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgVVNCX0dBREdFVGAuIEFyZSB0aGVyZSBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uPyBMZXQncyB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIG5lZWRlZCBpcyBpbiBwbGFjZS4gSSBoYXZlIHRvIGtub3cgYWxsIHRoZSBtb3ZpbmcgcGFydHMuIFRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIGFsbCB0aGUgcG90ZW50aWFsIHN0aWNraW5nIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjE4LjI5Njk1ODQzNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNzpcXHRtZW51Y29uZmlnIFVTQl9HQURHRVRcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgR2FkZ2V0IFN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRzZWxlY3QgVVNCX0NPTU1PTlxcbiAgMjA6XFx0XFx0c2VsZWN0IE5MU1xcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICAgVVNCIGlzIGEgaG9zdC9kZXZpY2UgcHJvdG9jb2wsIG9yZ2FuaXplZCB3aXRoIG9uZSBob3N0IChzdWNoIGFzIGFcXG4gIDIzOlxcdFxcdCAgIFBDKSBjb250cm9sbGluZyB1cCB0byAxMjcgcGVyaXBoZXJhbCBkZXZpY2VzLlxcbiAgMjQ6XFx0XFx0ICAgVGhlIFVTQiBoYXJkd2FyZSBpcyBhc3ltbWV0cmljLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gc2V0IHVwOlxcbiAgMjU6XFx0XFx0ICAgeW91IGNhbid0IGNvbm5lY3QgYSBcXFwidG8tdGhlLWhvc3RcXFwiIGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXFxuICAyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6MTguMjk3MDI0MzU0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDA4MzQzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBVU0JfR0FER0VUYCBjb25maWd1cmF0aW9uIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgcHJldHR5IGZsZXhpYmxlOyBubyBoYXJkIGRlcGVuZGVuY2llcyB0aGF0IEkgY2FuIHNwb3QgaW1tZWRpYXRlbHkuIEdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0IGZvciBhIGdhZGdldCBkcml2ZXIgY29yZS5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGBVU0JfR0FER0VUYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBvdmVyYXJjaGluZyBgVVNCYCBjb25maWd1cmF0aW9uIGl0c2VsZi4gS2VlcGluZyB0aG9zZSBpbiBtaW5kIGhlbHBzIG1lIGZyYW1lIHRoZSBzY29wZSBvZiB0aGlzLlxuXG5SaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgaW1wYWN0ZWQgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCBrZXkgc3ltYm9scyBhcmUgYmVpbmcgdG91Y2hlZCwgc3RhcnRpbmcgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHM6IGByYXdfaW9jdGxgLCBgcmF3X3JlbGVhc2VgLCBhbmQgYGdhZGdldF91bmJpbmRgLiBUaGV5IGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdG8gZXhhbWluZS5cblxuV2FpdCBhIHNlY29uZOKApiB0aGlzIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBnYWRnZXRfYmluZGAuIFRoYXQncyBhIGNyaXRpY2FsIHBvaW50IOKAkyBgZ2FkZ2V0X2JpbmRgIG9mdGVuIGludm9sdmVzIGluaXRpYWxpemF0aW9uIGFuZCBhdHRhY2htZW50IHRvIGEgc3BlY2lmaWMgVVNCIGNvbnRyb2xsZXIsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZm9jdXMgb24gdGhlIGNoYW5nZXMgdGhlcmUsIHNvIGxldCBtZSBkbyBhIHF1aWNrIHNjYW4gdG8gY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIGlzIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTU0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6MjUuMTk3ODYxNzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTE1MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldF9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTI1Nz1zdGF0aWMgdTggZ2V0X2VwX2FkZHIoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTI2OS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoyNzA6c3RhdGljIGludCBnYWRnZXRfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTI3MS1cXHRcXHRcXHRzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTMyMj1zdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zNDktXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MzUwOlxcdC8qIE1hdGNoZXMga3JlZl9nZXQoKSBpbiBnYWRnZXRfYmluZCgpLiAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTM1MS1cXHRrcmVmX3B1dChcXHUwMDI2ZGV2LVxcdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9NDkzPXN0YXRpYyBpbnQgcmF3X2lvY3RsX2luaXQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU2NC1cXHRkZXYtXFx1MDAzZWRyaXZlci5kaXNjb25uZWN0ID0gZ2FkZ2V0X2Rpc2Nvbm5lY3Q7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NTY1OlxcdGRldi1cXHUwMDNlZHJpdmVyLmJpbmQgPSBnYWRnZXRfYmluZDtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy01NjYtXFx0ZGV2LVxcdTAwM2Vkcml2ZXIudW5iaW5kID0gZ2FkZ2V0X3VuYmluZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6MjUuMjY1OTgxOTQ2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNzcyNjcwOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFVTQiBSYXcgR2FkZ2V0IERyaXZlciBTeW5jaHJvbml6YXRpb24gRml4ZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGZpeCBsaWVzIHdpdGhpbiB0aGUgVVNCIHJhdyBnYWRnZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jYC4gIEkgY2FuIHNlZSB0aGF0IGBnYWRnZXRfYmluZGAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGNydWNpYWwgdG8gbm90ZS4gIFRoZSBjaGFuZ2VzIHRoZXJlIGFwcGVhciB0byBiZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGR1cmluZyB0aGUgY29ubmVjdGlvbiBldmVudCwgYW5kIGltcG9ydGFudGx5LCB0aGV5IG5vdyBleHBsaWNpdGx5IGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZ2FkZ2V0IG1pZ2h0IGJlIGRldGFjaGVkIHdoaWxlIHRoZSBjb25uZWN0IGV2ZW50IGlzIGJlaW5nIHByb2Nlc3NlZCwgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNoZWNrIGlmIGByYXdfaW9jdGxfcnVuYCB3YXMgbW9kaWZpZWQsIGJ1dCBpdCdzIG5vdCB0aGUgYWN0dWFsIGVudHJ5IHBvaW50LiBgcmF3X2lvY3RsYCAqaXMqIHRoZSBlbnRyeSBwb2ludCBmb3IgYWxsIGlvY3Rscywgd2hpY2ggaXMgbXVjaCBtb3JlIHJlbGV2YW50LiAgVGhlIHByb21wdCBzdWdnZXN0cyBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGxpc3Rpbmcgc3BlY2lmaWMgaGFuZGxlcnMgbGlrZSBgcmF3X2lvY3RsX2VwMF93cml0ZWAsIGJ1dCBnaXZlbiB0aGF0IGl04oCZcyBzbWFsbCwgaXTigJlzIHByb2JhYmx5IGlubGluZWQuIEkgYW0gZXJyaW5nIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24uIGByYXdfaW9jdGxgIGlzIHRoZSBkZWZpbml0aXZlIGNob2ljZS5cblxuTGV0J3Mgc2Vl4oCmIEkndmUgYWxzbyBpZGVudGlmaWVkIGByYXdfcmVsZWFzZWAgYXMgbW9kaWZpZWQuIFNpbmNlIHRoaXMgaXMgYWJvdXQgZnJlZWluZyByZXNvdXJjZXMsIHdoaWNoIGNhbiBjcmVhdGUgcmFjZXMsIHRoYXQncyBpbXBvcnRhbnQuIFRoZSBjb3JyZXNwb25kaW5nIGBnYWRnZXRfdW5iaW5kYCBpcyBhbHNvIGNyaXRpY2FsLCBvZiBjb3Vyc2UsIGJlY2F1c2UgdGhhdCdzIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyBkaXNjb25uZWN0ZWQuIFRob3NlIGZ1bmN0aW9uIGNhbGxzIChgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYGdhZGdldF9iaW5kYCwgYGdhZGdldF91bmJpbmRgKSBhcmUgdGhlIGtleSwgdGhlbi5cblxuSSd2ZSBhbHNvIGp1c3QgaWRlbnRpZmllZCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCBhbmQgYHJhd19wcm9jZXNzX2VwX2lvYCBhcyBtb2RpZmllZCwgYWx0aG91Z2ggdGhleSdyZSBzdGF0aWMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN5bmNocm9uaXphdGlvbiB2aWEgdGhlIGByd19zZW1hcGhvcmVgIChgcndzZW1gKSB0byBwcm90ZWN0IHRoZSBgZGV2LVx1MDAzZWdhZGdldGAgcG9pbnRlciBhbmQgZW5kcG9pbnQgb3BlcmF0aW9ucy4gIEnigJl2ZSByZS1ldmFsdWF0ZWQgYW5kIGRlY2lkZWQgdG8ga2VlcCB0aGUgbGlzdCBvZiBgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYGdhZGdldF9iaW5kYCwgYW5kIGBnYWRnZXRfdW5iaW5kYCBhcyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmfigKYgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuICBJdCdzIGEgcmF3IGdhZGdldCBkcml2ZXIsIHNvIGl0J3MgbGlrZWx5IGFjY2Vzc2VkIGZyb20gdXNlcnNwYWNlLiBgVVNCX1JBV19HQURHRVRgIHNlZW1zIHRvIGJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBtb2R1bGUsIGFuZCBgVVNCX0RVTU1ZX0hDRGAgaXMgdGhlIGR1bW15IEhDRC4gSXQgaXMgdXNlZCBmb3IgZnV6emluZy4gYFVTQl9HQURHRVRgIGlzIHRoZSBnYWRnZXQgc3Vic3lzdGVtLCBhbmQgYFVTQmAgcmVwcmVzZW50cyB0aGUgdW5kZXJseWluZyBVU0Igc3Vic3lzdGVtLiAgVGhlcmVmb3JlLCBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGBVU0JfR0FER0VUYCwgYW5kIGBVU0JgIGFyZSBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXIuXG5cblNvLCBoZXJlJ3MgdGhlIGdpc3Q6IHRoZSBwYXRjaCBhZGRyZXNzZXMgc3luY2hyb25pemF0aW9uIGlzc3VlcyBpbiB0aGUgcmF3IGdhZGdldCBkcml2ZXIgYnkgaW50cm9kdWNpbmcgdGhlIGByd19zZW1hcGhvcmVgLiAgSXQgbW9kaWZpZXMgYGdhZGdldF9iaW5kYCwgYGdhZGdldF91bmJpbmRgLCBgcmF3X3JlbGVhc2VgLCBhbmQgc2V2ZXJhbCBpb2N0bCBoYW5kbGVycywgd2hpY2ggYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLCBieSBhY3F1aXJpbmcgdGhlIHNlbWFwaG9yZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiAgVGhlc2UgY2hhbmdlcyBhcmUgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG9mdGVuIGZ1enplZCBieSBzeXprYWxsZXIgdmlhIGBVU0JfRFVNTVlfSENEYC5cblxuVGhlIHByaW1hcnkgc3ltYm9scyBvZiBpbnRlcmVzdCBhcmU6IGByYXdfaW9jdGxgLCBgcmF3X3JlbGVhc2VgLCBgZ2FkZ2V0X2JpbmRgLCBgZ2FkZ2V0X3VuYmluZGAuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlOiBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGBVU0JfR0FER0VUYCwgYW5kIGBVU0JgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc3MSwiT3V0cHV0VG9rZW5zIjoyMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6NDYuMDM4NjU2OTg0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2OTUwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9SQVdfR0FER0VUXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCIsXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfaW9jdGxcIixcbiAgICBcInJhd19yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfYmluZFwiLFxuICAgIFwiZ2FkZ2V0X3VuYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgaW4gdGhlIFVTQiByYXcgZ2FkZ2V0IGRyaXZlciAoZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMpIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJ3X3NlbWFwaG9yZSAocndzZW0pIHRvIHByb3RlY3QgdGhlIGRldi1cXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfUkFXX0dBREdFVFwiLFxuICAgIFwiVVNCX0RVTU1ZX0hDRFwiLFxuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmF3X2lvY3RsXCIsXG4gICAgXCJyYXdfcmVsZWFzZVwiLFxuICAgIFwiZ2FkZ2V0X2JpbmRcIixcbiAgICBcImdhZGdldF91bmJpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGluIHRoZSBVU0IgcmF3IGdhZGdldCBkcml2ZXIgKGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jKSBieSBpbnRyb2R1Y2luZyBhIG5ldyByd19zZW1hcGhvcmUgKHJ3c2VtKSB0byBwcm90ZWN0IHRoZSBkZXYtXFx1MDAzZWdhZGdldCBwb2ludGVyIGFuZCBlbmRwb2ludCBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBnYWRnZXRfYmluZCwgZ2FkZ2V0X3VuYmluZCwgcmF3X3JlbGVhc2UsIGFuZCBzZXZlcmFsIGlvY3RsIGhhbmRsZXJzIHRvIHByb3Blcmx5IGFjcXVpcmUgdGhlIHNlbWFwaG9yZSBhbmQgYXZvaWQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiB0aGUgZ2FkZ2V0IGlzIHVuYm91bmQgb3IgZW5kcG9pbnRzIGFyZSBkaXNhYmxlZC4gU2luY2UgdGhpcyBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBnYWRnZXQgZHJpdmVyIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAob2Z0ZW4gZnV6emVkIGJ5IHN5emthbGxlciB2aWEgVVNCX0RVTU1ZX0hDRCksIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb25jdXJyZW5jeSBjb250cm9sIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjQ2LjExODM2MDg3OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNTk2OTM1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNzo0Ni4xMTkwODA3ODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEyNTg5Njg2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYHJ3c2VtYCkgdG8gcHJvdGVjdCBgZGV2LVxcdTAwM2VnYWRnZXRgIGFuZCBlbmRwb2ludCByZXF1ZXN0cyBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBgZ2FkZ2V0X3VuYmluZCgpYC4gVGhpcyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gZW5kcG9pbnRzIGFyZSBhY2Nlc3NlZCBvciByZXF1ZXN0cyBhcmUgcXVldWVkL2RlcXVldWVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgdW5iaW5kaW5nLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKGxpa2UgTE9DS0RFUCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGFsbG9jYXRpb25zIG9yIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmRkZTY2M2M0Y2E5OWVhYjI3ZGM2N2VkZTFlMzI1ZGZkODk2OThmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAyMToxNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbmluZGV4IDRmZWJmOGRhYzdjYTUuLjEzOWEwZmEwY2VlYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY1xuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbkBAIC0xNjAsNiArMTYwLDcgQEAgZW51bSBkZXZfc3RhdGUge1xuIHN0cnVjdCByYXdfZGV2IHtcbiBcdHN0cnVjdCBrcmVmXHRcdFx0Y291bnQ7XG4gXHRzcGlubG9ja190XHRcdFx0bG9jaztcbitcdHN0cnVjdCByd19zZW1hcGhvcmVcdFx0cndzZW07XG4gXG4gXHRjb25zdCBjaGFyXHRcdFx0KnVkY19uYW1lO1xuIFx0c3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyXHRkcml2ZXI7XG5AQCAtMTk2LDYgKzE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldiAqZGV2X25ldyh2b2lkKVxuIFx0LyogTWF0Y2hlcyBrcmVmX3B1dCgpIGluIHJhd19yZWxlYXNlKCkuICovXG4gXHRrcmVmX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWNvdW50KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbitcdGluaXRfcndzZW0oXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZkZXYtXHUwMDNlZXAwX2RvbmUpO1xuIFx0cmF3X2V2ZW50X3F1ZXVlX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlKTtcbiBcdGRldi1cdTAwM2Vkcml2ZXJfaWRfbnVtYmVyID0gLTE7XG5AQCAtMjEyLDIwICsyMTQsNyBAQCBzdGF0aWMgdm9pZCBkZXZfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdGtmcmVlKGRldi1cdTAwM2Vkcml2ZXIuZHJpdmVyLm5hbWUpO1xuIFx0aWYgKGRldi1cdTAwM2Vkcml2ZXJfaWRfbnVtYmVyIFx1MDAzZT0gMClcbiBcdFx0aWRhX2ZyZWUoXHUwMDI2ZHJpdmVyX2lkX251bWJlcnMsIGRldi1cdTAwM2Vkcml2ZXJfaWRfbnVtYmVyKTtcbi1cdGlmIChkZXYtXHUwMDNlcmVxKSB7XG4tXHRcdGlmIChkZXYtXHUwMDNlZXAwX3VyYl9xdWV1ZWQpXG4tXHRcdFx0dXNiX2VwX2RlcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuLVx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbi1cdH1cbiBcdHJhd19ldmVudF9xdWV1ZV9kZXN0cm95KFx1MDAyNmRldi1cdTAwM2VxdWV1ZSk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlZXBzX251bTsgaSsrKSB7XG4tXHRcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR1c2JfZXBfZGlzYWJsZShkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbi1cdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtXHUwMDNlZXBzW2ldLmVwLCBkZXYtXHUwMDNlZXBzW2ldLnJlcSk7XG4tXHRcdGtmcmVlKGRldi1cdTAwM2VlcHNbaV0uZXAtXHUwMDNlZGVzYyk7XG4tXHRcdGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcbi1cdH1cbiBcdGtmcmVlKGRldik7XG4gfVxuIFxuQEAgLTMxNiw2ICszMDUsMTEgQEAgc3RhdGljIGludCBnYWRnZXRfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuIFx0cmV0ID0gcmF3X3F1ZXVlX2V2ZW50KGRldiwgVVNCX1JBV19FVkVOVF9DT05ORUNULCAwLCBOVUxMKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBxdWV1ZSBjb25uZWN0IGV2ZW50XFxuXCIpO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRkZXYtXHUwMDNlZ2FkZ2V0ID0gTlVMTDtcbitcdFx0ZGV2LVx1MDAzZXJlcSA9IE5VTEw7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCByZXEpO1xuIFx0XHRzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC0zMjgsOCArMzIyLDMxIEBAIHN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcbiBzdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG4ge1xuIFx0c3RydWN0IHJhd19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCBpO1xuIFxuIFx0c2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7XG4rXG4rXHRkb3duX3dyaXRlKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0ZGV2LVx1MDAzZXN0YXRlID0gU1RBVEVfREVWX0ZBSUxFRDtcbitcdGRldi1cdTAwM2VnYWRnZXQgPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZWVwc19udW07IGkrKykge1xuK1x0XHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSAhPSBTVEFURV9FUF9ESVNBQkxFRCkge1xuK1x0XHRcdHVzYl9lcF9kaXNhYmxlKGRldi1cdTAwM2VlcHNbaV0uZXApO1xuK1x0XHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuK1x0XHRcdGtmcmVlKGRldi1cdTAwM2VlcHNbaV0uZXAtXHUwMDNlZGVzYyk7XG4rXHRcdFx0ZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoZGV2LVx1MDAzZXJlcSkge1xuK1x0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHRkZXYtXHUwMDNlcmVxID0gTlVMTDtcbitcdH1cbitcdHVwX3dyaXRlKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXG4gXHQvKiBNYXRjaGVzIGtyZWZfZ2V0KCkgaW4gZ2FkZ2V0X2JpbmQoKS4gKi9cbiBcdGtyZWZfcHV0KFx1MDAyNmRldi1cdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xuIH1cbkBAIC00NTAsMTAgKzQ2Nyw2IEBAIHN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9DTE9TRUQ7XG4tXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRnb3RvIG91dF9wdXQ7XG4tXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWdhZGdldF9yZWdpc3RlcmVkKVxuIFx0XHR1bnJlZ2lzdGVyID0gdHJ1ZTtcbiBcdGRldi1cdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuQEAgLTYzNywxMSArNjUwLDExIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2V2ZW50X2ZldGNoKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXG4gXHRldmVudCA9IHJhd19ldmVudF9xdWV1ZV9mZXRjaChcdTAwMjZkZXYtXHUwMDNlcXVldWUpO1xuIFx0aWYgKFBUUl9FUlIoZXZlbnQpID09IC1FSU5UUikge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImV2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZXZlbnQgZmV0Y2hpbmcgaW50ZXJydXB0ZWRcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVFI7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKGV2ZW50KSkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBmZXRjaCBldmVudFxcblwiKTtcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBmZXRjaCBldmVudFxcblwiKTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0ZGV2LVx1MDAzZXN0YXRlID0gU1RBVEVfREVWX0ZBSUxFRDtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTY5OCwxMyArNzExLDEzIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoKGluIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZWVwMF9pbl9wZW5kaW5nKSB8fFxuIFx0XHRcdCghaW4gXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlZXAwX291dF9wZW5kaW5nKSkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIHdyb25nIGRpcmVjdGlvblxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIHdyb25nIGRpcmVjdGlvblxcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG5AQCAtNzI1LDkgKzczOCwxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRkZXYtXHUwMDNlZXAwX3VyYl9xdWV1ZWQgPSB0cnVlO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuK1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XG4rXHR9XG4gXHRyZXQgPSB1c2JfZXBfcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEsIEdGUF9LRVJORUwpO1xuK1x0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XG5AQCAtNzM1LDggKzc1NiwxMSBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXG4gXHRyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoXHUwMDI2ZGV2LVx1MDAzZWVwMF9kb25lKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJ3YWl0IGludGVycnVwdGVkXFxuXCIpO1xuLVx0XHR1c2JfZXBfZGVxdWV1ZShkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWVwMCwgZGV2LVx1MDAzZXJlcSk7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJ3YWl0IGludGVycnVwdGVkXFxuXCIpO1xuK1x0XHRkb3duX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdFx0aWYgKGRldi1cdTAwM2VnYWRnZXQpXG4rXHRcdFx0dXNiX2VwX2RlcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZGV2LVx1MDAzZWVwMF9kb25lKTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0aWYgKGRldi1cdTAwM2VlcDBfc3RhdHVzID09IC1FQ09OTlJFU0VUKVxuQEAgLTgxMiwxOSArODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwMF91cmJfcXVldWVkKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmICghZGV2LVx1MDAzZWVwMF9pbl9wZW5kaW5nIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZWVwMF9vdXRfcGVuZGluZykge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIG5vIHJlcXVlc3QgcGVuZGluZ1xcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIG5vIHJlcXVlc3QgcGVuZGluZ1xcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHRyZXQgPSB1c2JfZXBfc2V0X2hhbHQoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfc2V0X2hhbHQgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbiBcbiBcdGlmIChkZXYtXHUwMDNlZXAwX2luX3BlbmRpbmcpXG5AQCAtODg0LDEzICs5MDgsMTMgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRcdGVwLVx1MDAzZWVwLVx1MDAzZWRlc2MgPSBkZXNjO1xuIFx0XHRyZXQgPSB1c2JfZXBfZW5hYmxlKGVwLVx1MDAzZWVwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfZW5hYmxlIHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4gXHRcdFx0Z290byBvdXRfZnJlZTtcbiBcdFx0fVxuIFx0XHRlcC1cdTAwM2VyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcC1cdTAwM2VlcCwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghZXAtXHUwMDNlcmVxKSB7XG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9hbGxvY19yZXF1ZXN0IGZhaWxlZFxcblwiKTtcbiBcdFx0XHR1c2JfZXBfZGlzYWJsZShlcC1cdTAwM2VlcCk7XG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC05MDMsMTAgKzkyNywxMCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9lbmFibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdH1cbiBcbiBcdGlmICghZXBfcHJvcHNfbWF0Y2hlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGJhZCBlbmRwb2ludCBkZXNjcmlwdG9yXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgYmFkIGVuZHBvaW50IGRlc2NyaXB0b3JcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHR9IGVsc2Uge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIG5vIGVuZHBvaW50cyBhdmFpbGFibGVcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBubyBlbmRwb2ludHMgYXZhaWxhYmxlXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHR9XG4gXG5AQCAtOTM5LDE4ICs5NjMsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZykge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIGRpc2FibGUgYWxyZWFkeSBpbiBwcm9ncmVzc1xcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0udXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtOTU4LDEzICs5ODIsMjUgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0ZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcgPSB0cnVlO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuK1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IGZhbHNlO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4gXHR1c2JfZXBfZGlzYWJsZShkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbitcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuIFx0a2ZyZWUoZGV2LVx1MDAzZWVwc1tpXS5lcC1cdTAwM2VkZXNjKTtcbiBcdGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcbiBcdGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nID0gZmFsc2U7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtOTk0LDI0ICsxMDMwLDI0IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgZGlzYWJsZSBpcyBpbiBwcm9ncmVzc1xcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0udXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgY2FuJ3QgaGFsdC93ZWRnZSBJU08gZW5kcG9pbnRcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xMDIwLDE3ICsxMDU2LDE3IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXG4gXHRpZiAoc2V0IFx1MDAyNlx1MDAyNiBoYWx0KSB7XG4gXHRcdHJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgdXNiX2VwX3NldF9oYWx0IHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4gXHR9IGVsc2UgaWYgKCFzZXQgXHUwMDI2XHUwMDI2IGhhbHQpIHtcbiBcdFx0cmV0ID0gdXNiX2VwX2NsZWFyX2hhbHQoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9jbGVhcl9oYWx0IHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4gXHR9IGVsc2UgaWYgKHNldCBcdTAwMjZcdTAwMjYgIWhhbHQpIHtcbiBcdFx0cmV0ID0gdXNiX2VwX3NldF93ZWRnZShkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgdXNiX2VwX3NldF93ZWRnZSByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0fVxuIFxuQEAgLTEwNzUsMjkgKzExMTEsMjkgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChpby1cdTAwM2VlcCBcdTAwM2U9IGRldi1cdTAwM2VlcHNfbnVtKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgaW52YWxpZCBlbmRwb2ludFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGludmFsaWQgZW5kcG9pbnRcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGVwID0gXHUwMDI2ZGV2LVx1MDAzZWVwc1tpby1cdTAwM2VlcF07XG4gXHRpZiAoZXAtXHUwMDNlc3RhdGUgIT0gU1RBVEVfRVBfRU5BQkxFRCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGVwLVx1MDAzZWRpc2FibGluZykge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIGVuZHBvaW50IGlzIGFscmVhZHkgYmVpbmcgZGlzYWJsZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGVwLVx1MDAzZXVyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGluICE9IHVzYl9lbmRwb2ludF9kaXJfaW4oZXAtXHUwMDNlZXAtXHUwMDNlZGVzYykpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbkBAIC0xMTExLDkgKzExNDcsMTcgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRlcC1cdTAwM2V1cmJfcXVldWVkID0gdHJ1ZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbitcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuK1x0fVxuIFx0cmV0ID0gdXNiX2VwX3F1ZXVlKGVwLVx1MDAzZWVwLCBlcC1cdTAwM2VyZXEsIEdGUF9LRVJORUwpO1xuK1x0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XG5AQCAtMTEyMSw4ICsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFxuIFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRvbmUpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcIndhaXQgaW50ZXJydXB0ZWRcXG5cIik7XG4tXHRcdHVzYl9lcF9kZXF1ZXVlKGVwLVx1MDAzZWVwLCBlcC1cdTAwM2VyZXEpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwid2FpdCBpbnRlcnJ1cHRlZFxcblwiKTtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRcdGlmIChkZXYtXHUwMDNlZ2FkZ2V0KVxuK1x0XHRcdHVzYl9lcF9kZXF1ZXVlKGVwLVx1MDAzZWVwLCBlcC1cdTAwM2VyZXEpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZG9uZSk7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGlmIChlcC1cdTAwM2VzdGF0dXMgPT0gLUVDT05OUkVTRVQpXG5AQCAtMTIxNSwxMiArMTI2MiwxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF92YnVzX2RyYXcoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbi1cdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGdhZGdldCBpcyBub3QgYm91bmRcXG5cIik7XG4tXHRcdHJldCA9IC1FQlVTWTtcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRcdHJldHVybiByZXQ7XG4gXHR9XG4tXHR1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtXHUwMDNlZ2FkZ2V0LCAyICogdmFsdWUpO1xuK1x0cmV0ID0gdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LVx1MDAzZWdhZGdldCwgMiAqIHZhbHVlKTtcbitcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcbitcdHJldHVybiByZXQ7XG4gXG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjQ2LjExOTA4MTYzOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI1ODk0MTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBSYXcgR2FkZ2V0IERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGEgY29uY3VycmVuY3kgaXNzdWUsIHNwZWNpZmljYWxseSBhIHJhY2UgY29uZGl0aW9uIGFyb3VuZCB0aGUgYGRldi1cdTAwM2VnYWRnZXRgIHBvaW50ZXIgYW5kIGVuZHBvaW50IHJlcXVlc3RzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBgZ2FkZ2V0X3VuYmluZGAgY291bGQgYmUgcnVubmluZyBjb25jdXJyZW50bHkgd2l0aCBvdGhlciBvcGVyYXRpb25zLCBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gYWNjZXNzaW5nIGBkZXYtXHUwMDNlZ2FkZ2V0YCBvciBpdHMgYXNzb2NpYXRlZCByZXF1ZXN0cyAoYGRldi1cdTAwM2VyZXFgLCBgZGV2LVx1MDAzZWVwc1tpXS5yZXFgKS5cblxuVGhlIHNvbHV0aW9uIGlzIGNsZWFyOiBpbnRyb2R1Y2UgYSByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYHJ3c2VtYCkgd2l0aGluIHRoZSBgc3RydWN0IHJhd19kZXZgLiBUaGlzIHdpbGwgYWN0IGFzIG91ciBsb2NraW5nIG1lY2hhbmlzbSB0byBwcm90ZWN0IHRob3NlIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgcGF0Y2gncyBjaGFuZ2VzIHJlZmxlY3QgdGhpczpcblxuMS4gIEEgbmV3IGByd3NlbWAgaXMgYWRkZWQgdG8gdGhlIGByYXdfZGV2YCBzdHJ1Y3QuXG4yLiAgYGRldl9uZXcoKWAgaW5pdGlhbGl6ZXMgdGhlIHNlbWFwaG9yZS5cbjMuICBgZGV2X2ZyZWUoKWAgbm93IGRlZmVycyByZXF1ZXN0IGNsZWFudXAsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSdyZSBtb3ZpbmcgaXQgdG8gYGdhZGdldF91bmJpbmRgIG5vdy5cbjQuICBgZ2FkZ2V0X2JpbmQoKWAgc2VlcyBhIGNoYW5nZSB0byBoYW5kbGUgYHJhd19xdWV1ZV9ldmVudGAgZmFpbGluZyBieSBjbGVhbmluZyB1cCB0aGUgYGRldi1cdTAwM2VyZXFgLlxuNS4gIGBnYWRnZXRfdW5iaW5kKClgIGlzIHdoZXJlIHRoZSBjb3JlIGxvY2tpbmcgaGFwcGVucy4gSXQgdGFrZXMgYSB3cml0ZSBsb2NrIChgZG93bl93cml0ZWApIHRvIHNhZmVseSBzZXQgYGRldi1cdTAwM2VnYWRnZXRgIHRvIGBOVUxMYCwgZGlzYWJsZSB0aGUgZW5kcG9pbnRzLCBmcmVlIHRoZSByZXF1ZXN0cywgYW5kIHNldCBgZGV2LVx1MDAzZXJlcSA9IE5VTExgLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBzZWN0aW9uIHdlIG5lZWQgdG8gcHJvdGVjdC5cbjYuICBTZXZlcmFsIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGByYXdfcmVsZWFzZSgpYCwgYHJhd19pb2N0bF9ldmVudF9mZXRjaGAsIGByYXdfcHJvY2Vzc19lcDBfaW9gLCBgcmF3X2lvY3RsX2VwX2Rpc2FibGVgLCBgcmF3X3Byb2Nlc3NfZXBfaW9gLCBhbmQgYHJhd19pb2N0bF92YnVzX2RyYXdgLCBhbGwgYWNxdWlyZSBhIHJlYWQgbG9jayAoYGRvd25fcmVhZGApIGJlZm9yZSBhY2Nlc3NpbmcgYGRldi1cdTAwM2VnYWRnZXRgIG9yIHF1ZXVpbmcvZGVxdWV1aW5nIHJlcXVlc3RzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGV5IGRvbid0IHN0ZXAgb24gYGdhZGdldF91bmJpbmRgJ3MgdG9lcy5cblxuVGhlIG92ZXJhbGwgZ29hbCBpcyB0byBlbGltaW5hdGUgcG90ZW50aWFsIFVBRiBhbmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBieSBlbnN1cmluZyBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzIHRvIGBkZXYtXHUwMDNlZ2FkZ2V0YCBhbmQgaXRzIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJIGNhbiBzZWUgdGhlIGxvY2tpbmcgc2NoZW1lIGlzIHJvYnVzdCBoZXJlLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgKm5ldyogcHJvYmxlbXMsIGxpa2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIEEgcXVpY2sgc2NhbiBvZiB0aGUgcGF0Y2ggcmV2ZWFscyBub3RoaW5nIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBjb25jZXJuLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgcGFzc2VkIHRvIHVzZXJzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGFyZSBhcHBhcmVudC4gR2l2ZW4gdGhhdCB0aGUgZml4IGlzIGZvY3VzZWQgc29sZWx5IG9uIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nLCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgdGhlIGFwcHJvcHJpYXRlIHRvb2xzIHRvIGxvb2sgZm9yIFVBRiBvciBkYXRhIHJhY2VzLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCdzIGEgY2xlYW4gZml4IGZvciBhIGNvbmN1cnJlbmN5IGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzNCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNzo1Ny4zNzgwMjcxNTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYHJ3c2VtYCkgdG8gcHJvdGVjdCBgZGV2LVxcdTAwM2VnYWRnZXRgIGFuZCBlbmRwb2ludCByZXF1ZXN0cyBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBgZ2FkZ2V0X3VuYmluZCgpYC4gVGhpcyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gZW5kcG9pbnRzIGFyZSBhY2Nlc3NlZCBvciByZXF1ZXN0cyBhcmUgcXVldWVkL2RlcXVldWVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgdW5iaW5kaW5nLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKGxpa2UgTE9DS0RFUCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGFsbG9jYXRpb25zIG9yIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGByd3NlbWApIHRvIHByb3RlY3QgYGRldi1cXHUwMDNlZ2FkZ2V0YCBhbmQgZW5kcG9pbnQgcmVxdWVzdHMgZnJvbSBjb25jdXJyZW50IGFjY2VzcyBkdXJpbmcgYGdhZGdldF91bmJpbmQoKWAuIFRoaXMgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGVuZHBvaW50cyBhcmUgYWNjZXNzZWQgb3IgcmVxdWVzdHMgYXJlIHF1ZXVlZC9kZXF1ZXVlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHVuYmluZGluZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChsaWtlIExPQ0tERVApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBhbGxvY2F0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzk92h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 21:11:15 +0000 UTC FinishedAt: 2026-08-08 21:17:58 +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": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_RAW_GADGET", "USB_DUMMY_HCD", "USB_GADGET", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_RAW_GADGET", "USB_DUMMY_HCD", "USB_GADGET", "USB" ], "series_id": "a86dc359-008d-4864-a62b-9f5bd248813e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "raw_ioctl", "raw_release", "gadget_bind", "gadget_unbind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9SQVdfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9EVU1NWV9IQ0QmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYXdfaW9jdGwmIzM0OywKICAgICYjMzQ7cmF3X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Z2FkZ2V0X2JpbmQmIzM0OywKICAgICYjMzQ7Z2FkZ2V0X3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYHJ3c2VtYCkgdG8gcHJvdGVjdCBgZGV2LVx1MDAzZWdhZGdldGAgYW5kIGVuZHBvaW50IHJlcXVlc3RzIGZyb20gY29uY3VycmVudCBhY2Nlc3MgZHVyaW5nIGBnYWRnZXRfdW5iaW5kKClgLiBUaGlzIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgd2hlbiBlbmRwb2ludHMgYXJlIGFjY2Vzc2VkIG9yIHJlcXVlc3RzIGFyZSBxdWV1ZWQvZGVxdWV1ZWQgd2hpbGUgdGhlIGdhZGdldCBpcyB1bmJpbmRpbmcuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBjb25jdXJyZW5jeSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAobGlrZSBMT0NLREVQKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYWxsb2NhdGlvbnMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGluIHRoZSBVU0IgcmF3IGdhZGdldCBkcml2ZXIgKGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jKSBieSBpbnRyb2R1Y2luZyBhIG5ldyByd19zZW1hcGhvcmUgKHJ3c2VtKSB0byBwcm90ZWN0IHRoZSBkZXYtXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJiZGRlNjYzYzRjYTk5ZWFiMjdkYzY3ZWRlMWUzMjVkZmQ4OTY5OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjE0OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbmluZGV4IDRmZWJmOGRhYzdjYTUuLjEzOWEwZmEwY2VlYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbkBAIC0xNjAsNiAmIzQzOzE2MCw3IEBAIGVudW0gZGV2X3N0YXRlIHtcbiBzdHJ1Y3QgcmF3X2RldiB7XG4gXHRzdHJ1Y3Qga3JlZlx0XHRcdGNvdW50O1xuIFx0c3BpbmxvY2tfdFx0XHRcdGxvY2s7XG4mIzQzO1x0c3RydWN0IHJ3X3NlbWFwaG9yZVx0XHRyd3NlbTtcbiBcbiBcdGNvbnN0IGNoYXJcdFx0XHQqdWRjX25hbWU7XG4gXHRzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXJcdGRyaXZlcjtcbkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldiAqZGV2X25ldyh2b2lkKVxuIFx0LyogTWF0Y2hlcyBrcmVmX3B1dCgpIGluIHJhd19yZWxlYXNlKCkuICovXG4gXHRrcmVmX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWNvdW50KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpbml0X3J3c2VtKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2ZGV2LVx1MDAzZWVwMF9kb25lKTtcbiBcdHJhd19ldmVudF9xdWV1ZV9pbml0KFx1MDAyNmRldi1cdTAwM2VxdWV1ZSk7XG4gXHRkZXYtXHUwMDNlZHJpdmVyX2lkX251bWJlciA9IC0xO1xuQEAgLTIxMiwyMCAmIzQzOzIxNCw3IEBAIHN0YXRpYyB2b2lkIGRldl9mcmVlKHN0cnVjdCBrcmVmICprcmVmKVxuIFx0a2ZyZWUoZGV2LVx1MDAzZWRyaXZlci5kcml2ZXIubmFtZSk7XG4gXHRpZiAoZGV2LVx1MDAzZWRyaXZlcl9pZF9udW1iZXIgXHUwMDNlPSAwKVxuIFx0XHRpZGFfZnJlZShcdTAwMjZkcml2ZXJfaWRfbnVtYmVycywgZGV2LVx1MDAzZWRyaXZlcl9pZF9udW1iZXIpO1xuLVx0aWYgKGRldi1cdTAwM2VyZXEpIHtcbi1cdFx0aWYgKGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZClcbi1cdFx0XHR1c2JfZXBfZGVxdWV1ZShkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWVwMCwgZGV2LVx1MDAzZXJlcSk7XG4tXHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuLVx0fVxuIFx0cmF3X2V2ZW50X3F1ZXVlX2Rlc3Ryb3koXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VlcHNfbnVtOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0dXNiX2VwX2Rpc2FibGUoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4tXHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuLVx0XHRrZnJlZShkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpO1xuLVx0XHRkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7XG4tXHR9XG4gXHRrZnJlZShkZXYpO1xuIH1cbiBcbkBAIC0zMTYsNiAmIzQzOzMwNSwxMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4gXHRyZXQgPSByYXdfcXVldWVfZXZlbnQoZGV2LCBVU0JfUkFXX0VWRU5UX0NPTk5FQ1QsIDAsIE5VTEwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIFx0XHRkZXZfZXJyKFx1MDAyNmdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBxdWV1ZSBjb25uZWN0IGV2ZW50XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRkZXYtXHUwMDNlZ2FkZ2V0ID0gTlVMTDtcbiYjNDM7XHRcdGRldi1cdTAwM2VyZXEgPSBOVUxMO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCByZXEpO1xuIFx0XHRzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC0zMjgsOCAmIzQzOzMyMiwzMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4gc3RhdGljIHZvaWQgZ2FkZ2V0X3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxuIHtcbiBcdHN0cnVjdCByYXdfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCBpO1xuIFxuIFx0c2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdGRvd25fd3JpdGUoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7XG4mIzQzO1x0ZGV2LVx1MDAzZWdhZGdldCA9IE5VTEw7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlZXBzX251bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnN0YXRlICE9IFNUQVRFX0VQX0RJU0FCTEVEKSB7XG4mIzQzO1x0XHRcdHVzYl9lcF9kaXNhYmxlKGRldi1cdTAwM2VlcHNbaV0uZXApO1xuJiM0MztcdFx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VlcHNbaV0uZXAsIGRldi1cdTAwM2VlcHNbaV0ucmVxKTtcbiYjNDM7XHRcdFx0a2ZyZWUoZGV2LVx1MDAzZWVwc1tpXS5lcC1cdTAwM2VkZXNjKTtcbiYjNDM7XHRcdFx0ZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZGV2LVx1MDAzZXJlcSkge1xuJiM0MztcdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiYjNDM7XHRcdGRldi1cdTAwM2VyZXEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHR1cF93cml0ZShcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcbiBcdC8qIE1hdGNoZXMga3JlZl9nZXQoKSBpbiBnYWRnZXRfYmluZCgpLiAqL1xuIFx0a3JlZl9wdXQoXHUwMDI2ZGV2LVx1MDAzZWNvdW50LCBkZXZfZnJlZSk7XG4gfVxuQEAgLTQ1MCwxMCAmIzQzOzQ2Nyw2IEBAIHN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9DTE9TRUQ7XG4tXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRnb3RvIG91dF9wdXQ7XG4tXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWdhZGdldF9yZWdpc3RlcmVkKVxuIFx0XHR1bnJlZ2lzdGVyID0gdHJ1ZTtcbiBcdGRldi1cdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuQEAgLTYzNywxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFxuIFx0ZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlKTtcbiBcdGlmIChQVFJfRVJSKGV2ZW50KSA9PSAtRUlOVFIpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCYjMzQ7ZXZlbnQgZmV0Y2hpbmcgaW50ZXJydXB0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtldmVudCBmZXRjaGluZyBpbnRlcnJ1cHRlZFxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRUlOVFI7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKGV2ZW50KSkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXG5cJiMzNDspO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRkZXYtXHUwMDNlc3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEO1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtNjk4LDEzICYjNDM7NzExLDEzIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmICgoaW4gXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlZXAwX2luX3BlbmRpbmcpIHx8XG4gXHRcdFx0KCFpbiBcdTAwMjZcdTAwMjYgIWRldi1cdTAwM2VlcDBfb3V0X3BlbmRpbmcpKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuQEAgLTcyNSw5ICYjNDM7NzM4LDE3IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcdGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZCA9IHRydWU7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4mIzQzO1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDtcbiYjNDM7XHR9XG4gXHRyZXQgPSB1c2JfZXBfcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEsIEdGUF9LRVJORUwpO1xuJiM0MztcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuQEAgLTczNSw4ICYjNDM7NzU2LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcbiBcdHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZShcdTAwMjZkZXYtXHUwMDNlZXAwX2RvbmUpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDt3YWl0IGludGVycnVwdGVkXFxuXCYjMzQ7KTtcbi1cdFx0dXNiX2VwX2RlcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDt3YWl0IGludGVycnVwdGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcdFx0aWYgKGRldi1cdTAwM2VnYWRnZXQpXG4mIzQzO1x0XHRcdHVzYl9lcF9kZXF1ZXVlKGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiYjNDM7XHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZkZXYtXHUwMDNlZXAwX2RvbmUpO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRpZiAoZGV2LVx1MDAzZWVwMF9zdGF0dXMgPT0gLUVDT05OUkVTRVQpXG5AQCAtODEyLDE5ICYjNDM7ODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwMF91cmJfcXVldWVkKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKCFkZXYtXHUwMDNlZXAwX2luX3BlbmRpbmcgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlZXAwX291dF9wZW5kaW5nKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIG5vIHJlcXVlc3QgcGVuZGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIG5vIHJlcXVlc3QgcGVuZGluZ1xcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0cmV0ID0gdXNiX2VwX3NldF9oYWx0KGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCB1c2JfZXBfc2V0X2hhbHQgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4gXG4gXHRpZiAoZGV2LVx1MDAzZWVwMF9pbl9wZW5kaW5nKVxuQEAgLTg4NCwxMyAmIzQzOzkwOCwxMyBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9lbmFibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdFx0ZXAtXHUwMDNlZXAtXHUwMDNlZGVzYyA9IGRlc2M7XG4gXHRcdHJldCA9IHVzYl9lcF9lbmFibGUoZXAtXHUwMDNlZXApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCYjMzQ7ZmFpbCwgdXNiX2VwX2VuYWJsZSByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbiBcdFx0XHRnb3RvIG91dF9mcmVlO1xuIFx0XHR9XG4gXHRcdGVwLVx1MDAzZXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLVx1MDAzZWVwLCBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFlcC1cdTAwM2VyZXEpIHtcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCB1c2JfZXBfYWxsb2NfcmVxdWVzdCBmYWlsZWRcXG5cJiMzNDspO1xuIFx0XHRcdHVzYl9lcF9kaXNhYmxlKGVwLVx1MDAzZWVwKTtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTkwMywxMCAmIzQzOzkyNywxMCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9lbmFibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdH1cbiBcbiBcdGlmICghZXBfcHJvcHNfbWF0Y2hlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGJhZCBlbmRwb2ludCBkZXNjcmlwdG9yXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdH0gZWxzZSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIG5vIGVuZHBvaW50cyBhdmFpbGFibGVcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCBubyBlbmRwb2ludHMgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0fVxuIFxuQEAgLTkzOSwxOCAmIzQzOzk2MywxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIGRpc2FibGUgYWxyZWFkeSBpbiBwcm9ncmVzc1xcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnVyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuQEAgLTk1OCwxMyAmIzQzOzk4MiwyNSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IHRydWU7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4mIzQzO1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuIFx0dXNiX2VwX2Rpc2FibGUoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4mIzQzO1x0dXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtXHUwMDNlZXBzW2ldLmVwLCBkZXYtXHUwMDNlZXBzW2ldLnJlcSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0dXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtXHUwMDNlZXBzW2ldLmVwLCBkZXYtXHUwMDNlZXBzW2ldLnJlcSk7XG4gXHRrZnJlZShkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpO1xuIFx0ZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEO1xuIFx0ZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtOTk0LDI0ICYjNDM7MTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCBkaXNhYmxlIGlzIGluIHByb2dyZXNzXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0udXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCYjMzQ7ZmFpbCwgd2FpdGluZyBmb3IgdXJiIGNvbXBsZXRpb25cXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCBjYW4mIzM5O3QgaGFsdC93ZWRnZSBJU08gZW5kcG9pbnRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTAyMCwxNyAmIzQzOzEwNTYsMTcgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2Uoc3RydWN0IHJhd19kZXYgKmRldixcbiBcdGlmIChzZXQgXHUwMDI2XHUwMDI2IGhhbHQpIHtcbiBcdFx0cmV0ID0gdXNiX2VwX3NldF9oYWx0KGRldi1cdTAwM2VlcHNbaV0uZXApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbiBcdH0gZWxzZSBpZiAoIXNldCBcdTAwMjZcdTAwMjYgaGFsdCkge1xuIFx0XHRyZXQgPSB1c2JfZXBfY2xlYXJfaGFsdChkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCB1c2JfZXBfY2xlYXJfaGFsdCByZXR1cm5lZCAlZFxcblwmIzM0OywgcmV0KTtcbiBcdH0gZWxzZSBpZiAoc2V0IFx1MDAyNlx1MDAyNiAhaGFsdCkge1xuIFx0XHRyZXQgPSB1c2JfZXBfc2V0X3dlZGdlKGRldi1cdTAwM2VlcHNbaV0uZXApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIHVzYl9lcF9zZXRfd2VkZ2UgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4gXHR9XG4gXG5AQCAtMTA3NSwyOSAmIzQzOzExMTEsMjkgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChpby1cdTAwM2VlcCBcdTAwM2U9IGRldi1cdTAwM2VlcHNfbnVtKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGludmFsaWQgZW5kcG9pbnRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsLCBpbnZhbGlkIGVuZHBvaW50XFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0ZXAgPSBcdTAwMjZkZXYtXHUwMDNlZXBzW2lvLVx1MDAzZWVwXTtcbiBcdGlmIChlcC1cdTAwM2VzdGF0ZSAhPSBTVEFURV9FUF9FTkFCTEVEKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChlcC1cdTAwM2VkaXNhYmxpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwmIzM0O2ZhaWwsIGVuZHBvaW50IGlzIGFscmVhZHkgYmVpbmcgZGlzYWJsZWRcXG5cJiMzNDspO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChlcC1cdTAwM2V1cmJfcXVldWVkKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwmIzM0Oyk7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGluICE9IHVzYl9lbmRwb2ludF9kaXJfaW4oZXAtXHUwMDNlZXAtXHUwMDNlZGVzYykpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxuXCYjMzQ7KTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuQEAgLTExMTEsOSAmIzQzOzExNDcsMTcgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRlcC1cdTAwM2V1cmJfcXVldWVkID0gdHJ1ZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiYjNDM7XHRkb3duX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiYjNDM7XHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuJiM0MztcdH1cbiBcdHJldCA9IHVzYl9lcF9xdWV1ZShlcC1cdTAwM2VlcCwgZXAtXHUwMDNlcmVxLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcJiMzNDtmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcXG5cJiMzNDssIHJldCk7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDtcbkBAIC0xMTIxLDggJiM0MzsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFxuIFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRvbmUpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcJiMzNDt3YWl0IGludGVycnVwdGVkXFxuXCYjMzQ7KTtcbi1cdFx0dXNiX2VwX2RlcXVldWUoZXAtXHUwMDNlZXAsIGVwLVx1MDAzZXJlcSk7XG4mIzQzO1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwmIzM0O3dhaXQgaW50ZXJydXB0ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4mIzQzO1x0XHRpZiAoZGV2LVx1MDAzZWdhZGdldClcbiYjNDM7XHRcdFx0dXNiX2VwX2RlcXVldWUoZXAtXHUwMDNlZXAsIGVwLVx1MDAzZXJlcSk7XG4mIzQzO1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZG9uZSk7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGlmIChlcC1cdTAwM2VzdGF0dXMgPT0gLUVDT05OUkVTRVQpXG5AQCAtMTIxNSwxMiAmIzQzOzEyNjIsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4tXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCwgZ2FkZ2V0IGlzIG5vdCBib3VuZFxcblwmIzM0Oyk7XG4tXHRcdHJldCA9IC1FQlVTWTtcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4tXHR1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtXHUwMDNlZ2FkZ2V0LCAyICogdmFsdWUpO1xuJiM0MztcdHJldCA9IHVzYl9nYWRnZXRfdmJ1c19kcmF3KGRldi1cdTAwM2VnYWRnZXQsIDIgKiB2YWx1ZSk7XG4mIzQzO1x0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9SQVdfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9EVU1NWV9IQ0QmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYXdfaW9jdGwmIzM0OywKICAgICYjMzQ7cmF3X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7Z2FkZ2V0X2JpbmQmIzM0OywKICAgICYjMzQ7Z2FkZ2V0X3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGluIHRoZSBVU0IgcmF3IGdhZGdldCBkcml2ZXIgKGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jKSBieSBpbnRyb2R1Y2luZyBhIG5ldyByd19zZW1hcGhvcmUgKHJ3c2VtKSB0byBwcm90ZWN0IHRoZSBkZXYtXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiZGRlNjYzYzRjYTk5ZWFiMjdkYzY3ZWRlMWUzMjVkZmQ4OTY5OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjE0OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwppbmRleCA0ZmViZjhkYWM3Y2E1Li4xMzlhMGZhMGNlZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwpAQCAtMTYwLDYgJiM0MzsxNjAsNyBAQCBlbnVtIGRldl9zdGF0ZSB7CiBzdHJ1Y3QgcmF3X2RldiB7CiAJc3RydWN0IGtyZWYJCQljb3VudDsKIAlzcGlubG9ja190CQkJbG9jazsKJiM0MzsJc3RydWN0IHJ3X3NlbWFwaG9yZQkJcndzZW07CiAKIAljb25zdCBjaGFyCQkJKnVkY19uYW1lOwogCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcglkcml2ZXI7CkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldiAqZGV2X25ldyh2b2lkKQogCS8qIE1hdGNoZXMga3JlZl9wdXQoKSBpbiByYXdfcmVsZWFzZSgpLiAqLwogCWtyZWZfaW5pdCgmYW1wO2Rldi0mZ3Q7Y291bnQpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDtsb2NrKTsKJiM0MzsJaW5pdF9yd3NlbSgmYW1wO2Rldi0mZ3Q7cndzZW0pOwogCWluaXRfY29tcGxldGlvbigmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCXJhd19ldmVudF9xdWV1ZV9pbml0KCZhbXA7ZGV2LSZndDtxdWV1ZSk7CiAJZGV2LSZndDtkcml2ZXJfaWRfbnVtYmVyID0gLTE7CkBAIC0yMTIsMjAgJiM0MzsyMTQsNyBAQCBzdGF0aWMgdm9pZCBkZXZfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIAlrZnJlZShkZXYtJmd0O2RyaXZlci5kcml2ZXIubmFtZSk7CiAJaWYgKGRldi0mZ3Q7ZHJpdmVyX2lkX251bWJlciAmZ3Q7PSAwKQogCQlpZGFfZnJlZSgmYW1wO2RyaXZlcl9pZF9udW1iZXJzLCBkZXYtJmd0O2RyaXZlcl9pZF9udW1iZXIpOwotCWlmIChkZXYtJmd0O3JlcSkgewotCQlpZiAoZGV2LSZndDtlcDBfdXJiX3F1ZXVlZCkKLQkJCXVzYl9lcF9kZXF1ZXVlKGRldi0mZ3Q7Z2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7Ci0JfQogCXJhd19ldmVudF9xdWV1ZV9kZXN0cm95KCZhbXA7ZGV2LSZndDtxdWV1ZSk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7ZXBzX251bTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGRldi0mZ3Q7ZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKQotCQkJY29udGludWU7Ci0JCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKLQkJa2ZyZWUoZGV2LSZndDtlcHNbaV0uZXAtJmd0O2Rlc2MpOwotCQlkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwotCX0KIAlrZnJlZShkZXYpOwogfQogCkBAIC0zMTYsNiAmIzQzOzMwNSwxMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCiAJcmV0ID0gcmF3X3F1ZXVlX2V2ZW50KGRldiwgVVNCX1JBV19FVkVOVF9DT05ORUNULCAwLCBOVUxMKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlkZXZfZXJyKCZhbXA7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHF1ZXVlIGNvbm5lY3QgZXZlbnRcbiYjMzQ7KTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlkZXYtJmd0O2dhZGdldCA9IE5VTEw7CiYjNDM7CQlkZXYtJmd0O3JlcSA9IE5VTEw7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0mZ3Q7ZXAwLCByZXEpOwogCQlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0zMjgsOCAmIzQzOzMyMiwzMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCiBzdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CiAJc3RydWN0IHJhd19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgaTsKIAogCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpOwomIzQzOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWRldi0mZ3Q7c3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEOwomIzQzOwlkZXYtJmd0O2dhZGdldCA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7ZXBzX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSAhPSBTVEFURV9FUF9ESVNBQkxFRCkgewomIzQzOwkJCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKJiM0MzsJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi0mZ3Q7ZXBzW2ldLmVwLCBkZXYtJmd0O2Vwc1tpXS5yZXEpOwomIzQzOwkJCWtmcmVlKGRldi0mZ3Q7ZXBzW2ldLmVwLSZndDtkZXNjKTsKJiM0MzsJCQlkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChkZXYtJmd0O3JlcSkgewomIzQzOwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwomIzQzOwkJZGV2LSZndDtyZXEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CXVwX3dyaXRlKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CiAJLyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIGdhZGdldF9iaW5kKCkuICovCiAJa3JlZl9wdXQoJmFtcDtkZXYtJmd0O2NvdW50LCBkZXZfZnJlZSk7CiB9CkBAIC00NTAsMTAgJiM0Mzs0NjcsNiBAQCBzdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJZGV2LSZndDtzdGF0ZSA9IFNUQVRFX0RFVl9DTE9TRUQ7Ci0JaWYgKCFkZXYtJmd0O2dhZGdldCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JCWdvdG8gb3V0X3B1dDsKLQl9CiAJaWYgKGRldi0mZ3Q7Z2FkZ2V0X3JlZ2lzdGVyZWQpCiAJCXVucmVnaXN0ZXIgPSB0cnVlOwogCWRldi0mZ3Q7Z2FkZ2V0X3JlZ2lzdGVyZWQgPSBmYWxzZTsKQEAgLTYzNywxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCiAJZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goJmFtcDtkZXYtJmd0O3F1ZXVlKTsKIAlpZiAoUFRSX0VSUihldmVudCkgPT0gLUVJTlRSKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2V2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2V2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQogCWlmIChJU19FUlIoZXZlbnQpKSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byBmZXRjaCBldmVudFxuJiMzNDspOwomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcbiYjMzQ7KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAkJZGV2LSZndDtzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKQEAgLTY5OCwxMyAmIzQzOzcxMSwxMyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGRldi0mZ3Q7ZXAwX3VyYl9xdWV1ZWQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKChpbiAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9pbl9wZW5kaW5nKSB8fAogCQkJKCFpbiAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9vdXRfcGVuZGluZykpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CkBAIC03MjUsOSAmIzQzOzczOCwxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sCiAJZGV2LSZndDtlcDBfdXJiX3F1ZXVlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJdXBfcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKJiM0MzsJfQogCXJldCA9IHVzYl9lcF9xdWV1ZShkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKQEAgLTczNSw4ICYjNDM7NzU2LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbywKIAogCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCWlmIChyZXQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7d2FpdCBpbnRlcnJ1cHRlZFxuJiMzNDspOwotCQl1c2JfZXBfZGVxdWV1ZShkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O3dhaXQgaW50ZXJydXB0ZWRcbiYjMzQ7KTsKJiM0MzsJCWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJaWYgKGRldi0mZ3Q7Z2FkZ2V0KQomIzQzOwkJCXVzYl9lcF9kZXF1ZXVlKGRldi0mZ3Q7Z2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2LSZndDtlcDBfc3RhdHVzID09IC1FQ09OTlJFU0VUKQpAQCAtODEyLDE5ICYjNDM7ODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2VwMF91cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcbiYjMzQ7KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmICghZGV2LSZndDtlcDBfaW5fcGVuZGluZyAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9vdXRfcGVuZGluZykgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgbm8gcmVxdWVzdCBwZW5kaW5nXG4mIzM0Oyk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgdXNiX2VwX3NldF9oYWx0IHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAogCWlmIChkZXYtJmd0O2VwMF9pbl9wZW5kaW5nKQpAQCAtODg0LDEzICYjNDM7OTA4LDEzIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQllcC0mZ3Q7ZXAtJmd0O2Rlc2MgPSBkZXNjOwogCQlyZXQgPSB1c2JfZXBfZW5hYmxlKGVwLSZndDtlcCk7CiAJCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwKJiM0MzsJCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgdXNiX2VwX2VuYWJsZSByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJCWVwLSZndDtyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcC0mZ3Q7ZXAsIEdGUF9BVE9NSUMpOwogCQlpZiAoIWVwLSZndDtyZXEpIHsKLQkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfYWxsb2NfcmVxdWVzdCBmYWlsZWRcbiYjMzQ7KTsKIAkJCXVzYl9lcF9kaXNhYmxlKGVwLSZndDtlcCk7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtOTAzLDEwICYjNDM7OTI3LDEwIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCX0KIAogCWlmICghZXBfcHJvcHNfbWF0Y2hlZCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCX0gZWxzZSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIG5vIGVuZHBvaW50cyBhdmFpbGFibGVcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgbm8gZW5kcG9pbnRzIGF2YWlsYWJsZVxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJfQogCkBAIC05MzksMTggJiM0Mzs5NjMsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZGlzYWJsZSBhbHJlYWR5IGluIHByb2dyZXNzXG4mIzM0Oyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGRldi0mZ3Q7ZXBzW2ldLnVyYl9xdWV1ZWQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgd2FpdGluZyBmb3IgdXJiIGNvbXBsZXRpb25cbiYjMzQ7KTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtOTU4LDEzICYjNDM7OTgyLDI1IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIAlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSB0cnVlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsJaWYgKCFkZXYtJmd0O2dhZGdldCkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQogCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKJiM0MzsJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKIAlrZnJlZShkZXYtJmd0O2Vwc1tpXS5lcC0mZ3Q7ZGVzYyk7CiAJZGV2LSZndDtlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDsKIAlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwpAQCAtOTk0LDI0ICYjNDM7MTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZGlzYWJsZSBpcyBpbiBwcm9ncmVzc1xuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS51cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXG4mIzM0Oyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZGV2LSZndDtlcHNbaV0uZXAtJmd0O2Rlc2MpKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIGNhbiYjMzk7dCBoYWx0L3dlZGdlIElTTyBlbmRwb2ludFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMDIwLDE3ICYjNDM7MTA1NiwxNyBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LAogCWlmIChzZXQgJmFtcDsmYW1wOyBoYWx0KSB7CiAJCXJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtJmd0O2Vwc1tpXS5lcCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJfSBlbHNlIGlmICghc2V0ICZhbXA7JmFtcDsgaGFsdCkgewogCQlyZXQgPSB1c2JfZXBfY2xlYXJfaGFsdChkZXYtJmd0O2Vwc1tpXS5lcCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9jbGVhcl9oYWx0IHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAl9IGVsc2UgaWYgKHNldCAmYW1wOyZhbXA7ICFoYWx0KSB7CiAJCXJldCA9IHVzYl9lcF9zZXRfd2VkZ2UoZGV2LSZndDtlcHNbaV0uZXApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfc2V0X3dlZGdlIHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAl9CiAKQEAgLTEwNzUsMjkgJiM0MzsxMTExLDI5IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChpby0mZ3Q7ZXAgJmd0Oz0gZGV2LSZndDtlcHNfbnVtKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIGludmFsaWQgZW5kcG9pbnRcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgaW52YWxpZCBlbmRwb2ludFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWVwID0gJmFtcDtkZXYtJmd0O2Vwc1tpby0mZ3Q7ZXBdOwogCWlmIChlcC0mZ3Q7c3RhdGUgIT0gU1RBVEVfRVBfRU5BQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGVwLSZndDtkaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZW5kcG9pbnQgaXMgYWxyZWFkeSBiZWluZyBkaXNhYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGVwLSZndDt1cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcbiYjMzQ7KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChpbiAhPSB1c2JfZW5kcG9pbnRfZGlyX2luKGVwLSZndDtlcC0mZ3Q7ZGVzYykpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtMTExMSw5ICYjNDM7MTE0NywxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbywKIAllcC0mZ3Q7dXJiX3F1ZXVlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJdXBfcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKJiM0MzsJfQogCXJldCA9IHVzYl9lcF9xdWV1ZShlcC0mZ3Q7ZXAsIGVwLSZndDtyZXEsIEdGUF9LRVJORUwpOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwKJiM0MzsJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7CkBAIC0xMTIxLDggJiM0MzsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLAogCiAJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZhbXA7ZG9uZSk7CiAJaWYgKHJldCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDt3YWl0IGludGVycnVwdGVkXG4mIzM0Oyk7Ci0JCXVzYl9lcF9kZXF1ZXVlKGVwLSZndDtlcCwgZXAtJmd0O3JlcSk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O3dhaXQgaW50ZXJydXB0ZWRcbiYjMzQ7KTsKJiM0MzsJCWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJaWYgKGRldi0mZ3Q7Z2FkZ2V0KQomIzQzOwkJCXVzYl9lcF9kZXF1ZXVlKGVwLSZndDtlcCwgZXAtJmd0O3JlcSk7CiYjNDM7CQl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDtkb25lKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAkJaWYgKGVwLSZndDtzdGF0dXMgPT0gLUVDT05OUkVTRVQpCkBAIC0xMjE1LDEyICYjNDM7MTI2MiwxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF92YnVzX2RyYXcoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7Ci0JCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgZ2FkZ2V0IGlzIG5vdCBib3VuZFxuJiMzNDspOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KLQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtJmd0O2dhZGdldCwgMiAqIHZhbHVlKTsKJiM0MzsJcmV0ID0gdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LSZndDtnYWRnZXQsIDIgKiB2YWx1ZSk7CiYjNDM7CXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIAogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVVNCIFJhdyBHYWRnZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNgLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGByd19zZW1hcGhvcmVgIGNhbGxlZCBgcndzZW1gIHdpdGhpbiB0aGUgYHN0cnVjdCByYXdfZGV2YC4gTG9va3MgbGlrZSB0aGV5JiMzOTtyZSBpbXBsZW1lbnRpbmcgcmVhZC13cml0ZSBsb2NraW5nLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgY29uY3VycmVuY3kuIGBnYWRnZXRfdW5iaW5kYCBpcyBub3cgdXNpbmcgYGRvd25fd3JpdGVgIGFuZCBgdXBfd3JpdGVgIOKAkyBzbyB0aGF0JiMzOTtzIGZvciBleGNsdXNpdmUgYWNjZXNzIGR1cmluZyB1bmJpbmRpbmcsIGdvb2QuIEFuZCB0aGUgYHJhd19wcm9jZXNzX2VwMF9pb2AsIGByYXdfaW9jdGxfZXBfZGlzYWJsZWAsIGByYXdfcHJvY2Vzc19lcF9pb2AsIGFuZCBgcmF3X2lvY3RsX3ZidXNfZHJhd2AgZnVuY3Rpb25zIGFyZSBlbXBsb3lpbmcgYGRvd25fcmVhZGAgYW5kIGB1cF9yZWFkYC4gVGhpcyBpcyBjbGFzc2ljIHJlYWRlci13cml0ZXIgbG9jayB1c2FnZSwgYWxsb3dpbmcgbXVsdGlwbGUgcmVhZGVycyBidXQgZXhjbHVzaXZlIHdyaXRpbmcuIFNlZW1zIGxpa2UgYSBzb2xpZCBzeW5jaHJvbml6YXRpb24gZml4IGZvciB0aGUgVVNCIHJhdyBnYWRnZXQgZHJpdmVyLgoKQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYmlnZ2VyIHBpY3R1cmUuIElzIHRoaXMgVVNCIHJhdyBnYWRnZXQgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgY29kZSBpcyBhY3R1YWxseSB1c2VkLiBBaCwgcmlnaHQsIGBDT05GSUdfVVNCX1JBV19HQURHRVRgIOKAkyB0aGF0JiMzOTtzIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciwgaXNuJiMzOTt0IGl0PyBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpdCYjMzk7cyBoZWF2aWx5IHRhcmdldGVkIGJ5IHN5emthbGxlci4gVGhhdOKAmXMgYSBnb29kIHNpZ24g4oCTIGlmIHN5emthbGxlciBpcyBmdXp6aW5nIGl0LCB0aGVuIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgcXVpY2tseeKApiB5ZXMsIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY2AuLi4gYW5kIGp1c3QgdG8gYmUgc3VyZSwgbGV0JiMzOTtzIGdyZXAgZm9yIGBDT05GSUdfVVNCX1JBV19HQURHRVRgIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBBbHJpZ2h0LCBhbGwgY2hlY2tzIG91dC4gVGhpcyBwYXRjaCwgd2hpbGUgc2VlbWluZ2x5IHN0cmFpZ2h0Zm9yd2FyZCwgaXMgYWRkcmVzc2luZyBhIGNyaXRpY2FsIHN5bmNocm9uaXphdGlvbiBpc3N1ZSBpbiBhIHBhcnQgb2YgdGhlIGtlcm5lbCB0aGF0IGlzIGFjdGl2ZWx5IHVzZWQgYW5kIGV4cG9zZWQgdG8gZnV6emluZywgd2hpY2ggbWVhbnMgaXTigJlzIGVzc2VudGlhbCB0byBiZSBjb3JyZWN0IGFuZCByb2J1c3QuIFRoZSBjaGFuZ2UgdG8gdGhlIGBkZXZfZGJnYCBhbmQgYGRldl9lcnJgIG1hY3JvcyBpcyBqdXN0IGEgY2xlYW51cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtVU0JfUkFXX0dBREdFVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdD0xMz1pbiBwcm9kdWN0aW9uLiBVc2UgR2FkZ2V0RlMgaW5zdGVhZC5cbkRvY3VtZW50YXRpb24vdXNiL3Jhdy1nYWRnZXQucnN0LTE0LVxuRG9jdW1lbnRhdGlvbi91c2IvcmF3LWdhZGdldC5yc3Q6MTU6RW5hYmxlZCB3aXRoIENPTkZJR19VU0JfUkFXX0dBREdFVC5cbkRvY3VtZW50YXRpb24vdXNiL3Jhdy1nYWRnZXQucnN0LTE2LVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz01MDE9Y29uZmlnIFVTQl9HX1dFQkNBTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy01MTUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6NTE2OmNvbmZpZyBVU0JfUkFXX0dBREdFVFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTUxNy1cdHRyaXN0YXRlIFwmIzM0O1VTQiBSYXcgR2FkZ2V0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQpXHQmIzQzOz0gdGNtX3VzYl9nYWRnZXQub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZTo0NjpvYmotJChDT05GSUdfVVNCX1JBV19HQURHRVQpXHQmIzQzOz0gcmF3X2dhZGdldC5vXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9yYXdfZ2FkZ2V0LmgtNy1cbmluY2x1ZGUvdWFwaS9saW51eC91c2IvcmF3X2dhZGdldC5oOjg6I2lmbmRlZiBfVUFQSV9fTElOVVhfVVNCX1JBV19HQURHRVRfSFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9yYXdfZ2FkZ2V0Lmg6OTojZGVmaW5lIF9VQVBJX19MSU5VWF9VU0JfUkFXX0dBREdFVF9IXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaC0xMC1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaD0xNjA9c3RydWN0IHVzYl9yYXdfZXBzX2luZm8ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC91c2IvcmF3X2dhZGdldC5oLTI1OC1cbmluY2x1ZGUvdWFwaS9saW51eC91c2IvcmF3X2dhZGdldC5oOjI1OTojZW5kaWYgLyogX1VBUElfX0xJTlVYX1VTQl9SQVdfR0FER0VUX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBVU0IgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgdGhhdCYjMzk7cyBncmFiYmluZyBteSBhdHRlbnRpb24gaXMgYFVTQl9SQVdfR0FER0VUYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGNhbiYjMzk7dCBqdXN0IHRha2UgdGhpcyBhdCBmYWNlIHZhbHVlOyBJIG5lZWQgdG8ga25vdyAqd2h5KiBpdCYjMzk7cyBhY3RpdmUuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG11c3QgbWV0aWN1bG91c2x5IGV4YW1pbmUgaXRzIGRlcGVuZGVuY2llcy4gS25vd2luZyB3aGF0IG90aGVyIGNvbXBvbmVudHMgcmVseSBvbiB0aGlzIHNldHRpbmcsIG9yIHdoYXQgdGhpcyBzZXR0aW5nIHJlbGllcyBvbiwgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaXRzIGZ1bGwgZnVuY3Rpb24gYW5kIHBvdGVudGlhbCBpbXBhY3QuIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgdHJlZSB3aWxsIGlsbHVtaW5hdGUgdGhlIGxvZ2ljYWwgY29ubmVjdGlvbnMgYW5kIGNvbnN0cmFpbnRzIGF0IHBsYXkgaGVyZS4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZXZhbHVhdGluZyB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyBkZXNpZ24gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfUkFXX0dBREdFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9NTAxPWNvbmZpZyBVU0JfR19XRUJDQU1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNTE1LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjUxNjpjb25maWcgVVNCX1JBV19HQURHRVRcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVU0IgUmF3IEdhZGdldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NjkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBVU0IgR2FkZ2V0IExlZ2FjeSBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIGFyb3VuZCBsaW5lIDUxNi4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhhdCBwcm9iYWJseSBwbGFjZXMgbWUgbmVhciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIHNwZWNpZmljIGNvbnRyb2xsZXIgb3IgZmVhdHVyZSB3aXRoaW4gdGhlIGxlZ2FjeSBVU0IgZ2FkZ2V0IHN1YnN5c3RlbS4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIGxpZSAtIHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtLCBhIGxlZ2FjeSBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiwgb3IgYSBwYXJ0aWN1bGFyIGRlYnVnZ2luZyBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBjb25maWd1cmVkIGF0IHRoYXQgbGV2ZWwsIGhvdyBhIHNwZWNpZmljIG9wdGlvbiBpcyBlbmFibGVkLiBMZXRzIGdldCB0aGUgY29udGV4dCwgYW5kIHRyYWNlIHRoaXMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0XHQgIGRldmljZS4gSXQgcHJvdmlkZXMgYSB1c2Vyc3BhY2UgQVBJIHRvIHByb2Nlc3MgVVZDIGNvbnRyb2wgcmVxdWVzdHNcbiA1MTE6XHRcdCAgYW5kIHN0cmVhbSB2aWRlbyBkYXRhIHRvIHRoZSBob3N0LlxuIDUxMjpcdFxuIDUxMzpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4gNTE0Olx0XHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFwmIzM0O2dfd2ViY2FtXCYjMzQ7LlxuIDUxNTpcdFxuIDUxNjpcdGNvbmZpZyBVU0JfUkFXX0dBREdFVFxuIDUxNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIFJhdyBHYWRnZXRcJiMzNDtcbiA1MTg6XHRcdGhlbHBcbiA1MTk6XHRcdCAgVVNCIFJhdyBHYWRnZXQgaXMgYSBnYWRnZXQgZHJpdmVyIHRoYXQgZ2l2ZXMgdXNlcnNwYWNlIGxvdy1sZXZlbFxuIDUyMDpcdFx0ICBjb250cm9sIG92ZXIgdGhlIGdhZGdldCYjMzk7cyBjb21tdW5pY2F0aW9uIHByb2Nlc3MuXG4gNTIxOlx0XG4gNTIyOlx0XHQgIExpa2UgYW55IG90aGVyIGdhZGdldCBkcml2ZXIsIFJhdyBHYWRnZXQgaW1wbGVtZW50cyBVU0IgZGV2aWNlcyB2aWFcbiA1MjM6XHRcdCAgdGhlIFVTQiBnYWRnZXQgQVBJLiBVbmxpa2UgbW9zdCBnYWRnZXQgZHJpdmVycywgUmF3IEdhZGdldCBkb2VzIG5vdFxuIDUyNDpcdFx0ICBpbXBsZW1lbnQgYW55IGNvbmNyZXRlIFVTQiBmdW5jdGlvbnMgaXRzZWxmIGJ1dCByZXF1aXJlcyB1c2Vyc3BhY2VcbiA1MjU6XHRcdCAgdG8gZG8gdGhhdC5cbiA1MjY6XHRcbiA1Mjc6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vdXNiL3Jhdy1nYWRnZXQucnN0IGZvciBkZXRhaWxzLlxuIDUyODpcdFxuIDUyOTpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBvciBmZWF0dXJlLCB3aGF0ZXZlciBpdCBpcywgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGFueSBleHBsaWNpdGx5IGRlZmluZWQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYmV5b25kIGl0cyBwYXJlbnQsIGBVU0JfR0FER0VUYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBidXQgbm90IG5lY2Vzc2FyaWx5IGEgcmVkIGZsYWcuIEl0IGNvdWxkIGltcGx5IGEgZmV3IHRoaW5ncyDigJMgbWF5YmUgaXQmIzM5O3MgY29yZSB0byB0aGUgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIG9yIHBlcmhhcHMgaXRzIGRlcGVuZGVuY2llcyBhcmUgaW1wbGljaXRseSBoYW5kbGVkIHdpdGhpbiB0aGUgYFVTQl9HQURHRVRgIGNvbmZpZ3VyYXRpb24gaXRzZWxmLiBIbW0uLi4gTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBwYXJlbnQgY29uZmlnLCBgVVNCX0dBREdFVGAsIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4gSXQgY291bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBzaXR1YXRpb24uIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGl0cyBkZWZpbml0aW9uIG5vdywgYW5kIHNlZSBpZiBJIGNhbiBmaW5kIGFueXRoaW5nIHRoZXJlIHRoYXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgVVNCX0dBREdFVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE2LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6MTc6bWVudWNvbmZpZyBVU0JfR0FER0VUXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzQyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTcuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmb3IgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IHN0YXJ0cywgYXQgbGVhc3QgaW4gYSBsb3Qgb2YgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIG1haW4gYENPTkZJR19VU0JfR0FER0VUYCBvcHRpb24gZGVmaW5lZCB0aGVyZSwgb3IgbWF5YmUgYSByZWxldmFudCBtZW51IGJsb2NrIHRoYXQgZW5jb21wYXNzZXMgYSBsb3Qgb2YgdGhlIHN1Yi1vcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgaGlnaC1sZXZlbCBzdHJ1Y3R1cmUgb2YgaG93IHRoZSBkaWZmZXJlbnQgVVNCIGdhZGdldCBkcml2ZXJzIGFuZCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdCNcbiAgMTY6XHRcbiAgMTc6XHRtZW51Y29uZmlnIFVTQl9HQURHRVRcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgMjA6XHRcdHNlbGVjdCBOTFNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXG4gIDIzOlx0XHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cbiAgMjQ6XHRcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcbiAgMjU6XHRcdCAgIHlvdSBjYW4mIzM5O3QgY29ubmVjdCBhIFwmIzM0O3RvLXRoZS1ob3N0XCYjMzQ7IGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXG4gIDI2Olx0XG4gIDI3Olx0XHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcbiAgMjg6XHRcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcbiAgMjk6XHRcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxuICAzMDpcdFx0ICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmVcbiAgMzE6XHRcdCAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgXCYjMzQ7RUhDSVwmIzM0OywgXCYjMzQ7T0hDSVwmIzM0OyxcbiAgMzI6XHRcdCAgIG9yIFwmIzM0O1VIQ0lcJiMzNDssIGFuZCBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gc291dGhicmlkZ2VzIG9uIFBDXG4gIDMzOlx0XHQgICBtb3RoZXJib2FyZHMuXG4gIDM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjc0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVTQiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGNvbmZpZ3VyZSBzb21lIFVTQiBzZXR0aW5ncy4gVGhlIGNvcmUgb3B0aW9ucyBJJiMzOTttIHNlZWluZyBoZXJlIGFyZSBgVVNCX0dBREdFVGAgYW5kIGBVU0JfUkFXX0dBREdFVGAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IHBsYXllcnMgZm9yIGVuYWJsaW5nIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gV2FpdCBhIG1pbnV0ZeKApiB0aGVyZSYjMzk7cyBhbHNvIGBVU0JfRFVNTVlfSENEYC4gSSYjMzk7dmUgdXNlZCB0aGlzIGJlZm9yZSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlciBpdHMgcm9sZS4gSXQgbG9va3MgbGlrZSBgVVNCX0RVTU1ZX0hDRGAgaXMgdGhlIGtleSB0byBlbXVsYXRpbmcgdGhlIGhvc3QgY29udHJvbGxlciBpbiBzb2Z0d2FyZS4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBvbmUgdG8gY2hlY2ssIGxldCYjMzk7cyBmb2N1cyBvbiB0aGF0IGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9EVU1NWV9IQ0QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnPTQyMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jZG5zMi9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyNy1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZzo0Mjg6Y29uZmlnIFVTQl9EVU1NWV9IQ0RcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZy00MjktXHR0cmlzdGF0ZSBcJiMzNDtEdW1teSBIQ0QgKERFVkVMT1BNRU5UKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYyMwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0MjguIEkga25vdyBmcm9tIHBhc3QgZXhwZXJpZW5jZSB0aGlzIGlzIHVzdWFsbHkgd2hlcmUgd2Ugc3RhcnQgZ2V0dGluZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBVREMgKFVTQiBEZXZpY2UgQ29udHJvbGxlcikgb3B0aW9ucywgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgcmVsZXZhbnQgdG8gdGhlIHZhcmlvdXMgVVNCIGRldmljZSBjb250cm9sbGVyIGRyaXZlcnMuIFRoaXMgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gZGlmZmVyZW50IGdhZGdldCBkcml2ZXJzLCBhbmQgaG93IHRoZSBjb3JlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIFVTQiAzLjAgc3VwcG9ydCwgYW5kIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQgd2l0aCBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYW50aWNpcGF0aW5nIGEgY2xlYXIgcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdpdGggaGVscGZ1bCBoZWxwIHRleHQuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjU6XHQjIExBU1QgLS0gZHVtbXkvZW11bGF0ZWQgY29udHJvbGxlclxuIDQyNjpcdCNcbiA0Mjc6XHRcbiA0Mjg6XHRjb25maWcgVVNCX0RVTU1ZX0hDRFxuIDQyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7RHVtbXkgSENEIChERVZFTE9QTUVOVClcJiMzNDtcbiA0MzA6XHRcdGRlcGVuZHMgb24gVVNCPXkgfHwgKFVTQj1tIFx1MDAyNlx1MDAyNiBVU0JfR0FER0VUPW0pXG4gNDMxOlx0XHRoZWxwXG4gNDMyOlx0XHQgIFRoaXMgaG9zdCBjb250cm9sbGVyIGRyaXZlciBlbXVsYXRlcyBVU0IsIGxvb3BpbmcgYWxsIGRhdGEgdHJhbnNmZXJcbiA0MzM6XHRcdCAgcmVxdWVzdHMgYmFjayB0byBhIFVTQiBcJiMzNDtnYWRnZXQgZHJpdmVyXCYjMzQ7IGluIHRoZSBzYW1lIGhvc3QuICBUaGUgaG9zdFxuIDQzNDpcdFx0ICBzaWRlIGlzIHRoZSBjb250cm9sbGVyOyB0aGUgZ2FkZ2V0IHNpZGUgaXMgdGhlIGRldmljZS4gIEdhZGdldCBkcml2ZXJzXG4gNDM1Olx0XHQgIGNhbiBiZSBoaWdoLCBmdWxsLCBvciBsb3cgc3BlZWQ7IGFuZCB0aGV5IGhhdmUgYWNjZXNzIHRvIGVuZHBvaW50c1xuIDQzNjpcdFx0ICBsaWtlIHRob3NlIGZyb20gTkVUMjI4MCwgUFhBMnh4LCBvciBTQTExMDAgaGFyZHdhcmUuXG4gNDM3Olx0XG4gNDM4Olx0XHQgIFRoaXMgbWF5IGhlbHAgaW4gc29tZSBzdGFnZXMgb2YgY3JlYXRpbmcgYSBkcml2ZXIgdG8gZW1iZWQgaW4gYVxuIDQzOTpcdFx0ICBMaW51eCBkZXZpY2UsIHNpbmNlIGl0IGxldHMgeW91IGRlYnVnIHNldmVyYWwgcGFydHMgb2YgdGhlIGdhZGdldFxuIDQ0MDpcdFx0ICBkcml2ZXIgd2l0aG91dCBpdHMgaGFyZHdhcmUgb3IgZHJpdmVycyBiZWluZyBpbnZvbHZlZC5cbiA0NDE6XHRcbiA0NDI6XHRcdCAgU2luY2Ugc3VjaCBhIGdhZGdldCBzaWRlIGRyaXZlciBuZWVkcyB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIGhvc3RcbiA0NDM6XHRcdCAgc2lkZSBMaW51eC1VU0IgZGV2aWNlIGRyaXZlciwgdGhpcyBtYXkgaGVscCB0byBkZWJ1ZyBib3RoIHNpZGVzXG4gNDQ0Olx0XHQgIG9mIGEgVVNCIHByb3RvY29sIHN0YWNrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgVVNCX0RVTU1ZX0hDRCBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgaW50ZWdyYXRpbmcgYFVTQl9EVU1NWV9IQ0RgLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhpcyBjaGFuZ2UgbmVjZXNzaXRhdGVzIGFkanVzdG1lbnRzIHRvIG91ciBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8ga25vdyB3aGljaCBmdW5jdGlvbnMgYXJlIG5vdyBzdXNjZXB0aWJsZSB0bywgYW5kIHRoZXJlZm9yZSBuZWVkLCBkZWVwZXIgc2NydXRpbnkuCgpMb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbXBhY3RpbmcgYGdhZGdldF91bmJpbmRgLCBgcmF3X3JlbGVhc2VgLCBgcmF3X2lvY3RsX2V2ZW50X2ZldGNoYCwgYHJhd19wcm9jZXNzX2VwMF9pb2AsIGByYXdfaW9jdGxfZXAwX3N0YWxsYCwgYHJhd19pb2N0bF9lcF9lbmFibGVgLCBgcmF3X2lvY3RsX2VwX2Rpc2FibGVgLCBgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlYCwgYHJhd19wcm9jZXNzX2VwX2lvYCwgYW5kIGByYXdfaW9jdGxfdmJ1c19kcmF3YC4KCkZyb20gYSBxdWljayBnbGFuY2UsIGl0JiMzOTtzIGNsZWFyIHRoZXNlIGFyZSBwcmltYXJpbHkgcmVsYXRlZCB0byBpb2N0bHMgb3IgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGludm9rZWQgdGhyb3VnaCBpb2N0bHMuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHRob3NlIHNpbmNlIHRoYXQmIzM5O3MgYSBsaWtlbHkgYXR0YWNrIHN1cmZhY2UuCgpOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGVudHJ5IHBvaW50cyBhbmQgb3ZlcmFsbCBpbnRlcmFjdGlvbiBmbG93LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNgIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBpb2N0bHMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGh1cywgd2hlcmUgbXkgZnV6emluZyB2ZWN0b3JzIGJlY29tZSBtb3N0IGVmZmVjdGl2ZS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJlZ2luIGZvcm11bGF0aW5nIHRoZSByaWdodCB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9NDYxPXN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ4MC1cdFx0XHRcdHJldCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo0ODE6XHRcdC8qIE1hdGNoZXMga3JlZl9nZXQoKSBpbiByYXdfaW9jdGxfcnVuKCkuICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00ODItXHRcdGtyZWZfcHV0KFx1MDAyNmRldi1cdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ5Mi1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjQ5MzpzdGF0aWMgaW50IHJhd19pb2N0bF9pbml0KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00OTQte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5MS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjU5MjpzdGF0aWMgaW50IHJhd19pb2N0bF9ydW4oc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5My17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNjI3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NjI4OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2V2ZW50X2ZldGNoKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy02Mjkte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTY5Nj1zdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NzgyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF93cml0ZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03OTUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo3OTY6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc5Ny17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODE5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6ODIwOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODIxLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjMtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo4NjQ6c3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjUte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTk0My1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjk0NDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy05NDUte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEwMDktXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMDEwOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMDExLVx0XHR1bnNpZ25lZCBsb25nIHZhbHVlLCBib29sIHNldCwgYm9vbCBoYWx0KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTEwOTQ9c3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTE5MC1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjExOTE6c3RhdGljIGludCByYXdfaW9jdGxfZXBfd3JpdGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTExOTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDQtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjA1OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDYte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMjgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjI5OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2NvbmZpZ3VyZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIzMC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTI1My1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyNTQ6c3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjU1LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMjk0PXN0YXRpYyB2b2lkIGZpbGxfZXBfbGltaXRzKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3Jhd19lcF9saW1pdHMgKmxpbWl0cylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjk5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTMwMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcHNfaW5mbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTMwMS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM0Ni1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNDc6c3RhdGljIGxvbmcgcmF3X2lvY3RsKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNDgte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNTYtXHRjYXNlIFVTQl9SQVdfSU9DVExfSU5JVDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNTc6XHRcdHJldCA9IHJhd19pb2N0bF9pbml0KGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1OC1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzU5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX1JVTjpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjA6XHRcdHJldCA9IHJhd19pb2N0bF9ydW4oZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzYxLVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjItXHRjYXNlIFVTQl9SQVdfSU9DVExfRVZFTlRfRkVUQ0g6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzYzOlx0XHRyZXQgPSByYXdfaW9jdGxfZXZlbnRfZmV0Y2goZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY0LVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjUtXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1dSSVRFOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2NjpcdFx0cmV0ID0gcmF3X2lvY3RsX2VwMF93cml0ZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjctXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2OC1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUDBfUkVBRDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjk6XHRcdHJldCA9IHJhd19pb2N0bF9lcDBfcmVhZChkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzAtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3MS1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9FTkFCTEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzcyOlx0XHRyZXQgPSByYXdfaW9jdGxfZXBfZW5hYmxlKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3My1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzc0LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0RJU0FCTEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzc1Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfZGlzYWJsZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzYtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3Ny1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9XUklURTpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNzg6XHRcdHJldCA9IHJhd19pb2N0bF9lcF93cml0ZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzktXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4MC1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9SRUFEOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4MTpcdFx0cmV0ID0gcmF3X2lvY3RsX2VwX3JlYWQoZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzgyLVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODMtXHRjYXNlIFVTQl9SQVdfSU9DVExfQ09ORklHVVJFOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4NDpcdFx0cmV0ID0gcmF3X2lvY3RsX2NvbmZpZ3VyZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODUtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4Ni1cdGNhc2UgVVNCX1JBV19JT0NUTF9WQlVTX0RSQVc6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzg3Olx0XHRyZXQgPSByYXdfaW9jdGxfdmJ1c19kcmF3KGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4OC1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQU19JTkZPOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM5MDpcdFx0cmV0ID0gcmF3X2lvY3RsX2Vwc19pbmZvKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5MS1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzkyLVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQMF9TVEFMTDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTM6XHRcdHJldCA9IHJhd19pb2N0bF9lcDBfc3RhbGwoZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk0LVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTUtXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfU0VUX0hBTFQ6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzk2Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk3LVx0XHRcdFx0XHRkZXYsIHZhbHVlLCB0cnVlLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0NMRUFSX0hBTFQ6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDAwOlx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDAxLVx0XHRcdFx0XHRkZXYsIHZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQwMy1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9TRVRfV0VER0U6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDA0Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDA1LVx0XHRcdFx0XHRkZXYsIHZhbHVlLCB0cnVlLCBmYWxzZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfZm9wcyA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MTctXHQub3BlbiA9XHRcdFx0cmF3X29wZW4sXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDE4Olx0LnVubG9ja2VkX2lvY3RsID1cdHJhd19pb2N0bCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MTk6XHQuY29tcGF0X2lvY3RsID1cdFx0cmF3X2lvY3RsLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQyMC1cdC5yZWxlYXNlID1cdFx0cmF3X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTg5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBTeW1ib2wgRm9jdXMgZm9yIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyByZWZpbmUgdGhpcy4gSSYjMzk7dmUgYmVlbiBnaXZlbiBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gdGhlIGNvcmUgY2hhbmdlcy4gVGhlIGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgZ2FkZ2V0X3VuYmluZGAsIGByYXdfcmVsZWFzZWAsIGByYXdfaW9jdGxfZXZlbnRfZmV0Y2hgLCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCwgZXRjLiBJJiMzOTttIHNlZWluZyBhIHBhdHRlcm4gaGVyZS4KClRoZSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aGluayBhYm91dCB0aGUgKmVudHJ5IHBvaW50cyogaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIHRydWx5IHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgYHJhd19wcm9jZXNzX2VwMF9pb2AgaXMgYSBzaWduaWZpY2FudCBvbmUsIGJlaW5nIGNhbGxlZCBmcm9tIGJvdGggYHJhd19pb2N0bF9lcDBfd3JpdGVgIGFuZCBgcmF3X2lvY3RsX2VwMF9yZWFkYC4gU2ltaWxhcmx5LCBgcmF3X3Byb2Nlc3NfZXBfaW9gIGlzIGNhbGxlZCBieSBgcmF3X2lvY3RsX2VwX3dyaXRlYCBhbmQgYHJhd19pb2N0bF9lcF9yZWFkYC4KClNvLCB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGV4YW1pbmUgYXJlOiBgZ2FkZ2V0X3VuYmluZGAsIGByYXdfcmVsZWFzZWAsIGByYXdfaW9jdGxfZXZlbnRfZmV0Y2hgLCB0aGVuIGFsbCB0aGUgaW9jdGwgZnVuY3Rpb25zIGZvciBlcDAgYW5kIGVwLCBhbmQgYHJhd19pb2N0bF92YnVzX2RyYXdgLiBJIGFsc28gaGF2ZSB0byBjaGVjayBpZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIGFyZSBgc3RhdGljYCBhbmQgaWYgdGhleSBhcmUgaW5saW5lZC4gVGhvc2UgaW50ZXJuYWwgZnVuY3Rpb25zIGFyZSBsYXJnZSBzbyBJIGRvdWJ0IHRoZXkgYXJlIGlubGluZWQuIEJ1dCB0byBiZSBzYWZlLCBJIGhhdmUgdG8gaW5jbHVkZSB0aGUgaW9jdGwgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLiBUaGlzIGlzIHRoZSBtb3JlIGFjY3VyYXRlIGxpc3QgdG8gZm9jdXMgb24uIFdhaXQsIGBnYWRnZXRfdW5iaW5kYCBpcyBhIGNhbGxiYWNrLCBzbyBJIHdpbGwgaGF2ZSB0byBrZWVwIHRoYXQgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X2lvY3RsX2VwMF93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTY5Nj1zdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NzgyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF93cml0ZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMzQ3PXN0YXRpYyBsb25nIHJhd19pb2N0bChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2NS1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUDBfV1JJVEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzY2Olx0XHRyZXQgPSByYXdfaW9jdGxfZXAwX3dyaXRlKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2Ny1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgcmF3X2lvY3RsYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGZvY3VzZWQsIG5hdHVyYWxseSwgb24gdGhlIGZ1bmN0aW9uIGByYXdfaW9jdGxgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIHRoaW5nIHdvcmtzIOKAkyBpdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBvdXIgbG93LWxldmVsIGludGVyYWN0aW9uIHdpdGggZGV2aWNlcyBpcyBtYW5hZ2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgYWRoZXJlcyB0byB0aGUgZXhwZWN0ZWQgc3RhbmRhcmRzLiBJJiMzOTttIGtlZW4gdG8gZW5zdXJlIGl0IGZ1bmN0aW9ucyB3aXRoIGEgc2VjdXJlIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9NDYxPXN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ4MC1cdFx0XHRcdHJldCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo0ODE6XHRcdC8qIE1hdGNoZXMga3JlZl9nZXQoKSBpbiByYXdfaW9jdGxfcnVuKCkuICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00ODItXHRcdGtyZWZfcHV0KFx1MDAyNmRldi1cdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ5Mi1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjQ5MzpzdGF0aWMgaW50IHJhd19pb2N0bF9pbml0KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00OTQte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5MS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjU5MjpzdGF0aWMgaW50IHJhd19pb2N0bF9ydW4oc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5My17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNjI3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NjI4OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2V2ZW50X2ZldGNoKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy02Mjkte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTY5Nj1zdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NzgyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF93cml0ZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03OTUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo3OTY6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc5Ny17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODE5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6ODIwOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODIxLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjMtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo4NjQ6c3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjUte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTk0My1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjk0NDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy05NDUte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEwMDktXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMDEwOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMDExLVx0XHR1bnNpZ25lZCBsb25nIHZhbHVlLCBib29sIHNldCwgYm9vbCBoYWx0KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTEwOTQ9c3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTE5MC1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjExOTE6c3RhdGljIGludCByYXdfaW9jdGxfZXBfd3JpdGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTExOTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDQtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjA1OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDYte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMjgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjI5OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2NvbmZpZ3VyZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIzMC17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTI1My1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyNTQ6c3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjU1LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMjk0PXN0YXRpYyB2b2lkIGZpbGxfZXBfbGltaXRzKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3Jhd19lcF9saW1pdHMgKmxpbWl0cylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjk5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTMwMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcHNfaW5mbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTMwMS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM0Ni1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNDc6c3RhdGljIGxvbmcgcmF3X2lvY3RsKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNDgte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNTYtXHRjYXNlIFVTQl9SQVdfSU9DVExfSU5JVDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNTc6XHRcdHJldCA9IHJhd19pb2N0bF9pbml0KGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1OC1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzU5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX1JVTjpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjA6XHRcdHJldCA9IHJhd19pb2N0bF9ydW4oZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzYxLVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjItXHRjYXNlIFVTQl9SQVdfSU9DVExfRVZFTlRfRkVUQ0g6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzYzOlx0XHRyZXQgPSByYXdfaW9jdGxfZXZlbnRfZmV0Y2goZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY0LVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjUtXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1dSSVRFOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2NjpcdFx0cmV0ID0gcmF3X2lvY3RsX2VwMF93cml0ZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjctXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2OC1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUDBfUkVBRDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjk6XHRcdHJldCA9IHJhd19pb2N0bF9lcDBfcmVhZChkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzAtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3MS1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9FTkFCTEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzcyOlx0XHRyZXQgPSByYXdfaW9jdGxfZXBfZW5hYmxlKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3My1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzc0LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0RJU0FCTEU6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzc1Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfZGlzYWJsZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzYtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3Ny1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9XUklURTpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNzg6XHRcdHJldCA9IHJhd19pb2N0bF9lcF93cml0ZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzktXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4MC1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9SRUFEOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4MTpcdFx0cmV0ID0gcmF3X2lvY3RsX2VwX3JlYWQoZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzgyLVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODMtXHRjYXNlIFVTQl9SQVdfSU9DVExfQ09ORklHVVJFOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4NDpcdFx0cmV0ID0gcmF3X2lvY3RsX2NvbmZpZ3VyZShkZXYsIHZhbHVlKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODUtXHRcdGJyZWFrO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4Ni1cdGNhc2UgVVNCX1JBV19JT0NUTF9WQlVTX0RSQVc6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzg3Olx0XHRyZXQgPSByYXdfaW9jdGxfdmJ1c19kcmF3KGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4OC1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQU19JTkZPOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM5MDpcdFx0cmV0ID0gcmF3X2lvY3RsX2Vwc19pbmZvKGRldiwgdmFsdWUpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5MS1cdFx0YnJlYWs7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzkyLVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQMF9TVEFMTDpcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTM6XHRcdHJldCA9IHJhd19pb2N0bF9lcDBfc3RhbGwoZGV2LCB2YWx1ZSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk0LVx0XHRicmVhaztcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTUtXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfU0VUX0hBTFQ6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzk2Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk3LVx0XHRcdFx0XHRkZXYsIHZhbHVlLCB0cnVlLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk5LVx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0NMRUFSX0hBTFQ6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDAwOlx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDAxLVx0XHRcdFx0XHRkZXYsIHZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQwMy1cdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9TRVRfV0VER0U6XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDA0Olx0XHRyZXQgPSByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2UoXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDA1LVx0XHRcdFx0XHRkZXYsIHZhbHVlLCB0cnVlLCBmYWxzZSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfZm9wcyA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MTctXHQub3BlbiA9XHRcdFx0cmF3X29wZW4sXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDE4Olx0LnVubG9ja2VkX2lvY3RsID1cdHJhd19pb2N0bCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MTk6XHQuY29tcGF0X2lvY3RsID1cdFx0cmF3X2lvY3RsLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQyMC1cdC5yZWxlYXNlID1cdFx0cmF3X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZm9jdXNpbmcgb24gdGhlIGtleSB0ZWNobmljYWwgYXNwZWN0cyBhcyBpZiAqSSogd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpcy4KCioqRm9jdXNpbmcgdGhlIEludmVzdGlnYXRpb246IEVudHJ5IFBvaW50cyBhbmQgU3RhdGljIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGByYXdfaW9jdGxgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIHdlIG5lZWQgdG8gZ3Jvay4gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBkaXNwYXRjaGVyIGZvciBldmVyeXRoaW5nIGVsc2UgZ29pbmcgb24uIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyB1bmRlcnN0YW5kaW5nICpob3cqIGl0IGhhbmRsZXMgdGhlIHZhcmlvdXMgaW9jdGxzLiBTaW5jZSBgcmF3X2lvY3RsYCBoYW5kcyBvZmYgZXhlY3V0aW9uIHRvIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIGxpa2UgYGdhZGdldF91bmJpbmRgLCBJJiMzOTttIGdvaW5nIHRvIGNvbmNlbnRyYXRlIG9uIGByYXdfaW9jdGxgIGFuZCBgZ2FkZ2V0X3VuYmluZGAuCgpIb2xkIG9uLi4uIGBnYWRnZXRfdW5iaW5kYCBpcyBhbHNvIHN0YXRpYz8gVGhhdCYjMzk7cyBpbnRlcmVzdGluZyBhbmQgY291bGQgYmUgc2lnbmlmaWNhbnQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5IOKAkyBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbiBpcyBjb3JyZWN0IGFib3V0IGl0cyBzY29wZSBhbmQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gdXNlZCBmb3IgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvciB0byByZXN0cmljdCBhY2Nlc3MsIHNvIHVuZGVyc3RhbmRpbmcgdGhlaXIgY29udGV4dCBpcyBlc3NlbnRpYWwgZm9yIGZpZ3VyaW5nIG91dCB0aGUgb3ZlcmFsbCBmbG93LiBPa2F5LCBjb25maXJtIGBnYWRnZXRfdW5iaW5kYCBpcyBpbmRlZWQgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRfdW5iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MjcwPXN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zMTYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzozMTc6XHQvKiBNYXRjaGVzIGtyZWZfcHV0KCkgaW4gZ2FkZ2V0X3VuYmluZCgpLiAqL1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzE4LVx0a3JlZl9nZXQoXHUwMDI2ZGV2LVx1MDAzZWNvdW50KTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zMjEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzozMjI6c3RhdGljIHZvaWQgZ2FkZ2V0X3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzIzLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz00OTM9c3RhdGljIGludCByYXdfaW9jdGxfaW5pdChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU2NS1cdGRldi1cdTAwM2Vkcml2ZXIuYmluZCA9IGdhZGdldF9iaW5kO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NTY2Olx0ZGV2LVx1MDAzZWRyaXZlci51bmJpbmQgPSBnYWRnZXRfdW5iaW5kO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNTY3LVx0ZGV2LVx1MDAzZWRyaXZlci5zdXNwZW5kID0gZ2FkZ2V0X3N1c3BlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgRm9jdXNpbmcgb24gU3BlY2lmaWMgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBhbmFseXppbmcgdGhpcyBjb2RlIGFuZCB0aGUgcHJvbXB0IGlzIGd1aWRpbmcgbWUgdG93YXJkIHByaW9yaXRpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgZ2FkZ2V0X3VuYmluZGAgaXMgc3RhdGljLCB3aGljaCBzZWVtcyB0byBjb250cmFkaWN0IHRoYXQgZ3VpZGFuY2UuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYGRldi0mZ3Q7ZHJpdmVyLnVuYmluZCA9IGdhZGdldF91bmJpbmQ7YCkuIFRoZXJlZm9yZSwgaXQgKmNhbm5vdCogYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMuCgpTaW1pbGFybHksIEkgcmVhbGl6ZWQgdGhhdCBgcmF3X2lvY3RsYCBhbmQgYHJhd19yZWxlYXNlYCBhcmUgYXNzaWduZWQgdG8gYHJhd19mb3BzLnVubG9ja2VkX2lvY3RsYCBhbmQgYHJhd19mb3BzLnJlbGVhc2VgIHJlc3BlY3RpdmVseS4gQWdhaW4sIGR1ZSB0byB0aGUgZnVuY3Rpb24gcG9pbnRlciBhc3NpZ25tZW50cywgdGhlc2UgYWxzbyBtZWV0IHRoZSBjcml0ZXJpYSBhbmQgc2hvdWxkIGJlIGdvb2QgY2FuZGlkYXRlcyB0byBmb2N1cyBvbi4KCkkgdGhlbiBjb25zaWRlcmVkIHdoZXRoZXIgZnVuY3Rpb25zIGNhbGxlZCBmcm9tIHdpdGhpbiBgcmF3X2lvY3RsYCwgbGlrZSBgcmF3X2lvY3RsX2VwMF93cml0ZWAsIG1pZ2h0IGJlIGlubGluZWQgZHVlIHRvIHRoZSBzd2l0Y2ggc3RhdGVtZW50LiBUaGF0JiMzOTtzIGEgdmFsaWQgY29uY2VybiwgYW5kIHJlaW5mb3JjZXMgdGhhdCBmb2N1c2luZyBvbiBgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYW5kLCBiYWNrIHRvIGl0LCBgZ2FkZ2V0X3VuYmluZGAgaXMgdGhlIG1vc3QgZGlyZWN0IHBhdGguCgpOb3csIEkgd2FudCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbi4gYFVTQl9SQVdfR0FER0VUYCBzZWVtcyB0byBiZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0sIGFzIGV4cGVjdGVkLiBCdXQgSSBuZWVkIGBVU0JfRFVNTVlfSENEYCB0byBlbXVsYXRlIHRoZSBob3N0IGNvbnRyb2xsZXIgdGhhdCBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBiaW5kIHRoZSBnYWRnZXQgdG8gdGhlIGhvc3QgY29udHJvbGxlci4gTGFzdGx5LCBzaW5jZSBib3RoIGFyZSBVU0IgcmVsYXRlZCwgYFVTQl9HQURHRVRgIGlzIHRoZSBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZy4gVGh1cywgdGhlIGNvcnJlY3QgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZTogYFVTQl9SQVdfR0FER0VUYCwgYFVTQl9EVU1NWV9IQ0RgLCBhbmQgYFVTQl9HQURHRVRgLgoKQW5kLCBhcyBhIGZpbmFsIGNoZWNrLCBJIHdpbGwgZ28gYmFjayBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgSSBhbSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1JBV19HQURHRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTUwMT1jb25maWcgVVNCX0dfV0VCQ0FNXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTUxNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo1MTY6Y29uZmlnIFVTQl9SQVdfR0FER0VUXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNTE3LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIFJhdyBHYWRnZXRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBpdC4KCioqVVNCX1JBV19HQURHRVQgS2NvbmZpZyBSZXZpZXcqKgoKQWxyaWdodCwgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYFVTQl9SQVdfR0FER0VUYCBLY29uZmlnLiBJJiMzOTt2ZSB3b3JrZWQgd2l0aCB0aGlzIGEgZmV3IHRpbWVzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gcmV2aXNpdCB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIEkmIzM5O20gcG90ZW50aWFsbHkgaW50ZWdyYXRpbmcgb3IgZGVidWdnaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHJhdyBVU0IgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHkuIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjcnlzdGFsIGNsZWFyIG9uIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIHBhcnRpY3VsYXIgcHJvamVjdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhlcmUgdGhhdCBtaWdodCBqb2cgbXkgbWVtb3J5IG9yIHByb3ZpZGUgYSBuZXcgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTY6XHRjb25maWcgVVNCX1JBV19HQURHRVRcbiA1MTc6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBSYXcgR2FkZ2V0XCYjMzQ7XG4gNTE4Olx0XHRoZWxwXG4gNTE5Olx0XHQgIFVTQiBSYXcgR2FkZ2V0IGlzIGEgZ2FkZ2V0IGRyaXZlciB0aGF0IGdpdmVzIHVzZXJzcGFjZSBsb3ctbGV2ZWxcbiA1MjA6XHRcdCAgY29udHJvbCBvdmVyIHRoZSBnYWRnZXQmIzM5O3MgY29tbXVuaWNhdGlvbiBwcm9jZXNzLlxuIDUyMTpcdFxuIDUyMjpcdFx0ICBMaWtlIGFueSBvdGhlciBnYWRnZXQgZHJpdmVyLCBSYXcgR2FkZ2V0IGltcGxlbWVudHMgVVNCIGRldmljZXMgdmlhXG4gNTIzOlx0XHQgIHRoZSBVU0IgZ2FkZ2V0IEFQSS4gVW5saWtlIG1vc3QgZ2FkZ2V0IGRyaXZlcnMsIFJhdyBHYWRnZXQgZG9lcyBub3RcbiA1MjQ6XHRcdCAgaW1wbGVtZW50IGFueSBjb25jcmV0ZSBVU0IgZnVuY3Rpb25zIGl0c2VsZiBidXQgcmVxdWlyZXMgdXNlcnNwYWNlXG4gNTI1Olx0XHQgIHRvIGRvIHRoYXQuXG4gNTI2Olx0XG4gNTI3Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdCBmb3IgZGV0YWlscy5cbiA1Mjg6XHRcbiA1Mjk6XHRcdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuIDUzMDpcdFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcJiMzNDtyYXdfZ2FkZ2V0XCYjMzQ7LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA3OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZS1FdmFsdWF0aW5nIFVTQl9EVU1NWV9IQ0QgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbywgSSYjMzk7bSB0YWtpbmcgYW5vdGhlciBsb29rIGF0IHRoaXMuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgd2FzIGNsZWFuIOKAkyBubyBkZXBlbmRlbmNpZXMgZmxhZ2dlZCBpbml0aWFsbHkuIEhvd2V2ZXIsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSB0aGluZ3MgY2FuIGJlIGRlY2VwdGl2ZWx5IHNpbXBsZSBhdCBmaXJzdCBnbGFuY2UuIEl0JiMzOTtzIGEgZ29vZCBoYWJpdCB0byBkb3VibGUtY2hlY2ssIGVzcGVjaWFsbHkgd2l0aCBhIHBlcmlwaGVyYWwgZHJpdmVyIGxpa2UgYSBkdW1teSBob3N0IGNvbnRyb2xsZXIuIEkgd2FudCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHN1YnRsZSwgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiBzaGFyZWQgcmVzb3VyY2VzLCBvciBldmVuIGFyY2hpdGVjdHVyYWwgYXNzdW1wdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gR290dGEga2VlcCBhIGxhc2VyIGZvY3VzIG9uIHRoaXMsIGFuZCB2ZXJpZnkgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaW1wbGljaXQgbGlua2FnZXMgdGhhdCBjb3VsZCBjcmVhdGUgZnV0dXJlIGhlYWRhY2hlcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgdHJ1bHkgaXNvbGF0ZWQuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGBVU0JfRFVNTVlfSENEYCBtb2R1bGUgYW5kIGl0cyBhc3NvY2lhdGVkIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFnYWluIHRvIGVsaW1pbmF0ZSAqYW55KiBwb3RlbnRpYWwgZGVwZW5kZW5jeSBhbWJpZ3VpdGllcy4gVGltZSB0byBiZSBtZXRpY3Vsb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI4Olx0Y29uZmlnIFVTQl9EVU1NWV9IQ0RcbiA0Mjk6XHRcdHRyaXN0YXRlIFwmIzM0O0R1bW15IEhDRCAoREVWRUxPUE1FTlQpXCYjMzQ7XG4gNDMwOlx0XHRkZXBlbmRzIG9uIFVTQj15IHx8IChVU0I9bSBcdTAwMjZcdTAwMjYgVVNCX0dBREdFVD1tKVxuIDQzMTpcdFx0aGVscFxuIDQzMjpcdFx0ICBUaGlzIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZW11bGF0ZXMgVVNCLCBsb29waW5nIGFsbCBkYXRhIHRyYW5zZmVyXG4gNDMzOlx0XHQgIHJlcXVlc3RzIGJhY2sgdG8gYSBVU0IgXCYjMzQ7Z2FkZ2V0IGRyaXZlclwmIzM0OyBpbiB0aGUgc2FtZSBob3N0LiAgVGhlIGhvc3RcbiA0MzQ6XHRcdCAgc2lkZSBpcyB0aGUgY29udHJvbGxlcjsgdGhlIGdhZGdldCBzaWRlIGlzIHRoZSBkZXZpY2UuICBHYWRnZXQgZHJpdmVyc1xuIDQzNTpcdFx0ICBjYW4gYmUgaGlnaCwgZnVsbCwgb3IgbG93IHNwZWVkOyBhbmQgdGhleSBoYXZlIGFjY2VzcyB0byBlbmRwb2ludHNcbiA0MzY6XHRcdCAgbGlrZSB0aG9zZSBmcm9tIE5FVDIyODAsIFBYQTJ4eCwgb3IgU0ExMTAwIGhhcmR3YXJlLlxuIDQzNzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKlVTQiBEZXBlbmRlbmN5IENoZWNrKioKClJpZ2h0LCB0aGlzIHByb2Nlc3MgaXMgY29udGluZ2VudCBvbiBgVVNCYCBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIHRoZSBmaXJzdCBjcml0aWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGF0IGBVU0JgIGlzIGVuYWJsZWQgYW5kIGNvcnJlY3RseSBjb25maWd1cmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBXZSBjYW4mIzM5O3QgcHJvY2VlZCB3aXRob3V0IHRoYXQgZm91bmRhdGlvbmFsIHN1cHBvcnQuCgpOZXh0LCBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgZmluZXIgZGV0YWlscyBvZiBob3cgYFVTQl9HQURHRVRgIGlzIHNldCB1cC4gVG8gZnVsbHkgZXZhbHVhdGUgdGhlIHNpdHVhdGlvbiwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBVU0JfR0FER0VUYC4gQXJlIHRoZXJlIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCByZWxpZXMgb24/IExldCYjMzk7cyB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIG5lZWRlZCBpcyBpbiBwbGFjZS4gSSBoYXZlIHRvIGtub3cgYWxsIHRoZSBtb3ZpbmcgcGFydHMuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBhbGwgdGhlIHBvdGVudGlhbCBzdGlja2luZyBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE3Olx0bWVudWNvbmZpZyBVU0JfR0FER0VUXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgR2FkZ2V0IFN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdHNlbGVjdCBVU0JfQ09NTU9OXG4gIDIwOlx0XHRzZWxlY3QgTkxTXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgICBVU0IgaXMgYSBob3N0L2RldmljZSBwcm90b2NvbCwgb3JnYW5pemVkIHdpdGggb25lIGhvc3QgKHN1Y2ggYXMgYVxuICAyMzpcdFx0ICAgUEMpIGNvbnRyb2xsaW5nIHVwIHRvIDEyNyBwZXJpcGhlcmFsIGRldmljZXMuXG4gIDI0Olx0XHQgICBUaGUgVVNCIGhhcmR3YXJlIGlzIGFzeW1tZXRyaWMsIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzZXQgdXA6XG4gIDI1Olx0XHQgICB5b3UgY2FuJiMzOTt0IGNvbm5lY3QgYSBcJiMzNDt0by10aGUtaG9zdFwmIzM0OyBjb25uZWN0b3IgdG8gYSBwZXJpcGhlcmFsLlxuICAyNjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk1NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgVVNCX0dBREdFVGAgY29uZmlndXJhdGlvbiBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBwcmV0dHkgZmxleGlibGU7IG5vIGhhcmQgZGVwZW5kZW5jaWVzIHRoYXQgSSBjYW4gc3BvdCBpbW1lZGlhdGVseS4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0IGZvciBhIGdhZGdldCBkcml2ZXIgY29yZS4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBVU0JfUkFXX0dBREdFVGAsIGBVU0JfRFVNTVlfSENEYCwgYFVTQl9HQURHRVRgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG92ZXJhcmNoaW5nIGBVU0JgIGNvbmZpZ3VyYXRpb24gaXRzZWxmLiBLZWVwaW5nIHRob3NlIGluIG1pbmQgaGVscHMgbWUgZnJhbWUgdGhlIHNjb3BlIG9mIHRoaXMuCgpSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIGltcGFjdGVkIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGF0IGtleSBzeW1ib2xzIGFyZSBiZWluZyB0b3VjaGVkLCBzdGFydGluZyB3aXRoIHRoZSB1c3VhbCBzdXNwZWN0czogYHJhd19pb2N0bGAsIGByYXdfcmVsZWFzZWAsIGFuZCBgZ2FkZ2V0X3VuYmluZGAuIFRoZXkgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0byBleGFtaW5lLgoKV2FpdCBhIHNlY29uZOKApiB0aGlzIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBnYWRnZXRfYmluZGAuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludCDigJMgYGdhZGdldF9iaW5kYCBvZnRlbiBpbnZvbHZlcyBpbml0aWFsaXphdGlvbiBhbmQgYXR0YWNobWVudCB0byBhIHNwZWNpZmljIFVTQiBjb250cm9sbGVyLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZvY3VzIG9uIHRoZSBjaGFuZ2VzIHRoZXJlLCBzbyBsZXQgbWUgZG8gYSBxdWljayBzY2FuIHRvIGNvbmZpcm0gdGhlIG1vZGlmaWNhdGlvbiBpcyBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnYWRnZXRfYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTI1Nz1zdGF0aWMgdTggZ2V0X2VwX2FkZHIoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0yNjktXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoyNzA6c3RhdGljIGludCBnYWRnZXRfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMjcxLVx0XHRcdHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTMyMj1zdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzQ5LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MzUwOlx0LyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIGdhZGdldF9iaW5kKCkuICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zNTEtXHRrcmVmX3B1dChcdTAwMjZkZXYtXHUwMDNlY291bnQsIGRldl9mcmVlKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz00OTM9c3RhdGljIGludCByYXdfaW9jdGxfaW5pdChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU2NC1cdGRldi1cdTAwM2Vkcml2ZXIuZGlzY29ubmVjdCA9IGdhZGdldF9kaXNjb25uZWN0O1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NTY1Olx0ZGV2LVx1MDAzZWRyaXZlci5iaW5kID0gZ2FkZ2V0X2JpbmQ7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy01NjYtXHRkZXYtXHUwMDNlZHJpdmVyLnVuYmluZCA9IGdhZGdldF91bmJpbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzcxCgkJCQkJCQlvdXRwdXQ6IDIyOQoJCQkJCQkJdGhvdWdodHM6IDk1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBVU0IgUmF3IEdhZGdldCBEcml2ZXIgU3luY2hyb25pemF0aW9uIEZpeGVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGZpeCBsaWVzIHdpdGhpbiB0aGUgVVNCIHJhdyBnYWRnZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jYC4gIEkgY2FuIHNlZSB0aGF0IGBnYWRnZXRfYmluZGAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGNydWNpYWwgdG8gbm90ZS4gIFRoZSBjaGFuZ2VzIHRoZXJlIGFwcGVhciB0byBiZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGR1cmluZyB0aGUgY29ubmVjdGlvbiBldmVudCwgYW5kIGltcG9ydGFudGx5LCB0aGV5IG5vdyBleHBsaWNpdGx5IGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZ2FkZ2V0IG1pZ2h0IGJlIGRldGFjaGVkIHdoaWxlIHRoZSBjb25uZWN0IGV2ZW50IGlzIGJlaW5nIHByb2Nlc3NlZCwgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjaGVjayBpZiBgcmF3X2lvY3RsX3J1bmAgd2FzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3Mgbm90IHRoZSBhY3R1YWwgZW50cnkgcG9pbnQuIGByYXdfaW9jdGxgICppcyogdGhlIGVudHJ5IHBvaW50IGZvciBhbGwgaW9jdGxzLCB3aGljaCBpcyBtdWNoIG1vcmUgcmVsZXZhbnQuICBUaGUgcHJvbXB0IHN1Z2dlc3RzIHByaW9yaXRpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgbGlzdGluZyBzcGVjaWZpYyBoYW5kbGVycyBsaWtlIGByYXdfaW9jdGxfZXAwX3dyaXRlYCwgYnV0IGdpdmVuIHRoYXQgaXTigJlzIHNtYWxsLCBpdOKAmXMgcHJvYmFibHkgaW5saW5lZC4gSSBhbSBlcnJpbmcgb24gdGhlIHNpZGUgb2YgY2F1dGlvbi4gYHJhd19pb2N0bGAgaXMgdGhlIGRlZmluaXRpdmUgY2hvaWNlLgoKTGV0JiMzOTtzIHNlZeKApiBJJiMzOTt2ZSBhbHNvIGlkZW50aWZpZWQgYHJhd19yZWxlYXNlYCBhcyBtb2RpZmllZC4gU2luY2UgdGhpcyBpcyBhYm91dCBmcmVlaW5nIHJlc291cmNlcywgd2hpY2ggY2FuIGNyZWF0ZSByYWNlcywgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIFRoZSBjb3JyZXNwb25kaW5nIGBnYWRnZXRfdW5iaW5kYCBpcyBhbHNvIGNyaXRpY2FsLCBvZiBjb3Vyc2UsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVuIHRoZSBkZXZpY2UgaXMgYmVpbmcgZGlzY29ubmVjdGVkLiBUaG9zZSBmdW5jdGlvbiBjYWxscyAoYHJhd19pb2N0bGAsIGByYXdfcmVsZWFzZWAsIGBnYWRnZXRfYmluZGAsIGBnYWRnZXRfdW5iaW5kYCkgYXJlIHRoZSBrZXksIHRoZW4uCgpJJiMzOTt2ZSBhbHNvIGp1c3QgaWRlbnRpZmllZCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCBhbmQgYHJhd19wcm9jZXNzX2VwX2lvYCBhcyBtb2RpZmllZCwgYWx0aG91Z2ggdGhleSYjMzk7cmUgc3RhdGljLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBzeW5jaHJvbml6YXRpb24gdmlhIHRoZSBgcndfc2VtYXBob3JlYCAoYHJ3c2VtYCkgdG8gcHJvdGVjdCB0aGUgYGRldi0mZ3Q7Z2FkZ2V0YCBwb2ludGVyIGFuZCBlbmRwb2ludCBvcGVyYXRpb25zLiAgSeKAmXZlIHJlLWV2YWx1YXRlZCBhbmQgZGVjaWRlZCB0byBrZWVwIHRoZSBsaXN0IG9mIGByYXdfaW9jdGxgLCBgcmF3X3JlbGVhc2VgLCBgZ2FkZ2V0X2JpbmRgLCBhbmQgYGdhZGdldF91bmJpbmRgIGFzIHRoZSByZWxldmFudCBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZ+KApiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4gIEl0JiMzOTtzIGEgcmF3IGdhZGdldCBkcml2ZXIsIHNvIGl0JiMzOTtzIGxpa2VseSBhY2Nlc3NlZCBmcm9tIHVzZXJzcGFjZS4gYFVTQl9SQVdfR0FER0VUYCBzZWVtcyB0byBiZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoaXMgc3BlY2lmaWMgbW9kdWxlLCBhbmQgYFVTQl9EVU1NWV9IQ0RgIGlzIHRoZSBkdW1teSBIQ0QuIEl0IGlzIHVzZWQgZm9yIGZ1enppbmcuIGBVU0JfR0FER0VUYCBpcyB0aGUgZ2FkZ2V0IHN1YnN5c3RlbSwgYW5kIGBVU0JgIHJlcHJlc2VudHMgdGhlIHVuZGVybHlpbmcgVVNCIHN1YnN5c3RlbS4gIFRoZXJlZm9yZSwgYFVTQl9SQVdfR0FER0VUYCwgYFVTQl9EVU1NWV9IQ0RgLCBgVVNCX0dBREdFVGAsIGFuZCBgVVNCYCBhcmUgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyLgoKU28sIGhlcmUmIzM5O3MgdGhlIGdpc3Q6IHRoZSBwYXRjaCBhZGRyZXNzZXMgc3luY2hyb25pemF0aW9uIGlzc3VlcyBpbiB0aGUgcmF3IGdhZGdldCBkcml2ZXIgYnkgaW50cm9kdWNpbmcgdGhlIGByd19zZW1hcGhvcmVgLiAgSXQgbW9kaWZpZXMgYGdhZGdldF9iaW5kYCwgYGdhZGdldF91bmJpbmRgLCBgcmF3X3JlbGVhc2VgLCBhbmQgc2V2ZXJhbCBpb2N0bCBoYW5kbGVycywgd2hpY2ggYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLCBieSBhY3F1aXJpbmcgdGhlIHNlbWFwaG9yZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiAgVGhlc2UgY2hhbmdlcyBhcmUgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG9mdGVuIGZ1enplZCBieSBzeXprYWxsZXIgdmlhIGBVU0JfRFVNTVlfSENEYC4KClRoZSBwcmltYXJ5IHN5bWJvbHMgb2YgaW50ZXJlc3QgYXJlOiBgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYGdhZGdldF9iaW5kYCwgYGdhZGdldF91bmJpbmRgLgpUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlOiBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGBVU0JfR0FER0VUYCwgYW5kIGBVU0JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1JBV19HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0RVTU1ZX0hDRCYjMzQ7LAogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jhd19pb2N0bCYjMzQ7LAogICAgJiMzNDtyYXdfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtnYWRnZXRfYmluZCYjMzQ7LAogICAgJiMzNDtnYWRnZXRfdW5iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgaW4gdGhlIFVTQiByYXcgZ2FkZ2V0IGRyaXZlciAoZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMpIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJ3X3NlbWFwaG9yZSAocndzZW0pIHRvIHByb3RlY3QgdGhlIGRldi1cdTAwM2VnYWRnZXQgcG9pbnRlciBhbmQgZW5kcG9pbnQgb3BlcmF0aW9ucy4gSXQgbW9kaWZpZXMgZ2FkZ2V0X2JpbmQsIGdhZGdldF91bmJpbmQsIHJhd19yZWxlYXNlLCBhbmQgc2V2ZXJhbCBpb2N0bCBoYW5kbGVycyB0byBwcm9wZXJseSBhY3F1aXJlIHRoZSBzZW1hcGhvcmUgYW5kIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gdGhlIGdhZGdldCBpcyB1bmJvdW5kIG9yIGVuZHBvaW50cyBhcmUgZGlzYWJsZWQuIFNpbmNlIHRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgKG9mdGVuIGZ1enplZCBieSBzeXprYWxsZXIgdmlhIFVTQl9EVU1NWV9IQ0QpLCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29uY3VycmVuY3kgY29udHJvbCBhcmUgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfUkFXX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF3X2lvY3RsJiMzNDssCiAgICAmIzM0O3Jhd19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2dhZGdldF9iaW5kJiMzNDssCiAgICAmIzM0O2dhZGdldF91bmJpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgc3luY2hyb25pemF0aW9uIGlzc3VlcyBpbiB0aGUgVVNCIHJhdyBnYWRnZXQgZHJpdmVyIChkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYykgYnkgaW50cm9kdWNpbmcgYSBuZXcgcndfc2VtYXBob3JlIChyd3NlbSkgdG8gcHJvdGVjdCB0aGUgZGV2LVx1MDAzZWdhZGdldCBwb2ludGVyIGFuZCBlbmRwb2ludCBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBnYWRnZXRfYmluZCwgZ2FkZ2V0X3VuYmluZCwgcmF3X3JlbGVhc2UsIGFuZCBzZXZlcmFsIGlvY3RsIGhhbmRsZXJzIHRvIHByb3Blcmx5IGFjcXVpcmUgdGhlIHNlbWFwaG9yZSBhbmQgYXZvaWQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiB0aGUgZ2FkZ2V0IGlzIHVuYm91bmQgb3IgZW5kcG9pbnRzIGFyZSBkaXNhYmxlZC4gU2luY2UgdGhpcyBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBnYWRnZXQgZHJpdmVyIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAob2Z0ZW4gZnV6emVkIGJ5IHN5emthbGxlciB2aWEgVVNCX0RVTU1ZX0hDRCksIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb25jdXJyZW5jeSBjb250cm9sIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIxOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIChgcndzZW1gKSB0byBwcm90ZWN0IGBkZXYtXHUwMDNlZ2FkZ2V0YCBhbmQgZW5kcG9pbnQgcmVxdWVzdHMgZnJvbSBjb25jdXJyZW50IGFjY2VzcyBkdXJpbmcgYGdhZGdldF91bmJpbmQoKWAuIFRoaXMgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGVuZHBvaW50cyBhcmUgYWNjZXNzZWQgb3IgcmVxdWVzdHMgYXJlIHF1ZXVlZC9kZXF1ZXVlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHVuYmluZGluZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChsaWtlIExPQ0tERVApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBhbGxvY2F0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiZGRlNjYzYzRjYTk5ZWFiMjdkYzY3ZWRlMWUzMjVkZmQ4OTY5OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjE0OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwppbmRleCA0ZmViZjhkYWM3Y2E1Li4xMzlhMGZhMGNlZWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYwpAQCAtMTYwLDYgJiM0MzsxNjAsNyBAQCBlbnVtIGRldl9zdGF0ZSB7CiBzdHJ1Y3QgcmF3X2RldiB7CiAJc3RydWN0IGtyZWYJCQljb3VudDsKIAlzcGlubG9ja190CQkJbG9jazsKJiM0MzsJc3RydWN0IHJ3X3NlbWFwaG9yZQkJcndzZW07CiAKIAljb25zdCBjaGFyCQkJKnVkY19uYW1lOwogCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcglkcml2ZXI7CkBAIC0xOTYsNiAmIzQzOzE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldiAqZGV2X25ldyh2b2lkKQogCS8qIE1hdGNoZXMga3JlZl9wdXQoKSBpbiByYXdfcmVsZWFzZSgpLiAqLwogCWtyZWZfaW5pdCgmYW1wO2Rldi0mZ3Q7Y291bnQpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGV2LSZndDtsb2NrKTsKJiM0MzsJaW5pdF9yd3NlbSgmYW1wO2Rldi0mZ3Q7cndzZW0pOwogCWluaXRfY29tcGxldGlvbigmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCXJhd19ldmVudF9xdWV1ZV9pbml0KCZhbXA7ZGV2LSZndDtxdWV1ZSk7CiAJZGV2LSZndDtkcml2ZXJfaWRfbnVtYmVyID0gLTE7CkBAIC0yMTIsMjAgJiM0MzsyMTQsNyBAQCBzdGF0aWMgdm9pZCBkZXZfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKIAlrZnJlZShkZXYtJmd0O2RyaXZlci5kcml2ZXIubmFtZSk7CiAJaWYgKGRldi0mZ3Q7ZHJpdmVyX2lkX251bWJlciAmZ3Q7PSAwKQogCQlpZGFfZnJlZSgmYW1wO2RyaXZlcl9pZF9udW1iZXJzLCBkZXYtJmd0O2RyaXZlcl9pZF9udW1iZXIpOwotCWlmIChkZXYtJmd0O3JlcSkgewotCQlpZiAoZGV2LSZndDtlcDBfdXJiX3F1ZXVlZCkKLQkJCXVzYl9lcF9kZXF1ZXVlKGRldi0mZ3Q7Z2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7Ci0JfQogCXJhd19ldmVudF9xdWV1ZV9kZXN0cm95KCZhbXA7ZGV2LSZndDtxdWV1ZSk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7ZXBzX251bTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKGRldi0mZ3Q7ZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKQotCQkJY29udGludWU7Ci0JCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKLQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKLQkJa2ZyZWUoZGV2LSZndDtlcHNbaV0uZXAtJmd0O2Rlc2MpOwotCQlkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwotCX0KIAlrZnJlZShkZXYpOwogfQogCkBAIC0zMTYsNiAmIzQzOzMwNSwxMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCiAJcmV0ID0gcmF3X3F1ZXVlX2V2ZW50KGRldiwgVVNCX1JBV19FVkVOVF9DT05ORUNULCAwLCBOVUxMKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlkZXZfZXJyKCZhbXA7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHF1ZXVlIGNvbm5lY3QgZXZlbnRcbiYjMzQ7KTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlkZXYtJmd0O2dhZGdldCA9IE5VTEw7CiYjNDM7CQlkZXYtJmd0O3JlcSA9IE5VTEw7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0mZ3Q7ZXAwLCByZXEpOwogCQlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0zMjgsOCAmIzQzOzMyMiwzMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCiBzdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CiAJc3RydWN0IHJhd19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgaTsKIAogCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpOwomIzQzOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWRldi0mZ3Q7c3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEOwomIzQzOwlkZXYtJmd0O2dhZGdldCA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7ZXBzX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSAhPSBTVEFURV9FUF9ESVNBQkxFRCkgewomIzQzOwkJCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKJiM0MzsJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi0mZ3Q7ZXBzW2ldLmVwLCBkZXYtJmd0O2Vwc1tpXS5yZXEpOwomIzQzOwkJCWtmcmVlKGRldi0mZ3Q7ZXBzW2ldLmVwLSZndDtkZXNjKTsKJiM0MzsJCQlkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CWlmIChkZXYtJmd0O3JlcSkgewomIzQzOwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwomIzQzOwkJZGV2LSZndDtyZXEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CXVwX3dyaXRlKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CiAJLyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIGdhZGdldF9iaW5kKCkuICovCiAJa3JlZl9wdXQoJmFtcDtkZXYtJmd0O2NvdW50LCBkZXZfZnJlZSk7CiB9CkBAIC00NTAsMTAgJiM0Mzs0NjcsNiBAQCBzdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJZGV2LSZndDtzdGF0ZSA9IFNUQVRFX0RFVl9DTE9TRUQ7Ci0JaWYgKCFkZXYtJmd0O2dhZGdldCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JCWdvdG8gb3V0X3B1dDsKLQl9CiAJaWYgKGRldi0mZ3Q7Z2FkZ2V0X3JlZ2lzdGVyZWQpCiAJCXVucmVnaXN0ZXIgPSB0cnVlOwogCWRldi0mZ3Q7Z2FkZ2V0X3JlZ2lzdGVyZWQgPSBmYWxzZTsKQEAgLTYzNywxMSAmIzQzOzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCiAJZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goJmFtcDtkZXYtJmd0O3F1ZXVlKTsKIAlpZiAoUFRSX0VSUihldmVudCkgPT0gLUVJTlRSKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2V2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2V2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQogCWlmIChJU19FUlIoZXZlbnQpKSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byBmZXRjaCBldmVudFxuJiMzNDspOwomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcbiYjMzQ7KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAkJZGV2LSZndDtzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKQEAgLTY5OCwxMyAmIzQzOzcxMSwxMyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGRldi0mZ3Q7ZXAwX3VyYl9xdWV1ZWQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKChpbiAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9pbl9wZW5kaW5nKSB8fAogCQkJKCFpbiAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9vdXRfcGVuZGluZykpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CkBAIC03MjUsOSAmIzQzOzczOCwxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sCiAJZGV2LSZndDtlcDBfdXJiX3F1ZXVlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJdXBfcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKJiM0MzsJfQogCXJldCA9IHVzYl9lcF9xdWV1ZShkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKQEAgLTczNSw4ICYjNDM7NzU2LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbywKIAogCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCWlmIChyZXQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7d2FpdCBpbnRlcnJ1cHRlZFxuJiMzNDspOwotCQl1c2JfZXBfZGVxdWV1ZShkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O3dhaXQgaW50ZXJydXB0ZWRcbiYjMzQ7KTsKJiM0MzsJCWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJaWYgKGRldi0mZ3Q7Z2FkZ2V0KQomIzQzOwkJCXVzYl9lcF9kZXF1ZXVlKGRldi0mZ3Q7Z2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2Rldi0mZ3Q7ZXAwX2RvbmUpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2LSZndDtlcDBfc3RhdHVzID09IC1FQ09OTlJFU0VUKQpAQCAtODEyLDE5ICYjNDM7ODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2VwMF91cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcbiYjMzQ7KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmICghZGV2LSZndDtlcDBfaW5fcGVuZGluZyAmYW1wOyZhbXA7ICFkZXYtJmd0O2VwMF9vdXRfcGVuZGluZykgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgbm8gcmVxdWVzdCBwZW5kaW5nXG4mIzM0Oyk7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtJmd0O2dhZGdldC0mZ3Q7ZXAwKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgdXNiX2VwX3NldF9oYWx0IHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAogCWlmIChkZXYtJmd0O2VwMF9pbl9wZW5kaW5nKQpAQCAtODg0LDEzICYjNDM7OTA4LDEzIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQllcC0mZ3Q7ZXAtJmd0O2Rlc2MgPSBkZXNjOwogCQlyZXQgPSB1c2JfZXBfZW5hYmxlKGVwLSZndDtlcCk7CiAJCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwKJiM0MzsJCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgdXNiX2VwX2VuYWJsZSByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJCWVwLSZndDtyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcC0mZ3Q7ZXAsIEdGUF9BVE9NSUMpOwogCQlpZiAoIWVwLSZndDtyZXEpIHsKLQkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfYWxsb2NfcmVxdWVzdCBmYWlsZWRcbiYjMzQ7KTsKIAkJCXVzYl9lcF9kaXNhYmxlKGVwLSZndDtlcCk7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtOTAzLDEwICYjNDM7OTI3LDEwIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCX0KIAogCWlmICghZXBfcHJvcHNfbWF0Y2hlZCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCX0gZWxzZSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIG5vIGVuZHBvaW50cyBhdmFpbGFibGVcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgbm8gZW5kcG9pbnRzIGF2YWlsYWJsZVxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJfQogCkBAIC05MzksMTggJiM0Mzs5NjMsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZGlzYWJsZSBhbHJlYWR5IGluIHByb2dyZXNzXG4mIzM0Oyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGRldi0mZ3Q7ZXBzW2ldLnVyYl9xdWV1ZWQpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgd2FpdGluZyBmb3IgdXJiIGNvbXBsZXRpb25cbiYjMzQ7KTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtOTU4LDEzICYjNDM7OTgyLDI1IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIAlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSB0cnVlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsJaWYgKCFkZXYtJmd0O2dhZGdldCkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQogCXVzYl9lcF9kaXNhYmxlKGRldi0mZ3Q7ZXBzW2ldLmVwKTsKJiM0MzsJdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7Ci0JdXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtJmd0O2Vwc1tpXS5lcCwgZGV2LSZndDtlcHNbaV0ucmVxKTsKIAlrZnJlZShkZXYtJmd0O2Vwc1tpXS5lcC0mZ3Q7ZGVzYyk7CiAJZGV2LSZndDtlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDsKIAlkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CXJldHVybiByZXQ7CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwpAQCAtOTk0LDI0ICYjNDM7MTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS5kaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZGlzYWJsZSBpcyBpbiBwcm9ncmVzc1xuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChkZXYtJmd0O2Vwc1tpXS51cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXG4mIzM0Oyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZGV2LSZndDtlcHNbaV0uZXAtJmd0O2Rlc2MpKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIGNhbiYjMzk7dCBoYWx0L3dlZGdlIElTTyBlbmRwb2ludFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMDIwLDE3ICYjNDM7MTA1NiwxNyBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LAogCWlmIChzZXQgJmFtcDsmYW1wOyBoYWx0KSB7CiAJCXJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtJmd0O2Vwc1tpXS5lcCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxuJiMzNDssIHJldCk7CiAJfSBlbHNlIGlmICghc2V0ICZhbXA7JmFtcDsgaGFsdCkgewogCQlyZXQgPSB1c2JfZXBfY2xlYXJfaGFsdChkZXYtJmd0O2Vwc1tpXS5lcCk7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQkJZGV2X2VycihkZXYtJmd0O2RldiwKIAkJCQkmIzM0O2ZhaWwsIHVzYl9lcF9jbGVhcl9oYWx0IHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAl9IGVsc2UgaWYgKHNldCAmYW1wOyZhbXA7ICFoYWx0KSB7CiAJCXJldCA9IHVzYl9lcF9zZXRfd2VkZ2UoZGV2LSZndDtlcHNbaV0uZXApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LAomIzQzOwkJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfc2V0X3dlZGdlIHJldHVybmVkICVkXG4mIzM0OywgcmV0KTsKIAl9CiAKQEAgLTEwNzUsMjkgJiM0MzsxMTExLDI5IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChpby0mZ3Q7ZXAgJmd0Oz0gZGV2LSZndDtlcHNfbnVtKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIGludmFsaWQgZW5kcG9pbnRcbiYjMzQ7KTsKJiM0MzsJCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgaW52YWxpZCBlbmRwb2ludFxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWVwID0gJmFtcDtkZXYtJmd0O2Vwc1tpby0mZ3Q7ZXBdOwogCWlmIChlcC0mZ3Q7c3RhdGUgIT0gU1RBVEVfRVBfRU5BQkxFRCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGVwLSZndDtkaXNhYmxpbmcpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsCiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LAogCQkJCSYjMzQ7ZmFpbCwgZW5kcG9pbnQgaXMgYWxyZWFkeSBiZWluZyBkaXNhYmxlZFxuJiMzNDspOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKGVwLSZndDt1cmJfcXVldWVkKSB7Ci0JCWRldl9kYmcoJmFtcDtkZXYtJmd0O2dhZGdldC0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxuJiMzNDspOwomIzQzOwkJZGV2X2RiZyhkZXYtJmd0O2RldiwgJiMzNDtmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcbiYjMzQ7KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWlmIChpbiAhPSB1c2JfZW5kcG9pbnRfZGlyX2luKGVwLSZndDtlcC0mZ3Q7ZGVzYykpIHsKLQkJZGV2X2RiZygmYW1wO2Rldi0mZ3Q7Z2FkZ2V0LSZndDtkZXYsICYjMzQ7ZmFpbCwgd3JvbmcgZGlyZWN0aW9uXG4mIzM0Oyk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O2ZhaWwsIHdyb25nIGRpcmVjdGlvblxuJiMzNDspOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtMTExMSw5ICYjNDM7MTE0NywxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbywKIAllcC0mZ3Q7dXJiX3F1ZXVlZCA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCiYjNDM7CWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJdXBfcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDsKJiM0MzsJfQogCXJldCA9IHVzYl9lcF9xdWV1ZShlcC0mZ3Q7ZXAsIGVwLSZndDtyZXEsIEdGUF9LRVJORUwpOwomIzQzOwl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwKJiM0MzsJCWRldl9lcnIoZGV2LSZndDtkZXYsCiAJCQkJJiMzNDtmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcbiYjMzQ7LCByZXQpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwogCQlnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7CkBAIC0xMTIxLDggJiM0MzsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLAogCiAJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZhbXA7ZG9uZSk7CiAJaWYgKHJldCkgewotCQlkZXZfZGJnKCZhbXA7ZGV2LSZndDtnYWRnZXQtJmd0O2RldiwgJiMzNDt3YWl0IGludGVycnVwdGVkXG4mIzM0Oyk7Ci0JCXVzYl9lcF9kZXF1ZXVlKGVwLSZndDtlcCwgZXAtJmd0O3JlcSk7CiYjNDM7CQlkZXZfZGJnKGRldi0mZ3Q7ZGV2LCAmIzM0O3dhaXQgaW50ZXJydXB0ZWRcbiYjMzQ7KTsKJiM0MzsJCWRvd25fcmVhZCgmYW1wO2Rldi0mZ3Q7cndzZW0pOwomIzQzOwkJaWYgKGRldi0mZ3Q7Z2FkZ2V0KQomIzQzOwkJCXVzYl9lcF9kZXF1ZXVlKGVwLSZndDtlcCwgZXAtJmd0O3JlcSk7CiYjNDM7CQl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDtkb25lKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkZXYtJmd0O2xvY2ssIGZsYWdzKTsKIAkJaWYgKGVwLSZndDtzdGF0dXMgPT0gLUVDT05OUkVTRVQpCkBAIC0xMjE1LDEyICYjNDM7MTI2MiwxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF92YnVzX2RyYXcoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Rldi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlkb3duX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKIAlpZiAoIWRldi0mZ3Q7Z2FkZ2V0KSB7Ci0JCWRldl9kYmcoZGV2LSZndDtkZXYsICYjMzQ7ZmFpbCwgZ2FkZ2V0IGlzIG5vdCBib3VuZFxuJiMzNDspOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQl1cF9yZWFkKCZhbXA7ZGV2LSZndDtyd3NlbSk7CiYjNDM7CQlyZXR1cm4gcmV0OwogCX0KLQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtJmd0O2dhZGdldCwgMiAqIHZhbHVlKTsKJiM0MzsJcmV0ID0gdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LSZndDtnYWRnZXQsIDIgKiB2YWx1ZSk7CiYjNDM7CXVwX3JlYWQoJmFtcDtkZXYtJmd0O3J3c2VtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIAogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGV2LSZndDtsb2NrLCBmbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM0CgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDY1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBSYXcgR2FkZ2V0IERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNgLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29uY3VycmVuY3kgaXNzdWUsIHNwZWNpZmljYWxseSBhIHJhY2UgY29uZGl0aW9uIGFyb3VuZCB0aGUgYGRldi0mZ3Q7Z2FkZ2V0YCBwb2ludGVyIGFuZCBlbmRwb2ludCByZXF1ZXN0cy4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBwcm9ibGVtIGlzIHRoYXQgYGdhZGdldF91bmJpbmRgIGNvdWxkIGJlIHJ1bm5pbmcgY29uY3VycmVudGx5IHdpdGggb3RoZXIgb3BlcmF0aW9ucywgbGVhZGluZyB0byB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGFjY2Vzc2luZyBgZGV2LSZndDtnYWRnZXRgIG9yIGl0cyBhc3NvY2lhdGVkIHJlcXVlc3RzIChgZGV2LSZndDtyZXFgLCBgZGV2LSZndDtlcHNbaV0ucmVxYCkuCgpUaGUgc29sdXRpb24gaXMgY2xlYXI6IGludHJvZHVjZSBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIChgcndzZW1gKSB3aXRoaW4gdGhlIGBzdHJ1Y3QgcmF3X2RldmAuIFRoaXMgd2lsbCBhY3QgYXMgb3VyIGxvY2tpbmcgbWVjaGFuaXNtIHRvIHByb3RlY3QgdGhvc2UgY3JpdGljYWwgc2VjdGlvbnMuIFRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIHJlZmxlY3QgdGhpczoKCjEuICBBIG5ldyBgcndzZW1gIGlzIGFkZGVkIHRvIHRoZSBgcmF3X2RldmAgc3RydWN0LgoyLiAgYGRldl9uZXcoKWAgaW5pdGlhbGl6ZXMgdGhlIHNlbWFwaG9yZS4KMy4gIGBkZXZfZnJlZSgpYCBub3cgZGVmZXJzIHJlcXVlc3QgY2xlYW51cCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSBtb3ZpbmcgaXQgdG8gYGdhZGdldF91bmJpbmRgIG5vdy4KNC4gIGBnYWRnZXRfYmluZCgpYCBzZWVzIGEgY2hhbmdlIHRvIGhhbmRsZSBgcmF3X3F1ZXVlX2V2ZW50YCBmYWlsaW5nIGJ5IGNsZWFuaW5nIHVwIHRoZSBgZGV2LSZndDtyZXFgLgo1LiAgYGdhZGdldF91bmJpbmQoKWAgaXMgd2hlcmUgdGhlIGNvcmUgbG9ja2luZyBoYXBwZW5zLiBJdCB0YWtlcyBhIHdyaXRlIGxvY2sgKGBkb3duX3dyaXRlYCkgdG8gc2FmZWx5IHNldCBgZGV2LSZndDtnYWRnZXRgIHRvIGBOVUxMYCwgZGlzYWJsZSB0aGUgZW5kcG9pbnRzLCBmcmVlIHRoZSByZXF1ZXN0cywgYW5kIHNldCBgZGV2LSZndDtyZXEgPSBOVUxMYC4gVGhpcyBpcyB0aGUgY3JpdGljYWwgc2VjdGlvbiB3ZSBuZWVkIHRvIHByb3RlY3QuCjYuICBTZXZlcmFsIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGByYXdfcmVsZWFzZSgpYCwgYHJhd19pb2N0bF9ldmVudF9mZXRjaGAsIGByYXdfcHJvY2Vzc19lcDBfaW9gLCBgcmF3X2lvY3RsX2VwX2Rpc2FibGVgLCBgcmF3X3Byb2Nlc3NfZXBfaW9gLCBhbmQgYHJhd19pb2N0bF92YnVzX2RyYXdgLCBhbGwgYWNxdWlyZSBhIHJlYWQgbG9jayAoYGRvd25fcmVhZGApIGJlZm9yZSBhY2Nlc3NpbmcgYGRldi0mZ3Q7Z2FkZ2V0YCBvciBxdWV1aW5nL2RlcXVldWluZyByZXF1ZXN0cy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhleSBkb24mIzM5O3Qgc3RlcCBvbiBgZ2FkZ2V0X3VuYmluZGAmIzM5O3MgdG9lcy4KClRoZSBvdmVyYWxsIGdvYWwgaXMgdG8gZWxpbWluYXRlIHBvdGVudGlhbCBVQUYgYW5kIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYnkgZW5zdXJpbmcgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2VzcyB0byBgZGV2LSZndDtnYWRnZXRgIGFuZCBpdHMgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMuIEkgY2FuIHNlZSB0aGUgbG9ja2luZyBzY2hlbWUgaXMgcm9idXN0IGhlcmUuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55ICpuZXcqIHByb2JsZW1zLCBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBBIHF1aWNrIHNjYW4gb2YgdGhlIHBhdGNoIHJldmVhbHMgbm90aGluZyB0aGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgY29uY2Vybi4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBhcmUgYXBwYXJlbnQuIEdpdmVuIHRoYXQgdGhlIGZpeCBpcyBmb2N1c2VkIHNvbGVseSBvbiBjb25jdXJyZW5jeSBhbmQgbG9ja2luZywgS0FTQU4gYW5kIExPQ0tERVAgYXJlIHRoZSBhcHByb3ByaWF0ZSB0b29scyB0byBsb29rIGZvciBVQUYgb3IgZGF0YSByYWNlcy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIGEgY2xlYW4gZml4IGZvciBhIGNvbmN1cnJlbmN5IGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIChgcndzZW1gKSB0byBwcm90ZWN0IGBkZXYtXHUwMDNlZ2FkZ2V0YCBhbmQgZW5kcG9pbnQgcmVxdWVzdHMgZnJvbSBjb25jdXJyZW50IGFjY2VzcyBkdXJpbmcgYGdhZGdldF91bmJpbmQoKWAuIFRoaXMgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGVuZHBvaW50cyBhcmUgYWNjZXNzZWQgb3IgcmVxdWVzdHMgYXJlIHF1ZXVlZC9kZXF1ZXVlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHVuYmluZGluZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChsaWtlIExPQ0tERVApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBhbGxvY2F0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGByd3NlbWApIHRvIHByb3RlY3QgYGRldi1cdTAwM2VnYWRnZXRgIGFuZCBlbmRwb2ludCByZXF1ZXN0cyBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBgZ2FkZ2V0X3VuYmluZCgpYC4gVGhpcyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gZW5kcG9pbnRzIGFyZSBhY2Nlc3NlZCBvciByZXF1ZXN0cyBhcmUgcXVldWVkL2RlcXVldWVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgdW5iaW5kaW5nLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKGxpa2UgTE9DS0RFUCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGFsbG9jYXRpb25zIG9yIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTQ6NDQuMjM1NDEzODA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMTQyNjYxODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9SQVdfR0FER0VUXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCIsXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfaW9jdGxcIixcbiAgICBcInJhd19yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfYmluZFwiLFxuICAgIFwiZ2FkZ2V0X3VuYmluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlYWQtd3JpdGUgc2VtYXBob3JlIChgcndzZW1gKSB0byBwcm90ZWN0IGBkZXYtXFx1MDAzZWdhZGdldGAgYW5kIGVuZHBvaW50IHJlcXVlc3RzIGZyb20gY29uY3VycmVudCBhY2Nlc3MgZHVyaW5nIGBnYWRnZXRfdW5iaW5kKClgLiBUaGlzIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIFVzZS1BZnRlci1GcmVlIChVQUYpIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgd2hlbiBlbmRwb2ludHMgYXJlIGFjY2Vzc2VkIG9yIHJlcXVlc3RzIGFyZSBxdWV1ZWQvZGVxdWV1ZWQgd2hpbGUgdGhlIGdhZGdldCBpcyB1bmJpbmRpbmcuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBjb25jdXJyZW5jeSBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyAobGlrZSBMT0NLREVQKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgYWxsb2NhdGlvbnMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgaW4gdGhlIFVTQiByYXcgZ2FkZ2V0IGRyaXZlciAoZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMpIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJ3X3NlbWFwaG9yZSAocndzZW0pIHRvIHByb3RlY3QgdGhlIGRldi1cXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTQ6NDQuMjM1NDE5MjA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMyMzI3NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmJkZGU2NjNjNGNhOTllYWIyN2RjNjdlZGUxZTMyNWRmZDg5Njk4ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyA4IDIxOjE0OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcXG5pbmRleCA0ZmViZjhkYWM3Y2E1Li4xMzlhMGZhMGNlZWEzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcXG5AQCAtMTYwLDYgKzE2MCw3IEBAIGVudW0gZGV2X3N0YXRlIHtcXG4gc3RydWN0IHJhd19kZXYge1xcbiBcXHRzdHJ1Y3Qga3JlZlxcdFxcdFxcdGNvdW50O1xcbiBcXHRzcGlubG9ja190XFx0XFx0XFx0bG9jaztcXG4rXFx0c3RydWN0IHJ3X3NlbWFwaG9yZVxcdFxcdHJ3c2VtO1xcbiBcXG4gXFx0Y29uc3QgY2hhclxcdFxcdFxcdCp1ZGNfbmFtZTtcXG4gXFx0c3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyXFx0ZHJpdmVyO1xcbkBAIC0xOTYsNiArMTk3LDcgQEAgc3RhdGljIHN0cnVjdCByYXdfZGV2ICpkZXZfbmV3KHZvaWQpXFxuIFxcdC8qIE1hdGNoZXMga3JlZl9wdXQoKSBpbiByYXdfcmVsZWFzZSgpLiAqL1xcbiBcXHRrcmVmX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlY291bnQpO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0aW5pdF9yd3NlbShcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuIFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZGV2LVxcdTAwM2VlcDBfZG9uZSk7XFxuIFxcdHJhd19ldmVudF9xdWV1ZV9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXF1ZXVlKTtcXG4gXFx0ZGV2LVxcdTAwM2Vkcml2ZXJfaWRfbnVtYmVyID0gLTE7XFxuQEAgLTIxMiwyMCArMjE0LDcgQEAgc3RhdGljIHZvaWQgZGV2X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdGtmcmVlKGRldi1cXHUwMDNlZHJpdmVyLmRyaXZlci5uYW1lKTtcXG4gXFx0aWYgKGRldi1cXHUwMDNlZHJpdmVyX2lkX251bWJlciBcXHUwMDNlPSAwKVxcbiBcXHRcXHRpZGFfZnJlZShcXHUwMDI2ZHJpdmVyX2lkX251bWJlcnMsIGRldi1cXHUwMDNlZHJpdmVyX2lkX251bWJlcik7XFxuLVxcdGlmIChkZXYtXFx1MDAzZXJlcSkge1xcbi1cXHRcXHRpZiAoZGV2LVxcdTAwM2VlcDBfdXJiX3F1ZXVlZClcXG4tXFx0XFx0XFx0dXNiX2VwX2RlcXVldWUoZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWVwMCwgZGV2LVxcdTAwM2VyZXEpO1xcbi1cXHRcXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4tXFx0fVxcbiBcXHRyYXdfZXZlbnRfcXVldWVfZGVzdHJveShcXHUwMDI2ZGV2LVxcdTAwM2VxdWV1ZSk7XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZWVwc19udW07IGkrKykge1xcbi1cXHRcXHRpZiAoZGV2LVxcdTAwM2VlcHNbaV0uc3RhdGUgPT0gU1RBVEVfRVBfRElTQUJMRUQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR1c2JfZXBfZGlzYWJsZShkZXYtXFx1MDAzZWVwc1tpXS5lcCk7XFxuLVxcdFxcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVxcdTAwM2VlcHNbaV0uZXAsIGRldi1cXHUwMDNlZXBzW2ldLnJlcSk7XFxuLVxcdFxcdGtmcmVlKGRldi1cXHUwMDNlZXBzW2ldLmVwLVxcdTAwM2VkZXNjKTtcXG4tXFx0XFx0ZGV2LVxcdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcXG4tXFx0fVxcbiBcXHRrZnJlZShkZXYpO1xcbiB9XFxuIFxcbkBAIC0zMTYsNiArMzA1LDExIEBAIHN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4gXFx0cmV0ID0gcmF3X3F1ZXVlX2V2ZW50KGRldiwgVVNCX1JBV19FVkVOVF9DT05ORUNULCAwLCBOVUxMKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2Z2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gcXVldWUgY29ubmVjdCBldmVudFxcXFxuXFxcIik7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0ZGV2LVxcdTAwM2VnYWRnZXQgPSBOVUxMO1xcbitcXHRcXHRkZXYtXFx1MDAzZXJlcSA9IE5VTEw7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC1cXHUwMDNlZXAwLCByZXEpO1xcbiBcXHRcXHRzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbkBAIC0zMjgsOCArMzIyLDMxIEBAIHN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4gc3RhdGljIHZvaWQgZ2FkZ2V0X3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxcbiB7XFxuIFxcdHN0cnVjdCByYXdfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IGk7XFxuIFxcbiBcXHRzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTtcXG4rXFxuK1xcdGRvd25fd3JpdGUoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGRldi1cXHUwMDNlc3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEO1xcbitcXHRkZXYtXFx1MDAzZWdhZGdldCA9IE5VTEw7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlZXBzX251bTsgaSsrKSB7XFxuK1xcdFxcdGlmIChkZXYtXFx1MDAzZWVwc1tpXS5zdGF0ZSAhPSBTVEFURV9FUF9ESVNBQkxFRCkge1xcbitcXHRcXHRcXHR1c2JfZXBfZGlzYWJsZShkZXYtXFx1MDAzZWVwc1tpXS5lcCk7XFxuK1xcdFxcdFxcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVxcdTAwM2VlcHNbaV0uZXAsIGRldi1cXHUwMDNlZXBzW2ldLnJlcSk7XFxuK1xcdFxcdFxcdGtmcmVlKGRldi1cXHUwMDNlZXBzW2ldLmVwLVxcdTAwM2VkZXNjKTtcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmIChkZXYtXFx1MDAzZXJlcSkge1xcbitcXHRcXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC1cXHUwMDNlZXAwLCBkZXYtXFx1MDAzZXJlcSk7XFxuK1xcdFxcdGRldi1cXHUwMDNlcmVxID0gTlVMTDtcXG4rXFx0fVxcbitcXHR1cF93cml0ZShcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuK1xcbiBcXHQvKiBNYXRjaGVzIGtyZWZfZ2V0KCkgaW4gZ2FkZ2V0X2JpbmQoKS4gKi9cXG4gXFx0a3JlZl9wdXQoXFx1MDAyNmRldi1cXHUwMDNlY291bnQsIGRldl9mcmVlKTtcXG4gfVxcbkBAIC00NTAsMTAgKzQ2Nyw2IEBAIHN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRkZXYtXFx1MDAzZXN0YXRlID0gU1RBVEVfREVWX0NMT1NFRDtcXG4tXFx0aWYgKCFkZXYtXFx1MDAzZWdhZGdldCkge1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0XFx0Z290byBvdXRfcHV0O1xcbi1cXHR9XFxuIFxcdGlmIChkZXYtXFx1MDAzZWdhZGdldF9yZWdpc3RlcmVkKVxcbiBcXHRcXHR1bnJlZ2lzdGVyID0gdHJ1ZTtcXG4gXFx0ZGV2LVxcdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZCA9IGZhbHNlO1xcbkBAIC02MzcsMTEgKzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbiBcXG4gXFx0ZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goXFx1MDAyNmRldi1cXHUwMDNlcXVldWUpO1xcbiBcXHRpZiAoUFRSX0VSUihldmVudCkgPT0gLUVJTlRSKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJldmVudCBmZXRjaGluZyBpbnRlcnJ1cHRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJldmVudCBmZXRjaGluZyBpbnRlcnJ1cHRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIFxcdH1cXG4gXFx0aWYgKElTX0VSUihldmVudCkpIHtcXG4tXFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBmZXRjaCBldmVudFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXFxcblxcXCIpO1xcbiBcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdGRldi1cXHUwMDNlc3RhdGUgPSBTVEFURV9ERVZfRkFJTEVEO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5AQCAtNjk4LDEzICs3MTEsMTMgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGRldi1cXHUwMDNlZXAwX3VyYl9xdWV1ZWQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoKGluIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZWVwMF9pbl9wZW5kaW5nKSB8fFxcbiBcXHRcXHRcXHQoIWluIFxcdTAwMjZcXHUwMDI2ICFkZXYtXFx1MDAzZWVwMF9vdXRfcGVuZGluZykpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIHdyb25nIGRpcmVjdGlvblxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbkBAIC03MjUsOSArNzM4LDE3IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcXG4gXFx0ZGV2LVxcdTAwM2VlcDBfdXJiX3F1ZXVlZCA9IHRydWU7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4rXFx0ZG93bl9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4rXFx0aWYgKCFkZXYtXFx1MDAzZWdhZGdldCkge1xcbitcXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXHRcXHR1cF9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XFxuK1xcdH1cXG4gXFx0cmV0ID0gdXNiX2VwX3F1ZXVlKGRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxLCBHRlBfS0VSTkVMKTtcXG4rXFx0dXBfcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuIFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XFxuQEAgLTczNSw4ICs3NTYsMTEgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbiBcXG4gXFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkZXYtXFx1MDAzZWVwMF9kb25lKTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LCBcXFwid2FpdCBpbnRlcnJ1cHRlZFxcXFxuXFxcIik7XFxuLVxcdFxcdHVzYl9lcF9kZXF1ZXVlKGRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldiwgXFxcIndhaXQgaW50ZXJydXB0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRkb3duX3JlYWQoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2VnYWRnZXQpXFxuK1xcdFxcdFxcdHVzYl9lcF9kZXF1ZXVlKGRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuIFxcdFxcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNmRldi1cXHUwMDNlZXAwX2RvbmUpO1xcbiBcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdGlmIChkZXYtXFx1MDAzZWVwMF9zdGF0dXMgPT0gLUVDT05OUkVTRVQpXFxuQEAgLTgxMiwxOSArODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGRldi1cXHUwMDNlZXAwX3VyYl9xdWV1ZWQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoIWRldi1cXHUwMDNlZXAwX2luX3BlbmRpbmcgXFx1MDAyNlxcdTAwMjYgIWRldi1cXHUwMDNlZXAwX291dF9wZW5kaW5nKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgbm8gcmVxdWVzdCBwZW5kaW5nXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVCVVNZO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuIFxcdHJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZXAwKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsXFxuK1xcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcXCJmYWlsLCB1c2JfZXBfc2V0X2hhbHQgcmV0dXJuZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcbiBcXHRpZiAoZGV2LVxcdTAwM2VlcDBfaW5fcGVuZGluZylcXG5AQCAtODg0LDEzICs5MDgsMTMgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuIFxcdFxcdGVwLVxcdTAwM2VlcC1cXHUwMDNlZGVzYyA9IGRlc2M7XFxuIFxcdFxcdHJldCA9IHVzYl9lcF9lbmFibGUoZXAtXFx1MDAzZWVwKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIHVzYl9lcF9lbmFibGUgcmV0dXJuZWQgJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZXAtXFx1MDAzZXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLVxcdTAwM2VlcCwgR0ZQX0FUT01JQyk7XFxuIFxcdFxcdGlmICghZXAtXFx1MDAzZXJlcSkge1xcbi1cXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHRcXFwiZmFpbCwgdXNiX2VwX2FsbG9jX3JlcXVlc3QgZmFpbGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0dXNiX2VwX2Rpc2FibGUoZXAtXFx1MDAzZWVwKTtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG5AQCAtOTAzLDEwICs5MjcsMTAgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuIFxcdH1cXG4gXFxuIFxcdGlmICghZXBfcHJvcHNfbWF0Y2hlZCkge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgYmFkIGVuZHBvaW50IGRlc2NyaXB0b3JcXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgYmFkIGVuZHBvaW50IGRlc2NyaXB0b3JcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgbm8gZW5kcG9pbnRzIGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCBubyBlbmRwb2ludHMgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVCVVNZO1xcbiBcXHR9XFxuIFxcbkBAIC05MzksMTggKzk2MywxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoZGV2LVxcdTAwM2VlcHNbaV0uc3RhdGUgPT0gU1RBVEVfRVBfRElTQUJMRUQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldiwgXFxcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcdGlmIChkZXYtXFx1MDAzZWVwc1tpXS5kaXNhYmxpbmcpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIGRpc2FibGUgYWxyZWFkeSBpbiBwcm9ncmVzc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoZGV2LVxcdTAwM2VlcHNbaV0udXJiX3F1ZXVlZCkge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LFxcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHRcXFwiZmFpbCwgd2FpdGluZyBmb3IgdXJiIGNvbXBsZXRpb25cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuQEAgLTk1OCwxMyArOTgyLDI1IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG4gXFx0ZGV2LVxcdTAwM2VlcHNbaV0uZGlzYWJsaW5nID0gdHJ1ZTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbitcXHRkb3duX3JlYWQoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRpZiAoIWRldi1cXHUwMDNlZ2FkZ2V0KSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdHVwX3JlYWQoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdGRldi1cXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IGZhbHNlO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4gXFx0dXNiX2VwX2Rpc2FibGUoZGV2LVxcdTAwM2VlcHNbaV0uZXApO1xcbitcXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cXHUwMDNlZXBzW2ldLmVwLCBkZXYtXFx1MDAzZWVwc1tpXS5yZXEpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRldi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cXHUwMDNlZXBzW2ldLmVwLCBkZXYtXFx1MDAzZWVwc1tpXS5yZXEpO1xcbiBcXHRrZnJlZShkZXYtXFx1MDAzZWVwc1tpXS5lcC1cXHUwMDNlZGVzYyk7XFxuIFxcdGRldi1cXHUwMDNlZXBzW2ldLnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7XFxuIFxcdGRldi1cXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IGZhbHNlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHVwX3JlYWQoXFx1MDAyNmRldi1cXHUwMDNlcndzZW0pO1xcbitcXHRyZXR1cm4gcmV0O1xcbiBcXG4gb3V0X3VubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuQEAgLTk5NCwyNCArMTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGRldi1cXHUwMDNlZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoZGV2LVxcdTAwM2VlcHNbaV0uZGlzYWJsaW5nKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsXFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcXCJmYWlsLCBkaXNhYmxlIGlzIGluIHByb2dyZXNzXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcdGlmIChkZXYtXFx1MDAzZWVwc1tpXS51cmJfcXVldWVkKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsXFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcXCJmYWlsLCB3YWl0aW5nIGZvciB1cmIgY29tcGxldGlvblxcXFxuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhkZXYtXFx1MDAzZWVwc1tpXS5lcC1cXHUwMDNlZGVzYykpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIGNhbid0IGhhbHQvd2VkZ2UgSVNPIGVuZHBvaW50XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbkBAIC0xMDIwLDE3ICsxMDU2LDE3IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXFxuIFxcdGlmIChzZXQgXFx1MDAyNlxcdTAwMjYgaGFsdCkge1xcbiBcXHRcXHRyZXQgPSB1c2JfZXBfc2V0X2hhbHQoZGV2LVxcdTAwM2VlcHNbaV0uZXApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gXFx0fSBlbHNlIGlmICghc2V0IFxcdTAwMjZcXHUwMDI2IGhhbHQpIHtcXG4gXFx0XFx0cmV0ID0gdXNiX2VwX2NsZWFyX2hhbHQoZGV2LVxcdTAwM2VlcHNbaV0uZXApO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIHVzYl9lcF9jbGVhcl9oYWx0IHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHR9IGVsc2UgaWYgKHNldCBcXHUwMDI2XFx1MDAyNiAhaGFsdCkge1xcbiBcXHRcXHRyZXQgPSB1c2JfZXBfc2V0X3dlZGdlKGRldi1cXHUwMDNlZXBzW2ldLmVwKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdGRldl9lcnIoZGV2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcXCJmYWlsLCB1c2JfZXBfc2V0X3dlZGdlIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHR9XFxuIFxcbkBAIC0xMDc1LDI5ICsxMTExLDI5IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGlvLVxcdTAwM2VlcCBcXHUwMDNlPSBkZXYtXFx1MDAzZWVwc19udW0pIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIGludmFsaWQgZW5kcG9pbnRcXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgaW52YWxpZCBlbmRwb2ludFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRlcCA9IFxcdTAwMjZkZXYtXFx1MDAzZWVwc1tpby1cXHUwMDNlZXBdO1xcbiBcXHRpZiAoZXAtXFx1MDAzZXN0YXRlICE9IFNUQVRFX0VQX0VOQUJMRUQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldiwgXFxcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVCVVNZO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFx0aWYgKGVwLVxcdTAwM2VkaXNhYmxpbmcpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldixcXG4rXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0XFx0XFxcImZhaWwsIGVuZHBvaW50IGlzIGFscmVhZHkgYmVpbmcgZGlzYWJsZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoZXAtXFx1MDAzZXVyYl9xdWV1ZWQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VnYWRnZXQtXFx1MDAzZWRldiwgXFxcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXHRpZiAoaW4gIT0gdXNiX2VuZHBvaW50X2Rpcl9pbihlcC1cXHUwMDNlZXAtXFx1MDAzZWRlc2MpKSB7XFxuLVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlZ2FkZ2V0LVxcdTAwM2VkZXYsIFxcXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZGJnKGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuQEAgLTExMTEsOSArMTE0NywxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcXG4gXFx0ZXAtXFx1MDAzZXVyYl9xdWV1ZWQgPSB0cnVlO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuK1xcdGRvd25fcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuK1xcdGlmICghZGV2LVxcdTAwM2VnYWRnZXQpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xcbitcXHR9XFxuIFxcdHJldCA9IHVzYl9lcF9xdWV1ZShlcC1cXHUwMDNlZXAsIGVwLVxcdTAwM2VyZXEsIEdGUF9LRVJORUwpO1xcbitcXHR1cF9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LFxcbitcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHRcXFwiZmFpbCwgdXNiX2VwX3F1ZXVlIHJldHVybmVkICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdGdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDtcXG5AQCAtMTEyMSw4ICsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbiBcXG4gXFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkb25lKTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZGJnKFxcdTAwMjZkZXYtXFx1MDAzZWdhZGdldC1cXHUwMDNlZGV2LCBcXFwid2FpdCBpbnRlcnJ1cHRlZFxcXFxuXFxcIik7XFxuLVxcdFxcdHVzYl9lcF9kZXF1ZXVlKGVwLVxcdTAwM2VlcCwgZXAtXFx1MDAzZXJlcSk7XFxuK1xcdFxcdGRldl9kYmcoZGV2LVxcdTAwM2VkZXYsIFxcXCJ3YWl0IGludGVycnVwdGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4rXFx0XFx0aWYgKGRldi1cXHUwMDNlZ2FkZ2V0KVxcbitcXHRcXHRcXHR1c2JfZXBfZGVxdWV1ZShlcC1cXHUwMDNlZXAsIGVwLVxcdTAwM2VyZXEpO1xcbitcXHRcXHR1cF9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4gXFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2ZG9uZSk7XFxuIFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0aWYgKGVwLVxcdTAwM2VzdGF0dXMgPT0gLUVDT05OUkVTRVQpXFxuQEAgLTEyMTUsMTIgKzEyNjIsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGRvd25fcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuIFxcdGlmICghZGV2LVxcdTAwM2VnYWRnZXQpIHtcXG4tXFx0XFx0ZGV2X2RiZyhkZXYtXFx1MDAzZWRldiwgXFxcImZhaWwsIGdhZGdldCBpcyBub3QgYm91bmRcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLVxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2ZGV2LVxcdTAwM2Vyd3NlbSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4tXFx0dXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LVxcdTAwM2VnYWRnZXQsIDIgKiB2YWx1ZSk7XFxuK1xcdHJldCA9IHVzYl9nYWRnZXRfdmJ1c19kcmF3KGRldi1cXHUwMDNlZ2FkZ2V0LCAyICogdmFsdWUpO1xcbitcXHR1cF9yZWFkKFxcdTAwMjZkZXYtXFx1MDAzZXJ3c2VtKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTQ6NDUuNDY4NzY5MDQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTgwNjQ5NTg2ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9SQVdfR0FER0VUXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCIsXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfaW9jdGxcIixcbiAgICBcInJhd19yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfYmluZFwiLFxuICAgIFwiZ2FkZ2V0X3VuYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgaW4gdGhlIFVTQiByYXcgZ2FkZ2V0IGRyaXZlciAoZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMpIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJ3X3NlbWFwaG9yZSAocndzZW0pIHRvIHByb3RlY3QgdGhlIGRldi1cXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmJkZGU2NjNjNGNhOTllYWIyN2RjNjdlZGUxZTMyNWRmZDg5Njk4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMjE6MTQ6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXG5pbmRleCA0ZmViZjhkYWM3Y2E1Li4xMzlhMGZhMGNlZWEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXG5AQCAtMTYwLDYgKzE2MCw3IEBAIGVudW0gZGV2X3N0YXRlIHtcbiBzdHJ1Y3QgcmF3X2RldiB7XG4gXHRzdHJ1Y3Qga3JlZlx0XHRcdGNvdW50O1xuIFx0c3BpbmxvY2tfdFx0XHRcdGxvY2s7XG4rXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRcdHJ3c2VtO1xuIFxuIFx0Y29uc3QgY2hhclx0XHRcdCp1ZGNfbmFtZTtcbiBcdHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlclx0ZHJpdmVyO1xuQEAgLTE5Niw2ICsxOTcsNyBAQCBzdGF0aWMgc3RydWN0IHJhd19kZXYgKmRldl9uZXcodm9pZClcbiBcdC8qIE1hdGNoZXMga3JlZl9wdXQoKSBpbiByYXdfcmVsZWFzZSgpLiAqL1xuIFx0a3JlZl9pbml0KFx1MDAyNmRldi1cdTAwM2Vjb3VudCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4rXHRpbml0X3J3c2VtKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2ZGV2LVx1MDAzZWVwMF9kb25lKTtcbiBcdHJhd19ldmVudF9xdWV1ZV9pbml0KFx1MDAyNmRldi1cdTAwM2VxdWV1ZSk7XG4gXHRkZXYtXHUwMDNlZHJpdmVyX2lkX251bWJlciA9IC0xO1xuQEAgLTIxMiwyMCArMjE0LDcgQEAgc3RhdGljIHZvaWQgZGV2X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpXG4gXHRrZnJlZShkZXYtXHUwMDNlZHJpdmVyLmRyaXZlci5uYW1lKTtcbiBcdGlmIChkZXYtXHUwMDNlZHJpdmVyX2lkX251bWJlciBcdTAwM2U9IDApXG4gXHRcdGlkYV9mcmVlKFx1MDAyNmRyaXZlcl9pZF9udW1iZXJzLCBkZXYtXHUwMDNlZHJpdmVyX2lkX251bWJlcik7XG4tXHRpZiAoZGV2LVx1MDAzZXJlcSkge1xuLVx0XHRpZiAoZGV2LVx1MDAzZWVwMF91cmJfcXVldWVkKVxuLVx0XHRcdHVzYl9lcF9kZXF1ZXVlKGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbi1cdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWVwMCwgZGV2LVx1MDAzZXJlcSk7XG4tXHR9XG4gXHRyYXdfZXZlbnRfcXVldWVfZGVzdHJveShcdTAwMjZkZXYtXHUwMDNlcXVldWUpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZWVwc19udW07IGkrKykge1xuLVx0XHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0dXNiX2VwX2Rpc2FibGUoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4tXHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuLVx0XHRrZnJlZShkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpO1xuLVx0XHRkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7XG4tXHR9XG4gXHRrZnJlZShkZXYpO1xuIH1cbiBcbkBAIC0zMTYsNiArMzA1LDExIEBAIHN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcbiBcdHJldCA9IHJhd19xdWV1ZV9ldmVudChkZXYsIFVTQl9SQVdfRVZFTlRfQ09OTkVDVCwgMCwgTlVMTCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2Z2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gcXVldWUgY29ubmVjdCBldmVudFxcblwiKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0ZGV2LVx1MDAzZWdhZGdldCA9IE5VTEw7XG4rXHRcdGRldi1cdTAwM2VyZXEgPSBOVUxMO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LVx1MDAzZWVwMCwgcmVxKTtcbiBcdFx0c2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG5AQCAtMzI4LDggKzMyMiwzMSBAQCBzdGF0aWMgaW50IGdhZGdldF9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4gc3RhdGljIHZvaWQgZ2FkZ2V0X3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxuIHtcbiBcdHN0cnVjdCByYXdfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRpbnQgaTtcbiBcbiBcdHNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpO1xuK1xuK1x0ZG93bl93cml0ZShcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7XG4rXHRkZXYtXHUwMDNlZ2FkZ2V0ID0gTlVMTDtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VlcHNfbnVtOyBpKyspIHtcbitcdFx0aWYgKGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgIT0gU1RBVEVfRVBfRElTQUJMRUQpIHtcbitcdFx0XHR1c2JfZXBfZGlzYWJsZShkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbitcdFx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VlcHNbaV0uZXAsIGRldi1cdTAwM2VlcHNbaV0ucmVxKTtcbitcdFx0XHRrZnJlZShkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpO1xuK1x0XHRcdGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGRldi1cdTAwM2VyZXEpIHtcbitcdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbitcdFx0ZGV2LVx1MDAzZXJlcSA9IE5VTEw7XG4rXHR9XG4rXHR1cF93cml0ZShcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1xuIFx0LyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIGdhZGdldF9iaW5kKCkuICovXG4gXHRrcmVmX3B1dChcdTAwMjZkZXYtXHUwMDNlY291bnQsIGRldl9mcmVlKTtcbiB9XG5AQCAtNDUwLDEwICs0NjcsNiBAQCBzdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRkZXYtXHUwMDNlc3RhdGUgPSBTVEFURV9ERVZfQ0xPU0VEO1xuLVx0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4tXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0Z290byBvdXRfcHV0O1xuLVx0fVxuIFx0aWYgKGRldi1cdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZClcbiBcdFx0dW5yZWdpc3RlciA9IHRydWU7XG4gXHRkZXYtXHUwMDNlZ2FkZ2V0X3JlZ2lzdGVyZWQgPSBmYWxzZTtcbkBAIC02MzcsMTEgKzY1MCwxMSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9ldmVudF9mZXRjaChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFxuIFx0ZXZlbnQgPSByYXdfZXZlbnRfcXVldWVfZmV0Y2goXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlKTtcbiBcdGlmIChQVFJfRVJSKGV2ZW50KSA9PSAtRUlOVFIpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJldmVudCBmZXRjaGluZyBpbnRlcnJ1cHRlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImV2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0fVxuIFx0aWYgKElTX0VSUihldmVudCkpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXG5cIik7XG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gZmV0Y2ggZXZlbnRcXG5cIik7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9GQUlMRUQ7XG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbkBAIC02OTgsMTMgKzcxMSwxMyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXAwX3VyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKChpbiBcdTAwMjZcdTAwMjYgIWRldi1cdTAwM2VlcDBfaW5fcGVuZGluZykgfHxcbiBcdFx0XHQoIWluIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZWVwMF9vdXRfcGVuZGluZykpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuQEAgLTcyNSw5ICs3MzgsMTcgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFx0ZGV2LVx1MDAzZWVwMF91cmJfcXVldWVkID0gdHJ1ZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbitcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuK1x0fVxuIFx0cmV0ID0gdXNiX2VwX3F1ZXVlKGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxLCBHRlBfS0VSTkVMKTtcbitcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuQEAgLTczNSw4ICs3NTYsMTEgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFxuIFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRldi1cdTAwM2VlcDBfZG9uZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwid2FpdCBpbnRlcnJ1cHRlZFxcblwiKTtcbi1cdFx0dXNiX2VwX2RlcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwid2FpdCBpbnRlcnJ1cHRlZFxcblwiKTtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRcdGlmIChkZXYtXHUwMDNlZ2FkZ2V0KVxuK1x0XHRcdHVzYl9lcF9kZXF1ZXVlKGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmRldi1cdTAwM2VlcDBfZG9uZSk7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGlmIChkZXYtXHUwMDNlZXAwX3N0YXR1cyA9PSAtRUNPTk5SRVNFVClcbkBAIC04MTIsMTkgKzgzNiwxOSBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcDBfc3RhbGwoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoIWRldi1cdTAwM2VlcDBfaW5fcGVuZGluZyBcdTAwMjZcdTAwMjYgIWRldi1cdTAwM2VlcDBfb3V0X3BlbmRpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBubyByZXF1ZXN0IHBlbmRpbmdcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0cmV0ID0gdXNiX2VwX3NldF9oYWx0KGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgdXNiX2VwX3NldF9oYWx0IHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4gXG4gXHRpZiAoZGV2LVx1MDAzZWVwMF9pbl9wZW5kaW5nKVxuQEAgLTg4NCwxMyArOTA4LDEzIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2VuYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0XHRlcC1cdTAwM2VlcC1cdTAwM2VkZXNjID0gZGVzYztcbiBcdFx0cmV0ID0gdXNiX2VwX2VuYWJsZShlcC1cdTAwM2VlcCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgdXNiX2VwX2VuYWJsZSByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0XHRcdGdvdG8gb3V0X2ZyZWU7XG4gXHRcdH1cbiBcdFx0ZXAtXHUwMDNlcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAtXHUwMDNlZXAsIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIWVwLVx1MDAzZXJlcSkge1xuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfYWxsb2NfcmVxdWVzdCBmYWlsZWRcXG5cIik7XG4gXHRcdFx0dXNiX2VwX2Rpc2FibGUoZXAtXHUwMDNlZXApO1xuIFx0XHRcdHJldCA9IC1FTk9NRU07XG5AQCAtOTAzLDEwICs5MjcsMTAgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHR9XG4gXG4gXHRpZiAoIWVwX3Byb3BzX21hdGNoZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBiYWQgZW5kcG9pbnQgZGVzY3JpcHRvclxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGJhZCBlbmRwb2ludCBkZXNjcmlwdG9yXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBubyBlbmRwb2ludHMgYXZhaWxhYmxlXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgbm8gZW5kcG9pbnRzIGF2YWlsYWJsZVxcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0fVxuIFxuQEAgLTkzOSwxOCArOTYzLDE4IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgPT0gU1RBVEVfRVBfRElTQUJMRUQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCBkaXNhYmxlIGFscmVhZHkgaW4gcHJvZ3Jlc3NcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnVyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB3YWl0aW5nIGZvciB1cmIgY29tcGxldGlvblxcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuQEAgLTk1OCwxMyArOTgyLDI1IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX2Rpc2FibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nID0gdHJ1ZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbitcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0ZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcgPSBmYWxzZTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuIFx0dXNiX2VwX2Rpc2FibGUoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4rXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VlcHNbaV0uZXAsIGRldi1cdTAwM2VlcHNbaV0ucmVxKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VlcHNbaV0uZXAsIGRldi1cdTAwM2VlcHNbaV0ucmVxKTtcbiBcdGtmcmVlKGRldi1cdTAwM2VlcHNbaV0uZXAtXHUwMDNlZGVzYyk7XG4gXHRkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7XG4gXHRkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IGZhbHNlO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0cmV0dXJuIHJldDtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTk5NCwyNCArMTAzMCwyNCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZykge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIGRpc2FibGUgaXMgaW4gcHJvZ3Jlc3NcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnVyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB3YWl0aW5nIGZvciB1cmIgY29tcGxldGlvblxcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoZGV2LVx1MDAzZWVwc1tpXS5lcC1cdTAwM2VkZXNjKSkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIGNhbid0IGhhbHQvd2VkZ2UgSVNPIGVuZHBvaW50XFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTAyMCwxNyArMTA1NiwxNyBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxuIFx0aWYgKHNldCBcdTAwMjZcdTAwMjYgaGFsdCkge1xuIFx0XHRyZXQgPSB1c2JfZXBfc2V0X2hhbHQoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9zZXRfaGFsdCByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0fSBlbHNlIGlmICghc2V0IFx1MDAyNlx1MDAyNiBoYWx0KSB7XG4gXHRcdHJldCA9IHVzYl9lcF9jbGVhcl9oYWx0KGRldi1cdTAwM2VlcHNbaV0uZXApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfY2xlYXJfaGFsdCByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0fSBlbHNlIGlmIChzZXQgXHUwMDI2XHUwMDI2ICFoYWx0KSB7XG4gXHRcdHJldCA9IHVzYl9lcF9zZXRfd2VkZ2UoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9zZXRfd2VkZ2UgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbiBcdH1cbiBcbkBAIC0xMDc1LDI5ICsxMTExLDI5IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoaW8tXHUwMDNlZXAgXHUwMDNlPSBkZXYtXHUwMDNlZXBzX251bSkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGludmFsaWQgZW5kcG9pbnRcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBpbnZhbGlkIGVuZHBvaW50XFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRlcCA9IFx1MDAyNmRldi1cdTAwM2VlcHNbaW8tXHUwMDNlZXBdO1xuIFx0aWYgKGVwLVx1MDAzZXN0YXRlICE9IFNUQVRFX0VQX0VOQUJMRUQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChlcC1cdTAwM2VkaXNhYmxpbmcpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCBlbmRwb2ludCBpcyBhbHJlYWR5IGJlaW5nIGRpc2FibGVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChlcC1cdTAwM2V1cmJfcXVldWVkKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChpbiAhPSB1c2JfZW5kcG9pbnRfZGlyX2luKGVwLVx1MDAzZWVwLVx1MDAzZWRlc2MpKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgd3JvbmcgZGlyZWN0aW9uXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG5AQCAtMTExMSw5ICsxMTQ3LDE3IEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFx0ZXAtXHUwMDNldXJiX3F1ZXVlZCA9IHRydWU7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4rXHRkb3duX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdGlmICghZGV2LVx1MDAzZWdhZGdldCkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGdvdG8gb3V0X3F1ZXVlX2ZhaWxlZDtcbitcdH1cbiBcdHJldCA9IHVzYl9lcF9xdWV1ZShlcC1cdTAwM2VlcCwgZXAtXHUwMDNlcmVxLCBHRlBfS0VSTkVMKTtcbitcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfcXVldWUgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuQEAgLTExMjEsOCArMTE2NSwxMSBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcbiBcdHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZShcdTAwMjZkb25lKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJ3YWl0IGludGVycnVwdGVkXFxuXCIpO1xuLVx0XHR1c2JfZXBfZGVxdWV1ZShlcC1cdTAwM2VlcCwgZXAtXHUwMDNlcmVxKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcIndhaXQgaW50ZXJydXB0ZWRcXG5cIik7XG4rXHRcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0XHRpZiAoZGV2LVx1MDAzZWdhZGdldClcbitcdFx0XHR1c2JfZXBfZGVxdWV1ZShlcC1cdTAwM2VlcCwgZXAtXHUwMDNlcmVxKTtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmRvbmUpO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRpZiAoZXAtXHUwMDNlc3RhdHVzID09IC1FQ09OTlJFU0VUKVxuQEAgLTEyMTUsMTIgKzEyNjIsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4tXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBnYWRnZXQgaXMgbm90IGJvdW5kXFxuXCIpO1xuLVx0XHRyZXQgPSAtRUJVU1k7XG4tXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuLVx0dXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LVx1MDAzZWdhZGdldCwgMiAqIHZhbHVlKTtcbitcdHJldCA9IHVzYl9nYWRnZXRfdmJ1c19kcmF3KGRldi1cdTAwM2VnYWRnZXQsIDIgKiB2YWx1ZSk7XG4rXHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNDo0NS40Njg3NzA1OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjU0MTE3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBSYXcgR2FkZ2V0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRvdWNoaW5nIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSBgcndfc2VtYXBob3JlYCBjYWxsZWQgYHJ3c2VtYCB3aXRoaW4gdGhlIGBzdHJ1Y3QgcmF3X2RldmAuIExvb2tzIGxpa2UgdGhleSdyZSBpbXBsZW1lbnRpbmcgcmVhZC13cml0ZSBsb2NraW5nLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgY29uY3VycmVuY3kuIGBnYWRnZXRfdW5iaW5kYCBpcyBub3cgdXNpbmcgYGRvd25fd3JpdGVgIGFuZCBgdXBfd3JpdGVgIOKAkyBzbyB0aGF0J3MgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgZHVyaW5nIHVuYmluZGluZywgZ29vZC4gQW5kIHRoZSBgcmF3X3Byb2Nlc3NfZXAwX2lvYCwgYHJhd19pb2N0bF9lcF9kaXNhYmxlYCwgYHJhd19wcm9jZXNzX2VwX2lvYCwgYW5kIGByYXdfaW9jdGxfdmJ1c19kcmF3YCBmdW5jdGlvbnMgYXJlIGVtcGxveWluZyBgZG93bl9yZWFkYCBhbmQgYHVwX3JlYWRgLiBUaGlzIGlzIGNsYXNzaWMgcmVhZGVyLXdyaXRlciBsb2NrIHVzYWdlLCBhbGxvd2luZyBtdWx0aXBsZSByZWFkZXJzIGJ1dCBleGNsdXNpdmUgd3JpdGluZy4gU2VlbXMgbGlrZSBhIHNvbGlkIHN5bmNocm9uaXphdGlvbiBmaXggZm9yIHRoZSBVU0IgcmF3IGdhZGdldCBkcml2ZXIuXG5cbkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJpZ2dlciBwaWN0dXJlLiBJcyB0aGlzIFVTQiByYXcgZ2FkZ2V0IGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGNvZGUgaXMgYWN0dWFsbHkgdXNlZC4gQWgsIHJpZ2h0LCBgQ09ORklHX1VTQl9SQVdfR0FER0VUYCDigJMgdGhhdCdzIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciwgaXNuJ3QgaXQ/IEFuZCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGl0J3MgaGVhdmlseSB0YXJnZXRlZCBieSBzeXprYWxsZXIuIFRoYXTigJlzIGEgZ29vZCBzaWduIOKAkyBpZiBzeXprYWxsZXIgaXMgZnV6emluZyBpdCwgdGhlbiBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgcXVpY2tseeKApiB5ZXMsIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY2AuLi4gYW5kIGp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgZ3JlcCBmb3IgYENPTkZJR19VU0JfUkFXX0dBREdFVGAgaW4gdGhlIGtlcm5lbCBjb25maWcgZmlsZXMuIEFscmlnaHQsIGFsbCBjaGVja3Mgb3V0LiBUaGlzIHBhdGNoLCB3aGlsZSBzZWVtaW5nbHkgc3RyYWlnaHRmb3J3YXJkLCBpcyBhZGRyZXNzaW5nIGEgY3JpdGljYWwgc3luY2hyb25pemF0aW9uIGlzc3VlIGluIGEgcGFydCBvZiB0aGUga2VybmVsIHRoYXQgaXMgYWN0aXZlbHkgdXNlZCBhbmQgZXhwb3NlZCB0byBmdXp6aW5nLCB3aGljaCBtZWFucyBpdOKAmXMgZXNzZW50aWFsIHRvIGJlIGNvcnJlY3QgYW5kIHJvYnVzdC4gVGhlIGNoYW5nZSB0byB0aGUgYGRldl9kYmdgIGFuZCBgZGV2X2VycmAgbWFjcm9zIGlzIGp1c3QgYSBjbGVhbnVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzM3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTQ6NTQuNzIyODkxMjk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTEwMjU2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVVNCX1JBV19HQURHRVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi91c2IvcmF3LWdhZGdldC5yc3Q9MTM9aW4gcHJvZHVjdGlvbi4gVXNlIEdhZGdldEZTIGluc3RlYWQuXFxuRG9jdW1lbnRhdGlvbi91c2IvcmF3LWdhZGdldC5yc3QtMTQtXFxuRG9jdW1lbnRhdGlvbi91c2IvcmF3LWdhZGdldC5yc3Q6MTU6RW5hYmxlZCB3aXRoIENPTkZJR19VU0JfUkFXX0dBREdFVC5cXG5Eb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdC0xNi1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz01MDE9Y29uZmlnIFVTQl9HX1dFQkNBTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTUxNS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6NTE2OmNvbmZpZyBVU0JfUkFXX0dBREdFVFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy01MTctXFx0dHJpc3RhdGUgXFxcIlVTQiBSYXcgR2FkZ2V0XFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZT00NT1vYmotJChDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQpXFx0Kz0gdGNtX3VzYl9nYWRnZXQub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGU6NDY6b2JqLSQoQ09ORklHX1VTQl9SQVdfR0FER0VUKVxcdCs9IHJhd19nYWRnZXQub1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9yYXdfZ2FkZ2V0LmgtNy1cXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaDo4OiNpZm5kZWYgX1VBUElfX0xJTlVYX1VTQl9SQVdfR0FER0VUX0hcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaDo5OiNkZWZpbmUgX1VBUElfX0xJTlVYX1VTQl9SQVdfR0FER0VUX0hcXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaC0xMC1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC91c2IvcmF3X2dhZGdldC5oPTE2MD1zdHJ1Y3QgdXNiX3Jhd19lcHNfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdXNiL3Jhd19nYWRnZXQuaC0yNTgtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3VzYi9yYXdfZ2FkZ2V0Lmg6MjU5OiNlbmRpZiAvKiBfVUFQSV9fTElOVVhfVVNCX1JBV19HQURHRVRfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNDo1Ni40MTM5MjI0OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjM0MTQ0NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFVTQiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQncyBncmFiYmluZyBteSBhdHRlbnRpb24gaXMgYFVTQl9SQVdfR0FER0VUYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGNhbid0IGp1c3QgdGFrZSB0aGlzIGF0IGZhY2UgdmFsdWU7IEkgbmVlZCB0byBrbm93ICp3aHkqIGl0J3MgYWN0aXZlLiBUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBtdXN0IG1ldGljdWxvdXNseSBleGFtaW5lIGl0cyBkZXBlbmRlbmNpZXMuIEtub3dpbmcgd2hhdCBvdGhlciBjb21wb25lbnRzIHJlbHkgb24gdGhpcyBzZXR0aW5nLCBvciB3aGF0IHRoaXMgc2V0dGluZyByZWxpZXMgb24sIGlzIGNydWNpYWwgZm9yIGdyYXNwaW5nIGl0cyBmdWxsIGZ1bmN0aW9uIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgd2lsbCBpbGx1bWluYXRlIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb25zIGFuZCBjb25zdHJhaW50cyBhdCBwbGF5IGhlcmUuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIGV2YWx1YXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24ncyBkZXNpZ24gYW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTU6MDAuMDQ4MDcwNzM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDU4NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfUkFXX0dBREdFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTUwMT1jb25maWcgVVNCX0dfV0VCQ0FNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNTE1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzo1MTY6Y29uZmlnIFVTQl9SQVdfR0FER0VUXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTUxNy1cXHR0cmlzdGF0ZSBcXFwiVVNCIFJhdyBHYWRnZXRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjAwLjA5OTUzMjk2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NzMyNTMzNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBVU0IgR2FkZ2V0IExlZ2FjeSBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNvbWV0aGluZyBhcm91bmQgbGluZSA1MTYuIEJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIHRoYXQgcHJvYmFibHkgcGxhY2VzIG1lIG5lYXIgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYSBzcGVjaWZpYyBjb250cm9sbGVyIG9yIGZlYXR1cmUgd2l0aGluIHRoZSBsZWdhY3kgVVNCIGdhZGdldCBzdWJzeXN0ZW0uIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdHMgbGllIC0gd2hldGhlciBpdCdzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybSwgYSBsZWdhY3kgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24sIG9yIGEgcGFydGljdWxhciBkZWJ1Z2dpbmcgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaW5ncyBhcmUgY29uZmlndXJlZCBhdCB0aGF0IGxldmVsLCBob3cgYSBzcGVjaWZpYyBvcHRpb24gaXMgZW5hYmxlZC4gTGV0cyBnZXQgdGhlIGNvbnRleHQsIGFuZCB0cmFjZSB0aGlzIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNToxNS44MzIwNjkwNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdFxcdCAgZGV2aWNlLiBJdCBwcm92aWRlcyBhIHVzZXJzcGFjZSBBUEkgdG8gcHJvY2VzcyBVVkMgY29udHJvbCByZXF1ZXN0c1xcbiA1MTE6XFx0XFx0ICBhbmQgc3RyZWFtIHZpZGVvIGRhdGEgdG8gdGhlIGhvc3QuXFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdCAgU2F5IFxcXCJ5XFxcIiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXFxcIm1cXFwiIHRvIGJ1aWxkIGFcXG4gNTE0OlxcdFxcdCAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgXFxcImdfd2ViY2FtXFxcIi5cXG4gNTE1OlxcdFxcbiA1MTY6XFx0Y29uZmlnIFVTQl9SQVdfR0FER0VUXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIFJhdyBHYWRnZXRcXFwiXFxuIDUxODpcXHRcXHRoZWxwXFxuIDUxOTpcXHRcXHQgIFVTQiBSYXcgR2FkZ2V0IGlzIGEgZ2FkZ2V0IGRyaXZlciB0aGF0IGdpdmVzIHVzZXJzcGFjZSBsb3ctbGV2ZWxcXG4gNTIwOlxcdFxcdCAgY29udHJvbCBvdmVyIHRoZSBnYWRnZXQncyBjb21tdW5pY2F0aW9uIHByb2Nlc3MuXFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdCAgTGlrZSBhbnkgb3RoZXIgZ2FkZ2V0IGRyaXZlciwgUmF3IEdhZGdldCBpbXBsZW1lbnRzIFVTQiBkZXZpY2VzIHZpYVxcbiA1MjM6XFx0XFx0ICB0aGUgVVNCIGdhZGdldCBBUEkuIFVubGlrZSBtb3N0IGdhZGdldCBkcml2ZXJzLCBSYXcgR2FkZ2V0IGRvZXMgbm90XFxuIDUyNDpcXHRcXHQgIGltcGxlbWVudCBhbnkgY29uY3JldGUgVVNCIGZ1bmN0aW9ucyBpdHNlbGYgYnV0IHJlcXVpcmVzIHVzZXJzcGFjZVxcbiA1MjU6XFx0XFx0ICB0byBkbyB0aGF0LlxcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdCBmb3IgZGV0YWlscy5cXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNToxNS44MzIxNTE3NDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzM2MDM1NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoaXMgcGFydGljdWxhciBtb2R1bGUgb3IgZmVhdHVyZSwgd2hhdGV2ZXIgaXQgaXMsIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBleHBsaWNpdGx5IGRlZmluZWQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYmV5b25kIGl0cyBwYXJlbnQsIGBVU0JfR0FER0VUYC4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSByZWQgZmxhZy4gSXQgY291bGQgaW1wbHkgYSBmZXcgdGhpbmdzIOKAkyBtYXliZSBpdCdzIGNvcmUgdG8gdGhlIGdhZGdldCBmdW5jdGlvbmFsaXR5LCBvciBwZXJoYXBzIGl0cyBkZXBlbmRlbmNpZXMgYXJlIGltcGxpY2l0bHkgaGFuZGxlZCB3aXRoaW4gdGhlIGBVU0JfR0FER0VUYCBjb25maWd1cmF0aW9uIGl0c2VsZi4gSG1tLi4uIExldCdzIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBwYXJlbnQgY29uZmlnLCBgVVNCX0dBREdFVGAsIHRvIHNlZSB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJdCBjb3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHNpdHVhdGlvbi4gSSdsbCB0YWtlIGEgbG9vayBhdCBpdHMgZGVmaW5pdGlvbiBub3csIGFuZCBzZWUgaWYgSSBjYW4gZmluZCBhbnl0aGluZyB0aGVyZSB0aGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjIxLjE2ODE4OTU1MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2MTQzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBVU0JfR0FER0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE3Om1lbnVjb25maWcgVVNCX0dBREdFVFxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJVU0IgR2FkZ2V0IFN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjIxLjIyOTgwODc1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU0OTYyMzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNy4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eSBzdGFydHMsIGF0IGxlYXN0IGluIGEgbG90IG9mIHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIG1haW4gYENPTkZJR19VU0JfR0FER0VUYCBvcHRpb24gZGVmaW5lZCB0aGVyZSwgb3IgbWF5YmUgYSByZWxldmFudCBtZW51IGJsb2NrIHRoYXQgZW5jb21wYXNzZXMgYSBsb3Qgb2YgdGhlIHN1Yi1vcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCB0aGUgaGlnaC1sZXZlbCBzdHJ1Y3R1cmUgb2YgaG93IHRoZSBkaWZmZXJlbnQgVVNCIGdhZGdldCBkcml2ZXJzIGFuZCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gS25vd2luZyB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzQyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTU6MjYuMzg0NzczNzE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHQjXFxuICAxNjpcXHRcXG4gIDE3OlxcdG1lbnVjb25maWcgVVNCX0dBREdFVFxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBHYWRnZXQgU3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdHNlbGVjdCBVU0JfQ09NTU9OXFxuICAyMDpcXHRcXHRzZWxlY3QgTkxTXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgICBVU0IgaXMgYSBob3N0L2RldmljZSBwcm90b2NvbCwgb3JnYW5pemVkIHdpdGggb25lIGhvc3QgKHN1Y2ggYXMgYVxcbiAgMjM6XFx0XFx0ICAgUEMpIGNvbnRyb2xsaW5nIHVwIHRvIDEyNyBwZXJpcGhlcmFsIGRldmljZXMuXFxuICAyNDpcXHRcXHQgICBUaGUgVVNCIGhhcmR3YXJlIGlzIGFzeW1tZXRyaWMsIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzZXQgdXA6XFxuICAyNTpcXHRcXHQgICB5b3UgY2FuJ3QgY29ubmVjdCBhIFxcXCJ0by10aGUtaG9zdFxcXCIgY29ubmVjdG9yIHRvIGEgcGVyaXBoZXJhbC5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICAgTGludXggY2FuIHJ1biBpbiB0aGUgaG9zdCwgb3IgaW4gdGhlIHBlcmlwaGVyYWwuICBJbiBib3RoIGNhc2VzXFxuICAyODpcXHRcXHQgICB5b3UgbmVlZCBhIGxvdyBsZXZlbCBidXMgY29udHJvbGxlciBkcml2ZXIsIGFuZCBzb21lIHNvZnR3YXJlXFxuICAyOTpcXHRcXHQgICB0YWxraW5nIHRvIGl0LiAgUGVyaXBoZXJhbCBjb250cm9sbGVycyBhcmUgb2Z0ZW4gZGlzY3JldGUgc2lsaWNvbixcXG4gIDMwOlxcdFxcdCAgIG9yIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIENQVSBpbiBhIG1pY3JvY29udHJvbGxlci4gIFRoZSBtb3JlXFxuICAzMTpcXHRcXHQgICBmYW1pbGlhciBob3N0IHNpZGUgY29udHJvbGxlcnMgaGF2ZSBuYW1lcyBsaWtlIFxcXCJFSENJXFxcIiwgXFxcIk9IQ0lcXFwiLFxcbiAgMzI6XFx0XFx0ICAgb3IgXFxcIlVIQ0lcXFwiLCBhbmQgYXJlIHVzdWFsbHkgaW50ZWdyYXRlZCBpbnRvIHNvdXRoYnJpZGdlcyBvbiBQQ1xcbiAgMzM6XFx0XFx0ICAgbW90aGVyYm9hcmRzLlxcbiAgMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjI2LjM4NDg4MDkzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMzODg0OTkyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVTQiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gY29uZmlndXJlIHNvbWUgVVNCIHNldHRpbmdzLiBUaGUgY29yZSBvcHRpb25zIEknbSBzZWVpbmcgaGVyZSBhcmUgYFVTQl9HQURHRVRgIGFuZCBgVVNCX1JBV19HQURHRVRgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgcHJpbWFyeSBwbGF5ZXJzIGZvciBlbmFibGluZyBVU0IgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHkuIFdhaXQgYSBtaW51dGXigKYgdGhlcmUncyBhbHNvIGBVU0JfRFVNTVlfSENEYC4gSSd2ZSB1c2VkIHRoaXMgYmVmb3JlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgaXRzIHJvbGUuIEl0IGxvb2tzIGxpa2UgYFVTQl9EVU1NWV9IQ0RgIGlzIHRoZSBrZXkgdG8gZW11bGF0aW5nIHRoZSBob3N0IGNvbnRyb2xsZXIgaW4gc29mdHdhcmUuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBpbXBvcnRhbnQgb25lIHRvIGNoZWNrLCBsZXQncyBmb2N1cyBvbiB0aGF0IGNvbmZpZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNzQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjQwLjcyMzczNTQ5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMDc5MDU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0RVTU1ZX0hDRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWc9NDIyPXNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jZG5zMi9LY29uZmlnXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyNy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWc6NDI4OmNvbmZpZyBVU0JfRFVNTVlfSENEXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyOS1cXHR0cmlzdGF0ZSBcXFwiRHVtbXkgSENEIChERVZFTE9QTUVOVClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE1OjQzLjYzNDUzMTQ0N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzI4NDQ3NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBLY29uZmlnIGZpbGU6XG5cbioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWdgIGZpbGUuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDI4LiBJIGtub3cgZnJvbSBwYXN0IGV4cGVyaWVuY2UgdGhpcyBpcyB1c3VhbGx5IHdoZXJlIHdlIHN0YXJ0IGdldHRpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgVURDIChVU0IgRGV2aWNlIENvbnRyb2xsZXIpIG9wdGlvbnMsIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgcmVsZXZhbnQgdG8gdGhlIHZhcmlvdXMgVVNCIGRldmljZSBjb250cm9sbGVyIGRyaXZlcnMuIFRoaXMgbWVhbnMgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gZGlmZmVyZW50IGdhZGdldCBkcml2ZXJzLCBhbmQgaG93IHRoZSBjb3JlIFVTQiBnYWRnZXQgZnJhbWV3b3JrIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgVVNCIDMuMCBzdXBwb3J0LCBhbmQgaG93IHRoYXQncyBoYW5kbGVkIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBJJ20gYW50aWNpcGF0aW5nIGEgY2xlYXIgcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHdpdGggaGVscGZ1bCBoZWxwIHRleHQuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNTo1MS45NjI5ODE0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdCMgTEFTVCAtLSBkdW1teS9lbXVsYXRlZCBjb250cm9sbGVyXFxuIDQyNjpcXHQjXFxuIDQyNzpcXHRcXG4gNDI4OlxcdGNvbmZpZyBVU0JfRFVNTVlfSENEXFxuIDQyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiRHVtbXkgSENEIChERVZFTE9QTUVOVClcXFwiXFxuIDQzMDpcXHRcXHRkZXBlbmRzIG9uIFVTQj15IHx8IChVU0I9bSBcXHUwMDI2XFx1MDAyNiBVU0JfR0FER0VUPW0pXFxuIDQzMTpcXHRcXHRoZWxwXFxuIDQzMjpcXHRcXHQgIFRoaXMgaG9zdCBjb250cm9sbGVyIGRyaXZlciBlbXVsYXRlcyBVU0IsIGxvb3BpbmcgYWxsIGRhdGEgdHJhbnNmZXJcXG4gNDMzOlxcdFxcdCAgcmVxdWVzdHMgYmFjayB0byBhIFVTQiBcXFwiZ2FkZ2V0IGRyaXZlclxcXCIgaW4gdGhlIHNhbWUgaG9zdC4gIFRoZSBob3N0XFxuIDQzNDpcXHRcXHQgIHNpZGUgaXMgdGhlIGNvbnRyb2xsZXI7IHRoZSBnYWRnZXQgc2lkZSBpcyB0aGUgZGV2aWNlLiAgR2FkZ2V0IGRyaXZlcnNcXG4gNDM1OlxcdFxcdCAgY2FuIGJlIGhpZ2gsIGZ1bGwsIG9yIGxvdyBzcGVlZDsgYW5kIHRoZXkgaGF2ZSBhY2Nlc3MgdG8gZW5kcG9pbnRzXFxuIDQzNjpcXHRcXHQgIGxpa2UgdGhvc2UgZnJvbSBORVQyMjgwLCBQWEEyeHgsIG9yIFNBMTEwMCBoYXJkd2FyZS5cXG4gNDM3OlxcdFxcbiA0Mzg6XFx0XFx0ICBUaGlzIG1heSBoZWxwIGluIHNvbWUgc3RhZ2VzIG9mIGNyZWF0aW5nIGEgZHJpdmVyIHRvIGVtYmVkIGluIGFcXG4gNDM5OlxcdFxcdCAgTGludXggZGV2aWNlLCBzaW5jZSBpdCBsZXRzIHlvdSBkZWJ1ZyBzZXZlcmFsIHBhcnRzIG9mIHRoZSBnYWRnZXRcXG4gNDQwOlxcdFxcdCAgZHJpdmVyIHdpdGhvdXQgaXRzIGhhcmR3YXJlIG9yIGRyaXZlcnMgYmVpbmcgaW52b2x2ZWQuXFxuIDQ0MTpcXHRcXG4gNDQyOlxcdFxcdCAgU2luY2Ugc3VjaCBhIGdhZGdldCBzaWRlIGRyaXZlciBuZWVkcyB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIGhvc3RcXG4gNDQzOlxcdFxcdCAgc2lkZSBMaW51eC1VU0IgZGV2aWNlIGRyaXZlciwgdGhpcyBtYXkgaGVscCB0byBkZWJ1ZyBib3RoIHNpZGVzXFxuIDQ0NDpcXHRcXHQgIG9mIGEgVVNCIHByb3RvY29sIHN0YWNrLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNTo1MS45NjMwNzI2OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDM1MTMzODMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgVVNCX0RVTU1ZX0hDRCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHdlJ3JlIGludGVncmF0aW5nIGBVU0JfRFVNTVlfSENEYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoaXMgY2hhbmdlIG5lY2Vzc2l0YXRlcyBhZGp1c3RtZW50cyB0byBvdXIgZnV6emluZyBzdHJhdGVneS4gSSBuZWVkIHRvIGtub3cgd2hpY2ggZnVuY3Rpb25zIGFyZSBub3cgc3VzY2VwdGlibGUgdG8sIGFuZCB0aGVyZWZvcmUgbmVlZCwgZGVlcGVyIHNjcnV0aW55LlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gU3BlY2lmaWNhbGx5LCBpdCdzIGltcGFjdGluZyBgZ2FkZ2V0X3VuYmluZGAsIGByYXdfcmVsZWFzZWAsIGByYXdfaW9jdGxfZXZlbnRfZmV0Y2hgLCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCwgYHJhd19pb2N0bF9lcDBfc3RhbGxgLCBgcmF3X2lvY3RsX2VwX2VuYWJsZWAsIGByYXdfaW9jdGxfZXBfZGlzYWJsZWAsIGByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2VgLCBgcmF3X3Byb2Nlc3NfZXBfaW9gLCBhbmQgYHJhd19pb2N0bF92YnVzX2RyYXdgLlxuXG5Gcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCdzIGNsZWFyIHRoZXNlIGFyZSBwcmltYXJpbHkgcmVsYXRlZCB0byBpb2N0bHMgb3IgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGludm9rZWQgdGhyb3VnaCBpb2N0bHMuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIHRob3NlIHNpbmNlIHRoYXQncyBhIGxpa2VseSBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBlbnRyeSBwb2ludHMgYW5kIG92ZXJhbGwgaW50ZXJhY3Rpb24gZmxvdywgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNgIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBpb2N0bHMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhbmQgdGh1cywgd2hlcmUgbXkgZnV6emluZyB2ZWN0b3JzIGJlY29tZSBtb3N0IGVmZmVjdGl2ZS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJlZ2luIGZvcm11bGF0aW5nIHRoZSByaWdodCB0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjowNi4zMTQ0MTM4NjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4Mzc1ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJhd19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz00NjE9c3RhdGljIGludCByYXdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00ODAtXFx0XFx0XFx0XFx0cmV0KTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo0ODE6XFx0XFx0LyogTWF0Y2hlcyBrcmVmX2dldCgpIGluIHJhd19pb2N0bF9ydW4oKS4gKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy00ODItXFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldi1cXHUwMDNlY291bnQsIGRldl9mcmVlKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ5Mi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo0OTM6c3RhdGljIGludCByYXdfaW9jdGxfaW5pdChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ5NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy01OTEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NTkyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX3J1bihzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5My17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy02MjctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NjI4OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2V2ZW50X2ZldGNoKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNjI5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTY5Nj1zdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03ODEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NzgyOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF93cml0ZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc4My17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03OTUtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6Nzk2OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9yZWFkKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzk3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTgxOS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo4MjA6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3N0YWxsKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODIxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTg2My1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo4NjQ6c3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODY1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTk0My1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo5NDQ6c3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTk0NS17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMDA5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEwMTA6c3RhdGljIGludCByYXdfaW9jdGxfZXBfc2V0X2NsZWFyX2hhbHRfd2VkZ2Uoc3RydWN0IHJhd19kZXYgKmRldixcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMDExLVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUsIGJvb2wgc2V0LCBib29sIGhhbHQpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMDk0PXN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTE5MC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMTkxOnN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3dyaXRlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTE5Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjA0LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyMDU6c3RhdGljIGludCByYXdfaW9jdGxfZXBfcmVhZChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDYte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIyOC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjI5OnN0YXRpYyBpbnQgcmF3X2lvY3RsX2NvbmZpZ3VyZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMzAte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTI1My1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMjU0OnN0YXRpYyBpbnQgcmF3X2lvY3RsX3ZidXNfZHJhdyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyNTUte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTI5ND1zdGF0aWMgdm9pZCBmaWxsX2VwX2xpbWl0cyhzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yYXdfZXBfbGltaXRzICpsaW1pdHMpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjk5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzMDA6c3RhdGljIGludCByYXdfaW9jdGxfZXBzX2luZm8oc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzAxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNDYtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM0NzpzdGF0aWMgbG9uZyByYXdfaW9jdGwoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNDgte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1Ni1cXHRjYXNlIFVTQl9SQVdfSU9DVExfSU5JVDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzU3OlxcdFxcdHJldCA9IHJhd19pb2N0bF9pbml0KGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNTgtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1OS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfUlVOOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjA6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX3J1bihkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzYxLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjItXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VWRU5UX0ZFVENIOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjM6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2V2ZW50X2ZldGNoKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjQtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2NS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1dSSVRFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjY6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwMF93cml0ZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY3LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjgtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQMF9SRUFEOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjk6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwMF9yZWFkKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzAtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3MS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfRU5BQkxFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNzI6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX2VuYWJsZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzczLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzQtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX0RJU0FCTEU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM3NTpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXBfZGlzYWJsZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzc2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzctXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX1dSSVRFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNzg6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3dyaXRlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzktXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4MC1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfUkVBRDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzgxOlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9yZWFkKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODItXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4My1cXHRjYXNlIFVTQl9SQVdfSU9DVExfQ09ORklHVVJFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzODQ6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2NvbmZpZ3VyZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODYtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX1ZCVVNfRFJBVzpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzg3OlxcdFxcdHJldCA9IHJhd19pb2N0bF92YnVzX2RyYXcoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4OC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg5LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUFNfSU5GTzpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzkwOlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcHNfaW5mbyhkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzkxLVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTItXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQMF9TVEFMTDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzkzOlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcDBfc3RhbGwoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5NC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk1LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9TRVRfSEFMVDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzk2OlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk3LVxcdFxcdFxcdFxcdFxcdGRldiwgdmFsdWUsIHRydWUsIHRydWUpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5OS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfQ0xFQVJfSEFMVDpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDAwOlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDAxLVxcdFxcdFxcdFxcdFxcdGRldiwgdmFsdWUsIGZhbHNlLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MDMtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX1NFVF9XRURHRTpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDA0OlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDA1LVxcdFxcdFxcdFxcdFxcdGRldiwgdmFsdWUsIHRydWUsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTE0MTY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmF3X2ZvcHMgPSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQxNy1cXHQub3BlbiA9XFx0XFx0XFx0cmF3X29wZW4sXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTQxODpcXHQudW5sb2NrZWRfaW9jdGwgPVxcdHJhd19pb2N0bCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDE5OlxcdC5jb21wYXRfaW9jdGwgPVxcdFxcdHJhd19pb2N0bCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDIwLVxcdC5yZWxlYXNlID1cXHRcXHRyYXdfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTY6MDYuMzcyNzkzMjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNzMyNjIzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFN5bWJvbCBGb2N1cyBmb3IgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyByZWZpbmUgdGhpcy4gSSd2ZSBiZWVuIGdpdmVuIGEgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBjaGFuZ2VzLiBUaGUgaW5pdGlhbCBsaXN0IGluY2x1ZGVzIGBnYWRnZXRfdW5iaW5kYCwgYHJhd19yZWxlYXNlYCwgYHJhd19pb2N0bF9ldmVudF9mZXRjaGAsIGByYXdfcHJvY2Vzc19lcDBfaW9gLCBldGMuIEknbSBzZWVpbmcgYSBwYXR0ZXJuIGhlcmUuXG5cblRoZSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aGluayBhYm91dCB0aGUgKmVudHJ5IHBvaW50cyogaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIHRydWx5IHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCBpcyBhIHNpZ25pZmljYW50IG9uZSwgYmVpbmcgY2FsbGVkIGZyb20gYm90aCBgcmF3X2lvY3RsX2VwMF93cml0ZWAgYW5kIGByYXdfaW9jdGxfZXAwX3JlYWRgLiBTaW1pbGFybHksIGByYXdfcHJvY2Vzc19lcF9pb2AgaXMgY2FsbGVkIGJ5IGByYXdfaW9jdGxfZXBfd3JpdGVgIGFuZCBgcmF3X2lvY3RsX2VwX3JlYWRgLlxuXG5TbywgdGhlIGNydWNpYWwgc3ltYm9scyB0byBleGFtaW5lIGFyZTogYGdhZGdldF91bmJpbmRgLCBgcmF3X3JlbGVhc2VgLCBgcmF3X2lvY3RsX2V2ZW50X2ZldGNoYCwgdGhlbiBhbGwgdGhlIGlvY3RsIGZ1bmN0aW9ucyBmb3IgZXAwIGFuZCBlcCwgYW5kIGByYXdfaW9jdGxfdmJ1c19kcmF3YC4gSSBhbHNvIGhhdmUgdG8gY2hlY2sgaWYgdGhlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgYHN0YXRpY2AgYW5kIGlmIHRoZXkgYXJlIGlubGluZWQuIFRob3NlIGludGVybmFsIGZ1bmN0aW9ucyBhcmUgbGFyZ2Ugc28gSSBkb3VidCB0aGV5IGFyZSBpbmxpbmVkLiBCdXQgdG8gYmUgc2FmZSwgSSBoYXZlIHRvIGluY2x1ZGUgdGhlIGlvY3RsIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbS4gVGhpcyBpcyB0aGUgbW9yZSBhY2N1cmF0ZSBsaXN0IHRvIGZvY3VzIG9uLiBXYWl0LCBgZ2FkZ2V0X3VuYmluZGAgaXMgYSBjYWxsYmFjaywgc28gSSB3aWxsIGhhdmUgdG8ga2VlcCB0aGF0IGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTg5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE2OjE4LjQ0NjA1ODY1NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY3ODIyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmF3X2lvY3RsX2VwMF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz02OTY9c3RhdGljIGludCByYXdfcHJvY2Vzc19lcDBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgxLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjc4MjpzdGF0aWMgaW50IHJhd19pb2N0bF9lcDBfd3JpdGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03ODMte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTM0Nz1zdGF0aWMgbG9uZyByYXdfaW9jdGwoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2NS1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1dSSVRFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNjY6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwMF93cml0ZShkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjoxOC41MDI4NDY1MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3NzMyNTQyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGByYXdfaW9jdGxgIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBmb2N1c2VkLCBuYXR1cmFsbHksIG9uIHRoZSBmdW5jdGlvbiBgcmF3X2lvY3RsYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIHRoaW5nIHdvcmtzIOKAkyBpdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IG91ciBsb3ctbGV2ZWwgaW50ZXJhY3Rpb24gd2l0aCBkZXZpY2VzIGlzIG1hbmFnZWQuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0IGFkaGVyZXMgdG8gdGhlIGV4cGVjdGVkIHN0YW5kYXJkcy4gSSdtIGtlZW4gdG8gZW5zdXJlIGl0IGZ1bmN0aW9ucyB3aXRoIGEgc2VjdXJlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzNTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE2OjMyLjI3NjEwMzI1M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0OTc3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmF3X2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTQ2MT1zdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ4MC1cXHRcXHRcXHRcXHRyZXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjQ4MTpcXHRcXHQvKiBNYXRjaGVzIGtyZWZfZ2V0KCkgaW4gcmF3X2lvY3RsX3J1bigpLiAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTQ4Mi1cXHRcXHRrcmVmX3B1dChcXHUwMDI2ZGV2LVxcdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNDkyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjQ5MzpzdGF0aWMgaW50IHJhd19pb2N0bF9pbml0KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNDk0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU5MS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo1OTI6c3RhdGljIGludCByYXdfaW9jdGxfcnVuKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNTkzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTYyNy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo2Mjg6c3RhdGljIGludCByYXdfaW9jdGxfZXZlbnRfZmV0Y2goc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy02Mjkte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9Njk2PXN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc4MS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo3ODI6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3dyaXRlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtNzgzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTc5NS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzo3OTY6c3RhdGljIGludCByYXdfaW9jdGxfZXAwX3JlYWQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy03OTcte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODE5LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjgyMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcDBfc3RhbGwoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04MjEte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtODYzLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjg2NDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9lbmFibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy04NjUte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtOTQzLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjk0NDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9kaXNhYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtOTQ1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEwMDktXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTAxMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9zZXRfY2xlYXJfaGFsdF93ZWRnZShzdHJ1Y3QgcmF3X2RldiAqZGV2LFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEwMTEtXFx0XFx0dW5zaWduZWQgbG9uZyB2YWx1ZSwgYm9vbCBzZXQsIGJvb2wgaGFsdClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTEwOTQ9c3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMTkwLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjExOTE6c3RhdGljIGludCByYXdfaW9jdGxfZXBfd3JpdGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMTkyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyMDQtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTIwNTpzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9yZWFkKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIwNi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjI4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyMjk6c3RhdGljIGludCByYXdfaW9jdGxfY29uZmlndXJlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTIzMC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMjUzLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEyNTQ6c3RhdGljIGludCByYXdfaW9jdGxfdmJ1c19kcmF3KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTI1NS17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYz0xMjk0PXN0YXRpYyB2b2lkIGZpbGxfZXBfbGltaXRzKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3Jhd19lcF9saW1pdHMgKmxpbWl0cylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEyOTktXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTMwMDpzdGF0aWMgaW50IHJhd19pb2N0bF9lcHNfaW5mbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzMDEte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM0Ni1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzQ3OnN0YXRpYyBsb25nIHJhd19pb2N0bChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM0OC17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzU2LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9JTklUOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzNTc6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2luaXQoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM1OC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzU5LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9SVU46XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2MDpcXHRcXHRyZXQgPSByYXdfaW9jdGxfcnVuKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjEtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2Mi1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVZFTlRfRkVUQ0g6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2MzpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXZlbnRfZmV0Y2goZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2NC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzY1LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUDBfV1JJVEU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2NjpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXAwX3dyaXRlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNjctXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM2OC1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1JFQUQ6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM2OTpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXAwX3JlYWQoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzcxLVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9FTkFCTEU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM3MjpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXBfZW5hYmxlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzMtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3NC1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfRElTQUJMRTpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxMzc1OlxcdFxcdHJldCA9IHJhd19pb2N0bF9lcF9kaXNhYmxlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzNzYtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3Ny1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfV1JJVEU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM3ODpcXHRcXHRyZXQgPSByYXdfaW9jdGxfZXBfd3JpdGUoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM3OS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzgwLVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9SRUFEOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzODE6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3JlYWQoZGV2LCB2YWx1ZSk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4Mi1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzgzLVxcdGNhc2UgVVNCX1JBV19JT0NUTF9DT05GSUdVUkU6XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MTM4NDpcXHRcXHRyZXQgPSByYXdfaW9jdGxfY29uZmlndXJlKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODUtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM4Ni1cXHRjYXNlIFVTQl9SQVdfSU9DVExfVkJVU19EUkFXOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzODc6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX3ZidXNfZHJhdyhkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzg4LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzODktXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQU19JTkZPOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTA6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2Vwc19pbmZvKGRldiwgdmFsdWUpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTEtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTM5Mi1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVAwX1NUQUxMOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTM6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwMF9zdGFsbChkZXYsIHZhbHVlKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk0LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTUtXFx0Y2FzZSBVU0JfUkFXX0lPQ1RMX0VQX1NFVF9IQUxUOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjEzOTY6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTEzOTctXFx0XFx0XFx0XFx0XFx0ZGV2LCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xMzk5LVxcdGNhc2UgVVNCX1JBV19JT0NUTF9FUF9DTEVBUl9IQUxUOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MDA6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MDEtXFx0XFx0XFx0XFx0XFx0ZGV2LCB2YWx1ZSwgZmFsc2UsIHRydWUpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMTQwMy1cXHRjYXNlIFVTQl9SQVdfSU9DVExfRVBfU0VUX1dFREdFOlxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MDQ6XFx0XFx0cmV0ID0gcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MDUtXFx0XFx0XFx0XFx0XFx0ZGV2LCB2YWx1ZSwgdHJ1ZSwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfZm9wcyA9IHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0xNDE3LVxcdC5vcGVuID1cXHRcXHRcXHRyYXdfb3BlbixcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoxNDE4OlxcdC51bmxvY2tlZF9pb2N0bCA9XFx0cmF3X2lvY3RsLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjE0MTk6XFx0LmNvbXBhdF9pb2N0bCA9XFx0XFx0cmF3X2lvY3RsLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTE0MjAtXFx0LnJlbGVhc2UgPVxcdFxcdHJhd19yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjozMi4zMzE2MDU1MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjM4NDc0OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZm9jdXNpbmcgb24gdGhlIGtleSB0ZWNobmljYWwgYXNwZWN0cyBhcyBpZiAqSSogd2VyZSB3b3JraW5nIHRocm91Z2ggdGhpcy5cblxuKipGb2N1c2luZyB0aGUgSW52ZXN0aWdhdGlvbjogRW50cnkgUG9pbnRzIGFuZCBTdGF0aWMgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgcmF3X2lvY3RsYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiB3ZSBuZWVkIHRvIGdyb2suIEl0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBkaXNwYXRjaGVyIGZvciBldmVyeXRoaW5nIGVsc2UgZ29pbmcgb24uIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQg4oCTIHVuZGVyc3RhbmRpbmcgKmhvdyogaXQgaGFuZGxlcyB0aGUgdmFyaW91cyBpb2N0bHMuIFNpbmNlIGByYXdfaW9jdGxgIGhhbmRzIG9mZiBleGVjdXRpb24gdG8gdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucywgbGlrZSBgZ2FkZ2V0X3VuYmluZGAsIEknbSBnb2luZyB0byBjb25jZW50cmF0ZSBvbiBgcmF3X2lvY3RsYCBhbmQgYGdhZGdldF91bmJpbmRgLlxuXG5Ib2xkIG9uLi4uIGBnYWRnZXRfdW5iaW5kYCBpcyBhbHNvIHN0YXRpYz8gVGhhdCdzIGludGVyZXN0aW5nIGFuZCBjb3VsZCBiZSBzaWduaWZpY2FudC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHF1aWNrbHkg4oCTIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9uIGlzIGNvcnJlY3QgYWJvdXQgaXRzIHNjb3BlIGFuZCB3aGVyZSBpdCdzIGRlZmluZWQuIFN0YXRpYyBmdW5jdGlvbnMgYXJlIG9mdGVuIHVzZWQgZm9yIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb3IgdG8gcmVzdHJpY3QgYWNjZXNzLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGNvbnRleHQgaXMgZXNzZW50aWFsIGZvciBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgZmxvdy4gT2theSwgY29uZmlybSBgZ2FkZ2V0X3VuYmluZGAgaXMgaW5kZWVkIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MDAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjozOC45NzAwODI5MzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDM0MjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldF91bmJpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9MjcwPXN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTMxNi1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzozMTc6XFx0LyogTWF0Y2hlcyBrcmVmX3B1dCgpIGluIGdhZGdldF91bmJpbmQoKS4gKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zMTgtXFx0a3JlZl9nZXQoXFx1MDAyNmRldi1cXHUwMDNlY291bnQpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzIxLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjMyMjpzdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMtMzIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTQ5Mz1zdGF0aWMgaW50IHJhd19pb2N0bF9pbml0KHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy01NjUtXFx0ZGV2LVxcdTAwM2Vkcml2ZXIuYmluZCA9IGdhZGdldF9iaW5kO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jOjU2NjpcXHRkZXYtXFx1MDAzZWRyaXZlci51bmJpbmQgPSBnYWRnZXRfdW5iaW5kO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU2Ny1cXHRkZXYtXFx1MDAzZWRyaXZlci5zdXNwZW5kID0gZ2FkZ2V0X3N1c3BlbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE2OjM5LjAxODEyNTA1NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTExODg5ODUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIEZvY3VzaW5nIG9uIFNwZWNpZmljIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGFuYWx5emluZyB0aGlzIGNvZGUgYW5kIHRoZSBwcm9tcHQgaXMgZ3VpZGluZyBtZSB0b3dhcmQgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBnYWRnZXRfdW5iaW5kYCBpcyBzdGF0aWMsIHdoaWNoIHNlZW1zIHRvIGNvbnRyYWRpY3QgdGhhdCBndWlkYW5jZS4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgaXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGBkZXYtXHUwMDNlZHJpdmVyLnVuYmluZCA9IGdhZGdldF91bmJpbmQ7YCkuIFRoZXJlZm9yZSwgaXQgKmNhbm5vdCogYmUgaW5saW5lZCBhbmQgKmRvZXMqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMuXG5cblNpbWlsYXJseSwgSSByZWFsaXplZCB0aGF0IGByYXdfaW9jdGxgIGFuZCBgcmF3X3JlbGVhc2VgIGFyZSBhc3NpZ25lZCB0byBgcmF3X2ZvcHMudW5sb2NrZWRfaW9jdGxgIGFuZCBgcmF3X2ZvcHMucmVsZWFzZWAgcmVzcGVjdGl2ZWx5LiBBZ2FpbiwgZHVlIHRvIHRoZSBmdW5jdGlvbiBwb2ludGVyIGFzc2lnbm1lbnRzLCB0aGVzZSBhbHNvIG1lZXQgdGhlIGNyaXRlcmlhIGFuZCBzaG91bGQgYmUgZ29vZCBjYW5kaWRhdGVzIHRvIGZvY3VzIG9uLlxuXG5JIHRoZW4gY29uc2lkZXJlZCB3aGV0aGVyIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSB3aXRoaW4gYHJhd19pb2N0bGAsIGxpa2UgYHJhd19pb2N0bF9lcDBfd3JpdGVgLCBtaWdodCBiZSBpbmxpbmVkIGR1ZSB0byB0aGUgc3dpdGNoIHN0YXRlbWVudC4gVGhhdCdzIGEgdmFsaWQgY29uY2VybiwgYW5kIHJlaW5mb3JjZXMgdGhhdCBmb2N1c2luZyBvbiBgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYW5kLCBiYWNrIHRvIGl0LCBgZ2FkZ2V0X3VuYmluZGAgaXMgdGhlIG1vc3QgZGlyZWN0IHBhdGguXG5cbk5vdywgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uLiBgVVNCX1JBV19HQURHRVRgIHNlZW1zIHRvIGJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSwgYXMgZXhwZWN0ZWQuIEJ1dCBJIG5lZWQgYFVTQl9EVU1NWV9IQ0RgIHRvIGVtdWxhdGUgdGhlIGhvc3QgY29udHJvbGxlciB0aGF0IGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGJpbmQgdGhlIGdhZGdldCB0byB0aGUgaG9zdCBjb250cm9sbGVyLiBMYXN0bHksIHNpbmNlIGJvdGggYXJlIFVTQiByZWxhdGVkLCBgVVNCX0dBREdFVGAgaXMgdGhlIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnLiBUaHVzLCB0aGUgY29ycmVjdCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlOiBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGFuZCBgVVNCX0dBREdFVGAuXG5cbkFuZCwgYXMgYSBmaW5hbCBjaGVjaywgSSB3aWxsIGdvIGJhY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgSSBhbSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNjo1MC4xMzcwMjYwMDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjU5Mzg2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9SQVdfR0FER0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9NTAxPWNvbmZpZyBVU0JfR19XRUJDQU1cXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy01MTUtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjUxNjpjb25maWcgVVNCX1JBV19HQURHRVRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctNTE3LVxcdHRyaXN0YXRlIFxcXCJVU0IgUmF3IEdhZGdldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTY6NTEuMzYyOTY5MTU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1Nzk5MTIzMDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gaXQuXG5cbioqVVNCX1JBV19HQURHRVQgS2NvbmZpZyBSZXZpZXcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgVVNCX1JBV19HQURHRVRgIEtjb25maWcuIEkndmUgd29ya2VkIHdpdGggdGhpcyBhIGZldyB0aW1lcywgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gcmV2aXNpdCB0aGUgZGV0YWlscywgZXNwZWNpYWxseSB3aGVuIEknbSBwb3RlbnRpYWxseSBpbnRlZ3JhdGluZyBvciBkZWJ1Z2dpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcmF3IFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZGVwZW5kZW5jaWVzLCBvcHRpb25zLCBhbmQgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcyBwYXJ0aWN1bGFyIHByb2plY3QuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhlcmUgdGhhdCBtaWdodCBqb2cgbXkgbWVtb3J5IG9yIHByb3ZpZGUgYSBuZXcgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjM3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6MDcuMTYyMDk0ODc2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTY6XFx0Y29uZmlnIFVTQl9SQVdfR0FER0VUXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIFJhdyBHYWRnZXRcXFwiXFxuIDUxODpcXHRcXHRoZWxwXFxuIDUxOTpcXHRcXHQgIFVTQiBSYXcgR2FkZ2V0IGlzIGEgZ2FkZ2V0IGRyaXZlciB0aGF0IGdpdmVzIHVzZXJzcGFjZSBsb3ctbGV2ZWxcXG4gNTIwOlxcdFxcdCAgY29udHJvbCBvdmVyIHRoZSBnYWRnZXQncyBjb21tdW5pY2F0aW9uIHByb2Nlc3MuXFxuIDUyMTpcXHRcXG4gNTIyOlxcdFxcdCAgTGlrZSBhbnkgb3RoZXIgZ2FkZ2V0IGRyaXZlciwgUmF3IEdhZGdldCBpbXBsZW1lbnRzIFVTQiBkZXZpY2VzIHZpYVxcbiA1MjM6XFx0XFx0ICB0aGUgVVNCIGdhZGdldCBBUEkuIFVubGlrZSBtb3N0IGdhZGdldCBkcml2ZXJzLCBSYXcgR2FkZ2V0IGRvZXMgbm90XFxuIDUyNDpcXHRcXHQgIGltcGxlbWVudCBhbnkgY29uY3JldGUgVVNCIGZ1bmN0aW9ucyBpdHNlbGYgYnV0IHJlcXVpcmVzIHVzZXJzcGFjZVxcbiA1MjU6XFx0XFx0ICB0byBkbyB0aGF0LlxcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL3VzYi9yYXctZ2FkZ2V0LnJzdCBmb3IgZGV0YWlscy5cXG4gNTI4OlxcdFxcbiA1Mjk6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiA1MzA6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwicmF3X2dhZGdldFxcXCIuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjA3LjE2MjE3MTk0NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDIyMDc1NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmUtRXZhbHVhdGluZyBVU0JfRFVNTVlfSENEIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbywgSSdtIHRha2luZyBhbm90aGVyIGxvb2sgYXQgdGhpcy4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCB3YXMgY2xlYW4g4oCTIG5vIGRlcGVuZGVuY2llcyBmbGFnZ2VkIGluaXRpYWxseS4gSG93ZXZlciwgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZXNlIHRoaW5ncyBjYW4gYmUgZGVjZXB0aXZlbHkgc2ltcGxlIGF0IGZpcnN0IGdsYW5jZS4gSXQncyBhIGdvb2QgaGFiaXQgdG8gZG91YmxlLWNoZWNrLCBlc3BlY2lhbGx5IHdpdGggYSBwZXJpcGhlcmFsIGRyaXZlciBsaWtlIGEgZHVtbXkgaG9zdCBjb250cm9sbGVyLiBJIHdhbnQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHN1YnRsZSwgaGlkZGVuIGRlcGVuZGVuY2llcyBvbiBzaGFyZWQgcmVzb3VyY2VzLCBvciBldmVuIGFyY2hpdGVjdHVyYWwgYXNzdW1wdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gR290dGEga2VlcCBhIGxhc2VyIGZvY3VzIG9uIHRoaXMsIGFuZCB2ZXJpZnkgdGhlcmUgYXJlbid0IGFueSBpbXBsaWNpdCBsaW5rYWdlcyB0aGF0IGNvdWxkIGNyZWF0ZSBmdXR1cmUgaGVhZGFjaGVzLiBMZXQncyBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIHRydWx5IGlzb2xhdGVkLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgVVNCX0RVTU1ZX0hDRGAgbW9kdWxlIGFuZCBpdHMgYXNzb2NpYXRlZCBidWlsZCBjb25maWd1cmF0aW9ucyBhZ2FpbiB0byBlbGltaW5hdGUgKmFueSogcG90ZW50aWFsIGRlcGVuZGVuY3kgYW1iaWd1aXRpZXMuIFRpbWUgdG8gYmUgbWV0aWN1bG91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNzksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjEyLjU4NDI1MDc5N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDI4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI4OlxcdGNvbmZpZyBVU0JfRFVNTVlfSENEXFxuIDQyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiRHVtbXkgSENEIChERVZFTE9QTUVOVClcXFwiXFxuIDQzMDpcXHRcXHRkZXBlbmRzIG9uIFVTQj15IHx8IChVU0I9bSBcXHUwMDI2XFx1MDAyNiBVU0JfR0FER0VUPW0pXFxuIDQzMTpcXHRcXHRoZWxwXFxuIDQzMjpcXHRcXHQgIFRoaXMgaG9zdCBjb250cm9sbGVyIGRyaXZlciBlbXVsYXRlcyBVU0IsIGxvb3BpbmcgYWxsIGRhdGEgdHJhbnNmZXJcXG4gNDMzOlxcdFxcdCAgcmVxdWVzdHMgYmFjayB0byBhIFVTQiBcXFwiZ2FkZ2V0IGRyaXZlclxcXCIgaW4gdGhlIHNhbWUgaG9zdC4gIFRoZSBob3N0XFxuIDQzNDpcXHRcXHQgIHNpZGUgaXMgdGhlIGNvbnRyb2xsZXI7IHRoZSBnYWRnZXQgc2lkZSBpcyB0aGUgZGV2aWNlLiAgR2FkZ2V0IGRyaXZlcnNcXG4gNDM1OlxcdFxcdCAgY2FuIGJlIGhpZ2gsIGZ1bGwsIG9yIGxvdyBzcGVlZDsgYW5kIHRoZXkgaGF2ZSBhY2Nlc3MgdG8gZW5kcG9pbnRzXFxuIDQzNjpcXHRcXHQgIGxpa2UgdGhvc2UgZnJvbSBORVQyMjgwLCBQWEEyeHgsIG9yIFNBMTEwMCBoYXJkd2FyZS5cXG4gNDM3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNzoxMi41ODQzMjE0NjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcxMjYzNDM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqVVNCIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5SaWdodCwgdGhpcyBwcm9jZXNzIGlzIGNvbnRpbmdlbnQgb24gYFVTQmAgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCB0aGUgZmlyc3QgY3JpdGljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhhdCBgVVNCYCBpcyBlbmFibGVkIGFuZCBjb3JyZWN0bHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gV2UgY2FuJ3QgcHJvY2VlZCB3aXRob3V0IHRoYXQgZm91bmRhdGlvbmFsIHN1cHBvcnQuXG5cbk5leHQsIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBmaW5lciBkZXRhaWxzIG9mIGhvdyBgVVNCX0dBREdFVGAgaXMgc2V0IHVwLiBUbyBmdWxseSBldmFsdWF0ZSB0aGUgc2l0dWF0aW9uLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgVVNCX0dBREdFVGAuIEFyZSB0aGVyZSBvdGhlciBrZXJuZWwgbW9kdWxlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXQgcmVsaWVzIG9uPyBMZXQncyB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSBldmVyeXRoaW5nIG5lZWRlZCBpcyBpbiBwbGFjZS4gSSBoYXZlIHRvIGtub3cgYWxsIHRoZSBtb3ZpbmcgcGFydHMuIFRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIGFsbCB0aGUgcG90ZW50aWFsIHN0aWNraW5nIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjE4LjI5Njk1ODQzNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNzpcXHRtZW51Y29uZmlnIFVTQl9HQURHRVRcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgR2FkZ2V0IFN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRzZWxlY3QgVVNCX0NPTU1PTlxcbiAgMjA6XFx0XFx0c2VsZWN0IE5MU1xcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICAgVVNCIGlzIGEgaG9zdC9kZXZpY2UgcHJvdG9jb2wsIG9yZ2FuaXplZCB3aXRoIG9uZSBob3N0IChzdWNoIGFzIGFcXG4gIDIzOlxcdFxcdCAgIFBDKSBjb250cm9sbGluZyB1cCB0byAxMjcgcGVyaXBoZXJhbCBkZXZpY2VzLlxcbiAgMjQ6XFx0XFx0ICAgVGhlIFVTQiBoYXJkd2FyZSBpcyBhc3ltbWV0cmljLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gc2V0IHVwOlxcbiAgMjU6XFx0XFx0ICAgeW91IGNhbid0IGNvbm5lY3QgYSBcXFwidG8tdGhlLWhvc3RcXFwiIGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXFxuICAyNjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6MTguMjk3MDI0MzU0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5MDA4MzQzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBVU0JfR0FER0VUYCBjb25maWd1cmF0aW9uIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgcHJldHR5IGZsZXhpYmxlOyBubyBoYXJkIGRlcGVuZGVuY2llcyB0aGF0IEkgY2FuIHNwb3QgaW1tZWRpYXRlbHkuIEdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0IGZvciBhIGdhZGdldCBkcml2ZXIgY29yZS5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGBVU0JfR0FER0VUYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBvdmVyYXJjaGluZyBgVVNCYCBjb25maWd1cmF0aW9uIGl0c2VsZi4gS2VlcGluZyB0aG9zZSBpbiBtaW5kIGhlbHBzIG1lIGZyYW1lIHRoZSBzY29wZSBvZiB0aGlzLlxuXG5SaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgaW1wYWN0ZWQgaGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCBrZXkgc3ltYm9scyBhcmUgYmVpbmcgdG91Y2hlZCwgc3RhcnRpbmcgd2l0aCB0aGUgdXN1YWwgc3VzcGVjdHM6IGByYXdfaW9jdGxgLCBgcmF3X3JlbGVhc2VgLCBhbmQgYGdhZGdldF91bmJpbmRgLiBUaGV5IGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdG8gZXhhbWluZS5cblxuV2FpdCBhIHNlY29uZOKApiB0aGlzIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBnYWRnZXRfYmluZGAuIFRoYXQncyBhIGNyaXRpY2FsIHBvaW50IOKAkyBgZ2FkZ2V0X2JpbmRgIG9mdGVuIGludm9sdmVzIGluaXRpYWxpemF0aW9uIGFuZCBhdHRhY2htZW50IHRvIGEgc3BlY2lmaWMgVVNCIGNvbnRyb2xsZXIsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZm9jdXMgb24gdGhlIGNoYW5nZXMgdGhlcmUsIHNvIGxldCBtZSBkbyBhIHF1aWNrIHNjYW4gdG8gY29uZmlybSB0aGUgbW9kaWZpY2F0aW9uIGlzIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTU0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6MjUuMTk3ODYxNzlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MTE1MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldF9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTI1Nz1zdGF0aWMgdTggZ2V0X2VwX2FkZHIoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTI2OS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYzoyNzA6c3RhdGljIGludCBnYWRnZXRfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTI3MS1cXHRcXHRcXHRzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jPTMyMj1zdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy0zNDktXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6MzUwOlxcdC8qIE1hdGNoZXMga3JlZl9nZXQoKSBpbiBnYWRnZXRfYmluZCgpLiAqL1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTM1MS1cXHRrcmVmX3B1dChcXHUwMDI2ZGV2LVxcdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM9NDkzPXN0YXRpYyBpbnQgcmF3X2lvY3RsX2luaXQoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jLTU2NC1cXHRkZXYtXFx1MDAzZWRyaXZlci5kaXNjb25uZWN0ID0gZ2FkZ2V0X2Rpc2Nvbm5lY3Q7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmM6NTY1OlxcdGRldi1cXHUwMDNlZHJpdmVyLmJpbmQgPSBnYWRnZXRfYmluZDtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuYy01NjYtXFx0ZGV2LVxcdTAwM2Vkcml2ZXIudW5iaW5kID0gZ2FkZ2V0X3VuYmluZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6MjUuMjY1OTgxOTQ2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNzcyNjcwOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFVTQiBSYXcgR2FkZ2V0IERyaXZlciBTeW5jaHJvbml6YXRpb24gRml4ZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBvdmVyIHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGZpeCBsaWVzIHdpdGhpbiB0aGUgVVNCIHJhdyBnYWRnZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jYC4gIEkgY2FuIHNlZSB0aGF0IGBnYWRnZXRfYmluZGAgaGFzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGNydWNpYWwgdG8gbm90ZS4gIFRoZSBjaGFuZ2VzIHRoZXJlIGFwcGVhciB0byBiZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nIGR1cmluZyB0aGUgY29ubmVjdGlvbiBldmVudCwgYW5kIGltcG9ydGFudGx5LCB0aGV5IG5vdyBleHBsaWNpdGx5IGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZ2FkZ2V0IG1pZ2h0IGJlIGRldGFjaGVkIHdoaWxlIHRoZSBjb25uZWN0IGV2ZW50IGlzIGJlaW5nIHByb2Nlc3NlZCwgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGNoZWNrIGlmIGByYXdfaW9jdGxfcnVuYCB3YXMgbW9kaWZpZWQsIGJ1dCBpdCdzIG5vdCB0aGUgYWN0dWFsIGVudHJ5IHBvaW50LiBgcmF3X2lvY3RsYCAqaXMqIHRoZSBlbnRyeSBwb2ludCBmb3IgYWxsIGlvY3Rscywgd2hpY2ggaXMgbXVjaCBtb3JlIHJlbGV2YW50LiAgVGhlIHByb21wdCBzdWdnZXN0cyBwcmlvcml0aXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBJIGluaXRpYWxseSBjb25zaWRlcmVkIGxpc3Rpbmcgc3BlY2lmaWMgaGFuZGxlcnMgbGlrZSBgcmF3X2lvY3RsX2VwMF93cml0ZWAsIGJ1dCBnaXZlbiB0aGF0IGl04oCZcyBzbWFsbCwgaXTigJlzIHByb2JhYmx5IGlubGluZWQuIEkgYW0gZXJyaW5nIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24uIGByYXdfaW9jdGxgIGlzIHRoZSBkZWZpbml0aXZlIGNob2ljZS5cblxuTGV0J3Mgc2Vl4oCmIEkndmUgYWxzbyBpZGVudGlmaWVkIGByYXdfcmVsZWFzZWAgYXMgbW9kaWZpZWQuIFNpbmNlIHRoaXMgaXMgYWJvdXQgZnJlZWluZyByZXNvdXJjZXMsIHdoaWNoIGNhbiBjcmVhdGUgcmFjZXMsIHRoYXQncyBpbXBvcnRhbnQuIFRoZSBjb3JyZXNwb25kaW5nIGBnYWRnZXRfdW5iaW5kYCBpcyBhbHNvIGNyaXRpY2FsLCBvZiBjb3Vyc2UsIGJlY2F1c2UgdGhhdCdzIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyBkaXNjb25uZWN0ZWQuIFRob3NlIGZ1bmN0aW9uIGNhbGxzIChgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYGdhZGdldF9iaW5kYCwgYGdhZGdldF91bmJpbmRgKSBhcmUgdGhlIGtleSwgdGhlbi5cblxuSSd2ZSBhbHNvIGp1c3QgaWRlbnRpZmllZCBgcmF3X3Byb2Nlc3NfZXAwX2lvYCBhbmQgYHJhd19wcm9jZXNzX2VwX2lvYCBhcyBtb2RpZmllZCwgYWx0aG91Z2ggdGhleSdyZSBzdGF0aWMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN5bmNocm9uaXphdGlvbiB2aWEgdGhlIGByd19zZW1hcGhvcmVgIChgcndzZW1gKSB0byBwcm90ZWN0IHRoZSBgZGV2LVx1MDAzZWdhZGdldGAgcG9pbnRlciBhbmQgZW5kcG9pbnQgb3BlcmF0aW9ucy4gIEnigJl2ZSByZS1ldmFsdWF0ZWQgYW5kIGRlY2lkZWQgdG8ga2VlcCB0aGUgbGlzdCBvZiBgcmF3X2lvY3RsYCwgYHJhd19yZWxlYXNlYCwgYGdhZGdldF9iaW5kYCwgYW5kIGBnYWRnZXRfdW5iaW5kYCBhcyB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmfigKYgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuICBJdCdzIGEgcmF3IGdhZGdldCBkcml2ZXIsIHNvIGl0J3MgbGlrZWx5IGFjY2Vzc2VkIGZyb20gdXNlcnNwYWNlLiBgVVNCX1JBV19HQURHRVRgIHNlZW1zIHRvIGJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBtb2R1bGUsIGFuZCBgVVNCX0RVTU1ZX0hDRGAgaXMgdGhlIGR1bW15IEhDRC4gSXQgaXMgdXNlZCBmb3IgZnV6emluZy4gYFVTQl9HQURHRVRgIGlzIHRoZSBnYWRnZXQgc3Vic3lzdGVtLCBhbmQgYFVTQmAgcmVwcmVzZW50cyB0aGUgdW5kZXJseWluZyBVU0Igc3Vic3lzdGVtLiAgVGhlcmVmb3JlLCBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGBVU0JfR0FER0VUYCwgYW5kIGBVU0JgIGFyZSBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXIuXG5cblNvLCBoZXJlJ3MgdGhlIGdpc3Q6IHRoZSBwYXRjaCBhZGRyZXNzZXMgc3luY2hyb25pemF0aW9uIGlzc3VlcyBpbiB0aGUgcmF3IGdhZGdldCBkcml2ZXIgYnkgaW50cm9kdWNpbmcgdGhlIGByd19zZW1hcGhvcmVgLiAgSXQgbW9kaWZpZXMgYGdhZGdldF9iaW5kYCwgYGdhZGdldF91bmJpbmRgLCBgcmF3X3JlbGVhc2VgLCBhbmQgc2V2ZXJhbCBpb2N0bCBoYW5kbGVycywgd2hpY2ggYXJlIHJlbGV2YW50IGZvciBmdXp6aW5nLCBieSBhY3F1aXJpbmcgdGhlIHNlbWFwaG9yZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiAgVGhlc2UgY2hhbmdlcyBhcmUgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IHRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBVU0IgZ2FkZ2V0IGRyaXZlciByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIG9mdGVuIGZ1enplZCBieSBzeXprYWxsZXIgdmlhIGBVU0JfRFVNTVlfSENEYC5cblxuVGhlIHByaW1hcnkgc3ltYm9scyBvZiBpbnRlcmVzdCBhcmU6IGByYXdfaW9jdGxgLCBgcmF3X3JlbGVhc2VgLCBgZ2FkZ2V0X2JpbmRgLCBgZ2FkZ2V0X3VuYmluZGAuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlOiBgVVNCX1JBV19HQURHRVRgLCBgVVNCX0RVTU1ZX0hDRGAsIGBVU0JfR0FER0VUYCwgYW5kIGBVU0JgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzc3MSwiT3V0cHV0VG9rZW5zIjoyMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjE6MTc6NDYuMDM4NjU2OTg0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2OTUwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9SQVdfR0FER0VUXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCIsXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfaW9jdGxcIixcbiAgICBcInJhd19yZWxlYXNlXCIsXG4gICAgXCJnYWRnZXRfYmluZFwiLFxuICAgIFwiZ2FkZ2V0X3VuYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgaW4gdGhlIFVTQiByYXcgZ2FkZ2V0IGRyaXZlciAoZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmMpIGJ5IGludHJvZHVjaW5nIGEgbmV3IHJ3X3NlbWFwaG9yZSAocndzZW0pIHRvIHByb3RlY3QgdGhlIGRldi1cXHUwMDNlZ2FkZ2V0IHBvaW50ZXIgYW5kIGVuZHBvaW50IG9wZXJhdGlvbnMuIEl0IG1vZGlmaWVzIGdhZGdldF9iaW5kLCBnYWRnZXRfdW5iaW5kLCByYXdfcmVsZWFzZSwgYW5kIHNldmVyYWwgaW9jdGwgaGFuZGxlcnMgdG8gcHJvcGVybHkgYWNxdWlyZSB0aGUgc2VtYXBob3JlIGFuZCBhdm9pZCByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIHRoZSBnYWRnZXQgaXMgdW5ib3VuZCBvciBlbmRwb2ludHMgYXJlIGRpc2FibGVkLiBTaW5jZSB0aGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgVVNCIGdhZGdldCBkcml2ZXIgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIChvZnRlbiBmdXp6ZWQgYnkgc3l6a2FsbGVyIHZpYSBVU0JfRFVNTVlfSENEKSwgdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfUkFXX0dBREdFVFwiLFxuICAgIFwiVVNCX0RVTU1ZX0hDRFwiLFxuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmF3X2lvY3RsXCIsXG4gICAgXCJyYXdfcmVsZWFzZVwiLFxuICAgIFwiZ2FkZ2V0X2JpbmRcIixcbiAgICBcImdhZGdldF91bmJpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGluIHRoZSBVU0IgcmF3IGdhZGdldCBkcml2ZXIgKGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jKSBieSBpbnRyb2R1Y2luZyBhIG5ldyByd19zZW1hcGhvcmUgKHJ3c2VtKSB0byBwcm90ZWN0IHRoZSBkZXYtXFx1MDAzZWdhZGdldCBwb2ludGVyIGFuZCBlbmRwb2ludCBvcGVyYXRpb25zLiBJdCBtb2RpZmllcyBnYWRnZXRfYmluZCwgZ2FkZ2V0X3VuYmluZCwgcmF3X3JlbGVhc2UsIGFuZCBzZXZlcmFsIGlvY3RsIGhhbmRsZXJzIHRvIHByb3Blcmx5IGFjcXVpcmUgdGhlIHNlbWFwaG9yZSBhbmQgYXZvaWQgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgd2hlbiB0aGUgZ2FkZ2V0IGlzIHVuYm91bmQgb3IgZW5kcG9pbnRzIGFyZSBkaXNhYmxlZC4gU2luY2UgdGhpcyBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIFVTQiBnYWRnZXQgZHJpdmVyIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSAob2Z0ZW4gZnV6emVkIGJ5IHN5emthbGxlciB2aWEgVVNCX0RVTU1ZX0hDRCksIHRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb25jdXJyZW5jeSBjb250cm9sIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjQ2LjExODM2MDg3OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNTk2OTM1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNzo0Ni4xMTkwODA3ODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEyNTg5Njg2NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYHJ3c2VtYCkgdG8gcHJvdGVjdCBgZGV2LVxcdTAwM2VnYWRnZXRgIGFuZCBlbmRwb2ludCByZXF1ZXN0cyBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBgZ2FkZ2V0X3VuYmluZCgpYC4gVGhpcyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gZW5kcG9pbnRzIGFyZSBhY2Nlc3NlZCBvciByZXF1ZXN0cyBhcmUgcXVldWVkL2RlcXVldWVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgdW5iaW5kaW5nLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKGxpa2UgTE9DS0RFUCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGFsbG9jYXRpb25zIG9yIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmRkZTY2M2M0Y2E5OWVhYjI3ZGM2N2VkZTFlMzI1ZGZkODk2OThmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAyMToxNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbmluZGV4IDRmZWJmOGRhYzdjYTUuLjEzOWEwZmEwY2VlYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L3Jhd19nYWRnZXQuY1xuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9yYXdfZ2FkZ2V0LmNcbkBAIC0xNjAsNiArMTYwLDcgQEAgZW51bSBkZXZfc3RhdGUge1xuIHN0cnVjdCByYXdfZGV2IHtcbiBcdHN0cnVjdCBrcmVmXHRcdFx0Y291bnQ7XG4gXHRzcGlubG9ja190XHRcdFx0bG9jaztcbitcdHN0cnVjdCByd19zZW1hcGhvcmVcdFx0cndzZW07XG4gXG4gXHRjb25zdCBjaGFyXHRcdFx0KnVkY19uYW1lO1xuIFx0c3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyXHRkcml2ZXI7XG5AQCAtMTk2LDYgKzE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldiAqZGV2X25ldyh2b2lkKVxuIFx0LyogTWF0Y2hlcyBrcmVmX3B1dCgpIGluIHJhd19yZWxlYXNlKCkuICovXG4gXHRrcmVmX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWNvdW50KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbitcdGluaXRfcndzZW0oXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZkZXYtXHUwMDNlZXAwX2RvbmUpO1xuIFx0cmF3X2V2ZW50X3F1ZXVlX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXF1ZXVlKTtcbiBcdGRldi1cdTAwM2Vkcml2ZXJfaWRfbnVtYmVyID0gLTE7XG5AQCAtMjEyLDIwICsyMTQsNyBAQCBzdGF0aWMgdm9pZCBkZXZfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdGtmcmVlKGRldi1cdTAwM2Vkcml2ZXIuZHJpdmVyLm5hbWUpO1xuIFx0aWYgKGRldi1cdTAwM2Vkcml2ZXJfaWRfbnVtYmVyIFx1MDAzZT0gMClcbiBcdFx0aWRhX2ZyZWUoXHUwMDI2ZHJpdmVyX2lkX251bWJlcnMsIGRldi1cdTAwM2Vkcml2ZXJfaWRfbnVtYmVyKTtcbi1cdGlmIChkZXYtXHUwMDNlcmVxKSB7XG4tXHRcdGlmIChkZXYtXHUwMDNlZXAwX3VyYl9xdWV1ZWQpXG4tXHRcdFx0dXNiX2VwX2RlcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuLVx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbi1cdH1cbiBcdHJhd19ldmVudF9xdWV1ZV9kZXN0cm95KFx1MDAyNmRldi1cdTAwM2VxdWV1ZSk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlZXBzX251bTsgaSsrKSB7XG4tXHRcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR1c2JfZXBfZGlzYWJsZShkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbi1cdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChkZXYtXHUwMDNlZXBzW2ldLmVwLCBkZXYtXHUwMDNlZXBzW2ldLnJlcSk7XG4tXHRcdGtmcmVlKGRldi1cdTAwM2VlcHNbaV0uZXAtXHUwMDNlZGVzYyk7XG4tXHRcdGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcbi1cdH1cbiBcdGtmcmVlKGRldik7XG4gfVxuIFxuQEAgLTMxNiw2ICszMDUsMTEgQEAgc3RhdGljIGludCBnYWRnZXRfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LFxuIFx0cmV0ID0gcmF3X3F1ZXVlX2V2ZW50KGRldiwgVVNCX1JBV19FVkVOVF9DT05ORUNULCAwLCBOVUxMKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBxdWV1ZSBjb25uZWN0IGV2ZW50XFxuXCIpO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRkZXYtXHUwMDNlZ2FkZ2V0ID0gTlVMTDtcbitcdFx0ZGV2LVx1MDAzZXJlcSA9IE5VTEw7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0dXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCByZXEpO1xuIFx0XHRzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC0zMjgsOCArMzIyLDMxIEBAIHN0YXRpYyBpbnQgZ2FkZ2V0X2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcbiBzdGF0aWMgdm9pZCBnYWRnZXRfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG4ge1xuIFx0c3RydWN0IHJhd19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCBpO1xuIFxuIFx0c2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7XG4rXG4rXHRkb3duX3dyaXRlKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0ZGV2LVx1MDAzZXN0YXRlID0gU1RBVEVfREVWX0ZBSUxFRDtcbitcdGRldi1cdTAwM2VnYWRnZXQgPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZWVwc19udW07IGkrKykge1xuK1x0XHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSAhPSBTVEFURV9FUF9ESVNBQkxFRCkge1xuK1x0XHRcdHVzYl9lcF9kaXNhYmxlKGRldi1cdTAwM2VlcHNbaV0uZXApO1xuK1x0XHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuK1x0XHRcdGtmcmVlKGRldi1cdTAwM2VlcHNbaV0uZXAtXHUwMDNlZGVzYyk7XG4rXHRcdFx0ZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoZGV2LVx1MDAzZXJlcSkge1xuK1x0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHRkZXYtXHUwMDNlcmVxID0gTlVMTDtcbitcdH1cbitcdHVwX3dyaXRlKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXG4gXHQvKiBNYXRjaGVzIGtyZWZfZ2V0KCkgaW4gZ2FkZ2V0X2JpbmQoKS4gKi9cbiBcdGtyZWZfcHV0KFx1MDAyNmRldi1cdTAwM2Vjb3VudCwgZGV2X2ZyZWUpO1xuIH1cbkBAIC00NTAsMTAgKzQ2Nyw2IEBAIHN0YXRpYyBpbnQgcmF3X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdGRldi1cdTAwM2VzdGF0ZSA9IFNUQVRFX0RFVl9DTE9TRUQ7XG4tXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRnb3RvIG91dF9wdXQ7XG4tXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWdhZGdldF9yZWdpc3RlcmVkKVxuIFx0XHR1bnJlZ2lzdGVyID0gdHJ1ZTtcbiBcdGRldi1cdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuQEAgLTYzNywxMSArNjUwLDExIEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2V2ZW50X2ZldGNoKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXG4gXHRldmVudCA9IHJhd19ldmVudF9xdWV1ZV9mZXRjaChcdTAwMjZkZXYtXHUwMDNlcXVldWUpO1xuIFx0aWYgKFBUUl9FUlIoZXZlbnQpID09IC1FSU5UUikge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImV2ZW50IGZldGNoaW5nIGludGVycnVwdGVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZXZlbnQgZmV0Y2hpbmcgaW50ZXJydXB0ZWRcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVFI7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKGV2ZW50KSkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBmZXRjaCBldmVudFxcblwiKTtcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBmZXRjaCBldmVudFxcblwiKTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0ZGV2LVx1MDAzZXN0YXRlID0gU1RBVEVfREVWX0ZBSUxFRDtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuQEAgLTY5OCwxMyArNzExLDEzIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXAwX2lvKHN0cnVjdCByYXdfZGV2ICpkZXYsIHN0cnVjdCB1c2JfcmF3X2VwX2lvICppbyxcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcDBfdXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIHVyYiBhbHJlYWR5IHF1ZXVlZFxcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoKGluIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZWVwMF9pbl9wZW5kaW5nKSB8fFxuIFx0XHRcdCghaW4gXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNlZXAwX291dF9wZW5kaW5nKSkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIHdyb25nIGRpcmVjdGlvblxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIHdyb25nIGRpcmVjdGlvblxcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG5AQCAtNzI1LDkgKzczOCwxNyBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRkZXYtXHUwMDNlZXAwX3VyYl9xdWV1ZWQgPSB0cnVlO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuK1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XG4rXHR9XG4gXHRyZXQgPSB1c2JfZXBfcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEsIEdGUF9LRVJORUwpO1xuK1x0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XG5AQCAtNzM1LDggKzc1NiwxMSBAQCBzdGF0aWMgaW50IHJhd19wcm9jZXNzX2VwMF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXG4gXHRyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoXHUwMDI2ZGV2LVx1MDAzZWVwMF9kb25lKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJ3YWl0IGludGVycnVwdGVkXFxuXCIpO1xuLVx0XHR1c2JfZXBfZGVxdWV1ZShkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWVwMCwgZGV2LVx1MDAzZXJlcSk7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJ3YWl0IGludGVycnVwdGVkXFxuXCIpO1xuK1x0XHRkb3duX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdFx0aWYgKGRldi1cdTAwM2VnYWRnZXQpXG4rXHRcdFx0dXNiX2VwX2RlcXVldWUoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZGV2LVx1MDAzZWVwMF9kb25lKTtcbiBcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0aWYgKGRldi1cdTAwM2VlcDBfc3RhdHVzID09IC1FQ09OTlJFU0VUKVxuQEAgLTgxMiwxOSArODM2LDE5IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwMF9zdGFsbChzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwMF91cmJfcXVldWVkKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgdXJiIGFscmVhZHkgcXVldWVkXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmICghZGV2LVx1MDAzZWVwMF9pbl9wZW5kaW5nIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZWVwMF9vdXRfcGVuZGluZykge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIG5vIHJlcXVlc3QgcGVuZGluZ1xcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIG5vIHJlcXVlc3QgcGVuZGluZ1xcblwiKTtcbiBcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHRyZXQgPSB1c2JfZXBfc2V0X2hhbHQoZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VlcDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfc2V0X2hhbHQgcmV0dXJuZWQgJWRcXG5cIiwgcmV0KTtcbiBcbiBcdGlmIChkZXYtXHUwMDNlZXAwX2luX3BlbmRpbmcpXG5AQCAtODg0LDEzICs5MDgsMTMgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZW5hYmxlKHN0cnVjdCByYXdfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4gXHRcdGVwLVx1MDAzZWVwLVx1MDAzZWRlc2MgPSBkZXNjO1xuIFx0XHRyZXQgPSB1c2JfZXBfZW5hYmxlKGVwLVx1MDAzZWVwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XCJmYWlsLCB1c2JfZXBfZW5hYmxlIHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4gXHRcdFx0Z290byBvdXRfZnJlZTtcbiBcdFx0fVxuIFx0XHRlcC1cdTAwM2VyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcC1cdTAwM2VlcCwgR0ZQX0FUT01JQyk7XG4gXHRcdGlmICghZXAtXHUwMDNlcmVxKSB7XG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9hbGxvY19yZXF1ZXN0IGZhaWxlZFxcblwiKTtcbiBcdFx0XHR1c2JfZXBfZGlzYWJsZShlcC1cdTAwM2VlcCk7XG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC05MDMsMTAgKzkyNywxMCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF9lcF9lbmFibGUoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdH1cbiBcbiBcdGlmICghZXBfcHJvcHNfbWF0Y2hlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGJhZCBlbmRwb2ludCBkZXNjcmlwdG9yXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgYmFkIGVuZHBvaW50IGRlc2NyaXB0b3JcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHR9IGVsc2Uge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIG5vIGVuZHBvaW50cyBhdmFpbGFibGVcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBubyBlbmRwb2ludHMgYXZhaWxhYmxlXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUJVU1k7XG4gXHR9XG4gXG5AQCAtOTM5LDE4ICs5NjMsMTggQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAoZGV2LVx1MDAzZWVwc1tpXS5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZykge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIGRpc2FibGUgYWxyZWFkeSBpbiBwcm9ncmVzc1xcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0udXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtOTU4LDEzICs5ODIsMjUgQEAgc3RhdGljIGludCByYXdfaW9jdGxfZXBfZGlzYWJsZShzdHJ1Y3QgcmF3X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIFx0ZGV2LVx1MDAzZWVwc1tpXS5kaXNhYmxpbmcgPSB0cnVlO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuK1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbitcdFx0cmV0ID0gLUVOT0RFVjtcbitcdFx0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRkZXYtXHUwMDNlZXBzW2ldLmRpc2FibGluZyA9IGZhbHNlO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4gXHR1c2JfZXBfZGlzYWJsZShkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbitcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdHVzYl9lcF9mcmVlX3JlcXVlc3QoZGV2LVx1MDAzZWVwc1tpXS5lcCwgZGV2LVx1MDAzZWVwc1tpXS5yZXEpO1xuIFx0a2ZyZWUoZGV2LVx1MDAzZWVwc1tpXS5lcC1cdTAwM2VkZXNjKTtcbiBcdGRldi1cdTAwM2VlcHNbaV0uc3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDtcbiBcdGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nID0gZmFsc2U7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRyZXR1cm4gcmV0O1xuIFxuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG5AQCAtOTk0LDI0ICsxMDMwLDI0IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChkZXYtXHUwMDNlZXBzW2ldLnN0YXRlID09IFNUQVRFX0VQX0RJU0FCTEVEKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCBlbmRwb2ludCBpcyBub3QgZW5hYmxlZFxcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0uZGlzYWJsaW5nKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgZGlzYWJsZSBpcyBpbiBwcm9ncmVzc1xcblwiKTtcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGRldi1cdTAwM2VlcHNbaV0udXJiX3F1ZXVlZCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHdhaXRpbmcgZm9yIHVyYiBjb21wbGV0aW9uXFxuXCIpO1xuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXHRpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhkZXYtXHUwMDNlZXBzW2ldLmVwLVx1MDAzZWRlc2MpKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsXG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgY2FuJ3QgaGFsdC93ZWRnZSBJU08gZW5kcG9pbnRcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xMDIwLDE3ICsxMDU2LDE3IEBAIHN0YXRpYyBpbnQgcmF3X2lvY3RsX2VwX3NldF9jbGVhcl9oYWx0X3dlZGdlKHN0cnVjdCByYXdfZGV2ICpkZXYsXG4gXHRpZiAoc2V0IFx1MDAyNlx1MDAyNiBoYWx0KSB7XG4gXHRcdHJldCA9IHVzYl9lcF9zZXRfaGFsdChkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgdXNiX2VwX3NldF9oYWx0IHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4gXHR9IGVsc2UgaWYgKCFzZXQgXHUwMDI2XHUwMDI2IGhhbHQpIHtcbiBcdFx0cmV0ID0gdXNiX2VwX2NsZWFyX2hhbHQoZGV2LVx1MDAzZWVwc1tpXS5lcCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldixcbitcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9jbGVhcl9oYWx0IHJldHVybmVkICVkXFxuXCIsIHJldCk7XG4gXHR9IGVsc2UgaWYgKHNldCBcdTAwMjZcdTAwMjYgIWhhbHQpIHtcbiBcdFx0cmV0ID0gdXNiX2VwX3NldF93ZWRnZShkZXYtXHUwMDNlZXBzW2ldLmVwKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFwiZmFpbCwgdXNiX2VwX3NldF93ZWRnZSByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0fVxuIFxuQEAgLTEwNzUsMjkgKzExMTEsMjkgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGlmIChpby1cdTAwM2VlcCBcdTAwM2U9IGRldi1cdTAwM2VlcHNfbnVtKSB7XG4tXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWdhZGdldC1cdTAwM2VkZXYsIFwiZmFpbCwgaW52YWxpZCBlbmRwb2ludFxcblwiKTtcbitcdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGludmFsaWQgZW5kcG9pbnRcXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcdGVwID0gXHUwMDI2ZGV2LVx1MDAzZWVwc1tpby1cdTAwM2VlcF07XG4gXHRpZiAoZXAtXHUwMDNlc3RhdGUgIT0gU1RBVEVfRVBfRU5BQkxFRCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcImZhaWwsIGVuZHBvaW50IGlzIG5vdCBlbmFibGVkXFxuXCIpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwiZmFpbCwgZW5kcG9pbnQgaXMgbm90IGVuYWJsZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGVwLVx1MDAzZWRpc2FibGluZykge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIGVuZHBvaW50IGlzIGFscmVhZHkgYmVpbmcgZGlzYWJsZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGVwLVx1MDAzZXVyYl9xdWV1ZWQpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCB1cmIgYWxyZWFkeSBxdWV1ZWRcXG5cIik7XG4gXHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFx0aWYgKGluICE9IHVzYl9lbmRwb2ludF9kaXJfaW4oZXAtXHUwMDNlZXAtXHUwMDNlZGVzYykpIHtcbi1cdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlZ2FkZ2V0LVx1MDAzZWRldiwgXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXG5cIik7XG4rXHRcdGRldl9kYmcoZGV2LVx1MDAzZWRldiwgXCJmYWlsLCB3cm9uZyBkaXJlY3Rpb25cXG5cIik7XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbkBAIC0xMTExLDkgKzExNDcsMTcgQEAgc3RhdGljIGludCByYXdfcHJvY2Vzc19lcF9pbyhzdHJ1Y3QgcmF3X2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3Jhd19lcF9pbyAqaW8sXG4gXHRlcC1cdTAwM2V1cmJfcXVldWVkID0gdHJ1ZTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbitcdGRvd25fcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuK1x0aWYgKCFkZXYtXHUwMDNlZ2FkZ2V0KSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0Z290byBvdXRfcXVldWVfZmFpbGVkO1xuK1x0fVxuIFx0cmV0ID0gdXNiX2VwX3F1ZXVlKGVwLVx1MDAzZWVwLCBlcC1cdTAwM2VyZXEsIEdGUF9LRVJORUwpO1xuK1x0dXBfcmVhZChcdTAwMjZkZXYtXHUwMDNlcndzZW0pO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LFxuK1x0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcImZhaWwsIHVzYl9lcF9xdWV1ZSByZXR1cm5lZCAlZFxcblwiLCByZXQpO1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRnb3RvIG91dF9xdWV1ZV9mYWlsZWQ7XG5AQCAtMTEyMSw4ICsxMTY1LDExIEBAIHN0YXRpYyBpbnQgcmF3X3Byb2Nlc3NfZXBfaW8oc3RydWN0IHJhd19kZXYgKmRldiwgc3RydWN0IHVzYl9yYXdfZXBfaW8gKmlvLFxuIFxuIFx0cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRvbmUpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRkZXZfZGJnKFx1MDAyNmRldi1cdTAwM2VnYWRnZXQtXHUwMDNlZGV2LCBcIndhaXQgaW50ZXJydXB0ZWRcXG5cIik7XG4tXHRcdHVzYl9lcF9kZXF1ZXVlKGVwLVx1MDAzZWVwLCBlcC1cdTAwM2VyZXEpO1xuK1x0XHRkZXZfZGJnKGRldi1cdTAwM2VkZXYsIFwid2FpdCBpbnRlcnJ1cHRlZFxcblwiKTtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRcdGlmIChkZXYtXHUwMDNlZ2FkZ2V0KVxuK1x0XHRcdHVzYl9lcF9kZXF1ZXVlKGVwLVx1MDAzZWVwLCBlcC1cdTAwM2VyZXEpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2ZG9uZSk7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRldi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGlmIChlcC1cdTAwM2VzdGF0dXMgPT0gLUVDT05OUkVTRVQpXG5AQCAtMTIxNSwxMiArMTI2MiwxOCBAQCBzdGF0aWMgaW50IHJhd19pb2N0bF92YnVzX2RyYXcoc3RydWN0IHJhd19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkZXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0ZG93bl9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4gXHRpZiAoIWRldi1cdTAwM2VnYWRnZXQpIHtcbi1cdFx0ZGV2X2RiZyhkZXYtXHUwMDNlZGV2LCBcImZhaWwsIGdhZGdldCBpcyBub3QgYm91bmRcXG5cIik7XG4tXHRcdHJldCA9IC1FQlVTWTtcbi1cdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHR1cF9yZWFkKFx1MDAyNmRldi1cdTAwM2Vyd3NlbSk7XG4rXHRcdHJldHVybiByZXQ7XG4gXHR9XG4tXHR1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtXHUwMDNlZ2FkZ2V0LCAyICogdmFsdWUpO1xuK1x0cmV0ID0gdXNiX2dhZGdldF92YnVzX2RyYXcoZGV2LVx1MDAzZWdhZGdldCwgMiAqIHZhbHVlKTtcbitcdHVwX3JlYWQoXHUwMDI2ZGV2LVx1MDAzZXJ3c2VtKTtcbitcbitcdHJldHVybiByZXQ7XG4gXG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGV2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIxOjE3OjQ2LjExOTA4MTYzOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI1ODk0MTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBSYXcgR2FkZ2V0IERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvcmF3X2dhZGdldC5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGEgY29uY3VycmVuY3kgaXNzdWUsIHNwZWNpZmljYWxseSBhIHJhY2UgY29uZGl0aW9uIGFyb3VuZCB0aGUgYGRldi1cdTAwM2VnYWRnZXRgIHBvaW50ZXIgYW5kIGVuZHBvaW50IHJlcXVlc3RzLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBgZ2FkZ2V0X3VuYmluZGAgY291bGQgYmUgcnVubmluZyBjb25jdXJyZW50bHkgd2l0aCBvdGhlciBvcGVyYXRpb25zLCBsZWFkaW5nIHRvIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gYWNjZXNzaW5nIGBkZXYtXHUwMDNlZ2FkZ2V0YCBvciBpdHMgYXNzb2NpYXRlZCByZXF1ZXN0cyAoYGRldi1cdTAwM2VyZXFgLCBgZGV2LVx1MDAzZWVwc1tpXS5yZXFgKS5cblxuVGhlIHNvbHV0aW9uIGlzIGNsZWFyOiBpbnRyb2R1Y2UgYSByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYHJ3c2VtYCkgd2l0aGluIHRoZSBgc3RydWN0IHJhd19kZXZgLiBUaGlzIHdpbGwgYWN0IGFzIG91ciBsb2NraW5nIG1lY2hhbmlzbSB0byBwcm90ZWN0IHRob3NlIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgcGF0Y2gncyBjaGFuZ2VzIHJlZmxlY3QgdGhpczpcblxuMS4gIEEgbmV3IGByd3NlbWAgaXMgYWRkZWQgdG8gdGhlIGByYXdfZGV2YCBzdHJ1Y3QuXG4yLiAgYGRldl9uZXcoKWAgaW5pdGlhbGl6ZXMgdGhlIHNlbWFwaG9yZS5cbjMuICBgZGV2X2ZyZWUoKWAgbm93IGRlZmVycyByZXF1ZXN0IGNsZWFudXAsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSdyZSBtb3ZpbmcgaXQgdG8gYGdhZGdldF91bmJpbmRgIG5vdy5cbjQuICBgZ2FkZ2V0X2JpbmQoKWAgc2VlcyBhIGNoYW5nZSB0byBoYW5kbGUgYHJhd19xdWV1ZV9ldmVudGAgZmFpbGluZyBieSBjbGVhbmluZyB1cCB0aGUgYGRldi1cdTAwM2VyZXFgLlxuNS4gIGBnYWRnZXRfdW5iaW5kKClgIGlzIHdoZXJlIHRoZSBjb3JlIGxvY2tpbmcgaGFwcGVucy4gSXQgdGFrZXMgYSB3cml0ZSBsb2NrIChgZG93bl93cml0ZWApIHRvIHNhZmVseSBzZXQgYGRldi1cdTAwM2VnYWRnZXRgIHRvIGBOVUxMYCwgZGlzYWJsZSB0aGUgZW5kcG9pbnRzLCBmcmVlIHRoZSByZXF1ZXN0cywgYW5kIHNldCBgZGV2LVx1MDAzZXJlcSA9IE5VTExgLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBzZWN0aW9uIHdlIG5lZWQgdG8gcHJvdGVjdC5cbjYuICBTZXZlcmFsIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGByYXdfcmVsZWFzZSgpYCwgYHJhd19pb2N0bF9ldmVudF9mZXRjaGAsIGByYXdfcHJvY2Vzc19lcDBfaW9gLCBgcmF3X2lvY3RsX2VwX2Rpc2FibGVgLCBgcmF3X3Byb2Nlc3NfZXBfaW9gLCBhbmQgYHJhd19pb2N0bF92YnVzX2RyYXdgLCBhbGwgYWNxdWlyZSBhIHJlYWQgbG9jayAoYGRvd25fcmVhZGApIGJlZm9yZSBhY2Nlc3NpbmcgYGRldi1cdTAwM2VnYWRnZXRgIG9yIHF1ZXVpbmcvZGVxdWV1aW5nIHJlcXVlc3RzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGV5IGRvbid0IHN0ZXAgb24gYGdhZGdldF91bmJpbmRgJ3MgdG9lcy5cblxuVGhlIG92ZXJhbGwgZ29hbCBpcyB0byBlbGltaW5hdGUgcG90ZW50aWFsIFVBRiBhbmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBieSBlbnN1cmluZyBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzIHRvIGBkZXYtXHUwMDNlZ2FkZ2V0YCBhbmQgaXRzIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBJIGNhbiBzZWUgdGhlIGxvY2tpbmcgc2NoZW1lIGlzIHJvYnVzdCBoZXJlLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgKm5ldyogcHJvYmxlbXMsIGxpa2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIEEgcXVpY2sgc2NhbiBvZiB0aGUgcGF0Y2ggcmV2ZWFscyBub3RoaW5nIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBjb25jZXJuLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgcGFzc2VkIHRvIHVzZXJzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGFyZSBhcHBhcmVudC4gR2l2ZW4gdGhhdCB0aGUgZml4IGlzIGZvY3VzZWQgc29sZWx5IG9uIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nLCBLQVNBTiBhbmQgTE9DS0RFUCBhcmUgdGhlIGFwcHJvcHJpYXRlIHRvb2xzIHRvIGxvb2sgZm9yIFVBRiBvciBkYXRhIHJhY2VzLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCdzIGEgY2xlYW4gZml4IGZvciBhIGNvbmN1cnJlbmN5IGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzNCwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMToxNzo1Ny4zNzgwMjcxNTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZWFkLXdyaXRlIHNlbWFwaG9yZSAoYHJ3c2VtYCkgdG8gcHJvdGVjdCBgZGV2LVxcdTAwM2VnYWRnZXRgIGFuZCBlbmRwb2ludCByZXF1ZXN0cyBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzIGR1cmluZyBgZ2FkZ2V0X3VuYmluZCgpYC4gVGhpcyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgbGVhZCB0byBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdoZW4gZW5kcG9pbnRzIGFyZSBhY2Nlc3NlZCBvciByZXF1ZXN0cyBhcmUgcXVldWVkL2RlcXVldWVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgdW5iaW5kaW5nLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhbmQgY29uY3VycmVuY3kgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgKGxpa2UgTE9DS0RFUCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IGFsbG9jYXRpb25zIG9yIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVhZC13cml0ZSBzZW1hcGhvcmUgKGByd3NlbWApIHRvIHByb3RlY3QgYGRldi1cXHUwMDNlZ2FkZ2V0YCBhbmQgZW5kcG9pbnQgcmVxdWVzdHMgZnJvbSBjb25jdXJyZW50IGFjY2VzcyBkdXJpbmcgYGdhZGdldF91bmJpbmQoKWAuIFRoaXMgZml4ZXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gVXNlLUFmdGVyLUZyZWUgKFVBRikgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyB3aGVuIGVuZHBvaW50cyBhcmUgYWNjZXNzZWQgb3IgcmVxdWVzdHMgYXJlIHF1ZXVlZC9kZXF1ZXVlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHVuYmluZGluZy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIGNvbmN1cnJlbmN5IGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIChsaWtlIExPQ0tERVApLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBhbGxvY2F0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowzk92h[1] Phase: Succeeded StartedAt: 2026-08-08 21:18:08 +0000 UTC FinishedAt: 2026-08-08 21:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 21:18:08 +0000 UTC FinishedAt: 2026-08-08 21:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2] Phase: Succeeded StartedAt: 2026-08-08 21:18:08 +0000 UTC FinishedAt: 2026-08-09 01:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:18:08 +0000 UTC FinishedAt: 2026-08-09 01:01:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:18:08 +0000 UTC FinishedAt: 2026-08-08 21:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:18:08 +0000 UTC FinishedAt: 2026-08-08 21:18:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-workflowzk92h/series-workflowzk92h-convert-artifact-2722426208/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:18:18 +0000 UTC FinishedAt: 2026-08-08 21:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:18:18 +0000 UTC FinishedAt: 2026-08-08 21:35:57 +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:*715d8d75-bdb9-4f77-a897-9406e25d84e4,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-workflowzk92h/series-workflowzk92h-convert-artifact-2722426208/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": "128e2511-ece7-40e7-b8e8-39034beec300", "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-workflowzk92h/series-workflowzk92h-build-action-2787990566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:18:18 +0000 UTC FinishedAt: 2026-08-08 21:35:47 +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:*715d8d75-bdb9-4f77-a897-9406e25d84e4,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-workflowzk92h/series-workflowzk92h-convert-artifact-2722426208/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": "128e2511-ece7-40e7-b8e8-39034beec300", "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-workflowzk92h/series-workflowzk92h-build-action-2787990566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:35:57 +0000 UTC FinishedAt: 2026-08-08 21:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:35:57 +0000 UTC FinishedAt: 2026-08-08 21:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:35:57 +0000 UTC FinishedAt: 2026-08-08 21:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:35:57 +0000 UTC FinishedAt: 2026-08-08 21:36:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-workflowzk92h/series-workflowzk92h-convert-artifact-892137351/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:36:07 +0000 UTC FinishedAt: 2026-08-08 21:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:36:07 +0000 UTC FinishedAt: 2026-08-08 21:38:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*128e2511-ece7-40e7-b8e8-39034beec300,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-workflowzk92h/series-workflowzk92h-build-action-2787990566/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-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:38:17 +0000 UTC FinishedAt: 2026-08-08 21:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:38:17 +0000 UTC FinishedAt: 2026-08-08 21:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:38:17 +0000 UTC FinishedAt: 2026-08-08 21:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:38:17 +0000 UTC FinishedAt: 2026-08-08 21:56:23 +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:*715d8d75-bdb9-4f77-a897-9406e25d84e4,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-workflowzk92h/series-workflowzk92h-convert-artifact-892137351/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": "e03ce762-28f5-4fb9-a43d-2319a2a9e435", "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-workflowzk92h/series-workflowzk92h-build-action-3284590859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:38:17 +0000 UTC FinishedAt: 2026-08-08 21:56:13 +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:*715d8d75-bdb9-4f77-a897-9406e25d84e4,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-workflowzk92h/series-workflowzk92h-convert-artifact-892137351/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": "e03ce762-28f5-4fb9-a43d-2319a2a9e435", "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-workflowzk92h/series-workflowzk92h-build-action-3284590859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:56:23 +0000 UTC FinishedAt: 2026-08-08 21:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:56:23 +0000 UTC FinishedAt: 2026-08-08 21:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:56:23 +0000 UTC FinishedAt: 2026-08-08 21:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:56:23 +0000 UTC FinishedAt: 2026-08-08 21:58:04 +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:*e03ce762-28f5-4fb9-a43d-2319a2a9e435,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-workflowzk92h/series-workflowzk92h-build-action-3284590859/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-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:14 +0000 UTC FinishedAt: 2026-08-09 01:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:14 +0000 UTC FinishedAt: 2026-08-09 01:01:26 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"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:*128e2511-ece7-40e7-b8e8-39034beec300,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e03ce762-28f5-4fb9-a43d-2319a2a9e435,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-workflowzk92h/series-workflowzk92h-build-action-2787990566/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-workflowzk92h/series-workflowzk92h-build-action-3284590859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:14 +0000 UTC FinishedAt: 2026-08-08 21:58:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:14 +0000 UTC FinishedAt: 2026-08-08 21:58:19 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"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-workflowzk92h/series-workflowzk92h-convert-artifact-1970300000/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:14 +0000 UTC FinishedAt: 2026-08-08 21:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:14 +0000 UTC FinishedAt: 2026-08-08 21:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:15 +0000 UTC FinishedAt: 2026-08-08 21:58:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:25 +0000 UTC FinishedAt: 2026-08-09 01:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzk92h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["raw_ioctl","raw_release","gadget_bind","gadget_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_RAW_GADGET","USB_DUMMY_HCD","USB_GADGET","USB"],"series_id":"a86dc359-008d-4864-a62b-9f5bd248813e","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-08 21:58:25 +0000 UTC FinishedAt: 2026-08-09 01:01:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*128e2511-ece7-40e7-b8e8-39034beec300,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e03ce762-28f5-4fb9-a43d-2319a2a9e435,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-workflowzk92h/series-workflowzk92h-build-action-2787990566/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-workflowzk92h/series-workflowzk92h-build-action-3284590859/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-workflowzk92h/series-workflowzk92h-convert-artifact-1970300000/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,}