Name: series-workflow5d22p Phase: Failed StartedAt: 2026-08-06 10:25:20 +0000 UTC FinishedAt: 2026-08-06 10:39:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5d22p[0] Phase: Succeeded StartedAt: 2026-08-06 10:25:20 +0000 UTC FinishedAt: 2026-08-06 10:39:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5d22p[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 10:25:20 +0000 UTC FinishedAt: 2026-08-06 10:39:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaHVzLCBpdCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzYTIwYzE3YjJjYjhkMDk4ZDEwMWM0NDMyNTA2ODc4MGEwMjY1MTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjM4OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5AQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbiYjNDM7XHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuJiM0MztcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IGNhNzNhOTRkYjc5NDMuLmI0ODg5ZWY4ZmFiOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTQsNiAmIzQzOzYxNCwxNDkgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gY250O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHNsb3RzLCAyMDQ4KTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIHEsIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGJpdG1hcF96ZXJvKHNsb3RzLCAyMDQ4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChxID0gMDsgcSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgcSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgcSk7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoc21xLCBzbG90cykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHNldF9iaXQoc21xLCBzbG90cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRcdGNudCA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY250KSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuJiM0MztcdHU2NCByZWdfYWRkclsyXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFsyXTtcbiYjNDM7XHR1NjQgcmF0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtYXhyYXRlIFx1MDAyNlx1MDAyNiAhbWlucmF0ZSkge1xuJiM0MztcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMF0gPSAwO1xuJiM0MztcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMV0gPSAwO1xuJiM0MztcdFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XG4mIzQzO1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuJiM0MztcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcbiYjNDM7XHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4mIzQzO1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4mIzQzO1x0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXG4mIzQzO1x0ICogaGFyZHdhcmUgY2FwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU3BhcnNlIE1EUSB3cml0ZXM6IFBJUiBhbmQgQ0lSIGFyZSBwcm9ncmFtbWVkIGluZGVwZW5kZW50bHkuICBJZlxuJiM0MztcdCAqIG1heHJhdGUgb3IgbWlucmF0ZSBpcyB6ZXJvLCB0aGUgbWF0Y2hpbmcgcmVnaXN0ZXIgaXMgbm90IHdyaXR0ZW4uXG4mIzQzO1x0ICogV2hlbiB0aGUgdGMgbXFwcmlvIGNvbW1hbmQgb21pdHMgbWluX3JhdGUgb3IgbWF4X3JhdGUgKG9yIHNldHMgYVxuJiM0MztcdCAqIHBlci1UQyByYXRlIHRvIHplcm8pLCB0aGUgZHJpdmVyIGxlYXZlcyB0aGUgb3RoZXIgTURRIHNoYXBlclxuJiM0MztcdCAqIHJlZ2lzdGVyIHVudG91Y2hlZDsgYW55IHJhdGUgcHJldmlvdXNseSBhcHBsaWVkIHRoZXJlIHJlbWFpbnMgaW5cbiYjNDM7XHQgKiBoYXJkd2FyZSB1bnRpbCBib3RoIGlucHV0cyBhcmUgemVybyAoZnVsbCBjbGVhcikgb3IgdGhlIHJlZ2lzdGVyXG4mIzQzO1x0ICogaXMgd3JpdHRlbiBhZ2Fpbi4gIFVzZXJzIHJlY29uZmlndXJpbmcgc2hhcGluZyBtdXN0IHN1cHBseSBib3RoXG4mIzQzO1x0ICogcGFyYW1ldGVycyBvciBkZWxldGUgbXFwcmlvIGJlZm9yZSBhcHBseWluZyBhIG5ldyByYXRlIHByb2ZpbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1heHJhdGUpIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0XHRuJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdGlmIChtaW5yYXRlKSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdFx0biYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MCw3ICYjNDM7NzkzLDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbkBAIC03NzgsNiAmIzQzOzkyNSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTEyLDkgJiM0Mzs1MTIsMTQgQEAgc3RydWN0IG90eDJfbmljIHtcbiAjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEXHRcdCBCSVRfVUxMKDE4KVxuICNkZWZpbmUgT1RYMl9GTEFHX1BPUlRfVVBcdFx0XHRCSVRfVUxMKDE5KVxuICNkZWZpbmUgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRFx0XHRCSVRfVUxMKDIwKVxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRURcdEJJVF9VTEwoMjEpXG4gXHR1NjRcdFx0XHRmbGFncztcbiBcdHU2NFx0XHRcdCpjcV9vcF9hZGRyO1xuIFxuJiM0MztcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbiYjNDM7XHR1NjRcdFx0XHQqbXFwcmlvX21pbl9yYXRlO1xuJiM0MztcdHU2NFx0XHRcdCptcXByaW9fbWF4X3JhdGU7XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgJiM0MzsxMjUxLDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjNmNDk0Y2ZiZmNlZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICYjNDM7Mjg3LDE3IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbiYjNDM7XHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtSZW1vdmVkIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBkdWUgdG8gY2hhbm5lbCBjb3VudCBjaGFuZ2VcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLmE1ZTk5MDhmYTliNTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICYjNDM7MTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfaHc7XG4mIzQzO1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yMTQwLDYgJiM0MzsyMTQ0LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbiYjNDM7ZXJyX2ZyZWVfaHc6XG4gXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcbiBlcnJfZnJlZV9tZW06XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwYjQ2ZWMyOWU2NGVhLi5mN2Q4MGQ1OTgwZDc5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTU5LDYgJiM0Mzs2MCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0ZWxzZVxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTU5OCwxNCAmIzQzOzE2MDIsMzQxIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLCBUQ1xuJiM0MzsgKiBtYXBwaW5ncywgYW5kIHRoZSByYXRlLWxpbWl0IGZsYWcuIFVzZWQgb24gZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duXG4mIzQzOyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGx2bCwgaWR4O1xuJiM0MztcbiYjNDM7XHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZVt0eHFdO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4mIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4mIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcbiYjNDM7ICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxuJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuJiM0MztcdFx0ICAgIFwmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdGlmIChyYXRlX2xpbWl0KVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpbnQgZG93bl9lcnI7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XHRcdGlmIChkb3duX2VycilcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBkb3duX2Vycik7XG4mIzQzO1x0XHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXG4mIzQzO1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcbiYjNDM7e1xuJiM0MztcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJhdGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRib29sIGhhZF9tcXByaW8gPSAhIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZG93bl9lcnIsIGVycjtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG93bl9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZfdXApIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1xcHJpby1cdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cJiMzNDssIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcW9wdC1cdTAwM2Vjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHR4cSBcdTAwM2U9IG5ldGRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBsZWZ0IGF0IHplcm87IHNlZSBzcGFyc2VcbiYjNDM7XHRcdCAqIE1EUSB3cml0ZSBiZWhhdmlvdXIgaW4gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbiYjNDM7XG4mIzQzO1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuJiM0MztcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuJiM0MztcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4mIzQzO1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykmIzQzOyYjNDM7O1xuQEAgLTE3MjksMTEgJiM0MzsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbiYjNDM7XHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7SFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiAmIzQzOzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xuIFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XG4mIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gVGh1cywgaXQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlM2EyMGMxN2IyY2I4ZDA5OGQxMDFjNDQzMjUwNjg3ODBhMDI2NTE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxMDozODo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwppbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCkBAIC0zMzEsOCAmIzQzOzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkciwKIAkJCXJldHVybiB0cnVlOwogCX0KIAotCWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKQomIzQzOwlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykgewomIzQzOwkJZGV2X2Vycl9yYXRlbGltaXRlZChydnUtJmd0O2RldiwKJiM0MzsJCQkJICAgICYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XG4mIzM0OywKJiM0MzsJCQkJICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpOwogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwppbmRleCBjYTczYTk0ZGI3OTQzLi5iNDg4OWVmOGZhYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwpAQCAtNjE0LDYgJiM0Mzs2MTQsMTQ5IEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIH0KIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpOwogCiYjNDM7c3RhdGljIGludAomIzQzO290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LAomIzQzOwkJICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLAomIzQzOwkJICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWJveCAqbWJveCA9ICZhbXA7cGZ2Zi0mZ3Q7bWJveDsKJiM0MzsJc3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7CiYjNDM7CWludCBpLCBlcnI7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IGNudDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcS0mZ3Q7cmVnW2ldID0gcmVnX2FkZHJbaV07CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtpXSA9IHJlZ192YWxbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwl1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTsKJiM0MzsJdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTsKJiM0MzsJREVDTEFSRV9CSVRNQVAoc2xvdHMsIDIwNDgpOwomIzQzOwlpbnQgZXJyLCBzbXEsIHEsIGNudCA9IDA7CiYjNDM7CiYjNDM7CWJpdG1hcF96ZXJvKHNsb3RzLCAyMDQ4KTsKJiM0MzsKJiM0MzsJZm9yIChxID0gMDsgcSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyBxJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCBxKTsKJiM0MzsJCWlmICh0ZXN0X2JpdChzbXEsIHNsb3RzKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlzZXRfYml0KHNtcSwgc2xvdHMpOwomIzQzOwomIzQzOwkJaWYgKGNudCAmbHQ7IE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CQljbnQgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjbnQpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWJveCAqbWJveCA9ICZhbXA7cGZ2Zi0mZ3Q7bWJveDsKJiM0MzsJc3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7CiYjNDM7CWludCBlcnIsIHNtcSwgbiA9IDA7CiYjNDM7CXU2NCByZWdfYWRkclsyXTsKJiM0MzsJdTY0IHJlZ192YWxbMl07CiYjNDM7CXU2NCByYXRlOwomIzQzOwomIzQzOwlpZiAoIW1heHJhdGUgJmFtcDsmYW1wOyAhbWlucmF0ZSkgewomIzQzOwkJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwkJcmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbMF0gPSAwOwomIzQzOwkJcmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbMV0gPSAwOwomIzQzOwkJcmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwomIzQzOwkvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvCiYjNDM7CSAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVgKJiM0MzsJICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVycwomIzQzOwkgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGEKJiM0MzsJICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhCiYjNDM7CSAqIGhhcmR3YXJlIGNhcC4KJiM0MzsJICoKJiM0MzsJICogU3BhcnNlIE1EUSB3cml0ZXM6IFBJUiBhbmQgQ0lSIGFyZSBwcm9ncmFtbWVkIGluZGVwZW5kZW50bHkuICBJZgomIzQzOwkgKiBtYXhyYXRlIG9yIG1pbnJhdGUgaXMgemVybywgdGhlIG1hdGNoaW5nIHJlZ2lzdGVyIGlzIG5vdCB3cml0dGVuLgomIzQzOwkgKiBXaGVuIHRoZSB0YyBtcXByaW8gY29tbWFuZCBvbWl0cyBtaW5fcmF0ZSBvciBtYXhfcmF0ZSAob3Igc2V0cyBhCiYjNDM7CSAqIHBlci1UQyByYXRlIHRvIHplcm8pLCB0aGUgZHJpdmVyIGxlYXZlcyB0aGUgb3RoZXIgTURRIHNoYXBlcgomIzQzOwkgKiByZWdpc3RlciB1bnRvdWNoZWQ7IGFueSByYXRlIHByZXZpb3VzbHkgYXBwbGllZCB0aGVyZSByZW1haW5zIGluCiYjNDM7CSAqIGhhcmR3YXJlIHVudGlsIGJvdGggaW5wdXRzIGFyZSB6ZXJvIChmdWxsIGNsZWFyKSBvciB0aGUgcmVnaXN0ZXIKJiM0MzsJICogaXMgd3JpdHRlbiBhZ2Fpbi4gIFVzZXJzIHJlY29uZmlndXJpbmcgc2hhcGluZyBtdXN0IHN1cHBseSBib3RoCiYjNDM7CSAqIHBhcmFtZXRlcnMgb3IgZGVsZXRlIG1xcHJpbyBiZWZvcmUgYXBwbHlpbmcgYSBuZXcgcmF0ZSBwcm9maWxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1heHJhdGUpIHsKJiM0MzsJCXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJCW4mIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmVxLSZndDtyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTsKJiM0MzsJCXJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApOwomIzQzOwkJbiYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTAsNyAmIzQzOzc5MywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdOwomIzQzOwkJZWxzZQomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CiAJCXJlcS0mZ3Q7cmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpOwogCQlyZXEtJmd0O3JlZ3ZhbFsxXSA9IHBhcmVudCAmbHQ7Jmx0OyAxNjsKIAkJcmVxLSZndDtudW1fcmVncyYjNDM7JiM0Mzs7CkBAIC03NzgsNiAmIzQzOzkyNSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250OwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkKJiM0MzsJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKIAlyYyA9IG90eDJfc3luY19tYm94X21zZygmYW1wO3BmdmYtJmd0O21ib3gpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAppbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaApAQCAtNTEyLDkgJiM0Mzs1MTIsMTQgQEAgc3RydWN0IG90eDJfbmljIHsKICNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQJCSBCSVRfVUxMKDE4KQogI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUAkJCUJJVF9VTEwoMTkpCiAjZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQJCUJJVF9VTEwoMjApCiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVECUJJVF9VTEwoMjEpCiAJdTY0CQkJZmxhZ3M7CiAJdTY0CQkJKmNxX29wX2FkZHI7CiAKJiM0MzsJdTMyCQkJbXFwcmlvX2ZsYWdzOwomIzQzOwl1NjQJCQkqbXFwcmlvX21pbl9yYXRlOwomIzQzOwl1NjQJCQkqbXFwcmlvX21heF9yYXRlOwomIzQzOwogCXN0cnVjdCBicGZfcHJvZwkJKnhkcF9wcm9nOwogCXN0cnVjdCBvdHgyX3FzZXQJcXNldDsKIAlzdHJ1Y3Qgb3R4Ml9odwkJaHc7CkBAIC0xMjQ2LDYgJiM0MzsxMjUxLDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pOwogdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpOwogaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsCiYjNDM7CQkJCSB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSwKIAkJCWludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7CiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwppbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKIAl1OCBvbGRfcGZjX2VuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKaW5kZXggYTAzNDBmMzQyMmJmOS4uM2Y0OTRjZmJmY2VlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwpAQCAtMjg3LDYgJiM0MzsyODcsMTcgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoY2hhbm5lbC0mZ3Q7dHhfY291bnQgIT0gcGZ2Zi0mZ3Q7aHcudHhfcXVldWVzIHx8CiYjNDM7CSAgICAgY2hhbm5lbC0mZ3Q7cnhfY291bnQgIT0gcGZ2Zi0mZ3Q7aHcucnhfcXVldWVzKSkgewomIzQzOwkJZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtSZW1vdmVkIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBkdWUgdG8gY2hhbm5lbCBjb3VudCBjaGFuZ2VcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi5hNWU5OTA4ZmE5YjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTAgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfaHc7CiYjNDM7CiAJLyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IHBmLSZndDtody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHsKIAkJY3FfcG9sbCA9ICZhbXA7cXNldC0mZ3Q7bmFwaVtxaWR4XTsKQEAgLTIxNDAsNiAmIzQzOzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZnJlZV9pcnEodmVjLCBwZik7CiBlcnJfZGlzYWJsZV9uYXBpOgogCW90eDJfZGlzYWJsZV9uYXBpKHBmKTsKJiM0MztlcnJfZnJlZV9odzoKIAlvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTsKIGVycl9mcmVlX21lbToKIAlvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKaW5kZXggMGI0NmVjMjllNjRlYS4uZjdkODBkNTk4MGQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfbWlycmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y192bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NuMTBrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtvdHgyX2NvbW1vbi5oJiMzNDsKQEAgLTU5LDYgJiM0Mzs2MCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJZWxzZQogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJfSBlbHNlIHsKJiM0MzsJCS8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvbgomIzQzOwkJICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LgomIzQzOwkJICovCiAJCSpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7CiAJCSpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTsKIAl9CkBAIC0xNTk4LDE0ICYjNDM7MTYwMiwzNDEgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSAgbmljLCBuaWMsIGluZ3Jlc3MpOwogfQogCiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsIFRDCiYjNDM7ICogbWFwcGluZ3MsIGFuZCB0aGUgcmF0ZS1saW1pdCBmbGFnLiBVc2VkIG9uIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93bgomIzQzOyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlKTsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19mbGFncyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJaW50IGx2bCwgaWR4OwomIzQzOwomIzQzOwlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHR4cSA9IDA7IHR4cSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlW3R4cV07CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV07CiYjNDM7CiYjNDM7CQlpZiAoIW1pbl9yYXRlICZhbXA7JmFtcDsgIW1heF9yYXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLAomIzQzOwkJCQkJCSAgIG1heF9yYXRlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHR4cSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW8KJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSkKJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy4KJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzCiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodAomIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGUKJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKG5ldGRldiwKJiM0MzsJCSAgICAmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQ7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX29wZW4obmV0ZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaW50IGRvd25fZXJyOwomIzQzOwomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7CiYjNDM7CQlpZiAoZG93bl9lcnIpCiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIGRvd25fZXJyKTsKJiM0MzsJCS8qIENhbGxlciBob2xkcyBuZXRkZXYvUlROTCBsb2NrOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4gKi8KJiM0MzsJCW5ldGlmX2Nsb3NlKG5ldGRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudCkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSB8fCBxY291bnQgJmx0Oz0gMSkKJiM0MzsJCXJldHVybiByYXRlOwomIzQzOwomIzQzOwlyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWJvb2wgaGFkX21xcHJpbyA9ICEhKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsKJiM0MzsJLyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi8KJiM0MzsJaWYgKCFoYWRfbXFwcmlvKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsKJiM0MzsJaWYgKGlmX3VwKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZG93bl9lcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgdGMsIHR4cSwgZXJyLCBpOwomIzQzOwomIzQzOwlpZiAoIWlmX3VwKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcW9wdC0mZ3Q7aHcpCiYjNDM7CQlyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7c2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcbiYjMzQ7LCBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtJmd0O3BkZXYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3BmY19lbikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlcykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtudW1fdGMsIHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlcyAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFvcHQtJmd0O2NvdW50W3RjXTsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh0eHEgJmd0Oz0gbmV0ZGV2LSZndDtyZWFsX251bV90eF9xdWV1ZXMpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzID0gbXFwcmlvLSZndDtmbGFnczsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQkvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBsZWZ0IGF0IHplcm87IHNlZSBzcGFyc2UKJiM0MzsJCSAqIE1EUSB3cml0ZSBiZWhhdmlvdXIgaW4gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLgomIzQzOwkJICovCiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdLAomIzQzOwkJCQkJCQkgICAgICBxY291bnQpOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tJmd0O21heF9yYXRlW3RjXSwKJiM0MzsJCQkJCQkJICAgICAgcWNvdW50KTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcbiYjMzQ7LAomIzQzOwkJCQkgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsKJiM0MzsJCQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwKJiM0MzsJCQkJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LSZndDtjb3VudFtpXSwgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CW90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwczsKJiM0MzsKJiM0MzsJaWYgKGJhc2UtJmd0O3R5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljYXBzID0gYmFzZS0mZ3Q7Y2FwczsKJiM0MzsJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCSAgdm9pZCAqdHlwZV9kYXRhKQogewogCXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1FVRVJZX0NBUFM6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9CTE9DSzoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfSFRCOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwppbmRleCA2OWMwOTExZTI4ZTkxLi4wZmE1YzY1ZDYyMjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLAogCS8qIGNvbmZpZ3VyZSBQSVIgKi8KIAltYXhyYXRlID0gKG5vZGUtJmd0O3JhdGUgJmd0OyBub2RlLSZndDtjZWlsKSA/IG5vZGUtJmd0O3JhdGUgOiBub2RlLSZndDtjZWlsOwogCiYjNDM7CS8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhbgomIzQzOwkgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLgomIzQzOwkgKi8KIAljZmctJmd0O3JlZ3ZhbFsqbnVtX3JlZ3NdID0KIAkJb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTsKIAkoKm51bV9yZWdzKSYjNDM7JiM0Mzs7CkBAIC0xNzI5LDExICYjNDM7MTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKQogCW90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTsKIH0KIAomIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpCiB7CiAJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJlczsKIAomIzQzOwlpZiAoKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGh0Yi0mZ3Q7Y29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoaHRiLSZndDtjb21tYW5kKSB7CiAJY2FzZSBUQ19IVEJfQ1JFQVRFOgogCQlyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLSZndDtwYXJlbnRfY2xhc3NpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAppbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7CiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTsKIAogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTsKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwogaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGxpY2F0aW9ucyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbGFuZGVkLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBrZXJuZWwgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQ/JiMzNDsgVGhlIHBhdGNoIHRvdWNoZXMgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gIGRpcmVjdG9yeSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIuIE5vdywgdGhlIGJpZyBxdWVzdGlvbiBpcywgJiMzNDtDYW4gd2UgZXZlbiByZWFjaCB0aGlzIGluIGEgZnV6emluZyBlbnZpcm9ubWVudD8mIzM0OyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgdmVuZG9yLXNwZWNpZmljIG5ldHdvcmsgZHJpdmVycywgbGlrZSB0aGUgT2N0ZW9uVFgyLCBvZnRlbiByZWx5IG9uIHBoeXNpY2FsIGhhcmR3YXJlIOKAkyBQQ0llIGNhcmRzLCB0eXBpY2FsbHkg4oCTIGFuZCBhcmVuJiMzOTt0IHByb3Blcmx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4KClNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBhdmFpbGFibGUgb3IgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGdlbmVyaWMgZHJpdmVyIGltcGxlbWVudGF0aW9uIHRoYXQgbWlnaHQgYmUgbW9yZSBhY2Nlc3NpYmxlLiBTZWVpbmcgdGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIHN1Y2ggYXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY2AsIGBvdHgyX2NvbW1vbi5jYCwgYW5kIGBvdHgyX3RjLmNgLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsIHNvdXJjZSBhbmQgc2VhcmNoIGZvciBgb2N0ZW9udHgyYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBkcml2ZXImIzM5O3MgcmVhY2hhYmlsaXR5IGlzIGtleSB0byBkZWNpZGluZyBob3cgbXVjaCBlZmZvcnQgdG8gcHV0IGludG8gZnV6emluZyB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jdGVvbnR4MiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz0xNjk9Y29uZmlnIFNLWTJfREVCVUdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctMTc5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjE4MDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTE4MS1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb25fZXAvS2NvbmZpZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvTWFrZWZpbGU9MTU9b2JqLXlcdFx0JiM0Mzs9IG9jdGVvbl9lcF92Zi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvTWFrZWZpbGU6MTY6b2JqLXlcdFx0JiM0Mzs9IG9jdGVvbnR4Mi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvTWFrZWZpbGUtMTctb2JqLXlcdFx0JiM0Mzs9IHByZXN0ZXJhL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4OiNkZWZpbmUgREVCVUdGU19ESVJfTkFNRSBcJiMzNDtvY3Rlb250eDJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz00MDEzPXN0YXRpYyBjb25zdCBjaGFyICpydnVfZ2V0X2RiZ19kaXJfbmFtZShzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy00MDIwLVx0ZWxzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzo0MDIxOlx0XHRyZXR1cm4gXCYjMzQ7b2N0ZW9udHgyXCYjMzQ7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy00MDIyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jLTE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RldmxpbmsuYzoxNjojZGVmaW5lIERSVl9OQU1FIFwmIzM0O29jdGVvbnR4Mi1hZlwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RldmxpbmsuYy0xNy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU9MTg9cnZ1X25pY3BmLSQoQ09ORklHX1hGUk1fT0ZGTE9BRCkgJiM0Mzs9IGNuMTBrX2lwc2VjLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS0xOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZToyMDpjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTktI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jPTExMTg9c3RhdGljIGludCBvdHgyX3Fvc192YWxpZGF0ZV9xdWFudHVtKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTMyIHF1YW50dW0pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jLTExMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmM6MTEyMzpcdC8qIE1heCBSb3VuZCByb2JpbiB3ZWlnaHQgc3VwcG9ydGVkIGJ5IG9jdGVvbnR4MiBhbmQgQ04xMEtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYy0xMTI0LVx0ICogaXMgZGlmZmVyZW50LiBWYWxpZGF0ZSBhY2NvcmRpbmdseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDg2CgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emFiaWxpdHkgb2YgdGhpcyBEcml2ZXIqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBmb3IgYSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlci4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cC4gVGhpcyBoYXJkd2FyZSBpcyBwcmV0dHkgc3BlY2lmaWMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBRRU1VIGVtdWxhdGlvbiB0aGF0JiMzOTtzIGdvaW5nIHRvIHdvcmsgZm9yIHRoaXM/IENoYW5jZXMgYXJlLCBubywgdGhlcmUgaXNuJiMzOTt0LiBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMganVzdCB0byBiZSBzdXJlIOKAkyBidXQgSSYjMzk7bSBub3QgZXhwZWN0aW5nIHRvIGZpbmQgYW4gYG9jdGVvbnR4MmAgZW11bGF0b3IgcmVhZGlseSBhdmFpbGFibGUgaW4gUUVNVS4KCkFuZCBJIGRpZG4mIzM5O3QuIFRoaXMgZHJpdmVyIGlzIHRpZWQgdG8gYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLiBXaGljaCBtZWFucywgc2FkbHksIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciB1c2luZyBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIEJlY2F1c2Ugb2YgdGhhdCBsaW1pdGF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBjaGFuZ2VzIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoYXQgc3BlY2lmaWMgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgdGhlIGZ1enppbmcgd2lsbCBiZSBpbmhlcmVudGx5IHRpZWQgdG8gYSBoYXJkd2FyZSBwbGF0Zm9ybSB0aGF0IGlzbiYjMzk7dCBlYXNpbHkgYWNjZXNzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaHVzLCBpdCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIFRodXMsIGl0IGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6Mzg6NDguODgyMDUxNTYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDQxMzQ0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaHVzLCBpdCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6Mzg6NDguODgyMDU3MjAxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxNDU1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlM2EyMGMxN2IyY2I4ZDA5OGQxMDFjNDQzMjUwNjg3ODBhMDI2NTE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMTA6Mzg6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5AQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxcbitcXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xcbitcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5iNDg4OWVmOGZhYjkyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5AQCAtNjE0LDYgKzYxNCwxNDkgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xcbiBcXG4rc3RhdGljIGludFxcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGksIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IGNudDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHRERUNMQVJFX0JJVE1BUChzbG90cywgMjA0OCk7XFxuK1xcdGludCBlcnIsIHNtcSwgcSwgY250ID0gMDtcXG4rXFxuK1xcdGJpdG1hcF96ZXJvKHNsb3RzLCAyMDQ4KTtcXG4rXFxuK1xcdGZvciAocSA9IDA7IHEgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgcSsrKSB7XFxuK1xcdFxcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgcSk7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdChzbXEsIHNsb3RzKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdHNldF9iaXQoc21xLCBzbG90cyk7XFxuK1xcbitcXHRcXHRpZiAoY250IFxcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0Y250ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNudCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2ZhaWw6XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGVyciwgc21xLCBuID0gMDtcXG4rXFx0dTY0IHJlZ19hZGRyWzJdO1xcbitcXHR1NjQgcmVnX3ZhbFsyXTtcXG4rXFx0dTY0IHJhdGU7XFxuK1xcbitcXHRpZiAoIW1heHJhdGUgXFx1MDAyNlxcdTAwMjYgIW1pbnJhdGUpIHtcXG4rXFx0XFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXHRcXHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzBdID0gMDtcXG4rXFx0XFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFsxXSA9IDA7XFxuK1xcdFxcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0fVxcbitcXG4rXFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXG4rXFx0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xcbitcXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXFxuK1xcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcXG4rXFx0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXFxuK1xcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxcbitcXHQgKiBoYXJkd2FyZSBjYXAuXFxuK1xcdCAqXFxuK1xcdCAqIFNwYXJzZSBNRFEgd3JpdGVzOiBQSVIgYW5kIENJUiBhcmUgcHJvZ3JhbW1lZCBpbmRlcGVuZGVudGx5LiAgSWZcXG4rXFx0ICogbWF4cmF0ZSBvciBtaW5yYXRlIGlzIHplcm8sIHRoZSBtYXRjaGluZyByZWdpc3RlciBpcyBub3Qgd3JpdHRlbi5cXG4rXFx0ICogV2hlbiB0aGUgdGMgbXFwcmlvIGNvbW1hbmQgb21pdHMgbWluX3JhdGUgb3IgbWF4X3JhdGUgKG9yIHNldHMgYVxcbitcXHQgKiBwZXItVEMgcmF0ZSB0byB6ZXJvKSwgdGhlIGRyaXZlciBsZWF2ZXMgdGhlIG90aGVyIE1EUSBzaGFwZXJcXG4rXFx0ICogcmVnaXN0ZXIgdW50b3VjaGVkOyBhbnkgcmF0ZSBwcmV2aW91c2x5IGFwcGxpZWQgdGhlcmUgcmVtYWlucyBpblxcbitcXHQgKiBoYXJkd2FyZSB1bnRpbCBib3RoIGlucHV0cyBhcmUgemVybyAoZnVsbCBjbGVhcikgb3IgdGhlIHJlZ2lzdGVyXFxuK1xcdCAqIGlzIHdyaXR0ZW4gYWdhaW4uICBVc2VycyByZWNvbmZpZ3VyaW5nIHNoYXBpbmcgbXVzdCBzdXBwbHkgYm90aFxcbitcXHQgKiBwYXJhbWV0ZXJzIG9yIGRlbGV0ZSBtcXByaW8gYmVmb3JlIGFwcGx5aW5nIGEgbmV3IHJhdGUgcHJvZmlsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChtYXhyYXRlKSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdFxcdG4rKztcXG4rXFx0fVxcbitcXG4rXFx0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cXG4rXFx0aWYgKG1pbnJhdGUpIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0XFx0bisrO1xcbitcXHR9XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBuO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXFxuIHtcXG4gXFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcXG5AQCAtNjUwLDcgKzc5MywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxcbiBcXHRcXHRcXHRcXHRcXHRcXHQodTY0KWh3LVxcdTAwM2VzbXFfbGlua190eXBlKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbiBcXHRcXHQvKiBNRFEgY29uZmlnICovXFxuLVxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbkBAIC03NzgsNiArOTI1LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXFxuK1xcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuIFxcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5AQCAtNTEyLDkgKzUxMiwxNCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiAjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEXFx0XFx0IEJJVF9VTEwoMTgpXFxuICNkZWZpbmUgT1RYMl9GTEFHX1BPUlRfVVBcXHRcXHRcXHRCSVRfVUxMKDE5KVxcbiAjZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRURcXHRcXHRCSVRfVUxMKDIwKVxcbisjZGVmaW5lIE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRURcXHRCSVRfVUxMKDIxKVxcbiBcXHR1NjRcXHRcXHRcXHRmbGFncztcXG4gXFx0dTY0XFx0XFx0XFx0KmNxX29wX2FkZHI7XFxuIFxcbitcXHR1MzJcXHRcXHRcXHRtcXByaW9fZmxhZ3M7XFxuK1xcdHU2NFxcdFxcdFxcdCptcXByaW9fbWluX3JhdGU7XFxuK1xcdHU2NFxcdFxcdFxcdCptcXByaW9fbWF4X3JhdGU7XFxuK1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dcXHRcXHQqeGRwX3Byb2c7XFxuIFxcdHN0cnVjdCBvdHgyX3FzZXRcXHRxc2V0O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9od1xcdFxcdGh3O1xcbkBAIC0xMjQ2LDYgKzEyNTEsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XFxuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcXG4rXFx0XFx0XFx0XFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXFxuIFxcdFxcdFxcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XFxuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxcbiBcXHR1OCBvbGRfcGZjX2VuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2IHBmYy1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdG9sZF9wZmNfZW4gPSBwZnZmLVxcdTAwM2VwZmNfZW47XFxuIFxcdHBmdmYtXFx1MDAzZXBmY19lbiA9IHBmYy1cXHUwMDNlcGZjX2VuO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuaW5kZXggYTAzNDBmMzQyMmJmOS4uM2Y0OTRjZmJmY2VlMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5AQCAtMjg3LDYgKzI4NywxNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChjaGFubmVsLVxcdTAwM2V0eF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody50eF9xdWV1ZXMgfHxcXG4rXFx0ICAgICBjaGFubmVsLVxcdTAwM2VyeF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody5yeF9xdWV1ZXMpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRcXHRuZXRkZXZfaW5mbyhkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiUmVtb3ZlZCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgZHVlIHRvIGNoYW5uZWwgY291bnQgY2hhbmdlXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbmluZGV4IGM5OTVmMjkwMDg1OTAuLmE1ZTk5MDhmYTliNTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTk4MCw2ICsxOTgwLDEwIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9tZW07XFxuIFxcbitcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaHc7XFxuK1xcbiBcXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIHBmLVxcdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XFxuIFxcdFxcdGNxX3BvbGwgPSBcXHUwMDI2cXNldC1cXHUwMDNlbmFwaVtxaWR4XTtcXG5AQCAtMjE0MCw2ICsyMTQ0LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRmcmVlX2lycSh2ZWMsIHBmKTtcXG4gZXJyX2Rpc2FibGVfbmFwaTpcXG4gXFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xcbitlcnJfZnJlZV9odzpcXG4gXFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XFxuIGVycl9mcmVlX21lbTpcXG4gXFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5pbmRleCAwYjQ2ZWMyOWU2NGVhLi5mN2Q4MGQ1OTgwZDc5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY24xMGsuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm90eDJfY29tbW9uLmhcXFwiXFxuQEAgLTU5LDYgKzYwLDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFxcdTAwM2NcXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cXG4rXFx0XFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcXG4gXFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xcbiBcXHR9XFxuQEAgLTE1OTgsMTQgKzE2MDIsMzQxIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIG5pYywgbmljLCBpbmdyZXNzKTtcXG4gfVxcbiBcXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsIFRDXFxuKyAqIG1hcHBpbmdzLCBhbmQgdGhlIHJhdGUtbGltaXQgZmxhZy4gVXNlZCBvbiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd25cXG4rICogKHRjIHFkaXNjIGRlbCksIG5vdCBvbiBpbnRlcm5hbCBzdG9wL29wZW4gY3ljbGVzIHN1Y2ggYXMgTVRVIGNoYW5nZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGRldm1fa2ZyZWUocGZ2Zi1cXHUwMDNlZGV2LCBwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUpO1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlID0gTlVMTDtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlID0gTlVMTDtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX2ZsYWdzID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuK1xcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXFx1MDAzZWRldiwgbnVtX3R4cSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlIHx8ICFwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUpIHtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGludCBsdmwsIGlkeDtcXG4rXFxuK1xcdGZvciAobHZsID0gMDsgbHZsIFxcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XFxuK1xcdFxcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdOyBpZHgrKykge1xcbitcXHRcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGlmICghKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQ7XFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XFxuK1xcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX2ZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGVcXG4rICogaW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlbHkgZG93bi5cXG4rICovXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bmV0ZGV2X2luZm8obmV0ZGV2LFxcbitcXHRcXHQgICAgXFxcIm1xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xcbitcXHRpZiAocmF0ZV9saW1pdClcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpbnQgZG93bl9lcnI7XFxuK1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXHRcXHRpZiAoZG93bl9lcnIpXFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZG93bl9lcnIpO1xcbitcXHRcXHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXFxuK1xcdFxcdG5ldGlmX2Nsb3NlKG5ldGRldik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB1NjQgb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUodTY0IHJhdGUsIHUzMiBxY291bnQpXFxuK3tcXG4rXFx0aWYgKCFyYXRlIHx8IHFjb3VudCBcXHUwMDNjPSAxKVxcbitcXHRcXHRyZXR1cm4gcmF0ZTtcXG4rXFxuK1xcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdGJvb2wgaGFkX21xcHJpbyA9ICEhKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCk7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCBkb3duX2VyciwgZXJyO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXG4rXFx0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cXG4rXFx0aWYgKCFoYWRfbXFwcmlvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFxuK1xcdGlmIChpZl91cCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGRvd25fZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IHRjLCB0eHEsIGVyciwgaTtcXG4rXFxuK1xcdGlmICghaWZfdXApIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFxcblxcXCIsIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFxcdTAwMjZwZnZmLVxcdTAwM2Vody5jYXBfZmxhZykpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVxcdTAwM2VwZGV2KSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VwZmNfZW4pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VudW1fdGMsIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcyBcXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgbWF4X3JhdGUgXFx1MDAyNlxcdTAwMjYgbWluX3JhdGUgXFx1MDAzZSBtYXhfcmF0ZSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFvcHQtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0aWYgKHR4cSBcXHUwMDNlPSBuZXRkZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cXHUwMDNlbmV0ZGV2LCB0cnVlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIGxlZnQgYXQgemVybzsgc2VlIHNwYXJzZVxcbitcXHRcXHQgKiBNRFEgd3JpdGUgYmVoYXZpb3VyIGluIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHFjb3VudCk7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHFjb3VudCk7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xcbitcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXFx1MDAzZWNvdW50W2ldLCBxb3B0LVxcdTAwM2VvZmZzZXRbaV0pO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHQvKiBjb25maWd1cmUgUElSICovXFxuIFxcdG1heHJhdGUgPSAobm9kZS1cXHUwMDNlcmF0ZSBcXHUwMDNlIG5vZGUtXFx1MDAzZWNlaWwpID8gbm9kZS1cXHUwMDNlcmF0ZSA6IG5vZGUtXFx1MDAzZWNlaWw7XFxuIFxcbitcXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cXG4rXFx0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cXG4rXFx0ICovXFxuIFxcdGNmZy1cXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxcbiBcXHRcXHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xcbiBcXHQoKm51bV9yZWdzKSsrO1xcbkBAIC0xNzI5LDExICsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcXG4gfVxcbiBcXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcXG4rfVxcbitcXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxcbiB7XFxuIFxcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4rXFx0aWYgKChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBodGItXFx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cXHUwMDNlZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiSFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0c3dpdGNoIChodGItXFx1MDAzZWNvbW1hbmQpIHtcXG4gXFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVxcdTAwM2VwYXJlbnRfY2xhc3NpZCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XFxuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xcbiBcXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XFxuIGludCBvdHgyX3Fvc19lbmFibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjM4OjQ5LjM1MDg1ODc2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0OTM1MzIwMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gVGh1cywgaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzYTIwYzE3YjJjYjhkMDk4ZDEwMWM0NDMyNTA2ODc4MGEwMjY1MTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjM4OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4rXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cIixcbitcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IGNhNzNhOTRkYjc5NDMuLmI0ODg5ZWY4ZmFiOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTQsNiArNjE0LDE0OSBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRERUNMQVJFX0JJVE1BUChzbG90cywgMjA0OCk7XG4rXHRpbnQgZXJyLCBzbXEsIHEsIGNudCA9IDA7XG4rXG4rXHRiaXRtYXBfemVybyhzbG90cywgMjA0OCk7XG4rXG4rXHRmb3IgKHEgPSAwOyBxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyBxKyspIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCBxKTtcbitcdFx0aWYgKHRlc3RfYml0KHNtcSwgc2xvdHMpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4rXHRcdHJlZ192YWxbY250XSA9IDA7XG4rXHRcdGNudCsrO1xuK1xuK1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbY250XSA9IDA7XG4rXHRcdGNudCsrO1xuK1xuK1x0XHRzZXRfYml0KHNtcSwgc2xvdHMpO1xuK1xuK1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbitcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBmYWlsO1xuK1x0XHRjbnQgPSAwO1xuK1x0fVxuK1xuK1x0aWYgKGNudCkge1xuK1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbitcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBmYWlsO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rZmFpbDpcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXG4re1xuK1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4rXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbitcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4rXHR1NjQgcmVnX2FkZHJbMl07XG4rXHR1NjQgcmVnX3ZhbFsyXTtcbitcdHU2NCByYXRlO1xuK1xuK1x0aWYgKCFtYXhyYXRlIFx1MDAyNlx1MDAyNiAhbWlucmF0ZSkge1xuK1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXHRcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4rXHRcdHJlZ192YWxbMF0gPSAwO1xuK1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzFdID0gMDtcbitcdFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0fVxuK1xuK1x0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcbitcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cbitcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcbitcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbitcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxuK1x0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXG4rXHQgKiBoYXJkd2FyZSBjYXAuXG4rXHQgKlxuK1x0ICogU3BhcnNlIE1EUSB3cml0ZXM6IFBJUiBhbmQgQ0lSIGFyZSBwcm9ncmFtbWVkIGluZGVwZW5kZW50bHkuICBJZlxuK1x0ICogbWF4cmF0ZSBvciBtaW5yYXRlIGlzIHplcm8sIHRoZSBtYXRjaGluZyByZWdpc3RlciBpcyBub3Qgd3JpdHRlbi5cbitcdCAqIFdoZW4gdGhlIHRjIG1xcHJpbyBjb21tYW5kIG9taXRzIG1pbl9yYXRlIG9yIG1heF9yYXRlIChvciBzZXRzIGFcbitcdCAqIHBlci1UQyByYXRlIHRvIHplcm8pLCB0aGUgZHJpdmVyIGxlYXZlcyB0aGUgb3RoZXIgTURRIHNoYXBlclxuK1x0ICogcmVnaXN0ZXIgdW50b3VjaGVkOyBhbnkgcmF0ZSBwcmV2aW91c2x5IGFwcGxpZWQgdGhlcmUgcmVtYWlucyBpblxuK1x0ICogaGFyZHdhcmUgdW50aWwgYm90aCBpbnB1dHMgYXJlIHplcm8gKGZ1bGwgY2xlYXIpIG9yIHRoZSByZWdpc3RlclxuK1x0ICogaXMgd3JpdHRlbiBhZ2Fpbi4gIFVzZXJzIHJlY29uZmlndXJpbmcgc2hhcGluZyBtdXN0IHN1cHBseSBib3RoXG4rXHQgKiBwYXJhbWV0ZXJzIG9yIGRlbGV0ZSBtcXByaW8gYmVmb3JlIGFwcGx5aW5nIGEgbmV3IHJhdGUgcHJvZmlsZS5cbitcdCAqL1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4rXHRcdG4rKztcbitcdH1cbitcbitcdC8qIENJUitQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXG4rXHRpZiAobWlucmF0ZSkge1xuK1x0XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdFx0bisrO1xuK1x0fVxuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUwLDcgKzc5MywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdGVsc2VcbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc4LDYgKzkyNSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTEyLDkgKzUxMiwxNCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuICNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0IEJJVF9VTEwoMTgpXG4gI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFx0XHRcdEJJVF9VTEwoMTkpXG4gI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXHRcdEJJVF9VTEwoMjApXG4rI2RlZmluZSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEXHRCSVRfVUxMKDIxKVxuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbitcdHU2NFx0XHRcdCptcXByaW9fbWluX3JhdGU7XG4rXHR1NjRcdFx0XHQqbXFwcmlvX21heF9yYXRlO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTEsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjNmNDk0Y2ZiZmNlZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICsyODcsMTcgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbitcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiUmVtb3ZlZCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgZHVlIHRvIGNoYW5uZWwgY291bnQgY2hhbmdlXFxuXCIpO1xuK1x0fVxuK1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi5hNWU5OTA4ZmE5YjU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiArMTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbitcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfaHc7XG4rXG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yMTQwLDYgKzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuK2Vycl9mcmVlX2h3OlxuIFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XG4gZXJyX2ZyZWVfbWVtOlxuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMGI0NmVjMjllNjRlYS4uZjdkODBkNTk4MGQ3OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY24xMGsuaFwiXG4gI2luY2x1ZGUgXCJvdHgyX2NvbW1vbi5oXCJcbkBAIC01OSw2ICs2MCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0ZWxzZVxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTU5OCwxNCArMTYwMiwzNDEgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycywgVENcbisgKiBtYXBwaW5ncywgYW5kIHRoZSByYXRlLWxpbWl0IGZsYWcuIFVzZWQgb24gZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duXG4rICogKHRjIHFkaXNjIGRlbCksIG5vdCBvbiBpbnRlcm5hbCBzdG9wL29wZW4gY3ljbGVzIHN1Y2ggYXMgTVRVIGNoYW5nZS5cbisgKi9cbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSk7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19mbGFncyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuK1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpLFxuK1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpIHtcbitcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRpbnQgbHZsLCBpZHg7XG4rXG4rXHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XG4rXHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4KyspIHtcbitcdFx0XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQ7XG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yICh0eHEgPSAwOyB0eHEgXHUwMDNjIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSsrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV07XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdO1xuK1xuK1x0XHRpZiAoIW1pbl9yYXRlIFx1MDAyNlx1MDAyNiAhbWF4X3JhdGUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXG5cIixcbitcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXG4rICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4rICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xuKyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcbisgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgbmV0aWZfY2xvc2UoKSBjbGVhcnMgSUZGX1VQIGFuZCBsZWF2ZXMgdGhlXG4rICogaW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlbHkgZG93bi5cbisgKi9cbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbitcdGludCBlcnI7XG4rXG4rXHRuZXRkZXZfaW5mbyhuZXRkZXYsXG4rXHRcdCAgICBcIm1xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCIpO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXG4rXHRpZiAocmF0ZV9saW1pdClcbitcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGludCBkb3duX2VycjtcbitcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXHRcdGlmIChkb3duX2VycilcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuK1x0XHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXG4rXHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxuK3tcbitcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gcmF0ZTtcbitcbitcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRib29sIGhhZF9tcXByaW8gPSAhIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKTtcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCBkb3duX2VyciwgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xuK1x0aWYgKCFoYWRfbXFwcmlvKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcbitcdGlmIChpZl91cCkge1xuK1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGRvd25fZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFpZl91cCkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCIsXG4rXHRcdFx0ICAgcW9wdC1cdTAwM2VudW1fdGMsIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4rXG4rXHRcdGlmIChtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgbWF4X3JhdGUgXHUwMDI2XHUwMDI2IG1pbl9yYXRlIFx1MDAzZSBtYXhfcmF0ZSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cdTAwM2Vjb3VudFt0Y107IHR4cSsrKSB7XG4rXHRcdFx0aWYgKHR4cSBcdTAwM2U9IG5ldGRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBsZWZ0IGF0IHplcm87IHNlZSBzcGFyc2VcbitcdFx0ICogTURRIHdyaXRlIGJlaGF2aW91ciBpbiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXHUwMDNlY291bnRbaV0sIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuK1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuK1xuK1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4rXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbitcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4rXHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSsrO1xuQEAgLTE3MjksMTEgKzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcbiB9XG4gXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbitcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgaHRiLVx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4rXHRcdFx0XHQgICBcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XG4gXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjM4OjQ5LjM1MDg2MDUxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTEwODk4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGxpY2F0aW9ucyBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsYW5kZWQsIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzLCBcIkRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsaXR5IGludG8gdGhlIGtlcm5lbCB0aGF0IG5lZWRzIHRvIGJlIGZ1enplZD9cIiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLiBOb3csIHRoZSBiaWcgcXVlc3Rpb24gaXMsIFwiQ2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/XCIgTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHZlbmRvci1zcGVjaWZpYyBuZXR3b3JrIGRyaXZlcnMsIGxpa2UgdGhlIE9jdGVvblRYMiwgb2Z0ZW4gcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZSDigJMgUENJZSBjYXJkcywgdHlwaWNhbGx5IOKAkyBhbmQgYXJlbid0IHByb3Blcmx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gZW11bGF0b3IgYXZhaWxhYmxlIG9yIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGdlbmVyaWMgZHJpdmVyIGltcGxlbWVudGF0aW9uIHRoYXQgbWlnaHQgYmUgbW9yZSBhY2Nlc3NpYmxlLiBTZWVpbmcgdGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIHN1Y2ggYXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY2AsIGBvdHgyX2NvbW1vbi5jYCwgYW5kIGBvdHgyX3RjLmNgLCBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBzZWFyY2ggZm9yIGBvY3Rlb250eDJgIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuIFVuZGVyc3RhbmRpbmcgdGhlIGRyaXZlcidzIHJlYWNoYWJpbGl0eSBpcyBrZXkgdG8gZGVjaWRpbmcgaG93IG11Y2ggZWZmb3J0IHRvIHB1dCBpbnRvIGZ1enppbmcgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDozODo1Ni4zNDE5NTI4NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5OTEzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2N0ZW9udHgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz0xNjk9Y29uZmlnIFNLWTJfREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy0xNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjE4MDpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTE4MS1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9uX2VwL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL01ha2VmaWxlPTE1PW9iai15XFx0XFx0Kz0gb2N0ZW9uX2VwX3ZmL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvTWFrZWZpbGU6MTY6b2JqLXlcXHRcXHQrPSBvY3Rlb250eDIvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9NYWtlZmlsZS0xNy1vYmoteVxcdFxcdCs9IHByZXN0ZXJhL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4OiNkZWZpbmUgREVCVUdGU19ESVJfTkFNRSBcXFwib2N0ZW9udHgyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTQwMTM9c3RhdGljIGNvbnN0IGNoYXIgKnJ2dV9nZXRfZGJnX2Rpcl9uYW1lKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtNDAyMC1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzo0MDIxOlxcdFxcdHJldHVybiBcXFwib2N0ZW9udHgyXFxcIjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTQwMjItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RldmxpbmsuYy0xNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jOjE2OiNkZWZpbmUgRFJWX05BTUUgXFxcIm9jdGVvbnR4Mi1hZlxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jLTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlPTE4PXJ2dV9uaWNwZi0kKENPTkZJR19YRlJNX09GRkxPQUQpICs9IGNuMTBrX2lwc2VjLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjIwOmNjZmxhZ3MteSArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9vY3Rlb250eDIvYXNtLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTktI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYz0xMTE4PXN0YXRpYyBpbnQgb3R4Ml9xb3NfdmFsaWRhdGVfcXVhbnR1bShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUzMiBxdWFudHVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jLTExMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jOjExMjM6XFx0LyogTWF4IFJvdW5kIHJvYmluIHdlaWdodCBzdXBwb3J0ZWQgYnkgb2N0ZW9udHgyIGFuZCBDTjEwS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYy0xMTI0LVxcdCAqIGlzIGRpZmZlcmVudC4gVmFsaWRhdGUgYWNjb3JkaW5nbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6Mzg6NTYuMzkzOTQ5MzYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg5MjE5OTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoaXMgRHJpdmVyKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBmb3IgYSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlci4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cC4gVGhpcyBoYXJkd2FyZSBpcyBwcmV0dHkgc3BlY2lmaWMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBRRU1VIGVtdWxhdGlvbiB0aGF0J3MgZ29pbmcgdG8gd29yayBmb3IgdGhpcz8gQ2hhbmNlcyBhcmUsIG5vLCB0aGVyZSBpc24ndC4gSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMganVzdCB0byBiZSBzdXJlIOKAkyBidXQgSSdtIG5vdCBleHBlY3RpbmcgdG8gZmluZCBhbiBgb2N0ZW9udHgyYCBlbXVsYXRvciByZWFkaWx5IGF2YWlsYWJsZSBpbiBRRU1VLlxuXG5BbmQgSSBkaWRuJ3QuIFRoaXMgZHJpdmVyIGlzIHRpZWQgdG8gYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLiBXaGljaCBtZWFucywgc2FkbHksIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9yIHVzaW5nIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gQmVjYXVzZSBvZiB0aGF0IGxpbWl0YXRpb24sIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY2hhbmdlcyBhcmUgZGlyZWN0bHkgdGllZCB0byB0aGF0IHNwZWNpZmljIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgaGFyZHdhcmUsIHdoaWNoIG1lYW5zIHRoZSBmdXp6aW5nIHdpbGwgYmUgaW5oZXJlbnRseSB0aWVkIHRvIGEgaGFyZHdhcmUgcGxhdGZvcm0gdGhhdCBpc24ndCBlYXNpbHkgYWNjZXNzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0ODYsIk91dHB1dFRva2VucyI6NzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6Mzk6MDQuMjg2MTUyMDY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gVGh1cywgaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaHVzLCBpdCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5d22p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 10:25:20 +0000 UTC FinishedAt: 2026-08-06 10:39:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaHVzLCBpdCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUzYTIwYzE3YjJjYjhkMDk4ZDEwMWM0NDMyNTA2ODc4MGEwMjY1MTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjM4OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5AQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbiYjNDM7XHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuJiM0MztcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IGNhNzNhOTRkYjc5NDMuLmI0ODg5ZWY4ZmFiOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTQsNiAmIzQzOzYxNCwxNDkgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gY250O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKHNsb3RzLCAyMDQ4KTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIHEsIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGJpdG1hcF96ZXJvKHNsb3RzLCAyMDQ4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChxID0gMDsgcSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgcSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgcSk7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoc21xLCBzbG90cykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHNldF9iaXQoc21xLCBzbG90cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHRcdGNudCA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY250KSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2ZhaWw6XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbiYjNDM7XHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuJiM0MztcdHU2NCByZWdfYWRkclsyXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFsyXTtcbiYjNDM7XHR1NjQgcmF0ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtYXhyYXRlIFx1MDAyNlx1MDAyNiAhbWlucmF0ZSkge1xuJiM0MztcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMF0gPSAwO1xuJiM0MztcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbMV0gPSAwO1xuJiM0MztcdFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbiYjNDM7XHRpZiAoIXJlcSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbiYjNDM7XG4mIzQzO1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuJiM0MztcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcbiYjNDM7XHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4mIzQzO1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4mIzQzO1x0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXG4mIzQzO1x0ICogaGFyZHdhcmUgY2FwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU3BhcnNlIE1EUSB3cml0ZXM6IFBJUiBhbmQgQ0lSIGFyZSBwcm9ncmFtbWVkIGluZGVwZW5kZW50bHkuICBJZlxuJiM0MztcdCAqIG1heHJhdGUgb3IgbWlucmF0ZSBpcyB6ZXJvLCB0aGUgbWF0Y2hpbmcgcmVnaXN0ZXIgaXMgbm90IHdyaXR0ZW4uXG4mIzQzO1x0ICogV2hlbiB0aGUgdGMgbXFwcmlvIGNvbW1hbmQgb21pdHMgbWluX3JhdGUgb3IgbWF4X3JhdGUgKG9yIHNldHMgYVxuJiM0MztcdCAqIHBlci1UQyByYXRlIHRvIHplcm8pLCB0aGUgZHJpdmVyIGxlYXZlcyB0aGUgb3RoZXIgTURRIHNoYXBlclxuJiM0MztcdCAqIHJlZ2lzdGVyIHVudG91Y2hlZDsgYW55IHJhdGUgcHJldmlvdXNseSBhcHBsaWVkIHRoZXJlIHJlbWFpbnMgaW5cbiYjNDM7XHQgKiBoYXJkd2FyZSB1bnRpbCBib3RoIGlucHV0cyBhcmUgemVybyAoZnVsbCBjbGVhcikgb3IgdGhlIHJlZ2lzdGVyXG4mIzQzO1x0ICogaXMgd3JpdHRlbiBhZ2Fpbi4gIFVzZXJzIHJlY29uZmlndXJpbmcgc2hhcGluZyBtdXN0IHN1cHBseSBib3RoXG4mIzQzO1x0ICogcGFyYW1ldGVycyBvciBkZWxldGUgbXFwcmlvIGJlZm9yZSBhcHBseWluZyBhIG5ldyByYXRlIHByb2ZpbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1heHJhdGUpIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0XHRuJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdGlmIChtaW5yYXRlKSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdFx0biYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MCw3ICYjNDM7NzkzLDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbkBAIC03NzgsNiAmIzQzOzkyNSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXG4mIzQzO1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTEyLDkgJiM0Mzs1MTIsMTQgQEAgc3RydWN0IG90eDJfbmljIHtcbiAjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEXHRcdCBCSVRfVUxMKDE4KVxuICNkZWZpbmUgT1RYMl9GTEFHX1BPUlRfVVBcdFx0XHRCSVRfVUxMKDE5KVxuICNkZWZpbmUgT1RYMl9GTEFHX0lQU0VDX09GRkxPQURfRU5BQkxFRFx0XHRCSVRfVUxMKDIwKVxuJiM0MzsjZGVmaW5lIE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRURcdEJJVF9VTEwoMjEpXG4gXHR1NjRcdFx0XHRmbGFncztcbiBcdHU2NFx0XHRcdCpjcV9vcF9hZGRyO1xuIFxuJiM0MztcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbiYjNDM7XHR1NjRcdFx0XHQqbXFwcmlvX21pbl9yYXRlO1xuJiM0MztcdHU2NFx0XHRcdCptcXByaW9fbWF4X3JhdGU7XG4mIzQzO1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgJiM0MzsxMjUxLDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcbiYjNDM7XHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcbiBcdHU4IG9sZF9wZmNfZW47XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2IHBmYy1cdTAwM2VwZmNfZW4pIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjNmNDk0Y2ZiZmNlZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICYjNDM7Mjg3LDE3IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbiYjNDM7XHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtSZW1vdmVkIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBkdWUgdG8gY2hhbm5lbCBjb3VudCBjaGFuZ2VcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLmE1ZTk5MDhmYTliNTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICYjNDM7MTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfaHc7XG4mIzQzO1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yMTQwLDYgJiM0MzsyMTQ0LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbiYjNDM7ZXJyX2ZyZWVfaHc6XG4gXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcbiBlcnJfZnJlZV9tZW06XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwYjQ2ZWMyOWU2NGVhLi5mN2Q4MGQ1OTgwZDc5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTU5LDYgJiM0Mzs2MCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0ZWxzZVxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTU5OCwxNCAmIzQzOzE2MDIsMzQxIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLCBUQ1xuJiM0MzsgKiBtYXBwaW5ncywgYW5kIHRoZSByYXRlLWxpbWl0IGZsYWcuIFVzZWQgb24gZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duXG4mIzQzOyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGx2bCwgaWR4O1xuJiM0MztcbiYjNDM7XHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZVt0eHFdO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4mIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzXG4mIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcbiYjNDM7ICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIG5ldGlmX2Nsb3NlKCkgY2xlYXJzIElGRl9VUCBhbmQgbGVhdmVzIHRoZVxuJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuJiM0MztcdFx0ICAgIFwmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xuJiM0MztcdGlmIChyYXRlX2xpbWl0KVxuJiM0MztcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvcHMtXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpbnQgZG93bl9lcnI7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XHRcdGlmIChkb3duX2VycilcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBkb3duX2Vycik7XG4mIzQzO1x0XHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXG4mIzQzO1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudClcbiYjNDM7e1xuJiM0MztcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJhdGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRib29sIGhhZF9tcXByaW8gPSAhIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZG93bl9lcnIsIGVycjtcbiYjNDM7XG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG93bl9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZfdXApIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1xcHJpby1cdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cJiMzNDssIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcW9wdC1cdTAwM2Vjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHR4cSBcdTAwM2U9IG5ldGRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBsZWZ0IGF0IHplcm87IHNlZSBzcGFyc2VcbiYjNDM7XHRcdCAqIE1EUSB3cml0ZSBiZWhhdmlvdXIgaW4gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgIHFjb3VudCk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cdTAwM2Vjb3VudFtpXSwgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuJiM0MztcdHN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwcztcbiYjNDM7XG4mIzQzO1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4mIzQzO1x0Y2Fwcy1cdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9CTE9DSzpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XG4mIzQzO1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuJiM0MztcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuJiM0MztcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4mIzQzO1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykmIzQzOyYjNDM7O1xuQEAgLTE3MjksMTEgJiM0MzsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbiYjNDM7XHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7SFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiAmIzQzOzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xuIFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XG4mIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gVGh1cywgaXQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlM2EyMGMxN2IyY2I4ZDA5OGQxMDFjNDQzMjUwNjg3ODBhMDI2NTE2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxMDozODo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwppbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCkBAIC0zMzEsOCAmIzQzOzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkciwKIAkJCXJldHVybiB0cnVlOwogCX0KIAotCWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKQomIzQzOwlpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykgewomIzQzOwkJZGV2X2Vycl9yYXRlbGltaXRlZChydnUtJmd0O2RldiwKJiM0MzsJCQkJICAgICYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XG4mIzM0OywKJiM0MzsJCQkJICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpOwogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwppbmRleCBjYTczYTk0ZGI3OTQzLi5iNDg4OWVmOGZhYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYwpAQCAtNjE0LDYgJiM0Mzs2MTQsMTQ5IEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIH0KIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpOwogCiYjNDM7c3RhdGljIGludAomIzQzO290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LAomIzQzOwkJICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLAomIzQzOwkJICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWJveCAqbWJveCA9ICZhbXA7cGZ2Zi0mZ3Q7bWJveDsKJiM0MzsJc3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7CiYjNDM7CWludCBpLCBlcnI7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTsKJiM0MzsJaWYgKCFyZXEpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVxLSZndDtsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTsKJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IGNudDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcS0mZ3Q7cmVnW2ldID0gcmVnX2FkZHJbaV07CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtpXSA9IHJlZ192YWxbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwl1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTsKJiM0MzsJdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTsKJiM0MzsJREVDTEFSRV9CSVRNQVAoc2xvdHMsIDIwNDgpOwomIzQzOwlpbnQgZXJyLCBzbXEsIHEsIGNudCA9IDA7CiYjNDM7CiYjNDM7CWJpdG1hcF96ZXJvKHNsb3RzLCAyMDQ4KTsKJiM0MzsKJiM0MzsJZm9yIChxID0gMDsgcSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyBxJiM0MzsmIzQzOykgewomIzQzOwkJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCBxKTsKJiM0MzsJCWlmICh0ZXN0X2JpdChzbXEsIHNsb3RzKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlzZXRfYml0KHNtcSwgc2xvdHMpOwomIzQzOwomIzQzOwkJaWYgKGNudCAmbHQ7IE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCwKJiM0MzsJCQkJCSAgICAgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGZhaWw7CiYjNDM7CQljbnQgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjbnQpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWJveCAqbWJveCA9ICZhbXA7cGZ2Zi0mZ3Q7bWJveDsKJiM0MzsJc3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7CiYjNDM7CWludCBlcnIsIHNtcSwgbiA9IDA7CiYjNDM7CXU2NCByZWdfYWRkclsyXTsKJiM0MzsJdTY0IHJlZ192YWxbMl07CiYjNDM7CXU2NCByYXRlOwomIzQzOwomIzQzOwlpZiAoIW1heHJhdGUgJmFtcDsmYW1wOyAhbWlucmF0ZSkgewomIzQzOwkJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwkJcmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbMF0gPSAwOwomIzQzOwkJcmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbMV0gPSAwOwomIzQzOwkJcmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwomIzQzOwkvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvCiYjNDM7CSAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVgKJiM0MzsJICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVycwomIzQzOwkgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGEKJiM0MzsJICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhCiYjNDM7CSAqIGhhcmR3YXJlIGNhcC4KJiM0MzsJICoKJiM0MzsJICogU3BhcnNlIE1EUSB3cml0ZXM6IFBJUiBhbmQgQ0lSIGFyZSBwcm9ncmFtbWVkIGluZGVwZW5kZW50bHkuICBJZgomIzQzOwkgKiBtYXhyYXRlIG9yIG1pbnJhdGUgaXMgemVybywgdGhlIG1hdGNoaW5nIHJlZ2lzdGVyIGlzIG5vdCB3cml0dGVuLgomIzQzOwkgKiBXaGVuIHRoZSB0YyBtcXByaW8gY29tbWFuZCBvbWl0cyBtaW5fcmF0ZSBvciBtYXhfcmF0ZSAob3Igc2V0cyBhCiYjNDM7CSAqIHBlci1UQyByYXRlIHRvIHplcm8pLCB0aGUgZHJpdmVyIGxlYXZlcyB0aGUgb3RoZXIgTURRIHNoYXBlcgomIzQzOwkgKiByZWdpc3RlciB1bnRvdWNoZWQ7IGFueSByYXRlIHByZXZpb3VzbHkgYXBwbGllZCB0aGVyZSByZW1haW5zIGluCiYjNDM7CSAqIGhhcmR3YXJlIHVudGlsIGJvdGggaW5wdXRzIGFyZSB6ZXJvIChmdWxsIGNsZWFyKSBvciB0aGUgcmVnaXN0ZXIKJiM0MzsJICogaXMgd3JpdHRlbiBhZ2Fpbi4gIFVzZXJzIHJlY29uZmlndXJpbmcgc2hhcGluZyBtdXN0IHN1cHBseSBib3RoCiYjNDM7CSAqIHBhcmFtZXRlcnMgb3IgZGVsZXRlIG1xcHJpbyBiZWZvcmUgYXBwbHlpbmcgYSBuZXcgcmF0ZSBwcm9maWxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1heHJhdGUpIHsKJiM0MzsJCXJlcS0mZ3Q7cmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7CiYjNDM7CQlyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTsKJiM0MzsJCW4mIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmVxLSZndDtyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTsKJiM0MzsJCXJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApOwomIzQzOwkJbiYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmVxLSZndDtudW1fcmVncyA9IG47CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKQogewogCXUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107CkBAIC02NTAsNyAmIzQzOzc5MywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvcgogCQkJCQkJKHU2NClody0mZ3Q7c21xX2xpbmtfdHlwZSk7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwogCQkvKiBNRFEgY29uZmlnICovCi0JCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdOwomIzQzOwkJZWxzZQomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107CiYjNDM7CiAJCXJlcS0mZ3Q7cmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpOwogCQlyZXEtJmd0O3JlZ3ZhbFsxXSA9IHBhcmVudCAmbHQ7Jmx0OyAxNjsKIAkJcmVxLSZndDtudW1fcmVncyYjNDM7JiM0Mzs7CkBAIC03NzgsNiAmIzQzOzkyNSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKIAkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250OwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkKJiM0MzsJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKIAlyYyA9IG90eDJfc3luY19tYm94X21zZygmYW1wO3BmdmYtJmd0O21ib3gpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAppbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaApAQCAtNTEyLDkgJiM0Mzs1MTIsMTQgQEAgc3RydWN0IG90eDJfbmljIHsKICNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRUQJCSBCSVRfVUxMKDE4KQogI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUAkJCUJJVF9VTEwoMTkpCiAjZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRUQJCUJJVF9VTEwoMjApCiYjNDM7I2RlZmluZSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVECUJJVF9VTEwoMjEpCiAJdTY0CQkJZmxhZ3M7CiAJdTY0CQkJKmNxX29wX2FkZHI7CiAKJiM0MzsJdTMyCQkJbXFwcmlvX2ZsYWdzOwomIzQzOwl1NjQJCQkqbXFwcmlvX21pbl9yYXRlOwomIzQzOwl1NjQJCQkqbXFwcmlvX21heF9yYXRlOwomIzQzOwogCXN0cnVjdCBicGZfcHJvZwkJKnhkcF9wcm9nOwogCXN0cnVjdCBvdHgyX3FzZXQJcXNldDsKIAlzdHJ1Y3Qgb3R4Ml9odwkJaHc7CkBAIC0xMjQ2LDYgJiM0MzsxMjUxLDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pOwogdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpOwogaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsCiYjNDM7CQkJCSB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSwKIAkJCWludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7CiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwppbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKIAl1OCBvbGRfcGZjX2VuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKaW5kZXggYTAzNDBmMzQyMmJmOS4uM2Y0OTRjZmJmY2VlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwpAQCAtMjg3LDYgJiM0MzsyODcsMTcgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKChwZnZmLSZndDtmbGFncyAmYW1wOyBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoY2hhbm5lbC0mZ3Q7dHhfY291bnQgIT0gcGZ2Zi0mZ3Q7aHcudHhfcXVldWVzIHx8CiYjNDM7CSAgICAgY2hhbm5lbC0mZ3Q7cnhfY291bnQgIT0gcGZ2Zi0mZ3Q7aHcucnhfcXVldWVzKSkgewomIzQzOwkJZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtSZW1vdmVkIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBkdWUgdG8gY2hhbm5lbCBjb3VudCBjaGFuZ2VcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi5hNWU5OTA4ZmE5YjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTAgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfaHc7CiYjNDM7CiAJLyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IHBmLSZndDtody5jaW50X2NudDsgcWlkeCYjNDM7JiM0MzspIHsKIAkJY3FfcG9sbCA9ICZhbXA7cXNldC0mZ3Q7bmFwaVtxaWR4XTsKQEAgLTIxNDAsNiAmIzQzOzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZnJlZV9pcnEodmVjLCBwZik7CiBlcnJfZGlzYWJsZV9uYXBpOgogCW90eDJfZGlzYWJsZV9uYXBpKHBmKTsKJiM0MztlcnJfZnJlZV9odzoKIAlvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTsKIGVycl9mcmVlX21lbToKIAlvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKaW5kZXggMGI0NmVjMjllNjRlYS4uZjdkODBkNTk4MGQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCkBAIC0xNiw2ICYjNDM7MTYsNyBAQAogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfbWlycmVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjX2FjdC90Y192bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3BrdF9zY2hlZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2NuMTBrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtvdHgyX2NvbW1vbi5oJiMzNDsKQEAgLTU5LDYgJiM0Mzs2MCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCwKIAkJZWxzZQogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJfSBlbHNlIHsKJiM0MzsJCS8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvbgomIzQzOwkJICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LgomIzQzOwkJICovCiAJCSpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7CiAJCSpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTsKIAl9CkBAIC0xNTk4LDE0ICYjNDM7MTYwMiwzNDEgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJCSAgbmljLCBuaWMsIGluZ3Jlc3MpOwogfQogCiYjNDM7LyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsIFRDCiYjNDM7ICogbWFwcGluZ3MsIGFuZCB0aGUgcmF0ZS1saW1pdCBmbGFnLiBVc2VkIG9uIGV4cGxpY2l0IG1xcHJpbyB0ZWFyZG93bgomIzQzOyAqICh0YyBxZGlzYyBkZWwpLCBub3Qgb24gaW50ZXJuYWwgc3RvcC9vcGVuIGN5Y2xlcyBzdWNoIGFzIE1UVSBjaGFuZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlKTsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsIHBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSA9IE5VTEw7CiYjNDM7CXBmdmYtJmd0O21xcHJpb19mbGFncyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW9fbWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJaW50IGx2bCwgaWR4OwomIzQzOwomIzQzOwlmb3IgKGx2bCA9IDA7IGx2bCAmbHQ7IE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChwZnZmLSZndDtody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCEocGZ2Zi0mZ3Q7ZmxhZ3MgJmFtcDsgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpb19tYXhfcmF0ZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlmb3IgKHR4cSA9IDA7IHR4cSAmbHQ7IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21pbl9yYXRlW3R4cV07CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV07CiYjNDM7CiYjNDM7CQlpZiAoIW1pbl9yYXRlICZhbXA7JmFtcDsgIW1heF9yYXRlKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLAomIzQzOwkJCQkJCSAgIG1heF9yYXRlKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHR4cSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW8KJiM0MzsgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSkKJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy4KJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuICBUaGUgZnVsbCBzdG9wL29wZW4gY3ljbGUgY2xlYXJzCiYjNDM7ICogY2Fycmllciwgc3RvcHMgYWxsIFRYIHF1ZXVlcywgdGVhcnMgZG93biBJUlFzL05BUEkgYW5kIGRyb3BzIGluLWZsaWdodAomIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGUKJiM0MzsgKiBpbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmVseSBkb3duLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtJmd0O25ldGRldl9vcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKG5ldGRldiwKJiM0MzsJCSAgICAmIzM0O21xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQ7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX29wZW4obmV0ZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaW50IGRvd25fZXJyOwomIzQzOwomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7CiYjNDM7CQlpZiAoZG93bl9lcnIpCiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIGRvd25fZXJyKTsKJiM0MzsJCS8qIENhbGxlciBob2xkcyBuZXRkZXYvUlROTCBsb2NrOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4gKi8KJiM0MzsJCW5ldGlmX2Nsb3NlKG5ldGRldik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU2NCBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZSh1NjQgcmF0ZSwgdTMyIHFjb3VudCkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSB8fCBxY291bnQgJmx0Oz0gMSkKJiM0MzsJCXJldHVybiByYXRlOwomIzQzOwomIzQzOwlyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWJvb2wgaGFkX21xcHJpbyA9ICEhKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsKJiM0MzsJLyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi8KJiM0MzsJaWYgKCFoYWRfbXFwcmlvKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsKJiM0MzsJaWYgKGlmX3VwKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZG93bl9lcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgdGMsIHR4cSwgZXJyLCBpOwomIzQzOwomIzQzOwlpZiAoIWlmX3VwKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcW9wdC0mZ3Q7aHcpCiYjNDM7CQlyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTsKJiM0MzsKJiM0MzsJaWYgKG1xcHJpby0mZ3Q7c2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcbiYjMzQ7LCBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtJmd0O3BkZXYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3BmY19lbikgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlcykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBxb3B0LSZndDtudW1fdGMsIHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlcyAmZ3Q7IE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9yICh0eHEgPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJICAgICB0eHEgJmx0OyBxb3B0LSZndDtvZmZzZXRbdGNdICYjNDM7IHFvcHQtJmd0O2NvdW50W3RjXTsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh0eHEgJmd0Oz0gbmV0ZGV2LSZndDtyZWFsX251bV90eF9xdWV1ZXMpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtJmd0O25ldGRldiwgdHJ1ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX2ZsYWdzID0gbXFwcmlvLSZndDtmbGFnczsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQkvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBsZWZ0IGF0IHplcm87IHNlZSBzcGFyc2UKJiM0MzsJCSAqIE1EUSB3cml0ZSBiZWhhdmlvdXIgaW4gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLgomIzQzOwkJICovCiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdLAomIzQzOwkJCQkJCQkgICAgICBxY291bnQpOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tJmd0O21heF9yYXRlW3RjXSwKJiM0MzsJCQkJCQkJICAgICAgcWNvdW50KTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcbiYjMzQ7LAomIzQzOwkJCQkgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpb19taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvX21heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsKJiM0MzsJCQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwKJiM0MzsJCQkJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LSZndDtjb3VudFtpXSwgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFudXA6CiYjNDM7CW90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7CiYjNDM7CXN0cnVjdCB0Y19tcXByaW9fY2FwcyAqY2FwczsKJiM0MzsKJiM0MzsJaWYgKGJhc2UtJmd0O3R5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwljYXBzID0gYmFzZS0mZ3Q7Y2FwczsKJiM0MzsJY2Fwcy0mZ3Q7dmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsCiAJCSAgdm9pZCAqdHlwZV9kYXRhKQogewogCXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRDX1FVRVJZX0NBUFM6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9CTE9DSzoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfYmxvY2sobmV0ZGV2LCB0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfUURJU0NfSFRCOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1FESVNDX01RUFJJTzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwppbmRleCA2OWMwOTExZTI4ZTkxLi4wZmE1YzY1ZDYyMjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLAogCS8qIGNvbmZpZ3VyZSBQSVIgKi8KIAltYXhyYXRlID0gKG5vZGUtJmd0O3JhdGUgJmd0OyBub2RlLSZndDtjZWlsKSA/IG5vZGUtJmd0O3JhdGUgOiBub2RlLSZndDtjZWlsOwogCiYjNDM7CS8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhbgomIzQzOwkgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLgomIzQzOwkgKi8KIAljZmctJmd0O3JlZ3ZhbFsqbnVtX3JlZ3NdID0KIAkJb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTsKIAkoKm51bV9yZWdzKSYjNDM7JiM0Mzs7CkBAIC0xNzI5LDExICYjNDM7MTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKQogCW90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTsKIH0KIAomIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpCiB7CiAJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJlczsKIAomIzQzOwlpZiAoKHBmdmYtJmd0O2ZsYWdzICZhbXA7IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGh0Yi0mZ3Q7Y29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCXN3aXRjaCAoaHRiLSZndDtjb21tYW5kKSB7CiAJY2FzZSBUQ19IVEJfQ1JFQVRFOgogCQlyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLSZndDtwYXJlbnRfY2xhc3NpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAppbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7CiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTsKIAogaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTsKJiM0Mztib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwogaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGxpY2F0aW9ucyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbGFuZGVkLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSBrZXJuZWwgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQ/JiMzNDsgVGhlIHBhdGNoIHRvdWNoZXMgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gIGRpcmVjdG9yeSwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIuIE5vdywgdGhlIGJpZyBxdWVzdGlvbiBpcywgJiMzNDtDYW4gd2UgZXZlbiByZWFjaCB0aGlzIGluIGEgZnV6emluZyBlbnZpcm9ubWVudD8mIzM0OyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgdmVuZG9yLXNwZWNpZmljIG5ldHdvcmsgZHJpdmVycywgbGlrZSB0aGUgT2N0ZW9uVFgyLCBvZnRlbiByZWx5IG9uIHBoeXNpY2FsIGhhcmR3YXJlIOKAkyBQQ0llIGNhcmRzLCB0eXBpY2FsbHkg4oCTIGFuZCBhcmVuJiMzOTt0IHByb3Blcmx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4KClNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBhdmFpbGFibGUgb3IgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGdlbmVyaWMgZHJpdmVyIGltcGxlbWVudGF0aW9uIHRoYXQgbWlnaHQgYmUgbW9yZSBhY2Nlc3NpYmxlLiBTZWVpbmcgdGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIHN1Y2ggYXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY2AsIGBvdHgyX2NvbW1vbi5jYCwgYW5kIGBvdHgyX3RjLmNgLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUga2VybmVsIHNvdXJjZSBhbmQgc2VhcmNoIGZvciBgb2N0ZW9udHgyYCB0byBzZWUgd2hhdCBJIGNhbiBmaW5kLiBVbmRlcnN0YW5kaW5nIHRoZSBkcml2ZXImIzM5O3MgcmVhY2hhYmlsaXR5IGlzIGtleSB0byBkZWNpZGluZyBob3cgbXVjaCBlZmZvcnQgdG8gcHV0IGludG8gZnV6emluZyB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jdGVvbnR4MiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz0xNjk9Y29uZmlnIFNLWTJfREVCVUdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctMTc5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjE4MDpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTE4MS1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb25fZXAvS2NvbmZpZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvTWFrZWZpbGU9MTU9b2JqLXlcdFx0JiM0Mzs9IG9jdGVvbl9lcF92Zi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvTWFrZWZpbGU6MTY6b2JqLXlcdFx0JiM0Mzs9IG9jdGVvbnR4Mi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvTWFrZWZpbGUtMTctb2JqLXlcdFx0JiM0Mzs9IHByZXN0ZXJhL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4OiNkZWZpbmUgREVCVUdGU19ESVJfTkFNRSBcJiMzNDtvY3Rlb250eDJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz00MDEzPXN0YXRpYyBjb25zdCBjaGFyICpydnVfZ2V0X2RiZ19kaXJfbmFtZShzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy00MDIwLVx0ZWxzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzo0MDIxOlx0XHRyZXR1cm4gXCYjMzQ7b2N0ZW9udHgyXCYjMzQ7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy00MDIyLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jLTE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RldmxpbmsuYzoxNjojZGVmaW5lIERSVl9OQU1FIFwmIzM0O29jdGVvbnR4Mi1hZlwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RldmxpbmsuYy0xNy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU9MTg9cnZ1X25pY3BmLSQoQ09ORklHX1hGUk1fT0ZGTE9BRCkgJiM0Mzs9IGNuMTBrX2lwc2VjLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS0xOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZToyMDpjY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTE3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjE4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTktI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jPTExMTg9c3RhdGljIGludCBvdHgyX3Fvc192YWxpZGF0ZV9xdWFudHVtKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTMyIHF1YW50dW0pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jLTExMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmM6MTEyMzpcdC8qIE1heCBSb3VuZCByb2JpbiB3ZWlnaHQgc3VwcG9ydGVkIGJ5IG9jdGVvbnR4MiBhbmQgQ04xMEtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYy0xMTI0LVx0ICogaXMgZGlmZmVyZW50LiBWYWxpZGF0ZSBhY2NvcmRpbmdseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDg2CgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emFiaWxpdHkgb2YgdGhpcyBEcml2ZXIqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBmb3IgYSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlci4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cC4gVGhpcyBoYXJkd2FyZSBpcyBwcmV0dHkgc3BlY2lmaWMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBRRU1VIGVtdWxhdGlvbiB0aGF0JiMzOTtzIGdvaW5nIHRvIHdvcmsgZm9yIHRoaXM/IENoYW5jZXMgYXJlLCBubywgdGhlcmUgaXNuJiMzOTt0LiBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMganVzdCB0byBiZSBzdXJlIOKAkyBidXQgSSYjMzk7bSBub3QgZXhwZWN0aW5nIHRvIGZpbmQgYW4gYG9jdGVvbnR4MmAgZW11bGF0b3IgcmVhZGlseSBhdmFpbGFibGUgaW4gUUVNVS4KCkFuZCBJIGRpZG4mIzM5O3QuIFRoaXMgZHJpdmVyIGlzIHRpZWQgdG8gYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLiBXaGljaCBtZWFucywgc2FkbHksIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBmdXp6ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciB1c2luZyBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIEJlY2F1c2Ugb2YgdGhhdCBsaW1pdGF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBjaGFuZ2VzIGFyZSBkaXJlY3RseSB0aWVkIHRvIHRoYXQgc3BlY2lmaWMgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgdGhlIGZ1enppbmcgd2lsbCBiZSBpbmhlcmVudGx5IHRpZWQgdG8gYSBoYXJkd2FyZSBwbGF0Zm9ybSB0aGF0IGlzbiYjMzk7dCBlYXNpbHkgYWNjZXNzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaHVzLCBpdCBjYW5ub3QgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIFRodXMsIGl0IGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6Mzg6NDguODgyMDUxNTYxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDQxMzQ0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaHVzLCBpdCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6Mzg6NDguODgyMDU3MjAxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgxNDU1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlM2EyMGMxN2IyY2I4ZDA5OGQxMDFjNDQzMjUwNjg3ODBhMDI2NTE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMTA6Mzg6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5AQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxcbitcXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xcbitcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5iNDg4OWVmOGZhYjkyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5AQCAtNjE0LDYgKzYxNCwxNDkgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xcbiBcXG4rc3RhdGljIGludFxcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGksIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IGNudDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHRERUNMQVJFX0JJVE1BUChzbG90cywgMjA0OCk7XFxuK1xcdGludCBlcnIsIHNtcSwgcSwgY250ID0gMDtcXG4rXFxuK1xcdGJpdG1hcF96ZXJvKHNsb3RzLCAyMDQ4KTtcXG4rXFxuK1xcdGZvciAocSA9IDA7IHEgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgcSsrKSB7XFxuK1xcdFxcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgcSk7XFxuK1xcdFxcdGlmICh0ZXN0X2JpdChzbXEsIHNsb3RzKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdHNldF9iaXQoc21xLCBzbG90cyk7XFxuK1xcbitcXHRcXHRpZiAoY250IFxcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0Y250ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNudCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2ZhaWw6XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGVyciwgc21xLCBuID0gMDtcXG4rXFx0dTY0IHJlZ19hZGRyWzJdO1xcbitcXHR1NjQgcmVnX3ZhbFsyXTtcXG4rXFx0dTY0IHJhdGU7XFxuK1xcbitcXHRpZiAoIW1heHJhdGUgXFx1MDAyNlxcdTAwMjYgIW1pbnJhdGUpIHtcXG4rXFx0XFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXHRcXHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzBdID0gMDtcXG4rXFx0XFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFsxXSA9IDA7XFxuK1xcdFxcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0fVxcbitcXG4rXFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXG4rXFx0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xcbitcXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXFxuK1xcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcXG4rXFx0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXFxuK1xcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxcbitcXHQgKiBoYXJkd2FyZSBjYXAuXFxuK1xcdCAqXFxuK1xcdCAqIFNwYXJzZSBNRFEgd3JpdGVzOiBQSVIgYW5kIENJUiBhcmUgcHJvZ3JhbW1lZCBpbmRlcGVuZGVudGx5LiAgSWZcXG4rXFx0ICogbWF4cmF0ZSBvciBtaW5yYXRlIGlzIHplcm8sIHRoZSBtYXRjaGluZyByZWdpc3RlciBpcyBub3Qgd3JpdHRlbi5cXG4rXFx0ICogV2hlbiB0aGUgdGMgbXFwcmlvIGNvbW1hbmQgb21pdHMgbWluX3JhdGUgb3IgbWF4X3JhdGUgKG9yIHNldHMgYVxcbitcXHQgKiBwZXItVEMgcmF0ZSB0byB6ZXJvKSwgdGhlIGRyaXZlciBsZWF2ZXMgdGhlIG90aGVyIE1EUSBzaGFwZXJcXG4rXFx0ICogcmVnaXN0ZXIgdW50b3VjaGVkOyBhbnkgcmF0ZSBwcmV2aW91c2x5IGFwcGxpZWQgdGhlcmUgcmVtYWlucyBpblxcbitcXHQgKiBoYXJkd2FyZSB1bnRpbCBib3RoIGlucHV0cyBhcmUgemVybyAoZnVsbCBjbGVhcikgb3IgdGhlIHJlZ2lzdGVyXFxuK1xcdCAqIGlzIHdyaXR0ZW4gYWdhaW4uICBVc2VycyByZWNvbmZpZ3VyaW5nIHNoYXBpbmcgbXVzdCBzdXBwbHkgYm90aFxcbitcXHQgKiBwYXJhbWV0ZXJzIG9yIGRlbGV0ZSBtcXByaW8gYmVmb3JlIGFwcGx5aW5nIGEgbmV3IHJhdGUgcHJvZmlsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChtYXhyYXRlKSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdFxcdG4rKztcXG4rXFx0fVxcbitcXG4rXFx0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cXG4rXFx0aWYgKG1pbnJhdGUpIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0XFx0bisrO1xcbitcXHR9XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBuO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXFxuIHtcXG4gXFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcXG5AQCAtNjUwLDcgKzc5MywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxcbiBcXHRcXHRcXHRcXHRcXHRcXHQodTY0KWh3LVxcdTAwM2VzbXFfbGlua190eXBlKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbiBcXHRcXHQvKiBNRFEgY29uZmlnICovXFxuLVxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbkBAIC03NzgsNiArOTI1LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpXFxuK1xcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuIFxcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94KTtcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG5AQCAtNTEyLDkgKzUxMiwxNCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xcbiAjZGVmaW5lIE9UWDJfRkxBR19SRVBfTU9ERV9FTkFCTEVEXFx0XFx0IEJJVF9VTEwoMTgpXFxuICNkZWZpbmUgT1RYMl9GTEFHX1BPUlRfVVBcXHRcXHRcXHRCSVRfVUxMKDE5KVxcbiAjZGVmaW5lIE9UWDJfRkxBR19JUFNFQ19PRkZMT0FEX0VOQUJMRURcXHRcXHRCSVRfVUxMKDIwKVxcbisjZGVmaW5lIE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRURcXHRCSVRfVUxMKDIxKVxcbiBcXHR1NjRcXHRcXHRcXHRmbGFncztcXG4gXFx0dTY0XFx0XFx0XFx0KmNxX29wX2FkZHI7XFxuIFxcbitcXHR1MzJcXHRcXHRcXHRtcXByaW9fZmxhZ3M7XFxuK1xcdHU2NFxcdFxcdFxcdCptcXByaW9fbWluX3JhdGU7XFxuK1xcdHU2NFxcdFxcdFxcdCptcXByaW9fbWF4X3JhdGU7XFxuK1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dcXHRcXHQqeGRwX3Byb2c7XFxuIFxcdHN0cnVjdCBvdHgyX3FzZXRcXHRxc2V0O1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9od1xcdFxcdGh3O1xcbkBAIC0xMjQ2LDYgKzEyNTEsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XFxuIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7XFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHR4cSxcXG4rXFx0XFx0XFx0XFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsXFxuIFxcdFxcdFxcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XFxuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxcbiBcXHR1OCBvbGRfcGZjX2VuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2IHBmYy1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdG9sZF9wZmNfZW4gPSBwZnZmLVxcdTAwM2VwZmNfZW47XFxuIFxcdHBmdmYtXFx1MDAzZXBmY19lbiA9IHBmYy1cXHUwMDNlcGZjX2VuO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuaW5kZXggYTAzNDBmMzQyMmJmOS4uM2Y0OTRjZmJmY2VlMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5AQCAtMjg3LDYgKzI4NywxNyBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChjaGFubmVsLVxcdTAwM2V0eF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody50eF9xdWV1ZXMgfHxcXG4rXFx0ICAgICBjaGFubmVsLVxcdTAwM2VyeF9jb3VudCAhPSBwZnZmLVxcdTAwM2Vody5yeF9xdWV1ZXMpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRcXHRuZXRkZXZfaW5mbyhkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiUmVtb3ZlZCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgZHVlIHRvIGNoYW5uZWwgY291bnQgY2hhbmdlXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbmluZGV4IGM5OTVmMjkwMDg1OTAuLmE1ZTk5MDhmYTliNTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTk4MCw2ICsxOTgwLDEwIEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9tZW07XFxuIFxcbitcXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaHc7XFxuK1xcbiBcXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIHBmLVxcdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XFxuIFxcdFxcdGNxX3BvbGwgPSBcXHUwMDI2cXNldC1cXHUwMDNlbmFwaVtxaWR4XTtcXG5AQCAtMjE0MCw2ICsyMTQ0LDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRmcmVlX2lycSh2ZWMsIHBmKTtcXG4gZXJyX2Rpc2FibGVfbmFwaTpcXG4gXFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xcbitlcnJfZnJlZV9odzpcXG4gXFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XFxuIGVycl9mcmVlX21lbTpcXG4gXFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5pbmRleCAwYjQ2ZWMyOWU2NGVhLi5mN2Q4MGQ1OTgwZDc5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuQEAgLTE2LDYgKzE2LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X3NjaGVkLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY24xMGsuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm90eDJfY29tbW9uLmhcXFwiXFxuQEAgLTU5LDYgKzYwLDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFxcdTAwM2NcXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cXG4rXFx0XFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcXG4gXFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xcbiBcXHR9XFxuQEAgLTE1OTgsMTQgKzE2MDIsMzQxIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIG5pYywgbmljLCBpbmdyZXNzKTtcXG4gfVxcbiBcXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsIFRDXFxuKyAqIG1hcHBpbmdzLCBhbmQgdGhlIHJhdGUtbGltaXQgZmxhZy4gVXNlZCBvbiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd25cXG4rICogKHRjIHFkaXNjIGRlbCksIG5vdCBvbiBpbnRlcm5hbCBzdG9wL29wZW4gY3ljbGVzIHN1Y2ggYXMgTVRVIGNoYW5nZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGRldm1fa2ZyZWUocGZ2Zi1cXHUwMDNlZGV2LCBwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUpO1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlID0gTlVMTDtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlID0gTlVMTDtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX2ZsYWdzID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFxuK1xcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXFx1MDAzZWRldiwgbnVtX3R4cSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlIHx8ICFwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGUpIHtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdGludCBsdmwsIGlkeDtcXG4rXFxuK1xcdGZvciAobHZsID0gMDsgbHZsIFxcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XFxuK1xcdFxcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdOyBpZHgrKykge1xcbitcXHRcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGlmICghKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSlcXG4rXFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfk9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQ7XFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XFxuK1xcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpb19tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX2ZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCBuZXRpZl9jbG9zZSgpIGNsZWFycyBJRkZfVVAgYW5kIGxlYXZlcyB0aGVcXG4rICogaW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlbHkgZG93bi5cXG4rICovXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxcbit7XFxuK1xcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bmV0ZGV2X2luZm8obmV0ZGV2LFxcbitcXHRcXHQgICAgXFxcIm1xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqL1xcbitcXHRpZiAocmF0ZV9saW1pdClcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRDtcXG4rXFxuK1xcdGVyciA9IG9wcy1cXHUwMDNlbmRvX29wZW4obmV0ZGV2KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpbnQgZG93bl9lcnI7XFxuK1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXHRcXHRpZiAoZG93bl9lcnIpXFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZG93bl9lcnIpO1xcbitcXHRcXHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXFxuK1xcdFxcdG5ldGlmX2Nsb3NlKG5ldGRldik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB1NjQgb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUodTY0IHJhdGUsIHUzMiBxY291bnQpXFxuK3tcXG4rXFx0aWYgKCFyYXRlIHx8IHFjb3VudCBcXHUwMDNjPSAxKVxcbitcXHRcXHRyZXR1cm4gcmF0ZTtcXG4rXFxuK1xcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdGJvb2wgaGFkX21xcHJpbyA9ICEhKHBmdmYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCk7XFxuK1xcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCBkb3duX2VyciwgZXJyO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXG4rXFx0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cXG4rXFx0aWYgKCFoYWRfbXFwcmlvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFxuK1xcdGlmIChpZl91cCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGRvd25fZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IHRjLCB0eHEsIGVyciwgaTtcXG4rXFxuK1xcdGlmICghaWZfdXApIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFxcblxcXCIsIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFxcdTAwMjZwZnZmLVxcdTAwM2Vody5jYXBfZmxhZykpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVxcdTAwM2VwZGV2KSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VwZmNfZW4pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBxb3B0LVxcdTAwM2VudW1fdGMsIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcyBcXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgbWF4X3JhdGUgXFx1MDAyNlxcdTAwMjYgbWluX3JhdGUgXFx1MDAzZSBtYXhfcmF0ZSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFvcHQtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0aWYgKHR4cSBcXHUwMDNlPSBuZXRkZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cXHUwMDNlbmV0ZGV2LCB0cnVlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIGxlZnQgYXQgemVybzsgc2VlIHNwYXJzZVxcbitcXHRcXHQgKiBNRFEgd3JpdGUgYmVoYXZpb3VyIGluIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHFjb3VudCk7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y10sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHFjb3VudCk7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHRjLCB0eHEsIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fbWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xcbitcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHFvcHQtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXFx1MDAzZWNvdW50W2ldLCBxb3B0LVxcdTAwM2VvZmZzZXRbaV0pO1xcbitcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2NsZWFudXA6XFxuK1xcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbiBcXHQvKiBjb25maWd1cmUgUElSICovXFxuIFxcdG1heHJhdGUgPSAobm9kZS1cXHUwMDNlcmF0ZSBcXHUwMDNlIG5vZGUtXFx1MDAzZWNlaWwpID8gbm9kZS1cXHUwMDNlcmF0ZSA6IG5vZGUtXFx1MDAzZWNlaWw7XFxuIFxcbitcXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cXG4rXFx0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cXG4rXFx0ICovXFxuIFxcdGNmZy1cXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxcbiBcXHRcXHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xcbiBcXHQoKm51bV9yZWdzKSsrO1xcbkBAIC0xNzI5LDExICsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcXG4gfVxcbiBcXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcXG4rfVxcbitcXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxcbiB7XFxuIFxcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4rXFx0aWYgKChwZnZmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBodGItXFx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cXHUwMDNlZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiSFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0c3dpdGNoIChodGItXFx1MDAzZWNvbW1hbmQpIHtcXG4gXFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxcbiBcXHRcXHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVxcdTAwM2VwYXJlbnRfY2xhc3NpZCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XFxuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xcbiBcXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XFxuIGludCBvdHgyX3Fvc19lbmFibGVfc3Eoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjM4OjQ5LjM1MDg1ODc2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0OTM1MzIwMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gVGh1cywgaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzYTIwYzE3YjJjYjhkMDk4ZDEwMWM0NDMyNTA2ODc4MGEwMjY1MTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDEwOjM4OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4rXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cIixcbitcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IGNhNzNhOTRkYjc5NDMuLmI0ODg5ZWY4ZmFiOTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTQsNiArNjE0LDE0OSBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRERUNMQVJFX0JJVE1BUChzbG90cywgMjA0OCk7XG4rXHRpbnQgZXJyLCBzbXEsIHEsIGNudCA9IDA7XG4rXG4rXHRiaXRtYXBfemVybyhzbG90cywgMjA0OCk7XG4rXG4rXHRmb3IgKHEgPSAwOyBxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyBxKyspIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCBxKTtcbitcdFx0aWYgKHRlc3RfYml0KHNtcSwgc2xvdHMpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4rXHRcdHJlZ192YWxbY250XSA9IDA7XG4rXHRcdGNudCsrO1xuK1xuK1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbY250XSA9IDA7XG4rXHRcdGNudCsrO1xuK1xuK1x0XHRzZXRfYml0KHNtcSwgc2xvdHMpO1xuK1xuK1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbitcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBmYWlsO1xuK1x0XHRjbnQgPSAwO1xuK1x0fVxuK1xuK1x0aWYgKGNudCkge1xuK1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbitcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBmYWlsO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rZmFpbDpcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCBpbnQgdHhxLCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpXG4re1xuK1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4rXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcbitcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4rXHR1NjQgcmVnX2FkZHJbMl07XG4rXHR1NjQgcmVnX3ZhbFsyXTtcbitcdHU2NCByYXRlO1xuK1xuK1x0aWYgKCFtYXhyYXRlIFx1MDAyNlx1MDAyNiAhbWlucmF0ZSkge1xuK1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXHRcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4rXHRcdHJlZ192YWxbMF0gPSAwO1xuK1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzFdID0gMDtcbitcdFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0fVxuK1xuK1x0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcbitcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cbitcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcbitcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbitcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxuK1x0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXG4rXHQgKiBoYXJkd2FyZSBjYXAuXG4rXHQgKlxuK1x0ICogU3BhcnNlIE1EUSB3cml0ZXM6IFBJUiBhbmQgQ0lSIGFyZSBwcm9ncmFtbWVkIGluZGVwZW5kZW50bHkuICBJZlxuK1x0ICogbWF4cmF0ZSBvciBtaW5yYXRlIGlzIHplcm8sIHRoZSBtYXRjaGluZyByZWdpc3RlciBpcyBub3Qgd3JpdHRlbi5cbitcdCAqIFdoZW4gdGhlIHRjIG1xcHJpbyBjb21tYW5kIG9taXRzIG1pbl9yYXRlIG9yIG1heF9yYXRlIChvciBzZXRzIGFcbitcdCAqIHBlci1UQyByYXRlIHRvIHplcm8pLCB0aGUgZHJpdmVyIGxlYXZlcyB0aGUgb3RoZXIgTURRIHNoYXBlclxuK1x0ICogcmVnaXN0ZXIgdW50b3VjaGVkOyBhbnkgcmF0ZSBwcmV2aW91c2x5IGFwcGxpZWQgdGhlcmUgcmVtYWlucyBpblxuK1x0ICogaGFyZHdhcmUgdW50aWwgYm90aCBpbnB1dHMgYXJlIHplcm8gKGZ1bGwgY2xlYXIpIG9yIHRoZSByZWdpc3RlclxuK1x0ICogaXMgd3JpdHRlbiBhZ2Fpbi4gIFVzZXJzIHJlY29uZmlndXJpbmcgc2hhcGluZyBtdXN0IHN1cHBseSBib3RoXG4rXHQgKiBwYXJhbWV0ZXJzIG9yIGRlbGV0ZSBtcXByaW8gYmVmb3JlIGFwcGx5aW5nIGEgbmV3IHJhdGUgcHJvZmlsZS5cbitcdCAqL1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4rXHRcdG4rKztcbitcdH1cbitcbitcdC8qIENJUitQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXG4rXHRpZiAobWlucmF0ZSkge1xuK1x0XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdFx0bisrO1xuK1x0fVxuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUwLDcgKzc5MywxMSBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4rXHRcdGVsc2VcbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuK1xuIFx0XHRyZXEtXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xuIFx0XHRyZXEtXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFx1MDAzY1x1MDAzYyAxNjtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG5AQCAtNzc4LDYgKzkyNSw5IEBAIGludCBvdHgyX3R4c2NoX2FsbG9jKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRClcbitcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbiBcdHJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKFx1MDAyNnBmdmYtXHUwMDNlbWJveCk7XG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5pbmRleCBlZWNlZTYxMmI3YjJjLi5kZjE3NWZiMTQ5NTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG5AQCAtNTEyLDkgKzUxMiwxNCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuICNkZWZpbmUgT1RYMl9GTEFHX1JFUF9NT0RFX0VOQUJMRURcdFx0IEJJVF9VTEwoMTgpXG4gI2RlZmluZSBPVFgyX0ZMQUdfUE9SVF9VUFx0XHRcdEJJVF9VTEwoMTkpXG4gI2RlZmluZSBPVFgyX0ZMQUdfSVBTRUNfT0ZGTE9BRF9FTkFCTEVEXHRcdEJJVF9VTEwoMjApXG4rI2RlZmluZSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEXHRCSVRfVUxMKDIxKVxuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHUzMlx0XHRcdG1xcHJpb19mbGFncztcbitcdHU2NFx0XHRcdCptcXByaW9fbWluX3JhdGU7XG4rXHR1NjRcdFx0XHQqbXFwcmlvX21heF9yYXRlO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTEsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li42NzZmNzhkOGZiMzQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAoKHBmdmYtXHUwMDNlZmxhZ3MgXHUwMDI2IE9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQpIFx1MDAyNlx1MDAyNiBwZmMtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiUEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdG9sZF9wZmNfZW4gPSBwZnZmLVx1MDAzZXBmY19lbjtcbiBcdHBmdmYtXHUwMDNlcGZjX2VuID0gcGZjLVx1MDAzZXBmY19lbjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbmluZGV4IGEwMzQwZjM0MjJiZjkuLjNmNDk0Y2ZiZmNlZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuQEAgLTI4Nyw2ICsyODcsMTcgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbitcdCAgICAgY2hhbm5lbC1cdTAwM2VyeF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiUmVtb3ZlZCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgZHVlIHRvIGNoYW5uZWwgY291bnQgY2hhbmdlXFxuXCIpO1xuK1x0fVxuK1xuIFx0aWYgKGlmX3VwKVxuIFx0XHRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5pbmRleCBjOTk1ZjI5MDA4NTkwLi5hNWU5OTA4ZmE5YjU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE5ODAsNiArMTk4MCwxMCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbitcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfaHc7XG4rXG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcbiBcdFx0Y3FfcG9sbCA9IFx1MDAyNnFzZXQtXHUwMDNlbmFwaVtxaWR4XTtcbkBAIC0yMTQwLDYgKzIxNDQsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuK2Vycl9mcmVlX2h3OlxuIFx0b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyhwZik7XG4gZXJyX2ZyZWVfbWVtOlxuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMGI0NmVjMjllNjRlYS4uZjdkODBkNTk4MGQ3OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY24xMGsuaFwiXG4gI2luY2x1ZGUgXCJvdHgyX2NvbW1vbi5oXCJcbkBAIC01OSw2ICs2MCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0ZWxzZVxuIFx0XHRcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFx1MDAzY1x1MDAzYyAoKmJ1cnN0X2V4cCAtIDcpKTtcbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTU5OCwxNCArMTYwMiwzNDEgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycywgVENcbisgKiBtYXBwaW5ncywgYW5kIHRoZSByYXRlLWxpbWl0IGZsYWcuIFVzZWQgb24gZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duXG4rICogKHRjIHFkaXNjIGRlbCksIG5vdCBvbiBpbnRlcm5hbCBzdG9wL29wZW4gY3ljbGVzIHN1Y2ggYXMgTVRVIGNoYW5nZS5cbisgKi9cbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSk7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19mbGFncyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvX21heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuK1x0XHRcdFx0XHQgICAgIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpLFxuK1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpIHtcbitcdFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRpbnQgbHZsLCBpZHg7XG4rXG4rXHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XG4rXHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4KyspIHtcbitcdFx0XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHRwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNj0gfk9UWDJfRkxBR19QRVJfUV9SQVRFX0xJTUlUX0VOQUJMRUQ7XG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCEocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpb19taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW9fbWF4X3JhdGUpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Zm9yICh0eHEgPSAwOyB0eHEgXHUwMDNjIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7IHR4cSsrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX2ZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV07XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdO1xuK1xuK1x0XHRpZiAoIW1pbl9yYXRlIFx1MDAyNlx1MDAyNiAhbWF4X3JhdGUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXG5cIixcbitcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXG4rICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4rICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xuKyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHRcbisgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgbmV0aWZfY2xvc2UoKSBjbGVhcnMgSUZGX1VQIGFuZCBsZWF2ZXMgdGhlXG4rICogaW50ZXJmYWNlIGFkbWluaXN0cmF0aXZlbHkgZG93bi5cbisgKi9cbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbitcdGludCBlcnI7XG4rXG4rXHRuZXRkZXZfaW5mbyhuZXRkZXYsXG4rXHRcdCAgICBcIm1xcHJpbzogcmVzdGFydGluZyBpbnRlcmZhY2UgdG8gcmVwcm9ncmFtIFRYIHNjaGVkdWxlcjsgaW4tZmxpZ2h0IHRyYWZmaWMgd2lsbCBiZSBkcm9wcGVkXFxuXCIpO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXG4rXHRpZiAocmF0ZV9saW1pdClcbitcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGludCBkb3duX2VycjtcbitcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cIixcbitcdFx0XHQgICBlcnIpO1xuK1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXHRcdGlmIChkb3duX2VycilcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgc2hhcGVycyBhZnRlciByZXN0YXJ0IGVycm9yOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuK1x0XHQvKiBDYWxsZXIgaG9sZHMgbmV0ZGV2L1JUTkwgbG9jazsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suICovXG4rXHRcdG5ldGlmX2Nsb3NlKG5ldGRldik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxuK3tcbitcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gcmF0ZTtcbitcbitcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml90ZWFyZG93bl90Y19tcXByaW8oc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRib29sIGhhZF9tcXByaW8gPSAhIShwZnZmLVx1MDAzZWZsYWdzIFx1MDAyNiBPVFgyX0ZMQUdfUEVSX1FfUkFURV9MSU1JVF9FTkFCTEVEKTtcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCBkb3duX2VyciwgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xuK1x0aWYgKCFoYWRfbXFwcmlvKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcbitcdGlmIChpZl91cCkge1xuK1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGRvd25fZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFpZl91cCkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxuXCIsXG4rXHRcdFx0ICAgcW9wdC1cdTAwM2VudW1fdGMsIHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4rXG4rXHRcdGlmIChtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgbWF4X3JhdGUgXHUwMDI2XHUwMDI2IG1pbl9yYXRlIFx1MDAzZSBtYXhfcmF0ZSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcW9wdC1cdTAwM2Vjb3VudFt0Y107IHR4cSsrKSB7XG4rXHRcdFx0aWYgKHR4cSBcdTAwM2U9IG5ldGRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBjbGVhbnVwO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHQvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBsZWZ0IGF0IHplcm87IHNlZSBzcGFyc2VcbitcdFx0ICogTURRIHdyaXRlIGJlaGF2aW91ciBpbiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvX21pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXHUwMDNlY291bnRbaV0sIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xuK1x0c3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzO1xuK1xuK1x0aWYgKGJhc2UtXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGNhcHMgPSBiYXNlLVx1MDAzZWNhcHM7XG4rXHRjYXBzLVx1MDAzZXZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQ19RVUVSWV9DQVBTOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX0JMT0NLOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7XG4gXHRjYXNlIFRDX1NFVFVQX1FESVNDX0hUQjpcbiBcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTtcbitcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuK1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uMGZhNWM2NWQ2MjIxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4rXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbitcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4rXHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSsrO1xuQEAgLTE3MjksMTEgKzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcbiB9XG4gXG4rYm9vbCBvdHgyX3Fvc19odGJfYWN0aXZlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcbit9XG4rXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKVxuIHtcbiBcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0aW50IHJlcztcbiBcbitcdGlmICgocGZ2Zi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX1BFUl9RX1JBVEVfTElNSVRfRU5BQkxFRCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgaHRiLVx1MDAzZWNvbW1hbmQgIT0gVENfSFRCX0RFU1RST1kpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4rXHRcdFx0XHQgICBcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiArMjMsNyBAQCBlbnVtIHFvc19zbXFfb3BlcmF0aW9ucyB7XG4gdTY0IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTY0IG1heHJhdGUsIHUzMiBidXJzdCk7XG4gXG4gaW50IG90eDJfc2V0dXBfdGNfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqaHRiKTtcbitib29sIG90eDJfcW9zX2h0Yl9hY3RpdmUoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7XG4gaW50IG90eDJfcW9zX2VuYWJsZV9zcShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDEwOjM4OjQ5LjM1MDg2MDUxNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTEwODk4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGxpY2F0aW9ucyBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsYW5kZWQsIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzLCBcIkRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsaXR5IGludG8gdGhlIGtlcm5lbCB0aGF0IG5lZWRzIHRvIGJlIGZ1enplZD9cIiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AgZGlyZWN0b3J5LCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLiBOb3csIHRoZSBiaWcgcXVlc3Rpb24gaXMsIFwiQ2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/XCIgTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHZlbmRvci1zcGVjaWZpYyBuZXR3b3JrIGRyaXZlcnMsIGxpa2UgdGhlIE9jdGVvblRYMiwgb2Z0ZW4gcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZSDigJMgUENJZSBjYXJkcywgdHlwaWNhbGx5IOKAkyBhbmQgYXJlbid0IHByb3Blcmx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gZW11bGF0b3IgYXZhaWxhYmxlIG9yIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGdlbmVyaWMgZHJpdmVyIGltcGxlbWVudGF0aW9uIHRoYXQgbWlnaHQgYmUgbW9yZSBhY2Nlc3NpYmxlLiBTZWVpbmcgdGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIHN1Y2ggYXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY2AsIGBvdHgyX2NvbW1vbi5jYCwgYW5kIGBvdHgyX3RjLmNgLCBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBzZWFyY2ggZm9yIGBvY3Rlb250eDJgIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuIFVuZGVyc3RhbmRpbmcgdGhlIGRyaXZlcidzIHJlYWNoYWJpbGl0eSBpcyBrZXkgdG8gZGVjaWRpbmcgaG93IG11Y2ggZWZmb3J0IHRvIHB1dCBpbnRvIGZ1enppbmcgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxMDozODo1Ni4zNDE5NTI4NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5OTEzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2N0ZW9udHgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz0xNjk9Y29uZmlnIFNLWTJfREVCVUdcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy0xNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjE4MDpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTE4MS1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9uX2VwL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL01ha2VmaWxlPTE1PW9iai15XFx0XFx0Kz0gb2N0ZW9uX2VwX3ZmL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvTWFrZWZpbGU6MTY6b2JqLXlcXHRcXHQrPSBvY3Rlb250eDIvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9NYWtlZmlsZS0xNy1vYmoteVxcdFxcdCs9IHByZXN0ZXJhL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4OiNkZWZpbmUgREVCVUdGU19ESVJfTkFNRSBcXFwib2N0ZW9udHgyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTQwMTM9c3RhdGljIGNvbnN0IGNoYXIgKnJ2dV9nZXRfZGJnX2Rpcl9uYW1lKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtNDAyMC1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzo0MDIxOlxcdFxcdHJldHVybiBcXFwib2N0ZW9udHgyXFxcIjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTQwMjItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RldmxpbmsuYy0xNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jOjE2OiNkZWZpbmUgRFJWX05BTUUgXFxcIm9jdGVvbnR4Mi1hZlxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jLTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlPTE4PXJ2dV9uaWNwZi0kKENPTkZJR19YRlJNX09GRkxPQUQpICs9IGNuMTBrX2lwc2VjLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjIwOmNjZmxhZ3MteSArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTE3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjE4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9vY3Rlb250eDIvYXNtLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTktI2luY2x1ZGUgXFx1MDAzY25ldC9tYWNzZWMuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYz0xMTE4PXN0YXRpYyBpbnQgb3R4Ml9xb3NfdmFsaWRhdGVfcXVhbnR1bShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUzMiBxdWFudHVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jLTExMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jOjExMjM6XFx0LyogTWF4IFJvdW5kIHJvYmluIHdlaWdodCBzdXBwb3J0ZWQgYnkgb2N0ZW9udHgyIGFuZCBDTjEwS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYy0xMTI0LVxcdCAqIGlzIGRpZmZlcmVudC4gVmFsaWRhdGUgYWNjb3JkaW5nbHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6Mzg6NTYuMzkzOTQ5MzYyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg5MjE5OTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoaXMgRHJpdmVyKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBmb3IgYSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlci4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cC4gVGhpcyBoYXJkd2FyZSBpcyBwcmV0dHkgc3BlY2lmaWMuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBRRU1VIGVtdWxhdGlvbiB0aGF0J3MgZ29pbmcgdG8gd29yayBmb3IgdGhpcz8gQ2hhbmNlcyBhcmUsIG5vLCB0aGVyZSBpc24ndC4gSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMganVzdCB0byBiZSBzdXJlIOKAkyBidXQgSSdtIG5vdCBleHBlY3RpbmcgdG8gZmluZCBhbiBgb2N0ZW9udHgyYCBlbXVsYXRvciByZWFkaWx5IGF2YWlsYWJsZSBpbiBRRU1VLlxuXG5BbmQgSSBkaWRuJ3QuIFRoaXMgZHJpdmVyIGlzIHRpZWQgdG8gYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlLiBXaGljaCBtZWFucywgc2FkbHksIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGZ1enplZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9yIHVzaW5nIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gQmVjYXVzZSBvZiB0aGF0IGxpbWl0YXRpb24sIEknbSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY2hhbmdlcyBhcmUgZGlyZWN0bHkgdGllZCB0byB0aGF0IHNwZWNpZmljIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgaGFyZHdhcmUsIHdoaWNoIG1lYW5zIHRoZSBmdXp6aW5nIHdpbGwgYmUgaW5oZXJlbnRseSB0aWVkIHRvIGEgaGFyZHdhcmUgcGxhdGZvcm0gdGhhdCBpc24ndCBlYXNpbHkgYWNjZXNzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0ODYsIk91dHB1dFRva2VucyI6NzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTA6Mzk6MDQuMjg2MTUyMDY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gVGh1cywgaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBUaHVzLCBpdCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5d22p[1] Phase: Running StartedAt: 2026-08-06 10:39:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5d22p[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-06 10:39:15 +0000 UTC FinishedAt: 2026-08-06 10:39:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}