Name: series-workflowf8nf9 Phase: Failed StartedAt: 2026-07-31 13:28:15 +0000 UTC FinishedAt: 2026-07-31 13:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf8nf9[0] Phase: Succeeded StartedAt: 2026-07-31 13:28:15 +0000 UTC FinishedAt: 2026-07-31 13:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf8nf9[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 13:28:15 +0000 UTC FinishedAt: 2026-07-31 13:30:54 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZHNfY29yZSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWRhYmFmY2IyZTliMDNiNGUwOTY3Yzk0M2U1NDM0YzU5ZWQyYTdkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDEzOjMwOjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcbmluZGV4IDllOGExNmM0NDEwMjkuLjQ5NDg3YTM1YzE2MzIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcbkBAIC0xMDIsNiAmIzQzOzEwMiw5NSBAQCBjdXJyZW50bHkgaW4gdXNlLCBhbmQgdGhhdCBiYW5rIHdpbGwgdXNlZCBmb3IgdGhlIG5leHQgYm9vdDo6XG4gICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgXFxcbiAgICAgICAgICAgICBmaWxlIHBlbnNhbmRvL2RzY19md18xLjYzLjAtMjIudGFyXG4gXG4mIzQzO0Zpcm13YXJlIE1hbmFnZW1lbnQgKFBMRE0pXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGRldmxpbmsgZmxhc2ggY29tbWFuZFxuJiM0Mzt3aXRoIGEgUExETSBmaXJtd2FyZSBwYWNrYWdlLiBUaGUgZW50aXJlIHBhY2thZ2UgY2FuIGJlIHVwZGF0ZWQgYXQgb25jZTo6XG4mIzQzO1xuJiM0MzsgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBmaWxlIGZpcm13YXJlLnBsZG1md1xuJiM0MztcbiYjNDM7SW5kaXZpZHVhbCBjb21wb25lbnRzIGNhbiBhbHNvIGJlIHVwZGF0ZWQgYnkgc3BlY2lmeWluZyB0aGUgY29tcG9uZW50IG5hbWU6OlxuJiM0MztcbiYjNDM7ICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgXFxcbiYjNDM7ICAgICAgICAgICAgZmlsZSBmaXJtd2FyZS5wbGRtZncgY29tcG9uZW50IGZ3LmNwbGRcbiYjNDM7XG4mIzQzO1Blci1jb21wb25lbnQgdXBkYXRlIHVzZXMgZHJpdmVyLWRlZmluZWQgY29tcG9uZW50IG5hbWVzIChmdywgZncuY3BsZCxcbiYjNDM7ZXRjLikuIE5vdCBhbGwgY29tcG9uZW50cyBzdXBwb3J0IHBlci1jb21wb25lbnQgdXBkYXRlIC1cbiYjNDM7ZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3RcbiYjNDM7YmUgdXBkYXRlZC5cbiYjNDM7XG4mIzQzO0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50XG4mIzQzO25hbWUgKGUuZy4sIGBgZndgYCBmb3IgYGBmdy5nb2xkYGApIHdpdGggYSBnb2xkZncgcGFja2FnZSBmaWxlIHdoZW4gdGhlXG4mIzQzO2RldmljZSBzdXBwb3J0cyBwZXItY29tcG9uZW50IHVwZGF0ZS4gVGhlIGBgLmdvbGRgYCBzdWZmaXggaW4gZGV2bGluayBpbmZvXG4mIzQzO291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuXG4mIzQzO1xuJiM0MztJbmZvIHZlcnNpb25zIChQTERNKVxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7RmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIHJlcG9ydHMgY29tcG9uZW50IHZlcnNpb25zIHVzaW5nIGRyaXZlci1kZWZpbmVkXG4mIzQzO25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6XG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGZvciBQTERNLWNhcGFibGUgZmlybXdhcmVcbiYjNDM7ICAgOndpZHRoczogNSA1IDkwXG4mIzQzO1xuJiM0MzsgICAqIC0gTmFtZVxuJiM0MzsgICAgIC0gVHlwZVxuJiM0MzsgICAgIC0gRGVzY3JpcHRpb25cbiYjNDM7ICAgKiAtIGBgZndgYFxuJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkXG4mIzQzOyAgICAgLSBNYWluIGZpcm13YXJlXG4mIzQzOyAgICogLSBgYGZ3LmdvbGRgYFxuJiM0MzsgICAgIC0gc3RvcmVkXG4mIzQzOyAgICAgLSBHb2xkIChyZWNvdmVyeSkgZmlybXdhcmVcbiYjNDM7ICAgKiAtIGBgZncuYm9vdGxvYWRlcmBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIEJvb3QgbG9hZGVyXG4mIzQzOyAgICogLSBgYGZ3LmNwbGRgYFxuJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkXG4mIzQzOyAgICAgLSBDUExEXG4mIzQzOyAgICogLSBgYGZ3LnNlY3VyZWBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIFNlY3VyZSBib290IGZpcm13YXJlXG4mIzQzOyAgICogLSBgYGZ3LmZwZ2FgYFxuJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkXG4mIzQzOyAgICAgLSBGUEdBIGNvbmZpZ3VyYXRpb25cbiYjNDM7ICAgKiAtIGBgZncuc3VjYGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBmaXJtd2FyZVxuJiM0MzsgICAqIC0gYGBmdy5zdWMuYm9vdGxvYWRlcmBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIFN5c3RlbSBVbml0IENvbnRyb2xsZXIgYm9vdGxvYWRlclxuJiM0MzsgICAqIC0gYGBmdy51Ym9vdGBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIFUtQm9vdCBib290bG9hZGVyXG4mIzQzOyAgICogLSBgYGFzaWMuaWRgYFxuJiM0MzsgICAgIC0gZml4ZWRcbiYjNDM7ICAgICAtIFRoZSBBU0lDIHR5cGUgZm9yIHRoaXMgZGV2aWNlXG4mIzQzOyAgICogLSBgYGFzaWMucmV2YGBcbiYjNDM7ICAgICAtIGZpeGVkXG4mIzQzOyAgICAgLSBUaGUgcmV2aXNpb24gb2YgdGhlIEFTSUMgZm9yIHRoaXMgZGV2aWNlXG4mIzQzO1xuJiM0MztFeGFtcGxlIG91dHB1dDo6XG4mIzQzO1xuJiM0MzsgICQgZGV2bGluayBkZXYgaW5mbyBwY2kvMDAwMDowMDowNS4wXG4mIzQzOyAgcGNpLzAwMDA6MDA6MDUuMDpcbiYjNDM7ICAgIGRyaXZlciBwZHNfY29yZVxuJiM0MzsgICAgc2VyaWFsX251bWJlciBGTE0xODQyMDA3M1xuJiM0MzsgICAgdmVyc2lvbnM6XG4mIzQzOyAgICAgICAgZml4ZWQ6XG4mIzQzOyAgICAgICAgICBhc2ljLmlkIDB4MFxuJiM0MzsgICAgICAgICAgYXNpYy5yZXYgMHgwXG4mIzQzOyAgICAgICAgcnVubmluZzpcbiYjNDM7ICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjNcbiYjNDM7ICAgICAgICAgIGZ3IDEuMy4wXG4mIzQzOyAgICAgICAgICBmdy5jcGxkIDMuMThcbiYjNDM7ICAgICAgICBzdG9yZWQ6XG4mIzQzOyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4mIzQzOyAgICAgICAgICBmdy5nb2xkIDEuMi4wXG4mIzQzOyAgICAgICAgICBmdyAxLjMuMFxuJiM0MzsgICAgICAgICAgZncuY3BsZCAzLjE4XG4mIzQzO1xuIEhlYWx0aCBSZXBvcnRlcnNcbiA9PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ1xuaW5kZXggZTM1OTkxMTQxYTFhMi4uNzQzZTNkNGI2Yjk0ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ1xuQEAgLTE3MSw2ICYjNDM7MTcxLDcgQEAgY29uZmlnIFBEU19DT1JFXG4gXHRkZXBlbmRzIG9uIDY0QklUIFx1MDAyNlx1MDAyNiBQQ0lcbiBcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiYjNDM7XHRzZWxlY3QgUExETUZXXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2ZcbiBcdCAgYWRhcHRlcnMuICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG5pbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuQEAgLTQ4OSw2ICYjNDM7NDg5LDE1IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZylcbiBcdFx0cGRzY19kZXZjbWRfcmVzZXQocGRzYyk7XG4gXG4gXHRwY2lfY2xlYXJfbWFzdGVyKHBkc2MtXHUwMDNlcGRldik7XG4mIzQzO1x0aWYgKCFwZHNjLVx1MDAzZXBkZXYtXHUwMDNlaXNfdmlydGZuKSB7XG4mIzQzO1x0XHR1MTYgdmFsO1xuJiM0MztcbiYjNDM7XHRcdC8qIEZsdXNoIGFueSBpbi1mbGlnaHQgRE1BIGJlZm9yZSBmcmVlaW5nIGJ1ZmZlcnMuXG4mIzQzO1x0XHQgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3JcbiYjNDM7XHRcdCAqIGRldmljZS1pbml0aWF0ZWQgbWVtb3J5IHdyaXRlcyBoYXZlIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2YWwpO1xuJiM0MztcdH1cbiBcbiBcdHBkc2NfY29yZV91bmluaXQocGRzYyk7XG4gXG5AQCAtNDk3LDYgJiM0Mzs1MDYsOCBAQCB2b2lkIHBkc2NfdGVhcmRvd24oc3RydWN0IHBkc2MgKnBkc2MsIGJvb2wgcmVtb3ZpbmcpXG4gXHRcdHBkc2MtXHUwMDNldmlmdHlwZV9zdGF0dXMgPSBOVUxMO1xuIFx0fVxuIFxuJiM0MztcdHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7XG4mIzQzO1x0cGRzY19ob3N0X21lbV9mcmVlKHBkc2MpO1xuIFx0cGRzY19kZXZfdW5pbml0KHBkc2MpO1xuIFxuIFx0c2V0X2JpdChQRFNDX1NfRldfREVBRCwgXHUwMDI2cGRzYy1cdTAwM2VzdGF0ZSk7XG5AQCAtNTA2LDYgJiM0Mzs1MTcsOCBAQCBpbnQgcGRzY19zdGFydChzdHJ1Y3QgcGRzYyAqcGRzYylcbiB7XG4gXHRwZHNfY29yZV9pbnRyX21hc2soXHUwMDI2cGRzYy1cdTAwM2VpbnRyX2N0cmxbcGRzYy1cdTAwM2VhZG1pbnFjcS5pbnR4XSxcbiBcdFx0XHQgICBQRFNfQ09SRV9JTlRSX01BU0tfQ0xFQVIpO1xuJiM0MztcdHBkc2NfaG9zdF9tZW1fYWRkKHBkc2MpO1xuJiM0MztcdHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0ocGRzYyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTg3LDYgJiM0Mzs2MDAsOCBAQCB2b2lkIHBkc2NfZndfdXAoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiYjNDM7XHRwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTtcbiYjNDM7XG4gXHRlcnIgPSBwZHNjX3NldHVwKHBkc2MsIFBEU0NfU0VUVVBfUkVDT1ZFUlkpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfb3V0O1xuQEAgLTY3MCwzICYjNDM7Njg1LDE2MSBAQCB2b2lkIHBkc2NfaGVhbHRoX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZHNjLVx1MDAzZWNvbmZpZ19sb2NrKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwZHNjX2hvc3RfbWVtX2RlbF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiB0YWcsIHU4IHJlYXNvbilcbiYjNDM7e1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU0sXG4mIzQzO1x0XHQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCxcbiYjNDM7XHRcdC5ob3N0X21lbS50YWcgPSBjcHVfdG9fbGUxNih0YWcpLFxuJiM0MztcdFx0Lmhvc3RfbWVtLnJlYXNvbiA9IHJlYXNvbixcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGRlbCB0YWcgJWRcXG5cJiMzNDssIHRhZyk7XG4mIzQzO1x0cGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2hvc3RfbWVtX2FkZF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIGludCBpbmRleClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpobSA9IFx1MDAyNnBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpbmRleF07XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZO1xuJiM0MztcdGNtZC5ob3N0X21lbS5pbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTtcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIHF1ZXJ5IGluZGV4ICVkXFxuXCYjMzQ7LCBpbmRleCk7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gcXVlcnkgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVyciwgY29tcC5zdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4mIzQzO1x0fVxuJiM0MztcdGhtLVx1MDAzZXNpemUgPSBsZTMyX3RvX2NwdShjb21wLmhvc3RfbWVtLnNpemUpO1xuJiM0MztcdGhtLVx1MDAzZXRhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTtcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gcXVlcnkgcmV0dXJuZWQgc2l6ZSAlZCB0YWcgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRobS1cdTAwM2VzaXplLCBobS1cdTAwM2V0YWcpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWhtLVx1MDAzZXNpemUgfHwgaG0tXHUwMDNlc2l6ZSBcdTAwM2UgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtpbnZhbGlkIHNpemUgJWQgZm9yIHRhZyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aG0tXHUwMDNlc2l6ZSwgaG0tXHUwMDNldGFnKTtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9kZWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRobS1cdTAwM2VvcmRlciA9IGdldF9vcmRlcihobS1cdTAwM2VzaXplKTtcbiYjNDM7XHRobS1cdTAwM2VwZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOLCBobS1cdTAwM2VvcmRlcik7XG4mIzQzO1x0aWYgKCFobS1cdTAwM2VwZykge1xuJiM0MztcdFx0ZGV2X3dhcm4ocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2FsbG9jIG9yZGVyICVkIGZhaWxlZCBmb3IgdGFnICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgaG0tXHUwMDNlb3JkZXIsIGhtLVx1MDAzZXRhZyk7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfZGVsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aG0tXHUwMDNlcGEgPSBkbWFfbWFwX3BhZ2UocGRzYy1cdTAwM2VkZXYsIGhtLVx1MDAzZXBnLCAwLCBobS1cdTAwM2VzaXplLFxuJiM0MztcdFx0XHQgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXHUwMDNlZGV2LCBobS1cdTAwM2VwYSkpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2RtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aG0tXHUwMDNldGFnLCBobS1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhobS1cdTAwM2VwZywgaG0tXHUwMDNlb3JkZXIpO1xuJiM0MztcdFx0aG0tXHUwMDNlcGcgPSBOVUxMO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gZXJyX2RlbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi9cbiYjNDM7XHRwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmNtZCwgMCwgc2l6ZW9mKGNtZCkpO1xuJiM0MztcdG1lbXNldChcdTAwMjZjb21wLCAwLCBzaXplb2YoY29tcCkpO1xuJiM0MztcdGNtZC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU07XG4mIzQzO1x0Y21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9BREQ7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLVx1MDAzZXRhZyk7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLnNpemUgPSBjcHVfdG9fbGUzMihobS1cdTAwM2VzaXplKTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0uYnVmX3BhID0gY3B1X3RvX2xlNjQoaG0tXHUwMDNlcGEpO1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGFkZCB0YWcgJWQgc2l6ZSAlZCBwYSAlcGFkXFxuXCYjMzQ7LFxuJiM0MztcdFx0aG0tXHUwMDNldGFnLCBobS1cdTAwM2VzaXplLCBcdTAwMjZobS1cdTAwM2VwYSk7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gYWRkIGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkIGZvciB0YWcgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVyciwgY29tcC5zdGF0dXMsIGhtLVx1MDAzZXRhZyk7XG4mIzQzO1x0XHRlcnIgPSBlcnIgPyBlcnIgOiAtRUlPO1xuJiM0MztcdFx0Z290byBlcnJfZGVsO1xuJiM0MztcdH1cbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXFxuXCYjMzQ7LCBobS1cdTAwM2V0YWcpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9kZWw6XG4mIzQzO1x0LyogQWZ0ZXIgTUVNX1FVRVJZIHN1Y2NlZWRzLCBmaXJtd2FyZSBleHBlY3RzIE1FTV9BREQgb3IgTUVNX0RFTCAqL1xuJiM0MztcdHBkc2NfaG9zdF9tZW1fZGVsX29uZShwZHNjLCBobS1cdTAwM2V0YWcsIFBEU19SQ19FTk9NRU0pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGRzY19ob3N0X21lbV9hZGQoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTtcbiYjNDM7XHR1MTYgY291bnQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuJiM0MztcdCAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNO1xuJiM0MztcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UO1xuJiM0MztcdGNtZC5ob3N0X21lbS5pbmRleCA9IGNwdV90b19sZTE2KFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UKTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0ubWF4X2NvbnRpZyA9IGNwdV90b19sZTMyKFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XG4mIzQzO1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCYjMzQ7U2VuZGluZyBkZXZjbWQgZm9yIG1lbSBnZXQgY291bnQgbWF4X2NvbnRpZyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gZ2V0IGNvdW50IGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvdW50ID0gbWluKGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0uY291bnQpLFxuJiM0MztcdFx0ICAgIFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UKTtcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gZ2V0IGNvdW50IHJldHVybmVkIGNvdW50ICVkXFxuXCYjMzQ7LCBjb3VudCk7XG4mIzQzO1x0aWYgKGNvdW50ID09IDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzLCBjb3VudCxcbiYjNDM7XHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2MgaG9zdF9tZW1fcmVxcyBhcnJheVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRkbWFfdW5tYXBfcGFnZShwZHNjLVx1MDAzZWRldiwgcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldLnBhLFxuJiM0MztcdFx0XHQgICAgICAgcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldLnNpemUsXG4mIzQzO1x0XHRcdCAgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZXMocGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldLnBnLFxuJiM0MztcdFx0XHQgICAgIHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5vcmRlcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMpO1xuJiM0MztcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IE5VTEw7XG4mIzQzO1x0cGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxcyA9IDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaFxuaW5kZXggYjdmZTlhZDczMzQ5OC4uNzkxNzU2YTUwODcwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiAjZGVmaW5lIF9QRFNDX0hfXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tem9uZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bkcy9wZHNfY29tbW9uLmhcdTAwM2VcbkBAIC0yMyw2ICYjNDM7MjQsMjAgQEBcbiAjZGVmaW5lIFBEU0NfU0VUVVBfUkVDT1ZFUllcdGZhbHNlXG4gI2RlZmluZSBQRFNDX1NFVFVQX0lOSVRcdFx0dHJ1ZVxuIFxuJiM0MzsvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZFxuJiM0MzsgKiBjcHVfdG9fbGUzMigpIHRydW5jYXRpb24gb24gbGFyZ2UtcGFnZSBjb25maWdzXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KVxuJiM0MzsjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UICAyNTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4mIzQzO1x0dm9pZCAqdmE7XG4mIzQzO1x0c2l6ZV90IHNpemU7XG4mIzQzO1x0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcGRzY19kZXZfYmFyIHtcbiBcdHZvaWQgX19pb21lbSAqdmFkZHI7XG4gXHRwaHlzX2FkZHJfdCBidXNfYWRkcjtcbkBAIC0xNDEsNiAmIzQzOzE1NiwxNCBAQCBzdHJ1Y3QgcGRzY192aWZ0eXBlIHtcbiBcdHN0cnVjdCBwZHNfYXV4aWxpYXJ5X2RldiAqcGFkZXY7XG4gfTtcbiBcbiYjNDM7c3RydWN0IHBkc2NfaG9zdF9tZW0ge1xuJiM0MztcdHUzMiBzaXplO1xuJiM0MztcdHUxNiB0YWc7XG4mIzQzO1x0dTggb3JkZXI7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBnO1xuJiM0MztcdGRtYV9hZGRyX3QgcGE7XG4mIzQzO307XG4mIzQzO1xuIC8qIE5vIHN0YXRlIGZsYWdzIHNldCBtZWFucyB3ZSBhcmUgaW4gYSBzdGVhZHkgcnVubmluZyBzdGF0ZSAqL1xuIGVudW0gcGRzY19zdGF0ZV9mbGFncyB7XG4gXHRQRFNDX1NfRldfREVBRCxcdFx0ICAgIC8qIHN0b3BwZWQsIHdhaXQgb24gc3RhcnR1cCBvciByZWNvdmVyeSAqL1xuQEAgLTE4NSw2ICYjNDM7MjA4LDggQEAgc3RydWN0IHBkc2Mge1xuIFx0c3RydWN0IG11dGV4IGRldmNtZF9sb2NrO1x0LyogbG9jayBmb3IgZGV2X2NtZCBvcGVyYXRpb25zICovXG4gXHRzdHJ1Y3QgbXV0ZXggY29uZmlnX2xvY2s7XHQvKiBsb2NrIGZvciBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgKi9cbiBcdHNwaW5sb2NrX3QgYWRtaW5xX2xvY2s7XHRcdC8qIGxvY2sgZm9yIGFkbWlucSBvcGVyYXRpb25zICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDtcbiYjNDM7XHRzcGlubG9ja190IGRlZmVycmVkX2RtYV9sb2NrO1x0LyogbG9jayBmb3IgZGVmZXJyZWQgRE1BIGxpc3QgKi9cbiBcdHJlZmNvdW50X3QgYWRtaW5xX3JlZmNudDtcbiBcdHN0cnVjdCBwZHNfY29yZV9kZXZfaW5mb19yZWdzIF9faW9tZW0gKmluZm9fcmVncztcbiBcdHN0cnVjdCBwZHNfY29yZV9kZXZfY21kX3JlZ3MgX19pb21lbSAqY21kX3JlZ3M7XG5AQCAtMTk5LDYgJiM0MzsyMjQsMTEgQEAgc3RydWN0IHBkc2Mge1xuIFx0dTY0IGxhc3RfZWlkO1xuIFx0c3RydWN0IHBkc2NfdmlmdHlwZSAqdmlmdHlwZV9zdGF0dXM7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGNpX3Jlc2V0X3dvcms7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpob3N0X21lbV9yZXFzO1xuJiM0MztcdHUxNiBudW1faG9zdF9tZW1fcmVxcztcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gZndfY29tcG9uZW50cztcbiB9O1xuIFxuIC8qKiBlbnVtIHBkc19jb3JlX2RiZWxsX2JpdHMgLSBiaXR3aXNlIGNvbXBvc2l0aW9uIG9mIGRiZWxsIHZhbHVlcy5cbkBAIC0yNzUsMTQgJiM0MzszMDUsMjQgQEAgdm9pZCBwZHNjX2RlYnVnZnNfYWRkX3ZpZnR5cGUoc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9pcnFzKHN0cnVjdCBwZHNjICpwZHNjKTtcbiB2b2lkIHBkc2NfZGVidWdmc19hZGRfcWNxKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XG4gdm9pZCBwZHNjX2RlYnVnZnNfZGVsX3FjcShzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XG4mIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4mIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gXG4gaW50IHBkc2NfZXJyX3RvX2Vycm5vKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUgY29kZSk7XG4gYm9vbCBwZHNjX2lzX2Z3X3J1bm5pbmcoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGJvb2wgcGRzY19pc19md19nb29kKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XG4mIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XG4mIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0XHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XG4gaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0XHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XG4mIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG5AQCAtMzE1LDExICYjNDM7MzU1LDIzIEBAIHZvaWQgcGRzY19wcm9jZXNzX2FkbWlucShzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XG4gdm9pZCBwZHNjX3dvcmtfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gaXJxcmV0dXJuX3QgcGRzY19hZG1pbnFfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpO1xuIFxuLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjNDM7aW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuJiM0MztcdFx0XHQgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztpbnQgcGRzY19nZXRfY29tcG9uZW50X2luZm8oc3RydWN0IHBkc2MgKnBkc2MpO1xuJiM0Mztjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKTtcbiYjNDM7dm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gXG4gdm9pZCBwZHNjX2Z3X2Rvd24oc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX3BjaV9yZXNldF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4mIzQzO3ZvaWQgcGRzY19ob3N0X21lbV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7XG4mIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfYWRkKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LFxuJiM0MztcdFx0XHQgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XG4mIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4mIzQzO1xuICNlbmRpZiAvKiBfUERTQ19IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXG5pbmRleCA4MTBhMGNkOWJjYWM4Li5lZjBhMWI3ZDE1OWI1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xuQEAgLTE3OCwzICYjNDM7MTc4LDQ4IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpXG4gXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLVx1MDAzZWRlbnRyeSk7XG4gXHRxY3EtXHUwMDNlZGVudHJ5ID0gTlVMTDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhvc3RfbWVtX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpobTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMgfHwgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxcyA9PSAwKSB7XG4mIzQzO1x0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O05vIGhvc3QgbWVtb3J5IGFsbG9jYXRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYoc2VxLCBcJiMzNDtIb3N0IG1lbW9yeSByZXF1ZXN0czogJXVcXG5cXG5cJiMzNDssXG4mIzQzO1x0XHQgICBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzKTtcbiYjNDM7XHRzZXFfcHV0cyhzZXEsIFwmIzM0O1RhZyAgICBTaXplICAgICAgICAgT3JkZXIgIFBBXFxuXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHV0cyhzZXEsIFwmIzM0Oy0tLSAgICAtLS0tICAgICAgICAgLS0tLS0gIC0tXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGhtID0gXHUwMDI2cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICghaG0tXHUwMDNlcGcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDslLTZ1ICUtMTJ1ICUtNnUgJXBhZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgaG0tXHUwMDNldGFnLCBobS1cdTAwM2VzaXplLCBobS1cdTAwM2VvcmRlciwgXHUwMDI2aG0tXHUwMDNlcGEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGhvc3RfbWVtKTtcbiYjNDM7XG4mIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7e1xuJiM0MztcdGlmICghKHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcdTAwMjZcbiYjNDM7XHQgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtob3N0X21lbVwmIzM0OywgMDQwMCwgcGRzYy1cdTAwM2VkZW50cnksXG4mIzQzO1x0XHRcdCAgICBwZHNjLCBcdTAwMjZob3N0X21lbV9mb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0ZGVidWdmc19sb29rdXBfYW5kX3JlbW92ZShcJiMzNDtob3N0X21lbVwmIzM0OywgcGRzYy1cdTAwM2VkZW50cnkpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jXG5pbmRleCBiZGVkNmIzMzI4OWNlLi5jNTA3NzgxNzVlMmYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbkBAIC0xMjYsNyAmIzQzOzEyNiw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwZHNjX2RldmNtZF9zdHIoaW50IG9wY29kZSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBib29sIGRvX21zZylcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZHNjLVx1MDAzZWRldjtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTtcbkBAIC0xNzksNyAmIzQzOzE4MCw3IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXG4gXG4gXHRzdGF0dXMgPSBwZHNjX2RldmNtZF9zdGF0dXMocGRzYyk7XG4gXHRlcnIgPSBwZHNjX2Vycl90b19lcnJubyhzdGF0dXMpO1xuLVx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pXG4mIzQzO1x0aWYgKGRvX21zZyBcdTAwMjZcdTAwMjYgZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0RFVkNNRCAlZCAlcyBmYWlsZWQsIHN0YXR1cz0lZCBlcnIgJWQgJXBlXFxuXCYjMzQ7LFxuIFx0XHRcdG9wY29kZSwgcGRzY19kZXZjbWRfc3RyKG9wY29kZSksIHN0YXR1cywgZXJyLFxuIFx0XHRcdEVSUl9QVFIoZXJyKSk7XG5AQCAtMTg3LDggJiM0MzsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuLVx0XHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMsXG4mIzQzO1x0XHRcdFx0Y29uc3QgYm9vbCBkb19tc2cpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xOTcsMTYgJiM0MzsxOTksNjMgQEAgaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFxuIFx0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VjbWQsIGNtZCwgc2l6ZW9mKCpjbWQpKTtcbiBcdHBkc2NfZGV2Y21kX2RiZWxsKHBkc2MpO1xuLVx0ZXJyID0gcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtXHUwMDNlb3Bjb2RlLCBtYXhfc2Vjb25kcyk7XG4mIzQzO1x0ZXJyID0gX19wZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzLCBkb19tc2cpO1xuIFxuIFx0aWYgKChlcnIgPT0gLUVOWElPIHx8IGVyciA9PSAtRVRJTUVET1VUKSBcdTAwMjZcdTAwMjYgcGRzYy1cdTAwM2V3cSlcbiBcdFx0cXVldWVfd29yayhwZHNjLVx1MDAzZXdxLCBcdTAwMjZwZHNjLVx1MDAzZWhlYWx0aF93b3JrKTtcbiBcdGVsc2VcbiBcdFx0bWVtY3B5X2Zyb21pbyhjb21wLCBcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWNvbXAsIHNpemVvZigqY29tcCkpO1xuIFxuJiM0MztcdGlmIChlcnIgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pXG4mIzQzO1x0XHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuJiM0MztcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0Mzt2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcbiYjNDM7XHRcdFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxuJiM0MztcdFx0XHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG4mIzQzO3tcbiYjNDM7XHRlbnRyeS1cdTAwM2VkbWFfYWRkciA9IGRtYV9hZGRyO1xuJiM0MztcdGVudHJ5LVx1MDAzZXZhID0gdmE7XG4mIzQzO1x0ZW50cnktXHUwMDNlc2l6ZSA9IHNpemU7XG4mIzQzO1x0ZW50cnktXHUwMDNlZGlyID0gZGlyO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9saXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSwgKnRtcDtcbiYjNDM7XHRMSVNUX0hFQUQobG9jYWxfbGlzdCk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcbiYjNDM7XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QsIFx1MDAyNmxvY2FsX2xpc3QpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgXHUwMDI2bG9jYWxfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZW50cnktXHUwMDNlZG1hX2FkZHIsXG4mIzQzO1x0XHRcdFx0IGVudHJ5LVx1MDAzZXNpemUsIGVudHJ5LVx1MDAzZWRpcik7XG4mIzQzO1x0XHRrZnJlZShlbnRyeS1cdTAwM2V2YSk7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdGtmcmVlKGVudHJ5KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4mIzQzO1x0XHRcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXG4ge1xuQEAgLTIxOSw2ICYjNDM7MjY4LDQ3IEBAIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdFx0ICAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCxcbiYjNDM7XHRcdFx0XHQgICBpbnQgbWF4X3NlY29uZHMsIGJvb2wgZG9fbXNnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwZHNjLVx1MDAzZWRldmNtZF9sb2NrKTtcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpIHtcbiYjNDM7XHRcdGVyciA9IC1FTlhJTztcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZGF0YV9sZW4gXHUwMDNlIHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdG1lbWNweV90b2lvKFx1MDAyNnBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSwgZGF0YSwgZGF0YV9sZW4pO1xuJiM0MztcdGVyciA9IF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGRvX21zZyk7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0XHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBwZHNjX2RldmNtZF9pbml0KHN0cnVjdCBwZHNjICpwZHNjKVxuIHtcbiBcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbkBAIC0yNDIsMTUgJiM0MzszMzIsMTcgQEAgaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcixcbiYjNDM7XHRcdFx0XHQgICAgICAgYm9vbCBkb19tc2cpXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4gXHRcdC5pZGVudGlmeS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSURFTlRJRlksXG4tXHRcdC5pZGVudGlmeS52ZXIgPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEsXG4mIzQzO1x0XHQuaWRlbnRpZnkudmVyID0gZHJ2X2lkZW50X3ZlcixcbiBcdH07XG4gXG4tXHRyZXR1cm4gcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCxcbiYjNDM7XHRcdFx0XHQgICAgZG9fbXNnKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXG5AQCAtMjczLDggJiM0MzszNjUsOSBAQCBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2Z3X3ZlcnNpb24gJXNcXG5cJiMzNDssIHBkc2MtXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7c3RhdGljIGludCBwZHNjX2lkZW50aWZ5X3ZlcihzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcilcbiB7XG4mIzQzO1x0Ym9vbCBkb19tc2cgPSBkcnZfaWRlbnRfdmVyID09IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMTtcbiBcdHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307XG4gXHRzaXplX3Qgc3o7XG4gXHRpbnQgZXJyO1xuQEAgLTI5NywxOSAmIzQzOzM5MCwyMiBAQCBzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKGRydiksIHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpKTtcbiBcdG1lbWNweV90b2lvKFx1MDAyNnBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSwgXHUwMDI2ZHJ2LCBzeik7XG4gXG4tXHRlcnIgPSBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQocGRzYyk7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHBkc2MsIGRydl9pZGVudF92ZXIsIGRvX21zZyk7XG4gXHRpZiAoIWVycikge1xuIFx0XHRzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKHBkc2MtXHUwMDNlZGV2X2lkZW50KSxcbiBcdFx0XHQgICBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKSk7XG4gXHRcdG1lbWNweV9mcm9taW8oXHUwMDI2cGRzYy1cdTAwM2VkZXZfaWRlbnQsIFx1MDAyNnBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSwgc3opO1xuJiM0MztcbiYjNDM7XHRcdC8qIFYxIGZpcm13YXJlIGRvZXNuJiMzOTt0IHNldCBjYXBhYmlsaXRpZXMsIHNvIHRoZSBmaWVsZCBtYXlcbiYjNDM7XHRcdCAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwZHNjLVx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFx1MDAzYyBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpXG4mIzQzO1x0XHRcdHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4gXG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcblwmIzM0Oyxcbi1cdFx0XHRFUlJfUFRSKGVycikpO1xuJiM0MztcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXG4gXHRpZiAoaXNwcmludChwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb25bMF0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlzYXNjaWkocGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSlcbkBAIC0zMjYsNiAmIzQzOzQyMiwyNiBAQCBzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIE9sZGVyIGZpcm13YXJlIHJlamVjdHMgYW55dGhpbmcgYnV0IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxuJiM0MztcdCAqIHdpdGggUERTX1JDX0VWRVJTSU9OICgtRUlOVkFMKSwgc28gcmV0cnkgd2l0aCBWMSBvbiB2ZXJzaW9uXG4mIzQzO1x0ICogcmVqZWN0aW9uLiBEb24mIzM5O3QgcmV0cnkgb24gb3RoZXIgZXJyb3JzIGxpa2UgLUVOWElPLy1FVElNRURPVVRcbiYjNDM7XHQgKiB3aGljaCBpbmRpY2F0ZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyBvciBodW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMik7XG4mIzQzO1x0aWYgKGVyciA9PSAtRUlOVkFMKVxuJiM0MztcdFx0ZXJyID0gcGRzY19pZGVudGlmeV92ZXIocGRzYywgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0RVJSX1BUUihlcnIpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHBkc2NfZGV2X3VuaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcbiB7XG4gXHRpZiAocGRzYy1cdTAwM2VpbnRyX2luZm8pIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbkBAIC05MCwxMyAmIzQzOzkwLDExMiBAQCBpbnQgcGRzY19kbF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxuIHtcbiBcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbiBcbi1cdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4tXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4tXHRcdFx0XHQgICBcJiMzNDtDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX3JlcG9ydF9jb21wb25lbnQoc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlO1xuJiM0MztcdHUxNiBmbGFncyA9IGxlMTZfdG9fY3B1KGluZm8tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdGNoYXIgKnZlciA9IGluZm8tXHUwMDNldmVyc2lvbjtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdGNoYXIgYnVmWzMyXTtcbiYjNDM7XG4mIzQzO1x0LyogTWFpbiBmaXJtd2FyZSBpcyByZXBvcnRlZCBhcyBnZW5lcmljIFwmIzM0O2Z3XCYjMzQ7ICovXG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlY29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcbiYjNDM7XHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7ZncuZ29sZFwmIzM0Oyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0O2Z3XCYjMzQ7KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGluZm8tXHUwMDNlY29tcG9uZW50X3R5cGUpO1xuJiM0MztcdFx0aWYgKCFuYW1lKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcbiYjNDM7XHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7ZncuJXMuZ29sZFwmIzM0OywgbmFtZSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0O2Z3LiVzXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9OT05FO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSlcbiYjNDM7XHRcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRCkge1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBidWYsIHZlcik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcpIHtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXRfZXh0KHJlcSwgYnVmLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHZlciwgdmVyX3R5cGUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdHJldHVybiBwZHNjX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMtXHUwMDNlZncsIGV4dGFjayk7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVApIHtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dF9leHQocmVxLCBidWYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICB2ZXIsIHZlcl90eXBlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX3JlcG9ydF9md192ZXIoc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwgY2hhciAqZndfdmVyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSxcbiYjNDM7XHRcdFx0XHRcdFx0REVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19GVyxcbiYjNDM7XHRcdFx0XHRcdFx0ZndfdmVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XG4mIzQzO1x0dTggbnVtX2NvbXBvbmVudHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuXG4mIzQzO1x0ICogVXNlIFJFQURfT05DRSB0byBnZXQgYSBjb25zaXN0ZW50IHNuYXBzaG90IG9mIG51bV9jb21wb25lbnRzLlxuJiM0MztcdCAqIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkgY2FuIHplcm8gaXQgY29uY3VycmVudGx5IGR1cmluZ1xuJiM0MztcdCAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm9cbiYjNDM7XHQgKiB0aW1lcyB3aGVuIHdlIGFscmVhZHkgZGVjaWRlZCB0aGUgY2FjaGUgd2FzIHZhbGlkLlxuJiM0MztcdCAqL1xuJiM0MztcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XG4mIzQzO1x0aWYgKCFudW1fY29tcG9uZW50cykge1xuJiM0MztcdFx0ZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHBkc2MtXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XG4mIzQzO1x0XHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpO1xuJiM0MztcdFx0aWYgKCFudW1fY29tcG9uZW50cylcbiYjNDM7XHRcdFx0cmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLFxuJiM0MztcdFx0XHQgICAgICAgbGUxNl90b19jcHUocGRzYy1cdTAwM2VkZXZfaWRlbnQubWF4X2Z3X3Nsb3RzKSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RsX3JlcG9ydF9jb21wb25lbnQocmVxLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xuQEAgLTEwNSw4ICYjNDM7MjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xuIFx0XCYjMzQ7ZncubWFpbmZ3YlwmIzM0OyxcbiB9O1xuIFxuLWludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbi1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9md19saXN0X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuIFx0XHQuZndfY29udHJvbC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfRldfQ09OVFJPTCxcbkBAIC0xNDAsMTIgJiM0MzsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsXG4tXHRcdFx0XHRcdCAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxuLVx0XHRcdFx0XHQgICAgICAgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX2luZm9fZ2V0X3YxKHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGRzY19kbF9md19saXN0X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdC8qIFZlcnNpb24gMTogcmVwb3J0IGZ3IGZyb20gZGV2X2luZm8gKHJ1bm5pbmcgb25seSkgKi9cbiYjNDM7XHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSwgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwZHNjLVx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXJyID0gcGRzY19kbF9pbmZvX2dldF92MShkbCwgcmVxLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7MHgleFwmIzM0OywgcGRzYy1cdTAwM2VkZXZfaW5mby5hc2ljX3R5cGUpO1xuIFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcbiBcdFx0XHRcdFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuY1xuaW5kZXggZmE2MjY3MTllNjhkMS4uNWNjZjAxN2Y2YWY0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuY1xuQEAgLTEsNiAmIzQzOzEsOSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDIwMjMgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsZG1mdy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiBcbiAvKiBUaGUgd29yc3QgY2FzZSB3YWl0IGZvciB0aGUgaW5zdGFsbCBhY3Rpdml0eSBpcyBhYm91dCAyNSBtaW51dGVzIHdoZW5cbkBAIC0xNCw2ICYjNDM7MTcsNTggQEBcbiAvKiBOdW1iZXIgb2YgcGVyaW9kaWMgbG9nIHVwZGF0ZXMgZHVyaW5nIGZ3IGZpbGUgZG93bmxvYWQgKi9cbiAjZGVmaW5lIFBEU0NfRldfSU5URVJWQUxfRlJBQ1RJT05cdDMyXG4gXG4mIzQzOyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfUFJFRklYXHRcdFwmIzM0O2Z3LlwmIzM0O1xuJiM0MzsjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXFxcbiYjNDM7XHQoc2l6ZW9mKFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCkgJiM0MzsgUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOKVxuJiM0MztcbiYjNDM7LyogRHJpdmVyLWRlZmluZWQgY29tcG9uZW50IHR5cGUgdG8gbmFtZSBtYXBwaW5nLlxuJiM0MzsgKiBQRFNfQ09SRV9GV19UWVBFX01BSU4gaXMgTlVMTCAtIGhhbmRsZWQgc3BlY2lhbGx5IGFzIFwmIzM0O2Z3XCYjMzQ7IHdpdGhvdXQgcHJlZml4LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZHNjX2Z3X3R5cGVfbmFtZXNbXSA9IHtcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9NQUlOXSAgICAgID0gTlVMTCxcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9CT09UXSAgICAgID0gXCYjMzQ7Ym9vdGxvYWRlclwmIzM0OyxcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9DUExEXSAgICAgID0gXCYjMzQ7Y3BsZFwmIzM0OyxcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9TRUNVUkVdICAgID0gXCYjMzQ7c2VjdXJlXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX0ZQR0FdICAgICAgPSBcJiMzNDtmcGdhXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOXSAgPSBcJiMzNDtzdWNcJiMzNDssXG4mIzQzO1x0W1BEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1RdICA9IFwmIzM0O3N1Yy5ib290bG9hZGVyXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX1VCT09UXSAgICAgPSBcJiMzNDt1Ym9vdFwmIzM0OyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IGNoYXIgKnBkc2NfZndfdHlwZV90b19uYW1lKHU4IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAodHlwZSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpIFx1MDAyNlx1MDAyNiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pXG4mIzQzO1x0XHRyZXR1cm4gcGRzY19md190eXBlX25hbWVzW3R5cGVdO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UgaW4gcGRzY19kbF9jb21wb25lbnRfaW5mb19nZXQoKSAqL1xuJiM0MztcdFdSSVRFX09OQ0UocGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU4IHBkc2NfbmFtZV90b19md190eXBlKGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgcHJlZml4X2xlbjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogXCYjMzQ7ZndcJiMzNDsgd2l0aG91dCBzdWZmaXggbWFwcyB0byBtYWluIGZpcm13YXJlICovXG4mIzQzO1x0aWYgKCFzdHJjbXAobmFtZSwgXCYjMzQ7ZndcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIFBEU19DT1JFX0ZXX1RZUEVfTUFJTjtcbiYjNDM7XG4mIzQzO1x0cHJlZml4X2xlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCk7XG4mIzQzO1x0aWYgKHByZWZpeF9sZW4pXG4mIzQzO1x0XHRuYW1lICYjNDM7PSBwcmVmaXhfbGVuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAocGRzY19md190eXBlX25hbWVzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFzdHJjbXAobmFtZSwgcGRzY19md190eXBlX25hbWVzW2ldKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcbiBcdFx0XHRcdFx0ICB1MzIgb2Zmc2V0LCB1MzIgbGVuZ3RoKVxuIHtcbkBAIC0yMyw3ICYjNDM7NzgsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdC5md19kb3dubG9hZC5hZGRyID0gY3B1X3RvX2xlNjQoYWRkciksXG4gXHRcdC5md19kb3dubG9hZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuIFx0fTtcbi1cdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuIFxuIFx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuIH1cbkBAIC05NSw5ICYjNDM7MTUwLDEyIEBAIHN0YXRpYyBpbnQgcGRzY19md19zdGF0dXNfbG9uZ193YWl0KHN0cnVjdCBwZHNjICpwZHNjLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuLVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7cGRzY19sZWdhY3lfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gcGFyYW1zLVx1MDAzZWZ3O1xuIFx0dTMyIGJ1Zl9zeiwgY29weV9zeiwgb2Zmc2V0O1xuIFx0c3RydWN0IGRldmxpbmsgKmRsO1xuIFx0aW50IG5leHRfaW50ZXJ2YWw7XG5AQCAtMTA1LDYgJiM0MzsxNjMsMTIgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuIFx0aW50IGVyciA9IDA7XG4gXHRpbnQgZndfc2xvdDtcbiBcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXZfaW5mbyhwZHNjLVx1MDAzZWRldiwgXCYjMzQ7SW5zdGFsbGluZyBmaXJtd2FyZVxcblwmIzM0Oyk7XG4gXG4gXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpXG5AQCAtMTk1LDMgJiM0MzsyNTksNzI5IEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiBcdFx0XHRcdFx0XHQgICBOVUxMLCAwLCAwKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiM0MztcbiYjNDM7c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYge1xuJiM0MztcdHUxNiBjb21wb25lbnRfaWQ7XG4mIzQzO1x0Ym9vbCBza2lwO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwZHNfY29yZV9md3VfcHJpdiB7XG4mIzQzO1x0c3RydWN0IHBsZG1mdyBjb250ZXh0O1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2M7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBjb21wb25lbnRzO1xuJiM0MztcdGJvb2wgY29tcG9uZW50X2ZvdW5kO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGRzY19mcmVlX2Z3dV9wcml2KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdiwgKnRtcDtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbXBvbmVudF9wcml2LCB0bXAsIFx1MDAyNnByaXYtXHUwMDNlY29tcG9uZW50cyxcbiYjNDM7XHRcdFx0XHQgbGlzdF9lbnRyeSkge1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2Y29tcG9uZW50X3ByaXYtXHUwMDNlbGlzdF9lbnRyeSk7XG4mIzQzO1x0XHRrZnJlZShjb21wb25lbnRfcHJpdik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX21hdGNoX3JlY29yZF9kZXNjKHN0cnVjdCBwZHNjICpwZHNjLCB1MTYgZGVzY190eXBlLFxuJiM0MztcdFx0XHRcdFx0IHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHQgdTggKm1hdGNoKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2Mub3Bjb2RlID0gUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDLFxuJiM0MztcdFx0Lm1hdGNoX3JlY29yZF9kZXNjLnZlciA9IDEsXG4mIzQzO1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksXG4mIzQzO1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2Muc2l6ZSA9IGNwdV90b19sZTE2KGRlc2Nfc2l6ZSksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFx1MDAyNmNtZCwgZGVzY19kYXRhLCBkZXNjX3NpemUsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdCptYXRjaCA9IGNvbXAubWF0Y2hfcmVjb3JkX2Rlc2MubWF0Y2g7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBwbGRtZndfcmVjb3JkICpyZWNvcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4mIzQzO1x0c3RydWN0IHBsZG1md19kZXNjX3RsdiAqZGVzYztcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZChjb250ZXh0LCByZWNvcmQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsIFx1MDAyNnJlY29yZC1cdTAwM2VkZXNjcywgZW50cnkpIHtcbiYjNDM7XHRcdHU4IG1hdGNoO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKGRlc2MtXHUwMDNldHlwZSkge1xuJiM0MztcdFx0Lyogc2tpcCB0eXBlcyBjaGVja2VkIGluIHBsZG1md19vcF9wY2lfbWF0Y2hfcmVjb3JkICovXG4mIzQzO1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfVkVORE9SX0lEOlxuJiM0MztcdFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX0RFVklDRV9JRDpcbiYjNDM7XHRcdGNhc2UgUExETV9ERVNDX0lEX1BDSV9TVUJWRU5ET1JfSUQ6XG4mIzQzO1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCREVWX0lEOlxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRlc2MtXHUwMDNlc2l6ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHBkc2NfZGV2Y21kX21hdGNoX3JlY29yZF9kZXNjKHBkc2MsIGRlc2MtXHUwMDNldHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGRlc2MtXHUwMDNlc2l6ZSwgZGVzYy1cdTAwM2VkYXRhLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgXHUwMDI2bWF0Y2gpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O21hdGNoX3JlY29yZF9kZXNjIGZhaWxlZCB0eXBlOiAweCUwNHggc2l6ZTogJXUsIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRkZXNjLVx1MDAzZXR5cGUsIGRlc2MtXHUwMDNlc2l6ZSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogYWxsIHJlY29yZCBkZXNjcmlwdG9ycyBtdXN0IG1hdGNoICovXG4mIzQzO1x0XHRpZiAoIW1hdGNoKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgdTE2IGxlbmd0aCwgdTE2IG9mZnNldCwgdTE2IHRvdGFsX2xlbilcbiYjNDM7e1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEsXG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS52ZXIgPSAxLFxuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihsZW5ndGgpLFxuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEub2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KSxcbiYjNDM7XHRcdC5zZW5kX3BrZ19kYXRhLnRvdGFsX2xlbiA9IGNwdV90b19sZTE2KHRvdGFsX2xlbiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1xuJiM0MztcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsXG4mIzQzO1x0XHRcdFx0ICB1MTYgbGVuZ3RoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuJiM0MztcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR1OCAqcGFja2FnZV9kYXRhO1xuJiM0MztcdHUzMiBvZmZzZXQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFsZW5ndGgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZGVmZXJyZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9kYXRhID0ga21lbWR1cChkYXRhLCBsZW5ndGgsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGFja2FnZV9kYXRhKSB7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGRtYV9tYXAgcGFja2FnZV9kYXRhIGxlbmd0aCAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgpO1xuJiM0MztcdFx0a2ZyZWUocGFja2FnZV9kYXRhKTtcbiYjNDM7XHRcdGtmcmVlKGRlZmVycmVkKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGxlbmd0aDsgb2Zmc2V0ICYjNDM7PSBQRFNfUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR1MzIgY29weV9zejtcbiYjNDM7XG4mIzQzO1x0XHRjb3B5X3N6ID0gbWluX3QodW5zaWduZWQgaW50LCBQRFNfUEFHRV9TSVpFLCBsZW5ndGggLSBvZmZzZXQpO1xuJiM0MztcdFx0ZXJyID0gcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEocGRzYywgZG1hX2FkZHIgJiM0Mzsgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgY29weV9zeiwgb2Zmc2V0LCBsZW5ndGgpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QocHJpdi1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGFcJiMzNDspO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuJiM0MztcdFx0cGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgICBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRrZnJlZShwYWNrYWdlX2RhdGEpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXS5jb21wb25lbnRfdHlwZSA9PSB0eXBlKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdFx0XHQgICB1OCBjb21wb25lbnRfaWQsIHU4IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbiYjNDM7XHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSA9PSB0eXBlKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTggcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBjb21wb25lbnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbiYjNDM7XHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQpXG4mIzQzO1x0XHRcdHJldHVybiBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcGRzY19za2lwX2NvbXBvbmVudChzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0dTE2IGNvbXBvbmVudF9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjb21wb25lbnRfcHJpdiwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzLCBsaXN0X2VudHJ5KSB7XG4mIzQzO1x0XHRpZiAoY29tcG9uZW50X3ByaXYtXHUwMDNlY29tcG9uZW50X2lkID09IGNvbXBvbmVudF9pZClcbiYjNDM7XHRcdFx0cmV0dXJuIGNvbXBvbmVudF9wcml2LVx1MDAzZXNraXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudCxcbiYjNDM7XHRcdFx0XHQgICAgIHU4IHRyYW5zZmVyX2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7XG4mIzQzO1x0c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXHUwMDNlZGV2O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cdTAwM2VwZHNjO1xuJiM0MztcdGJvb2wgc2tpcF9jb21wb25lbnQgPSBmYWxzZTtcbiYjNDM7XHR1OCByZXF1ZXN0ZWRfdHlwZSA9IDA7XG4mIzQzO1x0dTE2IGJ1Zl9zeiwgdGJsX3N6O1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKGRldixcbiYjNDM7XHRcdFwmIzM0O2NvbXBvbmVudCBuYW1lICVzIGNsYXNzaWZpY2F0aW9uICV1IGlkICV1IGFjdGl2YXRpb25fbWV0aG9kICV1IHZlcl9sZW4gJWQgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXUgdHJhbnNmZXJfZmxhZyAweCUwMnhcXG5cJiMzNDssXG4mIzQzO1x0XHRwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbiYjNDM7XHRcdGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyLCBjb21wb25lbnQtXHUwMDNlYWN0aXZhdGlvbl9tZXRob2QsXG4mIzQzO1x0XHRjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4sIGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbixcbiYjNDM7XHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3N0cmluZywgY29tcG9uZW50LVx1MDAzZWluZGV4LFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZWNvbXBvbmVudF9zaXplLCB0cmFuc2Zlcl9mbGFnKTtcbiYjNDM7XG4mIzQzO1x0Y29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY29tcG9uZW50X3ByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuJiM0MztcdFx0cmVxdWVzdGVkX3R5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQpO1xuJiM0MztcdFx0aWYgKGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyIFx1MDAzZSBVOF9NQVggfHxcbiYjNDM7XHRcdCAgICAhcGRzY19jb21wb25lbnRfaWRfbWF0Y2hlc190eXBlKHBkc2MsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHJlcXVlc3RlZF90eXBlKSkge1xuJiM0MztcdFx0XHRza2lwX2NvbXBvbmVudCA9IHRydWU7XG4mIzQzO1x0XHRcdGdvdG8gYWRkX2NvbXBvbmVudF9wcml2O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb21wb25lbnRfZm91bmQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmX3N6ID0gc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dGJsX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X3RibCwgdmVyc2lvbl9zdHIsXG4mIzQzO1x0XHRcdCAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbiYjNDM7XHRpZiAodGJsX3N6IFx1MDAzZSBidWZfc3opIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR0Ymxfc3osIGJ1Zl9zeik7XG4mIzQzO1x0XHRlcnIgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBmcmVlX2NvbXBvbmVudF9wcml2O1xuJiM0MztcdH1cbiYjNDM7XHRjb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY29tcG9uZW50X3RibCkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvbXBvbmVudF90YmwtXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XG4mIzQzO1x0XHRjcHVfdG9fbGUzMihjb21wb25lbnQtXHUwMDNlY29tcGFyaXNvbl9zdGFtcCk7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2VjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbik7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuJiM0MztcdGNvbXBvbmVudF90YmwtXHUwMDNldHJhbnNmZXJfZmxhZyA9IHRyYW5zZmVyX2ZsYWc7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2V2ZXJzaW9uX3N0cl90eXBlID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fdHlwZTtcbiYjNDM7XHRjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbjtcbiYjNDM7XHRtZW1jcHkoY29tcG9uZW50X3RibC1cdTAwM2V2ZXJzaW9uX3N0ciwgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fc3RyaW5nLFxuJiM0MztcdCAgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuJiM0MztcbiYjNDM7XHRjbWQuc2VuZF9jb21wb25lbnRfdGJsLm9wY29kZSA9IFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkw7XG4mIzQzO1x0Y21kLnNlbmRfY29tcG9uZW50X3RibC52ZXIgPSAxO1xuJiM0MztcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFx1MDAyNmNtZCwgY29tcG9uZW50X3RibCwgdGJsX3N6LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRrZnJlZShjb21wb25lbnRfdGJsKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHNlbmRpbmcgY29tcG9uZW50IHRhYmxlOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4mIzQzO1x0XHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2lwX2NvbXBvbmVudCA9IGNvbXAuc2VuZF9jb21wb25lbnRfdGJsLnJlc3BvbnNlID09IDE7XG4mIzQzO1xuJiM0MzthZGRfY29tcG9uZW50X3ByaXY6XG4mIzQzO1x0Y29tcG9uZW50X3ByaXYtXHUwMDNlc2tpcCA9IHNraXBfY29tcG9uZW50O1xuJiM0MztcdGNvbXBvbmVudF9wcml2LVx1MDAzZWNvbXBvbmVudF9pZCA9IGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyO1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNmNvbXBvbmVudF9wcml2LVx1MDAzZWxpc3RfZW50cnksIFx1MDAyNnByaXYtXHUwMDNlY29tcG9uZW50cyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZnJlZV9jb21wb25lbnRfcHJpdjpcbiYjNDM7XHRrZnJlZShjb21wb25lbnRfcHJpdik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sXG4mIzQzO1x0XHQuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9IDEsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAqbGlzdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4mIzQzO1x0dTggbnVtX2NvbXBvbmVudHM7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQpO1xuJiM0MztcdGlmICghZGVmZXJyZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9pbmZvID0ga3phbGxvYyhQRFNfUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxpc3RfaW5mbykge1xuJiM0MztcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHBkc2MtXHUwMDNlZGV2LCBsaXN0X2luZm8sIFBEU19QQUdFX1NJWkUsXG4mIzQzO1x0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcdGlmIChkbWFfbWFwcGluZ19lcnJvcihwZHNjLVx1MDAzZWRldiwgZG1hX2FkZHIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfbGlzdF9pbmZvIGxlbmd0aCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0UERTX1BBR0VfU0laRSk7XG4mIzQzO1x0XHRrZnJlZShsaXN0X2luZm8pO1xuJiM0MztcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoUERTX1BBR0VfU0laRSk7XG4mIzQzO1x0Y21kLmdldF9jb21wb25lbnRfaW5mby5kYXRhX3BhID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQgKiAyKTtcbiYjNDM7XHRpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHtcbiYjNDM7XHRcdHBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsIGxpc3RfaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKGRlZmVycmVkKTtcbiYjNDM7XHRkbWFfdW5tYXBfc2luZ2xlKHBkc2MtXHUwMDNlZGV2LCBkbWFfYWRkciwgUERTX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkge1xuJiM0MztcdFx0LyogRG9uJiMzOTt0IHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyB2ZXJzaW9uIDAgaGFzXG4mIzQzO1x0XHQgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGVcbiYjNDM7XHRcdCAqIHRoZWlyIGZpcm13YXJlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl93YXJuX29uY2UocGRzYy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0luY29tcGF0aWJsZSBnZXRfY29tcG9uZW50X2luZm8gdmVyc2lvbiAldSByZXBvcnRlZCBieSBmaXJtd2FyZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgY29tcC5nZXRfY29tcG9uZW50X2luZm8udmVyKTtcbiYjNDM7XHRcdGVyciA9IDA7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG51bV9jb21wb25lbnRzID0gbGlzdF9pbmZvLVx1MDAzZW51bV9jb21wb25lbnRzO1xuJiM0MztcdGlmIChudW1fY29tcG9uZW50cyBcdTAwM2UgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMgPSBudW1fY29tcG9uZW50cztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9XG4mIzQzO1x0XHRcdFx1MDAyNnBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldO1xuJiM0MztcbiYjNDM7XHRcdG1lbWNweShpbmZvLCBcdTAwMjZsaXN0X2luZm8tXHUwMDNlaW5mb1tpXSwgc2l6ZW9mKCppbmZvKSk7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZXZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU4gLSAxXSA9IDA7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZW5hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIC0gMV0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShsaXN0X2luZm8pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9jb21wb25lbnQoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICB1MTYgaW5mb19zeiwgZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuZ3RoLFxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBvZmZzZXQsIHUxNiBzbG90X2lkLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULFxuJiM0MztcdFx0LnNlbmRfY29tcG9uZW50LnZlciA9IDEsXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQub3BlcmF0aW9uID0gUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQsXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxuJiM0MztcdFx0LnNlbmRfY29tcG9uZW50LmRhdGFfbGVuID0gY3B1X3RvX2xlMzIobGVuZ3RoKSxcbiYjNDM7XHRcdC5zZW5kX2NvbXBvbmVudC5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpLFxuJiM0MztcdFx0LnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLFxuJiM0MztcdH07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMzAwICogSFo7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c3RhcnRfdGltZSA9IGppZmZpZXM7XG4mIzQzO1x0ZW5kX3RpbWUgPSBzdGFydF90aW1lICYjNDM7IHRpbWVvdXQ7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0LyogcHJldmVudCBub2lzeS9iZW5pZ24gZGV2Y21kIGZhaWx1cmVzICovXG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2cocGRzYywgXHUwMDI2Y21kLCBpbmZvLCBpbmZvX3N6LFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbXAsIDYwKTtcbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogaWYgcmVxdWlyZWQsIHN1YnNlcXVlbnQgY29tbWFuZHMgY2hlY2sgc3RhdHVzIG9mXG4mIzQzO1x0XHQgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJuc1xuJiM0MztcdFx0ICogRUFHQUlOIHdoaWxlIHRoZSBjb21tYW5kIGlzIHN0aWxsIHJ1bm5pbmcsXG4mIzQzO1x0XHQgKiBlbHNlIHdlIGdldCB0aGUgZmluYWwgY29tbWFuZCBzdGF0dXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNtZC5zZW5kX2NvbXBvbmVudC5vcGVyYXRpb24gPSBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVM7XG4mIzQzO1x0XHRtc2xlZXAoMjApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTiB8fCBlcnIgPT0gLUVUSU1FRE9VVClcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O1BEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCB0aW1lZCBvdXRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LFxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBvZmZzZXQsIHU4IHNsb3RfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkO1xuJiM0MztcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4mIzQzO1x0dTggKmNvbXBvbmVudF9kYXRhO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWRlZmVycmVkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGNvbXBvbmVudF9kYXRhID0ga21lbWR1cChkYXRhLCBjb3B5X3N6LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWNvbXBvbmVudF9kYXRhKSB7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGRtYV9tYXAgY29tcG9uZW50X2RhdGEgYXQgb2Zmc2V0IDB4JXggY29weV9zeiAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRvZmZzZXQsIGNvcHlfc3opO1xuJiM0MztcdFx0a2ZyZWUoY29tcG9uZW50X2RhdGEpO1xuJiM0MztcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChwZHNjLCBpbmZvLCBpbmZvX3N6LCBkbWFfYWRkcixcbiYjNDM7XHRcdFx0XHRcdCBjb3B5X3N6LCBvZmZzZXQsIHNsb3RfaWQsIGNvbXApO1xuJiM0MztcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuJiM0MztcdFx0cGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgICBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0a2ZyZWUoY29tcG9uZW50X2RhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZmxhc2hfY29tcG9uZW50KHN0cnVjdCBwbGRtZncgKmNvbnRleHQsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudClcbiYjNDM7e1xuJiM0MztcdGNoYXIgY29tcG9uZW50X25hbWVfYnVmW1BEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU5dO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICpjb21wb25lbnRfaW5mbztcbiYjNDM7XHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4mIzQzO1x0dTE2IGJ1Zl9zeiwgaW5mb19zejtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4mIzQzO1x0dTggY29tcG9uZW50X3R5cGU7XG4mIzQzO1x0dTMyIHRvdGFsX2xlbjtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGNvbXBvbmVudF90eXBlID0gcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQocGRzYyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyKTtcbiYjNDM7XHRpZiAoY29tcG9uZW50X3R5cGUpIHtcbiYjNDM7XHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGNvbXBvbmVudF90eXBlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7XG4mIzQzO1x0XHRcdGNvbXBvbmVudF9uYW1lID0gXCYjMzQ7ZndcJiMzNDs7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHR5cGVfbmFtZSkge1xuJiM0MztcdFx0XHRzbnByaW50Zihjb21wb25lbnRfbmFtZV9idWYsIHNpemVvZihjb21wb25lbnRfbmFtZV9idWYpLFxuJiM0MztcdFx0XHRcdCBcJiMzNDslcyVzXCYjMzQ7LCBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgsIHR5cGVfbmFtZSk7XG4mIzQzO1x0XHRcdGNvbXBvbmVudF9uYW1lID0gY29tcG9uZW50X25hbWVfYnVmO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XG4mIzQzO1xuJiM0MztcdGlmIChwZHNjX3NraXBfY29tcG9uZW50KHByaXYsIGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyKSkge1xuJiM0MztcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCYjMzQ7U2tpcHBlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0b3RhbF9sZW4gPSBjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemU7XG4mIzQzO1x0ZGV2X2RiZyhkZXYsXG4mIzQzO1x0XHRcJiMzNDtjb21wb25lbnQgbmFtZSAlcyBjbGFzcyAldSBpZCAldSBhY3RfbWV0aCAldSB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdGNvbXBvbmVudF9uYW1lID86IFwmIzM0Oyh1bmtub3duKVwmIzM0OywgY29tcG9uZW50LVx1MDAzZWNsYXNzaWZpY2F0aW9uLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbiYjNDM7XHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbiwgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fc3RyaW5nLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZWluZGV4LCBjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemUpO1xuJiM0MztcbiYjNDM7XHRidWZfc3ogPSBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKTtcbiYjNDM7XHRpbmZvX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X2luZm8sIHZlcnNpb25fc3RyLFxuJiM0MztcdFx0XHQgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuJiM0MztcdGlmIChpbmZvX3N6IFx1MDAzZSBidWZfc3opIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aW5mb19zeiwgYnVmX3N6KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdH1cbiYjNDM7XHRjb21wb25lbnRfaW5mbyA9IHZ6YWxsb2MoaW5mb19zeik7XG4mIzQzO1x0aWYgKCFjb21wb25lbnRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cbiYjNDM7XHRcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2VpbWFnZV9zaXplID0gY3B1X3RvX2xlMzIodG90YWxfbGVuKTtcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2VjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbik7XG4mIzQzO1x0Y29tcG9uZW50X2luZm8tXHUwMDNlaWRlbnRpZmllciA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyKTtcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2VvcHRpb25zID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZW9wdGlvbnMpO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtXHUwMDNldmVyc2lvbl90eXBlO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbjtcbiYjNDM7XHRtZW1jcHkoY29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHIsIGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3N0cmluZyxcbiYjNDM7XHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbiYjNDM7XG4mIzQzO1x0b2Zmc2V0ID0gMDtcbiYjNDM7XHR3aGlsZSAob2Zmc2V0IFx1MDAzYyB0b3RhbF9sZW4pIHtcbiYjNDM7XHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHRcdHUxNiBjb3B5X3N6O1xuJiM0MztcbiYjNDM7XHRcdGNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsXG4mIzQzO1x0XHRcdFx0dG90YWxfbGVuIC0gb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudF9jaHVuayhwZHNjLCBkZXYsIGNvbXBvbmVudF9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHQgaW5mb19zeixcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfZGF0YSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0XHQgb2Zmc2V0LCBjb3B5X3N6LCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHRcdCBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQsXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZjb21wKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT1cbiYjNDM7XHRcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCB8fFxuJiM0MztcdFx0ICAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09XG4mIzQzO1x0XHQgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUikpIHtcbiYjNDM7XHRcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCYjMzQ7U2tpcHBlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAwLCAwKTtcbiYjNDM7XHRcdFx0Z290byBza2lwX2NvbXBvbmVudDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBmbGFzaCBjb21wb25lbnRcJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBjb3B5X3N6O1xuJiM0MztcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXCYjMzQ7RXJhc2luZy9GbGFzaGluZ1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgdG90YWxfbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZmcmVlKGNvbXBvbmVudF9pbmZvKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0VyYXNpbmcvRmxhc2hpbmcgQ29tcG9uZW50IEZhaWxlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbiYjNDM7c2tpcF9jb21wb25lbnQ6XG4mIzQzO1x0dmZyZWUoY29tcG9uZW50X2luZm8pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQuZmluYWxpemVfdXBkYXRlLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEUsXG4mIzQzO1x0XHQuZmluYWxpemVfdXBkYXRlLnZlciA9IDEsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1xuJiM0MztcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4mIzQzO1x0Y29uc3QgY2hhciAqY29tcG9uZW50X25hbWUgPSBwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lLCBlbmRfdGltZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XG4mIzQzO1xuJiM0MztcdHN0YXJ0X3RpbWUgPSBqaWZmaWVzO1xuJiM0MztcdGVuZF90aW1lID0gc3RhcnRfdGltZSAmIzQzOyAoUERTQ19GV19JTlNUQUxMX1RJTUVPVVQgKiBIWik7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0ZXJyID0gcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHBkc2MpO1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRkZXZfZGJnKGRldiwgXCYjMzQ7cmV0cnlpbmcgZmluYWxpemVfdXBkYXRlOiAlcGVcXG5cJiMzNDssIEVSUl9QVFIoZXJyKSk7XG4mIzQzO1x0XHRtc2xlZXAoMjApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSBcdTAwMjZcdTAwMjYgZXJyID09IC1FQUdBSU4pO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcJiMzNDtGaW5hbGl6ZSBVcGRhdGUgRmFpbGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QocHJpdi1cdTAwM2VleHRhY2ssIFwmIzM0O0ZpbmFsaXplIHVwZGF0ZSBmYWlsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFwmIzM0O0ZpbmFsaXplZCBVcGRhdGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7XG4mIzQzO1x0Lm1hdGNoX3JlY29yZCA9IHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzLFxuJiM0MztcdC5zZW5kX3BhY2thZ2VfZGF0YSA9IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEsXG4mIzQzO1x0LnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSxcbiYjNDM7XHQuZmxhc2hfY29tcG9uZW50ID0gcGRzY19mbGFzaF9jb21wb25lbnQsXG4mIzQzO1x0LmZpbmFsaXplX3VwZGF0ZSA9IHBkc2NfZmluYWxpemVfdXBkYXRlXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfcGxkbV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2IHByaXYgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cykge1xuJiM0MztcdFx0ZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gZ2V0IGNvbXBvbmVudCBpbmZvXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHR1OCB0eXBlID0gcGRzY19uYW1lX3RvX2Z3X3R5cGUocGFyYW1zLVx1MDAzZWNvbXBvbmVudCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF0eXBlIHx8ICFwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhwZHNjLCB0eXBlKSkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtVbmtub3duIGNvbXBvbmVudCBuYW1lXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LmNvbXBvbmVudHMpO1xuJiM0MztcdHByaXYuY29udGV4dC5vcHMgPSBcdTAwMjZwZHNjX3BsZG1md19vcHM7XG4mIzQzO1x0cHJpdi5jb250ZXh0LmRldiA9IHBkc2MtXHUwMDNlZGV2O1xuJiM0MztcdHByaXYucGFyYW1zID0gcGFyYW1zO1xuJiM0MztcdHByaXYuZXh0YWNrID0gZXh0YWNrO1xuJiM0MztcdHByaXYucGRzYyA9IHBkc2M7XG4mIzQzO1xuJiM0MztcdGVyciA9IHBsZG1md19mbGFzaF9pbWFnZShcdTAwMjZwcml2LmNvbnRleHQsIGZ3KTtcbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcGFyYW1zLVx1MDAzZWNvbXBvbmVudCBcdTAwMjZcdTAwMjYgIXByaXYuY29tcG9uZW50X2ZvdW5kKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O1JlcXVlc3RlZCBjb21wb25lbnQgbm90IHByZXNlbnQgaW4gZmlybXdhcmUgcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRU5PRU5UO1xuJiM0MztcdH1cbiYjNDM7XHRwZHNjX2ZyZWVfZnd1X3ByaXYoXHUwMDI2cHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwZHNjLVx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwZHNjLVx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXHUwMDI2XG4mIzQzO1x0XHRjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFKSlcbiYjNDM7XHRcdGVyciA9IHBkc2NfcGxkbV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdHBhcmFtcy1cdTAwM2Vmdyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyID0gcGRzY19sZWdhY3lfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi9cbiYjNDM7XHRwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG5pbmRleCA4ZDk0YTRkNzAzOTVlLi41ZTFiMDc4NTAxNjNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xuQEAgLTIxLDYgJiM0MzsyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZHNjX2lkX3RhYmxlW10gPSB7XG4gfTtcbiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGRzY19pZF90YWJsZSk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgcGRzY193ZHRpbWVyX2NiKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIHtcbiBcdHN0cnVjdCBwZHNjICpwZHNjID0gdGltZXJfY29udGFpbmVyX29mKHBkc2MsIHQsIHdkdGltZXIpO1xuQEAgLTMxNSw2ICYjNDM7MzE3LDcgQEAgc3RhdGljIGludCBwZHNjX2luaXRfcGYoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKHBkc2MtXHUwMDNld3EpO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwZHNjLVx1MDAzZWNvbmZpZ19sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4mIzQzO1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiBcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkc2MtXHUwMDNlcGRldik7XG4gZXJyX291dF91bm1hcF9iYXJzOlxuIFx0cGRzY191bm1hcF9iYXJzKHBkc2MpO1xuQEAgLTM1Myw2ICYjNDM7MzU2LDggQEAgc3RhdGljIGludCBwZHNjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0cGRzYy1cdTAwM2VwZGV2ID0gcGRldjtcbiBcdHBkc2MtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gXHRzZXRfYml0KFBEU0NfU19JTklUSU5HX0RSSVZFUiwgXHUwMDI2cGRzYy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbGlzdCk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGRzYyk7XG4gXHRwZHNjX2RlYnVnZnNfYWRkX2RldihwZHNjKTtcbiBcbkBAIC00NTgsNiAmIzQzOzQ2Myw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0fVxuIFxuIFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XG4gXG4gXHRpZGFfZnJlZShcdTAwMjZwZHNjX2lkYSwgcGRzYy1cdTAwM2V1aWQpO1xuIFx0cGRzY19kZWJ1Z2ZzX2RlbF9kZXYocGRzYyk7XG5AQCAtNTA1LDYgJiM0Mzs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpO1xuIFx0aWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKVxuIFx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGRzY19yZXNldF9kb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmggYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG5pbmRleCAxN2E4N2MxYTU1ZDdjLi45MDFlMWU2MjhmODkwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaFxuQEAgLTQwLDYgJiM0Mzs0MCwxNCBAQCBlbnVtIHBkc19jb3JlX2NtZF9vcGNvZGUge1xuIFx0UERTX0NPUkVfQ01EX0ZXX0RPV05MT0FEXHQ9IDQsXG4gXHRQRFNfQ09SRV9DTURfRldfQ09OVFJPTFx0XHQ9IDUsXG4gXG4mIzQzO1x0UERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1x0PSA2LFxuJiM0MztcdFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXHQ9IDcsXG4mIzQzO1x0UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFx0PSA4LFxuJiM0MztcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFx0PSA5LFxuJiM0MztcdFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcdD0gMTAsXG4mIzQzO1x0UERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXHQ9IDExLFxuJiM0MztcdFBEU19DT1JFX0NNRF9IT1NUX01FTVx0XHQ9IDEyLFxuJiM0MztcbiBcdC8qIFNSL0lPViBjb21tYW5kcyAqL1xuIFx0UERTX0NPUkVfQ01EX1ZGX0dFVEFUVFJcdFx0PSA2MCxcbiBcdFBEU19DT1JFX0NNRF9WRl9TRVRBVFRSXHRcdD0gNjEsXG5AQCAtMTAwLDYgJiM0MzsxMDgsMTYgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XG4gXHRjaGFyICAgZHJpdmVyX3Zlcl9zdHJbMzJdO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IC0gRGV2aWNlIGNhcGFiaWxpdGllc1xuJiM0MzsgKiBAUERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURTogRGV2aWNlIG9ubHkgc3VwcG9ydHMgRlcgdXBkYXRlIHZpYSBQTERNXG4mIzQzOyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZVxuJiM0MzsgKi9cbiYjNDM7ZW51bSBwZHNfY29yZV9kZXZfY2FwYWJpbGl0eSB7XG4mIzQzO1x0UERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSA9IEJJVCgwKSxcbiYjNDM7XHRQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNID0gQklUKDEpLFxuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVhcdDE2XG4gLyoqXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvblxuQEAgLTExOSw2ICYjNDM7MTM3LDExIEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkge1xuICAqXHRcdCAgICAgIHZhbHVlIGluIHVzZWNzIHRvIGRldmljZSB1bml0cyB1c2luZzpcbiAgKlx0XHQgICAgICBkZXZpY2UgdW5pdHMgPSB1c2VjcyAqIG11bHQgLyBkaXZcbiAgKiBAdmlmX3R5cGVzOiAgICAgICAgSG93IG1hbnkgb2YgZWFjaCBWSUYgZGV2aWNlIHR5cGUgaXMgc3VwcG9ydGVkXG4mIzQzOyAqIEBtYXhfZndfc2xvdHM6ICAgICBOdW1iZXIgb2YgZmlybXdhcmUgY29tcG9uZW50cyByZXBvcnRlZCBieSBkZXZpY2VcbiYjNDM7ICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuJiM0MzsgKiBAcnN2ZDI6XHQgICAgICBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICogQGNhcGFiaWxpdGllczogICAgIERldmljZSBjYXBhYmlsaXRpZXNcbiYjNDM7ICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuICAqL1xuIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkge1xuIFx0dTggICAgIHZlcnNpb247XG5AQCAtMTMxLDkgJiM0MzsxNTQsMTMgQEAgc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7XG4gXHRfX2xlMzIgaW50cl9jb2FsX211bHQ7XG4gXHRfX2xlMzIgaW50cl9jb2FsX2RpdjtcbiBcdF9fbGUxNiB2aWZfdHlwZXNbUERTX0RFVl9UWVBFX01BWF07XG4mIzQzO1x0X19sZTE2IG1heF9md19zbG90cztcbiYjNDM7XHR1OCAgICAgcnN2ZDJbNl07XG4mIzQzO1x0X19sZTY0IGNhcGFiaWxpdGllcztcbiB9O1xuIFxuICNkZWZpbmUgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xXHQxXG4mIzQzOyNkZWZpbmUgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXHQyXG4gXG4gLyoqXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGlmeV9jbWQgLSBEcml2ZXIvZGV2aWNlIGlkZW50aWZ5IGNvbW1hbmRcbkBAIC0yNzUsMTEgJiM0MzszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIge1xuIFx0UERTX0NPUkVfRldfR0VUX0xJU1QgICAgICAgICAgICAgICA9IDcsXG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfZndfc2xvdCAtIEZpcm13YXJlIHNsb3QgaWRlbnRpZmllcnNcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDogTGV0IGZpcm13YXJlIHNlbGVjdCBzbG90IGJhc2VkIG9uIHBhY2thZ2UgbWV0YWRhdGFcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfQTogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEFcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfQjogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEJcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfR09MRDogICAgR29sZC9yZWNvdmVyeSBmaXJtd2FyZSBzbG90XG4mIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX01BWDogICAgIFNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgbm8gc2xvdCByZXNvbHZlZFxuJiM0MzsgKi9cbiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3Qge1xuIFx0UERTX0NPUkVfRldfU0xPVF9JTlZBTElEICAgID0gMCxcbiBcdFBEU19DT1JFX0ZXX1NMT1RfQVx0ICAgID0gMSxcbiBcdFBEU19DT1JFX0ZXX1NMT1RfQiAgICAgICAgICA9IDIsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0dPTEQgICAgICAgPSAzLFxuJiM0MztcdFBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsXG4gfTtcbiBcbiAvKipcbkBAIC00NDYsNiAmIzQzOzQ4Miw0MjMgQEAgc3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY29tcCB7XG4gXHR1OFx0c3RhdHVzO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQVxuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHRvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIHRoZSBwYWNrYWdlIGRhdGFcbiYjNDM7ICogQG9mZnNldDogT2Zmc2V0IGluIHRoZSBwYWNrYWdlIGRhdGEsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzIGFyZVxuJiM0MzsgKlx0ICAgIG5lZWRlZCBmb3Igc2VuZGluZyB0aGUgcGFja2FnZSBkYXRhXG4mIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgc3RvcmVkIGF0IGRhdGFfcGFcbiYjNDM7ICogQGRhdGFfcGE6IERhdGEgcGh5c2ljYWwgYWRkcmVzcyBmb3IgRE1BIHRvIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcGFja2FnZSBkYXRhIG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZVxuJiM0MzsgKiBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQSBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0X19sZTE2IHRvdGFsX2xlbjtcbiYjNDM7XHRfX2xlMTYgb2Zmc2V0O1xuJiM0MztcdF9fbGUxNiBkYXRhX2xlbjtcbiYjNDM7XHRfX2xlNjQgZGF0YV9wYTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wIC0gU2VuZCBwYWNrYWdlIGRhdGEgY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAge1xuJiM0MztcdHU4IHN0YXR1cztcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAtIENvbXBvbmVudCB0YWJsZSBkZXRhaWxzXG4mIzQzOyAqIEBjb21wYXJpc29uX3N0YW1wOiBDb21wYXJpc29uIHN0YW1wIHVzZWQgZm9yIGNvbXBvbmVudCB2ZXJzaW9uIGNoZWNrc1xuJiM0MzsgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvXG4mIzQzOyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQmIzM5O3MgSURcbiYjNDM7ICogQHRyYW5zZmVyX2ZsYWc6IFBhcnQgb2YgdGhlIGNvbXBvbmVudCB0YWJsZSB0aGlzIHJlcXVlc3QgcmVwcmVzZW50c1xuJiM0MzsgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuJiM0MzsgKiBAdmVyc2lvbl9zdHJfbGVuOiBMZW5ndGggb2YgQHZlcnNpb25fc3RyXG4mIzQzOyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb25cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsIHtcbiYjNDM7XHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcbiYjNDM7XHRfX2xlMTYgY2xhc3NpZmljYXRpb247XG4mIzQzO1x0X19sZTE2IGlkZW50aWZpZXI7XG4mIzQzO1x0dTggICAgIHRyYW5zZmVyX2ZsYWc7XG4mIzQzO1x0dTggICAgIHZlcnNpb25fc3RyX3R5cGU7XG4mIzQzO1x0dTggICAgIHZlcnNpb25fc3RyX2xlbjtcbiYjNDM7XHR1OCAgICAgdmVyc2lvbl9zdHJbXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcbiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEBzbG90X2lkOiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3RcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgY29tcG9uZW50IHRhYmxlIGluZm8gKHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsKVxuJiM0MzsgKiBpbiBjbWRfcmVncy1cdTAwM2VkYXRhLiAgRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxuJiM0MzsgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggc2xvdF9pZDtcbiYjNDM7XHR1OCByc3ZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSBwZHNfY29yZV9jb21wb25lbnRfcmVzcF9jb2RlIHtcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfVkFMSUQgPSAweDAsXG4mIzQzO1x0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCA9IDB4MSxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIgPSAweDIsXG4mIzQzO1x0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX09SX1ZFUlNJT05fSU5WQUxJRCA9IDB4MyxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfQ09ORkxJQ1QgPSAweDQsXG4mIzQzO1x0UERTX0NPUkVfQ09NUE9ORU5UX1BSRVJFUVNfTk9UX01FVCA9IDB4NSxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfTk9UX1NVUFBPUlRFRCA9IDB4NixcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfRldfVFlQRV9JTlZBTElEID0gMHhkMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uXG4mIzQzOyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQGNvbXBsZXRpb25fY29kZTogQ29tcG9uZW50IGNvbXBsZXRpb24gY29kZVxuJiM0MzsgKiBAcmVzcG9uc2U6IENvbXBvbmVudCByZXNwb25zZVxuJiM0MzsgKiBAcmVzcG9uc2VfY29kZTogQ29tcG9uZW50IHJlc3BvbnNlIGNvZGVcbiYjNDM7ICogQHNsb3RfaWQ6IEFjdHVhbCBzbG90X2lkIG9mIHRoZSBjb21wb25lbnQgKGVudW0gcGRzX2NvcmVfZndfc2xvdClcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHtcbiYjNDM7XHR1OCBzdGF0dXM7XG4mIzQzO1x0dTggdmVyO1xuJiM0MztcdHU4IGNvbXBsZXRpb25fY29kZTtcbiYjNDM7XHR1OCByZXNwb25zZTtcbiYjNDM7XHR1OCByZXNwb25zZV9jb2RlO1xuJiM0MztcdHU4IHNsb3RfaWQ7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvblxuJiM0MzsgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQ6IEluaXRpYWwgb3BlcmF0aW9uIHRvIHN0YXJ0IHRyYW5zZmVyXG4mIzQzOyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVM6IFN1YnNlcXVlbnQgY2FsbHMgdG8gY2hlY2sgb24gc3RhdHVzXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIHtcbiYjNDM7XHRQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVCA9IDAsXG4mIzQzO1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lEX0lOVkFMSUQgMHhGRkZGXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IC0gQ29tcG9uZW50IGRldGFpbHNcbiYjNDM7ICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4mIzQzOyAqIEBpbWFnZV9zaXplOiBDb21wb25lbnQgaW1hZ2Ugc2l6ZVxuJiM0MzsgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvXG4mIzQzOyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQmIzM5O3MgSURcbiYjNDM7ICogQG9wdGlvbnM6IENvbXBvbmVudCBvcHRpb25zXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICogQHZlcnNpb25fc3RyX3R5cGU6IFRoZSB0eXBlcyBvZiBzdHJpbmdzIHVzZWRcbiYjNDM7ICogQHZlcnNpb25fc3RyX2xlbjogTGVuZ3RoIG9mIEB2ZXJzaW9uX3N0clxuJiM0MzsgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IHtcbiYjNDM7XHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcbiYjNDM7XHRfX2xlMzIgaW1hZ2Vfc2l6ZTtcbiYjNDM7XHRfX2xlMTYgY2xhc3NpZmljYXRpb247XG4mIzQzO1x0X19sZTE2IGlkZW50aWZpZXI7XG4mIzQzO1x0X19sZTE2IG9wdGlvbnM7XG4mIzQzO1x0dTggcnN2ZFszXTtcbiYjNDM7XHR1OCB2ZXJzaW9uX3N0cl90eXBlO1xuJiM0MztcdHU4IHZlcnNpb25fc3RyX2xlbjtcbiYjNDM7XHR1OCB2ZXJzaW9uX3N0cltdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgLSBTZW5kIGNvbXBvbmVudCBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRcbiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxuJiM0MzsgKiBAb3BlcmF0aW9uOiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wXG4mIzQzOyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzXG4mIzQzOyAqXHQgICAgYXJlIG5lZWRlZCBmb3IgYSBzaW5nbGUgY29tcG9uZW50XG4mIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIHRoaXMgcGFydCBvZiB0aGUgY29tcG9uZW50IHN0b3JlZCBhdCBAZGF0YV9wYVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqIEBkYXRhX3BhOiBETUEgYWRkcmVzcyBvZiB0aGUgY29tcG9uZW50XG4mIzQzOyAqXG4mIzQzOyAqIEEgY29tcG9uZW50IG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZVxuJiM0MzsgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgZmxhc2ggY29tcG9uZW50IGluZm8gKHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQpXG4mIzQzOyAqIGluIGNtZF9yZWdzLVx1MDAzZWRhdGEuIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcbiYjNDM7ICogd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoZSBmbGFzaCBjb21wb25lbnQgaW5mby5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggc2xvdF9pZDtcbiYjNDM7XHR1OCBvcGVyYXRpb247XG4mIzQzO1x0X19sZTMyIG9mZnNldDtcbiYjNDM7XHRfX2xlMzIgZGF0YV9sZW47XG4mIzQzO1x0dTggcnN2ZFs0XTtcbiYjNDM7XHRfX2xlNjQgZGF0YV9wYTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAtIFNlbmQgY29tcG9uZW50IGNvbXBsZXRpb25cbiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxuJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wbGV0aW9uIGNvZGVcbiYjNDM7ICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZClcbiYjNDM7ICogQGNvbXBhdF9yZXNwb25zZV9jb2RlOiBDb21wYXRpYmlsaXR5IHJlc3BvbnNlIGNvZGVcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAge1xuJiM0MztcdHU4IHN0YXR1cztcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggY29tcGxldGlvbl9jb2RlO1xuJiM0MztcdHU4IGNvbXBhdF9yZXNwb25zZTtcbiYjNDM7XHR1OCBjb21wYXRfcmVzcG9uc2VfY29kZTtcbiYjNDM7XHR1OCByc3ZkWzNdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUgLSBGaXJtd2FyZSBjb21wb25lbnQgdHlwZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX01BSU46IE1haW4gZmlybXdhcmVcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfQk9PVDogQm9vdCBsb2FkZXJcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TRUNVUkU6IFNlY3VyZSBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9GUEdBOiBGUEdBIGNvbmZpZ3VyYXRpb25cbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1Q6IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgYm9vdGxvYWRlclxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9VQk9PVDogVS1Cb290IGJvb3Rsb2FkZXJcbiYjNDM7ICpcbiYjNDM7ICogR29sZC9yZWNvdmVyeSB2YXJpYW50cyBhcmUgaWRlbnRpZmllZCBieSBzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRFxuJiM0MzsgKiBhbmQgcmVwb3J0ZWQgd2l0aCBhIFwmIzM0Oy5nb2xkXCYjMzQ7IHN1ZmZpeCAoZS5nLiwgZncuZ29sZCkuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHtcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX1VOS05PV04gICA9IDAsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9NQUlOICAgICAgPSAxLFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMixcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX0NQTEQgICAgICA9IDMsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9TRUNVUkUgICAgPSA0LFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSxcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOICA9IDYsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVCAgPSA3LFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIC0gQ29tcG9uZW50IGluZm8gZmxhZ3NcbiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORzogQ29tcG9uZW50IGlzIGN1cnJlbnRseSBydW5uaW5nXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdFxuJiM0MzsgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRDogQ29tcG9uZW50IGlzIGZpeGVkIGFuZCBjYW5ub3QgYmUgdXBkYXRlZFxuJiM0MzsgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRTogQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkXG4mIzQzOyAqXHRieSBuYW1lXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIHtcbiYjNDM7XHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcgPSBCSVQoMCksXG4mIzQzO1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQID0gQklUKDEpLFxuJiM0MztcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQgPSBCSVQoMiksXG4mIzQzO1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSA9IEJJVCgzKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gZW50cnlcbiYjNDM7ICogQG5hbWU6IENvbXBvbmVudCYjMzk7cyBuYW1lXG4mIzQzOyAqIEBjb21wb25lbnRfdHlwZTogZW51bSBwZHNfY29yZV9md19jb21wb25lbnRfdHlwZVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqIEBmbGFnczogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFnc1xuJiM0MzsgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50JiMzOTtzIGlkZW50aWZpZXJcbiYjNDM7ICogQHNsb3RfaWQ6IENvbXBvbmVudCYjMzk7cyBzbG90IGlkZW50aWZpZXJcbiYjNDM7ICogQHZlcnNpb246IENvbXBvbmVudCYjMzk7cyB2ZXJzaW9uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8ge1xuJiM0MzsjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAyNFxuJiM0MztcdGNoYXIgbmFtZVtQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU5dO1xuJiM0MztcdHU4IGNvbXBvbmVudF90eXBlO1xuJiM0MztcdHU4IHJzdmRbM107XG4mIzQzO1x0X19sZTE2IGZsYWdzO1xuJiM0MztcdHU4IGlkZW50aWZpZXI7XG4mIzQzO1x0dTggc2xvdF9pZDtcbiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAzMlxuJiM0MztcdGNoYXIgdmVyc2lvbltQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTl07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9MSVNUX0xFTlx0KChQRFNfUEFHRV9TSVpFIC0gOCkgLyBcXFxuJiM0MztcdFx0c2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhXG4mIzQzOyAqIEBudW1fY29tcG9uZW50czogTnVtYmVyIG9mIHZhbGlkIGNvbXBvbmVudHNcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyB7XG4mIzQzO1x0dTggbnVtX2NvbXBvbmVudHM7XG4mIzQzO1x0dTggcnN2ZFs3XTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gaW5mb1tQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5dO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogUERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1xuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAZGF0YV9sZW46IExlbmd0aCBvZiBkYXRhIGF0IGRhdGFfcGFcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YVxuJiM0MzsgKlxuJiM0MzsgKiBGVyBwb3B1bGF0ZXMgc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gcG9pbnRlZCB0byBieSBAZGF0YV9wYVxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0X19sZTE2IGRhdGFfbGVuO1xuJiM0MztcdHU4IHJzdmRbNF07XG4mIzQzO1x0X19sZTY0IGRhdGFfcGE7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbXBsZXRpb25cbiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZVxuJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAge1xuJiM0MztcdHU4IHN0YXR1cztcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAtIEZJTkFMSVpFX1VQREFURSBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcbiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVyIHNlbmRzIGF0IHRoZSBlbmQgb2YgdXBkYXRpbmcgYWxsIGNvbXBvbmVudHMgdG8gZmluYWxpemUgdGhlIHVwZGF0ZVxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgLSBGSU5BTElaRV9VUERBVEUgY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQ1xuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAdHlwZTogUExETSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVHlwZVxuJiM0MzsgKiBAc2l6ZTogTGVuZ3RoIG9mIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVmFsdWVcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgdGhlIERlc2NyaXB0b3IgSWRlbnRpZmllciBEYXRhIGluIGNtZF9yZWdzLVx1MDAzZWRhdGEuIERyaXZlclxuJiM0MzsgKiBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQgd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoaXNcbiYjNDM7ICogY29tbWFuZC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0X19sZTE2IHR5cGU7XG4mIzQzO1x0X19sZTE2IHNpemU7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbXBsZXRpb25cbiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZVxuJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAbWF0Y2g6IFdoZXRoZXIgb3Igbm90IHRoZSBSZWNvcmQgRGVzY3JpcHRvciBtYXRjaGVzIHRoZSBkZXZpY2VcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIHN0YXR1cyBpcyBQRFNfUkNfU1VDQ0VTUywgdGhlbiBAbWF0Y2ggaXMgdmFsaWQsIG90aGVyd2lzZSBpdCYjMzk7c1xuJiM0MzsgKiB1bmRlZmluZWQuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCBtYXRjaDtcbiYjNDM7XHR1OCByc3ZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfaG9zdF9tZW1fb3BlciAtIEhPU1RfTUVNIHN1Yi1vcGVyYXRpb25zXG4mIzQzOyAqIEBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ6IFF1ZXJ5IG51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHNcbiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0XG4mIzQzOyAqIEBQRFNfQ09SRV9IT1NUX01FTV9BREQ6ICAgICAgIFByb3ZpZGUgYWxsb2NhdGVkIG1lbW9yeSB0byBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fREVMOiAgICAgICBOb3RpZnkgZmlybXdhcmUgb2YgbWVtb3J5IGRlYWxsb2NhdGlvblxuJiM0MzsgKi9cbiYjNDM7ZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIHtcbiYjNDM7XHRQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlRcdD0gMCxcbiYjNDM7XHRQRFNfQ09SRV9IT1NUX01FTV9RVUVSWVx0XHQ9IDEsXG4mIzQzO1x0UERTX0NPUkVfSE9TVF9NRU1fQUREXHRcdD0gMixcbiYjNDM7XHRQRFNfQ09SRV9IT1NUX01FTV9ERUxcdFx0PSAzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgLSBIT1NUX01FTSBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6ICAgICBPcGNvZGUgUERTX0NPUkVfQ01EX0hPU1RfTUVNXG4mIzQzOyAqIEBvcGVyOiAgICAgICBPcGVyYXRpb24gKGVudW0gcGRzX2NvcmVfaG9zdF9tZW1fb3BlcilcbiYjNDM7ICogQGluZGV4OiAgICAgIE1lbW9yeSByZXF1ZXN0IGluZGV4IChHRVRfQ09VTlQ6IG1heF9jb3VudCwgUVVFUlk6IGluZGV4KVxuJiM0MzsgKiBAdGFnOiAgICAgICAgVGFnIGZvciB0aGlzIG1lbW9yeSByZXF1ZXN0IChBREQvREVMKVxuJiM0MzsgKiBAcmVhc29uOiAgICAgUmVhc29uIGZvciBkZWxldGlvbiAoREVMIG9ubHkpXG4mIzQzOyAqIEByc3ZkOiAgICAgICBSZXNlcnZlZFxuJiM0MzsgKiBAbWF4X2NvbnRpZzogTWF4aW11bSBjb250aWd1b3VzIG1lbW9yeSBzaXplIChHRVRfQ09VTlQgb25seSlcbiYjNDM7ICogQHNpemU6ICAgICAgIFNpemUgb2YgbWVtb3J5IGluIGJ5dGVzIChBREQgb25seSlcbiYjNDM7ICogQGJ1Zl9wYTogICAgIERNQSBhZGRyZXNzIG9mIG1lbW9yeSAoQUREIG9ubHkpXG4mIzQzOyAqXG4mIzQzOyAqIFVuaWZpZWQgY29tbWFuZCBmb3IgYWxsIGhvc3QgbWVtb3J5IG9wZXJhdGlvbnMuIEZpZWxkcyBhcmUgcmV1c2VkXG4mIzQzOyAqIGFjcm9zcyBvcGVyYXRpb25zIHRvIG1pbmltaXplIG9wY29kZSBzcGFjZSB1c2FnZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQge1xuJiM0MztcdHU4ICAgICBvcGNvZGU7XG4mIzQzO1x0dTggICAgIG9wZXI7XG4mIzQzO1x0X19sZTE2IGluZGV4O1xuJiM0MztcdF9fbGUxNiB0YWc7XG4mIzQzO1x0dTggICAgIHJlYXNvbjtcbiYjNDM7XHR1OCAgICAgcnN2ZDtcbiYjNDM7XHRfX2xlMzIgbWF4X2NvbnRpZztcbiYjNDM7XHRfX2xlMzIgc2l6ZTtcbiYjNDM7XHRfX2xlNjQgYnVmX3BhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIC0gSE9TVF9NRU0gY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiAgICAgICBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4mIzQzOyAqIEBvcGVyOiAgICAgICAgIE9wZXJhdGlvbiB0aGF0IHdhcyBwZXJmb3JtZWRcbiYjNDM7ICogQGNvdW50OiAgICAgICAgTnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0cyAoR0VUX0NPVU5UKVxuJiM0MzsgKiBAc2l6ZTogICAgICAgICBTaXplIG9mIG1lbW9yeSByZXF1ZXN0IGluIGJ5dGVzIChRVUVSWSlcbiYjNDM7ICogQHRhZzogICAgICAgICAgVGFnIGZvciB0aGlzIG1lbW9yeSByZXF1ZXN0IChRVUVSWS9ERUwpXG4mIzQzOyAqIEByc3ZkOiAgICAgICAgIFJlc2VydmVkXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCB7XG4mIzQzO1x0dTggICAgIHN0YXR1cztcbiYjNDM7XHR1OCAgICAgb3BlcjtcbiYjNDM7XHRfX2xlMTYgY291bnQ7XG4mIzQzO1x0X19sZTMyIHNpemU7XG4mIzQzO1x0X19sZTE2IHRhZztcbiYjNDM7XHR1OCAgICAgcnN2ZFs2XTtcbiYjNDM7fTtcbiYjNDM7XG4gLypcbiAgKiB1bmlvbiBwZHNfY29yZV9kZXZfY21kIC0gT3ZlcmxheSBvZiBjb3JlIGRldmljZSBjb21tYW5kIHN0cnVjdHVyZXNcbiAgKi9cbkBAIC00NjIsNiAmIzQzOzkxNSwxNCBAQCB1bmlvbiBwZHNfY29yZV9kZXZfY21kIHtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NtZCAgIHZmX3NldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jbWQgICB2Zl9nZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY21kICAgICAgdmZfY3RybDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgZ2V0X2NvbXBvbmVudF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAgICAgIHNlbmRfcGtnX2RhdGE7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgc2VuZF9jb21wb25lbnRfdGJsO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgICAgIHNlbmRfY29tcG9uZW50O1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY21kICAgIGZpbmFsaXplX3VwZGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kICBtYXRjaF9yZWNvcmRfZGVzYztcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kICAgICAgICAgICBob3N0X21lbTtcbiB9O1xuIFxuIC8qXG5AQCAtNDgwLDYgJiM0Mzs5NDEsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAge1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX3NldGF0dHJfY29tcCAgIHZmX3NldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jb21wICAgdmZfZ2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NvbXAgICAgICB2Zl9jdHJsO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgZ2V0X2NvbXBvbmVudF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgICAgICBzZW5kX3BrZ19kYXRhO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgICAgIHNlbmRfY29tcG9uZW50O1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCAgICBmaW5hbGl6ZV91cGRhdGU7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wICAgICAgICAgICBob3N0X21lbTtcbiB9O1xuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGRzX2NvcmUgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkYWJhZmNiMmU5YjAzYjRlMDk2N2M5NDNlNTQzNGM1OWVkMmE3ZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAxMzozMDozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QKaW5kZXggOWU4YTE2YzQ0MTAyOS4uNDk0ODdhMzVjMTYzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QKQEAgLTEwMiw2ICYjNDM7MTAyLDk1IEBAIGN1cnJlbnRseSBpbiB1c2UsIGFuZCB0aGF0IGJhbmsgd2lsbCB1c2VkIGZvciB0aGUgbmV4dCBib290OjoKICAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFwKICAgICAgICAgICAgIGZpbGUgcGVuc2FuZG8vZHNjX2Z3XzEuNjMuMC0yMi50YXIKIAomIzQzO0Zpcm13YXJlIE1hbmFnZW1lbnQgKFBMRE0pCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGRldmxpbmsgZmxhc2ggY29tbWFuZAomIzQzO3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjoKJiM0MzsKJiM0MzsgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBmaWxlIGZpcm13YXJlLnBsZG1mdwomIzQzOwomIzQzO0luZGl2aWR1YWwgY29tcG9uZW50cyBjYW4gYWxzbyBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBuYW1lOjoKJiM0MzsKJiM0MzsgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcCiYjNDM7ICAgICAgICAgICAgZmlsZSBmaXJtd2FyZS5wbGRtZncgY29tcG9uZW50IGZ3LmNwbGQKJiM0MzsKJiM0MztQZXItY29tcG9uZW50IHVwZGF0ZSB1c2VzIGRyaXZlci1kZWZpbmVkIGNvbXBvbmVudCBuYW1lcyAoZncsIGZ3LmNwbGQsCiYjNDM7ZXRjLikuIE5vdCBhbGwgY29tcG9uZW50cyBzdXBwb3J0IHBlci1jb21wb25lbnQgdXBkYXRlIC0KJiM0MztkZXZsaW5rIHdpbGwgcmVqZWN0IHRoZSByZXF1ZXN0IGlmIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50IGNhbm5vdAomIzQzO2JlIHVwZGF0ZWQuCiYjNDM7CiYjNDM7R29sZCAocmVjb3ZlcnkpIGNvbXBvbmVudHMgY2FuIGJlIHVwZGF0ZWQgYnkgc3BlY2lmeWluZyB0aGUgYmFzZSBjb21wb25lbnQKJiM0MztuYW1lIChlLmcuLCBgYGZ3YGAgZm9yIGBgZncuZ29sZGBgKSB3aXRoIGEgZ29sZGZ3IHBhY2thZ2UgZmlsZSB3aGVuIHRoZQomIzQzO2RldmljZSBzdXBwb3J0cyBwZXItY29tcG9uZW50IHVwZGF0ZS4gVGhlIGBgLmdvbGRgYCBzdWZmaXggaW4gZGV2bGluayBpbmZvCiYjNDM7b3V0cHV0IGluZGljYXRlcyB0aGUgZ29sZCBzbG90IHZlcnNpb24sIG5vdCBhIGZsYXNoIHRhcmdldC4KJiM0MzsKJiM0MztJbmZvIHZlcnNpb25zIChQTERNKQomIzQzOz09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7RmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIHJlcG9ydHMgY29tcG9uZW50IHZlcnNpb25zIHVzaW5nIGRyaXZlci1kZWZpbmVkCiYjNDM7bmFtZXMuIFRoZSBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudCB2ZXJzaW9uczoKJiM0MzsKJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGZvciBQTERNLWNhcGFibGUgZmlybXdhcmUKJiM0MzsgICA6d2lkdGhzOiA1IDUgOTAKJiM0MzsKJiM0MzsgICAqIC0gTmFtZQomIzQzOyAgICAgLSBUeXBlCiYjNDM7ICAgICAtIERlc2NyaXB0aW9uCiYjNDM7ICAgKiAtIGBgZndgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gTWFpbiBmaXJtd2FyZQomIzQzOyAgICogLSBgYGZ3LmdvbGRgYAomIzQzOyAgICAgLSBzdG9yZWQKJiM0MzsgICAgIC0gR29sZCAocmVjb3ZlcnkpIGZpcm13YXJlCiYjNDM7ICAgKiAtIGBgZncuYm9vdGxvYWRlcmBgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBCb290IGxvYWRlcgomIzQzOyAgICogLSBgYGZ3LmNwbGRgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gQ1BMRAomIzQzOyAgICogLSBgYGZ3LnNlY3VyZWBgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBTZWN1cmUgYm9vdCBmaXJtd2FyZQomIzQzOyAgICogLSBgYGZ3LmZwZ2FgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gRlBHQSBjb25maWd1cmF0aW9uCiYjNDM7ICAgKiAtIGBgZncuc3VjYGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmUKJiM0MzsgICAqIC0gYGBmdy5zdWMuYm9vdGxvYWRlcmBgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGJvb3Rsb2FkZXIKJiM0MzsgICAqIC0gYGBmdy51Ym9vdGBgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBVLUJvb3QgYm9vdGxvYWRlcgomIzQzOyAgICogLSBgYGFzaWMuaWRgYAomIzQzOyAgICAgLSBmaXhlZAomIzQzOyAgICAgLSBUaGUgQVNJQyB0eXBlIGZvciB0aGlzIGRldmljZQomIzQzOyAgICogLSBgYGFzaWMucmV2YGAKJiM0MzsgICAgIC0gZml4ZWQKJiM0MzsgICAgIC0gVGhlIHJldmlzaW9uIG9mIHRoZSBBU0lDIGZvciB0aGlzIGRldmljZQomIzQzOwomIzQzO0V4YW1wbGUgb3V0cHV0OjoKJiM0MzsKJiM0MzsgICQgZGV2bGluayBkZXYgaW5mbyBwY2kvMDAwMDowMDowNS4wCiYjNDM7ICBwY2kvMDAwMDowMDowNS4wOgomIzQzOyAgICBkcml2ZXIgcGRzX2NvcmUKJiM0MzsgICAgc2VyaWFsX251bWJlciBGTE0xODQyMDA3MwomIzQzOyAgICB2ZXJzaW9uczoKJiM0MzsgICAgICAgIGZpeGVkOgomIzQzOyAgICAgICAgICBhc2ljLmlkIDB4MAomIzQzOyAgICAgICAgICBhc2ljLnJldiAweDAKJiM0MzsgICAgICAgIHJ1bm5pbmc6CiYjNDM7ICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjMKJiM0MzsgICAgICAgICAgZncgMS4zLjAKJiM0MzsgICAgICAgICAgZncuY3BsZCAzLjE4CiYjNDM7ICAgICAgICBzdG9yZWQ6CiYjNDM7ICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjMKJiM0MzsgICAgICAgICAgZncuZ29sZCAxLjIuMAomIzQzOyAgICAgICAgICBmdyAxLjMuMAomIzQzOyAgICAgICAgICBmdy5jcGxkIDMuMTgKJiM0MzsKIEhlYWx0aCBSZXBvcnRlcnMKID09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZwppbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZwpAQCAtMTcxLDYgJiM0MzsxNzEsNyBAQCBjb25maWcgUERTX0NPUkUKIAlkZXBlbmRzIG9uIDY0QklUICZhbXA7JmFtcDsgUENJCiAJc2VsZWN0IEFVWElMSUFSWV9CVVMKIAlzZWxlY3QgTkVUX0RFVkxJTksKJiM0MzsJc2VsZWN0IFBMRE1GVwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2YKIAkgIGFkYXB0ZXJzLiAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBjYW4gYmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jCmluZGV4IDA0ZWMyNTY5YzYxYzAuLjkyMmUzZWM4YWYxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuYwpAQCAtNDg5LDYgJiM0Mzs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKQogCQlwZHNjX2RldmNtZF9yZXNldChwZHNjKTsKIAogCXBjaV9jbGVhcl9tYXN0ZXIocGRzYy0mZ3Q7cGRldik7CiYjNDM7CWlmICghcGRzYy0mZ3Q7cGRldi0mZ3Q7aXNfdmlydGZuKSB7CiYjNDM7CQl1MTYgdmFsOwomIzQzOwomIzQzOwkJLyogRmx1c2ggYW55IGluLWZsaWdodCBETUEgYmVmb3JlIGZyZWVpbmcgYnVmZmVycy4KJiM0MzsJCSAqIEEgY29uZmlnIHJlYWQgY29tcGxldGlvbiBjYW5ub3QgcmV0dXJuIHVudGlsIGFsbCBwcmlvcgomIzQzOwkJICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLgomIzQzOwkJICovCiYjNDM7CQlwY2lfcmVhZF9jb25maWdfd29yZChwZHNjLSZndDtwZGV2LCBQQ0lfVkVORE9SX0lELCAmYW1wO3ZhbCk7CiYjNDM7CX0KIAogCXBkc2NfY29yZV91bmluaXQocGRzYyk7CiAKQEAgLTQ5Nyw2ICYjNDM7NTA2LDggQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKQogCQlwZHNjLSZndDt2aWZ0eXBlX3N0YXR1cyA9IE5VTEw7CiAJfQogCiYjNDM7CXBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7CiYjNDM7CXBkc2NfaG9zdF9tZW1fZnJlZShwZHNjKTsKIAlwZHNjX2Rldl91bmluaXQocGRzYyk7CiAKIAlzZXRfYml0KFBEU0NfU19GV19ERUFELCAmYW1wO3Bkc2MtJmd0O3N0YXRlKTsKQEAgLTUwNiw2ICYjNDM7NTE3LDggQEAgaW50IHBkc2Nfc3RhcnQoc3RydWN0IHBkc2MgKnBkc2MpCiB7CiAJcGRzX2NvcmVfaW50cl9tYXNrKCZhbXA7cGRzYy0mZ3Q7aW50cl9jdHJsW3Bkc2MtJmd0O2FkbWlucWNxLmludHhdLAogCQkJICAgUERTX0NPUkVfSU5UUl9NQVNLX0NMRUFSKTsKJiM0MzsJcGRzY19ob3N0X21lbV9hZGQocGRzYyk7CiYjNDM7CXBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0ocGRzYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4Nyw2ICYjNDM7NjAwLDggQEAgdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKQogCQlyZXR1cm47CiAJfQogCiYjNDM7CXBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpOwomIzQzOwogCWVyciA9IHBkc2Nfc2V0dXAocGRzYywgUERTQ19TRVRVUF9SRUNPVkVSWSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwpAQCAtNjcwLDMgJiM0Mzs2ODUsMTYxIEBAIHZvaWQgcGRzY19oZWFsdGhfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7Y29uZmlnX2xvY2spOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU0sCiYjNDM7CQkuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCwKJiM0MzsJCS5ob3N0X21lbS50YWcgPSBjcHVfdG9fbGUxNih0YWcpLAomIzQzOwkJLmhvc3RfbWVtLnJlYXNvbiA9IHJlYXNvbiwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJZGV2X2RiZyhwZHNjLSZndDtkZXYsICYjMzQ7U2VuZGluZyBkZXZjbWQgZm9yIG1lbSBkZWwgdGFnICVkXG4mIzM0OywgdGFnKTsKJiM0MzsJcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfaG9zdF9tZW1fYWRkX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgaW50IGluZGV4KQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtID0gJmFtcDtwZHNjLSZndDtob3N0X21lbV9yZXFzW2luZGV4XTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwljbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNOwomIzQzOwljbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOwomIzQzOwljbWQuaG9zdF9tZW0uaW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcbiYjMzQ7LCBpbmRleCk7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0MzsJaWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7bWVtIHF1ZXJ5IGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkXG4mIzM0OywKJiM0MzsJCQllcnIsIGNvbXAuc3RhdHVzKTsKJiM0MzsJCXJldHVybiBlcnIgPyBlcnIgOiAtRUlPOwomIzQzOwl9CiYjNDM7CWhtLSZndDtzaXplID0gbGUzMl90b19jcHUoY29tcC5ob3N0X21lbS5zaXplKTsKJiM0MzsJaG0tJmd0O3RhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTsKJiM0MzsJZGV2X2RiZyhwZHNjLSZndDtkZXYsICYjMzQ7bWVtIHF1ZXJ5IHJldHVybmVkIHNpemUgJWQgdGFnICVkXG4mIzM0OywKJiM0MzsJCWhtLSZndDtzaXplLCBobS0mZ3Q7dGFnKTsKJiM0MzsKJiM0MzsJaWYgKCFobS0mZ3Q7c2l6ZSB8fCBobS0mZ3Q7c2l6ZSAmZ3Q7IFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRykgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7aW52YWxpZCBzaXplICVkIGZvciB0YWcgJWRcbiYjMzQ7LAomIzQzOwkJCWhtLSZndDtzaXplLCBobS0mZ3Q7dGFnKTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9kZWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaG0tJmd0O29yZGVyID0gZ2V0X29yZGVyKGhtLSZndDtzaXplKTsKJiM0MzsJaG0tJmd0O3BnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sIGhtLSZndDtvcmRlcik7CiYjNDM7CWlmICghaG0tJmd0O3BnKSB7CiYjNDM7CQlkZXZfd2FybihwZHNjLSZndDtkZXYsICYjMzQ7YWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcbiYjMzQ7LAomIzQzOwkJCSBobS0mZ3Q7b3JkZXIsIGhtLSZndDt0YWcpOwomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyX2RlbDsKJiM0MzsJfQomIzQzOwomIzQzOwlobS0mZ3Q7cGEgPSBkbWFfbWFwX3BhZ2UocGRzYy0mZ3Q7ZGV2LCBobS0mZ3Q7cGcsIDAsIGhtLSZndDtzaXplLAomIzQzOwkJCSAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKJiM0MzsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtJmd0O2RldiwgaG0tJmd0O3BhKSkgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7ZG1hIG1hcCBmYWlsZWQgZm9yIHRhZyAlZCBzaXplICVkXG4mIzM0OywKJiM0MzsJCQlobS0mZ3Q7dGFnLCBobS0mZ3Q7c2l6ZSk7CiYjNDM7CQlfX2ZyZWVfcGFnZXMoaG0tJmd0O3BnLCBobS0mZ3Q7b3JkZXIpOwomIzQzOwkJaG0tJmd0O3BnID0gTlVMTDsKJiM0MzsJCWVyciA9IC1FSU87CiYjNDM7CQlnb3RvIGVycl9kZWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVHJhY2sgdGhpcyBhbGxvY2F0aW9uIHNvIHBkc2NfaG9zdF9tZW1fZnJlZSgpIGNhbiBjbGVhbiBpdCB1cCAqLwomIzQzOwlwZHNjLSZndDtudW1faG9zdF9tZW1fcmVxcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2NtZCwgMCwgc2l6ZW9mKGNtZCkpOwomIzQzOwltZW1zZXQoJmFtcDtjb21wLCAwLCBzaXplb2YoY29tcCkpOwomIzQzOwljbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNOwomIzQzOwljbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0FERDsKJiM0MzsJY21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLSZndDt0YWcpOwomIzQzOwljbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLSZndDtzaXplKTsKJiM0MzsJY21kLmhvc3RfbWVtLmJ1Zl9wYSA9IGNwdV90b19sZTY0KGhtLSZndDtwYSk7CiYjNDM7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gYWRkIHRhZyAlZCBzaXplICVkIHBhICVwYWRcbiYjMzQ7LAomIzQzOwkJaG0tJmd0O3RhZywgaG0tJmd0O3NpemUsICZhbXA7aG0tJmd0O3BhKTsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzOwlpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7CiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDttZW0gYWRkIGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkIGZvciB0YWcgJWRcbiYjMzQ7LAomIzQzOwkJCWVyciwgY29tcC5zdGF0dXMsIGhtLSZndDt0YWcpOwomIzQzOwkJZXJyID0gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJCWdvdG8gZXJyX2RlbDsKJiM0MzsJfQomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDttZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXG4mIzM0OywgaG0tJmd0O3RhZyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9kZWw6CiYjNDM7CS8qIEFmdGVyIE1FTV9RVUVSWSBzdWNjZWVkcywgZmlybXdhcmUgZXhwZWN0cyBNRU1fQUREIG9yIE1FTV9ERUwgKi8KJiM0MzsJcGRzY19ob3N0X21lbV9kZWxfb25lKHBkc2MsIGhtLSZndDt0YWcsIFBEU19SQ19FTk9NRU0pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9OwomIzQzOwl1MTYgY291bnQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIShwZHNjLSZndDtkZXZfaWRlbnQuY2FwYWJpbGl0aWVzICZhbXA7CiYjNDM7CSAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNOwomIzQzOwljbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVDsKJiM0MzsJY21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpOwomIzQzOwljbWQuaG9zdF9tZW0ubWF4X2NvbnRpZyA9IGNwdV90b19sZTMyKFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gZ2V0IGNvdW50IG1heF9jb250aWcgJXVcbiYjMzQ7LAomIzQzOwkJUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzOwlpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7CiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDttZW0gZ2V0IGNvdW50IGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkXG4mIzM0OywKJiM0MzsJCQllcnIsIGNvbXAuc3RhdHVzKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwljb3VudCA9IG1pbihsZTE2X3RvX2NwdShjb21wLmhvc3RfbWVtLmNvdW50KSwKJiM0MzsJCSAgICBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O21lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcbiYjMzQ7LCBjb3VudCk7CiYjNDM7CWlmIChjb3VudCA9PSAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwZHNjLSZndDtob3N0X21lbV9yZXFzID0ga3phbGxvY19vYmpzKCpwZHNjLSZndDtob3N0X21lbV9yZXFzLCBjb3VudCwKJiM0MzsJCQkJCSAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBkc2MtJmd0O2hvc3RfbWVtX3JlcXMpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byBhbGxvYyBob3N0X21lbV9yZXFzIGFycmF5XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gcGRzY19ob3N0X21lbV9hZGRfb25lKHBkc2MsIGkpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIXBkc2MtJmd0O2hvc3RfbWVtX3JlcXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZHNjLSZndDtudW1faG9zdF9tZW1fcmVxczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWRtYV91bm1hcF9wYWdlKHBkc2MtJmd0O2RldiwgcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpXS5wYSwKJiM0MzsJCQkgICAgICAgcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpXS5zaXplLAomIzQzOwkJCSAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CiYjNDM7CQlfX2ZyZWVfcGFnZXMocGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpXS5wZywKJiM0MzsJCQkgICAgIHBkc2MtJmd0O2hvc3RfbWVtX3JlcXNbaV0ub3JkZXIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtmcmVlKHBkc2MtJmd0O2hvc3RfbWVtX3JlcXMpOwomIzQzOwlwZHNjLSZndDtob3N0X21lbV9yZXFzID0gTlVMTDsKJiM0MzsJcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXMgPSAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oCmluZGV4IGI3ZmU5YWQ3MzM0OTguLjc5MTc1NmE1MDg3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaApAQCAtNSw2ICYjNDM7NSw3IEBACiAjZGVmaW5lIF9QRFNDX0hfCiAKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tem9uZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9wZHMvcGRzX2NvbW1vbi5oJmd0OwpAQCAtMjMsNiAmIzQzOzI0LDIwIEBACiAjZGVmaW5lIFBEU0NfU0VUVVBfUkVDT1ZFUlkJZmFsc2UKICNkZWZpbmUgUERTQ19TRVRVUF9JTklUCQl0cnVlCiAKJiM0MzsvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFICZsdDsmbHQ7IE1BWF9QQUdFX09SREVSIHRvIGF2b2lkCiYjNDM7ICogY3B1X3RvX2xlMzIoKSB0cnVuY2F0aW9uIG9uIGxhcmdlLXBhZ2UgY29uZmlncwomIzQzOyAqLwomIzQzOyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHICg0ICogMTAyNCAqIDEwMjQpCiYjNDM7I2RlZmluZSBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCAgMjU2CiYjNDM7CiYjNDM7c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwl2b2lkICp2YTsKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHBkc2NfZGV2X2JhciB7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKIAlwaHlzX2FkZHJfdCBidXNfYWRkcjsKQEAgLTE0MSw2ICYjNDM7MTU2LDE0IEBAIHN0cnVjdCBwZHNjX3ZpZnR5cGUgewogCXN0cnVjdCBwZHNfYXV4aWxpYXJ5X2RldiAqcGFkZXY7CiB9OwogCiYjNDM7c3RydWN0IHBkc2NfaG9zdF9tZW0gewomIzQzOwl1MzIgc2l6ZTsKJiM0MzsJdTE2IHRhZzsKJiM0MzsJdTggb3JkZXI7CiYjNDM7CXN0cnVjdCBwYWdlICpwZzsKJiM0MzsJZG1hX2FkZHJfdCBwYTsKJiM0Mzt9OwomIzQzOwogLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovCiBlbnVtIHBkc2Nfc3RhdGVfZmxhZ3MgewogCVBEU0NfU19GV19ERUFELAkJICAgIC8qIHN0b3BwZWQsIHdhaXQgb24gc3RhcnR1cCBvciByZWNvdmVyeSAqLwpAQCAtMTg1LDYgJiM0MzsyMDgsOCBAQCBzdHJ1Y3QgcGRzYyB7CiAJc3RydWN0IG11dGV4IGRldmNtZF9sb2NrOwkvKiBsb2NrIGZvciBkZXZfY21kIG9wZXJhdGlvbnMgKi8KIAlzdHJ1Y3QgbXV0ZXggY29uZmlnX2xvY2s7CS8qIGxvY2sgZm9yIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyAqLwogCXNwaW5sb2NrX3QgYWRtaW5xX2xvY2s7CQkvKiBsb2NrIGZvciBhZG1pbnEgb3BlcmF0aW9ucyAqLwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2RtYV9saXN0OwomIzQzOwlzcGlubG9ja190IGRlZmVycmVkX2RtYV9sb2NrOwkvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqLwogCXJlZmNvdW50X3QgYWRtaW5xX3JlZmNudDsKIAlzdHJ1Y3QgcGRzX2NvcmVfZGV2X2luZm9fcmVncyBfX2lvbWVtICppbmZvX3JlZ3M7CiAJc3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVnczsKQEAgLTE5OSw2ICYjNDM7MjI0LDExIEBAIHN0cnVjdCBwZHNjIHsKIAl1NjQgbGFzdF9laWQ7CiAJc3RydWN0IHBkc2NfdmlmdHlwZSAqdmlmdHlwZV9zdGF0dXM7CiAJc3RydWN0IHdvcmtfc3RydWN0IHBjaV9yZXNldF93b3JrOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG9zdF9tZW1fcmVxczsKJiM0MzsJdTE2IG51bV9ob3N0X21lbV9yZXFzOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzOwogfTsKIAogLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLgpAQCAtMjc1LDE0ICYjNDM7MzA1LDI0IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF92aWZ0eXBlKHN0cnVjdCBwZHNjICpwZHNjKTsKIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9pcnFzKHN0cnVjdCBwZHNjICpwZHNjKTsKIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9xY3Eoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX3FjcSAqcWNxKTsKIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpOwomIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTsKIAogaW50IHBkc2NfZXJyX3RvX2Vycm5vKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUgY29kZSk7CiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7CiBib29sIHBkc2NfaXNfZndfZ29vZChzdHJ1Y3QgcGRzYyAqcGRzYyk7CiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7CiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAomIzQzOwkJCSAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7CiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCiYjNDM7CQkJCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwogaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAogCQkgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7CiYjNDM7aW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCSAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7CiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7CiBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpOwogaW50IHBkc2NfZGV2X2luaXQoc3RydWN0IHBkc2MgKnBkc2MpOwpAQCAtMzE1LDExICYjNDM7MzU1LDIzIEBAIHZvaWQgcGRzY19wcm9jZXNzX2FkbWlucShzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7CiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGlycXJldHVybl90IHBkc2NfYWRtaW5xX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKTsKIAotaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAomIzQzO2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAogCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKTsKJiM0Mztjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKTsKJiM0Mzt2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKTsKIAogdm9pZCBwZHNjX2Z3X2Rvd24oc3RydWN0IHBkc2MgKnBkc2MpOwogdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKTsKIHZvaWQgcGRzY19wY2lfcmVzZXRfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTsKJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7CiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksCiYjNDM7CQkJICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLAomIzQzOwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTsKJiM0MzsKICNlbmRpZiAvKiBfUERTQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMKaW5kZXggODEwYTBjZDliY2FjOC4uZWYwYTFiN2QxNTliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jCkBAIC0xNzgsMyAmIzQzOzE3OCw0OCBAQCB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKQogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShxY3EtJmd0O2RlbnRyeSk7CiAJcWNxLSZndDtkZW50cnkgPSBOVUxMOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaG9zdF9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gc2VxLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG07CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIXBkc2MtJmd0O2hvc3RfbWVtX3JlcXMgfHwgcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXMgPT0gMCkgewomIzQzOwkJc2VxX3B1dHMoc2VxLCAmIzM0O05vIGhvc3QgbWVtb3J5IGFsbG9jYXRlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VxX3ByaW50ZihzZXEsICYjMzQ7SG9zdCBtZW1vcnkgcmVxdWVzdHM6ICV1XG5cbiYjMzQ7LAomIzQzOwkJICAgcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXMpOwomIzQzOwlzZXFfcHV0cyhzZXEsICYjMzQ7VGFnICAgIFNpemUgICAgICAgICBPcmRlciAgUEFcbiYjMzQ7KTsKJiM0MzsJc2VxX3B1dHMoc2VxLCAmIzM0Oy0tLSAgICAtLS0tICAgICAgICAgLS0tLS0gIC0tXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZHNjLSZndDtudW1faG9zdF9tZW1fcmVxczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWhtID0gJmFtcDtwZHNjLSZndDtob3N0X21lbV9yZXFzW2ldOwomIzQzOwomIzQzOwkJaWYgKCFobS0mZ3Q7cGcpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzZXFfcHJpbnRmKHNlcSwgJiMzNDslLTZ1ICUtMTJ1ICUtNnUgJXBhZFxuJiMzNDssCiYjNDM7CQkJICAgaG0tJmd0O3RhZywgaG0tJmd0O3NpemUsIGhtLSZndDtvcmRlciwgJmFtcDtobS0mZ3Q7cGEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoaG9zdF9tZW0pOwomIzQzOwomIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CWlmICghKHBkc2MtJmd0O2Rldl9pZGVudC5jYXBhYmlsaXRpZXMgJmFtcDsKJiM0MzsJICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtob3N0X21lbSYjMzQ7LCAwNDAwLCBwZHNjLSZndDtkZW50cnksCiYjNDM7CQkJICAgIHBkc2MsICZhbXA7aG9zdF9tZW1fZm9wcyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CWRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUoJiMzNDtob3N0X21lbSYjMzQ7LCBwZHNjLSZndDtkZW50cnkpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuYwppbmRleCBiZGVkNmIzMzI4OWNlLi5jNTA3NzgxNzVlMmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jCkBAIC0xMjYsNyAmIzQzOzEyNiw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwZHNjX2RldmNtZF9zdHIoaW50IG9wY29kZSkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpCiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzLAomIzQzOwkJCSAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtJmd0O2RldjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CkBAIC0xNzksNyAmIzQzOzE4MCw3IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpCiAKIAlzdGF0dXMgPSBwZHNjX2RldmNtZF9zdGF0dXMocGRzYyk7CiAJZXJyID0gcGRzY19lcnJfdG9fZXJybm8oc3RhdHVzKTsKLQlpZiAoZXJyICZhbXA7JmFtcDsgZXJyICE9IC1FQUdBSU4pCiYjNDM7CWlmIChkb19tc2cgJmFtcDsmYW1wOyBlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVBR0FJTikKIAkJZGV2X2VycihkZXYsICYjMzQ7REVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcbiYjMzQ7LAogCQkJb3Bjb2RlLCBwZHNjX2RldmNtZF9zdHIob3Bjb2RlKSwgc3RhdHVzLCBlcnIsCiAJCQlFUlJfUFRSKGVycikpOwpAQCAtMTg3LDggJiM0MzsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKQogCXJldHVybiBlcnI7CiB9CiAKLWludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKLQkJICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpCiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCQl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzLAomIzQzOwkJCQljb25zdCBib29sIGRvX21zZykKIHsKIAlpbnQgZXJyOwogCkBAIC0xOTcsMTYgJiM0MzsxOTksNjMgQEAgaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAogCiAJbWVtY3B5X3RvaW8oJmFtcDtwZHNjLSZndDtjbWRfcmVncy0mZ3Q7Y21kLCBjbWQsIHNpemVvZigqY21kKSk7CiAJcGRzY19kZXZjbWRfZGJlbGwocGRzYyk7Ci0JZXJyID0gcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtJmd0O29wY29kZSwgbWF4X3NlY29uZHMpOwomIzQzOwllcnIgPSBfX3Bkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLSZndDtvcGNvZGUsIG1heF9zZWNvbmRzLCBkb19tc2cpOwogCiAJaWYgKChlcnIgPT0gLUVOWElPIHx8IGVyciA9PSAtRVRJTUVET1VUKSAmYW1wOyZhbXA7IHBkc2MtJmd0O3dxKQogCQlxdWV1ZV93b3JrKHBkc2MtJmd0O3dxLCAmYW1wO3Bkc2MtJmd0O2hlYWx0aF93b3JrKTsKIAllbHNlCiAJCW1lbWNweV9mcm9taW8oY29tcCwgJmFtcDtwZHNjLSZndDtjbWRfcmVncy0mZ3Q7Y29tcCwgc2l6ZW9mKCpjb21wKSk7CiAKJiM0MzsJaWYgKGVyciAhPSAtRVRJTUVET1VUICZhbXA7JmFtcDsgZXJyICE9IC1FQUdBSU4pCiYjNDM7CQlwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSwKJiM0MzsJCQkgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsCiYjNDM7CQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQomIzQzO3sKJiM0MzsJZW50cnktJmd0O2RtYV9hZGRyID0gZG1hX2FkZHI7CiYjNDM7CWVudHJ5LSZndDt2YSA9IHZhOwomIzQzOwllbnRyeS0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CWVudHJ5LSZndDtkaXIgPSBkaXI7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9sb2NrKTsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO2VudHJ5LSZndDtsaXN0LCAmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9saXN0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwZHNjLSZndDtkZWZlcnJlZF9kbWFfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksICp0bXA7CiYjNDM7CUxJU1RfSEVBRChsb2NhbF9saXN0KTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xvY2spOwomIzQzOwlsaXN0X3NwbGljZV9pbml0KCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xpc3QsICZhbXA7bG9jYWxfbGlzdCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmFtcDtsb2NhbF9saXN0LCBsaXN0KSB7CiYjNDM7CQlkbWFfdW5tYXBfc2luZ2xlKHBkc2MtJmd0O2RldiwgZW50cnktJmd0O2RtYV9hZGRyLAomIzQzOwkJCQkgZW50cnktJmd0O3NpemUsIGVudHJ5LSZndDtkaXIpOwomIzQzOwkJa2ZyZWUoZW50cnktJmd0O3ZhKTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7ZW50cnktJmd0O2xpc3QpOwomIzQzOwkJa2ZyZWUoZW50cnkpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCSAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkJICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKIHsKQEAgLTIxOSw2ICYjNDM7MjY4LDQ3IEBAIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCQkgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKJiM0MzsJCQkJICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsCiYjNDM7CQkJCSAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGV2Y21kX2xvY2spOwomIzQzOwlpZiAoIXBkc2MtJmd0O2NtZF9yZWdzKSB7CiYjNDM7CQllcnIgPSAtRU5YSU87CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwlpZiAoZGF0YV9sZW4gJmd0OyBzaXplb2YocGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSAtRU5PU1BDOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsJbWVtY3B5X3RvaW8oJmFtcDtwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSwgZGF0YSwgZGF0YV9sZW4pOwomIzQzOwllcnIgPSBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCBkb19tc2cpOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGV2Y21kX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCiYjNDM7CQkJICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sCiYjNDM7CQkJCSAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAomIzQzOwkJCQl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sCiYjNDM7CQkJCSAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpOwomIzQzO30KJiM0MzsKIGludCBwZHNjX2RldmNtZF9pbml0KHN0cnVjdCBwZHNjICpwZHNjKQogewogCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKQEAgLTI0MiwxNSAmIzQzOzMzMiwxNyBAQCBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpCiAJcmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKIH0KIAotc3RhdGljIGludCBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IGRydl9pZGVudF92ZXIsCiYjNDM7CQkJCSAgICAgICBib29sIGRvX21zZykKIHsKIAl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiAJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiAJCS5pZGVudGlmeS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSURFTlRJRlksCi0JCS5pZGVudGlmeS52ZXIgPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEsCiYjNDM7CQkuaWRlbnRpZnkudmVyID0gZHJ2X2lkZW50X3ZlciwKIAl9OwogCi0JcmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCwKJiM0MzsJCQkJICAgIGRvX21zZyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBkc2NfaW5pdF9kZXZpbmZvKHN0cnVjdCBwZHNjICpwZHNjKQpAQCAtMjczLDggJiM0MzszNjUsOSBAQCBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYykKIAlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDtmd192ZXJzaW9uICVzXG4mIzM0OywgcGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvbik7CiB9CiAKLXN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0MztzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnlfdmVyKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyKQogewomIzQzOwlib29sIGRvX21zZyA9IGRydl9pZGVudF92ZXIgPT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xOwogCXN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307CiAJc2l6ZV90IHN6OwogCWludCBlcnI7CkBAIC0yOTcsMTkgJiM0MzszOTAsMjIgQEAgc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKQogCXN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoZHJ2KSwgc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKSk7CiAJbWVtY3B5X3RvaW8oJmFtcDtwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSwgJmFtcDtkcnYsIHN6KTsKIAotCWVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHBkc2MsIGRydl9pZGVudF92ZXIsIGRvX21zZyk7CiAJaWYgKCFlcnIpIHsKIAkJc3ogPSBtaW5fdChzaXplX3QsIHNpemVvZihwZHNjLSZndDtkZXZfaWRlbnQpLAogCQkJICAgc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKSk7CiAJCW1lbWNweV9mcm9taW8oJmFtcDtwZHNjLSZndDtkZXZfaWRlbnQsICZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEsIHN6KTsKJiM0MzsKJiM0MzsJCS8qIFYxIGZpcm13YXJlIGRvZXNuJiMzOTt0IHNldCBjYXBhYmlsaXRpZXMsIHNvIHRoZSBmaWVsZCBtYXkKJiM0MzsJCSAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwZHNjLSZndDtkZXZfaWRlbnQudmVyc2lvbiAmbHQ7IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikKJiM0MzsJCQlwZHNjLSZndDtkZXZfaWRlbnQuY2FwYWJpbGl0aWVzID0gMDsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGV2Y21kX2xvY2spOwogCi0JaWYgKGVycikgewotCQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDtDYW5ub3QgaWRlbnRpZnkgZGV2aWNlOiAlcGVcbiYjMzQ7LAotCQkJRVJSX1BUUihlcnIpKTsKJiM0MzsJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQl9CiAKIAlpZiAoaXNwcmludChwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uWzBdKSAmYW1wOyZhbXA7CiAJICAgIGlzYXNjaWkocGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvblswXSkpCkBAIC0zMjYsNiAmIzQzOzQyMiwyNiBAQCBzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBPbGRlciBmaXJtd2FyZSByZWplY3RzIGFueXRoaW5nIGJ1dCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEKJiM0MzsJICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb24KJiM0MzsJICogcmVqZWN0aW9uLiBEb24mIzM5O3QgcmV0cnkgb24gb3RoZXIgZXJyb3JzIGxpa2UgLUVOWElPLy1FVElNRURPVVQKJiM0MzsJICogd2hpY2ggaW5kaWNhdGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgb3IgaHVuZy4KJiM0MzsJICovCiYjNDM7CWVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMik7CiYjNDM7CWlmIChlcnIgPT0gLUVJTlZBTCkKJiM0MzsJCWVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSk7CiYjNDM7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDtDYW5ub3QgaWRlbnRpZnkgZGV2aWNlOiAlcGVcbiYjMzQ7LAomIzQzOwkJCUVSUl9QVFIoZXJyKSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogdm9pZCBwZHNjX2Rldl91bmluaXQoc3RydWN0IHBkc2MgKnBkc2MpCiB7CiAJaWYgKHBkc2MtJmd0O2ludHJfaW5mbykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMKaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jCkBAIC05MCwxMyAmIzQzOzkwLDExMiBAQCBpbnQgcGRzY19kbF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLAogewogCXN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTsKIAotCWlmIChwYXJhbXMtJmd0O2NvbXBvbmVudCkgewotCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAotCQkJCSAgICYjMzQ7Q29tcG9uZW50IHVwZGF0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlJiMzNDspOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CXJldHVybiBwZHNjX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwllbnVtIGRldmxpbmtfaW5mb192ZXJzaW9uX3R5cGUgdmVyX3R5cGU7CiYjNDM7CXUxNiBmbGFncyA9IGxlMTZfdG9fY3B1KGluZm8tJmd0O2ZsYWdzKTsKJiM0MzsJY2hhciAqdmVyID0gaW5mby0mZ3Q7dmVyc2lvbjsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJY2hhciBidWZbMzJdOwomIzQzOwomIzQzOwkvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgJiMzNDtmdyYjMzQ7ICovCiYjNDM7CWlmIChpbmZvLSZndDtjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHsKJiM0MzsJCWlmIChpbmZvLSZndDtzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRCkKJiM0MzsJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0O2Z3LmdvbGQmIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDtmdyYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW5hbWUgPSBwZHNjX2Z3X3R5cGVfdG9fbmFtZShpbmZvLSZndDtjb21wb25lbnRfdHlwZSk7CiYjNDM7CQlpZiAoIW5hbWUpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQpCiYjNDM7CQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDtmdy4lcy5nb2xkJiMzNDssIG5hbWUpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7ZncuJXMmIzM0OywgbmFtZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FKQomIzQzOwkJdmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX0NPTVBPTkVOVDsKJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQpIHsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBidWYsIHZlcik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykgewomIzQzOwkJaW50IGVycjsKJiM0MzsKJiM0MzsJCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0X2V4dChyZXEsIGJ1ZiwKJiM0MzsJCQkJCQkJICAgdmVyLCB2ZXJfdHlwZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy0mZ3Q7ZncsIGV4dGFjayk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVApIHsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0X2V4dChyZXEsIGJ1ZiwKJiM0MzsJCQkJCQkJICB2ZXIsIHZlcl90eXBlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2RsX3JlcG9ydF9md192ZXIoc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwgY2hhciAqZndfdmVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwKJiM0MzsJCQkJCQlERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLAomIzQzOwkJCQkJCWZ3X3Zlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9jb21wb25lbnRfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7CiYjNDM7CXU4IG51bV9jb21wb25lbnRzOwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuCiYjNDM7CSAqIFVzZSBSRUFEX09OQ0UgdG8gZ2V0IGEgY29uc2lzdGVudCBzbmFwc2hvdCBvZiBudW1fY29tcG9uZW50cy4KJiM0MzsJICogcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoKSBjYW4gemVybyBpdCBjb25jdXJyZW50bHkgZHVyaW5nCiYjNDM7CSAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm8KJiM0MzsJICogdGltZXMgd2hlbiB3ZSBhbHJlYWR5IGRlY2lkZWQgdGhlIGNhY2hlIHdhcyB2YWxpZC4KJiM0MzsJICovCiYjNDM7CW51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtJmd0O2Z3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpOwomIzQzOwlpZiAoIW51bV9jb21wb25lbnRzKSB7CiYjNDM7CQllcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsCiYjNDM7CQkJCQkJICAgIHBkc2MtJmd0O2Rldl9pbmZvLmZ3X3ZlcnNpb24pOwomIzQzOwkJbnVtX2NvbXBvbmVudHMgPSBSRUFEX09OQ0UocGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7CiYjNDM7CQlpZiAoIW51bV9jb21wb25lbnRzKQomIzQzOwkJCXJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLAomIzQzOwkJCQkJCSAgICBwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uKTsKJiM0MzsJfQomIzQzOwomIzQzOwludW1fY29tcG9uZW50cyA9IG1pbl90KHUxNiwgbnVtX2NvbXBvbmVudHMsCiYjNDM7CQkJICAgICAgIGxlMTZfdG9fY3B1KHBkc2MtJmd0O2Rldl9pZGVudC5tYXhfZndfc2xvdHMpKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHJlcSwKJiM0MzsJCQkJCSAgICAgICAmYW1wO3Bkc2MtJmd0O2Z3X2NvbXBvbmVudHMuaW5mb1tpXSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjaGFyICpmd19zbG90bmFtZXNbXSA9IHsKQEAgLTEwNSw4ICYjNDM7MjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0gewogCSYjMzQ7ZncubWFpbmZ3YiYjMzQ7LAogfTsKIAotaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAotCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0gewogCQkuZndfY29udHJvbC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfRldfQ09OVFJPTCwKQEAgLTE0MCwxMiAmIzQzOzI0MCw0MSBAQCBpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwKLQkJCQkJICAgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsCi0JCQkJCSAgICAgICBwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9pbmZvX2dldF92MShzdHJ1Y3QgZGV2bGluayAqZGwsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcGRzY19kbF9md19saXN0X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwkvKiBWZXJzaW9uIDE6IHJlcG9ydCBmdyBmcm9tIGRldl9pbmZvIChydW5uaW5nIG9ubHkpICovCiYjNDM7CXJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLCBwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7CiYjNDM7CWNoYXIgYnVmWzMyXTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKHBkc2MtJmd0O2Rldl9pZGVudC52ZXJzaW9uICZndDs9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikgewomIzQzOwkJZXJyID0gcGRzY19kbF9jb21wb25lbnRfaW5mb19nZXQoZGwsIHJlcSwgZXh0YWNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVyciA9IHBkc2NfZGxfaW5mb19nZXRfdjEoZGwsIHJlcSwgZXh0YWNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7MHgleCYjMzQ7LCBwZHNjLSZndDtkZXZfaW5mby5hc2ljX3R5cGUpOwogCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsCiAJCQkJCSAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYwppbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYwpAQCAtMSw2ICYjNDM7MSw5IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogLyogQ29weXJpZ2h0KGMpIDIwMjMgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGxkbWZ3LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7Y29yZS5oJiMzNDsKIAogLyogVGhlIHdvcnN0IGNhc2Ugd2FpdCBmb3IgdGhlIGluc3RhbGwgYWN0aXZpdHkgaXMgYWJvdXQgMjUgbWludXRlcyB3aGVuCkBAIC0xNCw2ICYjNDM7MTcsNTggQEAKIC8qIE51bWJlciBvZiBwZXJpb2RpYyBsb2cgdXBkYXRlcyBkdXJpbmcgZncgZmlsZSBkb3dubG9hZCAqLwogI2RlZmluZSBQRFNDX0ZXX0lOVEVSVkFMX0ZSQUNUSU9OCTMyCiAKJiM0MzsjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWAkJJiMzNDtmdy4mIzM0OwomIzQzOyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTiBcCiYjNDM7CShzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSAmIzQzOyBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4pCiYjNDM7CiYjNDM7LyogRHJpdmVyLWRlZmluZWQgY29tcG9uZW50IHR5cGUgdG8gbmFtZSBtYXBwaW5nLgomIzQzOyAqIFBEU19DT1JFX0ZXX1RZUEVfTUFJTiBpcyBOVUxMIC0gaGFuZGxlZCBzcGVjaWFsbHkgYXMgJiMzNDtmdyYjMzQ7IHdpdGhvdXQgcHJlZml4LgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGRzY19md190eXBlX25hbWVzW10gPSB7CiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9CT09UXSAgICAgID0gJiMzNDtib290bG9hZGVyJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX0NQTERdICAgICAgPSAmIzM0O2NwbGQmIzM0OywKJiM0MzsJW1BEU19DT1JFX0ZXX1RZUEVfU0VDVVJFXSAgICA9ICYjMzQ7c2VjdXJlJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX0ZQR0FdICAgICAgPSAmIzM0O2ZwZ2EmIzM0OywKJiM0MzsJW1BEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU5dICA9ICYjMzQ7c3VjJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UXSAgPSAmIzM0O3N1Yy5ib290bG9hZGVyJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX1VCT09UXSAgICAgPSAmIzM0O3Vib290JiMzNDssCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKQomIzQzO3sKJiM0MzsJaWYgKHR5cGUgJmx0OyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcykgJmFtcDsmYW1wOyBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pCiYjNDM7CQlyZXR1cm4gcGRzY19md190eXBlX25hbWVzW3R5cGVdOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CS8qIFBhaXJzIHdpdGggUkVBRF9PTkNFIGluIHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KCkgKi8KJiM0MzsJV1JJVEVfT05DRShwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU4IHBkc2NfbmFtZV90b19md190eXBlKGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzaXplX3QgcHJlZml4X2xlbjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CS8qICYjMzQ7ZncmIzM0OyB3aXRob3V0IHN1ZmZpeCBtYXBzIHRvIG1haW4gZmlybXdhcmUgKi8KJiM0MzsJaWYgKCFzdHJjbXAobmFtZSwgJiMzNDtmdyYjMzQ7KSkKJiM0MzsJCXJldHVybiBQRFNfQ09SRV9GV19UWVBFX01BSU47CiYjNDM7CiYjNDM7CXByZWZpeF9sZW4gPSBzdHJfaGFzX3ByZWZpeChuYW1lLCBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgpOwomIzQzOwlpZiAocHJlZml4X2xlbikKJiM0MzsJCW5hbWUgJiM0Mzs9IHByZWZpeF9sZW47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocGRzY19md190eXBlX25hbWVzW2ldICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhc3RyY21wKG5hbWUsIHBkc2NfZndfdHlwZV9uYW1lc1tpXSkpCiYjNDM7CQkJcmV0dXJuIGk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBwZHNjX2RldmNtZF9md19kb3dubG9hZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLAogCQkJCQkgIHUzMiBvZmZzZXQsIHUzMiBsZW5ndGgpCiB7CkBAIC0yMyw3ICYjNDM7NzgsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsCiAJCS5md19kb3dubG9hZC5hZGRyID0gY3B1X3RvX2xlNjQoYWRkciksCiAJCS5md19kb3dubG9hZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpLAogCX07Ci0JdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcDsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwogCiAJcmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiB9CkBAIC05NSw5ICYjNDM7MTUwLDEyIEBAIHN0YXRpYyBpbnQgcGRzY19md19zdGF0dXNfbG9uZ193YWl0KHN0cnVjdCBwZHNjICpwZHNjLAogCXJldHVybiBlcnI7CiB9CiAKLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKLQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7c3RhdGljIGludAomIzQzO3Bkc2NfbGVnYWN5X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwYXJhbXMtJmd0O2Z3OwogCXUzMiBidWZfc3osIGNvcHlfc3osIG9mZnNldDsKIAlzdHJ1Y3QgZGV2bGluayAqZGw7CiAJaW50IG5leHRfaW50ZXJ2YWw7CkBAIC0xMDUsNiAmIzQzOzE2MywxMiBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsCiAJaW50IGVyciA9IDA7CiAJaW50IGZ3X3Nsb3Q7CiAKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7Y29tcG9uZW50KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0NvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWRldl9pbmZvKHBkc2MtJmd0O2RldiwgJiMzNDtJbnN0YWxsaW5nIGZpcm13YXJlXG4mIzM0Oyk7CiAKIAlpZiAoIXBkc2MtJmd0O2NtZF9yZWdzKQpAQCAtMTk1LDMgJiM0MzsyNTksNzI5IEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKIAkJCQkJCSAgIE5VTEwsIDAsIDApOwogCXJldHVybiBlcnI7CiB9CiYjNDM7CiYjNDM7c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgewomIzQzOwl1MTYgY29tcG9uZW50X2lkOwomIzQzOwlib29sIHNraXA7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwZHNfY29yZV9md3VfcHJpdiB7CiYjNDM7CXN0cnVjdCBwbGRtZncgY29udGV4dDsKJiM0MzsJc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zOwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGNvbXBvbmVudHM7CiYjNDM7CWJvb2wgY29tcG9uZW50X2ZvdW5kOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGRzY19mcmVlX2Z3dV9wcml2KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdiwgKnRtcDsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbXBvbmVudF9wcml2LCB0bXAsICZhbXA7cHJpdi0mZ3Q7Y29tcG9uZW50cywKJiM0MzsJCQkJIGxpc3RfZW50cnkpIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7Y29tcG9uZW50X3ByaXYtJmd0O2xpc3RfZW50cnkpOwomIzQzOwkJa2ZyZWUoY29tcG9uZW50X3ByaXYpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2Moc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBkZXNjX3R5cGUsCiYjNDM7CQkJCQkgdTE2IGRlc2Nfc2l6ZSwgY29uc3QgdTggKmRlc2NfZGF0YSwKJiM0MzsJCQkJCSB1OCAqbWF0Y2gpCiYjNDM7ewomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsCiYjNDM7CQkubWF0Y2hfcmVjb3JkX2Rlc2MudmVyID0gMSwKJiM0MzsJCS5tYXRjaF9yZWNvcmRfZGVzYy50eXBlID0gY3B1X3RvX2xlMTYoZGVzY190eXBlKSwKJiM0MzsJCS5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSwKJiM0MzsJfTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgJmFtcDtjbWQsIGRlc2NfZGF0YSwgZGVzY19zaXplLAomIzQzOwkJCQkgICAgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7CSptYXRjaCA9IGNvbXAubWF0Y2hfcmVjb3JkX2Rlc2MubWF0Y2g7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGxkbWZ3X3JlY29yZCAqcmVjb3JkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpOwomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtJmd0O3Bkc2M7CiYjNDM7CXN0cnVjdCBwbGRtZndfZGVzY190bHYgKmRlc2M7CiYjNDM7CiYjNDM7CWlmICghcGxkbWZ3X29wX3BjaV9tYXRjaF9yZWNvcmQoY29udGV4dCwgcmVjb3JkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmYW1wO3JlY29yZC0mZ3Q7ZGVzY3MsIGVudHJ5KSB7CiYjNDM7CQl1OCBtYXRjaDsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKGRlc2MtJmd0O3R5cGUpIHsKJiM0MzsJCS8qIHNraXAgdHlwZXMgY2hlY2tlZCBpbiBwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZCAqLwomIzQzOwkJY2FzZSBQTERNX0RFU0NfSURfUENJX1ZFTkRPUl9JRDoKJiM0MzsJCWNhc2UgUExETV9ERVNDX0lEX1BDSV9ERVZJQ0VfSUQ6CiYjNDM7CQljYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCVkVORE9SX0lEOgomIzQzOwkJY2FzZSBQTERNX0RFU0NfSURfUENJX1NVQkRFVl9JRDoKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghZGVzYy0mZ3Q7c2l6ZSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQllcnIgPSBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhwZHNjLCBkZXNjLSZndDt0eXBlLAomIzQzOwkJCQkJCSAgICBkZXNjLSZndDtzaXplLCBkZXNjLSZndDtkYXRhLAomIzQzOwkJCQkJCSAgICAmYW1wO21hdGNoKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlkZXZfZXJyKHBkc2MtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDttYXRjaF9yZWNvcmRfZGVzYyBmYWlsZWQgdHlwZTogMHglMDR4IHNpemU6ICV1LCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCQlkZXNjLSZndDt0eXBlLCBkZXNjLSZndDtzaXplLCBlcnIpOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJCS8qIGFsbCByZWNvcmQgZGVzY3JpcHRvcnMgbXVzdCBtYXRjaCAqLwomIzQzOwkJaWYgKCFtYXRjaCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLAomIzQzOwkJCQkJIHUxNiBsZW5ndGgsIHUxNiBvZmZzZXQsIHUxNiB0b3RhbF9sZW4pCiYjNDM7ewomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLm9wY29kZSA9IFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBLAomIzQzOwkJLnNlbmRfcGtnX2RhdGEudmVyID0gMSwKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChhZGRyKSwKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYobGVuZ3RoKSwKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLm9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldCksCiYjNDM7CQkuc2VuZF9wa2dfZGF0YS50b3RhbF9sZW4gPSBjcHVfdG9fbGUxNih0b3RhbF9sZW4pLAomIzQzOwl9OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiYjNDM7CiYjNDM7CXJldHVybiBwZHNjX2RldmNtZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19zZW5kX3BhY2thZ2VfZGF0YShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LCBjb25zdCB1OCAqZGF0YSwKJiM0MzsJCQkJICB1MTYgbGVuZ3RoKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpOwomIzQzOwlzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi0mZ3Q7cGRzYzsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfYWRkcjsKJiM0MzsJdTggKnBhY2thZ2VfZGF0YTsKJiM0MzsJdTMyIG9mZnNldDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFsZW5ndGgpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRlZmVycmVkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBhY2thZ2VfZGF0YSA9IGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwYWNrYWdlX2RhdGEpIHsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGRtYV9tYXAgcGFja2FnZV9kYXRhIGxlbmd0aCAweCV4XG4mIzM0OywKJiM0MzsJCQlsZW5ndGgpOwomIzQzOwkJa2ZyZWUocGFja2FnZV9kYXRhKTsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0ICZsdDsgbGVuZ3RoOyBvZmZzZXQgJiM0Mzs9IFBEU19QQUdFX1NJWkUpIHsKJiM0MzsJCXUzMiBjb3B5X3N6OwomIzQzOwomIzQzOwkJY29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSwgbGVuZ3RoIC0gb2Zmc2V0KTsKJiM0MzsJCWVyciA9IHBkc2NfZGV2Y21kX3NlbmRfcGFja2FnZV9kYXRhKHBkc2MsIGRtYV9hZGRyICYjNDM7IG9mZnNldCwKJiM0MzsJCQkJCQkgICAgY29weV9zeiwgb2Zmc2V0LCBsZW5ndGgpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChwcml2LSZndDtleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O0ZhaWxlZCB0byBzZW5kIHBhY2thZ2UgZGF0YSYjMzQ7KTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHsKJiM0MzsJCXBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsCiYjNDM7CQkJCSAgICAgIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CWtmcmVlKHBhY2thZ2VfZGF0YSk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHBkc2MtJmd0O2Z3X2NvbXBvbmVudHMuaW5mb1tpXS5jb21wb25lbnRfdHlwZSA9PSB0eXBlKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcGRzY19jb21wb25lbnRfaWRfbWF0Y2hlc190eXBlKHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCQkJICAgdTggY29tcG9uZW50X2lkLCB1OCB0eXBlKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID0KJiM0MzsJCQkmYW1wO3Bkc2MtJmd0O2Z3X2NvbXBvbmVudHMuaW5mb1tpXTsKJiM0MzsKJiM0MzsJCWlmIChpbmZvLSZndDtpZGVudGlmaWVyID09IGNvbXBvbmVudF9pZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaW5mby0mZ3Q7Y29tcG9uZW50X3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9CiYjNDM7CQkJJmFtcDtwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV07CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7aWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQpCiYjNDM7CQkJcmV0dXJuIGluZm8tJmd0O2NvbXBvbmVudF90eXBlOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBwZHNjX3NraXBfY29tcG9uZW50KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiwKJiM0MzsJCQkJdTE2IGNvbXBvbmVudF9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShjb21wb25lbnRfcHJpdiwgJmFtcDtwcml2LSZndDtjb21wb25lbnRzLCBsaXN0X2VudHJ5KSB7CiYjNDM7CQlpZiAoY29tcG9uZW50X3ByaXYtJmd0O2NvbXBvbmVudF9pZCA9PSBjb21wb25lbnRfaWQpCiYjNDM7CQkJcmV0dXJuIGNvbXBvbmVudF9wcml2LSZndDtza2lwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX3NlbmRfY29tcG9uZW50X3RhYmxlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsCiYjNDM7CQkJCSAgICAgc3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudCwKJiM0MzsJCQkJICAgICB1OCB0cmFuc2Zlcl9mbGFnKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAqY29tcG9uZW50X3RibDsKJiM0MzsJc3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LSZndDtkZXY7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTsKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LSZndDtwZHNjOwomIzQzOwlib29sIHNraXBfY29tcG9uZW50ID0gZmFsc2U7CiYjNDM7CXU4IHJlcXVlc3RlZF90eXBlID0gMDsKJiM0MzsJdTE2IGJ1Zl9zeiwgdGJsX3N6OwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJZGV2X2RiZyhkZXYsCiYjNDM7CQkmIzM0O2NvbXBvbmVudCBuYW1lICVzIGNsYXNzaWZpY2F0aW9uICV1IGlkICV1IGFjdGl2YXRpb25fbWV0aG9kICV1IHZlcl9sZW4gJWQgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXUgdHJhbnNmZXJfZmxhZyAweCUwMnhcbiYjMzQ7LAomIzQzOwkJcHJpdi0mZ3Q7cGFyYW1zLSZndDtjb21wb25lbnQsIGNvbXBvbmVudC0mZ3Q7Y2xhc3NpZmljYXRpb24sCiYjNDM7CQljb21wb25lbnQtJmd0O2lkZW50aWZpZXIsIGNvbXBvbmVudC0mZ3Q7YWN0aXZhdGlvbl9tZXRob2QsCiYjNDM7CQljb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuLCBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuLAomIzQzOwkJY29tcG9uZW50LSZndDt2ZXJzaW9uX3N0cmluZywgY29tcG9uZW50LSZndDtpbmRleCwKJiM0MzsJCWNvbXBvbmVudC0mZ3Q7Y29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpOwomIzQzOwomIzQzOwljb21wb25lbnRfcHJpdiA9IGt6YWxsb2Nfb2JqKCpjb21wb25lbnRfcHJpdiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY29tcG9uZW50X3ByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3BhcmFtcy0mZ3Q7Y29tcG9uZW50KSB7CiYjNDM7CQlyZXF1ZXN0ZWRfdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHByaXYtJmd0O3BhcmFtcy0mZ3Q7Y29tcG9uZW50KTsKJiM0MzsJCWlmIChjb21wb25lbnQtJmd0O2lkZW50aWZpZXIgJmd0OyBVOF9NQVggfHwKJiM0MzsJCSAgICAhcGRzY19jb21wb25lbnRfaWRfbWF0Y2hlc190eXBlKHBkc2MsCiYjNDM7CQkJCQkJICAgIGNvbXBvbmVudC0mZ3Q7aWRlbnRpZmllciwKJiM0MzsJCQkJCQkgICAgcmVxdWVzdGVkX3R5cGUpKSB7CiYjNDM7CQkJc2tpcF9jb21wb25lbnQgPSB0cnVlOwomIzQzOwkJCWdvdG8gYWRkX2NvbXBvbmVudF9wcml2OwomIzQzOwkJfQomIzQzOwkJcHJpdi0mZ3Q7Y29tcG9uZW50X2ZvdW5kID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlidWZfc3ogPSBzaXplb2YocGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEpOwomIzQzOwl0Ymxfc3ogPSBzdHJ1Y3Rfc2l6ZShjb21wb25lbnRfdGJsLCB2ZXJzaW9uX3N0ciwKJiM0MzsJCQkgICAgIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9sZW4pOwomIzQzOwlpZiAodGJsX3N6ICZndDsgYnVmX3N6KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXG4mIzM0OywKJiM0MzsJCQl0Ymxfc3osIGJ1Zl9zeik7CiYjNDM7CQllcnIgPSAtRU5PU1BDOwomIzQzOwkJZ290byBmcmVlX2NvbXBvbmVudF9wcml2OwomIzQzOwl9CiYjNDM7CWNvbXBvbmVudF90YmwgPSBremFsbG9jKHRibF9zeiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY29tcG9uZW50X3RibCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjsKJiM0MzsJfQomIzQzOwomIzQzOwljb21wb25lbnRfdGJsLSZndDtjb21wYXJpc29uX3N0YW1wID0KJiM0MzsJCWNwdV90b19sZTMyKGNvbXBvbmVudC0mZ3Q7Y29tcGFyaXNvbl9zdGFtcCk7CiYjNDM7CWNvbXBvbmVudF90YmwtJmd0O2NsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtjbGFzc2lmaWNhdGlvbik7CiYjNDM7CWNvbXBvbmVudF90YmwtJmd0O2lkZW50aWZpZXIgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtJmd0O2lkZW50aWZpZXIpOwomIzQzOwljb21wb25lbnRfdGJsLSZndDt0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZzsKJiM0MzsJY29tcG9uZW50X3RibC0mZ3Q7dmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl90eXBlOwomIzQzOwljb21wb25lbnRfdGJsLSZndDt2ZXJzaW9uX3N0cl9sZW4gPSBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuOwomIzQzOwltZW1jcHkoY29tcG9uZW50X3RibC0mZ3Q7dmVyc2lvbl9zdHIsIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9zdHJpbmcsCiYjNDM7CSAgICAgICBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuKTsKJiM0MzsKJiM0MzsJY21kLnNlbmRfY29tcG9uZW50X3RibC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMOwomIzQzOwljbWQuc2VuZF9jb21wb25lbnRfdGJsLnZlciA9IDE7CiYjNDM7CWNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDsKJiM0MzsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsICZhbXA7Y21kLCBjb21wb25lbnRfdGJsLCB0Ymxfc3osCiYjNDM7CQkJCSAgICAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0MzsJa2ZyZWUoY29tcG9uZW50X3RibCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCBzZW5kaW5nIGNvbXBvbmVudCB0YWJsZTogJXBlXG4mIzM0OywKJiM0MzsJCQlFUlJfUFRSKGVycikpOwomIzQzOwkJZ290byBmcmVlX2NvbXBvbmVudF9wcml2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTsKJiM0MzsKJiM0MzthZGRfY29tcG9uZW50X3ByaXY6CiYjNDM7CWNvbXBvbmVudF9wcml2LSZndDtza2lwID0gc2tpcF9jb21wb25lbnQ7CiYjNDM7CWNvbXBvbmVudF9wcml2LSZndDtjb21wb25lbnRfaWQgPSBjb21wb25lbnQtJmd0O2lkZW50aWZpZXI7CiYjNDM7CWxpc3RfYWRkKCZhbXA7Y29tcG9uZW50X3ByaXYtJmd0O2xpc3RfZW50cnksICZhbXA7cHJpdi0mZ3Q7Y29tcG9uZW50cyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2ZyZWVfY29tcG9uZW50X3ByaXY6CiYjNDM7CWtmcmVlKGNvbXBvbmVudF9wcml2KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sCiYjNDM7CQkuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9IDEsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvICpsaXN0X2luZm87CiYjNDM7CXN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfYWRkcjsKJiM0MzsJdTggbnVtX2NvbXBvbmVudHM7CiYjNDM7CWludCBlcnIsIGk7CiYjNDM7CiYjNDM7CWRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkKTsKJiM0MzsJaWYgKCFkZWZlcnJlZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlsaXN0X2luZm8gPSBremFsbG9jKFBEU19QQUdFX1NJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWxpc3RfaW5mbykgewomIzQzOwkJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwZHNjLSZndDtkZXYsIGxpc3RfaW5mbywgUERTX1BBR0VfU0laRSwKJiM0MzsJCQkJICBETUFfRlJPTV9ERVZJQ0UpOwomIzQzOwlpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy0mZ3Q7ZGV2LCBkbWFfYWRkcikpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7RmFpbGVkIHRvIGRtYV9tYXAgY29tcG9uZW50X2xpc3RfaW5mbyBsZW5ndGggJWRcbiYjMzQ7LAomIzQzOwkJCVBEU19QQUdFX1NJWkUpOwomIzQzOwkJa2ZyZWUobGlzdF9pbmZvKTsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNtZC5nZXRfY29tcG9uZW50X2luZm8uZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihQRFNfUEFHRV9TSVpFKTsKJiM0MzsJY21kLmdldF9jb21wb25lbnRfaW5mby5kYXRhX3BhID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpOwomIzQzOwomIzQzOwllcnIgPSBwZHNjX2RldmNtZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCAqIDIpOwomIzQzOwlpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHsKJiM0MzsJCXBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsIGxpc3RfaW5mbywKJiM0MzsJCQkJICAgICAgUERTX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwlkbWFfdW5tYXBfc2luZ2xlKHBkc2MtJmd0O2RldiwgZG1hX2FkZHIsIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9PSAwKSB7CiYjNDM7CQkvKiBEb24mIzM5O3Qgc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHZlcnNpb24gMCBoYXMKJiM0MzsJCSAqIGFsaWdubWVudCBpc3N1ZXMsIHNvIGdpdmUgYSBoaW50IHRvIHVzZXJzIHRvIHVwZGF0ZQomIzQzOwkJICogdGhlaXIgZmlybXdhcmUKJiM0MzsJCSAqLwomIzQzOwkJZGV2X3dhcm5fb25jZShwZHNjLSZndDtkZXYsCiYjNDM7CQkJICAgICAgJiMzNDtJbmNvbXBhdGlibGUgZ2V0X2NvbXBvbmVudF9pbmZvIHZlcnNpb24gJXUgcmVwb3J0ZWQgYnkgZmlybXdhcmVcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlcik7CiYjNDM7CQllcnIgPSAwOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtX2NvbXBvbmVudHMgPSBsaXN0X2luZm8tJmd0O251bV9jb21wb25lbnRzOwomIzQzOwlpZiAobnVtX2NvbXBvbmVudHMgJmd0OyBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzID0gbnVtX2NvbXBvbmVudHM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9CiYjNDM7CQkJJmFtcDtwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV07CiYjNDM7CiYjNDM7CQltZW1jcHkoaW5mbywgJmFtcDtsaXN0X2luZm8tJmd0O2luZm9baV0sIHNpemVvZigqaW5mbykpOwomIzQzOwkJaW5mby0mZ3Q7dmVyc2lvbltQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAtIDFdID0gMDsKJiM0MzsJCWluZm8tJmd0O25hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIC0gMV0gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrZnJlZShsaXN0X2luZm8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLAomIzQzOwkJCQkgICAgICB1MTYgaW5mb19zeiwgZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuZ3RoLAomIzQzOwkJCQkgICAgICB1MzIgb2Zmc2V0LCB1MTYgc2xvdF9pZCwKJiM0MzsJCQkJICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApCiYjNDM7ewomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5zZW5kX2NvbXBvbmVudC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQsCiYjNDM7CQkuc2VuZF9jb21wb25lbnQudmVyID0gMSwKJiM0MzsJCS5zZW5kX2NvbXBvbmVudC5vcGVyYXRpb24gPSBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVCwKJiM0MzsJCS5zZW5kX2NvbXBvbmVudC5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksCiYjNDM7CQkuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLAomIzQzOwkJLnNlbmRfY29tcG9uZW50Lm9mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCksCiYjNDM7CQkuc2VuZF9jb21wb25lbnQuc2xvdF9pZCA9IHNsb3RfaWQsCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDMwMCAqIEhaOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXN0YXJ0X3RpbWUgPSBqaWZmaWVzOwomIzQzOwllbmRfdGltZSA9IHN0YXJ0X3RpbWUgJiM0MzsgdGltZW91dDsKJiM0MzsJZG8gewomIzQzOwkJLyogcHJldmVudCBub2lzeS9iZW5pZ24gZGV2Y21kIGZhaWx1cmVzICovCiYjNDM7CQllcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2cocGRzYywgJmFtcDtjbWQsIGluZm8sIGluZm9fc3osCiYjNDM7CQkJCQkJICBjb21wLCA2MCk7CiYjNDM7CQlpZiAoZXJyICE9IC1FQUdBSU4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBpZiByZXF1aXJlZCwgc3Vic2VxdWVudCBjb21tYW5kcyBjaGVjayBzdGF0dXMgb2YKJiM0MzsJCSAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBjb21tYW5kLCB3aGljaCByZXR1cm5zCiYjNDM7CQkgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZywKJiM0MzsJCSAqIGVsc2Ugd2UgZ2V0IHRoZSBmaW5hbCBjb21tYW5kIHN0YXR1cy4KJiM0MzsJCSAqLwomIzQzOwkJY21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUzsKJiM0MzsJCW1zbGVlcCgyMCk7CiYjNDM7CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7CiYjNDM7CiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTiB8fCBlcnIgPT0gLUVUSU1FRE9VVCkKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O1BEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCB0aW1lZCBvdXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2ZsYXNoX2NvbXBvbmVudF9jaHVuayhzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLAomIzQzOwkJCQkgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LAomIzQzOwkJCQkgICAgICB1MzIgb2Zmc2V0LCB1OCBzbG90X2lkLAomIzQzOwkJCQkgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7CiYjNDM7CWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXU4ICpjb21wb25lbnRfZGF0YTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRlZmVycmVkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWNvbXBvbmVudF9kYXRhID0ga21lbWR1cChkYXRhLCBjb3B5X3N6LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFjb21wb25lbnRfZGF0YSkgewomIzQzOwkJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTsKJiM0MzsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwKJiM0MzsJCQkmIzM0O0ZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9kYXRhIGF0IG9mZnNldCAweCV4IGNvcHlfc3ogMHgleFxuJiMzNDssCiYjNDM7CQkJb2Zmc2V0LCBjb3B5X3N6KTsKJiM0MzsJCWtmcmVlKGNvbXBvbmVudF9kYXRhKTsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHBkc2MsIGluZm8sIGluZm9fc3osIGRtYV9hZGRyLAomIzQzOwkJCQkJIGNvcHlfc3osIG9mZnNldCwgc2xvdF9pZCwgY29tcCk7CiYjNDM7CWlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikgewomIzQzOwkJcGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkciwKJiM0MzsJCQkJICAgICAgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CWtmcmVlKGNvbXBvbmVudF9kYXRhKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2ZsYXNoX2NvbXBvbmVudChzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LAomIzQzOwkJCQlzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50KQomIzQzO3sKJiM0MzsJY2hhciBjb21wb25lbnRfbmFtZV9idWZbUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTl07CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqY29tcG9uZW50X2luZm87CiYjNDM7CWNvbnN0IGNoYXIgKmNvbXBvbmVudF9uYW1lID0gTlVMTDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtJmd0O3Bkc2M7CiYjNDM7CXUxNiBidWZfc3osIGluZm9fc3o7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkbDsKJiM0MzsJdTggY29tcG9uZW50X3R5cGU7CiYjNDM7CXUzMiB0b3RhbF9sZW47CiYjNDM7CXUzMiBvZmZzZXQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWNvbXBvbmVudF90eXBlID0gcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQocGRzYywKJiM0MzsJCQkJCQkgICAgICAgY29tcG9uZW50LSZndDtpZGVudGlmaWVyKTsKJiM0MzsJaWYgKGNvbXBvbmVudF90eXBlKSB7CiYjNDM7CQljb25zdCBjaGFyICp0eXBlX25hbWUgPSBwZHNjX2Z3X3R5cGVfdG9fbmFtZShjb21wb25lbnRfdHlwZSk7CiYjNDM7CiYjNDM7CQlpZiAoY29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7CiYjNDM7CQkJY29tcG9uZW50X25hbWUgPSAmIzM0O2Z3JiMzNDs7CiYjNDM7CQl9IGVsc2UgaWYgKHR5cGVfbmFtZSkgewomIzQzOwkJCXNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksCiYjNDM7CQkJCSAmIzM0OyVzJXMmIzM0OywgUERTQ19GV19DT01QT05FTlRfUFJFRklYLCB0eXBlX25hbWUpOwomIzQzOwkJCWNvbXBvbmVudF9uYW1lID0gY29tcG9uZW50X25hbWVfYnVmOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpOwomIzQzOwomIzQzOwlpZiAocGRzY19za2lwX2NvbXBvbmVudChwcml2LCBjb21wb25lbnQtJmd0O2lkZW50aWZpZXIpKSB7CiYjNDM7CQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCAmIzM0O1NraXBwZWQmIzM0OywKJiM0MzsJCQkJCQkgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwl0b3RhbF9sZW4gPSBjb21wb25lbnQtJmd0O2NvbXBvbmVudF9zaXplOwomIzQzOwlkZXZfZGJnKGRldiwKJiM0MzsJCSYjMzQ7Y29tcG9uZW50IG5hbWUgJXMgY2xhc3MgJXUgaWQgJXUgYWN0X21ldGggJXUgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXVcbiYjMzQ7LAomIzQzOwkJY29tcG9uZW50X25hbWUgPzogJiMzNDsodW5rbm93bikmIzM0OywgY29tcG9uZW50LSZndDtjbGFzc2lmaWNhdGlvbiwKJiM0MzsJCWNvbXBvbmVudC0mZ3Q7aWRlbnRpZmllciwgY29tcG9uZW50LSZndDthY3RpdmF0aW9uX21ldGhvZCwKJiM0MzsJCWNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9sZW4sIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9zdHJpbmcsCiYjNDM7CQljb21wb25lbnQtJmd0O2luZGV4LCBjb21wb25lbnQtJmd0O2NvbXBvbmVudF9zaXplKTsKJiM0MzsKJiM0MzsJYnVmX3N6ID0gc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKTsKJiM0MzsJaW5mb19zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF9pbmZvLCB2ZXJzaW9uX3N0ciwKJiM0MzsJCQkgICAgICBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuKTsKJiM0MzsJaWYgKGluZm9fc3ogJmd0OyBidWZfc3opIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2NvbXBvbmVudF9pbmZvIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXG4mIzM0OywKJiM0MzsJCQlpbmZvX3N6LCBidWZfc3opOwomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CX0KJiM0MzsJY29tcG9uZW50X2luZm8gPSB2emFsbG9jKGluZm9fc3opOwomIzQzOwlpZiAoIWNvbXBvbmVudF9pbmZvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtjb21wYXJpc29uX3N0YW1wID0KJiM0MzsJCWNwdV90b19sZTMyKGNvbXBvbmVudC0mZ3Q7Y29tcGFyaXNvbl9zdGFtcCk7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtpbWFnZV9zaXplID0gY3B1X3RvX2xlMzIodG90YWxfbGVuKTsKJiM0MzsJY29tcG9uZW50X2luZm8tJmd0O2NsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtjbGFzc2lmaWNhdGlvbik7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtpZGVudGlmaWVyKTsKJiM0MzsJY29tcG9uZW50X2luZm8tJmd0O29wdGlvbnMgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtJmd0O29wdGlvbnMpOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7dmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl90eXBlOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7dmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbjsKJiM0MzsJbWVtY3B5KGNvbXBvbmVudF9pbmZvLSZndDt2ZXJzaW9uX3N0ciwgY29tcG9uZW50LSZndDt2ZXJzaW9uX3N0cmluZywKJiM0MzsJICAgICAgIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9sZW4pOwomIzQzOwomIzQzOwlvZmZzZXQgPSAwOwomIzQzOwl3aGlsZSAob2Zmc2V0ICZsdDsgdG90YWxfbGVuKSB7CiYjNDM7CQl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiYjNDM7CQl1MTYgY29weV9zejsKJiM0MzsKJiM0MzsJCWNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsCiYjNDM7CQkJCXRvdGFsX2xlbiAtIG9mZnNldCk7CiYjNDM7CiYjNDM7CQllcnIgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudF9jaHVuayhwZHNjLCBkZXYsIGNvbXBvbmVudF9pbmZvLAomIzQzOwkJCQkJCSBpbmZvX3N6LAomIzQzOwkJCQkJCSBjb21wb25lbnQtJmd0O2NvbXBvbmVudF9kYXRhICYjNDM7CiYjNDM7CQkJCQkJIG9mZnNldCwgY29weV9zeiwgb2Zmc2V0LAomIzQzOwkJCQkJCSBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQsCiYjNDM7CQkJCQkJICZhbXA7Y29tcCk7CiYjNDM7CQlpZiAoZXJyICZhbXA7JmFtcDsKJiM0MzsJCSAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT0KJiM0MzsJCSAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCB8fAomIzQzOwkJICAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09CiYjNDM7CQkgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUikpIHsKJiM0MzsJCQllcnIgPSAwOwomIzQzOwkJCWRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsICYjMzQ7U2tpcHBlZCYjMzQ7LAomIzQzOwkJCQkJCQkgICBjb21wb25lbnRfbmFtZSwKJiM0MzsJCQkJCQkJICAgMCwgMCk7CiYjNDM7CQkJZ290byBza2lwX2NvbXBvbmVudDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QocHJpdi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtGYWlsZWQgdG8gZmxhc2ggY29tcG9uZW50JiMzNDspOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9mZnNldCAmIzQzOz0gY29weV9zejsKJiM0MzsJCWRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsCiYjNDM7CQkJCQkJICAgJiMzNDtFcmFzaW5nL0ZsYXNoaW5nJiMzNDssCiYjNDM7CQkJCQkJICAgY29tcG9uZW50X25hbWUsIG9mZnNldCwKJiM0MzsJCQkJCQkgICB0b3RhbF9sZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZmcmVlKGNvbXBvbmVudF9pbmZvKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX291dDoKJiM0MzsJZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwKJiM0MzsJCQkJCSAgICYjMzQ7RXJhc2luZy9GbGFzaGluZyBDb21wb25lbnQgRmFpbGVkJiMzNDssCiYjNDM7CQkJCQkgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7CiYjNDM7c2tpcF9jb21wb25lbnQ6CiYjNDM7CXZmcmVlKGNvbXBvbmVudF9pbmZvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSwKJiM0MzsJCS5maW5hbGl6ZV91cGRhdGUudmVyID0gMSwKJiM0MzsJfTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwomIzQzOwlyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7CiYjNDM7CWNvbnN0IGNoYXIgKmNvbXBvbmVudF9uYW1lID0gcHJpdi0mZ3Q7cGFyYW1zLSZndDtjb21wb25lbnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSwgZW5kX3RpbWU7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtJmd0O2RldjsKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LSZndDtwZHNjOwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpOwomIzQzOwomIzQzOwlzdGFydF90aW1lID0gamlmZmllczsKJiM0MzsJZW5kX3RpbWUgPSBzdGFydF90aW1lICYjNDM7IChQRFNDX0ZXX0lOU1RBTExfVElNRU9VVCAqIEhaKTsKJiM0MzsJZG8gewomIzQzOwkJZXJyID0gcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHBkc2MpOwomIzQzOwkJaWYgKGVyciAhPSAtRUFHQUlOKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZGV2X2RiZyhkZXYsICYjMzQ7cmV0cnlpbmcgZmluYWxpemVfdXBkYXRlOiAlcGVcbiYjMzQ7LCBFUlJfUFRSKGVycikpOwomIzQzOwkJbXNsZWVwKDIwKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpICZhbXA7JmFtcDsgZXJyID09IC1FQUdBSU4pOwomIzQzOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCAmIzM0O0ZpbmFsaXplIFVwZGF0ZSBGYWlsZWQmIzM0OywKJiM0MzsJCQkJCQkgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QocHJpdi0mZ3Q7ZXh0YWNrLCAmIzM0O0ZpbmFsaXplIHVwZGF0ZSBmYWlsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsICYjMzQ7RmluYWxpemVkIFVwZGF0ZSYjMzQ7LAomIzQzOwkJCQkJICAgY29tcG9uZW50X25hbWUsIDAsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwbGRtZndfb3BzIHBkc2NfcGxkbWZ3X29wcyA9IHsKJiM0MzsJLm1hdGNoX3JlY29yZCA9IHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzLAomIzQzOwkuc2VuZF9wYWNrYWdlX2RhdGEgPSBwZHNjX3NlbmRfcGFja2FnZV9kYXRhLAomIzQzOwkuc2VuZF9jb21wb25lbnRfdGFibGUgPSBwZHNjX3NlbmRfY29tcG9uZW50X3RhYmxlLAomIzQzOwkuZmxhc2hfY29tcG9uZW50ID0gcGRzY19mbGFzaF9jb21wb25lbnQsCiYjNDM7CS5maW5hbGl6ZV91cGRhdGUgPSBwZHNjX2ZpbmFsaXplX3VwZGF0ZQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCQkgICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiBwcml2ID0ge307CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cykgewomIzQzOwkJZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7RmFpbGVkIHRvIGdldCBjb21wb25lbnQgaW5mbyYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwYXJhbXMtJmd0O2NvbXBvbmVudCkgewomIzQzOwkJdTggdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHBhcmFtcy0mZ3Q7Y29tcG9uZW50KTsKJiM0MzsKJiM0MzsJCWlmICghdHlwZSB8fCAhcGRzY19jb21wb25lbnRfdHlwZV9leGlzdHMocGRzYywgdHlwZSkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O1Vua25vd24gY29tcG9uZW50IG5hbWUmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtwcml2LmNvbXBvbmVudHMpOwomIzQzOwlwcml2LmNvbnRleHQub3BzID0gJmFtcDtwZHNjX3BsZG1md19vcHM7CiYjNDM7CXByaXYuY29udGV4dC5kZXYgPSBwZHNjLSZndDtkZXY7CiYjNDM7CXByaXYucGFyYW1zID0gcGFyYW1zOwomIzQzOwlwcml2LmV4dGFjayA9IGV4dGFjazsKJiM0MzsJcHJpdi5wZHNjID0gcGRzYzsKJiM0MzsKJiM0MzsJZXJyID0gcGxkbWZ3X2ZsYXNoX2ltYWdlKCZhbXA7cHJpdi5jb250ZXh0LCBmdyk7CiYjNDM7CWlmICghZXJyICZhbXA7JmFtcDsgcGFyYW1zLSZndDtjb21wb25lbnQgJmFtcDsmYW1wOyAhcHJpdi5jb21wb25lbnRfZm91bmQpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7UmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlJiMzNDspOwomIzQzOwkJZXJyID0gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwlwZHNjX2ZyZWVfZnd1X3ByaXYoJmFtcDtwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCSBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChwZHNjLSZndDtkZXZfaWRlbnQudmVyc2lvbiAmZ3Q7PSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgJmFtcDsmYW1wOwomIzQzOwkgICAgcGRzYy0mZ3Q7ZGV2X2lkZW50LmNhcGFiaWxpdGllcyAmYW1wOwomIzQzOwkJY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSkpCiYjNDM7CQllcnIgPSBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrLAomIzQzOwkJCQkJCXBhcmFtcy0mZ3Q7ZncpOwomIzQzOwllbHNlCiYjNDM7CQllcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spOwomIzQzOwomIzQzOwkvKiBJbnZhbGlkYXRlIGNhY2hlZCBjb21wb25lbnQgaW5mbyBzbyBuZXh0IGluZm9fZ2V0IHJlZnJlc2hlcyAqLwomIzQzOwlwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYwppbmRleCA4ZDk0YTRkNzAzOTVlLi41ZTFiMDc4NTAxNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMKQEAgLTIxLDYgJiM0MzsyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZHNjX2lkX3RhYmxlW10gPSB7CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBkc2NfaWRfdGFibGUpOwogCiYjNDM7c3RhdGljIHZvaWQgcGRzY19zdG9wX2hlYWx0aF90aHJlYWQoc3RydWN0IHBkc2MgKnBkc2MpOwomIzQzOwogc3RhdGljIHZvaWQgcGRzY193ZHRpbWVyX2NiKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogewogCXN0cnVjdCBwZHNjICpwZHNjID0gdGltZXJfY29udGFpbmVyX29mKHBkc2MsIHQsIHdkdGltZXIpOwpAQCAtMzE1LDYgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IHBkc2NfaW5pdF9wZihzdHJ1Y3QgcGRzYyAqcGRzYykKIAkJZGVzdHJveV93b3JrcXVldWUocGRzYy0mZ3Q7d3EpOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwZHNjLSZndDtjb25maWdfbG9jayk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO3Bkc2MtJmd0O2RldmNtZF9sb2NrKTsKJiM0MzsJcGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTsKIAlwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZHNjLSZndDtwZGV2KTsKIGVycl9vdXRfdW5tYXBfYmFyczoKIAlwZHNjX3VubWFwX2JhcnMocGRzYyk7CkBAIC0zNTMsNiAmIzQzOzM1Niw4IEBAIHN0YXRpYyBpbnQgcGRzY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAlwZHNjLSZndDtwZGV2ID0gcGRldjsKIAlwZHNjLSZndDtkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKIAlzZXRfYml0KFBEU0NfU19JTklUSU5HX0RSSVZFUiwgJmFtcDtwZHNjLSZndDtzdGF0ZSk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xpc3QpOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9sb2NrKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgcGRzYyk7CiAJcGRzY19kZWJ1Z2ZzX2FkZF9kZXYocGRzYyk7CiAKQEAgLTQ1OCw2ICYjNDM7NDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJfQogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpOwogCiAJaWRhX2ZyZWUoJmFtcDtwZHNjX2lkYSwgcGRzYy0mZ3Q7dWlkKTsKIAlwZHNjX2RlYnVnZnNfZGVsX2RldihwZHNjKTsKQEAgLTUwNSw2ICYjNDM7NTExLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZXNldF9wcmVwYXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJaWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKQogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CXBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmggYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oCmluZGV4IDE3YTg3YzFhNTVkN2MuLjkwMWUxZTYyOGY4OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaApAQCAtNDAsNiAmIzQzOzQwLDE0IEBAIGVudW0gcGRzX2NvcmVfY21kX29wY29kZSB7CiAJUERTX0NPUkVfQ01EX0ZXX0RPV05MT0FECT0gNCwKIAlQRFNfQ09SRV9DTURfRldfQ09OVFJPTAkJPSA1LAogCiYjNDM7CVBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8JPSA2LAomIzQzOwlQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQQk9IDcsCiYjNDM7CVBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkwJPSA4LAomIzQzOwlQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQJPSA5LAomIzQzOwlQRFNfQ09SRV9DTURfRklOQUxJWkVfVVBEQVRFCT0gMTAsCiYjNDM7CVBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQwk9IDExLAomIzQzOwlQRFNfQ09SRV9DTURfSE9TVF9NRU0JCT0gMTIsCiYjNDM7CiAJLyogU1IvSU9WIGNvbW1hbmRzICovCiAJUERTX0NPUkVfQ01EX1ZGX0dFVEFUVFIJCT0gNjAsCiAJUERTX0NPUkVfQ01EX1ZGX1NFVEFUVFIJCT0gNjEsCkBAIC0xMDAsNiAmIzQzOzEwOCwxNiBAQCBzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IHsKIAljaGFyICAgZHJpdmVyX3Zlcl9zdHJbMzJdOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIGVudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgLSBEZXZpY2UgY2FwYWJpbGl0aWVzCiYjNDM7ICogQFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEU6IERldmljZSBvbmx5IHN1cHBvcnRzIEZXIHVwZGF0ZSB2aWEgUExETQomIzQzOyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZQomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgewomIzQzOwlQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFID0gQklUKDApLAomIzQzOwlQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNID0gQklUKDEpLAomIzQzO307CiYjNDM7CiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVgJMTYKIC8qKgogICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvbgpAQCAtMTE5LDYgJiM0MzsxMzcsMTEgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7CiAgKgkJICAgICAgdmFsdWUgaW4gdXNlY3MgdG8gZGV2aWNlIHVuaXRzIHVzaW5nOgogICoJCSAgICAgIGRldmljZSB1bml0cyA9IHVzZWNzICogbXVsdCAvIGRpdgogICogQHZpZl90eXBlczogICAgICAgIEhvdyBtYW55IG9mIGVhY2ggVklGIGRldmljZSB0eXBlIGlzIHN1cHBvcnRlZAomIzQzOyAqIEBtYXhfZndfc2xvdHM6ICAgICBOdW1iZXIgb2YgZmlybXdhcmUgY29tcG9uZW50cyByZXBvcnRlZCBieSBkZXZpY2UKJiM0MzsgKgkJICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiAmZ3Q7PSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIKJiM0MzsgKiBAcnN2ZDI6CSAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqIEBjYXBhYmlsaXRpZXM6ICAgICBEZXZpY2UgY2FwYWJpbGl0aWVzCiYjNDM7ICoJCSAgICAgIG9ubHkgc3VwcG9ydGVkIG9uIHZlcnNpb24gJmd0Oz0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yCiAgKi8KIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkgewogCXU4ICAgICB2ZXJzaW9uOwpAQCAtMTMxLDkgJiM0MzsxNTQsMTMgQEAgc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7CiAJX19sZTMyIGludHJfY29hbF9tdWx0OwogCV9fbGUzMiBpbnRyX2NvYWxfZGl2OwogCV9fbGUxNiB2aWZfdHlwZXNbUERTX0RFVl9UWVBFX01BWF07CiYjNDM7CV9fbGUxNiBtYXhfZndfc2xvdHM7CiYjNDM7CXU4ICAgICByc3ZkMls2XTsKJiM0MzsJX19sZTY0IGNhcGFiaWxpdGllczsKIH07CiAKICNkZWZpbmUgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xCTEKJiM0MzsjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMgkyCiAKIC8qKgogICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGlmeV9jbWQgLSBEcml2ZXIvZGV2aWNlIGlkZW50aWZ5IGNvbW1hbmQKQEAgLTI3NSwxMSAmIzQzOzMwMiwyMCBAQCBlbnVtIHBkc19jb3JlX2Z3X2NvbnRyb2xfb3BlciB7CiAJUERTX0NPUkVfRldfR0VUX0xJU1QgICAgICAgICAgICAgICA9IDcsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZW51bSBwZHNfY29yZV9md19zbG90IC0gRmlybXdhcmUgc2xvdCBpZGVudGlmaWVycwomIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQ6IExldCBmaXJtd2FyZSBzZWxlY3Qgc2xvdCBiYXNlZCBvbiBwYWNrYWdlIG1ldGFkYXRhCiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfQTogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEEKJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9COiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQgomIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX0dPTEQ6ICAgIEdvbGQvcmVjb3ZlcnkgZmlybXdhcmUgc2xvdAomIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX01BWDogICAgIFNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgbm8gc2xvdCByZXNvbHZlZAomIzQzOyAqLwogZW51bSBwZHNfY29yZV9md19zbG90IHsKIAlQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQgICAgPSAwLAogCVBEU19DT1JFX0ZXX1NMT1RfQQkgICAgPSAxLAogCVBEU19DT1JFX0ZXX1NMT1RfQiAgICAgICAgICA9IDIsCiAJUERTX0NPUkVfRldfU0xPVF9HT0xEICAgICAgID0gMywKJiM0MzsJUERTX0NPUkVfRldfU0xPVF9NQVggICAgICAgID0gMHhmZiwKIH07CiAKIC8qKgpAQCAtNDQ2LDYgJiM0Mzs0ODIsNDIzIEBAIHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NvbXAgewogCXU4CXN0YXR1czsKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBCiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHRvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIHRoZSBwYWNrYWdlIGRhdGEKJiM0MzsgKiBAb2Zmc2V0OiBPZmZzZXQgaW4gdGhlIHBhY2thZ2UgZGF0YSwgbm9uLXplcm8gaWYgbXVsdGlwbGUgY29tbWFuZHMgYXJlCiYjNDM7ICoJICAgIG5lZWRlZCBmb3Igc2VuZGluZyB0aGUgcGFja2FnZSBkYXRhCiYjNDM7ICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYQomIzQzOyAqIEBkYXRhX3BhOiBEYXRhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSB0byBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlCiYjNDM7ICogUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwlfX2xlMTYgdG90YWxfbGVuOwomIzQzOwlfX2xlMTYgb2Zmc2V0OwomIzQzOwlfX2xlMTYgZGF0YV9sZW47CiYjNDM7CV9fbGU2NCBkYXRhX3BhOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpCiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgLSBDb21wb25lbnQgdGFibGUgZGV0YWlscwomIzQzOyAqIEBjb21wYXJpc29uX3N0YW1wOiBDb21wYXJpc29uIHN0YW1wIHVzZWQgZm9yIGNvbXBvbmVudCB2ZXJzaW9uIGNoZWNrcwomIzQzOyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm8KJiM0MzsgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50JiMzOTtzIElECiYjNDM7ICogQHRyYW5zZmVyX2ZsYWc6IFBhcnQgb2YgdGhlIGNvbXBvbmVudCB0YWJsZSB0aGlzIHJlcXVlc3QgcmVwcmVzZW50cwomIzQzOyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkCiYjNDM7ICogQHZlcnNpb25fc3RyX2xlbjogTGVuZ3RoIG9mIEB2ZXJzaW9uX3N0cgomIzQzOyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb24KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCB7CiYjNDM7CV9fbGUzMiBjb21wYXJpc29uX3N0YW1wOwomIzQzOwlfX2xlMTYgY2xhc3NpZmljYXRpb247CiYjNDM7CV9fbGUxNiBpZGVudGlmaWVyOwomIzQzOwl1OCAgICAgdHJhbnNmZXJfZmxhZzsKJiM0MzsJdTggICAgIHZlcnNpb25fc3RyX3R5cGU7CiYjNDM7CXU4ICAgICB2ZXJzaW9uX3N0cl9sZW47CiYjNDM7CXU4ICAgICB2ZXJzaW9uX3N0cltdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkwKJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90CiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqCiYjNDM7ICogRXhwZWN0cyB0byBmaW5kIGNvbXBvbmVudCB0YWJsZSBpbmZvIChzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCkKJiM0MzsgKiBpbiBjbWRfcmVncy0mZ3Q7ZGF0YS4gIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQKJiM0MzsgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHsKJiM0MzsJdTggb3Bjb2RlOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IHNsb3RfaWQ7CiYjNDM7CXU4IHJzdmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9yZXNwX2NvZGUgewomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfVkFMSUQgPSAweDAsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgPSAweDEsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUiA9IDB4MiwKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX09SX1ZFUlNJT05fSU5WQUxJRCA9IDB4MywKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX0NPTkZMSUNUID0gMHg0LAomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfUFJFUkVRU19OT1RfTUVUID0gMHg1LAomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfTk9UX1NVUFBPUlRFRCA9IDB4NiwKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX0ZXX1RZUEVfSU5WQUxJRCA9IDB4ZDAsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQGNvbXBsZXRpb25fY29kZTogQ29tcG9uZW50IGNvbXBsZXRpb24gY29kZQomIzQzOyAqIEByZXNwb25zZTogQ29tcG9uZW50IHJlc3BvbnNlCiYjNDM7ICogQHJlc3BvbnNlX2NvZGU6IENvbXBvbmVudCByZXNwb25zZSBjb2RlCiYjNDM7ICogQHNsb3RfaWQ6IEFjdHVhbCBzbG90X2lkIG9mIHRoZSBjb21wb25lbnQgKGVudW0gcGRzX2NvcmVfZndfc2xvdCkKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IGNvbXBsZXRpb25fY29kZTsKJiM0MzsJdTggcmVzcG9uc2U7CiYjNDM7CXU4IHJlc3BvbnNlX2NvZGU7CiYjNDM7CXU4IHNsb3RfaWQ7CiYjNDM7CXU4IHJzdmRbMl07CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvbgomIzQzOyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVDogSW5pdGlhbCBvcGVyYXRpb24gdG8gc3RhcnQgdHJhbnNmZXIKJiM0MzsgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTOiBTdWJzZXF1ZW50IGNhbGxzIHRvIGNoZWNrIG9uIHN0YXR1cwomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3AgewomIzQzOwlQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVCA9IDAsCiYjNDM7CVBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUyA9IDEsCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JRF9JTlZBTElEIDB4RkZGRgomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgLSBDb21wb25lbnQgZGV0YWlscwomIzQzOyAqIEBjb21wYXJpc29uX3N0YW1wOiBDb21wYXJpc29uIHN0YW1wIHVzZWQgZm9yIGNvbXBvbmVudCB2ZXJzaW9uIGNoZWNrcwomIzQzOyAqIEBpbWFnZV9zaXplOiBDb21wb25lbnQgaW1hZ2Ugc2l6ZQomIzQzOyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm8KJiM0MzsgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50JiMzOTtzIElECiYjNDM7ICogQG9wdGlvbnM6IENvbXBvbmVudCBvcHRpb25zCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkCiYjNDM7ICogQHZlcnNpb25fc3RyX2xlbjogTGVuZ3RoIG9mIEB2ZXJzaW9uX3N0cgomIzQzOyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb24KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IHsKJiM0MzsJX19sZTMyIGNvbXBhcmlzb25fc3RhbXA7CiYjNDM7CV9fbGUzMiBpbWFnZV9zaXplOwomIzQzOwlfX2xlMTYgY2xhc3NpZmljYXRpb247CiYjNDM7CV9fbGUxNiBpZGVudGlmaWVyOwomIzQzOwlfX2xlMTYgb3B0aW9uczsKJiM0MzsJdTggcnN2ZFszXTsKJiM0MzsJdTggdmVyc2lvbl9zdHJfdHlwZTsKJiM0MzsJdTggdmVyc2lvbl9zdHJfbGVuOwomIzQzOwl1OCB2ZXJzaW9uX3N0cltdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAtIFNlbmQgY29tcG9uZW50IGNvbW1hbmQKJiM0MzsgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UCiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90CiYjNDM7ICogQG9wZXJhdGlvbjogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcAomIzQzOyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzCiYjNDM7ICoJICAgIGFyZSBuZWVkZWQgZm9yIGEgc2luZ2xlIGNvbXBvbmVudAomIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIHRoaXMgcGFydCBvZiB0aGUgY29tcG9uZW50IHN0b3JlZCBhdCBAZGF0YV9wYQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgdGhlIGNvbXBvbmVudAomIzQzOyAqCiYjNDM7ICogQSBjb21wb25lbnQgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlCiYjNDM7ICogUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIGRldmNtZHMgbWF5IGJlIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIEV4cGVjdHMgdG8gZmluZCBmbGFzaCBjb21wb25lbnQgaW5mbyAoc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCkKJiM0MzsgKiBpbiBjbWRfcmVncy0mZ3Q7ZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZAomIzQzOyAqIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGUgZmxhc2ggY29tcG9uZW50IGluZm8uCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCBzbG90X2lkOwomIzQzOwl1OCBvcGVyYXRpb247CiYjNDM7CV9fbGUzMiBvZmZzZXQ7CiYjNDM7CV9fbGUzMiBkYXRhX2xlbjsKJiM0MzsJdTggcnN2ZFs0XTsKJiM0MzsJX19sZTY0IGRhdGFfcGE7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAtIFNlbmQgY29tcG9uZW50IGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpCiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wbGV0aW9uIGNvZGUKJiM0MzsgKiBAY29tcGF0X3Jlc3BvbnNlOiBDb21wYXRpYmlsaXR5IHJlc3BvbnNlICgwID0gQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkKQomIzQzOyAqIEBjb21wYXRfcmVzcG9uc2VfY29kZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSBjb2RlCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IGNvbXBsZXRpb25fY29kZTsKJiM0MzsJdTggY29tcGF0X3Jlc3BvbnNlOwomIzQzOwl1OCBjb21wYXRfcmVzcG9uc2VfY29kZTsKJiM0MzsJdTggcnN2ZFszXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUgLSBGaXJtd2FyZSBjb21wb25lbnQgdHlwZQomIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1VOS05PV046IFVua25vd24gY29tcG9uZW50IHR5cGUKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9NQUlOOiBNYWluIGZpcm13YXJlCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfQk9PVDogQm9vdCBsb2FkZXIKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9DUExEOiBDUExEIGZpcm13YXJlCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFOiBTZWN1cmUgZmlybXdhcmUKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9GUEdBOiBGUEdBIGNvbmZpZ3VyYXRpb24KJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTjogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBmaXJtd2FyZQomIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UOiBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGJvb3Rsb2FkZXIKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9VQk9PVDogVS1Cb290IGJvb3Rsb2FkZXIKJiM0MzsgKgomIzQzOyAqIEdvbGQvcmVjb3ZlcnkgdmFyaWFudHMgYXJlIGlkZW50aWZpZWQgYnkgc2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQKJiM0MzsgKiBhbmQgcmVwb3J0ZWQgd2l0aCBhICYjMzQ7LmdvbGQmIzM0OyBzdWZmaXggKGUuZy4sIGZ3LmdvbGQpLgomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUgewomIzQzOwlQRFNfQ09SRV9GV19UWVBFX1VOS05PV04gICA9IDAsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfTUFJTiAgICAgID0gMSwKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9CT09UICAgICAgPSAyLAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX0NQTEQgICAgICA9IDMsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFICAgID0gNCwKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9GUEdBICAgICAgPSA1LAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOICA9IDYsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1QgID0gNywKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9VQk9PVCAgICAgPSA4LAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFncyAtIENvbXBvbmVudCBpbmZvIGZsYWdzCiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORzogQ29tcG9uZW50IGlzIGN1cnJlbnRseSBydW5uaW5nCiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUDogQ29tcG9uZW50IHZlcnNpb24gb24gbmV4dCBGVyBib290CiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQ6IENvbXBvbmVudCBpcyBmaXhlZCBhbmQgY2Fubm90IGJlIHVwZGF0ZWQKJiM0MzsgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRTogQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkCiYjNDM7ICoJYnkgbmFtZQomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgewomIzQzOwlQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcgPSBCSVQoMCksCiYjNDM7CVBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUCA9IEJJVCgxKSwKJiM0MzsJUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRCA9IEJJVCgyKSwKJiM0MzsJUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSA9IEJJVCgzKSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeQomIzQzOyAqIEBuYW1lOiBDb21wb25lbnQmIzM5O3MgbmFtZQomIzQzOyAqIEBjb21wb25lbnRfdHlwZTogZW51bSBwZHNfY29yZV9md19jb21wb25lbnRfdHlwZQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAZmxhZ3M6IGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MKJiM0MzsgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50JiMzOTtzIGlkZW50aWZpZXIKJiM0MzsgKiBAc2xvdF9pZDogQ29tcG9uZW50JiMzOTtzIHNsb3QgaWRlbnRpZmllcgomIzQzOyAqIEB2ZXJzaW9uOiBDb21wb25lbnQmIzM5O3MgdmVyc2lvbgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyB7CiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4gMjQKJiM0MzsJY2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07CiYjNDM7CXU4IGNvbXBvbmVudF90eXBlOwomIzQzOwl1OCByc3ZkWzNdOwomIzQzOwlfX2xlMTYgZmxhZ3M7CiYjNDM7CXU4IGlkZW50aWZpZXI7CiYjNDM7CXU4IHNsb3RfaWQ7CiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAzMgomIzQzOwljaGFyIHZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU5dOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4JKChQRFNfUEFHRV9TSVpFIC0gOCkgLyBcCiYjNDM7CQlzaXplb2Yoc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvKSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21wbGV0aW9uIGRhdGEKJiM0MzsgKiBAbnVtX2NvbXBvbmVudHM6IE51bWJlciBvZiB2YWxpZCBjb21wb25lbnRzCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqIEBpbmZvOiBMaXN0IG9mIHZhbGlkIGNvbXBvbmVudHMKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyB7CiYjNDM7CXU4IG51bV9jb21wb25lbnRzOwomIzQzOwl1OCByc3ZkWzddOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gaW5mb1tQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5dOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8KJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YQomIzQzOyAqCiYjNDM7ICogRlcgcG9wdWxhdGVzIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIHBvaW50ZWQgdG8gYnkgQGRhdGFfcGEKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwlfX2xlMTYgZGF0YV9sZW47CiYjNDM7CXU4IHJzdmRbNF07CiYjNDM7CV9fbGU2NCBkYXRhX3BhOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlCiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IHJzdmRbMl07CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAtIEZJTkFMSVpFX1VQREFURSBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURQomIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKgomIzQzOyAqIERyaXZlciBzZW5kcyBhdCB0aGUgZW5kIG9mIHVwZGF0aW5nIGFsbCBjb21wb25lbnRzIHRvIGZpbmFsaXplIHRoZSB1cGRhdGUKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIC0gRklOQUxJWkVfVVBEQVRFIGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlCiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IHJzdmRbMl07CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kIC0gTUFUQ0hfUkVDT1JEX0RFU0MgY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQwomIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHR5cGU6IFBMRE0gRGVzY3JpcHRvciBJZGVudGlmaWVyIFR5cGUKJiM0MzsgKiBAc2l6ZTogTGVuZ3RoIG9mIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVmFsdWUKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICoKJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgdGhlIERlc2NyaXB0b3IgSWRlbnRpZmllciBEYXRhIGluIGNtZF9yZWdzLSZndDtkYXRhLiBEcml2ZXIKJiM0MzsgKiBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQgd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoaXMKJiM0MzsgKiBjb21tYW5kLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJX19sZTE2IHR5cGU7CiYjNDM7CV9fbGUxNiBzaXplOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQG1hdGNoOiBXaGV0aGVyIG9yIG5vdCB0aGUgUmVjb3JkIERlc2NyaXB0b3IgbWF0Y2hlcyB0aGUgZGV2aWNlCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqCiYjNDM7ICogV2hlbiBzdGF0dXMgaXMgUERTX1JDX1NVQ0NFU1MsIHRoZW4gQG1hdGNoIGlzIHZhbGlkLCBvdGhlcndpc2UgaXQmIzM5O3MKJiM0MzsgKiB1bmRlZmluZWQuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgewomIzQzOwl1OCBzdGF0dXM7CiYjNDM7CXU4IHZlcjsKJiM0MzsJdTggbWF0Y2g7CiYjNDM7CXU4IHJzdmQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIgLSBIT1NUX01FTSBzdWItb3BlcmF0aW9ucwomIzQzOyAqIEBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ6IFF1ZXJ5IG51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHMKJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk6ICAgICBRdWVyeSBkZXRhaWxzIG9mIGEgbWVtb3J5IHJlcXVlc3QKJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fQUREOiAgICAgICBQcm92aWRlIGFsbG9jYXRlZCBtZW1vcnkgdG8gZmlybXdhcmUKJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fREVMOiAgICAgICBOb3RpZnkgZmlybXdhcmUgb2YgbWVtb3J5IGRlYWxsb2NhdGlvbgomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfaG9zdF9tZW1fb3BlciB7CiYjNDM7CVBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVAk9IDAsCiYjNDM7CVBEU19DT1JFX0hPU1RfTUVNX1FVRVJZCQk9IDEsCiYjNDM7CVBEU19DT1JFX0hPU1RfTUVNX0FERAkJPSAyLAomIzQzOwlQRFNfQ09SRV9IT1NUX01FTV9ERUwJCT0gMywKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgLSBIT1NUX01FTSBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU0KJiM0MzsgKiBAb3BlcjogICAgICAgT3BlcmF0aW9uIChlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIpCiYjNDM7ICogQGluZGV4OiAgICAgIE1lbW9yeSByZXF1ZXN0IGluZGV4IChHRVRfQ09VTlQ6IG1heF9jb3VudCwgUVVFUlk6IGluZGV4KQomIzQzOyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpCiYjNDM7ICogQHJlYXNvbjogICAgIFJlYXNvbiBmb3IgZGVsZXRpb24gKERFTCBvbmx5KQomIzQzOyAqIEByc3ZkOiAgICAgICBSZXNlcnZlZAomIzQzOyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KQomIzQzOyAqIEBzaXplOiAgICAgICBTaXplIG9mIG1lbW9yeSBpbiBieXRlcyAoQUREIG9ubHkpCiYjNDM7ICogQGJ1Zl9wYTogICAgIERNQSBhZGRyZXNzIG9mIG1lbW9yeSAoQUREIG9ubHkpCiYjNDM7ICoKJiM0MzsgKiBVbmlmaWVkIGNvbW1hbmQgZm9yIGFsbCBob3N0IG1lbW9yeSBvcGVyYXRpb25zLiBGaWVsZHMgYXJlIHJldXNlZAomIzQzOyAqIGFjcm9zcyBvcGVyYXRpb25zIHRvIG1pbmltaXplIG9wY29kZSBzcGFjZSB1c2FnZS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIHsKJiM0MzsJdTggICAgIG9wY29kZTsKJiM0MzsJdTggICAgIG9wZXI7CiYjNDM7CV9fbGUxNiBpbmRleDsKJiM0MzsJX19sZTE2IHRhZzsKJiM0MzsJdTggICAgIHJlYXNvbjsKJiM0MzsJdTggICAgIHJzdmQ7CiYjNDM7CV9fbGUzMiBtYXhfY29udGlnOwomIzQzOwlfX2xlMzIgc2l6ZTsKJiM0MzsJX19sZTY0IGJ1Zl9wYTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIC0gSE9TVF9NRU0gY29tcGxldGlvbgomIzQzOyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSkKJiM0MzsgKiBAb3BlcjogICAgICAgICBPcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkCiYjNDM7ICogQGNvdW50OiAgICAgICAgTnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0cyAoR0VUX0NPVU5UKQomIzQzOyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKQomIzQzOyAqIEB0YWc6ICAgICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoUVVFUlkvREVMKQomIzQzOyAqIEByc3ZkOiAgICAgICAgIFJlc2VydmVkCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgewomIzQzOwl1OCAgICAgc3RhdHVzOwomIzQzOwl1OCAgICAgb3BlcjsKJiM0MzsJX19sZTE2IGNvdW50OwomIzQzOwlfX2xlMzIgc2l6ZTsKJiM0MzsJX19sZTE2IHRhZzsKJiM0MzsJdTggICAgIHJzdmRbNl07CiYjNDM7fTsKJiM0MzsKIC8qCiAgKiB1bmlvbiBwZHNfY29yZV9kZXZfY21kIC0gT3ZlcmxheSBvZiBjb3JlIGRldmljZSBjb21tYW5kIHN0cnVjdHVyZXMKICAqLwpAQCAtNDYyLDYgJiM0Mzs5MTUsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCB7CiAJc3RydWN0IHBkc19jb3JlX3ZmX3NldGF0dHJfY21kICAgdmZfc2V0YXR0cjsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jbWQgICB2Zl9nZXRhdHRyOwogCXN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NtZCAgICAgIHZmX2N0cmw7CiYjNDM7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIGdldF9jb21wb25lbnRfaW5mbzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kICAgICAgc2VuZF9wa2dfZGF0YTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgc2VuZF9jb21wb25lbnRfdGJsOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY21kICAgICBzZW5kX2NvbXBvbmVudDsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgICAgZmluYWxpemVfdXBkYXRlOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kICBtYXRjaF9yZWNvcmRfZGVzYzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCAgICAgICAgICAgaG9zdF9tZW07CiB9OwogCiAvKgpAQCAtNDgwLDYgJiM0Mzs5NDEsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgewogCXN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NvbXAgICB2Zl9zZXRhdHRyOwogCXN0cnVjdCBwZHNfY29yZV92Zl9nZXRhdHRyX2NvbXAgICB2Zl9nZXRhdHRyOwogCXN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NvbXAgICAgICB2Zl9jdHJsOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgZ2V0X2NvbXBvbmVudF9pbmZvOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wICAgICAgc2VuZF9wa2dfZGF0YTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHNlbmRfY29tcG9uZW50X3RibDsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgICAgIHNlbmRfY29tcG9uZW50OwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgICAgZmluYWxpemVfdXBkYXRlOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAgbWF0Y2hfcmVjb3JkX2Rlc2M7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wICAgICAgICAgICBob3N0X21lbTsKIH07CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA2MQoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFF1aWNrIERlY2lzaW9uKioKCk9rYXksIHNvIEkgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIHRoZSBgcGRzX2NvcmVgIGRyaXZlciwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBzcGVjaWZpYyBjb25kaXRpb24gaW4gbXkgZXZhbHVhdGlvbiBwcm9jZXNzLiBJIHJlbWVtYmVyIHRoZSBwcm9tcHQ7IGl0IGV4cGxpY2l0bHkgY2FsbHMgb3V0IGBwZHNfY29yZWAgYXMgYW4gZXhhbXBsZSBvZiB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgUENJZSBkZXZpY2VzLCBTbWFydE5JQ3Mgc3BlY2lmaWNhbGx5LCB0aGF0IGNhbiYjMzk7dCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBwYXRjaCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLCBidXQgSSBjYW4gc2VlIHJpZ2h0IGF3YXkgaXQgaXMgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvYC4gVGhlIHBhdGNoIGFkZHMgUExETSBmaXJtd2FyZSB1cGRhdGUgc3VwcG9ydCBhbmQgaG9zdCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIGZpcm13YXJlLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtYXR0ZXIgaGVyZS4KClRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGRyaXZlciBpdHNlbGYuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgZmlsZSBwYXRoIGlzIGNvcnJlY3QgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvYCkgYW5kIGl0IGlzIGluZGVlZCBhIGRldmljZSBkcml2ZXIgZm9yIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZXMgYW5kIHVzZXMgUENJLiBUaGUgcHJvbXB0IGlzIHZlcnkgY2xlYXI6ICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBBbmQsIHRoZSBwcm9tcHQgKipleHBsaWNpdGx5KiogdXNlcyBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUuCgpHaXZlbiB0aGlzIGRpcmVjdCBtYXRjaCwgYW5kIHRoZSBuZWVkIGZvciBQQ0kgaGFyZHdhcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTm8gbmVlZCBmb3IgYSBsZW5ndGh5IGFuYWx5c2lzIGhlcmUsIGJlY2F1c2UgaXQgaXMgZXhwbGljaXRseSBjYWxsZWQgb3V0LiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYSBkcml2ZXIgdGhhdCByZWxpZXMgb24gYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBmb3Igd2hpY2ggd2UgY2Fubm90IHRlc3QgaXRzIGNoYW5nZXMgYW5kLCB0aGVyZWZvcmUsIGl0JiMzOTtzIG5vdCBzdWl0YWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1enppbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZHNfY29yZSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGRzX2NvcmUgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjMwOjMzLjU4MTQ3OTIzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTU4MjA2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZHNfY29yZSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzozMDozMy41ODE0ODY4NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTMwNjY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFkYWJhZmNiMmU5YjAzYjRlMDk2N2M5NDNlNTQzNGM1OWVkMmE3ZGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTM6MzA6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxcbmluZGV4IDllOGExNmM0NDEwMjkuLjQ5NDg3YTM1YzE2MzIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxcbkBAIC0xMDIsNiArMTAyLDk1IEBAIGN1cnJlbnRseSBpbiB1c2UsIGFuZCB0aGF0IGJhbmsgd2lsbCB1c2VkIGZvciB0aGUgbmV4dCBib290OjpcXG4gICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgXFxcXFxcbiAgICAgICAgICAgICBmaWxlIHBlbnNhbmRvL2RzY19md18xLjYzLjAtMjIudGFyXFxuIFxcbitGaXJtd2FyZSBNYW5hZ2VtZW50IChQTERNKVxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rRmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIGNhbiBiZSB1cGRhdGVkIHVzaW5nIHRoZSBkZXZsaW5rIGZsYXNoIGNvbW1hbmRcXG4rd2l0aCBhIFBMRE0gZmlybXdhcmUgcGFja2FnZS4gVGhlIGVudGlyZSBwYWNrYWdlIGNhbiBiZSB1cGRhdGVkIGF0IG9uY2U6OlxcbitcXG4rICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgZmlsZSBmaXJtd2FyZS5wbGRtZndcXG4rXFxuK0luZGl2aWR1YWwgY29tcG9uZW50cyBjYW4gYWxzbyBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBuYW1lOjpcXG4rXFxuKyAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFxcXFxcXG4rICAgICAgICAgICAgZmlsZSBmaXJtd2FyZS5wbGRtZncgY29tcG9uZW50IGZ3LmNwbGRcXG4rXFxuK1Blci1jb21wb25lbnQgdXBkYXRlIHVzZXMgZHJpdmVyLWRlZmluZWQgY29tcG9uZW50IG5hbWVzIChmdywgZncuY3BsZCxcXG4rZXRjLikuIE5vdCBhbGwgY29tcG9uZW50cyBzdXBwb3J0IHBlci1jb21wb25lbnQgdXBkYXRlIC1cXG4rZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3RcXG4rYmUgdXBkYXRlZC5cXG4rXFxuK0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50XFxuK25hbWUgKGUuZy4sIGBgZndgYCBmb3IgYGBmdy5nb2xkYGApIHdpdGggYSBnb2xkZncgcGFja2FnZSBmaWxlIHdoZW4gdGhlXFxuK2RldmljZSBzdXBwb3J0cyBwZXItY29tcG9uZW50IHVwZGF0ZS4gVGhlIGBgLmdvbGRgYCBzdWZmaXggaW4gZGV2bGluayBpbmZvXFxuK291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuXFxuK1xcbitJbmZvIHZlcnNpb25zIChQTERNKVxcbis9PT09PT09PT09PT09PT09PT09PVxcbitcXG4rRmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIHJlcG9ydHMgY29tcG9uZW50IHZlcnNpb25zIHVzaW5nIGRyaXZlci1kZWZpbmVkXFxuK25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6XFxuK1xcbisuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGZvciBQTERNLWNhcGFibGUgZmlybXdhcmVcXG4rICAgOndpZHRoczogNSA1IDkwXFxuK1xcbisgICAqIC0gTmFtZVxcbisgICAgIC0gVHlwZVxcbisgICAgIC0gRGVzY3JpcHRpb25cXG4rICAgKiAtIGBgZndgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBNYWluIGZpcm13YXJlXFxuKyAgICogLSBgYGZ3LmdvbGRgYFxcbisgICAgIC0gc3RvcmVkXFxuKyAgICAgLSBHb2xkIChyZWNvdmVyeSkgZmlybXdhcmVcXG4rICAgKiAtIGBgZncuYm9vdGxvYWRlcmBgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIEJvb3QgbG9hZGVyXFxuKyAgICogLSBgYGZ3LmNwbGRgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBDUExEXFxuKyAgICogLSBgYGZ3LnNlY3VyZWBgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIFNlY3VyZSBib290IGZpcm13YXJlXFxuKyAgICogLSBgYGZ3LmZwZ2FgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBGUEdBIGNvbmZpZ3VyYXRpb25cXG4rICAgKiAtIGBgZncuc3VjYGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBmaXJtd2FyZVxcbisgICAqIC0gYGBmdy5zdWMuYm9vdGxvYWRlcmBgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIFN5c3RlbSBVbml0IENvbnRyb2xsZXIgYm9vdGxvYWRlclxcbisgICAqIC0gYGBmdy51Ym9vdGBgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIFUtQm9vdCBib290bG9hZGVyXFxuKyAgICogLSBgYGFzaWMuaWRgYFxcbisgICAgIC0gZml4ZWRcXG4rICAgICAtIFRoZSBBU0lDIHR5cGUgZm9yIHRoaXMgZGV2aWNlXFxuKyAgICogLSBgYGFzaWMucmV2YGBcXG4rICAgICAtIGZpeGVkXFxuKyAgICAgLSBUaGUgcmV2aXNpb24gb2YgdGhlIEFTSUMgZm9yIHRoaXMgZGV2aWNlXFxuK1xcbitFeGFtcGxlIG91dHB1dDo6XFxuK1xcbisgICQgZGV2bGluayBkZXYgaW5mbyBwY2kvMDAwMDowMDowNS4wXFxuKyAgcGNpLzAwMDA6MDA6MDUuMDpcXG4rICAgIGRyaXZlciBwZHNfY29yZVxcbisgICAgc2VyaWFsX251bWJlciBGTE0xODQyMDA3M1xcbisgICAgdmVyc2lvbnM6XFxuKyAgICAgICAgZml4ZWQ6XFxuKyAgICAgICAgICBhc2ljLmlkIDB4MFxcbisgICAgICAgICAgYXNpYy5yZXYgMHgwXFxuKyAgICAgICAgcnVubmluZzpcXG4rICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjNcXG4rICAgICAgICAgIGZ3IDEuMy4wXFxuKyAgICAgICAgICBmdy5jcGxkIDMuMThcXG4rICAgICAgICBzdG9yZWQ6XFxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXFxuKyAgICAgICAgICBmdy5nb2xkIDEuMi4wXFxuKyAgICAgICAgICBmdyAxLjMuMFxcbisgICAgICAgICAgZncuY3BsZCAzLjE4XFxuK1xcbiBIZWFsdGggUmVwb3J0ZXJzXFxuID09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcXG5pbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcXG5AQCAtMTcxLDYgKzE3MSw3IEBAIGNvbmZpZyBQRFNfQ09SRVxcbiBcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiBcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4rXFx0c2VsZWN0IFBMRE1GV1xcbiBcXHRoZWxwXFxuIFxcdCAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciB0aGUgQU1EL1BlbnNhbmRvIENvcmUgZGV2aWNlIGZhbWlseSBvZlxcbiBcXHQgIGFkYXB0ZXJzLiAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBjYW4gYmVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmNcXG5pbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXFxuQEAgLTQ4OSw2ICs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxcbiBcXHRcXHRwZHNjX2RldmNtZF9yZXNldChwZHNjKTtcXG4gXFxuIFxcdHBjaV9jbGVhcl9tYXN0ZXIocGRzYy1cXHUwMDNlcGRldik7XFxuK1xcdGlmICghcGRzYy1cXHUwMDNlcGRldi1cXHUwMDNlaXNfdmlydGZuKSB7XFxuK1xcdFxcdHUxNiB2YWw7XFxuK1xcbitcXHRcXHQvKiBGbHVzaCBhbnkgaW4tZmxpZ2h0IERNQSBiZWZvcmUgZnJlZWluZyBidWZmZXJzLlxcbitcXHRcXHQgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3JcXG4rXFx0XFx0ICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy1cXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXFx1MDAyNnZhbCk7XFxuK1xcdH1cXG4gXFxuIFxcdHBkc2NfY29yZV91bmluaXQocGRzYyk7XFxuIFxcbkBAIC00OTcsNiArNTA2LDggQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxcbiBcXHRcXHRwZHNjLVxcdTAwM2V2aWZ0eXBlX3N0YXR1cyA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuK1xcdHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7XFxuK1xcdHBkc2NfaG9zdF9tZW1fZnJlZShwZHNjKTtcXG4gXFx0cGRzY19kZXZfdW5pbml0KHBkc2MpO1xcbiBcXG4gXFx0c2V0X2JpdChQRFNDX1NfRldfREVBRCwgXFx1MDAyNnBkc2MtXFx1MDAzZXN0YXRlKTtcXG5AQCAtNTA2LDYgKzUxNyw4IEBAIGludCBwZHNjX3N0YXJ0KHN0cnVjdCBwZHNjICpwZHNjKVxcbiB7XFxuIFxcdHBkc19jb3JlX2ludHJfbWFzayhcXHUwMDI2cGRzYy1cXHUwMDNlaW50cl9jdHJsW3Bkc2MtXFx1MDAzZWFkbWlucWNxLmludHhdLFxcbiBcXHRcXHRcXHQgICBQRFNfQ09SRV9JTlRSX01BU0tfQ0xFQVIpO1xcbitcXHRwZHNjX2hvc3RfbWVtX2FkZChwZHNjKTtcXG4rXFx0cGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShwZHNjKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTU4Nyw2ICs2MDAsOCBAQCB2b2lkIHBkc2NfZndfdXAoc3RydWN0IHBkc2MgKnBkc2MpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0cGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUocGRzYyk7XFxuK1xcbiBcXHRlcnIgPSBwZHNjX3NldHVwKHBkc2MsIFBEU0NfU0VUVVBfUkVDT1ZFUlkpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9vdXQ7XFxuQEAgLTY3MCwzICs2ODUsMTYxIEBAIHZvaWQgcGRzY19oZWFsdGhfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gb3V0X3VubG9jazpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIH1cXG4rXFxuK3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuK1xcdFxcdC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU0sXFxuK1xcdFxcdC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fREVMLFxcbitcXHRcXHQuaG9zdF9tZW0udGFnID0gY3B1X3RvX2xlMTYodGFnKSxcXG4rXFx0XFx0Lmhvc3RfbWVtLnJlYXNvbiA9IHJlYXNvbixcXG4rXFx0fTtcXG4rXFxuK1xcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwiU2VuZGluZyBkZXZjbWQgZm9yIG1lbSBkZWwgdGFnICVkXFxcXG5cXFwiLCB0YWcpO1xcbitcXHRwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfaG9zdF9tZW1fYWRkX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgaW50IGluZGV4KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpobSA9IFxcdTAwMjZwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzW2luZGV4XTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcXG4rXFx0Y21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9RVUVSWTtcXG4rXFx0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpO1xcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcXFxcblxcXCIsIGluZGV4KTtcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBxdWVyeSBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyLCBjb21wLnN0YXR1cyk7XFxuK1xcdFxcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xcbitcXHR9XFxuK1xcdGhtLVxcdTAwM2VzaXplID0gbGUzMl90b19jcHUoY29tcC5ob3N0X21lbS5zaXplKTtcXG4rXFx0aG0tXFx1MDAzZXRhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTtcXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJtZW0gcXVlcnkgcmV0dXJuZWQgc2l6ZSAlZCB0YWcgJWRcXFxcblxcXCIsXFxuK1xcdFxcdGhtLVxcdTAwM2VzaXplLCBobS1cXHUwMDNldGFnKTtcXG4rXFxuK1xcdGlmICghaG0tXFx1MDAzZXNpemUgfHwgaG0tXFx1MDAzZXNpemUgXFx1MDAzZSBQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJpbnZhbGlkIHNpemUgJWQgZm9yIHRhZyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aG0tXFx1MDAzZXNpemUsIGhtLVxcdTAwM2V0YWcpO1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9kZWw7XFxuK1xcdH1cXG4rXFxuK1xcdGhtLVxcdTAwM2VvcmRlciA9IGdldF9vcmRlcihobS1cXHUwMDNlc2l6ZSk7XFxuK1xcdGhtLVxcdTAwM2VwZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOLCBobS1cXHUwMDNlb3JkZXIpO1xcbitcXHRpZiAoIWhtLVxcdTAwM2VwZykge1xcbitcXHRcXHRkZXZfd2FybihwZHNjLVxcdTAwM2VkZXYsIFxcXCJhbGxvYyBvcmRlciAlZCBmYWlsZWQgZm9yIHRhZyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGhtLVxcdTAwM2VvcmRlciwgaG0tXFx1MDAzZXRhZyk7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX2RlbDtcXG4rXFx0fVxcbitcXG4rXFx0aG0tXFx1MDAzZXBhID0gZG1hX21hcF9wYWdlKHBkc2MtXFx1MDAzZWRldiwgaG0tXFx1MDAzZXBnLCAwLCBobS1cXHUwMDNlc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgRE1BX0JJRElSRUNUSU9OQUwpO1xcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cXHUwMDNlZGV2LCBobS1cXHUwMDNlcGEpKSB7XFxuK1xcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwiZG1hIG1hcCBmYWlsZWQgZm9yIHRhZyAlZCBzaXplICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRobS1cXHUwMDNldGFnLCBobS1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdF9fZnJlZV9wYWdlcyhobS1cXHUwMDNlcGcsIGhtLVxcdTAwM2VvcmRlcik7XFxuK1xcdFxcdGhtLVxcdTAwM2VwZyA9IE5VTEw7XFxuK1xcdFxcdGVyciA9IC1FSU87XFxuK1xcdFxcdGdvdG8gZXJyX2RlbDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJhY2sgdGhpcyBhbGxvY2F0aW9uIHNvIHBkc2NfaG9zdF9tZW1fZnJlZSgpIGNhbiBjbGVhbiBpdCB1cCAqL1xcbitcXHRwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxcysrO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZjbWQsIDAsIHNpemVvZihjbWQpKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZjb21wLCAwLCBzaXplb2YoY29tcCkpO1xcbitcXHRjbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNO1xcbitcXHRjbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0FERDtcXG4rXFx0Y21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLVxcdTAwM2V0YWcpO1xcbitcXHRjbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLVxcdTAwM2VzaXplKTtcXG4rXFx0Y21kLmhvc3RfbWVtLmJ1Zl9wYSA9IGNwdV90b19sZTY0KGhtLVxcdTAwM2VwYSk7XFxuK1xcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gYWRkIHRhZyAlZCBzaXplICVkIHBhICVwYWRcXFxcblxcXCIsXFxuK1xcdFxcdGhtLVxcdTAwM2V0YWcsIGhtLVxcdTAwM2VzaXplLCBcXHUwMDI2aG0tXFx1MDAzZXBhKTtcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBhZGQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWQgZm9yIHRhZyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyLCBjb21wLnN0YXR1cywgaG0tXFx1MDAzZXRhZyk7XFxuK1xcdFxcdGVyciA9IGVyciA/IGVyciA6IC1FSU87XFxuK1xcdFxcdGdvdG8gZXJyX2RlbDtcXG4rXFx0fVxcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBhZGQgY29tcGxldGVkIGZvciB0YWcgJWRcXFxcblxcXCIsIGhtLVxcdTAwM2V0YWcpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZGVsOlxcbitcXHQvKiBBZnRlciBNRU1fUVVFUlkgc3VjY2VlZHMsIGZpcm13YXJlIGV4cGVjdHMgTUVNX0FERCBvciBNRU1fREVMICovXFxuK1xcdHBkc2NfaG9zdF9tZW1fZGVsX29uZShwZHNjLCBobS1cXHUwMDNldGFnLCBQRFNfUkNfRU5PTUVNKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XFxuK1xcdHUxNiBjb3VudDtcXG4rXFx0aW50IGVycjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIShwZHNjLVxcdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFxcdTAwMjZcXG4rXFx0ICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNtZC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU07XFxuK1xcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UO1xcbitcXHRjbWQuaG9zdF9tZW0uaW5kZXggPSBjcHVfdG9fbGUxNihQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7XFxuK1xcdGNtZC5ob3N0X21lbS5tYXhfY29udGlnID0gY3B1X3RvX2xlMzIoUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTtcXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XFxcXG5cXFwiLFxcbitcXHRcXHRQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpO1xcbitcXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbitcXHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XFxuK1xcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwibWVtIGdldCBjb3VudCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyLCBjb21wLnN0YXR1cyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Y291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksXFxuK1xcdFxcdCAgICBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7XFxuK1xcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwibWVtIGdldCBjb3VudCByZXR1cm5lZCBjb3VudCAlZFxcXFxuXFxcIiwgY291bnQpO1xcbitcXHRpZiAoY291bnQgPT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcywgY291bnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gYWxsb2MgaG9zdF9tZW1fcmVxcyBhcnJheVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0ZXJyID0gcGRzY19ob3N0X21lbV9hZGRfb25lKHBkc2MsIGkpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZW51bV9ob3N0X21lbV9yZXFzOyBpKyspIHtcXG4rXFx0XFx0ZG1hX3VubWFwX3BhZ2UocGRzYy1cXHUwMDNlZGV2LCBwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzW2ldLnBhLFxcbitcXHRcXHRcXHQgICAgICAgcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5zaXplLFxcbitcXHRcXHRcXHQgICAgICAgRE1BX0JJRElSRUNUSU9OQUwpO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5wZyxcXG4rXFx0XFx0XFx0ICAgICBwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzW2ldLm9yZGVyKTtcXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUocGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcyk7XFxuK1xcdHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMgPSBOVUxMO1xcbitcXHRwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxcyA9IDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcXG5pbmRleCBiN2ZlOWFkNzMzNDk4Li43OTE3NTZhNTA4NzBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXFxuQEAgLTUsNiArNSw3IEBAXFxuICNkZWZpbmUgX1BEU0NfSF9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXpvbmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kZXZsaW5rLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGRzL3Bkc19jb21tb24uaFxcdTAwM2VcXG5AQCAtMjMsNiArMjQsMjAgQEBcXG4gI2RlZmluZSBQRFNDX1NFVFVQX1JFQ09WRVJZXFx0ZmFsc2VcXG4gI2RlZmluZSBQRFNDX1NFVFVQX0lOSVRcXHRcXHR0cnVlXFxuIFxcbisvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIE1BWF9QQUdFX09SREVSIHRvIGF2b2lkXFxuKyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3NcXG4rICovXFxuKyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHICg0ICogMTAyNCAqIDEwMjQpXFxuKyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NlxcbitcXG4rc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHR2b2lkICp2YTtcXG4rXFx0c2l6ZV90IHNpemU7XFxuK1xcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjtcXG4rfTtcXG4rXFxuIHN0cnVjdCBwZHNjX2Rldl9iYXIge1xcbiBcXHR2b2lkIF9faW9tZW0gKnZhZGRyO1xcbiBcXHRwaHlzX2FkZHJfdCBidXNfYWRkcjtcXG5AQCAtMTQxLDYgKzE1NiwxNCBAQCBzdHJ1Y3QgcGRzY192aWZ0eXBlIHtcXG4gXFx0c3RydWN0IHBkc19hdXhpbGlhcnlfZGV2ICpwYWRldjtcXG4gfTtcXG4gXFxuK3N0cnVjdCBwZHNjX2hvc3RfbWVtIHtcXG4rXFx0dTMyIHNpemU7XFxuK1xcdHUxNiB0YWc7XFxuK1xcdHU4IG9yZGVyO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGc7XFxuK1xcdGRtYV9hZGRyX3QgcGE7XFxuK307XFxuK1xcbiAvKiBObyBzdGF0ZSBmbGFncyBzZXQgbWVhbnMgd2UgYXJlIGluIGEgc3RlYWR5IHJ1bm5pbmcgc3RhdGUgKi9cXG4gZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHtcXG4gXFx0UERTQ19TX0ZXX0RFQUQsXFx0XFx0ICAgIC8qIHN0b3BwZWQsIHdhaXQgb24gc3RhcnR1cCBvciByZWNvdmVyeSAqL1xcbkBAIC0xODUsNiArMjA4LDggQEAgc3RydWN0IHBkc2Mge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggZGV2Y21kX2xvY2s7XFx0LyogbG9jayBmb3IgZGV2X2NtZCBvcGVyYXRpb25zICovXFxuIFxcdHN0cnVjdCBtdXRleCBjb25maWdfbG9jaztcXHQvKiBsb2NrIGZvciBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgKi9cXG4gXFx0c3BpbmxvY2tfdCBhZG1pbnFfbG9jaztcXHRcXHQvKiBsb2NrIGZvciBhZG1pbnEgb3BlcmF0aW9ucyAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2RtYV9saXN0O1xcbitcXHRzcGlubG9ja190IGRlZmVycmVkX2RtYV9sb2NrO1xcdC8qIGxvY2sgZm9yIGRlZmVycmVkIERNQSBsaXN0ICovXFxuIFxcdHJlZmNvdW50X3QgYWRtaW5xX3JlZmNudDtcXG4gXFx0c3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfZGV2X2NtZF9yZWdzIF9faW9tZW0gKmNtZF9yZWdzO1xcbkBAIC0xOTksNiArMjI0LDExIEBAIHN0cnVjdCBwZHNjIHtcXG4gXFx0dTY0IGxhc3RfZWlkO1xcbiBcXHRzdHJ1Y3QgcGRzY192aWZ0eXBlICp2aWZ0eXBlX3N0YXR1cztcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHBjaV9yZXNldF93b3JrO1xcbitcXG4rXFx0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7XFxuK1xcdHUxNiBudW1faG9zdF9tZW1fcmVxcztcXG4rXFxuK1xcdHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIGZ3X2NvbXBvbmVudHM7XFxuIH07XFxuIFxcbiAvKiogZW51bSBwZHNfY29yZV9kYmVsbF9iaXRzIC0gYml0d2lzZSBjb21wb3NpdGlvbiBvZiBkYmVsbCB2YWx1ZXMuXFxuQEAgLTI3NSwxNCArMzA1LDI0IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF92aWZ0eXBlKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX2lycXMoc3RydWN0IHBkc2MgKnBkc2MpO1xcbiB2b2lkIHBkc2NfZGVidWdmc19hZGRfcWNxKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XFxuIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpO1xcbit2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpO1xcbit2b2lkIHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpO1xcbiBcXG4gaW50IHBkc2NfZXJyX3RvX2Vycm5vKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUgY29kZSk7XFxuIGJvb2wgcGRzY19pc19md19ydW5uaW5nKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpO1xcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4gXFx0XFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcXG4gaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbiBcXHRcXHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuK2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcXG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpO1xcbiBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpO1xcbiBpbnQgcGRzY19kZXZfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuQEAgLTMxNSwxMSArMzU1LDIzIEBAIHZvaWQgcGRzY19wcm9jZXNzX2FkbWlucShzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XFxuIHZvaWQgcGRzY193b3JrX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7XFxuIFxcbi1pbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuK2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4gXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuK2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuK2NvbnN0IGNoYXIgKnBkc2NfZndfdHlwZV90b19uYW1lKHU4IHR5cGUpO1xcbit2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gXFxuIHZvaWQgcGRzY19md19kb3duKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gdm9pZCBwZHNjX3BjaV9yZXNldF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gXFxuK3ZvaWQgcGRzY19ob3N0X21lbV9hZGQoc3RydWN0IHBkc2MgKnBkc2MpO1xcbit2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuK1xcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcXG4rXFx0XFx0XFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpO1xcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpO1xcbitcXG4gI2VuZGlmIC8qIF9QRFNDX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXFxuaW5kZXggODEwYTBjZDliY2FjOC4uZWYwYTFiN2QxNTliNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xcbkBAIC0xNzgsMyArMTc4LDQ4IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpXFxuIFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShxY3EtXFx1MDAzZWRlbnRyeSk7XFxuIFxcdHFjcS1cXHUwMDNlZGVudHJ5ID0gTlVMTDtcXG4gfVxcbitcXG4rc3RhdGljIGludCBob3N0X21lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG07XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzIHx8IHBkc2MtXFx1MDAzZW51bV9ob3N0X21lbV9yZXFzID09IDApIHtcXG4rXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwiTm8gaG9zdCBtZW1vcnkgYWxsb2NhdGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNlcV9wcmludGYoc2VxLCBcXFwiSG9zdCBtZW1vcnkgcmVxdWVzdHM6ICV1XFxcXG5cXFxcblxcXCIsXFxuK1xcdFxcdCAgIHBkc2MtXFx1MDAzZW51bV9ob3N0X21lbV9yZXFzKTtcXG4rXFx0c2VxX3B1dHMoc2VxLCBcXFwiVGFnICAgIFNpemUgICAgICAgICBPcmRlciAgUEFcXFxcblxcXCIpO1xcbitcXHRzZXFfcHV0cyhzZXEsIFxcXCItLS0gICAgLS0tLSAgICAgICAgIC0tLS0tICAtLVxcXFxuXFxcIik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGRzYy1cXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXM7IGkrKykge1xcbitcXHRcXHRobSA9IFxcdTAwMjZwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCFobS1cXHUwMDNlcGcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIlLTZ1ICUtMTJ1ICUtNnUgJXBhZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgaG0tXFx1MDAzZXRhZywgaG0tXFx1MDAzZXNpemUsIGhtLVxcdTAwM2VvcmRlciwgXFx1MDAyNmhtLVxcdTAwM2VwYSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0RFRklORV9TSE9XX0FUVFJJQlVURShob3N0X21lbSk7XFxuK1xcbit2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0aWYgKCEocGRzYy1cXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcXHUwMDI2XFxuK1xcdCAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJob3N0X21lbVxcXCIsIDA0MDAsIHBkc2MtXFx1MDAzZWRlbnRyeSxcXG4rXFx0XFx0XFx0ICAgIHBkc2MsIFxcdTAwMjZob3N0X21lbV9mb3BzKTtcXG4rfVxcbitcXG4rdm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdGRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUoXFxcImhvc3RfbWVtXFxcIiwgcGRzYy1cXHUwMDNlZGVudHJ5KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcXG5pbmRleCBiZGVkNmIzMzI4OWNlLi5jNTA3NzgxNzVlMmYzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xcbkBAIC0xMjYsNyArMTI2LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBkc2NfZGV2Y21kX3N0cihpbnQgb3Bjb2RlKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXFxuK3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcyxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgYm9vbCBkb19tc2cpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gcGRzYy1cXHUwMDNlZGV2O1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7XFxuQEAgLTE3OSw3ICsxODAsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxcbiBcXG4gXFx0c3RhdHVzID0gcGRzY19kZXZjbWRfc3RhdHVzKHBkc2MpO1xcbiBcXHRlcnIgPSBwZHNjX2Vycl90b19lcnJubyhzdGF0dXMpO1xcbi1cXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRUFHQUlOKVxcbitcXHRpZiAoZG9fbXNnIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVBR0FJTilcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJERVZDTUQgJWQgJXMgZmFpbGVkLCBzdGF0dXM9JWQgZXJyICVkICVwZVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0b3Bjb2RlLCBwZHNjX2RldmNtZF9zdHIob3Bjb2RlKSwgc3RhdHVzLCBlcnIsXFxuIFxcdFxcdFxcdEVSUl9QVFIoZXJyKSk7XFxuQEAgLTE4Nyw4ICsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuLVxcdFxcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGJvb2wgZG9fbXNnKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbkBAIC0xOTcsMTYgKzE5OSw2MyBAQCBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuIFxcbiBcXHRtZW1jcHlfdG9pbyhcXHUwMDI2cGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWNtZCwgY21kLCBzaXplb2YoKmNtZCkpO1xcbiBcXHRwZHNjX2RldmNtZF9kYmVsbChwZHNjKTtcXG4tXFx0ZXJyID0gcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtXFx1MDAzZW9wY29kZSwgbWF4X3NlY29uZHMpO1xcbitcXHRlcnIgPSBfX3Bkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLVxcdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzLCBkb19tc2cpO1xcbiBcXG4gXFx0aWYgKChlcnIgPT0gLUVOWElPIHx8IGVyciA9PSAtRVRJTUVET1VUKSBcXHUwMDI2XFx1MDAyNiBwZHNjLVxcdTAwM2V3cSlcXG4gXFx0XFx0cXVldWVfd29yayhwZHNjLVxcdTAwM2V3cSwgXFx1MDAyNnBkc2MtXFx1MDAzZWhlYWx0aF93b3JrKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRtZW1jcHlfZnJvbWlvKGNvbXAsIFxcdTAwMjZwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlY29tcCwgc2l6ZW9mKCpjb21wKSk7XFxuIFxcbitcXHRpZiAoZXJyICE9IC1FVElNRURPVVQgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FQUdBSU4pXFxuK1xcdFxcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XFxuK1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcXG4rXFx0XFx0XFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXFxuK3tcXG4rXFx0ZW50cnktXFx1MDAzZWRtYV9hZGRyID0gZG1hX2FkZHI7XFxuK1xcdGVudHJ5LVxcdTAwM2V2YSA9IHZhO1xcbitcXHRlbnRyeS1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdGVudHJ5LVxcdTAwM2VkaXIgPSBkaXI7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZW50cnktXFx1MDAzZWxpc3QsIFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuK31cXG4rXFxuK3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wO1xcbitcXHRMSVNUX0hFQUQobG9jYWxfbGlzdCk7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcXG4rXFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2cGRzYy1cXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QsIFxcdTAwMjZsb2NhbF9saXN0KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCBcXHUwMDI2bG9jYWxfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKHBkc2MtXFx1MDAzZWRldiwgZW50cnktXFx1MDAzZWRtYV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgZW50cnktXFx1MDAzZXNpemUsIGVudHJ5LVxcdTAwM2VkaXIpO1xcbitcXHRcXHRrZnJlZShlbnRyeS1cXHUwMDNldmEpO1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2ZW50cnktXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRrZnJlZShlbnRyeSk7XFxuK1xcdH1cXG4rfVxcbitcXG4raW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbitcXHRcXHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4re1xcbitcXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XFxuK31cXG4rXFxuK2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxcbit7XFxuK1xcdHJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCBmYWxzZSk7XFxuK31cXG4rXFxuIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbiBcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxcbiB7XFxuQEAgLTIxOSw2ICsyNjgsNDcgQEAgaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdFxcdCAgIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCxcXG4rXFx0XFx0XFx0XFx0ICAgaW50IG1heF9zZWNvbmRzLCBib29sIGRvX21zZylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGRzYy1cXHUwMDNlZGV2Y21kX2xvY2spO1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZWNtZF9yZWdzKSB7XFxuK1xcdFxcdGVyciA9IC1FTlhJTztcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFx0aWYgKGRhdGFfbGVuIFxcdTAwM2Ugc2l6ZW9mKHBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhKSkge1xcbitcXHRcXHRlcnIgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXHRtZW1jcHlfdG9pbyhcXHUwMDI2cGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWRhdGEsIGRhdGEsIGRhdGFfbGVuKTtcXG4rXFx0ZXJyID0gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRldmNtZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4re1xcbitcXHRyZXR1cm4gX19wZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgY21kLCBkYXRhLCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTtcXG4rfVxcbitcXG4raW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbitcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xcbit9XFxuK1xcbiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4ge1xcbiBcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuQEAgLTI0MiwxNSArMzMyLDE3IEBAIGludCBwZHNjX2RldmNtZF9yZXNldChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4gXFx0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjKVxcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgZG9fbXNnKVxcbiB7XFxuIFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4gXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuIFxcdFxcdC5pZGVudGlmeS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSURFTlRJRlksXFxuLVxcdFxcdC5pZGVudGlmeS52ZXIgPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEsXFxuK1xcdFxcdC5pZGVudGlmeS52ZXIgPSBkcnZfaWRlbnRfdmVyLFxcbiBcXHR9O1xcbiBcXG4tXFx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbitcXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0LFxcbitcXHRcXHRcXHRcXHQgICAgZG9fbXNnKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXFxuQEAgLTI3Myw4ICszNjUsOSBAQCBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcXG4gXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJmd192ZXJzaW9uICVzXFxcXG5cXFwiLCBwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxcbitzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnlfdmVyKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyKVxcbiB7XFxuK1xcdGJvb2wgZG9fbXNnID0gZHJ2X2lkZW50X3ZlciA9PSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzE7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307XFxuIFxcdHNpemVfdCBzejtcXG4gXFx0aW50IGVycjtcXG5AQCAtMjk3LDE5ICszOTAsMjIgQEAgc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxcbiBcXHRzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKGRydiksIHNpemVvZihwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSkpO1xcbiBcXHRtZW1jcHlfdG9pbyhcXHUwMDI2cGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWRhdGEsIFxcdTAwMjZkcnYsIHN6KTtcXG4gXFxuLVxcdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTtcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHBkc2MsIGRydl9pZGVudF92ZXIsIGRvX21zZyk7XFxuIFxcdGlmICghZXJyKSB7XFxuIFxcdFxcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YocGRzYy1cXHUwMDNlZGV2X2lkZW50KSxcXG4gXFx0XFx0XFx0ICAgc2l6ZW9mKHBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhKSk7XFxuIFxcdFxcdG1lbWNweV9mcm9taW8oXFx1MDAyNnBkc2MtXFx1MDAzZWRldl9pZGVudCwgXFx1MDAyNnBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhLCBzeik7XFxuK1xcbitcXHRcXHQvKiBWMSBmaXJtd2FyZSBkb2Vzbid0IHNldCBjYXBhYmlsaXRpZXMsIHNvIHRoZSBmaWVsZCBtYXlcXG4rXFx0XFx0ICogY29udGFpbiBnYXJiYWdlIGZyb20gdGhlIG91dGdvaW5nIGRyaXZlciBpZGVudGl0eS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChwZHNjLVxcdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcXHUwMDNjIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMilcXG4rXFx0XFx0XFx0cGRzYy1cXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7XFxuIFxcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZXZjbWRfbG9jayk7XFxuIFxcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRFUlJfUFRSKGVycikpO1xcbitcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuIFxcbiBcXHRpZiAoaXNwcmludChwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgaXNhc2NpaShwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSlcXG5AQCAtMzI2LDYgKzQyMiwyNiBAQCBzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qIE9sZGVyIGZpcm13YXJlIHJlamVjdHMgYW55dGhpbmcgYnV0IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxcbitcXHQgKiB3aXRoIFBEU19SQ19FVkVSU0lPTiAoLUVJTlZBTCksIHNvIHJldHJ5IHdpdGggVjEgb24gdmVyc2lvblxcbitcXHQgKiByZWplY3Rpb24uIERvbid0IHJldHJ5IG9uIG90aGVyIGVycm9ycyBsaWtlIC1FTlhJTy8tRVRJTUVET1VUXFxuK1xcdCAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpO1xcbitcXHRpZiAoZXJyID09IC1FSU5WQUwpXFxuK1xcdFxcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSk7XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIkNhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIHZvaWQgcGRzY19kZXZfdW5pbml0KHN0cnVjdCBwZHNjICpwZHNjKVxcbiB7XFxuIFxcdGlmIChwZHNjLVxcdTAwM2VpbnRyX2luZm8pIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcXG5pbmRleCA4YWRhZTdiMTg4OThkLi42M2ZlNDVlOTFmNzEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jXFxuQEAgLTkwLDEzICs5MCwxMTIgQEAgaW50IHBkc2NfZGxfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCxcXG4ge1xcbiBcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XFxuIFxcbi1cXHRpZiAocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4tXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4tXFx0XFx0XFx0XFx0ICAgXFxcIkNvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdHJldHVybiBwZHNjX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0ZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlO1xcbitcXHR1MTYgZmxhZ3MgPSBsZTE2X3RvX2NwdShpbmZvLVxcdTAwM2VmbGFncyk7XFxuK1xcdGNoYXIgKnZlciA9IGluZm8tXFx1MDAzZXZlcnNpb247XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdGNoYXIgYnVmWzMyXTtcXG4rXFxuK1xcdC8qIE1haW4gZmlybXdhcmUgaXMgcmVwb3J0ZWQgYXMgZ2VuZXJpYyBcXFwiZndcXFwiICovXFxuK1xcdGlmIChpbmZvLVxcdTAwM2Vjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiZncuZ29sZFxcXCIpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCJmd1xcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRuYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoaW5mby1cXHUwMDNlY29tcG9uZW50X3R5cGUpO1xcbitcXHRcXHRpZiAoIW5hbWUpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiZncuJXMuZ29sZFxcXCIsIG5hbWUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCJmdy4lc1xcXCIsIG5hbWUpO1xcbitcXHR9XFxuK1xcbitcXHR2ZXJfdHlwZSA9IERFVkxJTktfSU5GT19WRVJTSU9OX1RZUEVfTk9ORTtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSlcXG4rXFx0XFx0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX0NPTVBPTkVOVDtcXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQpIHtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsIGJ1ZiwgdmVyKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HKSB7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHZlciwgdmVyX3R5cGUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLVxcdTAwM2VmdywgZXh0YWNrKTtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQKSB7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0X2V4dChyZXEsIGJ1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB2ZXIsIHZlcl90eXBlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfZndfdmVyKHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsIGNoYXIgKmZ3X3ZlcilcXG4re1xcbitcXHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRmd192ZXIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcXG4rXFx0dTggbnVtX2NvbXBvbmVudHM7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuXFxuK1xcdCAqIFVzZSBSRUFEX09OQ0UgdG8gZ2V0IGEgY29uc2lzdGVudCBzbmFwc2hvdCBvZiBudW1fY29tcG9uZW50cy5cXG4rXFx0ICogcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoKSBjYW4gemVybyBpdCBjb25jdXJyZW50bHkgZHVyaW5nXFxuK1xcdCAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm9cXG4rXFx0ICogdGltZXMgd2hlbiB3ZSBhbHJlYWR5IGRlY2lkZWQgdGhlIGNhY2hlIHdhcyB2YWxpZC5cXG4rXFx0ICovXFxuK1xcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpO1xcbitcXHRpZiAoIW51bV9jb21wb25lbnRzKSB7XFxuK1xcdFxcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBkc2MtXFx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xcbitcXHRcXHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKTtcXG4rXFx0XFx0aWYgKCFudW1fY29tcG9uZW50cylcXG4rXFx0XFx0XFx0cmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcXG4rXFx0fVxcbitcXG4rXFx0bnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLFxcbitcXHRcXHRcXHQgICAgICAgbGUxNl90b19jcHUocGRzYy1cXHUwMDNlZGV2X2lkZW50Lm1heF9md19zbG90cykpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBwZHNjX2RsX3JlcG9ydF9jb21wb25lbnQocmVxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7XFxuQEAgLTEwNSw4ICsyMDQsOSBAQCBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7XFxuIFxcdFxcXCJmdy5tYWluZndiXFxcIixcXG4gfTtcXG4gXFxuLWludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4tXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3N0YXRpYyBpbnQgcGRzY19kbF9md19saXN0X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuIFxcdFxcdC5md19jb250cm9sLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GV19DT05UUk9MLFxcbkBAIC0xNDAsMTIgKzI0MCw0MSBAQCBpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kbF9pbmZvX2dldF92MShzdHJ1Y3QgZGV2bGluayAqZGwsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0LyogVmVyc2lvbiAxOiByZXBvcnQgZncgZnJvbSBkZXZfaW5mbyAocnVubmluZyBvbmx5KSAqL1xcbitcXHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSwgcGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XFxuK31cXG4rXFxuK2ludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4rXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xcbitcXHRjaGFyIGJ1ZlszMl07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAocGRzYy1cXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKSB7XFxuK1xcdFxcdGVyciA9IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVyciA9IHBkc2NfZGxfaW5mb19nZXRfdjEoZGwsIHJlcSwgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIjB4JXhcXFwiLCBwZHNjLVxcdTAwM2VkZXZfaW5mby5hc2ljX3R5cGUpO1xcbiBcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuY1xcbmluZGV4IGZhNjI2NzE5ZTY4ZDEuLjVjY2YwMTdmNmFmNDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuY1xcbkBAIC0xLDYgKzEsOSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQoYykgMjAyMyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGRtZncuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4rXFxuICNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuIFxcbiAvKiBUaGUgd29yc3QgY2FzZSB3YWl0IGZvciB0aGUgaW5zdGFsbCBhY3Rpdml0eSBpcyBhYm91dCAyNSBtaW51dGVzIHdoZW5cXG5AQCAtMTQsNiArMTcsNTggQEBcXG4gLyogTnVtYmVyIG9mIHBlcmlvZGljIGxvZyB1cGRhdGVzIGR1cmluZyBmdyBmaWxlIGRvd25sb2FkICovXFxuICNkZWZpbmUgUERTQ19GV19JTlRFUlZBTF9GUkFDVElPTlxcdDMyXFxuIFxcbisjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWFxcdFxcdFxcXCJmdy5cXFwiXFxuKyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTiBcXFxcXFxuK1xcdChzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSArIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTilcXG4rXFxuKy8qIERyaXZlci1kZWZpbmVkIGNvbXBvbmVudCB0eXBlIHRvIG5hbWUgbWFwcGluZy5cXG4rICogUERTX0NPUkVfRldfVFlQRV9NQUlOIGlzIE5VTEwgLSBoYW5kbGVkIHNwZWNpYWxseSBhcyBcXFwiZndcXFwiIHdpdGhvdXQgcHJlZml4LlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZHNjX2Z3X3R5cGVfbmFtZXNbXSA9IHtcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfTUFJTl0gICAgICA9IE5VTEwsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX0JPT1RdICAgICAgPSBcXFwiYm9vdGxvYWRlclxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX0NQTERdICAgICAgPSBcXFwiY3BsZFxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRV0gICAgPSBcXFwic2VjdXJlXFxcIixcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfRlBHQV0gICAgICA9IFxcXCJmcGdhXFxcIixcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU5dICA9IFxcXCJzdWNcXFwiLFxcbitcXHRbUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVF0gID0gXFxcInN1Yy5ib290bG9hZGVyXFxcIixcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfVUJPT1RdICAgICA9IFxcXCJ1Ym9vdFxcXCIsXFxuK307XFxuK1xcbitjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKVxcbit7XFxuK1xcdGlmICh0eXBlIFxcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpIFxcdTAwMjZcXHUwMDI2IHBkc2NfZndfdHlwZV9uYW1lc1t0eXBlXSlcXG4rXFx0XFx0cmV0dXJuIHBkc2NfZndfdHlwZV9uYW1lc1t0eXBlXTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3ZvaWQgcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UgaW4gcGRzY19kbF9jb21wb25lbnRfaW5mb19nZXQoKSAqL1xcbitcXHRXUklURV9PTkNFKHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdTggcGRzY19uYW1lX3RvX2Z3X3R5cGUoY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRzaXplX3QgcHJlZml4X2xlbjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBcXFwiZndcXFwiIHdpdGhvdXQgc3VmZml4IG1hcHMgdG8gbWFpbiBmaXJtd2FyZSAqL1xcbitcXHRpZiAoIXN0cmNtcChuYW1lLCBcXFwiZndcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIFBEU19DT1JFX0ZXX1RZUEVfTUFJTjtcXG4rXFxuK1xcdHByZWZpeF9sZW4gPSBzdHJfaGFzX3ByZWZpeChuYW1lLCBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgpO1xcbitcXHRpZiAocHJlZml4X2xlbilcXG4rXFx0XFx0bmFtZSArPSBwcmVmaXhfbGVuO1xcbitcXG4rXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocGRzY19md190eXBlX25hbWVzKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChwZHNjX2Z3X3R5cGVfbmFtZXNbaV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFzdHJjbXAobmFtZSwgcGRzY19md190eXBlX25hbWVzW2ldKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICB1MzIgb2Zmc2V0LCB1MzIgbGVuZ3RoKVxcbiB7XFxuQEAgLTIzLDcgKzc4LDcgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF9md19kb3dubG9hZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxcbiBcXHRcXHQuZndfZG93bmxvYWQuYWRkciA9IGNwdV90b19sZTY0KGFkZHIpLFxcbiBcXHRcXHQuZndfZG93bmxvYWQubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKSxcXG4gXFx0fTtcXG4tXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcDtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbiBcXG4gXFx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbiB9XFxuQEAgLTk1LDkgKzE1MCwxMiBAQCBzdGF0aWMgaW50IHBkc2NfZndfc3RhdHVzX2xvbmdfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbi1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbitzdGF0aWMgaW50XFxuK3Bkc2NfbGVnYWN5X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gcGFyYW1zLVxcdTAwM2VmdztcXG4gXFx0dTMyIGJ1Zl9zeiwgY29weV9zeiwgb2Zmc2V0O1xcbiBcXHRzdHJ1Y3QgZGV2bGluayAqZGw7XFxuIFxcdGludCBuZXh0X2ludGVydmFsO1xcbkBAIC0xMDUsNiArMTYzLDEyIEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdGludCBmd19zbG90O1xcbiBcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRkZXZfaW5mbyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJJbnN0YWxsaW5nIGZpcm13YXJlXFxcXG5cXFwiKTtcXG4gXFxuIFxcdGlmICghcGRzYy1cXHUwMDNlY21kX3JlZ3MpXFxuQEAgLTE5NSwzICsyNTksNzI5IEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgTlVMTCwgMCwgMCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4rXFxuK3N0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2IHtcXG4rXFx0dTE2IGNvbXBvbmVudF9pZDtcXG4rXFx0Ym9vbCBza2lwO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7XFxuK307XFxuK1xcbitzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYge1xcbitcXHRzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7XFxuK1xcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcztcXG4rXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrO1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYztcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBjb21wb25lbnRzO1xcbitcXHRib29sIGNvbXBvbmVudF9mb3VuZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHBkc2NfZnJlZV9md3VfcHJpdihzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2LCAqdG1wO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbXBvbmVudF9wcml2LCB0bXAsIFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wb25lbnRzLFxcbitcXHRcXHRcXHRcXHQgbGlzdF9lbnRyeSkge1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2Y29tcG9uZW50X3ByaXYtXFx1MDAzZWxpc3RfZW50cnkpO1xcbitcXHRcXHRrZnJlZShjb21wb25lbnRfcHJpdik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGRlc2NfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCB1OCAqbWF0Y2gpXFxuK3tcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuK1xcdFxcdC5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsXFxuK1xcdFxcdC5tYXRjaF9yZWNvcmRfZGVzYy52ZXIgPSAxLFxcbitcXHRcXHQubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksXFxuK1xcdFxcdC5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSxcXG4rXFx0fTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFxcdTAwMjZjbWQsIGRlc2NfZGF0YSwgZGVzY19zaXplLFxcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0Km1hdGNoID0gY29tcC5tYXRjaF9yZWNvcmRfZGVzYy5tYXRjaDtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGxkbWZ3X3JlY29yZCAqcmVjb3JkKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdHN0cnVjdCBwbGRtZndfZGVzY190bHYgKmRlc2M7XFxuK1xcbitcXHRpZiAoIXBsZG1md19vcF9wY2lfbWF0Y2hfcmVjb3JkKGNvbnRleHQsIHJlY29yZCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgXFx1MDAyNnJlY29yZC1cXHUwMDNlZGVzY3MsIGVudHJ5KSB7XFxuK1xcdFxcdHU4IG1hdGNoO1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0c3dpdGNoIChkZXNjLVxcdTAwM2V0eXBlKSB7XFxuK1xcdFxcdC8qIHNraXAgdHlwZXMgY2hlY2tlZCBpbiBwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZCAqL1xcbitcXHRcXHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfVkVORE9SX0lEOlxcbitcXHRcXHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOlxcbitcXHRcXHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCVkVORE9SX0lEOlxcbitcXHRcXHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCREVWX0lEOlxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFkZXNjLVxcdTAwM2VzaXplKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRlcnIgPSBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhwZHNjLCBkZXNjLVxcdTAwM2V0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGVzYy1cXHUwMDNlc2l6ZSwgZGVzYy1cXHUwMDNlZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtYXRjaCk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJtYXRjaF9yZWNvcmRfZGVzYyBmYWlsZWQgdHlwZTogMHglMDR4IHNpemU6ICV1LCBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGRlc2MtXFx1MDAzZXR5cGUsIGRlc2MtXFx1MDAzZXNpemUsIGVycik7XFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBhbGwgcmVjb3JkIGRlc2NyaXB0b3JzIG11c3QgbWF0Y2ggKi9cXG4rXFx0XFx0aWYgKCFtYXRjaClcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCB1MTYgbGVuZ3RoLCB1MTYgb2Zmc2V0LCB1MTYgdG90YWxfbGVuKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuc2VuZF9wa2dfZGF0YS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQSxcXG4rXFx0XFx0LnNlbmRfcGtnX2RhdGEudmVyID0gMSxcXG4rXFx0XFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxcbitcXHRcXHQuc2VuZF9wa2dfZGF0YS5kYXRhX2xlbiA9IGNwdV90b19sZTE2KGxlbmd0aCksXFxuK1xcdFxcdC5zZW5kX3BrZ19kYXRhLm9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldCksXFxuK1xcdFxcdC5zZW5kX3BrZ19kYXRhLnRvdGFsX2xlbiA9IGNwdV90b19sZTE2KHRvdGFsX2xlbiksXFxuK1xcdH07XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFxuK1xcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgdTE2IGxlbmd0aClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XFxuK1xcdHU4ICpwYWNrYWdlX2RhdGE7XFxuK1xcdHUzMiBvZmZzZXQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWxlbmd0aClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZGVmZXJyZWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGFja2FnZV9kYXRhID0ga21lbWR1cChkYXRhLCBsZW5ndGgsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBhY2thZ2VfZGF0YSkge1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gZG1hX21hcCBwYWNrYWdlX2RhdGEgbGVuZ3RoIDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCk7XFxuK1xcdFxcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XFxuK1xcdFxcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IFxcdTAwM2MgbGVuZ3RoOyBvZmZzZXQgKz0gUERTX1BBR0VfU0laRSkge1xcbitcXHRcXHR1MzIgY29weV9zejtcXG4rXFxuK1xcdFxcdGNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsIGxlbmd0aCAtIG9mZnNldCk7XFxuK1xcdFxcdGVyciA9IHBkc2NfZGV2Y21kX3NlbmRfcGFja2FnZV9kYXRhKHBkc2MsIGRtYV9hZGRyICsgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29weV9zeiwgb2Zmc2V0LCBsZW5ndGgpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGFcXFwiKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7XFxuK1xcdFxcdHBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRpZiAocGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldLmNvbXBvbmVudF90eXBlID09IHR5cGUpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcGRzY19jb21wb25lbnRfaWRfbWF0Y2hlc190eXBlKHN0cnVjdCBwZHNjICpwZHNjLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1OCBjb21wb25lbnRfaWQsIHU4IHR5cGUpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9XFxuK1xcdFxcdFxcdFxcdTAwMjZwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XFxuK1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGluZm8tXFx1MDAzZWNvbXBvbmVudF90eXBlID09IHR5cGUpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHU4IHBkc2NfZ2V0X2NvbXBvbmVudF90eXBlX2J5X2lkKHN0cnVjdCBwZHNjICpwZHNjLCB1MTYgY29tcG9uZW50X2lkKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxcbitcXHRcXHRcXHRcXHUwMDI2cGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWlkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkKVxcbitcXHRcXHRcXHRyZXR1cm4gaW5mby1cXHUwMDNlY29tcG9uZW50X3R5cGU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHBkc2Nfc2tpcF9jb21wb25lbnQoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHR1MTYgY29tcG9uZW50X2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29tcG9uZW50X3ByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wb25lbnRzLCBsaXN0X2VudHJ5KSB7XFxuK1xcdFxcdGlmIChjb21wb25lbnRfcHJpdi1cXHUwMDNlY29tcG9uZW50X2lkID09IGNvbXBvbmVudF9pZClcXG4rXFx0XFx0XFx0cmV0dXJuIGNvbXBvbmVudF9wcml2LVxcdTAwM2Vza2lwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwbGRtZndfY29tcG9uZW50ICpjb21wb25lbnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTggdHJhbnNmZXJfZmxhZylcXG4re1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7XFxuK1xcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cXHUwMDNlZGV2O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cXHUwMDNlcGRzYztcXG4rXFx0Ym9vbCBza2lwX2NvbXBvbmVudCA9IGZhbHNlO1xcbitcXHR1OCByZXF1ZXN0ZWRfdHlwZSA9IDA7XFxuK1xcdHUxNiBidWZfc3osIHRibF9zejtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRkZXZfZGJnKGRldixcXG4rXFx0XFx0XFxcImNvbXBvbmVudCBuYW1lICVzIGNsYXNzaWZpY2F0aW9uICV1IGlkICV1IGFjdGl2YXRpb25fbWV0aG9kICV1IHZlcl9sZW4gJWQgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXUgdHJhbnNmZXJfZmxhZyAweCUwMnhcXFxcblxcXCIsXFxuK1xcdFxcdHByaXYtXFx1MDAzZXBhcmFtcy1cXHUwMDNlY29tcG9uZW50LCBjb21wb25lbnQtXFx1MDAzZWNsYXNzaWZpY2F0aW9uLFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cXHUwMDNlYWN0aXZhdGlvbl9tZXRob2QsXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4sIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4sXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9zdHJpbmcsIGNvbXBvbmVudC1cXHUwMDNlaW5kZXgsXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNlY29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpO1xcbitcXG4rXFx0Y29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWNvbXBvbmVudF9wcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCkge1xcbitcXHRcXHRyZXF1ZXN0ZWRfdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHByaXYtXFx1MDAzZXBhcmFtcy1cXHUwMDNlY29tcG9uZW50KTtcXG4rXFx0XFx0aWYgKGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllciBcXHUwMDNlIFU4X01BWCB8fFxcbitcXHRcXHQgICAgIXBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShwZHNjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmVxdWVzdGVkX3R5cGUpKSB7XFxuK1xcdFxcdFxcdHNraXBfY29tcG9uZW50ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Z290byBhZGRfY29tcG9uZW50X3ByaXY7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cHJpdi1cXHUwMDNlY29tcG9uZW50X2ZvdW5kID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0YnVmX3N6ID0gc2l6ZW9mKHBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhKTtcXG4rXFx0dGJsX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X3RibCwgdmVyc2lvbl9zdHIsXFxuK1xcdFxcdFxcdCAgICAgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbik7XFxuK1xcdGlmICh0Ymxfc3ogXFx1MDAzZSBidWZfc3opIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR0Ymxfc3osIGJ1Zl9zeik7XFxuK1xcdFxcdGVyciA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcXG4rXFx0fVxcbitcXHRjb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWNvbXBvbmVudF90YmwpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmcmVlX2NvbXBvbmVudF9wcml2O1xcbitcXHR9XFxuK1xcbitcXHRjb21wb25lbnRfdGJsLVxcdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cXG4rXFx0XFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVxcdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcXG4rXFx0Y29tcG9uZW50X3RibC1cXHUwMDNlY2xhc3NpZmljYXRpb24gPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZWNsYXNzaWZpY2F0aW9uKTtcXG4rXFx0Y29tcG9uZW50X3RibC1cXHUwMDNlaWRlbnRpZmllciA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllcik7XFxuK1xcdGNvbXBvbmVudF90YmwtXFx1MDAzZXRyYW5zZmVyX2ZsYWcgPSB0cmFuc2Zlcl9mbGFnO1xcbitcXHRjb21wb25lbnRfdGJsLVxcdTAwM2V2ZXJzaW9uX3N0cl90eXBlID0gY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3R5cGU7XFxuK1xcdGNvbXBvbmVudF90YmwtXFx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW47XFxuK1xcdG1lbWNweShjb21wb25lbnRfdGJsLVxcdTAwM2V2ZXJzaW9uX3N0ciwgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3N0cmluZyxcXG4rXFx0ICAgICAgIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4pO1xcbitcXG4rXFx0Y21kLnNlbmRfY29tcG9uZW50X3RibC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMO1xcbitcXHRjbWQuc2VuZF9jb21wb25lbnRfdGJsLnZlciA9IDE7XFxuK1xcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDtcXG4rXFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBcXHUwMDI2Y21kLCBjb21wb25lbnRfdGJsLCB0Ymxfc3osXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbitcXHRrZnJlZShjb21wb25lbnRfdGJsKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCBzZW5kaW5nIGNvbXBvbmVudCB0YWJsZTogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRFUlJfUFRSKGVycikpO1xcbitcXHRcXHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XFxuK1xcdH1cXG4rXFxuK1xcdHNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTtcXG4rXFxuK2FkZF9jb21wb25lbnRfcHJpdjpcXG4rXFx0Y29tcG9uZW50X3ByaXYtXFx1MDAzZXNraXAgPSBza2lwX2NvbXBvbmVudDtcXG4rXFx0Y29tcG9uZW50X3ByaXYtXFx1MDAzZWNvbXBvbmVudF9pZCA9IGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllcjtcXG4rXFx0bGlzdF9hZGQoXFx1MDAyNmNvbXBvbmVudF9wcml2LVxcdTAwM2VsaXN0X2VudHJ5LCBcXHUwMDI2cHJpdi1cXHUwMDNlY29tcG9uZW50cyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfY29tcG9uZW50X3ByaXY6XFxuK1xcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sXFxuK1xcdFxcdC5nZXRfY29tcG9uZW50X2luZm8udmVyID0gMSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gKmxpc3RfaW5mbztcXG4rXFx0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHR1OCBudW1fY29tcG9uZW50cztcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdGRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkKTtcXG4rXFx0aWYgKCFkZWZlcnJlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRsaXN0X2luZm8gPSBremFsbG9jKFBEU19QQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWxpc3RfaW5mbykge1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHBkc2MtXFx1MDAzZWRldiwgbGlzdF9pbmZvLCBQRFNfUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHQgIERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdGlmIChkbWFfbWFwcGluZ19lcnJvcihwZHNjLVxcdTAwM2VkZXYsIGRtYV9hZGRyKSkge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRQRFNfUEFHRV9TSVpFKTtcXG4rXFx0XFx0a2ZyZWUobGlzdF9pbmZvKTtcXG4rXFx0XFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0Y21kLmdldF9jb21wb25lbnRfaW5mby5kYXRhX2xlbiA9IGNwdV90b19sZTE2KFBEU19QQUdFX1NJWkUpO1xcbitcXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XFxuK1xcbitcXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQgKiAyKTtcXG4rXFx0aWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7XFxuK1xcdFxcdHBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsIGxpc3RfaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUERTX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRkbWFfdW5tYXBfc2luZ2xlKHBkc2MtXFx1MDAzZWRldiwgZG1hX2FkZHIsIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9PSAwKSB7XFxuK1xcdFxcdC8qIERvbid0IHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyB2ZXJzaW9uIDAgaGFzXFxuK1xcdFxcdCAqIGFsaWdubWVudCBpc3N1ZXMsIHNvIGdpdmUgYSBoaW50IHRvIHVzZXJzIHRvIHVwZGF0ZVxcbitcXHRcXHQgKiB0aGVpciBmaXJtd2FyZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X3dhcm5fb25jZShwZHNjLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJJbmNvbXBhdGlibGUgZ2V0X2NvbXBvbmVudF9pbmZvIHZlcnNpb24gJXUgcmVwb3J0ZWQgYnkgZmlybXdhcmVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlcik7XFxuK1xcdFxcdGVyciA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRudW1fY29tcG9uZW50cyA9IGxpc3RfaW5mby1cXHUwMDNlbnVtX2NvbXBvbmVudHM7XFxuK1xcdGlmIChudW1fY29tcG9uZW50cyBcXHUwMDNlIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9MSVNUX0xFTikge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyA9IG51bV9jb21wb25lbnRzO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxcbitcXHRcXHRcXHRcXHUwMDI2cGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldO1xcbitcXG4rXFx0XFx0bWVtY3B5KGluZm8sIFxcdTAwMjZsaXN0X2luZm8tXFx1MDAzZWluZm9baV0sIHNpemVvZigqaW5mbykpO1xcbitcXHRcXHRpbmZvLVxcdTAwM2V2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIC0gMV0gPSAwO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAtIDFdID0gMDtcXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRrZnJlZShsaXN0X2luZm8pO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHN0cnVjdCBwZHNjICpwZHNjLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICB1MTYgaW5mb19zeiwgZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuZ3RoLFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgb2Zmc2V0LCB1MTYgc2xvdF9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApXFxuK3tcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQsXFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC52ZXIgPSAxLFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQub3BlcmF0aW9uID0gUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQsXFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksXFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC5kYXRhX2xlbiA9IGNwdV90b19sZTMyKGxlbmd0aCksXFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpLFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQuc2xvdF9pZCA9IHNsb3RfaWQsXFxuK1xcdH07XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDMwMCAqIEhaO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzdGFydF90aW1lID0gamlmZmllcztcXG4rXFx0ZW5kX3RpbWUgPSBzdGFydF90aW1lICsgdGltZW91dDtcXG4rXFx0ZG8ge1xcbitcXHRcXHQvKiBwcmV2ZW50IG5vaXN5L2JlbmlnbiBkZXZjbWQgZmFpbHVyZXMgKi9cXG4rXFx0XFx0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHBkc2MsIFxcdTAwMjZjbWQsIGluZm8sIGluZm9fc3osXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29tcCwgNjApO1xcbitcXHRcXHRpZiAoZXJyICE9IC1FQUdBSU4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogaWYgcmVxdWlyZWQsIHN1YnNlcXVlbnQgY29tbWFuZHMgY2hlY2sgc3RhdHVzIG9mXFxuK1xcdFxcdCAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBjb21tYW5kLCB3aGljaCByZXR1cm5zXFxuK1xcdFxcdCAqIEVBR0FJTiB3aGlsZSB0aGUgY29tbWFuZCBpcyBzdGlsbCBydW5uaW5nLFxcbitcXHRcXHQgKiBlbHNlIHdlIGdldCB0aGUgZmluYWwgY29tbWFuZCBzdGF0dXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjbWQuc2VuZF9jb21wb25lbnQub3BlcmF0aW9uID0gUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTO1xcbitcXHRcXHRtc2xlZXAoMjApO1xcbitcXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpO1xcbitcXG4rXFx0aWYgKGVyciA9PSAtRUFHQUlOIHx8IGVyciA9PSAtRVRJTUVET1VUKVxcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIlBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCB0aW1lZCBvdXRcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2ZsYXNoX2NvbXBvbmVudF9jaHVuayhzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IGRldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgb2Zmc2V0LCB1OCBzbG90X2lkLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkO1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHR1OCAqY29tcG9uZW50X2RhdGE7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZGVmZXJyZWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Y29tcG9uZW50X2RhdGEgPSBrbWVtZHVwKGRhdGEsIGNvcHlfc3osIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWNvbXBvbmVudF9kYXRhKSB7XFxuK1xcdFxcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkge1xcbitcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9kYXRhIGF0IG9mZnNldCAweCV4IGNvcHlfc3ogMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0b2Zmc2V0LCBjb3B5X3N6KTtcXG4rXFx0XFx0a2ZyZWUoY29tcG9uZW50X2RhdGEpO1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChwZHNjLCBpbmZvLCBpbmZvX3N6LCBkbWFfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0IGNvcHlfc3osIG9mZnNldCwgc2xvdF9pZCwgY29tcCk7XFxuK1xcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcXG4rXFx0a2ZyZWUoY29tcG9uZW50X2RhdGEpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2ZsYXNoX2NvbXBvbmVudChzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50KVxcbit7XFxuK1xcdGNoYXIgY29tcG9uZW50X25hbWVfYnVmW1BEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU5dO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqY29tcG9uZW50X2luZm87XFxuK1xcdGNvbnN0IGNoYXIgKmNvbXBvbmVudF9uYW1lID0gTlVMTDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdHUxNiBidWZfc3osIGluZm9fc3o7XFxuK1xcdHN0cnVjdCBkZXZsaW5rICpkbDtcXG4rXFx0dTggY29tcG9uZW50X3R5cGU7XFxuK1xcdHUzMiB0b3RhbF9sZW47XFxuK1xcdHUzMiBvZmZzZXQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRjb21wb25lbnRfdHlwZSA9IHBkc2NfZ2V0X2NvbXBvbmVudF90eXBlX2J5X2lkKHBkc2MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIpO1xcbitcXHRpZiAoY29tcG9uZW50X3R5cGUpIHtcXG4rXFx0XFx0Y29uc3QgY2hhciAqdHlwZV9uYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoY29tcG9uZW50X3R5cGUpO1xcbitcXG4rXFx0XFx0aWYgKGNvbXBvbmVudF90eXBlID09IFBEU19DT1JFX0ZXX1RZUEVfTUFJTikge1xcbitcXHRcXHRcXHRjb21wb25lbnRfbmFtZSA9IFxcXCJmd1xcXCI7XFxuK1xcdFxcdH0gZWxzZSBpZiAodHlwZV9uYW1lKSB7XFxuK1xcdFxcdFxcdHNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksXFxuK1xcdFxcdFxcdFxcdCBcXFwiJXMlc1xcXCIsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTtcXG4rXFx0XFx0XFx0Y29tcG9uZW50X25hbWUgPSBjb21wb25lbnRfbmFtZV9idWY7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XFxuK1xcbitcXHRpZiAocGRzY19za2lwX2NvbXBvbmVudChwcml2LCBjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIpKSB7XFxuK1xcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFxcXCJTa2lwcGVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0dG90YWxfbGVuID0gY29tcG9uZW50LVxcdTAwM2Vjb21wb25lbnRfc2l6ZTtcXG4rXFx0ZGV2X2RiZyhkZXYsXFxuK1xcdFxcdFxcXCJjb21wb25lbnQgbmFtZSAlcyBjbGFzcyAldSBpZCAldSBhY3RfbWV0aCAldSB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldVxcXFxuXFxcIixcXG4rXFx0XFx0Y29tcG9uZW50X25hbWUgPzogXFxcIih1bmtub3duKVxcXCIsIGNvbXBvbmVudC1cXHUwMDNlY2xhc3NpZmljYXRpb24sXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllciwgY29tcG9uZW50LVxcdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcXG4rXFx0XFx0Y29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbiwgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3N0cmluZyxcXG4rXFx0XFx0Y29tcG9uZW50LVxcdTAwM2VpbmRleCwgY29tcG9uZW50LVxcdTAwM2Vjb21wb25lbnRfc2l6ZSk7XFxuK1xcbitcXHRidWZfc3ogPSBzaXplb2YocGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWRhdGEpO1xcbitcXHRpbmZvX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X2luZm8sIHZlcnNpb25fc3RyLFxcbitcXHRcXHRcXHQgICAgICBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuKTtcXG4rXFx0aWYgKGluZm9fc3ogXFx1MDAzZSBidWZfc3opIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aW5mb19zeiwgYnVmX3N6KTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcdH1cXG4rXFx0Y29tcG9uZW50X2luZm8gPSB2emFsbG9jKGluZm9fc3opO1xcbitcXHRpZiAoIWNvbXBvbmVudF9pbmZvKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cXG4rXFx0XFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVxcdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcXG4rXFx0Y29tcG9uZW50X2luZm8tXFx1MDAzZWltYWdlX3NpemUgPSBjcHVfdG9fbGUzMih0b3RhbF9sZW4pO1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNlY2xhc3NpZmljYXRpb24gPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZWNsYXNzaWZpY2F0aW9uKTtcXG4rXFx0Y29tcG9uZW50X2luZm8tXFx1MDAzZWlkZW50aWZpZXIgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIpO1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNlb3B0aW9ucyA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cXHUwMDNlb3B0aW9ucyk7XFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2V2ZXJzaW9uX3N0cl90eXBlID0gY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3R5cGU7XFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2V2ZXJzaW9uX3N0cl9sZW4gPSBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuO1xcbitcXHRtZW1jcHkoY29tcG9uZW50X2luZm8tXFx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fc3RyaW5nLFxcbitcXHQgICAgICAgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbik7XFxuK1xcbitcXHRvZmZzZXQgPSAwO1xcbitcXHR3aGlsZSAob2Zmc2V0IFxcdTAwM2MgdG90YWxfbGVuKSB7XFxuK1xcdFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0XFx0dTE2IGNvcHlfc3o7XFxuK1xcbitcXHRcXHRjb3B5X3N6ID0gbWluX3QodW5zaWduZWQgaW50LCBQRFNfUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHR0b3RhbF9sZW4gLSBvZmZzZXQpO1xcbitcXG4rXFx0XFx0ZXJyID0gcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsocGRzYywgZGV2LCBjb21wb25lbnRfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGluZm9fc3osXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb21wb25lbnQtXFx1MDAzZWNvbXBvbmVudF9kYXRhICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG9mZnNldCwgY29weV9zeiwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgUERTX0NPUkVfRldfU0xPVF9JTlZBTElELFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmNvbXApO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT1cXG4rXFx0XFx0ICAgICBQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfSURFTlRJQ0FMIHx8XFxuK1xcdFxcdCAgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PVxcbitcXHRcXHQgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUikpIHtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXFxcIlNraXBwZWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjb21wb25lbnRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgMCwgMCk7XFxuK1xcdFxcdFxcdGdvdG8gc2tpcF9jb21wb25lbnQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byBmbGFzaCBjb21wb25lbnRcXFwiKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZmZzZXQgKz0gY29weV9zejtcXG4rXFx0XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIkVyYXNpbmcvRmxhc2hpbmdcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjb21wb25lbnRfbmFtZSwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICB0b3RhbF9sZW4pO1xcbitcXHR9XFxuK1xcbitcXHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX291dDpcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkVyYXNpbmcvRmxhc2hpbmcgQ29tcG9uZW50IEZhaWxlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcXG4rc2tpcF9jb21wb25lbnQ6XFxuK1xcdHZmcmVlKGNvbXBvbmVudF9pbmZvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuK1xcdFxcdC5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSxcXG4rXFx0XFx0LmZpbmFsaXplX3VwZGF0ZS52ZXIgPSAxLFxcbitcXHR9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcbitcXHRyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2ZpbmFsaXplX3VwZGF0ZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xcbitcXHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtXFx1MDAzZXBhcmFtcy1cXHUwMDNlY29tcG9uZW50O1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cXHUwMDNlcGRzYztcXG4rXFx0c3RydWN0IGRldmxpbmsgKmRsO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XFxuK1xcbitcXHRzdGFydF90aW1lID0gamlmZmllcztcXG4rXFx0ZW5kX3RpbWUgPSBzdGFydF90aW1lICsgKFBEU0NfRldfSU5TVEFMTF9USU1FT1VUICogSFopO1xcbitcXHRkbyB7XFxuK1xcdFxcdGVyciA9IHBkc2NfZGV2Y21kX2ZpbmFsaXplX3VwZGF0ZShwZHNjKTtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRUFHQUlOKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGRldl9kYmcoZGV2LCBcXFwicmV0cnlpbmcgZmluYWxpemVfdXBkYXRlOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIoZXJyKSk7XFxuK1xcdFxcdG1zbGVlcCgyMCk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSBcXHUwMDI2XFx1MDAyNiBlcnIgPT0gLUVBR0FJTik7XFxuK1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFxcXCJGaW5hbGl6ZSBVcGRhdGUgRmFpbGVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QocHJpdi1cXHUwMDNlZXh0YWNrLCBcXFwiRmluYWxpemUgdXBkYXRlIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcXFwiRmluYWxpemVkIFVwZGF0ZVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7XFxuK1xcdC5tYXRjaF9yZWNvcmQgPSBwZHNjX21hdGNoX3JlY29yZF9kZXNjcyxcXG4rXFx0LnNlbmRfcGFja2FnZV9kYXRhID0gcGRzY19zZW5kX3BhY2thZ2VfZGF0YSxcXG4rXFx0LnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSxcXG4rXFx0LmZsYXNoX2NvbXBvbmVudCA9IHBkc2NfZmxhc2hfY29tcG9uZW50LFxcbitcXHQuZmluYWxpemVfdXBkYXRlID0gcGRzY19maW5hbGl6ZV91cGRhdGVcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuK3tcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2IHByaXYgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghcGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cykge1xcbitcXHRcXHRlcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIGdldCBjb21wb25lbnQgaW5mb1xcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCkge1xcbitcXHRcXHR1OCB0eXBlID0gcGRzY19uYW1lX3RvX2Z3X3R5cGUocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpO1xcbitcXG4rXFx0XFx0aWYgKCF0eXBlIHx8ICFwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhwZHNjLCB0eXBlKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiVW5rbm93biBjb21wb25lbnQgbmFtZVxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cHJpdi5jb21wb25lbnRzKTtcXG4rXFx0cHJpdi5jb250ZXh0Lm9wcyA9IFxcdTAwMjZwZHNjX3BsZG1md19vcHM7XFxuK1xcdHByaXYuY29udGV4dC5kZXYgPSBwZHNjLVxcdTAwM2VkZXY7XFxuK1xcdHByaXYucGFyYW1zID0gcGFyYW1zO1xcbitcXHRwcml2LmV4dGFjayA9IGV4dGFjaztcXG4rXFx0cHJpdi5wZHNjID0gcGRzYztcXG4rXFxuK1xcdGVyciA9IHBsZG1md19mbGFzaF9pbWFnZShcXHUwMDI2cHJpdi5jb250ZXh0LCBmdyk7XFxuK1xcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHBhcmFtcy1cXHUwMDNlY29tcG9uZW50IFxcdTAwMjZcXHUwMDI2ICFwcml2LmNvbXBvbmVudF9mb3VuZCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiUmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFx0cGRzY19mcmVlX2Z3dV9wcml2KFxcdTAwMjZwcml2KTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKHBkc2MtXFx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFxcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGRzYy1cXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcXHUwMDI2XFxuK1xcdFxcdGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEUpKVxcbitcXHRcXHRlcnIgPSBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWZ3KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xcbitcXG4rXFx0LyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi9cXG4rXFx0cGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUocGRzYyk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXFxuaW5kZXggOGQ5NGE0ZDcwMzk1ZS4uNWUxYjA3ODUwMTYzYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xcbkBAIC0yMSw2ICsyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZHNjX2lkX3RhYmxlW10gPSB7XFxuIH07XFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwZHNjX2lkX3RhYmxlKTtcXG4gXFxuK3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4rXFxuIHN0YXRpYyB2b2lkIHBkc2Nfd2R0aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHRpbWVyX2NvbnRhaW5lcl9vZihwZHNjLCB0LCB3ZHRpbWVyKTtcXG5AQCAtMzE1LDYgKzMxNyw3IEBAIHN0YXRpYyBpbnQgcGRzY19pbml0X3BmKHN0cnVjdCBwZHNjICpwZHNjKVxcbiBcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShwZHNjLVxcdTAwM2V3cSk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBkc2MtXFx1MDAzZWNvbmZpZ19sb2NrKTtcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGRzYy1cXHUwMDNlZGV2Y21kX2xvY2spO1xcbitcXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xcbiBcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZHNjLVxcdTAwM2VwZGV2KTtcXG4gZXJyX291dF91bm1hcF9iYXJzOlxcbiBcXHRwZHNjX3VubWFwX2JhcnMocGRzYyk7XFxuQEAgLTM1Myw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdHBkc2MtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbiBcXHRwZHNjLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiBcXHRzZXRfYml0KFBEU0NfU19JTklUSU5HX0RSSVZFUiwgXFx1MDAyNnBkc2MtXFx1MDAzZXN0YXRlKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9saXN0KTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHBkc2MpO1xcbiBcXHRwZHNjX2RlYnVnZnNfYWRkX2RldihwZHNjKTtcXG4gXFxuQEAgLTQ1OCw2ICs0NjMsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0fVxcbiBcXG4gXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xcbiBcXG4gXFx0aWRhX2ZyZWUoXFx1MDAyNnBkc2NfaWRhLCBwZHNjLVxcdTAwM2V1aWQpO1xcbiBcXHRwZHNjX2RlYnVnZnNfZGVsX2RldihwZHNjKTtcXG5AQCAtNTA1LDYgKzUxMSw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0cGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTtcXG4gXFx0aWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKVxcbiBcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaCBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcXG5pbmRleCAxN2E4N2MxYTU1ZDdjLi45MDFlMWU2MjhmODkwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXFxuQEAgLTQwLDYgKzQwLDE0IEBAIGVudW0gcGRzX2NvcmVfY21kX29wY29kZSB7XFxuIFxcdFBEU19DT1JFX0NNRF9GV19ET1dOTE9BRFxcdD0gNCxcXG4gXFx0UERTX0NPUkVfQ01EX0ZXX0NPTlRST0xcXHRcXHQ9IDUsXFxuIFxcbitcXHRQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXFx0PSA2LFxcbitcXHRQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQVxcdD0gNyxcXG4rXFx0UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFxcdD0gOCxcXG4rXFx0UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UXFx0PSA5LFxcbitcXHRQRFNfQ09SRV9DTURfRklOQUxJWkVfVVBEQVRFXFx0PSAxMCxcXG4rXFx0UERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXFx0PSAxMSxcXG4rXFx0UERTX0NPUkVfQ01EX0hPU1RfTUVNXFx0XFx0PSAxMixcXG4rXFxuIFxcdC8qIFNSL0lPViBjb21tYW5kcyAqL1xcbiBcXHRQRFNfQ09SRV9DTURfVkZfR0VUQVRUUlxcdFxcdD0gNjAsXFxuIFxcdFBEU19DT1JFX0NNRF9WRl9TRVRBVFRSXFx0XFx0PSA2MSxcXG5AQCAtMTAwLDYgKzEwOCwxNiBAQCBzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IHtcXG4gXFx0Y2hhciAgIGRyaXZlcl92ZXJfc3RyWzMyXTtcXG4gfTtcXG4gXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IC0gRGV2aWNlIGNhcGFiaWxpdGllc1xcbisgKiBAUERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURTogRGV2aWNlIG9ubHkgc3VwcG9ydHMgRlcgdXBkYXRlIHZpYSBQTERNXFxuKyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZVxcbisgKi9cXG4rZW51bSBwZHNfY29yZV9kZXZfY2FwYWJpbGl0eSB7XFxuK1xcdFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEUgPSBCSVQoMCksXFxuK1xcdFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0gPSBCSVQoMSksXFxuK307XFxuK1xcbiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVhcXHQxNlxcbiAvKipcXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvblxcbkBAIC0xMTksNiArMTM3LDExIEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkge1xcbiAgKlxcdFxcdCAgICAgIHZhbHVlIGluIHVzZWNzIHRvIGRldmljZSB1bml0cyB1c2luZzpcXG4gICpcXHRcXHQgICAgICBkZXZpY2UgdW5pdHMgPSB1c2VjcyAqIG11bHQgLyBkaXZcXG4gICogQHZpZl90eXBlczogICAgICAgIEhvdyBtYW55IG9mIGVhY2ggVklGIGRldmljZSB0eXBlIGlzIHN1cHBvcnRlZFxcbisgKiBAbWF4X2Z3X3Nsb3RzOiAgICAgTnVtYmVyIG9mIGZpcm13YXJlIGNvbXBvbmVudHMgcmVwb3J0ZWQgYnkgZGV2aWNlXFxuKyAqXFx0XFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzJcXG4rICogQHJzdmQyOlxcdCAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAY2FwYWJpbGl0aWVzOiAgICAgRGV2aWNlIGNhcGFiaWxpdGllc1xcbisgKlxcdFxcdCAgICAgIG9ubHkgc3VwcG9ydGVkIG9uIHZlcnNpb24gXFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXFxuICAqL1xcbiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHtcXG4gXFx0dTggICAgIHZlcnNpb247XFxuQEAgLTEzMSw5ICsxNTQsMTMgQEAgc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7XFxuIFxcdF9fbGUzMiBpbnRyX2NvYWxfbXVsdDtcXG4gXFx0X19sZTMyIGludHJfY29hbF9kaXY7XFxuIFxcdF9fbGUxNiB2aWZfdHlwZXNbUERTX0RFVl9UWVBFX01BWF07XFxuK1xcdF9fbGUxNiBtYXhfZndfc2xvdHM7XFxuK1xcdHU4ICAgICByc3ZkMls2XTtcXG4rXFx0X19sZTY0IGNhcGFiaWxpdGllcztcXG4gfTtcXG4gXFxuICNkZWZpbmUgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xXFx0MVxcbisjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxcdDJcXG4gXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aWZ5X2NtZCAtIERyaXZlci9kZXZpY2UgaWRlbnRpZnkgY29tbWFuZFxcbkBAIC0yNzUsMTEgKzMwMiwyMCBAQCBlbnVtIHBkc19jb3JlX2Z3X2NvbnRyb2xfb3BlciB7XFxuIFxcdFBEU19DT1JFX0ZXX0dFVF9MSVNUICAgICAgICAgICAgICAgPSA3LFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGVudW0gcGRzX2NvcmVfZndfc2xvdCAtIEZpcm13YXJlIHNsb3QgaWRlbnRpZmllcnNcXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDogTGV0IGZpcm13YXJlIHNlbGVjdCBzbG90IGJhc2VkIG9uIHBhY2thZ2UgbWV0YWRhdGFcXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfQTogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEFcXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfQjogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEJcXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfR09MRDogICAgR29sZC9yZWNvdmVyeSBmaXJtd2FyZSBzbG90XFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX01BWDogICAgIFNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgbm8gc2xvdCByZXNvbHZlZFxcbisgKi9cXG4gZW51bSBwZHNfY29yZV9md19zbG90IHtcXG4gXFx0UERTX0NPUkVfRldfU0xPVF9JTlZBTElEICAgID0gMCxcXG4gXFx0UERTX0NPUkVfRldfU0xPVF9BXFx0ICAgID0gMSxcXG4gXFx0UERTX0NPUkVfRldfU0xPVF9CICAgICAgICAgID0gMixcXG4gXFx0UERTX0NPUkVfRldfU0xPVF9HT0xEICAgICAgID0gMyxcXG4rXFx0UERTX0NPUkVfRldfU0xPVF9NQVggICAgICAgID0gMHhmZixcXG4gfTtcXG4gXFxuIC8qKlxcbkBAIC00NDYsNiArNDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHtcXG4gXFx0dThcXHRzdGF0dXM7XFxuIH07XFxuIFxcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kIC0gU2VuZCBwYWNrYWdlIGRhdGEgY29tbWFuZFxcbisgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHRvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIHRoZSBwYWNrYWdlIGRhdGFcXG4rICogQG9mZnNldDogT2Zmc2V0IGluIHRoZSBwYWNrYWdlIGRhdGEsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzIGFyZVxcbisgKlxcdCAgICBuZWVkZWQgZm9yIHNlbmRpbmcgdGhlIHBhY2thZ2UgZGF0YVxcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiBkYXRhIHN0b3JlZCBhdCBkYXRhX3BhXFxuKyAqIEBkYXRhX3BhOiBEYXRhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSB0byBkZXZpY2VcXG4rICpcXG4rICogVGhlIHBhY2thZ2UgZGF0YSBtYXkgYmUgdG9vIGxhcmdlIHRvIHN0b3JlIGluIGEgc2luZ2xlIGJ1ZmZlciwgc28gbXVsdGlwbGVcXG4rICogUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kIHtcXG4rXFx0dTggb3Bjb2RlO1xcbitcXHR1OCB2ZXI7XFxuK1xcdF9fbGUxNiB0b3RhbF9sZW47XFxuK1xcdF9fbGUxNiBvZmZzZXQ7XFxuK1xcdF9fbGUxNiBkYXRhX2xlbjtcXG4rXFx0X19sZTY0IGRhdGFfcGE7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbXBsZXRpb25cXG4rICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAtIENvbXBvbmVudCB0YWJsZSBkZXRhaWxzXFxuKyAqIEBjb21wYXJpc29uX3N0YW1wOiBDb21wYXJpc29uIHN0YW1wIHVzZWQgZm9yIGNvbXBvbmVudCB2ZXJzaW9uIGNoZWNrc1xcbisgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvXFxuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxcbisgKiBAdHJhbnNmZXJfZmxhZzogUGFydCBvZiB0aGUgY29tcG9uZW50IHRhYmxlIHRoaXMgcmVxdWVzdCByZXByZXNlbnRzXFxuKyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkXFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcXG4rICogQHZlcnNpb25fc3RyOiBDb21wb25lbnQgdmVyc2lvbiBpbmZvcm1hdGlvblxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90Ymwge1xcbitcXHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcXG4rXFx0X19sZTE2IGNsYXNzaWZpY2F0aW9uO1xcbitcXHRfX2xlMTYgaWRlbnRpZmllcjtcXG4rXFx0dTggICAgIHRyYW5zZmVyX2ZsYWc7XFxuK1xcdHU4ICAgICB2ZXJzaW9uX3N0cl90eXBlO1xcbitcXHR1OCAgICAgdmVyc2lvbl9zdHJfbGVuO1xcbitcXHR1OCAgICAgdmVyc2lvbl9zdHJbXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbW1hbmRcXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqXFxuKyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpXFxuKyAqIGluIGNtZF9yZWdzLVxcdTAwM2VkYXRhLiAgRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxcbisgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggc2xvdF9pZDtcXG4rXFx0dTggcnN2ZDtcXG4rfTtcXG4rXFxuK2VudW0gcGRzX2NvcmVfY29tcG9uZW50X3Jlc3BfY29kZSB7XFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9WQUxJRCA9IDB4MCxcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCA9IDB4MSxcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0xPV0VSID0gMHgyLFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfT1JfVkVSU0lPTl9JTlZBTElEID0gMHgzLFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfQ09ORkxJQ1QgPSAweDQsXFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9QUkVSRVFTX05PVF9NRVQgPSAweDUsXFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9OT1RfU1VQUE9SVEVEID0gMHg2LFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfRldfVFlQRV9JTlZBTElEID0gMHhkMCxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wb25lbnQgY29tcGxldGlvbiBjb2RlXFxuKyAqIEByZXNwb25zZTogQ29tcG9uZW50IHJlc3BvbnNlXFxuKyAqIEByZXNwb25zZV9jb2RlOiBDb21wb25lbnQgcmVzcG9uc2UgY29kZVxcbisgKiBAc2xvdF9pZDogQWN0dWFsIHNsb3RfaWQgb2YgdGhlIGNvbXBvbmVudCAoZW51bSBwZHNfY29yZV9md19zbG90KVxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggY29tcGxldGlvbl9jb2RlO1xcbitcXHR1OCByZXNwb25zZTtcXG4rXFx0dTggcmVzcG9uc2VfY29kZTtcXG4rXFx0dTggc2xvdF9pZDtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvblxcbisgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQ6IEluaXRpYWwgb3BlcmF0aW9uIHRvIHN0YXJ0IHRyYW5zZmVyXFxuKyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVM6IFN1YnNlcXVlbnQgY2FsbHMgdG8gY2hlY2sgb24gc3RhdHVzXFxuKyAqL1xcbitlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIHtcXG4rXFx0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQgPSAwLFxcbitcXHRQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVMgPSAxLFxcbit9O1xcbitcXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfSURfSU5WQUxJRCAweEZGRkZcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgLSBDb21wb25lbnQgZGV0YWlsc1xcbisgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3NcXG4rICogQGltYWdlX3NpemU6IENvbXBvbmVudCBpbWFnZSBzaXplXFxuKyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm9cXG4rICogQGlkZW50aWZpZXI6IENvbXBvbmVudCdzIElEXFxuKyAqIEBvcHRpb25zOiBDb21wb25lbnQgb3B0aW9uc1xcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkXFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcXG4rICogQHZlcnNpb25fc3RyOiBDb21wb25lbnQgdmVyc2lvbiBpbmZvcm1hdGlvblxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCB7XFxuK1xcdF9fbGUzMiBjb21wYXJpc29uX3N0YW1wO1xcbitcXHRfX2xlMzIgaW1hZ2Vfc2l6ZTtcXG4rXFx0X19sZTE2IGNsYXNzaWZpY2F0aW9uO1xcbitcXHRfX2xlMTYgaWRlbnRpZmllcjtcXG4rXFx0X19sZTE2IG9wdGlvbnM7XFxuK1xcdHU4IHJzdmRbM107XFxuK1xcdHU4IHZlcnNpb25fc3RyX3R5cGU7XFxuK1xcdHU4IHZlcnNpb25fc3RyX2xlbjtcXG4rXFx0dTggdmVyc2lvbl9zdHJbXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY21kIC0gU2VuZCBjb21wb25lbnQgY29tbWFuZFxcbisgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxcbisgKiBAb3BlcmF0aW9uOiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wXFxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzXFxuKyAqXFx0ICAgIGFyZSBuZWVkZWQgZm9yIGEgc2luZ2xlIGNvbXBvbmVudFxcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBzdG9yZWQgYXQgQGRhdGFfcGFcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgdGhlIGNvbXBvbmVudFxcbisgKlxcbisgKiBBIGNvbXBvbmVudCBtYXkgYmUgdG9vIGxhcmdlIHRvIHN0b3JlIGluIGEgc2luZ2xlIGJ1ZmZlciwgc28gbXVsdGlwbGVcXG4rICogUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIGRldmNtZHMgbWF5IGJlIG5lZWRlZC5cXG4rICpcXG4rICogRXhwZWN0cyB0byBmaW5kIGZsYXNoIGNvbXBvbmVudCBpbmZvIChzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50KVxcbisgKiBpbiBjbWRfcmVncy1cXHUwMDNlZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxcbisgKiB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhlIGZsYXNoIGNvbXBvbmVudCBpbmZvLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHR1OCBzbG90X2lkO1xcbitcXHR1OCBvcGVyYXRpb247XFxuK1xcdF9fbGUzMiBvZmZzZXQ7XFxuK1xcdF9fbGUzMiBkYXRhX2xlbjtcXG4rXFx0dTggcnN2ZFs0XTtcXG4rXFx0X19sZTY0IGRhdGFfcGE7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgLSBTZW5kIGNvbXBvbmVudCBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wbGV0aW9uIGNvZGVcXG4rICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZClcXG4rICogQGNvbXBhdF9yZXNwb25zZV9jb2RlOiBDb21wYXRpYmlsaXR5IHJlc3BvbnNlIGNvZGVcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggY29tcGxldGlvbl9jb2RlO1xcbitcXHR1OCBjb21wYXRfcmVzcG9uc2U7XFxuK1xcdHU4IGNvbXBhdF9yZXNwb25zZV9jb2RlO1xcbitcXHR1OCByc3ZkWzNdO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUgLSBGaXJtd2FyZSBjb21wb25lbnQgdHlwZVxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX01BSU46IE1haW4gZmlybXdhcmVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfQk9PVDogQm9vdCBsb2FkZXJcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZVxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9TRUNVUkU6IFNlY3VyZSBmaXJtd2FyZVxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9GUEdBOiBGUEdBIGNvbmZpZ3VyYXRpb25cXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1Q6IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgYm9vdGxvYWRlclxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9VQk9PVDogVS1Cb290IGJvb3Rsb2FkZXJcXG4rICpcXG4rICogR29sZC9yZWNvdmVyeSB2YXJpYW50cyBhcmUgaWRlbnRpZmllZCBieSBzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRFxcbisgKiBhbmQgcmVwb3J0ZWQgd2l0aCBhIFxcXCIuZ29sZFxcXCIgc3VmZml4IChlLmcuLCBmdy5nb2xkKS5cXG4rICovXFxuK2VudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUge1xcbitcXHRQRFNfQ09SRV9GV19UWVBFX1VOS05PV04gICA9IDAsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfTUFJTiAgICAgID0gMSxcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9CT09UICAgICAgPSAyLFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX0NQTEQgICAgICA9IDMsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFICAgID0gNCxcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9GUEdBICAgICAgPSA1LFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOICA9IDYsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1QgID0gNyxcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9VQk9PVCAgICAgPSA4LFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFnc1xcbisgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HOiBDb21wb25lbnQgaXMgY3VycmVudGx5IHJ1bm5pbmdcXG4rICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUDogQ29tcG9uZW50IHZlcnNpb24gb24gbmV4dCBGVyBib290XFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkXFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FOiBDb21wb25lbnQgY2FuIGJlIHVwZGF0ZWRcXG4rICpcXHRieSBuYW1lXFxuKyAqL1xcbitlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIHtcXG4rXFx0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HID0gQklUKDApLFxcbitcXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksXFxuK1xcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQgPSBCSVQoMiksXFxuK1xcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUgPSBCSVQoMyksXFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGVudHJ5XFxuKyAqIEBuYW1lOiBDb21wb25lbnQncyBuYW1lXFxuKyAqIEBjb21wb25lbnRfdHlwZTogZW51bSBwZHNfY29yZV9md19jb21wb25lbnRfdHlwZVxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqIEBmbGFnczogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFnc1xcbisgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50J3MgaWRlbnRpZmllclxcbisgKiBAc2xvdF9pZDogQ29tcG9uZW50J3Mgc2xvdCBpZGVudGlmaWVyXFxuKyAqIEB2ZXJzaW9uOiBDb21wb25lbnQncyB2ZXJzaW9uXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8ge1xcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAyNFxcbitcXHRjaGFyIG5hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOXTtcXG4rXFx0dTggY29tcG9uZW50X3R5cGU7XFxuK1xcdHU4IHJzdmRbM107XFxuK1xcdF9fbGUxNiBmbGFncztcXG4rXFx0dTggaWRlbnRpZmllcjtcXG4rXFx0dTggc2xvdF9pZDtcXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAzMlxcbitcXHRjaGFyIHZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU5dO1xcbit9O1xcbitcXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5cXHQoKFBEU19QQUdFX1NJWkUgLSA4KSAvIFxcXFxcXG4rXFx0XFx0c2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpXFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhXFxuKyAqIEBudW1fY29tcG9uZW50czogTnVtYmVyIG9mIHZhbGlkIGNvbXBvbmVudHNcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyB7XFxuK1xcdHU4IG51bV9jb21wb25lbnRzO1xcbitcXHR1OCByc3ZkWzddO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gaW5mb1tQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5dO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmRcXG4rICogQG9wY29kZTogUERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1xcbisgKiBAdmVyOiBEcml2ZXIncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYVxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqIEBkYXRhX3BhOiBETUEgYWRkcmVzcyBvZiBkYXRhXFxuKyAqXFxuKyAqIEZXIHBvcHVsYXRlcyBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBwb2ludGVkIHRvIGJ5IEBkYXRhX3BhXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHRfX2xlMTYgZGF0YV9sZW47XFxuK1xcdHU4IHJzdmRbNF07XFxuK1xcdF9fbGU2NCBkYXRhX3BhO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAtIEZJTkFMSVpFX1VQREFURSBjb21tYW5kXFxuKyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKlxcbisgKiBEcml2ZXIgc2VuZHMgYXQgdGhlIGVuZCBvZiB1cGRhdGluZyBhbGwgY29tcG9uZW50cyB0byBmaW5hbGl6ZSB0aGUgdXBkYXRlXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHR1OCByc3ZkWzJdO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCAtIEZJTkFMSVpFX1VQREFURSBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kIC0gTUFUQ0hfUkVDT1JEX0RFU0MgY29tbWFuZFxcbisgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0NcXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAdHlwZTogUExETSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVHlwZVxcbisgKiBAc2l6ZTogTGVuZ3RoIG9mIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVmFsdWVcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKlxcbisgKiBFeHBlY3RzIHRvIGZpbmQgdGhlIERlc2NyaXB0b3IgSWRlbnRpZmllciBEYXRhIGluIGNtZF9yZWdzLVxcdTAwM2VkYXRhLiBEcml2ZXJcXG4rICogc2hvdWxkIGtlZXAgdGhlIGRldmNtZCBpbnRlcmZhY2UgbG9ja2VkIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGlzXFxuKyAqIGNvbW1hbmQuXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kIHtcXG4rXFx0dTggb3Bjb2RlO1xcbitcXHR1OCB2ZXI7XFxuK1xcdF9fbGUxNiB0eXBlO1xcbitcXHRfX2xlMTYgc2l6ZTtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbXBsZXRpb25cXG4rICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZVxcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZVxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqXFxuKyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0J3NcXG4rICogdW5kZWZpbmVkLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggbWF0Y2g7XFxuK1xcdHU4IHJzdmQ7XFxuK307XFxuK1xcbisvKipcXG4rICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnNcXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVDogUXVlcnkgbnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0c1xcbisgKiBAUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk6ICAgICBRdWVyeSBkZXRhaWxzIG9mIGEgbWVtb3J5IHJlcXVlc3RcXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlXFxuKyAqIEBQRFNfQ09SRV9IT1NUX01FTV9ERUw6ICAgICAgIE5vdGlmeSBmaXJtd2FyZSBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uXFxuKyAqL1xcbitlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIge1xcbitcXHRQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlRcXHQ9IDAsXFxuK1xcdFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZXFx0XFx0PSAxLFxcbitcXHRQRFNfQ09SRV9IT1NUX01FTV9BRERcXHRcXHQ9IDIsXFxuK1xcdFBEU19DT1JFX0hPU1RfTUVNX0RFTFxcdFxcdD0gMyxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIC0gSE9TVF9NRU0gY29tbWFuZFxcbisgKiBAb3Bjb2RlOiAgICAgT3Bjb2RlIFBEU19DT1JFX0NNRF9IT1NUX01FTVxcbisgKiBAb3BlcjogICAgICAgT3BlcmF0aW9uIChlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIpXFxuKyAqIEBpbmRleDogICAgICBNZW1vcnkgcmVxdWVzdCBpbmRleCAoR0VUX0NPVU5UOiBtYXhfY291bnQsIFFVRVJZOiBpbmRleClcXG4rICogQHRhZzogICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoQUREL0RFTClcXG4rICogQHJlYXNvbjogICAgIFJlYXNvbiBmb3IgZGVsZXRpb24gKERFTCBvbmx5KVxcbisgKiBAcnN2ZDogICAgICAgUmVzZXJ2ZWRcXG4rICogQG1heF9jb250aWc6IE1heGltdW0gY29udGlndW91cyBtZW1vcnkgc2l6ZSAoR0VUX0NPVU5UIG9ubHkpXFxuKyAqIEBzaXplOiAgICAgICBTaXplIG9mIG1lbW9yeSBpbiBieXRlcyAoQUREIG9ubHkpXFxuKyAqIEBidWZfcGE6ICAgICBETUEgYWRkcmVzcyBvZiBtZW1vcnkgKEFERCBvbmx5KVxcbisgKlxcbisgKiBVbmlmaWVkIGNvbW1hbmQgZm9yIGFsbCBob3N0IG1lbW9yeSBvcGVyYXRpb25zLiBGaWVsZHMgYXJlIHJldXNlZFxcbisgKiBhY3Jvc3Mgb3BlcmF0aW9ucyB0byBtaW5pbWl6ZSBvcGNvZGUgc3BhY2UgdXNhZ2UuXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIHtcXG4rXFx0dTggICAgIG9wY29kZTtcXG4rXFx0dTggICAgIG9wZXI7XFxuK1xcdF9fbGUxNiBpbmRleDtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0dTggICAgIHJlYXNvbjtcXG4rXFx0dTggICAgIHJzdmQ7XFxuK1xcdF9fbGUzMiBtYXhfY29udGlnO1xcbitcXHRfX2xlMzIgc2l6ZTtcXG4rXFx0X19sZTY0IGJ1Zl9wYTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCAtIEhPU1RfTUVNIGNvbXBsZXRpb25cXG4rICogQHN0YXR1czogICAgICAgU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxcbisgKiBAb3BlcjogICAgICAgICBPcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkXFxuKyAqIEBjb3VudDogICAgICAgIE51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHMgKEdFVF9DT1VOVClcXG4rICogQHNpemU6ICAgICAgICAgU2l6ZSBvZiBtZW1vcnkgcmVxdWVzdCBpbiBieXRlcyAoUVVFUlkpXFxuKyAqIEB0YWc6ICAgICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoUVVFUlkvREVMKVxcbisgKiBAcnN2ZDogICAgICAgICBSZXNlcnZlZFxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAge1xcbitcXHR1OCAgICAgc3RhdHVzO1xcbitcXHR1OCAgICAgb3BlcjtcXG4rXFx0X19sZTE2IGNvdW50O1xcbitcXHRfX2xlMzIgc2l6ZTtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0dTggICAgIHJzdmRbNl07XFxuK307XFxuK1xcbiAvKlxcbiAgKiB1bmlvbiBwZHNfY29yZV9kZXZfY21kIC0gT3ZlcmxheSBvZiBjb3JlIGRldmljZSBjb21tYW5kIHN0cnVjdHVyZXNcXG4gICovXFxuQEAgLTQ2Miw2ICs5MTUsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCB7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NtZCAgIHZmX3NldGF0dHI7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9nZXRhdHRyX2NtZCAgIHZmX2dldGF0dHI7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NtZCAgICAgIHZmX2N0cmw7XFxuK1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAgICAgIHNlbmRfcGtnX2RhdGE7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHNlbmRfY29tcG9uZW50X3RibDtcXG4rXFx0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY21kICAgIGZpbmFsaXplX3VwZGF0ZTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAgbWF0Y2hfcmVjb3JkX2Rlc2M7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtO1xcbiB9O1xcbiBcXG4gLypcXG5AQCAtNDgwLDYgKzk0MSwxNCBAQCB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCB7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NvbXAgICB2Zl9zZXRhdHRyO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jb21wICAgdmZfZ2V0YXR0cjtcXG4gXFx0c3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY29tcCAgICAgIHZmX2N0cmw7XFxuK1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgZ2V0X2NvbXBvbmVudF9pbmZvO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wICAgICAgc2VuZF9wa2dfZGF0YTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHNlbmRfY29tcG9uZW50X3RibDtcXG4rXFx0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgICAgIHNlbmRfY29tcG9uZW50O1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgICAgZmluYWxpemVfdXBkYXRlO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAgbWF0Y2hfcmVjb3JkX2Rlc2M7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wICAgICAgICAgICBob3N0X21lbTtcXG4gfTtcXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzozMDozNC4xNDE4ODMwODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MDk1NDA0NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGRzX2NvcmUgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWRhYmFmY2IyZTliMDNiNGUwOTY3Yzk0M2U1NDM0YzU5ZWQyYTdkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDEzOjMwOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuaW5kZXggOWU4YTE2YzQ0MTAyOS4uNDk0ODdhMzVjMTYzMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuQEAgLTEwMiw2ICsxMDIsOTUgQEAgY3VycmVudGx5IGluIHVzZSwgYW5kIHRoYXQgYmFuayB3aWxsIHVzZWQgZm9yIHRoZSBuZXh0IGJvb3Q6OlxuICAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFxcXG4gICAgICAgICAgICAgZmlsZSBwZW5zYW5kby9kc2NfZndfMS42My4wLTIyLnRhclxuIFxuK0Zpcm13YXJlIE1hbmFnZW1lbnQgKFBMRE0pXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGRldmxpbmsgZmxhc2ggY29tbWFuZFxuK3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjpcbitcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBmaWxlIGZpcm13YXJlLnBsZG1md1xuK1xuK0luZGl2aWR1YWwgY29tcG9uZW50cyBjYW4gYWxzbyBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBuYW1lOjpcbitcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxuKyAgICAgICAgICAgIGZpbGUgZmlybXdhcmUucGxkbWZ3IGNvbXBvbmVudCBmdy5jcGxkXG4rXG4rUGVyLWNvbXBvbmVudCB1cGRhdGUgdXNlcyBkcml2ZXItZGVmaW5lZCBjb21wb25lbnQgbmFtZXMgKGZ3LCBmdy5jcGxkLFxuK2V0Yy4pLiBOb3QgYWxsIGNvbXBvbmVudHMgc3VwcG9ydCBwZXItY29tcG9uZW50IHVwZGF0ZSAtXG4rZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3RcbitiZSB1cGRhdGVkLlxuK1xuK0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50XG4rbmFtZSAoZS5nLiwgYGBmd2BgIGZvciBgYGZ3LmdvbGRgYCkgd2l0aCBhIGdvbGRmdyBwYWNrYWdlIGZpbGUgd2hlbiB0aGVcbitkZXZpY2Ugc3VwcG9ydHMgcGVyLWNvbXBvbmVudCB1cGRhdGUuIFRoZSBgYC5nb2xkYGAgc3VmZml4IGluIGRldmxpbmsgaW5mb1xuK291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuXG4rXG4rSW5mbyB2ZXJzaW9ucyAoUExETSlcbis9PT09PT09PT09PT09PT09PT09PVxuK1xuK0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSByZXBvcnRzIGNvbXBvbmVudCB2ZXJzaW9ucyB1c2luZyBkcml2ZXItZGVmaW5lZFxuK25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6XG4rXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBmb3IgUExETS1jYXBhYmxlIGZpcm13YXJlXG4rICAgOndpZHRoczogNSA1IDkwXG4rXG4rICAgKiAtIE5hbWVcbisgICAgIC0gVHlwZVxuKyAgICAgLSBEZXNjcmlwdGlvblxuKyAgICogLSBgYGZ3YGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIE1haW4gZmlybXdhcmVcbisgICAqIC0gYGBmdy5nb2xkYGBcbisgICAgIC0gc3RvcmVkXG4rICAgICAtIEdvbGQgKHJlY292ZXJ5KSBmaXJtd2FyZVxuKyAgICogLSBgYGZ3LmJvb3Rsb2FkZXJgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gQm9vdCBsb2FkZXJcbisgICAqIC0gYGBmdy5jcGxkYGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIENQTERcbisgICAqIC0gYGBmdy5zZWN1cmVgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gU2VjdXJlIGJvb3QgZmlybXdhcmVcbisgICAqIC0gYGBmdy5mcGdhYGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIEZQR0EgY29uZmlndXJhdGlvblxuKyAgICogLSBgYGZ3LnN1Y2BgXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuKyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlXG4rICAgKiAtIGBgZncuc3VjLmJvb3Rsb2FkZXJgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4rICAgKiAtIGBgZncudWJvb3RgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gVS1Cb290IGJvb3Rsb2FkZXJcbisgICAqIC0gYGBhc2ljLmlkYGBcbisgICAgIC0gZml4ZWRcbisgICAgIC0gVGhlIEFTSUMgdHlwZSBmb3IgdGhpcyBkZXZpY2VcbisgICAqIC0gYGBhc2ljLnJldmBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIFRoZSByZXZpc2lvbiBvZiB0aGUgQVNJQyBmb3IgdGhpcyBkZXZpY2VcbitcbitFeGFtcGxlIG91dHB1dDo6XG4rXG4rICAkIGRldmxpbmsgZGV2IGluZm8gcGNpLzAwMDA6MDA6MDUuMFxuKyAgcGNpLzAwMDA6MDA6MDUuMDpcbisgICAgZHJpdmVyIHBkc19jb3JlXG4rICAgIHNlcmlhbF9udW1iZXIgRkxNMTg0MjAwNzNcbisgICAgdmVyc2lvbnM6XG4rICAgICAgICBmaXhlZDpcbisgICAgICAgICAgYXNpYy5pZCAweDBcbisgICAgICAgICAgYXNpYy5yZXYgMHgwXG4rICAgICAgICBydW5uaW5nOlxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4rICAgICAgICAgIGZ3IDEuMy4wXG4rICAgICAgICAgIGZ3LmNwbGQgMy4xOFxuKyAgICAgICAgc3RvcmVkOlxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4rICAgICAgICAgIGZ3LmdvbGQgMS4yLjBcbisgICAgICAgICAgZncgMS4zLjBcbisgICAgICAgICAgZncuY3BsZCAzLjE4XG4rXG4gSGVhbHRoIFJlcG9ydGVyc1xuID09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5pbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5AQCAtMTcxLDYgKzE3MSw3IEBAIGNvbmZpZyBQRFNfQ09SRVxuIFx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJXG4gXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4rXHRzZWxlY3QgUExETUZXXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2ZcbiBcdCAgYWRhcHRlcnMuICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG5pbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuQEAgLTQ4OSw2ICs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjX2RldmNtZF9yZXNldChwZHNjKTtcbiBcbiBcdHBjaV9jbGVhcl9tYXN0ZXIocGRzYy1cdTAwM2VwZGV2KTtcbitcdGlmICghcGRzYy1cdTAwM2VwZGV2LVx1MDAzZWlzX3ZpcnRmbikge1xuK1x0XHR1MTYgdmFsO1xuK1xuK1x0XHQvKiBGbHVzaCBhbnkgaW4tZmxpZ2h0IERNQSBiZWZvcmUgZnJlZWluZyBidWZmZXJzLlxuK1x0XHQgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3JcbitcdFx0ICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLlxuK1x0XHQgKi9cbitcdFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2YWwpO1xuK1x0fVxuIFxuIFx0cGRzY19jb3JlX3VuaW5pdChwZHNjKTtcbiBcbkBAIC00OTcsNiArNTA2LDggQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjLVx1MDAzZXZpZnR5cGVfc3RhdHVzID0gTlVMTDtcbiBcdH1cbiBcbitcdHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7XG4rXHRwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7XG4gXHRwZHNjX2Rldl91bmluaXQocGRzYyk7XG4gXG4gXHRzZXRfYml0KFBEU0NfU19GV19ERUFELCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbkBAIC01MDYsNiArNTE3LDggQEAgaW50IHBkc2Nfc3RhcnQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0cGRzX2NvcmVfaW50cl9tYXNrKFx1MDAyNnBkc2MtXHUwMDNlaW50cl9jdHJsW3Bkc2MtXHUwMDNlYWRtaW5xY3EuaW50eF0sXG4gXHRcdFx0ICAgUERTX0NPUkVfSU5UUl9NQVNLX0NMRUFSKTtcbitcdHBkc2NfaG9zdF9tZW1fYWRkKHBkc2MpO1xuK1x0cGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShwZHNjKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01ODcsNiArNjAwLDggQEAgdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHRwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTtcbitcbiBcdGVyciA9IHBkc2Nfc2V0dXAocGRzYywgUERTQ19TRVRVUF9SRUNPVkVSWSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtNjcwLDMgKzY4NSwxNjEgQEAgdm9pZCBwZHNjX2hlYWx0aF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2Vjb25maWdfbG9jayk7XG4gfVxuK1xuK3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNLFxuK1x0XHQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCxcbitcdFx0Lmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KHRhZyksXG4rXHRcdC5ob3N0X21lbS5yZWFzb24gPSByZWFzb24sXG4rXHR9O1xuK1xuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGRlbCB0YWcgJWRcXG5cIiwgdGFnKTtcbitcdHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19ob3N0X21lbV9hZGRfb25lKHN0cnVjdCBwZHNjICpwZHNjLCBpbnQgaW5kZXgpXG4re1xuK1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtID0gXHUwMDI2cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2luZGV4XTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk7XG4rXHRjbWQuaG9zdF9tZW0uaW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7XG4rXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcXG5cIiwgaW5kZXgpO1xuK1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbitcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbitcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCJtZW0gcXVlcnkgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cIixcbitcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRobS1cdTAwM2VzaXplID0gbGUzMl90b19jcHUoY29tcC5ob3N0X21lbS5zaXplKTtcbitcdGhtLVx1MDAzZXRhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTtcbitcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwibWVtIHF1ZXJ5IHJldHVybmVkIHNpemUgJWQgdGFnICVkXFxuXCIsXG4rXHRcdGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZXRhZyk7XG4rXG4rXHRpZiAoIWhtLVx1MDAzZXNpemUgfHwgaG0tXHUwMDNlc2l6ZSBcdTAwM2UgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKSB7XG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiaW52YWxpZCBzaXplICVkIGZvciB0YWcgJWRcXG5cIixcbitcdFx0XHRobS1cdTAwM2VzaXplLCBobS1cdTAwM2V0YWcpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9kZWw7XG4rXHR9XG4rXG4rXHRobS1cdTAwM2VvcmRlciA9IGdldF9vcmRlcihobS1cdTAwM2VzaXplKTtcbitcdGhtLVx1MDAzZXBnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sIGhtLVx1MDAzZW9yZGVyKTtcbitcdGlmICghaG0tXHUwMDNlcGcpIHtcbitcdFx0ZGV2X3dhcm4ocGRzYy1cdTAwM2VkZXYsIFwiYWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcXG5cIixcbitcdFx0XHQgaG0tXHUwMDNlb3JkZXIsIGhtLVx1MDAzZXRhZyk7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyX2RlbDtcbitcdH1cbitcbitcdGhtLVx1MDAzZXBhID0gZG1hX21hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBobS1cdTAwM2VwZywgMCwgaG0tXHUwMDNlc2l6ZSxcbitcdFx0XHQgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4rXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cdTAwM2VkZXYsIGhtLVx1MDAzZXBhKSkge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcImRtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxcblwiLFxuK1x0XHRcdGhtLVx1MDAzZXRhZywgaG0tXHUwMDNlc2l6ZSk7XG4rXHRcdF9fZnJlZV9wYWdlcyhobS1cdTAwM2VwZywgaG0tXHUwMDNlb3JkZXIpO1xuK1x0XHRobS1cdTAwM2VwZyA9IE5VTEw7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gZXJyX2RlbDtcbitcdH1cbitcbitcdC8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi9cbitcdHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMrKztcbitcbitcdG1lbXNldChcdTAwMjZjbWQsIDAsIHNpemVvZihjbWQpKTtcbitcdG1lbXNldChcdTAwMjZjb21wLCAwLCBzaXplb2YoY29tcCkpO1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fQUREO1xuK1x0Y21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLVx1MDAzZXRhZyk7XG4rXHRjbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLVx1MDAzZXNpemUpO1xuK1x0Y21kLmhvc3RfbWVtLmJ1Zl9wYSA9IGNwdV90b19sZTY0KGhtLVx1MDAzZXBhKTtcbitcbitcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwiU2VuZGluZyBkZXZjbWQgZm9yIG1lbSBhZGQgdGFnICVkIHNpemUgJWQgcGEgJXBhZFxcblwiLFxuK1x0XHRobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIFx1MDAyNmhtLVx1MDAzZXBhKTtcbitcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rXHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwibWVtIGFkZCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZCBmb3IgdGFnICVkXFxuXCIsXG4rXHRcdFx0ZXJyLCBjb21wLnN0YXR1cywgaG0tXHUwMDNldGFnKTtcbitcdFx0ZXJyID0gZXJyID8gZXJyIDogLUVJTztcbitcdFx0Z290byBlcnJfZGVsO1xuK1x0fVxuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJtZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXFxuXCIsIGhtLVx1MDAzZXRhZyk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfZGVsOlxuK1x0LyogQWZ0ZXIgTUVNX1FVRVJZIHN1Y2NlZWRzLCBmaXJtd2FyZSBleHBlY3RzIE1FTV9BREQgb3IgTUVNX0RFTCAqL1xuK1x0cGRzY19ob3N0X21lbV9kZWxfb25lKHBkc2MsIGhtLVx1MDAzZXRhZywgUERTX1JDX0VOT01FTSk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHR1MTYgY291bnQ7XG4rXHRpbnQgZXJyO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIShwZHNjLVx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXHUwMDI2XG4rXHQgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UO1xuK1x0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xuK1x0Y21kLmhvc3RfbWVtLm1heF9jb250aWcgPSBjcHVfdG9fbGUzMihQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpO1xuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XFxuXCIsXG4rXHRcdFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XG4rXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK1x0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcIm1lbSBnZXQgY291bnQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cIixcbitcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Y291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksXG4rXHRcdCAgICBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7XG4rXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcIm1lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcXG5cIiwgY291bnQpO1xuK1x0aWYgKGNvdW50ID09IDApXG4rXHRcdHJldHVybjtcbitcbitcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzLCBjb3VudCxcbitcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcykge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBhbGxvYyBob3N0X21lbV9yZXFzIGFycmF5XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdGVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRicmVhaztcbitcdH1cbit9XG4rXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSsrKSB7XG4rXHRcdGRtYV91bm1hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGEsXG4rXHRcdFx0ICAgICAgIHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5zaXplLFxuK1x0XHRcdCAgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4rXHRcdF9fZnJlZV9wYWdlcyhwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGcsXG4rXHRcdFx0ICAgICBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ub3JkZXIpO1xuK1x0fVxuK1xuK1x0a2ZyZWUocGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzKTtcbitcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IE5VTEw7XG4rXHRwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzID0gMDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcbmluZGV4IGI3ZmU5YWQ3MzM0OTguLjc5MTc1NmE1MDg3MGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG5AQCAtNSw2ICs1LDcgQEBcbiAjZGVmaW5lIF9QRFNDX0hfXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW16b25lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGRzL3Bkc19jb21tb24uaFx1MDAzZVxuQEAgLTIzLDYgKzI0LDIwIEBAXG4gI2RlZmluZSBQRFNDX1NFVFVQX1JFQ09WRVJZXHRmYWxzZVxuICNkZWZpbmUgUERTQ19TRVRVUF9JTklUXHRcdHRydWVcbiBcbisvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZFxuKyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3NcbisgKi9cbisjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KVxuKyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NlxuK1xuK3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dm9pZCAqdmE7XG4rXHRzaXplX3Qgc2l6ZTtcbitcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjtcbit9O1xuK1xuIHN0cnVjdCBwZHNjX2Rldl9iYXIge1xuIFx0dm9pZCBfX2lvbWVtICp2YWRkcjtcbiBcdHBoeXNfYWRkcl90IGJ1c19hZGRyO1xuQEAgLTE0MSw2ICsxNTYsMTQgQEAgc3RydWN0IHBkc2NfdmlmdHlwZSB7XG4gXHRzdHJ1Y3QgcGRzX2F1eGlsaWFyeV9kZXYgKnBhZGV2O1xuIH07XG4gXG4rc3RydWN0IHBkc2NfaG9zdF9tZW0ge1xuK1x0dTMyIHNpemU7XG4rXHR1MTYgdGFnO1xuK1x0dTggb3JkZXI7XG4rXHRzdHJ1Y3QgcGFnZSAqcGc7XG4rXHRkbWFfYWRkcl90IHBhO1xuK307XG4rXG4gLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovXG4gZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHtcbiBcdFBEU0NfU19GV19ERUFELFx0XHQgICAgLyogc3RvcHBlZCwgd2FpdCBvbiBzdGFydHVwIG9yIHJlY292ZXJ5ICovXG5AQCAtMTg1LDYgKzIwOCw4IEBAIHN0cnVjdCBwZHNjIHtcbiBcdHN0cnVjdCBtdXRleCBkZXZjbWRfbG9jaztcdC8qIGxvY2sgZm9yIGRldl9jbWQgb3BlcmF0aW9ucyAqL1xuIFx0c3RydWN0IG11dGV4IGNvbmZpZ19sb2NrO1x0LyogbG9jayBmb3IgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zICovXG4gXHRzcGlubG9ja190IGFkbWlucV9sb2NrO1x0XHQvKiBsb2NrIGZvciBhZG1pbnEgb3BlcmF0aW9ucyAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDtcbitcdHNwaW5sb2NrX3QgZGVmZXJyZWRfZG1hX2xvY2s7XHQvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqL1xuIFx0cmVmY291bnRfdCBhZG1pbnFfcmVmY250O1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzO1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVncztcbkBAIC0xOTksNiArMjI0LDExIEBAIHN0cnVjdCBwZHNjIHtcbiBcdHU2NCBsYXN0X2VpZDtcbiBcdHN0cnVjdCBwZHNjX3ZpZnR5cGUgKnZpZnR5cGVfc3RhdHVzO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHBjaV9yZXNldF93b3JrO1xuK1xuK1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7XG4rXHR1MTYgbnVtX2hvc3RfbWVtX3JlcXM7XG4rXG4rXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzO1xuIH07XG4gXG4gLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLlxuQEAgLTI3NSwxNCArMzA1LDI0IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF92aWZ0eXBlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiB2b2lkIHBkc2NfZGVidWdmc19hZGRfaXJxcyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX3FjcShzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfcWNxICpxY3EpO1xuIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpO1xuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rdm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBcbiBpbnQgcGRzY19lcnJfdG9fZXJybm8oZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSBjb2RlKTtcbiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0ICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG5AQCAtMzE1LDExICszNTUsMjMgQEAgdm9pZCBwZHNjX3Byb2Nlc3NfYWRtaW5xKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7XG4gXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuK2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbitcdFx0XHQgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuK2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSk7XG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gXG4gdm9pZCBwZHNjX2Z3X2Rvd24oc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX3BjaV9yZXNldF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTtcbit2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXG4rXHRcdFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxuK1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcbitcbiAjZW5kaWYgLyogX1BEU0NfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xuaW5kZXggODEwYTBjZDliY2FjOC4uZWYwYTFiN2QxNTliNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbkBAIC0xNzgsMyArMTc4LDQ4IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpXG4gXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLVx1MDAzZWRlbnRyeSk7XG4gXHRxY3EtXHUwMDNlZGVudHJ5ID0gTlVMTDtcbiB9XG4rXG4rc3RhdGljIGludCBob3N0X21lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG07XG4rXHRpbnQgaTtcbitcbitcdGlmICghcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzIHx8IHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMgPT0gMCkge1xuK1x0XHRzZXFfcHV0cyhzZXEsIFwiTm8gaG9zdCBtZW1vcnkgYWxsb2NhdGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNlcV9wcmludGYoc2VxLCBcIkhvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxcblxcblwiLFxuK1x0XHQgICBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzKTtcbitcdHNlcV9wdXRzKHNlcSwgXCJUYWcgICAgU2l6ZSAgICAgICAgIE9yZGVyICBQQVxcblwiKTtcbitcdHNlcV9wdXRzKHNlcSwgXCItLS0gICAgLS0tLSAgICAgICAgIC0tLS0tICAtLVxcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXM7IGkrKykge1xuK1x0XHRobSA9IFx1MDAyNnBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXTtcbitcbitcdFx0aWYgKCFobS1cdTAwM2VwZylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2VxX3ByaW50ZihzZXEsIFwiJS02dSAlLTEydSAlLTZ1ICVwYWRcXG5cIixcbitcdFx0XHQgICBobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZW9yZGVyLCBcdTAwMjZobS1cdTAwM2VwYSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGhvc3RfbWVtKTtcbitcbit2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aWYgKCEocGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuK1x0ICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpXG4rXHRcdHJldHVybjtcbitcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJob3N0X21lbVwiLCAwNDAwLCBwZHNjLVx1MDAzZWRlbnRyeSxcbitcdFx0XHQgICAgcGRzYywgXHUwMDI2aG9zdF9tZW1fZm9wcyk7XG4rfVxuK1xuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHRkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKFwiaG9zdF9tZW1cIiwgcGRzYy1cdTAwM2VkZW50cnkpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbmluZGV4IGJkZWQ2YjMzMjg5Y2UuLmM1MDc3ODE3NWUyZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xuQEAgLTEyNiw3ICsxMjYsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGRzY19kZXZjbWRfc3RyKGludCBvcGNvZGUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXG4rc3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzLFxuK1x0XHRcdCAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtXHUwMDNlZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuQEAgLTE3OSw3ICsxODAsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFxuIFx0c3RhdHVzID0gcGRzY19kZXZjbWRfc3RhdHVzKHBkc2MpO1xuIFx0ZXJyID0gcGRzY19lcnJfdG9fZXJybm8oc3RhdHVzKTtcbi1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUFHQUlOKVxuK1x0aWYgKGRvX21zZyBcdTAwMjZcdTAwMjYgZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiBcdFx0ZGV2X2VycihkZXYsIFwiREVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcXG5cIixcbiBcdFx0XHRvcGNvZGUsIHBkc2NfZGV2Y21kX3N0cihvcGNvZGUpLCBzdGF0dXMsIGVycixcbiBcdFx0XHRFUlJfUFRSKGVycikpO1xuQEAgLTE4Nyw4ICsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuLVx0XHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzLFxuK1x0XHRcdFx0Y29uc3QgYm9vbCBkb19tc2cpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xOTcsMTYgKzE5OSw2MyBAQCBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXG4gXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWNtZCwgY21kLCBzaXplb2YoKmNtZCkpO1xuIFx0cGRzY19kZXZjbWRfZGJlbGwocGRzYyk7XG4tXHRlcnIgPSBwZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzKTtcbitcdGVyciA9IF9fcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtXHUwMDNlb3Bjb2RlLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcbiBcbiBcdGlmICgoZXJyID09IC1FTlhJTyB8fCBlcnIgPT0gLUVUSU1FRE9VVCkgXHUwMDI2XHUwMDI2IHBkc2MtXHUwMDNld3EpXG4gXHRcdHF1ZXVlX3dvcmsocGRzYy1cdTAwM2V3cSwgXHUwMDI2cGRzYy1cdTAwM2VoZWFsdGhfd29yayk7XG4gXHRlbHNlXG4gXHRcdG1lbWNweV9mcm9taW8oY29tcCwgXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2Vjb21wLCBzaXplb2YoKmNvbXApKTtcbiBcbitcdGlmIChlcnIgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pXG4rXHRcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcbitcdFx0XHQgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsXG4rXHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuK3tcbitcdGVudHJ5LVx1MDAzZWRtYV9hZGRyID0gZG1hX2FkZHI7XG4rXHRlbnRyeS1cdTAwM2V2YSA9IHZhO1xuK1x0ZW50cnktXHUwMDNlc2l6ZSA9IHNpemU7XG4rXHRlbnRyeS1cdTAwM2VkaXIgPSBkaXI7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4rXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4rfVxuK1xuK3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wO1xuK1x0TElTVF9IRUFEKGxvY2FsX2xpc3QpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuK1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9saXN0LCBcdTAwMjZsb2NhbF9saXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsIFx1MDAyNmxvY2FsX2xpc3QsIGxpc3QpIHtcbitcdFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZW50cnktXHUwMDNlZG1hX2FkZHIsXG4rXHRcdFx0XHQgZW50cnktXHUwMDNlc2l6ZSwgZW50cnktXHUwMDNlZGlyKTtcbitcdFx0a2ZyZWUoZW50cnktXHUwMDNldmEpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0KTtcbitcdFx0a2ZyZWUoZW50cnkpO1xuK1x0fVxuK31cbitcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuK3tcbitcdHJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTtcbit9XG4rXG4raW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuK1x0XHRcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbit7XG4rXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xuK31cbitcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiB7XG5AQCAtMjE5LDYgKzI2OCw0NyBAQCBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsXG4rXHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHQgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCxcbitcdFx0XHRcdCAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpXG4re1xuK1x0aW50IGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4rXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpIHtcbitcdFx0ZXJyID0gLUVOWElPO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcdGlmIChkYXRhX2xlbiBcdTAwM2Ugc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpIHtcbitcdFx0ZXJyID0gLUVOT1NQQztcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEsIGRhdGEsIGRhdGFfbGVuKTtcbitcdGVyciA9IF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGRvX21zZyk7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuK1x0XHRcdCAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxuK1x0XHRcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbit7XG4rXHRyZXR1cm4gX19wZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgY21kLCBkYXRhLCBkYXRhX2xlbixcbitcdFx0XHRcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XG4rfVxuK1xuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbitcdFx0XHRcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbitcdFx0XHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXG4re1xuK1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXG4rXHRcdFx0XHQgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTtcbit9XG4rXG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuQEAgLTI0MiwxNSArMzMyLDE3IEBAIGludCBwZHNjX2RldmNtZF9yZXNldChzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYylcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcixcbitcdFx0XHRcdCAgICAgICBib29sIGRvX21zZylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmlkZW50aWZ5Lm9wY29kZSA9IFBEU19DT1JFX0NNRF9JREVOVElGWSxcbi1cdFx0LmlkZW50aWZ5LnZlciA9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSxcbitcdFx0LmlkZW50aWZ5LnZlciA9IGRydl9pZGVudF92ZXIsXG4gXHR9O1xuIFxuLVx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCxcbitcdFx0XHRcdCAgICBkb19tc2cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcbkBAIC0yNzMsOCArMzY1LDkgQEAgc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcImZ3X3ZlcnNpb24gJXNcXG5cIiwgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxuK3N0YXRpYyBpbnQgcGRzY19pZGVudGlmeV92ZXIoc3RydWN0IHBkc2MgKnBkc2MsIHU4IGRydl9pZGVudF92ZXIpXG4ge1xuK1x0Ym9vbCBkb19tc2cgPSBkcnZfaWRlbnRfdmVyID09IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMTtcbiBcdHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307XG4gXHRzaXplX3Qgc3o7XG4gXHRpbnQgZXJyO1xuQEAgLTI5NywxOSArMzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoZHJ2KSwgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBcdTAwMjZkcnYsIHN6KTtcbiBcbi1cdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTtcbitcdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjLCBkcnZfaWRlbnRfdmVyLCBkb19tc2cpO1xuIFx0aWYgKCFlcnIpIHtcbiBcdFx0c3ogPSBtaW5fdChzaXplX3QsIHNpemVvZihwZHNjLVx1MDAzZWRldl9pZGVudCksXG4gXHRcdFx0ICAgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0XHRtZW1jcHlfZnJvbWlvKFx1MDAyNnBkc2MtXHUwMDNlZGV2X2lkZW50LCBcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEsIHN6KTtcbitcbitcdFx0LyogVjEgZmlybXdhcmUgZG9lc24ndCBzZXQgY2FwYWJpbGl0aWVzLCBzbyB0aGUgZmllbGQgbWF5XG4rXHRcdCAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGRzYy1cdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcdTAwM2MgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKVxuK1x0XHRcdHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4gXG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiQ2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxuXCIsXG4tXHRcdFx0RVJSX1BUUihlcnIpKTtcbitcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXG4gXHRpZiAoaXNwcmludChwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb25bMF0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlzYXNjaWkocGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSlcbkBAIC0zMjYsNiArNDIyLDI2IEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdC8qIE9sZGVyIGZpcm13YXJlIHJlamVjdHMgYW55dGhpbmcgYnV0IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxuK1x0ICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb25cbitcdCAqIHJlamVjdGlvbi4gRG9uJ3QgcmV0cnkgb24gb3RoZXIgZXJyb3JzIGxpa2UgLUVOWElPLy1FVElNRURPVVRcbitcdCAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuXG4rXHQgKi9cbitcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMik7XG4rXHRpZiAoZXJyID09IC1FSU5WQUwpXG4rXHRcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSk7XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcIkNhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiB2b2lkIHBkc2NfZGV2X3VuaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcbiB7XG4gXHRpZiAocGRzYy1cdTAwM2VpbnRyX2luZm8pIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbkBAIC05MCwxMyArOTAsMTEyIEBAIGludCBwZHNjX2RsX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdCAgIFwiQ29tcG9uZW50IHVwZGF0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCIpO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbylcbit7XG4rXHRlbnVtIGRldmxpbmtfaW5mb192ZXJzaW9uX3R5cGUgdmVyX3R5cGU7XG4rXHR1MTYgZmxhZ3MgPSBsZTE2X3RvX2NwdShpbmZvLVx1MDAzZWZsYWdzKTtcbitcdGNoYXIgKnZlciA9IGluZm8tXHUwMDNldmVyc2lvbjtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHRjaGFyIGJ1ZlszMl07XG4rXG4rXHQvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgXCJmd1wiICovXG4rXHRpZiAoaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcbitcdFx0aWYgKGluZm8tXHUwMDNlc2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQpXG4rXHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCJmdy5nb2xkXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCJmd1wiKTtcbitcdH0gZWxzZSB7XG4rXHRcdG5hbWUgPSBwZHNjX2Z3X3R5cGVfdG9fbmFtZShpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlKTtcbitcdFx0aWYgKCFuYW1lKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRpZiAoaW5mby1cdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcbitcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcImZ3LiVzLmdvbGRcIiwgbmFtZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcImZ3LiVzXCIsIG5hbWUpO1xuK1x0fVxuK1xuK1x0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUpXG4rXHRcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQpIHtcbitcdFx0aW50IGVycjtcbitcbitcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgYnVmLCB2ZXIpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykge1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsXG4rXHRcdFx0XHRcdFx0XHQgICB2ZXIsIHZlcl90eXBlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy1cdTAwM2VmdywgZXh0YWNrKTtcbitcdGlmIChmbGFncyBcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQKSB7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXRfZXh0KHJlcSwgYnVmLFxuK1x0XHRcdFx0XHRcdFx0ICB2ZXIsIHZlcl90eXBlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfZndfdmVyKHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsIGNoYXIgKmZ3X3Zlcilcbit7XG4rXHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLFxuK1x0XHRcdFx0XHRcdERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsXG4rXHRcdFx0XHRcdFx0ZndfdmVyKTtcbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbitcdHU4IG51bV9jb21wb25lbnRzO1xuK1x0aW50IGVycjtcbitcdGludCBpO1xuK1xuK1x0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuXG4rXHQgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuXG4rXHQgKiBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZSgpIGNhbiB6ZXJvIGl0IGNvbmN1cnJlbnRseSBkdXJpbmdcbitcdCAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm9cbitcdCAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuXG4rXHQgKi9cbitcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XG4rXHRpZiAoIW51bV9jb21wb25lbnRzKSB7XG4rXHRcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuK1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK1x0XHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpO1xuK1x0XHRpZiAoIW51bV9jb21wb25lbnRzKVxuK1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuK1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK1x0fVxuK1xuK1x0bnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLFxuK1x0XHRcdCAgICAgICBsZTE2X3RvX2NwdShwZHNjLVx1MDAzZWRldl9pZGVudC5tYXhfZndfc2xvdHMpKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0ZXJyID0gcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHJlcSxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBjaGFyICpmd19zbG90bmFtZXNbXSA9IHtcbkBAIC0xMDUsOCArMjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xuIFx0XCJmdy5tYWluZndiXCIsXG4gfTtcbiBcbi1pbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4tXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnQgcGRzY19kbF9md19saXN0X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmZ3X2NvbnRyb2wub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZXX0NPTlRST0wsXG5AQCAtMTQwLDEyICsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsXG4tXHRcdFx0XHRcdCAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxuLVx0XHRcdFx0XHQgICAgICAgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdC8qIFZlcnNpb24gMTogcmVwb3J0IGZ3IGZyb20gZGV2X2luZm8gKHJ1bm5pbmcgb25seSkgKi9cbitcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLCBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK31cbitcbitpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbitcdGNoYXIgYnVmWzMyXTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocGRzYy1cdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikge1xuK1x0XHRlcnIgPSBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiMHgleFwiLCBwZHNjLVx1MDAzZWRldl9pbmZvLmFzaWNfdHlwZSk7XG4gXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuIFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5pbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5AQCAtMSw2ICsxLDkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodChjKSAyMDIzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsZG1mdy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJjb3JlLmhcIlxuIFxuIC8qIFRoZSB3b3JzdCBjYXNlIHdhaXQgZm9yIHRoZSBpbnN0YWxsIGFjdGl2aXR5IGlzIGFib3V0IDI1IG1pbnV0ZXMgd2hlblxuQEAgLTE0LDYgKzE3LDU4IEBAXG4gLyogTnVtYmVyIG9mIHBlcmlvZGljIGxvZyB1cGRhdGVzIGR1cmluZyBmdyBmaWxlIGRvd25sb2FkICovXG4gI2RlZmluZSBQRFNDX0ZXX0lOVEVSVkFMX0ZSQUNUSU9OXHQzMlxuIFxuKyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfUFJFRklYXHRcdFwiZncuXCJcbisjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXFxcbitcdChzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSArIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTilcbitcbisvKiBEcml2ZXItZGVmaW5lZCBjb21wb25lbnQgdHlwZSB0byBuYW1lIG1hcHBpbmcuXG4rICogUERTX0NPUkVfRldfVFlQRV9NQUlOIGlzIE5VTEwgLSBoYW5kbGVkIHNwZWNpYWxseSBhcyBcImZ3XCIgd2l0aG91dCBwcmVmaXguXG4rICovXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZHNjX2Z3X3R5cGVfbmFtZXNbXSA9IHtcbitcdFtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfQk9PVF0gICAgICA9IFwiYm9vdGxvYWRlclwiLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfQ1BMRF0gICAgICA9IFwiY3BsZFwiLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfU0VDVVJFXSAgICA9IFwic2VjdXJlXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9GUEdBXSAgICAgID0gXCJmcGdhXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTl0gID0gXCJzdWNcIixcbitcdFtQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UXSAgPSBcInN1Yy5ib290bG9hZGVyXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9VQk9PVF0gICAgID0gXCJ1Ym9vdFwiLFxuK307XG4rXG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSlcbit7XG4rXHRpZiAodHlwZSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpIFx1MDAyNlx1MDAyNiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pXG4rXHRcdHJldHVybiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV07XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSBpbiBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldCgpICovXG4rXHRXUklURV9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB1OCBwZHNjX25hbWVfdG9fZndfdHlwZShjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHNpemVfdCBwcmVmaXhfbGVuO1xuK1x0aW50IGk7XG4rXG4rXHQvKiBcImZ3XCIgd2l0aG91dCBzdWZmaXggbWFwcyB0byBtYWluIGZpcm13YXJlICovXG4rXHRpZiAoIXN0cmNtcChuYW1lLCBcImZ3XCIpKVxuK1x0XHRyZXR1cm4gUERTX0NPUkVfRldfVFlQRV9NQUlOO1xuK1xuK1x0cHJlZml4X2xlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCk7XG4rXHRpZiAocHJlZml4X2xlbilcbitcdFx0bmFtZSArPSBwcmVmaXhfbGVuO1xuK1xuK1x0Zm9yIChpID0gMTsgaSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpOyBpKyspIHtcbitcdFx0aWYgKHBkc2NfZndfdHlwZV9uYW1lc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdHJjbXAobmFtZSwgcGRzY19md190eXBlX25hbWVzW2ldKSlcbitcdFx0XHRyZXR1cm4gaTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdFx0XHRcdCAgdTMyIG9mZnNldCwgdTMyIGxlbmd0aClcbiB7XG5AQCAtMjMsNyArNzgsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdC5md19kb3dubG9hZC5hZGRyID0gY3B1X3RvX2xlNjQoYWRkciksXG4gXHRcdC5md19kb3dubG9hZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuIFx0fTtcbi1cdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXG4gXHRyZXR1cm4gcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4gfVxuQEAgLTk1LDkgKzE1MCwxMiBAQCBzdGF0aWMgaW50IHBkc2NfZndfc3RhdHVzX2xvbmdfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbi1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnRcbitwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4rXHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwYXJhbXMtXHUwMDNlZnc7XG4gXHR1MzIgYnVmX3N6LCBjb3B5X3N6LCBvZmZzZXQ7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4gXHRpbnQgbmV4dF9pbnRlcnZhbDtcbkBAIC0xMDUsNiArMTYzLDEyIEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiBcdGludCBlcnIgPSAwO1xuIFx0aW50IGZ3X3Nsb3Q7XG4gXG4rXHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGRldl9pbmZvKHBkc2MtXHUwMDNlZGV2LCBcIkluc3RhbGxpbmcgZmlybXdhcmVcXG5cIik7XG4gXG4gXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpXG5AQCAtMTk1LDMgKzI1OSw3MjkgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuIFx0XHRcdFx0XHRcdCAgIE5VTEwsIDAsIDApO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rXG4rc3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYge1xuK1x0dTE2IGNvbXBvbmVudF9pZDtcbitcdGJvb2wgc2tpcDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTtcbit9O1xuK1xuK3N0cnVjdCBwZHNfY29yZV9md3VfcHJpdiB7XG4rXHRzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7XG4rXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXM7XG4rXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYztcbitcdHN0cnVjdCBsaXN0X2hlYWQgY29tcG9uZW50cztcbitcdGJvb2wgY29tcG9uZW50X2ZvdW5kO1xuK307XG4rXG4rc3RhdGljIHZvaWQgcGRzY19mcmVlX2Z3dV9wcml2KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXYsICp0bXA7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29tcG9uZW50X3ByaXYsIHRtcCwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzLFxuK1x0XHRcdFx0IGxpc3RfZW50cnkpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2Y29tcG9uZW50X3ByaXYtXHUwMDNlbGlzdF9lbnRyeSk7XG4rXHRcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGRlc2NfdHlwZSxcbitcdFx0XHRcdFx0IHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsXG4rXHRcdFx0XHRcdCB1OCAqbWF0Y2gpXG4re1xuK1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsXG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy52ZXIgPSAxLFxuK1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksXG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSxcbitcdH07XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFx1MDAyNmNtZCwgZGVzY19kYXRhLCBkZXNjX3NpemUsXG4rXHRcdFx0XHQgICAgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rXHQqbWF0Y2ggPSBjb21wLm1hdGNoX3JlY29yZF9kZXNjLm1hdGNoO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGJvb2wgcGRzY19tYXRjaF9yZWNvcmRfZGVzY3Moc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgcGxkbWZ3X3JlY29yZCAqcmVjb3JkKVxuK3tcbitcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuK1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4rXHRzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjO1xuK1xuK1x0aWYgKCFwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZChjb250ZXh0LCByZWNvcmQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsIFx1MDAyNnJlY29yZC1cdTAwM2VkZXNjcywgZW50cnkpIHtcbitcdFx0dTggbWF0Y2g7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdHN3aXRjaCAoZGVzYy1cdTAwM2V0eXBlKSB7XG4rXHRcdC8qIHNraXAgdHlwZXMgY2hlY2tlZCBpbiBwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZCAqL1xuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfVkVORE9SX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCVkVORE9SX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCREVWX0lEOlxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghZGVzYy1cdTAwM2VzaXplKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0ZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy1cdTAwM2V0eXBlLFxuK1x0XHRcdFx0XHRcdCAgICBkZXNjLVx1MDAzZXNpemUsIGRlc2MtXHUwMDNlZGF0YSxcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2bWF0Y2gpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldixcbitcdFx0XHRcdFwibWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRkZXNjLVx1MDAzZXR5cGUsIGRlc2MtXHUwMDNlc2l6ZSwgZXJyKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0LyogYWxsIHJlY29yZCBkZXNjcmlwdG9ycyBtdXN0IG1hdGNoICovXG4rXHRcdGlmICghbWF0Y2gpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxuK1x0XHRcdFx0XHQgdTE2IGxlbmd0aCwgdTE2IG9mZnNldCwgdTE2IHRvdGFsX2xlbilcbit7XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbitcdFx0LnNlbmRfcGtnX2RhdGEub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEsXG4rXHRcdC5zZW5kX3BrZ19kYXRhLnZlciA9IDEsXG4rXHRcdC5zZW5kX3BrZ19kYXRhLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChhZGRyKSxcbitcdFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihsZW5ndGgpLFxuK1x0XHQuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLFxuK1x0XHQuc2VuZF9wa2dfZGF0YS50b3RhbF9sZW4gPSBjcHVfdG9fbGUxNih0b3RhbF9sZW4pLFxuK1x0fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcbitcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsXG4rXHRcdFx0XHQgIHUxNiBsZW5ndGgpXG4re1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4rXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR1OCAqcGFja2FnZV9kYXRhO1xuK1x0dTMyIG9mZnNldDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWxlbmd0aClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWRlZmVycmVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBhY2thZ2VfZGF0YSA9IGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcGFja2FnZV9kYXRhKSB7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBkbWFfbWFwIHBhY2thZ2VfZGF0YSBsZW5ndGggMHgleFxcblwiLFxuK1x0XHRcdGxlbmd0aCk7XG4rXHRcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuZ3RoOyBvZmZzZXQgKz0gUERTX1BBR0VfU0laRSkge1xuK1x0XHR1MzIgY29weV9zejtcbitcbitcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSwgbGVuZ3RoIC0gb2Zmc2V0KTtcbitcdFx0ZXJyID0gcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEocGRzYywgZG1hX2FkZHIgKyBvZmZzZXQsXG4rXHRcdFx0XHRcdFx0ICAgIGNvcHlfc3osIG9mZnNldCwgbGVuZ3RoKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGFcIik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuK1x0XHRcdFx0ICAgICAgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0a2ZyZWUocGFja2FnZV9kYXRhKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0aWYgKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldLmNvbXBvbmVudF90eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbitcdFx0XHRcdFx0ICAgdTggY29tcG9uZW50X2lkLCB1OCB0eXBlKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbitcbitcdFx0aWYgKGluZm8tXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSsrKSB7XG4rXHRcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9XG4rXHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4rXG4rXHRcdGlmIChpbmZvLVx1MDAzZWlkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkKVxuK1x0XHRcdHJldHVybiBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2Nfc2tpcF9jb21wb25lbnQoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2LFxuK1x0XHRcdFx0dTE2IGNvbXBvbmVudF9pZClcbit7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXBvbmVudF9wcml2LCBcdTAwMjZwcml2LVx1MDAzZWNvbXBvbmVudHMsIGxpc3RfZW50cnkpIHtcbitcdFx0aWYgKGNvbXBvbmVudF9wcml2LVx1MDAzZWNvbXBvbmVudF9pZCA9PSBjb21wb25lbnRfaWQpXG4rXHRcdFx0cmV0dXJuIGNvbXBvbmVudF9wcml2LVx1MDAzZXNraXA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50LFxuK1x0XHRcdFx0ICAgICB1OCB0cmFuc2Zlcl9mbGFnKVxuK3tcbitcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuK1x0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdGJvb2wgc2tpcF9jb21wb25lbnQgPSBmYWxzZTtcbitcdHU4IHJlcXVlc3RlZF90eXBlID0gMDtcbitcdHUxNiBidWZfc3osIHRibF9zejtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0ZGV2X2RiZyhkZXYsXG4rXHRcdFwiY29tcG9uZW50IG5hbWUgJXMgY2xhc3NpZmljYXRpb24gJXUgaWQgJXUgYWN0aXZhdGlvbl9tZXRob2QgJXUgdmVyX2xlbiAlZCB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldSB0cmFuc2Zlcl9mbGFnIDB4JTAyeFxcblwiLFxuK1x0XHRwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbitcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbitcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4sXG4rXHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3N0cmluZywgY29tcG9uZW50LVx1MDAzZWluZGV4LFxuK1x0XHRjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpO1xuK1xuK1x0Y29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdHJlcXVlc3RlZF90eXBlID0gcGRzY19uYW1lX3RvX2Z3X3R5cGUocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbitcdFx0aWYgKGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyIFx1MDAzZSBVOF9NQVggfHxcbitcdFx0ICAgICFwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUocGRzYyxcbitcdFx0XHRcdFx0XHQgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsXG4rXHRcdFx0XHRcdFx0ICAgIHJlcXVlc3RlZF90eXBlKSkge1xuK1x0XHRcdHNraXBfY29tcG9uZW50ID0gdHJ1ZTtcbitcdFx0XHRnb3RvIGFkZF9jb21wb25lbnRfcHJpdjtcbitcdFx0fVxuK1x0XHRwcml2LVx1MDAzZWNvbXBvbmVudF9mb3VuZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRidWZfc3ogPSBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKTtcbitcdHRibF9zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF90YmwsIHZlcnNpb25fc3RyLFxuK1x0XHRcdCAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcdGlmICh0Ymxfc3ogXHUwMDNlIGJ1Zl9zeikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxuXCIsXG4rXHRcdFx0dGJsX3N6LCBidWZfc3opO1xuK1x0XHRlcnIgPSAtRU5PU1BDO1xuK1x0XHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XG4rXHR9XG4rXHRjb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfdGJsKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbitcdH1cbitcbitcdGNvbXBvbmVudF90YmwtXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XG4rXHRcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcbitcdGNvbXBvbmVudF90YmwtXHUwMDNlY2xhc3NpZmljYXRpb24gPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXHUwMDNlY2xhc3NpZmljYXRpb24pO1xuK1x0Y29tcG9uZW50X3RibC1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0Y29tcG9uZW50X3RibC1cdTAwM2V0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZztcbitcdGNvbXBvbmVudF90YmwtXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3R5cGU7XG4rXHRjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbjtcbitcdG1lbWNweShjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDtcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90YmwudmVyID0gMTtcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDtcbitcbitcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBcdTAwMjZjbWQsIGNvbXBvbmVudF90YmwsIHRibF9zeixcbitcdFx0XHRcdCAgICBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbitcdGtmcmVlKGNvbXBvbmVudF90YmwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4rXHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbitcdH1cbitcbitcdHNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTtcbitcbithZGRfY29tcG9uZW50X3ByaXY6XG4rXHRjb21wb25lbnRfcHJpdi1cdTAwM2Vza2lwID0gc2tpcF9jb21wb25lbnQ7XG4rXHRjb21wb25lbnRfcHJpdi1cdTAwM2Vjb21wb25lbnRfaWQgPSBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcjtcbitcdGxpc3RfYWRkKFx1MDAyNmNvbXBvbmVudF9wcml2LVx1MDAzZWxpc3RfZW50cnksIFx1MDAyNnByaXYtXHUwMDNlY29tcG9uZW50cyk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX2NvbXBvbmVudF9wcml2OlxuK1x0a2ZyZWUoY29tcG9uZW50X3ByaXYpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sXG4rXHRcdC5nZXRfY29tcG9uZW50X2luZm8udmVyID0gMSxcbitcdH07XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAqbGlzdF9pbmZvO1xuK1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR1OCBudW1fY29tcG9uZW50cztcbitcdGludCBlcnIsIGk7XG4rXG4rXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7XG4rXHRpZiAoIWRlZmVycmVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGxpc3RfaW5mbyA9IGt6YWxsb2MoUERTX1BBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxpc3RfaW5mbykge1xuK1x0XHRrZnJlZShkZWZlcnJlZCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgbGlzdF9pbmZvLCBQRFNfUEFHRV9TSVpFLFxuK1x0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcbitcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldixcbitcdFx0XHRcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXFxuXCIsXG4rXHRcdFx0UERTX1BBR0VfU0laRSk7XG4rXHRcdGtmcmVlKGxpc3RfaW5mbyk7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoUERTX1BBR0VfU0laRSk7XG4rXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XG4rXG4rXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQgKiAyKTtcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLCBsaXN0X2luZm8sXG4rXHRcdFx0XHQgICAgICBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZG1hX2FkZHIsIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkge1xuK1x0XHQvKiBEb24ndCBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgdmVyc2lvbiAwIGhhc1xuK1x0XHQgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGVcbitcdFx0ICogdGhlaXIgZmlybXdhcmVcbitcdFx0ICovXG4rXHRcdGRldl93YXJuX29uY2UocGRzYy1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICAgXCJJbmNvbXBhdGlibGUgZ2V0X2NvbXBvbmVudF9pbmZvIHZlcnNpb24gJXUgcmVwb3J0ZWQgYnkgZmlybXdhcmVcXG5cIixcbitcdFx0XHQgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpO1xuK1x0XHRlcnIgPSAwO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdG51bV9jb21wb25lbnRzID0gbGlzdF9pbmZvLVx1MDAzZW51bV9jb21wb25lbnRzO1xuK1x0aWYgKG51bV9jb21wb25lbnRzIFx1MDAzZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMgPSBudW1fY29tcG9uZW50cztcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbitcbitcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxpc3RfaW5mby1cdTAwM2VpbmZvW2ldLCBzaXplb2YoKmluZm8pKTtcbitcdFx0aW5mby1cdTAwM2V2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIC0gMV0gPSAwO1xuK1x0XHRpbmZvLVx1MDAzZW5hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIC0gMV0gPSAwO1xuK1x0fVxuK1xuK291dDpcbitcdGtmcmVlKGxpc3RfaW5mbyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcbitcdFx0XHRcdCAgICAgIHUxNiBpbmZvX3N6LCBkbWFfYWRkcl90IGFkZHIsIHUzMiBsZW5ndGgsXG4rXHRcdFx0XHQgICAgICB1MzIgb2Zmc2V0LCB1MTYgc2xvdF9pZCxcbitcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULFxuK1x0XHQuc2VuZF9jb21wb25lbnQudmVyID0gMSxcbitcdFx0LnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJULFxuK1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxuK1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuK1x0XHQuc2VuZF9jb21wb25lbnQub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KSxcbitcdFx0LnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDMwMCAqIEhaO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuK1x0dW5zaWduZWQgbG9uZyBlbmRfdGltZTtcbitcdGludCBlcnI7XG4rXG4rXHRzdGFydF90aW1lID0gamlmZmllcztcbitcdGVuZF90aW1lID0gc3RhcnRfdGltZSArIHRpbWVvdXQ7XG4rXHRkbyB7XG4rXHRcdC8qIHByZXZlbnQgbm9pc3kvYmVuaWduIGRldmNtZCBmYWlsdXJlcyAqL1xuK1x0XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2cocGRzYywgXHUwMDI2Y21kLCBpbmZvLCBpbmZvX3N6LFxuK1x0XHRcdFx0XHRcdCAgY29tcCwgNjApO1xuK1x0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGlmIHJlcXVpcmVkLCBzdWJzZXF1ZW50IGNvbW1hbmRzIGNoZWNrIHN0YXR1cyBvZlxuK1x0XHQgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJuc1xuK1x0XHQgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZyxcbitcdFx0ICogZWxzZSB3ZSBnZXQgdGhlIGZpbmFsIGNvbW1hbmQgc3RhdHVzLlxuK1x0XHQgKi9cbitcdFx0Y21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUztcbitcdFx0bXNsZWVwKDIwKTtcbitcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7XG4rXG4rXHRpZiAoZXJyID09IC1FQUdBSU4gfHwgZXJyID09IC1FVElNRURPVVQpXG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIHRpbWVkIG91dFxcblwiKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmluZm8sXG4rXHRcdFx0XHQgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LFxuK1x0XHRcdFx0ICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCxcbitcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuK3tcbitcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dTggKmNvbXBvbmVudF9kYXRhO1xuK1x0aW50IGVycjtcbitcbitcdGRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGVmZXJyZWQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y29tcG9uZW50X2RhdGEgPSBrbWVtZHVwKGRhdGEsIGNvcHlfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfZGF0YSkge1xuK1x0XHRrZnJlZShkZWZlcnJlZCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbitcdGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkge1xuK1x0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9kYXRhIGF0IG9mZnNldCAweCV4IGNvcHlfc3ogMHgleFxcblwiLFxuK1x0XHRcdG9mZnNldCwgY29weV9zeik7XG4rXHRcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcbitcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGVyciA9IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHBkc2MsIGluZm8sIGluZm9fc3osIGRtYV9hZGRyLFxuK1x0XHRcdFx0XHQgY29weV9zeiwgb2Zmc2V0LCBzbG90X2lkLCBjb21wKTtcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuK1x0XHRcdFx0ICAgICAgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbitcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbitcdFx0XHRcdHN0cnVjdCBwbGRtZndfY29tcG9uZW50ICpjb21wb25lbnQpXG4re1xuK1x0Y2hhciBjb21wb25lbnRfbmFtZV9idWZbUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTl07XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbitcdHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvO1xuK1x0Y29uc3QgY2hhciAqY29tcG9uZW50X25hbWUgPSBOVUxMO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdHUxNiBidWZfc3osIGluZm9fc3o7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4rXHR1OCBjb21wb25lbnRfdHlwZTtcbitcdHUzMiB0b3RhbF9sZW47XG4rXHR1MzIgb2Zmc2V0O1xuK1x0aW50IGVycjtcbitcbitcdGNvbXBvbmVudF90eXBlID0gcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQocGRzYyxcbitcdFx0XHRcdFx0XHQgICAgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0aWYgKGNvbXBvbmVudF90eXBlKSB7XG4rXHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGNvbXBvbmVudF90eXBlKTtcbitcbitcdFx0aWYgKGNvbXBvbmVudF90eXBlID09IFBEU19DT1JFX0ZXX1RZUEVfTUFJTikge1xuK1x0XHRcdGNvbXBvbmVudF9uYW1lID0gXCJmd1wiO1xuK1x0XHR9IGVsc2UgaWYgKHR5cGVfbmFtZSkge1xuK1x0XHRcdHNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksXG4rXHRcdFx0XHQgXCIlcyVzXCIsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTtcbitcdFx0XHRjb21wb25lbnRfbmFtZSA9IGNvbXBvbmVudF9uYW1lX2J1ZjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XG4rXG4rXHRpZiAocGRzY19za2lwX2NvbXBvbmVudChwcml2LCBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcikpIHtcbitcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCJTa2lwcGVkXCIsXG4rXHRcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHRvdGFsX2xlbiA9IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfc2l6ZTtcbitcdGRldl9kYmcoZGV2LFxuK1x0XHRcImNvbXBvbmVudCBuYW1lICVzIGNsYXNzICV1IGlkICV1IGFjdF9tZXRoICV1IHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1XFxuXCIsXG4rXHRcdGNvbXBvbmVudF9uYW1lID86IFwiKHVua25vd24pXCIsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbitcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbitcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHRcdGNvbXBvbmVudC1cdTAwM2VpbmRleCwgY29tcG9uZW50LVx1MDAzZWNvbXBvbmVudF9zaXplKTtcbitcbitcdGJ1Zl9zeiA9IHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpO1xuK1x0aW5mb19zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF9pbmZvLCB2ZXJzaW9uX3N0cixcbitcdFx0XHQgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuK1x0aWYgKGluZm9fc3ogXHUwMDNlIGJ1Zl9zeikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcblwiLFxuK1x0XHRcdGluZm9fc3osIGJ1Zl9zeik7XG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0fVxuK1x0Y29tcG9uZW50X2luZm8gPSB2emFsbG9jKGluZm9fc3opO1xuK1x0aWYgKCFjb21wb25lbnRfaW5mbylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cbitcdFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVx1MDAzZWNvbXBhcmlzb25fc3RhbXApO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNlaW1hZ2Vfc2l6ZSA9IGNwdV90b19sZTMyKHRvdGFsX2xlbik7XG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2VjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbik7XG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNlb3B0aW9ucyA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VvcHRpb25zKTtcbitcdGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtXHUwMDNldmVyc2lvbl90eXBlO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuO1xuK1x0bWVtY3B5KGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcbitcdG9mZnNldCA9IDA7XG4rXHR3aGlsZSAob2Zmc2V0IFx1MDAzYyB0b3RhbF9sZW4pIHtcbitcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuK1x0XHR1MTYgY29weV9zejtcbitcbitcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSxcbitcdFx0XHRcdHRvdGFsX2xlbiAtIG9mZnNldCk7XG4rXG4rXHRcdGVyciA9IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHBkc2MsIGRldiwgY29tcG9uZW50X2luZm8sXG4rXHRcdFx0XHRcdFx0IGluZm9fc3osXG4rXHRcdFx0XHRcdFx0IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfZGF0YSArXG4rXHRcdFx0XHRcdFx0IG9mZnNldCwgY29weV9zeiwgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdCBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNmNvbXApO1xuK1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PVxuK1x0XHQgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgfHxcbitcdFx0ICAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09XG4rXHRcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0xPV0VSKSkge1xuK1x0XHRcdGVyciA9IDA7XG4rXHRcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCJTa2lwcGVkXCIsXG4rXHRcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSxcbitcdFx0XHRcdFx0XHRcdCAgIDAsIDApO1xuK1x0XHRcdGdvdG8gc2tpcF9jb21wb25lbnQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gZmxhc2ggY29tcG9uZW50XCIpO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0fVxuK1xuK1x0XHRvZmZzZXQgKz0gY29weV9zejtcbitcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbitcdFx0XHRcdFx0XHQgICBcIkVyYXNpbmcvRmxhc2hpbmdcIixcbitcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdCAgIHRvdGFsX2xlbik7XG4rXHR9XG4rXG4rXHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbitcdFx0XHRcdFx0ICAgXCJFcmFzaW5nL0ZsYXNoaW5nIENvbXBvbmVudCBGYWlsZWRcIixcbitcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK3NraXBfY29tcG9uZW50OlxuK1x0dmZyZWUoY29tcG9uZW50X2luZm8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4rXHRcdC5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSxcbitcdFx0LmZpbmFsaXplX3VwZGF0ZS52ZXIgPSAxLFxuK1x0fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcbitcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQpXG4re1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4rXHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudDtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cdTAwM2VwZHNjO1xuK1x0c3RydWN0IGRldmxpbmsgKmRsO1xuK1x0aW50IGVycjtcbitcbitcdGRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpO1xuK1xuK1x0c3RhcnRfdGltZSA9IGppZmZpZXM7XG4rXHRlbmRfdGltZSA9IHN0YXJ0X3RpbWUgKyAoUERTQ19GV19JTlNUQUxMX1RJTUVPVVQgKiBIWik7XG4rXHRkbyB7XG4rXHRcdGVyciA9IHBkc2NfZGV2Y21kX2ZpbmFsaXplX3VwZGF0ZShwZHNjKTtcbitcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRkZXZfZGJnKGRldiwgXCJyZXRyeWluZyBmaW5hbGl6ZV91cGRhdGU6ICVwZVxcblwiLCBFUlJfUFRSKGVycikpO1xuK1x0XHRtc2xlZXAoMjApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpIFx1MDAyNlx1MDAyNiBlcnIgPT0gLUVBR0FJTik7XG4rXG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFwiRmluYWxpemUgVXBkYXRlIEZhaWxlZFwiLFxuK1x0XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXHUwMDNlZXh0YWNrLCBcIkZpbmFsaXplIHVwZGF0ZSBmYWlsZWRcIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcIkZpbmFsaXplZCBVcGRhdGVcIixcbitcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7XG4rXHQubWF0Y2hfcmVjb3JkID0gcGRzY19tYXRjaF9yZWNvcmRfZGVzY3MsXG4rXHQuc2VuZF9wYWNrYWdlX2RhdGEgPSBwZHNjX3NlbmRfcGFja2FnZV9kYXRhLFxuK1x0LnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSxcbitcdC5mbGFzaF9jb21wb25lbnQgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudCxcbitcdC5maW5hbGl6ZV91cGRhdGUgPSBwZHNjX2ZpbmFsaXplX3VwZGF0ZVxuK307XG4rXG4rc3RhdGljIGludCBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbit7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgcHJpdiA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdGlmICghcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKSB7XG4rXHRcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gZ2V0IGNvbXBvbmVudCBpbmZvXCIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdHU4IHR5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbitcbitcdFx0aWYgKCF0eXBlIHx8ICFwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhwZHNjLCB0eXBlKSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiVW5rbm93biBjb21wb25lbnQgbmFtZVwiKTtcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cHJpdi5jb21wb25lbnRzKTtcbitcdHByaXYuY29udGV4dC5vcHMgPSBcdTAwMjZwZHNjX3BsZG1md19vcHM7XG4rXHRwcml2LmNvbnRleHQuZGV2ID0gcGRzYy1cdTAwM2VkZXY7XG4rXHRwcml2LnBhcmFtcyA9IHBhcmFtcztcbitcdHByaXYuZXh0YWNrID0gZXh0YWNrO1xuK1x0cHJpdi5wZHNjID0gcGRzYztcbitcbitcdGVyciA9IHBsZG1md19mbGFzaF9pbWFnZShcdTAwMjZwcml2LmNvbnRleHQsIGZ3KTtcbitcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBwYXJhbXMtXHUwMDNlY29tcG9uZW50IFx1MDAyNlx1MDAyNiAhcHJpdi5jb21wb25lbnRfZm91bmQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiUmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlXCIpO1xuK1x0XHRlcnIgPSAtRU5PRU5UO1xuK1x0fVxuK1x0cGRzY19mcmVlX2Z3dV9wcml2KFx1MDAyNnByaXYpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuK1x0XHRjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFKSlcbitcdFx0ZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayxcbitcdFx0XHRcdFx0XHRwYXJhbXMtXHUwMDNlZncpO1xuK1x0ZWxzZVxuK1x0XHRlcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuK1xuK1x0LyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi9cbitcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmNcbmluZGV4IDhkOTRhNGQ3MDM5NWUuLjVlMWIwNzg1MDE2M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG5AQCAtMjEsNiArMjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRzY19pZF90YWJsZVtdID0ge1xuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBkc2NfaWRfdGFibGUpO1xuIFxuK3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTtcbitcbiBzdGF0aWMgdm9pZCBwZHNjX3dkdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSB0aW1lcl9jb250YWluZXJfb2YocGRzYywgdCwgd2R0aW1lcik7XG5AQCAtMzE1LDYgKzMxNyw3IEBAIHN0YXRpYyBpbnQgcGRzY19pbml0X3BmKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShwZHNjLVx1MDAzZXdxKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGRzYy1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiBcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkc2MtXHUwMDNlcGRldik7XG4gZXJyX291dF91bm1hcF9iYXJzOlxuIFx0cGRzY191bm1hcF9iYXJzKHBkc2MpO1xuQEAgLTM1Myw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRwZHNjLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0cGRzYy1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdHNldF9iaXQoUERTQ19TX0lOSVRJTkdfRFJJVkVSLCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGRzYyk7XG4gXHRwZHNjX2RlYnVnZnNfYWRkX2RldihwZHNjKTtcbiBcbkBAIC00NTgsNiArNDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHR9XG4gXG4gXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIFxuIFx0aWRhX2ZyZWUoXHUwMDI2cGRzY19pZGEsIHBkc2MtXHUwMDNldWlkKTtcbiBcdHBkc2NfZGVidWdmc19kZWxfZGV2KHBkc2MpO1xuQEAgLTUwNSw2ICs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpO1xuIFx0aWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKVxuIFx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaCBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcbmluZGV4IDE3YTg3YzFhNTVkN2MuLjkwMWUxZTYyOGY4OTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG5AQCAtNDAsNiArNDAsMTQgQEAgZW51bSBwZHNfY29yZV9jbWRfb3Bjb2RlIHtcbiBcdFBEU19DT1JFX0NNRF9GV19ET1dOTE9BRFx0PSA0LFxuIFx0UERTX0NPUkVfQ01EX0ZXX0NPTlRST0xcdFx0PSA1LFxuIFxuK1x0UERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1x0PSA2LFxuK1x0UERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcdD0gNyxcbitcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcdD0gOCxcbitcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFx0PSA5LFxuK1x0UERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVx0PSAxMCxcbitcdFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQ1x0PSAxMSxcbitcdFBEU19DT1JFX0NNRF9IT1NUX01FTVx0XHQ9IDEyLFxuK1xuIFx0LyogU1IvSU9WIGNvbW1hbmRzICovXG4gXHRQRFNfQ09SRV9DTURfVkZfR0VUQVRUUlx0XHQ9IDYwLFxuIFx0UERTX0NPUkVfQ01EX1ZGX1NFVEFUVFJcdFx0PSA2MSxcbkBAIC0xMDAsNiArMTA4LDE2IEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkge1xuIFx0Y2hhciAgIGRyaXZlcl92ZXJfc3RyWzMyXTtcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgLSBEZXZpY2UgY2FwYWJpbGl0aWVzXG4rICogQFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEU6IERldmljZSBvbmx5IHN1cHBvcnRzIEZXIHVwZGF0ZSB2aWEgUExETVxuKyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZVxuKyAqL1xuK2VudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkge1xuK1x0UERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSA9IEJJVCgwKSxcbitcdFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0gPSBCSVQoMSksXG4rfTtcbitcbiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVhcdDE2XG4gLyoqXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvblxuQEAgLTExOSw2ICsxMzcsMTEgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XG4gICpcdFx0ICAgICAgdmFsdWUgaW4gdXNlY3MgdG8gZGV2aWNlIHVuaXRzIHVzaW5nOlxuICAqXHRcdCAgICAgIGRldmljZSB1bml0cyA9IHVzZWNzICogbXVsdCAvIGRpdlxuICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWRcbisgKiBAbWF4X2Z3X3Nsb3RzOiAgICAgTnVtYmVyIG9mIGZpcm13YXJlIGNvbXBvbmVudHMgcmVwb3J0ZWQgYnkgZGV2aWNlXG4rICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuKyAqIEByc3ZkMjpcdCAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqIEBjYXBhYmlsaXRpZXM6ICAgICBEZXZpY2UgY2FwYWJpbGl0aWVzXG4rICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuICAqL1xuIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkge1xuIFx0dTggICAgIHZlcnNpb247XG5AQCAtMTMxLDkgKzE1NCwxMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfbXVsdDtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfZGl2O1xuIFx0X19sZTE2IHZpZl90eXBlc1tQRFNfREVWX1RZUEVfTUFYXTtcbitcdF9fbGUxNiBtYXhfZndfc2xvdHM7XG4rXHR1OCAgICAgcnN2ZDJbNl07XG4rXHRfX2xlNjQgY2FwYWJpbGl0aWVzO1xuIH07XG4gXG4gI2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzFcdDFcbisjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlx0MlxuIFxuIC8qKlxuICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpZnlfY21kIC0gRHJpdmVyL2RldmljZSBpZGVudGlmeSBjb21tYW5kXG5AQCAtMjc1LDExICszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIge1xuIFx0UERTX0NPUkVfRldfR0VUX0xJU1QgICAgICAgICAgICAgICA9IDcsXG4gfTtcbiBcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3QgLSBGaXJtd2FyZSBzbG90IGlkZW50aWZpZXJzXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDogTGV0IGZpcm13YXJlIHNlbGVjdCBzbG90IGJhc2VkIG9uIHBhY2thZ2UgbWV0YWRhdGFcbisgKiBAUERTX0NPUkVfRldfU0xPVF9BOiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQVxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0I6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBCXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfR09MRDogICAgR29sZC9yZWNvdmVyeSBmaXJtd2FyZSBzbG90XG4rICogQFBEU19DT1JFX0ZXX1NMT1RfTUFYOiAgICAgU2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyBubyBzbG90IHJlc29sdmVkXG4rICovXG4gZW51bSBwZHNfY29yZV9md19zbG90IHtcbiBcdFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCAgICA9IDAsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0FcdCAgICA9IDEsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0IgICAgICAgICAgPSAyLFxuIFx0UERTX0NPUkVfRldfU0xPVF9HT0xEICAgICAgID0gMyxcbitcdFBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsXG4gfTtcbiBcbiAvKipcbkBAIC00NDYsNiArNDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHtcbiBcdHU4XHRzdGF0dXM7XG4gfTtcbiBcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21tYW5kXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgdGhlIHBhY2thZ2UgZGF0YVxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbiB0aGUgcGFja2FnZSBkYXRhLCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kcyBhcmVcbisgKlx0ICAgIG5lZWRlZCBmb3Igc2VuZGluZyB0aGUgcGFja2FnZSBkYXRhXG4rICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYVxuKyAqIEBkYXRhX3BhOiBEYXRhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSB0byBkZXZpY2VcbisgKlxuKyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXG4rICogUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHRfX2xlMTYgdG90YWxfbGVuO1xuK1x0X19sZTE2IG9mZnNldDtcbitcdF9fbGUxNiBkYXRhX2xlbjtcbitcdF9fbGU2NCBkYXRhX3BhO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wIHtcbitcdHU4IHN0YXR1cztcbitcdHU4IHZlcjtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAtIENvbXBvbmVudCB0YWJsZSBkZXRhaWxzXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxuKyAqIEB0cmFuc2Zlcl9mbGFnOiBQYXJ0IG9mIHRoZSBjb21wb25lbnQgdGFibGUgdGhpcyByZXF1ZXN0IHJlcHJlc2VudHNcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbisgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90Ymwge1xuK1x0X19sZTMyIGNvbXBhcmlzb25fc3RhbXA7XG4rXHRfX2xlMTYgY2xhc3NpZmljYXRpb247XG4rXHRfX2xlMTYgaWRlbnRpZmllcjtcbitcdHU4ICAgICB0cmFuc2Zlcl9mbGFnO1xuK1x0dTggICAgIHZlcnNpb25fc3RyX3R5cGU7XG4rXHR1OCAgICAgdmVyc2lvbl9zdHJfbGVuO1xuK1x0dTggICAgIHZlcnNpb25fc3RyW107XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbW1hbmRcbisgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpXG4rICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcbisgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHtcbitcdHU4IG9wY29kZTtcbitcdHU4IHZlcjtcbitcdHU4IHNsb3RfaWQ7XG4rXHR1OCByc3ZkO1xuK307XG4rXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfcmVzcF9jb2RlIHtcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9WQUxJRCA9IDB4MCxcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgPSAweDEsXG4rXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIgPSAweDIsXG4rXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfT1JfVkVSU0lPTl9JTlZBTElEID0gMHgzLFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX0NPTkZMSUNUID0gMHg0LFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX1BSRVJFUVNfTk9UX01FVCA9IDB4NSxcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9OT1RfU1VQUE9SVEVEID0gMHg2LFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX0ZXX1RZUEVfSU5WQUxJRCA9IDB4ZDAsXG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uXG4rICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wb25lbnQgY29tcGxldGlvbiBjb2RlXG4rICogQHJlc3BvbnNlOiBDb21wb25lbnQgcmVzcG9uc2VcbisgKiBAcmVzcG9uc2VfY29kZTogQ29tcG9uZW50IHJlc3BvbnNlIGNvZGVcbisgKiBAc2xvdF9pZDogQWN0dWFsIHNsb3RfaWQgb2YgdGhlIGNvbXBvbmVudCAoZW51bSBwZHNfY29yZV9md19zbG90KVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggY29tcGxldGlvbl9jb2RlO1xuK1x0dTggcmVzcG9uc2U7XG4rXHR1OCByZXNwb25zZV9jb2RlO1xuK1x0dTggc2xvdF9pZDtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvblxuKyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVDogSW5pdGlhbCBvcGVyYXRpb24gdG8gc3RhcnQgdHJhbnNmZXJcbisgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTOiBTdWJzZXF1ZW50IGNhbGxzIHRvIGNoZWNrIG9uIHN0YXR1c1xuKyAqL1xuK2VudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3Age1xuK1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQgPSAwLFxuK1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTID0gMSxcbit9O1xuK1xuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lEX0lOVkFMSUQgMHhGRkZGXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAtIENvbXBvbmVudCBkZXRhaWxzXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4rICogQGltYWdlX3NpemU6IENvbXBvbmVudCBpbWFnZSBzaXplXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxuKyAqIEBvcHRpb25zOiBDb21wb25lbnQgb3B0aW9uc1xuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbisgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCB7XG4rXHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcbitcdF9fbGUzMiBpbWFnZV9zaXplO1xuK1x0X19sZTE2IGNsYXNzaWZpY2F0aW9uO1xuK1x0X19sZTE2IGlkZW50aWZpZXI7XG4rXHRfX2xlMTYgb3B0aW9ucztcbitcdHU4IHJzdmRbM107XG4rXHR1OCB2ZXJzaW9uX3N0cl90eXBlO1xuK1x0dTggdmVyc2lvbl9zdHJfbGVuO1xuK1x0dTggdmVyc2lvbl9zdHJbXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgLSBTZW5kIGNvbXBvbmVudCBjb21tYW5kXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90XG4rICogQG9wZXJhdGlvbjogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcFxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzXG4rICpcdCAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnRcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBzdG9yZWQgYXQgQGRhdGFfcGFcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4rICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnRcbisgKlxuKyAqIEEgY29tcG9uZW50IG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZVxuKyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXG4rICpcbisgKiBFeHBlY3RzIHRvIGZpbmQgZmxhc2ggY29tcG9uZW50IGluZm8gKHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQpXG4rICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxuKyAqIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGUgZmxhc2ggY29tcG9uZW50IGluZm8uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHR1OCBzbG90X2lkO1xuK1x0dTggb3BlcmF0aW9uO1xuK1x0X19sZTMyIG9mZnNldDtcbitcdF9fbGUzMiBkYXRhX2xlbjtcbitcdHU4IHJzdmRbNF07XG4rXHRfX2xlNjQgZGF0YV9wYTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIC0gU2VuZCBjb21wb25lbnQgY29tcGxldGlvblxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQGNvbXBsZXRpb25fY29kZTogQ29tcGxldGlvbiBjb2RlXG4rICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZClcbisgKiBAY29tcGF0X3Jlc3BvbnNlX2NvZGU6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgY29kZVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCB7XG4rXHR1OCBzdGF0dXM7XG4rXHR1OCB2ZXI7XG4rXHR1OCBjb21wbGV0aW9uX2NvZGU7XG4rXHR1OCBjb21wYXRfcmVzcG9uc2U7XG4rXHR1OCBjb21wYXRfcmVzcG9uc2VfY29kZTtcbitcdHU4IHJzdmRbM107XG4rfTtcbitcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIC0gRmlybXdhcmUgY29tcG9uZW50IHR5cGVcbisgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfTUFJTjogTWFpbiBmaXJtd2FyZVxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX0JPT1Q6IEJvb3QgbG9hZGVyXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZVxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRTogU2VjdXJlIGZpcm13YXJlXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfRlBHQTogRlBHQSBjb25maWd1cmF0aW9uXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcbisgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVDogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfVUJPT1Q6IFUtQm9vdCBib290bG9hZGVyXG4rICpcbisgKiBHb2xkL3JlY292ZXJ5IHZhcmlhbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEXG4rICogYW5kIHJlcG9ydGVkIHdpdGggYSBcIi5nb2xkXCIgc3VmZml4IChlLmcuLCBmdy5nb2xkKS5cbisgKi9cbitlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHtcbitcdFBEU19DT1JFX0ZXX1RZUEVfVU5LTk9XTiAgID0gMCxcbitcdFBEU19DT1JFX0ZXX1RZUEVfTUFJTiAgICAgID0gMSxcbitcdFBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMixcbitcdFBEU19DT1JFX0ZXX1RZUEVfQ1BMRCAgICAgID0gMyxcbitcdFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFICAgID0gNCxcbitcdFBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSxcbitcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU4gID0gNixcbitcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1QgID0gNyxcbitcdFBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCxcbit9O1xuK1xuKy8qKlxuKyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFnc1xuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkc6IENvbXBvbmVudCBpcyBjdXJyZW50bHkgcnVubmluZ1xuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkXG4rICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUU6IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZFxuKyAqXHRieSBuYW1lXG4rICovXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFncyB7XG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcgPSBCSVQoMCksXG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksXG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEID0gQklUKDIpLFxuK1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSA9IEJJVCgzKSxcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeVxuKyAqIEBuYW1lOiBDb21wb25lbnQncyBuYW1lXG4rICogQGNvbXBvbmVudF90eXBlOiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqIEBmbGFnczogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFnc1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBpZGVudGlmaWVyXG4rICogQHNsb3RfaWQ6IENvbXBvbmVudCdzIHNsb3QgaWRlbnRpZmllclxuKyAqIEB2ZXJzaW9uOiBDb21wb25lbnQncyB2ZXJzaW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIHtcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAyNFxuK1x0Y2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07XG4rXHR1OCBjb21wb25lbnRfdHlwZTtcbitcdHU4IHJzdmRbM107XG4rXHRfX2xlMTYgZmxhZ3M7XG4rXHR1OCBpZGVudGlmaWVyO1xuK1x0dTggc2xvdF9pZDtcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIDMyXG4rXHRjaGFyIHZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU5dO1xuK307XG4rXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5cdCgoUERTX1BBR0VfU0laRSAtIDgpIC8gXFxcbitcdFx0c2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpXG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhXG4rICogQG51bV9jb21wb25lbnRzOiBOdW1iZXIgb2YgdmFsaWQgY29tcG9uZW50c1xuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8ge1xuK1x0dTggbnVtX2NvbXBvbmVudHM7XG4rXHR1OCByc3ZkWzddO1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIGluZm9bUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmRcbisgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YVxuKyAqXG4rICogRlcgcG9wdWxhdGVzIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIHBvaW50ZWQgdG8gYnkgQGRhdGFfcGFcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHRfX2xlMTYgZGF0YV9sZW47XG4rXHR1OCByc3ZkWzRdO1xuK1x0X19sZTY0IGRhdGFfcGE7XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvblxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCB7XG4rXHR1OCBzdGF0dXM7XG4rXHR1OCB2ZXI7XG4rXHR1OCByc3ZkWzJdO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgLSBGSU5BTElaRV9VUERBVEUgY29tbWFuZFxuKyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcbisgKiBAdmVyOiBEcml2ZXIncyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIERyaXZlciBzZW5kcyBhdCB0aGUgZW5kIG9mIHVwZGF0aW5nIGFsbCBjb21wb25lbnRzIHRvIGZpbmFsaXplIHRoZSB1cGRhdGVcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHR1OCByc3ZkWzJdO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIC0gRklOQUxJWkVfVVBEQVRFIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggcnN2ZFsyXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21tYW5kXG4rICogQG9wY29kZTogUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEB0eXBlOiBQTERNIERlc2NyaXB0b3IgSWRlbnRpZmllciBUeXBlXG4rICogQHNpemU6IExlbmd0aCBvZiB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIFZhbHVlXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqXG4rICogRXhwZWN0cyB0byBmaW5kIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgRGF0YSBpbiBjbWRfcmVncy1cdTAwM2VkYXRhLiBEcml2ZXJcbisgKiBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQgd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoaXNcbisgKiBjb21tYW5kLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggdmVyO1xuK1x0X19sZTE2IHR5cGU7XG4rXHRfX2xlMTYgc2l6ZTtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0J3NcbisgKiB1bmRlZmluZWQuXG4rICovXG4rc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggbWF0Y2g7XG4rXHR1OCByc3ZkO1xuK307XG4rXG4rLyoqXG4rICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnNcbisgKiBAUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UOiBRdWVyeSBudW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0XG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0RFTDogICAgICAgTm90aWZ5IGZpcm13YXJlIG9mIG1lbW9yeSBkZWFsbG9jYXRpb25cbisgKi9cbitlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIge1xuK1x0UERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UXHQ9IDAsXG4rXHRQRFNfQ09SRV9IT1NUX01FTV9RVUVSWVx0XHQ9IDEsXG4rXHRQRFNfQ09SRV9IT1NUX01FTV9BRERcdFx0PSAyLFxuK1x0UERTX0NPUkVfSE9TVF9NRU1fREVMXHRcdD0gMyxcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgLSBIT1NUX01FTSBjb21tYW5kXG4rICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU1cbisgKiBAb3BlcjogICAgICAgT3BlcmF0aW9uIChlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIpXG4rICogQGluZGV4OiAgICAgIE1lbW9yeSByZXF1ZXN0IGluZGV4IChHRVRfQ09VTlQ6IG1heF9jb3VudCwgUVVFUlk6IGluZGV4KVxuKyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpXG4rICogQHJlYXNvbjogICAgIFJlYXNvbiBmb3IgZGVsZXRpb24gKERFTCBvbmx5KVxuKyAqIEByc3ZkOiAgICAgICBSZXNlcnZlZFxuKyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KVxuKyAqIEBzaXplOiAgICAgICBTaXplIG9mIG1lbW9yeSBpbiBieXRlcyAoQUREIG9ubHkpXG4rICogQGJ1Zl9wYTogICAgIERNQSBhZGRyZXNzIG9mIG1lbW9yeSAoQUREIG9ubHkpXG4rICpcbisgKiBVbmlmaWVkIGNvbW1hbmQgZm9yIGFsbCBob3N0IG1lbW9yeSBvcGVyYXRpb25zLiBGaWVsZHMgYXJlIHJldXNlZFxuKyAqIGFjcm9zcyBvcGVyYXRpb25zIHRvIG1pbmltaXplIG9wY29kZSBzcGFjZSB1c2FnZS5cbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIHtcbitcdHU4ICAgICBvcGNvZGU7XG4rXHR1OCAgICAgb3BlcjtcbitcdF9fbGUxNiBpbmRleDtcbitcdF9fbGUxNiB0YWc7XG4rXHR1OCAgICAgcmVhc29uO1xuK1x0dTggICAgIHJzdmQ7XG4rXHRfX2xlMzIgbWF4X2NvbnRpZztcbitcdF9fbGUzMiBzaXplO1xuK1x0X19sZTY0IGJ1Zl9wYTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIC0gSE9TVF9NRU0gY29tcGxldGlvblxuKyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbisgKiBAb3BlcjogICAgICAgICBPcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkXG4rICogQGNvdW50OiAgICAgICAgTnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0cyAoR0VUX0NPVU5UKVxuKyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKVxuKyAqIEB0YWc6ICAgICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoUVVFUlkvREVMKVxuKyAqIEByc3ZkOiAgICAgICAgIFJlc2VydmVkXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAge1xuK1x0dTggICAgIHN0YXR1cztcbitcdHU4ICAgICBvcGVyO1xuK1x0X19sZTE2IGNvdW50O1xuK1x0X19sZTMyIHNpemU7XG4rXHRfX2xlMTYgdGFnO1xuK1x0dTggICAgIHJzdmRbNl07XG4rfTtcbitcbiAvKlxuICAqIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgLSBPdmVybGF5IG9mIGNvcmUgZGV2aWNlIGNvbW1hbmQgc3RydWN0dXJlc1xuICAqL1xuQEAgLTQ2Miw2ICs5MTUsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCB7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jbWQgICB2Zl9zZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY21kICAgdmZfZ2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NtZCAgICAgIHZmX2N0cmw7XG4rXG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgICAgICBzZW5kX3BrZ19kYXRhO1xuK1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgc2VuZF9jb21wb25lbnRfdGJsO1xuK1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAgICBmaW5hbGl6ZV91cGRhdGU7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kICBtYXRjaF9yZWNvcmRfZGVzYztcbitcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLypcbkBAIC00ODAsNiArOTQxLDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIHtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NvbXAgICB2Zl9zZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY29tcCAgIHZmX2dldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wICAgICAgdmZfY3RybDtcbitcbitcdHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCBnZXRfY29tcG9uZW50X2luZm87XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wICAgICAgc2VuZF9wa2dfZGF0YTtcbitcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAgICAgc2VuZF9jb21wb25lbnQ7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgICAgZmluYWxpemVfdXBkYXRlO1xuK1x0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjO1xuK1x0c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzozMDozNC4xNDE4ODYyNjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDk1MzY1MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogUXVpY2sgRGVjaXNpb24qKlxuXG5Pa2F5LCBzbyBJIGhhdmUgYSBwYXRjaCB0b3VjaGluZyB0aGUgYHBkc19jb3JlYCBkcml2ZXIsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgc3BlY2lmaWMgY29uZGl0aW9uIGluIG15IGV2YWx1YXRpb24gcHJvY2Vzcy4gSSByZW1lbWJlciB0aGUgcHJvbXB0OyBpdCBleHBsaWNpdGx5IGNhbGxzIG91dCBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUgb2YgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgZGV2aWNlcywgU21hcnROSUNzIHNwZWNpZmljYWxseSwgdGhhdCBjYW4ndCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgZGVlcGVyIGludG8gdGhlIHBhdGNoIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMsIGJ1dCBJIGNhbiBzZWUgcmlnaHQgYXdheSBpdCBpcyBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9gLiBUaGUgcGF0Y2ggYWRkcyBQTERNIGZpcm13YXJlIHVwZGF0ZSBzdXBwb3J0IGFuZCBob3N0IG1lbW9yeSBhbGxvY2F0aW9uIGZvciB0aGUgZmlybXdhcmUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIGhlcmUuXG5cblRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGRyaXZlciBpdHNlbGYuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgZmlsZSBwYXRoIGlzIGNvcnJlY3QgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvYCkgYW5kIGl0IGlzIGluZGVlZCBhIGRldmljZSBkcml2ZXIgZm9yIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZXMgYW5kIHVzZXMgUENJLiBUaGUgcHJvbXB0IGlzIHZlcnkgY2xlYXI6IFwidmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBBbmQsIHRoZSBwcm9tcHQgKipleHBsaWNpdGx5KiogdXNlcyBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUuXG5cbkdpdmVuIHRoaXMgZGlyZWN0IG1hdGNoLCBhbmQgdGhlIG5lZWQgZm9yIFBDSSBoYXJkd2FyZSwgSSdtIGNvbmZpZGVudCBpbiByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIE5vIG5lZWQgZm9yIGEgbGVuZ3RoeSBhbmFseXNpcyBoZXJlLCBiZWNhdXNlIGl0IGlzIGV4cGxpY2l0bHkgY2FsbGVkIG91dC4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGEgZHJpdmVyIHRoYXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgZm9yIHdoaWNoIHdlIGNhbm5vdCB0ZXN0IGl0cyBjaGFuZ2VzIGFuZCwgdGhlcmVmb3JlLCBpdCdzIG5vdCBzdWl0YWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1enppbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNjEsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzozMDo0Mi4yMzcyNTU1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBkc19jb3JlIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZHNfY29yZSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf8nf9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 13:28:15 +0000 UTC FinishedAt: 2026-07-31 13:30:44 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZHNfY29yZSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWRhYmFmY2IyZTliMDNiNGUwOTY3Yzk0M2U1NDM0YzU5ZWQyYTdkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDEzOjMwOjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcbmluZGV4IDllOGExNmM0NDEwMjkuLjQ5NDg3YTM1YzE2MzIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcbkBAIC0xMDIsNiAmIzQzOzEwMiw5NSBAQCBjdXJyZW50bHkgaW4gdXNlLCBhbmQgdGhhdCBiYW5rIHdpbGwgdXNlZCBmb3IgdGhlIG5leHQgYm9vdDo6XG4gICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgXFxcbiAgICAgICAgICAgICBmaWxlIHBlbnNhbmRvL2RzY19md18xLjYzLjAtMjIudGFyXG4gXG4mIzQzO0Zpcm13YXJlIE1hbmFnZW1lbnQgKFBMRE0pXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGRldmxpbmsgZmxhc2ggY29tbWFuZFxuJiM0Mzt3aXRoIGEgUExETSBmaXJtd2FyZSBwYWNrYWdlLiBUaGUgZW50aXJlIHBhY2thZ2UgY2FuIGJlIHVwZGF0ZWQgYXQgb25jZTo6XG4mIzQzO1xuJiM0MzsgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBmaWxlIGZpcm13YXJlLnBsZG1md1xuJiM0MztcbiYjNDM7SW5kaXZpZHVhbCBjb21wb25lbnRzIGNhbiBhbHNvIGJlIHVwZGF0ZWQgYnkgc3BlY2lmeWluZyB0aGUgY29tcG9uZW50IG5hbWU6OlxuJiM0MztcbiYjNDM7ICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgXFxcbiYjNDM7ICAgICAgICAgICAgZmlsZSBmaXJtd2FyZS5wbGRtZncgY29tcG9uZW50IGZ3LmNwbGRcbiYjNDM7XG4mIzQzO1Blci1jb21wb25lbnQgdXBkYXRlIHVzZXMgZHJpdmVyLWRlZmluZWQgY29tcG9uZW50IG5hbWVzIChmdywgZncuY3BsZCxcbiYjNDM7ZXRjLikuIE5vdCBhbGwgY29tcG9uZW50cyBzdXBwb3J0IHBlci1jb21wb25lbnQgdXBkYXRlIC1cbiYjNDM7ZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3RcbiYjNDM7YmUgdXBkYXRlZC5cbiYjNDM7XG4mIzQzO0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50XG4mIzQzO25hbWUgKGUuZy4sIGBgZndgYCBmb3IgYGBmdy5nb2xkYGApIHdpdGggYSBnb2xkZncgcGFja2FnZSBmaWxlIHdoZW4gdGhlXG4mIzQzO2RldmljZSBzdXBwb3J0cyBwZXItY29tcG9uZW50IHVwZGF0ZS4gVGhlIGBgLmdvbGRgYCBzdWZmaXggaW4gZGV2bGluayBpbmZvXG4mIzQzO291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuXG4mIzQzO1xuJiM0MztJbmZvIHZlcnNpb25zIChQTERNKVxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7RmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIHJlcG9ydHMgY29tcG9uZW50IHZlcnNpb25zIHVzaW5nIGRyaXZlci1kZWZpbmVkXG4mIzQzO25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6XG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGZvciBQTERNLWNhcGFibGUgZmlybXdhcmVcbiYjNDM7ICAgOndpZHRoczogNSA1IDkwXG4mIzQzO1xuJiM0MzsgICAqIC0gTmFtZVxuJiM0MzsgICAgIC0gVHlwZVxuJiM0MzsgICAgIC0gRGVzY3JpcHRpb25cbiYjNDM7ICAgKiAtIGBgZndgYFxuJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkXG4mIzQzOyAgICAgLSBNYWluIGZpcm13YXJlXG4mIzQzOyAgICogLSBgYGZ3LmdvbGRgYFxuJiM0MzsgICAgIC0gc3RvcmVkXG4mIzQzOyAgICAgLSBHb2xkIChyZWNvdmVyeSkgZmlybXdhcmVcbiYjNDM7ICAgKiAtIGBgZncuYm9vdGxvYWRlcmBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIEJvb3QgbG9hZGVyXG4mIzQzOyAgICogLSBgYGZ3LmNwbGRgYFxuJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkXG4mIzQzOyAgICAgLSBDUExEXG4mIzQzOyAgICogLSBgYGZ3LnNlY3VyZWBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIFNlY3VyZSBib290IGZpcm13YXJlXG4mIzQzOyAgICogLSBgYGZ3LmZwZ2FgYFxuJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkXG4mIzQzOyAgICAgLSBGUEdBIGNvbmZpZ3VyYXRpb25cbiYjNDM7ICAgKiAtIGBgZncuc3VjYGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBmaXJtd2FyZVxuJiM0MzsgICAqIC0gYGBmdy5zdWMuYm9vdGxvYWRlcmBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIFN5c3RlbSBVbml0IENvbnRyb2xsZXIgYm9vdGxvYWRlclxuJiM0MzsgICAqIC0gYGBmdy51Ym9vdGBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIFUtQm9vdCBib290bG9hZGVyXG4mIzQzOyAgICogLSBgYGFzaWMuaWRgYFxuJiM0MzsgICAgIC0gZml4ZWRcbiYjNDM7ICAgICAtIFRoZSBBU0lDIHR5cGUgZm9yIHRoaXMgZGV2aWNlXG4mIzQzOyAgICogLSBgYGFzaWMucmV2YGBcbiYjNDM7ICAgICAtIGZpeGVkXG4mIzQzOyAgICAgLSBUaGUgcmV2aXNpb24gb2YgdGhlIEFTSUMgZm9yIHRoaXMgZGV2aWNlXG4mIzQzO1xuJiM0MztFeGFtcGxlIG91dHB1dDo6XG4mIzQzO1xuJiM0MzsgICQgZGV2bGluayBkZXYgaW5mbyBwY2kvMDAwMDowMDowNS4wXG4mIzQzOyAgcGNpLzAwMDA6MDA6MDUuMDpcbiYjNDM7ICAgIGRyaXZlciBwZHNfY29yZVxuJiM0MzsgICAgc2VyaWFsX251bWJlciBGTE0xODQyMDA3M1xuJiM0MzsgICAgdmVyc2lvbnM6XG4mIzQzOyAgICAgICAgZml4ZWQ6XG4mIzQzOyAgICAgICAgICBhc2ljLmlkIDB4MFxuJiM0MzsgICAgICAgICAgYXNpYy5yZXYgMHgwXG4mIzQzOyAgICAgICAgcnVubmluZzpcbiYjNDM7ICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjNcbiYjNDM7ICAgICAgICAgIGZ3IDEuMy4wXG4mIzQzOyAgICAgICAgICBmdy5jcGxkIDMuMThcbiYjNDM7ICAgICAgICBzdG9yZWQ6XG4mIzQzOyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4mIzQzOyAgICAgICAgICBmdy5nb2xkIDEuMi4wXG4mIzQzOyAgICAgICAgICBmdyAxLjMuMFxuJiM0MzsgICAgICAgICAgZncuY3BsZCAzLjE4XG4mIzQzO1xuIEhlYWx0aCBSZXBvcnRlcnNcbiA9PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ1xuaW5kZXggZTM1OTkxMTQxYTFhMi4uNzQzZTNkNGI2Yjk0ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ1xuQEAgLTE3MSw2ICYjNDM7MTcxLDcgQEAgY29uZmlnIFBEU19DT1JFXG4gXHRkZXBlbmRzIG9uIDY0QklUIFx1MDAyNlx1MDAyNiBQQ0lcbiBcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gXHRzZWxlY3QgTkVUX0RFVkxJTktcbiYjNDM7XHRzZWxlY3QgUExETUZXXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2ZcbiBcdCAgYWRhcHRlcnMuICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG5pbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuQEAgLTQ4OSw2ICYjNDM7NDg5LDE1IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZylcbiBcdFx0cGRzY19kZXZjbWRfcmVzZXQocGRzYyk7XG4gXG4gXHRwY2lfY2xlYXJfbWFzdGVyKHBkc2MtXHUwMDNlcGRldik7XG4mIzQzO1x0aWYgKCFwZHNjLVx1MDAzZXBkZXYtXHUwMDNlaXNfdmlydGZuKSB7XG4mIzQzO1x0XHR1MTYgdmFsO1xuJiM0MztcbiYjNDM7XHRcdC8qIEZsdXNoIGFueSBpbi1mbGlnaHQgRE1BIGJlZm9yZSBmcmVlaW5nIGJ1ZmZlcnMuXG4mIzQzO1x0XHQgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3JcbiYjNDM7XHRcdCAqIGRldmljZS1pbml0aWF0ZWQgbWVtb3J5IHdyaXRlcyBoYXZlIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2YWwpO1xuJiM0MztcdH1cbiBcbiBcdHBkc2NfY29yZV91bmluaXQocGRzYyk7XG4gXG5AQCAtNDk3LDYgJiM0Mzs1MDYsOCBAQCB2b2lkIHBkc2NfdGVhcmRvd24oc3RydWN0IHBkc2MgKnBkc2MsIGJvb2wgcmVtb3ZpbmcpXG4gXHRcdHBkc2MtXHUwMDNldmlmdHlwZV9zdGF0dXMgPSBOVUxMO1xuIFx0fVxuIFxuJiM0MztcdHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7XG4mIzQzO1x0cGRzY19ob3N0X21lbV9mcmVlKHBkc2MpO1xuIFx0cGRzY19kZXZfdW5pbml0KHBkc2MpO1xuIFxuIFx0c2V0X2JpdChQRFNDX1NfRldfREVBRCwgXHUwMDI2cGRzYy1cdTAwM2VzdGF0ZSk7XG5AQCAtNTA2LDYgJiM0Mzs1MTcsOCBAQCBpbnQgcGRzY19zdGFydChzdHJ1Y3QgcGRzYyAqcGRzYylcbiB7XG4gXHRwZHNfY29yZV9pbnRyX21hc2soXHUwMDI2cGRzYy1cdTAwM2VpbnRyX2N0cmxbcGRzYy1cdTAwM2VhZG1pbnFjcS5pbnR4XSxcbiBcdFx0XHQgICBQRFNfQ09SRV9JTlRSX01BU0tfQ0xFQVIpO1xuJiM0MztcdHBkc2NfaG9zdF9tZW1fYWRkKHBkc2MpO1xuJiM0MztcdHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0ocGRzYyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTg3LDYgJiM0Mzs2MDAsOCBAQCB2b2lkIHBkc2NfZndfdXAoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiYjNDM7XHRwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTtcbiYjNDM7XG4gXHRlcnIgPSBwZHNjX3NldHVwKHBkc2MsIFBEU0NfU0VUVVBfUkVDT1ZFUlkpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfb3V0O1xuQEAgLTY3MCwzICYjNDM7Njg1LDE2MSBAQCB2b2lkIHBkc2NfaGVhbHRoX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gb3V0X3VubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZHNjLVx1MDAzZWNvbmZpZ19sb2NrKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwZHNjX2hvc3RfbWVtX2RlbF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiB0YWcsIHU4IHJlYXNvbilcbiYjNDM7e1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU0sXG4mIzQzO1x0XHQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCxcbiYjNDM7XHRcdC5ob3N0X21lbS50YWcgPSBjcHVfdG9fbGUxNih0YWcpLFxuJiM0MztcdFx0Lmhvc3RfbWVtLnJlYXNvbiA9IHJlYXNvbixcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGRlbCB0YWcgJWRcXG5cJiMzNDssIHRhZyk7XG4mIzQzO1x0cGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2hvc3RfbWVtX2FkZF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIGludCBpbmRleClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpobSA9IFx1MDAyNnBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpbmRleF07XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZO1xuJiM0MztcdGNtZC5ob3N0X21lbS5pbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTtcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIHF1ZXJ5IGluZGV4ICVkXFxuXCYjMzQ7LCBpbmRleCk7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gcXVlcnkgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVyciwgY29tcC5zdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4mIzQzO1x0fVxuJiM0MztcdGhtLVx1MDAzZXNpemUgPSBsZTMyX3RvX2NwdShjb21wLmhvc3RfbWVtLnNpemUpO1xuJiM0MztcdGhtLVx1MDAzZXRhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTtcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gcXVlcnkgcmV0dXJuZWQgc2l6ZSAlZCB0YWcgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRobS1cdTAwM2VzaXplLCBobS1cdTAwM2V0YWcpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWhtLVx1MDAzZXNpemUgfHwgaG0tXHUwMDNlc2l6ZSBcdTAwM2UgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtpbnZhbGlkIHNpemUgJWQgZm9yIHRhZyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aG0tXHUwMDNlc2l6ZSwgaG0tXHUwMDNldGFnKTtcbiYjNDM7XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9kZWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRobS1cdTAwM2VvcmRlciA9IGdldF9vcmRlcihobS1cdTAwM2VzaXplKTtcbiYjNDM7XHRobS1cdTAwM2VwZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOLCBobS1cdTAwM2VvcmRlcik7XG4mIzQzO1x0aWYgKCFobS1cdTAwM2VwZykge1xuJiM0MztcdFx0ZGV2X3dhcm4ocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2FsbG9jIG9yZGVyICVkIGZhaWxlZCBmb3IgdGFnICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgaG0tXHUwMDNlb3JkZXIsIGhtLVx1MDAzZXRhZyk7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfZGVsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aG0tXHUwMDNlcGEgPSBkbWFfbWFwX3BhZ2UocGRzYy1cdTAwM2VkZXYsIGhtLVx1MDAzZXBnLCAwLCBobS1cdTAwM2VzaXplLFxuJiM0MztcdFx0XHQgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXHUwMDNlZGV2LCBobS1cdTAwM2VwYSkpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2RtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aG0tXHUwMDNldGFnLCBobS1cdTAwM2VzaXplKTtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhobS1cdTAwM2VwZywgaG0tXHUwMDNlb3JkZXIpO1xuJiM0MztcdFx0aG0tXHUwMDNlcGcgPSBOVUxMO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gZXJyX2RlbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi9cbiYjNDM7XHRwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmNtZCwgMCwgc2l6ZW9mKGNtZCkpO1xuJiM0MztcdG1lbXNldChcdTAwMjZjb21wLCAwLCBzaXplb2YoY29tcCkpO1xuJiM0MztcdGNtZC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU07XG4mIzQzO1x0Y21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9BREQ7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLVx1MDAzZXRhZyk7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLnNpemUgPSBjcHVfdG9fbGUzMihobS1cdTAwM2VzaXplKTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0uYnVmX3BhID0gY3B1X3RvX2xlNjQoaG0tXHUwMDNlcGEpO1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGFkZCB0YWcgJWQgc2l6ZSAlZCBwYSAlcGFkXFxuXCYjMzQ7LFxuJiM0MztcdFx0aG0tXHUwMDNldGFnLCBobS1cdTAwM2VzaXplLCBcdTAwMjZobS1cdTAwM2VwYSk7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gYWRkIGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkIGZvciB0YWcgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVyciwgY29tcC5zdGF0dXMsIGhtLVx1MDAzZXRhZyk7XG4mIzQzO1x0XHRlcnIgPSBlcnIgPyBlcnIgOiAtRUlPO1xuJiM0MztcdFx0Z290byBlcnJfZGVsO1xuJiM0MztcdH1cbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXFxuXCYjMzQ7LCBobS1cdTAwM2V0YWcpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9kZWw6XG4mIzQzO1x0LyogQWZ0ZXIgTUVNX1FVRVJZIHN1Y2NlZWRzLCBmaXJtd2FyZSBleHBlY3RzIE1FTV9BREQgb3IgTUVNX0RFTCAqL1xuJiM0MztcdHBkc2NfaG9zdF9tZW1fZGVsX29uZShwZHNjLCBobS1cdTAwM2V0YWcsIFBEU19SQ19FTk9NRU0pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGRzY19ob3N0X21lbV9hZGQoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTtcbiYjNDM7XHR1MTYgY291bnQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuJiM0MztcdCAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRjbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNO1xuJiM0MztcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UO1xuJiM0MztcdGNtZC5ob3N0X21lbS5pbmRleCA9IGNwdV90b19sZTE2KFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UKTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0ubWF4X2NvbnRpZyA9IGNwdV90b19sZTMyKFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XG4mIzQzO1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCYjMzQ7U2VuZGluZyBkZXZjbWQgZm9yIG1lbSBnZXQgY291bnQgbWF4X2NvbnRpZyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gZ2V0IGNvdW50IGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvdW50ID0gbWluKGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0uY291bnQpLFxuJiM0MztcdFx0ICAgIFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UKTtcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDttZW0gZ2V0IGNvdW50IHJldHVybmVkIGNvdW50ICVkXFxuXCYjMzQ7LCBjb3VudCk7XG4mIzQzO1x0aWYgKGNvdW50ID09IDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzLCBjb3VudCxcbiYjNDM7XHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2MgaG9zdF9tZW1fcmVxcyBhcnJheVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRkbWFfdW5tYXBfcGFnZShwZHNjLVx1MDAzZWRldiwgcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldLnBhLFxuJiM0MztcdFx0XHQgICAgICAgcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldLnNpemUsXG4mIzQzO1x0XHRcdCAgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZXMocGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldLnBnLFxuJiM0MztcdFx0XHQgICAgIHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5vcmRlcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMpO1xuJiM0MztcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IE5VTEw7XG4mIzQzO1x0cGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxcyA9IDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaFxuaW5kZXggYjdmZTlhZDczMzQ5OC4uNzkxNzU2YTUwODcwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiAjZGVmaW5lIF9QRFNDX0hfXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tem9uZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bkcy9wZHNfY29tbW9uLmhcdTAwM2VcbkBAIC0yMyw2ICYjNDM7MjQsMjAgQEBcbiAjZGVmaW5lIFBEU0NfU0VUVVBfUkVDT1ZFUllcdGZhbHNlXG4gI2RlZmluZSBQRFNDX1NFVFVQX0lOSVRcdFx0dHJ1ZVxuIFxuJiM0MzsvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZFxuJiM0MzsgKiBjcHVfdG9fbGUzMigpIHRydW5jYXRpb24gb24gbGFyZ2UtcGFnZSBjb25maWdzXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KVxuJiM0MzsjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UICAyNTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4mIzQzO1x0dm9pZCAqdmE7XG4mIzQzO1x0c2l6ZV90IHNpemU7XG4mIzQzO1x0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcGRzY19kZXZfYmFyIHtcbiBcdHZvaWQgX19pb21lbSAqdmFkZHI7XG4gXHRwaHlzX2FkZHJfdCBidXNfYWRkcjtcbkBAIC0xNDEsNiAmIzQzOzE1NiwxNCBAQCBzdHJ1Y3QgcGRzY192aWZ0eXBlIHtcbiBcdHN0cnVjdCBwZHNfYXV4aWxpYXJ5X2RldiAqcGFkZXY7XG4gfTtcbiBcbiYjNDM7c3RydWN0IHBkc2NfaG9zdF9tZW0ge1xuJiM0MztcdHUzMiBzaXplO1xuJiM0MztcdHUxNiB0YWc7XG4mIzQzO1x0dTggb3JkZXI7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBnO1xuJiM0MztcdGRtYV9hZGRyX3QgcGE7XG4mIzQzO307XG4mIzQzO1xuIC8qIE5vIHN0YXRlIGZsYWdzIHNldCBtZWFucyB3ZSBhcmUgaW4gYSBzdGVhZHkgcnVubmluZyBzdGF0ZSAqL1xuIGVudW0gcGRzY19zdGF0ZV9mbGFncyB7XG4gXHRQRFNDX1NfRldfREVBRCxcdFx0ICAgIC8qIHN0b3BwZWQsIHdhaXQgb24gc3RhcnR1cCBvciByZWNvdmVyeSAqL1xuQEAgLTE4NSw2ICYjNDM7MjA4LDggQEAgc3RydWN0IHBkc2Mge1xuIFx0c3RydWN0IG11dGV4IGRldmNtZF9sb2NrO1x0LyogbG9jayBmb3IgZGV2X2NtZCBvcGVyYXRpb25zICovXG4gXHRzdHJ1Y3QgbXV0ZXggY29uZmlnX2xvY2s7XHQvKiBsb2NrIGZvciBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgKi9cbiBcdHNwaW5sb2NrX3QgYWRtaW5xX2xvY2s7XHRcdC8qIGxvY2sgZm9yIGFkbWlucSBvcGVyYXRpb25zICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDtcbiYjNDM7XHRzcGlubG9ja190IGRlZmVycmVkX2RtYV9sb2NrO1x0LyogbG9jayBmb3IgZGVmZXJyZWQgRE1BIGxpc3QgKi9cbiBcdHJlZmNvdW50X3QgYWRtaW5xX3JlZmNudDtcbiBcdHN0cnVjdCBwZHNfY29yZV9kZXZfaW5mb19yZWdzIF9faW9tZW0gKmluZm9fcmVncztcbiBcdHN0cnVjdCBwZHNfY29yZV9kZXZfY21kX3JlZ3MgX19pb21lbSAqY21kX3JlZ3M7XG5AQCAtMTk5LDYgJiM0MzsyMjQsMTEgQEAgc3RydWN0IHBkc2Mge1xuIFx0dTY0IGxhc3RfZWlkO1xuIFx0c3RydWN0IHBkc2NfdmlmdHlwZSAqdmlmdHlwZV9zdGF0dXM7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGNpX3Jlc2V0X3dvcms7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpob3N0X21lbV9yZXFzO1xuJiM0MztcdHUxNiBudW1faG9zdF9tZW1fcmVxcztcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gZndfY29tcG9uZW50cztcbiB9O1xuIFxuIC8qKiBlbnVtIHBkc19jb3JlX2RiZWxsX2JpdHMgLSBiaXR3aXNlIGNvbXBvc2l0aW9uIG9mIGRiZWxsIHZhbHVlcy5cbkBAIC0yNzUsMTQgJiM0MzszMDUsMjQgQEAgdm9pZCBwZHNjX2RlYnVnZnNfYWRkX3ZpZnR5cGUoc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9pcnFzKHN0cnVjdCBwZHNjICpwZHNjKTtcbiB2b2lkIHBkc2NfZGVidWdmc19hZGRfcWNxKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XG4gdm9pZCBwZHNjX2RlYnVnZnNfZGVsX3FjcShzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XG4mIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4mIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gXG4gaW50IHBkc2NfZXJyX3RvX2Vycm5vKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUgY29kZSk7XG4gYm9vbCBwZHNjX2lzX2Z3X3J1bm5pbmcoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGJvb2wgcGRzY19pc19md19nb29kKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XG4mIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XG4mIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0XHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XG4gaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0XHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XG4mIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG5AQCAtMzE1LDExICYjNDM7MzU1LDIzIEBAIHZvaWQgcGRzY19wcm9jZXNzX2FkbWlucShzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XG4gdm9pZCBwZHNjX3dvcmtfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gaXJxcmV0dXJuX3QgcGRzY19hZG1pbnFfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpO1xuIFxuLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjNDM7aW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuJiM0MztcdFx0XHQgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztpbnQgcGRzY19nZXRfY29tcG9uZW50X2luZm8oc3RydWN0IHBkc2MgKnBkc2MpO1xuJiM0Mztjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKTtcbiYjNDM7dm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gXG4gdm9pZCBwZHNjX2Z3X2Rvd24oc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX3BjaV9yZXNldF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4mIzQzO3ZvaWQgcGRzY19ob3N0X21lbV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7XG4mIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfYWRkKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LFxuJiM0MztcdFx0XHQgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XG4mIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4mIzQzO1xuICNlbmRpZiAvKiBfUERTQ19IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXG5pbmRleCA4MTBhMGNkOWJjYWM4Li5lZjBhMWI3ZDE1OWI1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xuQEAgLTE3OCwzICYjNDM7MTc4LDQ4IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpXG4gXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLVx1MDAzZWRlbnRyeSk7XG4gXHRxY3EtXHUwMDNlZGVudHJ5ID0gTlVMTDtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhvc3RfbWVtX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuJiM0MztcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpobTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMgfHwgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxcyA9PSAwKSB7XG4mIzQzO1x0XHRzZXFfcHV0cyhzZXEsIFwmIzM0O05vIGhvc3QgbWVtb3J5IGFsbG9jYXRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNlcV9wcmludGYoc2VxLCBcJiMzNDtIb3N0IG1lbW9yeSByZXF1ZXN0czogJXVcXG5cXG5cJiMzNDssXG4mIzQzO1x0XHQgICBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzKTtcbiYjNDM7XHRzZXFfcHV0cyhzZXEsIFwmIzM0O1RhZyAgICBTaXplICAgICAgICAgT3JkZXIgIFBBXFxuXCYjMzQ7KTtcbiYjNDM7XHRzZXFfcHV0cyhzZXEsIFwmIzM0Oy0tLSAgICAtLS0tICAgICAgICAgLS0tLS0gIC0tXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGhtID0gXHUwMDI2cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICghaG0tXHUwMDNlcGcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNlcV9wcmludGYoc2VxLCBcJiMzNDslLTZ1ICUtMTJ1ICUtNnUgJXBhZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgaG0tXHUwMDNldGFnLCBobS1cdTAwM2VzaXplLCBobS1cdTAwM2VvcmRlciwgXHUwMDI2aG0tXHUwMDNlcGEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGhvc3RfbWVtKTtcbiYjNDM7XG4mIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7e1xuJiM0MztcdGlmICghKHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcdTAwMjZcbiYjNDM7XHQgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtob3N0X21lbVwmIzM0OywgMDQwMCwgcGRzYy1cdTAwM2VkZW50cnksXG4mIzQzO1x0XHRcdCAgICBwZHNjLCBcdTAwMjZob3N0X21lbV9mb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0ZGVidWdmc19sb29rdXBfYW5kX3JlbW92ZShcJiMzNDtob3N0X21lbVwmIzM0OywgcGRzYy1cdTAwM2VkZW50cnkpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jXG5pbmRleCBiZGVkNmIzMzI4OWNlLi5jNTA3NzgxNzVlMmYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbkBAIC0xMjYsNyAmIzQzOzEyNiw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwZHNjX2RldmNtZF9zdHIoaW50IG9wY29kZSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCBib29sIGRvX21zZylcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZHNjLVx1MDAzZWRldjtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTtcbkBAIC0xNzksNyAmIzQzOzE4MCw3IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXG4gXG4gXHRzdGF0dXMgPSBwZHNjX2RldmNtZF9zdGF0dXMocGRzYyk7XG4gXHRlcnIgPSBwZHNjX2Vycl90b19lcnJubyhzdGF0dXMpO1xuLVx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pXG4mIzQzO1x0aWYgKGRvX21zZyBcdTAwMjZcdTAwMjYgZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0RFVkNNRCAlZCAlcyBmYWlsZWQsIHN0YXR1cz0lZCBlcnIgJWQgJXBlXFxuXCYjMzQ7LFxuIFx0XHRcdG9wY29kZSwgcGRzY19kZXZjbWRfc3RyKG9wY29kZSksIHN0YXR1cywgZXJyLFxuIFx0XHRcdEVSUl9QVFIoZXJyKSk7XG5AQCAtMTg3LDggJiM0MzsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuLVx0XHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMsXG4mIzQzO1x0XHRcdFx0Y29uc3QgYm9vbCBkb19tc2cpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xOTcsMTYgJiM0MzsxOTksNjMgQEAgaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFxuIFx0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VjbWQsIGNtZCwgc2l6ZW9mKCpjbWQpKTtcbiBcdHBkc2NfZGV2Y21kX2RiZWxsKHBkc2MpO1xuLVx0ZXJyID0gcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtXHUwMDNlb3Bjb2RlLCBtYXhfc2Vjb25kcyk7XG4mIzQzO1x0ZXJyID0gX19wZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzLCBkb19tc2cpO1xuIFxuIFx0aWYgKChlcnIgPT0gLUVOWElPIHx8IGVyciA9PSAtRVRJTUVET1VUKSBcdTAwMjZcdTAwMjYgcGRzYy1cdTAwM2V3cSlcbiBcdFx0cXVldWVfd29yayhwZHNjLVx1MDAzZXdxLCBcdTAwMjZwZHNjLVx1MDAzZWhlYWx0aF93b3JrKTtcbiBcdGVsc2VcbiBcdFx0bWVtY3B5X2Zyb21pbyhjb21wLCBcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWNvbXAsIHNpemVvZigqY29tcCkpO1xuIFxuJiM0MztcdGlmIChlcnIgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pXG4mIzQzO1x0XHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuJiM0MztcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0Mzt2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcbiYjNDM7XHRcdFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxuJiM0MztcdFx0XHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXG4mIzQzO3tcbiYjNDM7XHRlbnRyeS1cdTAwM2VkbWFfYWRkciA9IGRtYV9hZGRyO1xuJiM0MztcdGVudHJ5LVx1MDAzZXZhID0gdmE7XG4mIzQzO1x0ZW50cnktXHUwMDNlc2l6ZSA9IHNpemU7XG4mIzQzO1x0ZW50cnktXHUwMDNlZGlyID0gZGlyO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGRfdGFpbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9saXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSwgKnRtcDtcbiYjNDM7XHRMSVNUX0hFQUQobG9jYWxfbGlzdCk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcbiYjNDM7XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QsIFx1MDAyNmxvY2FsX2xpc3QpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgXHUwMDI2bG9jYWxfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZW50cnktXHUwMDNlZG1hX2FkZHIsXG4mIzQzO1x0XHRcdFx0IGVudHJ5LVx1MDAzZXNpemUsIGVudHJ5LVx1MDAzZWRpcik7XG4mIzQzO1x0XHRrZnJlZShlbnRyeS1cdTAwM2V2YSk7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdGtmcmVlKGVudHJ5KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4mIzQzO1x0XHRcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXG4ge1xuQEAgLTIxOSw2ICYjNDM7MjY4LDQ3IEBAIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdFx0ICAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCxcbiYjNDM7XHRcdFx0XHQgICBpbnQgbWF4X3NlY29uZHMsIGJvb2wgZG9fbXNnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwZHNjLVx1MDAzZWRldmNtZF9sb2NrKTtcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpIHtcbiYjNDM7XHRcdGVyciA9IC1FTlhJTztcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoZGF0YV9sZW4gXHUwMDNlIHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdG1lbWNweV90b2lvKFx1MDAyNnBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSwgZGF0YSwgZGF0YV9sZW4pO1xuJiM0MztcdGVyciA9IF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGRvX21zZyk7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0XHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBwZHNjX2RldmNtZF9pbml0KHN0cnVjdCBwZHNjICpwZHNjKVxuIHtcbiBcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbkBAIC0yNDIsMTUgJiM0MzszMzIsMTcgQEAgaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcixcbiYjNDM7XHRcdFx0XHQgICAgICAgYm9vbCBkb19tc2cpXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4gXHRcdC5pZGVudGlmeS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSURFTlRJRlksXG4tXHRcdC5pZGVudGlmeS52ZXIgPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEsXG4mIzQzO1x0XHQuaWRlbnRpZnkudmVyID0gZHJ2X2lkZW50X3ZlcixcbiBcdH07XG4gXG4tXHRyZXR1cm4gcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCxcbiYjNDM7XHRcdFx0XHQgICAgZG9fbXNnKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXG5AQCAtMjczLDggJiM0MzszNjUsOSBAQCBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2Z3X3ZlcnNpb24gJXNcXG5cJiMzNDssIHBkc2MtXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7c3RhdGljIGludCBwZHNjX2lkZW50aWZ5X3ZlcihzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcilcbiB7XG4mIzQzO1x0Ym9vbCBkb19tc2cgPSBkcnZfaWRlbnRfdmVyID09IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMTtcbiBcdHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307XG4gXHRzaXplX3Qgc3o7XG4gXHRpbnQgZXJyO1xuQEAgLTI5NywxOSAmIzQzOzM5MCwyMiBAQCBzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKGRydiksIHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpKTtcbiBcdG1lbWNweV90b2lvKFx1MDAyNnBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSwgXHUwMDI2ZHJ2LCBzeik7XG4gXG4tXHRlcnIgPSBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQocGRzYyk7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHBkc2MsIGRydl9pZGVudF92ZXIsIGRvX21zZyk7XG4gXHRpZiAoIWVycikge1xuIFx0XHRzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKHBkc2MtXHUwMDNlZGV2X2lkZW50KSxcbiBcdFx0XHQgICBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKSk7XG4gXHRcdG1lbWNweV9mcm9taW8oXHUwMDI2cGRzYy1cdTAwM2VkZXZfaWRlbnQsIFx1MDAyNnBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSwgc3opO1xuJiM0MztcbiYjNDM7XHRcdC8qIFYxIGZpcm13YXJlIGRvZXNuJiMzOTt0IHNldCBjYXBhYmlsaXRpZXMsIHNvIHRoZSBmaWVsZCBtYXlcbiYjNDM7XHRcdCAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwZHNjLVx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFx1MDAzYyBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpXG4mIzQzO1x0XHRcdHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4gXG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcblwmIzM0Oyxcbi1cdFx0XHRFUlJfUFRSKGVycikpO1xuJiM0MztcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXG4gXHRpZiAoaXNwcmludChwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb25bMF0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlzYXNjaWkocGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSlcbkBAIC0zMjYsNiAmIzQzOzQyMiwyNiBAQCBzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIE9sZGVyIGZpcm13YXJlIHJlamVjdHMgYW55dGhpbmcgYnV0IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxuJiM0MztcdCAqIHdpdGggUERTX1JDX0VWRVJTSU9OICgtRUlOVkFMKSwgc28gcmV0cnkgd2l0aCBWMSBvbiB2ZXJzaW9uXG4mIzQzO1x0ICogcmVqZWN0aW9uLiBEb24mIzM5O3QgcmV0cnkgb24gb3RoZXIgZXJyb3JzIGxpa2UgLUVOWElPLy1FVElNRURPVVRcbiYjNDM7XHQgKiB3aGljaCBpbmRpY2F0ZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyBvciBodW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMik7XG4mIzQzO1x0aWYgKGVyciA9PSAtRUlOVkFMKVxuJiM0MztcdFx0ZXJyID0gcGRzY19pZGVudGlmeV92ZXIocGRzYywgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0RVJSX1BUUihlcnIpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHBkc2NfZGV2X3VuaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcbiB7XG4gXHRpZiAocGRzYy1cdTAwM2VpbnRyX2luZm8pIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbkBAIC05MCwxMyAmIzQzOzkwLDExMiBAQCBpbnQgcGRzY19kbF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxuIHtcbiBcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbiBcbi1cdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4tXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4tXHRcdFx0XHQgICBcJiMzNDtDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX3JlcG9ydF9jb21wb25lbnQoc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlO1xuJiM0MztcdHUxNiBmbGFncyA9IGxlMTZfdG9fY3B1KGluZm8tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdGNoYXIgKnZlciA9IGluZm8tXHUwMDNldmVyc2lvbjtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdGNoYXIgYnVmWzMyXTtcbiYjNDM7XG4mIzQzO1x0LyogTWFpbiBmaXJtd2FyZSBpcyByZXBvcnRlZCBhcyBnZW5lcmljIFwmIzM0O2Z3XCYjMzQ7ICovXG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlY29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcbiYjNDM7XHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7ZncuZ29sZFwmIzM0Oyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0O2Z3XCYjMzQ7KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGluZm8tXHUwMDNlY29tcG9uZW50X3R5cGUpO1xuJiM0MztcdFx0aWYgKCFuYW1lKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcbiYjNDM7XHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7ZncuJXMuZ29sZFwmIzM0OywgbmFtZSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0O2Z3LiVzXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9OT05FO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSlcbiYjNDM7XHRcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRCkge1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBidWYsIHZlcik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcpIHtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXRfZXh0KHJlcSwgYnVmLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHZlciwgdmVyX3R5cGUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdHJldHVybiBwZHNjX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMtXHUwMDNlZncsIGV4dGFjayk7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVApIHtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dF9leHQocmVxLCBidWYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICB2ZXIsIHZlcl90eXBlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX3JlcG9ydF9md192ZXIoc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwgY2hhciAqZndfdmVyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSxcbiYjNDM7XHRcdFx0XHRcdFx0REVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19GVyxcbiYjNDM7XHRcdFx0XHRcdFx0ZndfdmVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XG4mIzQzO1x0dTggbnVtX2NvbXBvbmVudHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuXG4mIzQzO1x0ICogVXNlIFJFQURfT05DRSB0byBnZXQgYSBjb25zaXN0ZW50IHNuYXBzaG90IG9mIG51bV9jb21wb25lbnRzLlxuJiM0MztcdCAqIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkgY2FuIHplcm8gaXQgY29uY3VycmVudGx5IGR1cmluZ1xuJiM0MztcdCAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm9cbiYjNDM7XHQgKiB0aW1lcyB3aGVuIHdlIGFscmVhZHkgZGVjaWRlZCB0aGUgY2FjaGUgd2FzIHZhbGlkLlxuJiM0MztcdCAqL1xuJiM0MztcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XG4mIzQzO1x0aWYgKCFudW1fY29tcG9uZW50cykge1xuJiM0MztcdFx0ZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHBkc2MtXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XG4mIzQzO1x0XHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpO1xuJiM0MztcdFx0aWYgKCFudW1fY29tcG9uZW50cylcbiYjNDM7XHRcdFx0cmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLFxuJiM0MztcdFx0XHQgICAgICAgbGUxNl90b19jcHUocGRzYy1cdTAwM2VkZXZfaWRlbnQubWF4X2Z3X3Nsb3RzKSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RsX3JlcG9ydF9jb21wb25lbnQocmVxLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xuQEAgLTEwNSw4ICYjNDM7MjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xuIFx0XCYjMzQ7ZncubWFpbmZ3YlwmIzM0OyxcbiB9O1xuIFxuLWludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbi1cdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9md19saXN0X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuIFx0XHQuZndfY29udHJvbC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfRldfQ09OVFJPTCxcbkBAIC0xNDAsMTIgJiM0MzsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsXG4tXHRcdFx0XHRcdCAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxuLVx0XHRcdFx0XHQgICAgICAgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX2luZm9fZ2V0X3YxKHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGRzY19kbF9md19saXN0X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdC8qIFZlcnNpb24gMTogcmVwb3J0IGZ3IGZyb20gZGV2X2luZm8gKHJ1bm5pbmcgb25seSkgKi9cbiYjNDM7XHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSwgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwZHNjLVx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXJyID0gcGRzY19kbF9pbmZvX2dldF92MShkbCwgcmVxLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7MHgleFwmIzM0OywgcGRzYy1cdTAwM2VkZXZfaW5mby5hc2ljX3R5cGUpO1xuIFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcbiBcdFx0XHRcdFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuY1xuaW5kZXggZmE2MjY3MTllNjhkMS4uNWNjZjAxN2Y2YWY0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuY1xuQEAgLTEsNiAmIzQzOzEsOSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0KGMpIDIwMjMgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsZG1mdy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiBcbiAvKiBUaGUgd29yc3QgY2FzZSB3YWl0IGZvciB0aGUgaW5zdGFsbCBhY3Rpdml0eSBpcyBhYm91dCAyNSBtaW51dGVzIHdoZW5cbkBAIC0xNCw2ICYjNDM7MTcsNTggQEBcbiAvKiBOdW1iZXIgb2YgcGVyaW9kaWMgbG9nIHVwZGF0ZXMgZHVyaW5nIGZ3IGZpbGUgZG93bmxvYWQgKi9cbiAjZGVmaW5lIFBEU0NfRldfSU5URVJWQUxfRlJBQ1RJT05cdDMyXG4gXG4mIzQzOyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfUFJFRklYXHRcdFwmIzM0O2Z3LlwmIzM0O1xuJiM0MzsjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXFxcbiYjNDM7XHQoc2l6ZW9mKFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCkgJiM0MzsgUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOKVxuJiM0MztcbiYjNDM7LyogRHJpdmVyLWRlZmluZWQgY29tcG9uZW50IHR5cGUgdG8gbmFtZSBtYXBwaW5nLlxuJiM0MzsgKiBQRFNfQ09SRV9GV19UWVBFX01BSU4gaXMgTlVMTCAtIGhhbmRsZWQgc3BlY2lhbGx5IGFzIFwmIzM0O2Z3XCYjMzQ7IHdpdGhvdXQgcHJlZml4LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZHNjX2Z3X3R5cGVfbmFtZXNbXSA9IHtcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9NQUlOXSAgICAgID0gTlVMTCxcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9CT09UXSAgICAgID0gXCYjMzQ7Ym9vdGxvYWRlclwmIzM0OyxcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9DUExEXSAgICAgID0gXCYjMzQ7Y3BsZFwmIzM0OyxcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9TRUNVUkVdICAgID0gXCYjMzQ7c2VjdXJlXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX0ZQR0FdICAgICAgPSBcJiMzNDtmcGdhXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOXSAgPSBcJiMzNDtzdWNcJiMzNDssXG4mIzQzO1x0W1BEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1RdICA9IFwmIzM0O3N1Yy5ib290bG9hZGVyXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX1VCT09UXSAgICAgPSBcJiMzNDt1Ym9vdFwmIzM0OyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2NvbnN0IGNoYXIgKnBkc2NfZndfdHlwZV90b19uYW1lKHU4IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAodHlwZSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpIFx1MDAyNlx1MDAyNiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pXG4mIzQzO1x0XHRyZXR1cm4gcGRzY19md190eXBlX25hbWVzW3R5cGVdO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UgaW4gcGRzY19kbF9jb21wb25lbnRfaW5mb19nZXQoKSAqL1xuJiM0MztcdFdSSVRFX09OQ0UocGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU4IHBkc2NfbmFtZV90b19md190eXBlKGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgcHJlZml4X2xlbjtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogXCYjMzQ7ZndcJiMzNDsgd2l0aG91dCBzdWZmaXggbWFwcyB0byBtYWluIGZpcm13YXJlICovXG4mIzQzO1x0aWYgKCFzdHJjbXAobmFtZSwgXCYjMzQ7ZndcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIFBEU19DT1JFX0ZXX1RZUEVfTUFJTjtcbiYjNDM7XG4mIzQzO1x0cHJlZml4X2xlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCk7XG4mIzQzO1x0aWYgKHByZWZpeF9sZW4pXG4mIzQzO1x0XHRuYW1lICYjNDM7PSBwcmVmaXhfbGVuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAxOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAocGRzY19md190eXBlX25hbWVzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFzdHJjbXAobmFtZSwgcGRzY19md190eXBlX25hbWVzW2ldKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcbiBcdFx0XHRcdFx0ICB1MzIgb2Zmc2V0LCB1MzIgbGVuZ3RoKVxuIHtcbkBAIC0yMyw3ICYjNDM7NzgsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdC5md19kb3dubG9hZC5hZGRyID0gY3B1X3RvX2xlNjQoYWRkciksXG4gXHRcdC5md19kb3dubG9hZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuIFx0fTtcbi1cdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuIFxuIFx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuIH1cbkBAIC05NSw5ICYjNDM7MTUwLDEyIEBAIHN0YXRpYyBpbnQgcGRzY19md19zdGF0dXNfbG9uZ193YWl0KHN0cnVjdCBwZHNjICpwZHNjLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuLVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7cGRzY19sZWdhY3lfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gcGFyYW1zLVx1MDAzZWZ3O1xuIFx0dTMyIGJ1Zl9zeiwgY29weV9zeiwgb2Zmc2V0O1xuIFx0c3RydWN0IGRldmxpbmsgKmRsO1xuIFx0aW50IG5leHRfaW50ZXJ2YWw7XG5AQCAtMTA1LDYgJiM0MzsxNjMsMTIgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuIFx0aW50IGVyciA9IDA7XG4gXHRpbnQgZndfc2xvdDtcbiBcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXZfaW5mbyhwZHNjLVx1MDAzZWRldiwgXCYjMzQ7SW5zdGFsbGluZyBmaXJtd2FyZVxcblwmIzM0Oyk7XG4gXG4gXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpXG5AQCAtMTk1LDMgJiM0MzsyNTksNzI5IEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiBcdFx0XHRcdFx0XHQgICBOVUxMLCAwLCAwKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiM0MztcbiYjNDM7c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYge1xuJiM0MztcdHUxNiBjb21wb25lbnRfaWQ7XG4mIzQzO1x0Ym9vbCBza2lwO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwZHNfY29yZV9md3VfcHJpdiB7XG4mIzQzO1x0c3RydWN0IHBsZG1mdyBjb250ZXh0O1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2M7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBjb21wb25lbnRzO1xuJiM0MztcdGJvb2wgY29tcG9uZW50X2ZvdW5kO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGRzY19mcmVlX2Z3dV9wcml2KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdiwgKnRtcDtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbXBvbmVudF9wcml2LCB0bXAsIFx1MDAyNnByaXYtXHUwMDNlY29tcG9uZW50cyxcbiYjNDM7XHRcdFx0XHQgbGlzdF9lbnRyeSkge1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2Y29tcG9uZW50X3ByaXYtXHUwMDNlbGlzdF9lbnRyeSk7XG4mIzQzO1x0XHRrZnJlZShjb21wb25lbnRfcHJpdik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX21hdGNoX3JlY29yZF9kZXNjKHN0cnVjdCBwZHNjICpwZHNjLCB1MTYgZGVzY190eXBlLFxuJiM0MztcdFx0XHRcdFx0IHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHQgdTggKm1hdGNoKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2Mub3Bjb2RlID0gUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDLFxuJiM0MztcdFx0Lm1hdGNoX3JlY29yZF9kZXNjLnZlciA9IDEsXG4mIzQzO1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksXG4mIzQzO1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2Muc2l6ZSA9IGNwdV90b19sZTE2KGRlc2Nfc2l6ZSksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFx1MDAyNmNtZCwgZGVzY19kYXRhLCBkZXNjX3NpemUsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdCptYXRjaCA9IGNvbXAubWF0Y2hfcmVjb3JkX2Rlc2MubWF0Y2g7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBwbGRtZndfcmVjb3JkICpyZWNvcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4mIzQzO1x0c3RydWN0IHBsZG1md19kZXNjX3RsdiAqZGVzYztcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZChjb250ZXh0LCByZWNvcmQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsIFx1MDAyNnJlY29yZC1cdTAwM2VkZXNjcywgZW50cnkpIHtcbiYjNDM7XHRcdHU4IG1hdGNoO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKGRlc2MtXHUwMDNldHlwZSkge1xuJiM0MztcdFx0Lyogc2tpcCB0eXBlcyBjaGVja2VkIGluIHBsZG1md19vcF9wY2lfbWF0Y2hfcmVjb3JkICovXG4mIzQzO1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfVkVORE9SX0lEOlxuJiM0MztcdFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX0RFVklDRV9JRDpcbiYjNDM7XHRcdGNhc2UgUExETV9ERVNDX0lEX1BDSV9TVUJWRU5ET1JfSUQ6XG4mIzQzO1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCREVWX0lEOlxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRlc2MtXHUwMDNlc2l6ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHBkc2NfZGV2Y21kX21hdGNoX3JlY29yZF9kZXNjKHBkc2MsIGRlc2MtXHUwMDNldHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGRlc2MtXHUwMDNlc2l6ZSwgZGVzYy1cdTAwM2VkYXRhLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgXHUwMDI2bWF0Y2gpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O21hdGNoX3JlY29yZF9kZXNjIGZhaWxlZCB0eXBlOiAweCUwNHggc2l6ZTogJXUsIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRkZXNjLVx1MDAzZXR5cGUsIGRlc2MtXHUwMDNlc2l6ZSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogYWxsIHJlY29yZCBkZXNjcmlwdG9ycyBtdXN0IG1hdGNoICovXG4mIzQzO1x0XHRpZiAoIW1hdGNoKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgdTE2IGxlbmd0aCwgdTE2IG9mZnNldCwgdTE2IHRvdGFsX2xlbilcbiYjNDM7e1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEsXG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS52ZXIgPSAxLFxuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihsZW5ndGgpLFxuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEub2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KSxcbiYjNDM7XHRcdC5zZW5kX3BrZ19kYXRhLnRvdGFsX2xlbiA9IGNwdV90b19sZTE2KHRvdGFsX2xlbiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1xuJiM0MztcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsXG4mIzQzO1x0XHRcdFx0ICB1MTYgbGVuZ3RoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuJiM0MztcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR1OCAqcGFja2FnZV9kYXRhO1xuJiM0MztcdHUzMiBvZmZzZXQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFsZW5ndGgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZGVmZXJyZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9kYXRhID0ga21lbWR1cChkYXRhLCBsZW5ndGgsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcGFja2FnZV9kYXRhKSB7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGRtYV9tYXAgcGFja2FnZV9kYXRhIGxlbmd0aCAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRsZW5ndGgpO1xuJiM0MztcdFx0a2ZyZWUocGFja2FnZV9kYXRhKTtcbiYjNDM7XHRcdGtmcmVlKGRlZmVycmVkKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGxlbmd0aDsgb2Zmc2V0ICYjNDM7PSBQRFNfUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR1MzIgY29weV9zejtcbiYjNDM7XG4mIzQzO1x0XHRjb3B5X3N6ID0gbWluX3QodW5zaWduZWQgaW50LCBQRFNfUEFHRV9TSVpFLCBsZW5ndGggLSBvZmZzZXQpO1xuJiM0MztcdFx0ZXJyID0gcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEocGRzYywgZG1hX2FkZHIgJiM0Mzsgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgY29weV9zeiwgb2Zmc2V0LCBsZW5ndGgpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QocHJpdi1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGFcJiMzNDspO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuJiM0MztcdFx0cGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgICBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRrZnJlZShwYWNrYWdlX2RhdGEpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXS5jb21wb25lbnRfdHlwZSA9PSB0eXBlKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdFx0XHQgICB1OCBjb21wb25lbnRfaWQsIHU4IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbiYjNDM7XHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSA9PSB0eXBlKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTggcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBjb21wb25lbnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbiYjNDM7XHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQpXG4mIzQzO1x0XHRcdHJldHVybiBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcGRzY19za2lwX2NvbXBvbmVudChzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0dTE2IGNvbXBvbmVudF9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjb21wb25lbnRfcHJpdiwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzLCBsaXN0X2VudHJ5KSB7XG4mIzQzO1x0XHRpZiAoY29tcG9uZW50X3ByaXYtXHUwMDNlY29tcG9uZW50X2lkID09IGNvbXBvbmVudF9pZClcbiYjNDM7XHRcdFx0cmV0dXJuIGNvbXBvbmVudF9wcml2LVx1MDAzZXNraXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudCxcbiYjNDM7XHRcdFx0XHQgICAgIHU4IHRyYW5zZmVyX2ZsYWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7XG4mIzQzO1x0c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXHUwMDNlZGV2O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cdTAwM2VwZHNjO1xuJiM0MztcdGJvb2wgc2tpcF9jb21wb25lbnQgPSBmYWxzZTtcbiYjNDM7XHR1OCByZXF1ZXN0ZWRfdHlwZSA9IDA7XG4mIzQzO1x0dTE2IGJ1Zl9zeiwgdGJsX3N6O1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKGRldixcbiYjNDM7XHRcdFwmIzM0O2NvbXBvbmVudCBuYW1lICVzIGNsYXNzaWZpY2F0aW9uICV1IGlkICV1IGFjdGl2YXRpb25fbWV0aG9kICV1IHZlcl9sZW4gJWQgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXUgdHJhbnNmZXJfZmxhZyAweCUwMnhcXG5cJiMzNDssXG4mIzQzO1x0XHRwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbiYjNDM7XHRcdGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyLCBjb21wb25lbnQtXHUwMDNlYWN0aXZhdGlvbl9tZXRob2QsXG4mIzQzO1x0XHRjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4sIGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbixcbiYjNDM7XHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3N0cmluZywgY29tcG9uZW50LVx1MDAzZWluZGV4LFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZWNvbXBvbmVudF9zaXplLCB0cmFuc2Zlcl9mbGFnKTtcbiYjNDM7XG4mIzQzO1x0Y29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY29tcG9uZW50X3ByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuJiM0MztcdFx0cmVxdWVzdGVkX3R5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQpO1xuJiM0MztcdFx0aWYgKGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyIFx1MDAzZSBVOF9NQVggfHxcbiYjNDM7XHRcdCAgICAhcGRzY19jb21wb25lbnRfaWRfbWF0Y2hlc190eXBlKHBkc2MsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHJlcXVlc3RlZF90eXBlKSkge1xuJiM0MztcdFx0XHRza2lwX2NvbXBvbmVudCA9IHRydWU7XG4mIzQzO1x0XHRcdGdvdG8gYWRkX2NvbXBvbmVudF9wcml2O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb21wb25lbnRfZm91bmQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmX3N6ID0gc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSk7XG4mIzQzO1x0dGJsX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X3RibCwgdmVyc2lvbl9zdHIsXG4mIzQzO1x0XHRcdCAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbiYjNDM7XHRpZiAodGJsX3N6IFx1MDAzZSBidWZfc3opIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHR0Ymxfc3osIGJ1Zl9zeik7XG4mIzQzO1x0XHRlcnIgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBmcmVlX2NvbXBvbmVudF9wcml2O1xuJiM0MztcdH1cbiYjNDM7XHRjb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY29tcG9uZW50X3RibCkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNvbXBvbmVudF90YmwtXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XG4mIzQzO1x0XHRjcHVfdG9fbGUzMihjb21wb25lbnQtXHUwMDNlY29tcGFyaXNvbl9zdGFtcCk7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2VjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbik7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuJiM0MztcdGNvbXBvbmVudF90YmwtXHUwMDNldHJhbnNmZXJfZmxhZyA9IHRyYW5zZmVyX2ZsYWc7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2V2ZXJzaW9uX3N0cl90eXBlID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fdHlwZTtcbiYjNDM7XHRjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbjtcbiYjNDM7XHRtZW1jcHkoY29tcG9uZW50X3RibC1cdTAwM2V2ZXJzaW9uX3N0ciwgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fc3RyaW5nLFxuJiM0MztcdCAgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuJiM0MztcbiYjNDM7XHRjbWQuc2VuZF9jb21wb25lbnRfdGJsLm9wY29kZSA9IFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkw7XG4mIzQzO1x0Y21kLnNlbmRfY29tcG9uZW50X3RibC52ZXIgPSAxO1xuJiM0MztcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFx1MDAyNmNtZCwgY29tcG9uZW50X3RibCwgdGJsX3N6LFxuJiM0MztcdFx0XHRcdCAgICBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRrZnJlZShjb21wb25lbnRfdGJsKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHNlbmRpbmcgY29tcG9uZW50IHRhYmxlOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4mIzQzO1x0XHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2lwX2NvbXBvbmVudCA9IGNvbXAuc2VuZF9jb21wb25lbnRfdGJsLnJlc3BvbnNlID09IDE7XG4mIzQzO1xuJiM0MzthZGRfY29tcG9uZW50X3ByaXY6XG4mIzQzO1x0Y29tcG9uZW50X3ByaXYtXHUwMDNlc2tpcCA9IHNraXBfY29tcG9uZW50O1xuJiM0MztcdGNvbXBvbmVudF9wcml2LVx1MDAzZWNvbXBvbmVudF9pZCA9IGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyO1xuJiM0MztcdGxpc3RfYWRkKFx1MDAyNmNvbXBvbmVudF9wcml2LVx1MDAzZWxpc3RfZW50cnksIFx1MDAyNnByaXYtXHUwMDNlY29tcG9uZW50cyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZnJlZV9jb21wb25lbnRfcHJpdjpcbiYjNDM7XHRrZnJlZShjb21wb25lbnRfcHJpdik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sXG4mIzQzO1x0XHQuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9IDEsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAqbGlzdF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4mIzQzO1x0dTggbnVtX2NvbXBvbmVudHM7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQpO1xuJiM0MztcdGlmICghZGVmZXJyZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9pbmZvID0ga3phbGxvYyhQRFNfUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxpc3RfaW5mbykge1xuJiM0MztcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHBkc2MtXHUwMDNlZGV2LCBsaXN0X2luZm8sIFBEU19QQUdFX1NJWkUsXG4mIzQzO1x0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcdGlmIChkbWFfbWFwcGluZ19lcnJvcihwZHNjLVx1MDAzZWRldiwgZG1hX2FkZHIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfbGlzdF9pbmZvIGxlbmd0aCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0UERTX1BBR0VfU0laRSk7XG4mIzQzO1x0XHRrZnJlZShsaXN0X2luZm8pO1xuJiM0MztcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoUERTX1BBR0VfU0laRSk7XG4mIzQzO1x0Y21kLmdldF9jb21wb25lbnRfaW5mby5kYXRhX3BhID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQgKiAyKTtcbiYjNDM7XHRpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHtcbiYjNDM7XHRcdHBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsIGxpc3RfaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKGRlZmVycmVkKTtcbiYjNDM7XHRkbWFfdW5tYXBfc2luZ2xlKHBkc2MtXHUwMDNlZGV2LCBkbWFfYWRkciwgUERTX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkge1xuJiM0MztcdFx0LyogRG9uJiMzOTt0IHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyB2ZXJzaW9uIDAgaGFzXG4mIzQzO1x0XHQgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGVcbiYjNDM7XHRcdCAqIHRoZWlyIGZpcm13YXJlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl93YXJuX29uY2UocGRzYy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0luY29tcGF0aWJsZSBnZXRfY29tcG9uZW50X2luZm8gdmVyc2lvbiAldSByZXBvcnRlZCBieSBmaXJtd2FyZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgY29tcC5nZXRfY29tcG9uZW50X2luZm8udmVyKTtcbiYjNDM7XHRcdGVyciA9IDA7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG51bV9jb21wb25lbnRzID0gbGlzdF9pbmZvLVx1MDAzZW51bV9jb21wb25lbnRzO1xuJiM0MztcdGlmIChudW1fY29tcG9uZW50cyBcdTAwM2UgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMgPSBudW1fY29tcG9uZW50cztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9XG4mIzQzO1x0XHRcdFx1MDAyNnBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldO1xuJiM0MztcbiYjNDM7XHRcdG1lbWNweShpbmZvLCBcdTAwMjZsaXN0X2luZm8tXHUwMDNlaW5mb1tpXSwgc2l6ZW9mKCppbmZvKSk7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZXZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU4gLSAxXSA9IDA7XG4mIzQzO1x0XHRpbmZvLVx1MDAzZW5hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIC0gMV0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShsaXN0X2luZm8pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9jb21wb25lbnQoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICB1MTYgaW5mb19zeiwgZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuZ3RoLFxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBvZmZzZXQsIHUxNiBzbG90X2lkLFxuJiM0MztcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULFxuJiM0MztcdFx0LnNlbmRfY29tcG9uZW50LnZlciA9IDEsXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQub3BlcmF0aW9uID0gUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQsXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxuJiM0MztcdFx0LnNlbmRfY29tcG9uZW50LmRhdGFfbGVuID0gY3B1X3RvX2xlMzIobGVuZ3RoKSxcbiYjNDM7XHRcdC5zZW5kX2NvbXBvbmVudC5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpLFxuJiM0MztcdFx0LnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLFxuJiM0MztcdH07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMzAwICogSFo7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c3RhcnRfdGltZSA9IGppZmZpZXM7XG4mIzQzO1x0ZW5kX3RpbWUgPSBzdGFydF90aW1lICYjNDM7IHRpbWVvdXQ7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0LyogcHJldmVudCBub2lzeS9iZW5pZ24gZGV2Y21kIGZhaWx1cmVzICovXG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2cocGRzYywgXHUwMDI2Y21kLCBpbmZvLCBpbmZvX3N6LFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbXAsIDYwKTtcbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogaWYgcmVxdWlyZWQsIHN1YnNlcXVlbnQgY29tbWFuZHMgY2hlY2sgc3RhdHVzIG9mXG4mIzQzO1x0XHQgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJuc1xuJiM0MztcdFx0ICogRUFHQUlOIHdoaWxlIHRoZSBjb21tYW5kIGlzIHN0aWxsIHJ1bm5pbmcsXG4mIzQzO1x0XHQgKiBlbHNlIHdlIGdldCB0aGUgZmluYWwgY29tbWFuZCBzdGF0dXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNtZC5zZW5kX2NvbXBvbmVudC5vcGVyYXRpb24gPSBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVM7XG4mIzQzO1x0XHRtc2xlZXAoMjApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIgPT0gLUVBR0FJTiB8fCBlcnIgPT0gLUVUSU1FRE9VVClcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O1BEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCB0aW1lZCBvdXRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcbiYjNDM7XHRcdFx0XHQgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LFxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBvZmZzZXQsIHU4IHNsb3RfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkO1xuJiM0MztcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4mIzQzO1x0dTggKmNvbXBvbmVudF9kYXRhO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWRlZmVycmVkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGNvbXBvbmVudF9kYXRhID0ga21lbWR1cChkYXRhLCBjb3B5X3N6LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWNvbXBvbmVudF9kYXRhKSB7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGRtYV9tYXAgY29tcG9uZW50X2RhdGEgYXQgb2Zmc2V0IDB4JXggY29weV9zeiAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRvZmZzZXQsIGNvcHlfc3opO1xuJiM0MztcdFx0a2ZyZWUoY29tcG9uZW50X2RhdGEpO1xuJiM0MztcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChwZHNjLCBpbmZvLCBpbmZvX3N6LCBkbWFfYWRkcixcbiYjNDM7XHRcdFx0XHRcdCBjb3B5X3N6LCBvZmZzZXQsIHNsb3RfaWQsIGNvbXApO1xuJiM0MztcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuJiM0MztcdFx0cGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkcixcbiYjNDM7XHRcdFx0XHQgICAgICBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0a2ZyZWUoY29tcG9uZW50X2RhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZmxhc2hfY29tcG9uZW50KHN0cnVjdCBwbGRtZncgKmNvbnRleHQsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudClcbiYjNDM7e1xuJiM0MztcdGNoYXIgY29tcG9uZW50X25hbWVfYnVmW1BEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU5dO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICpjb21wb25lbnRfaW5mbztcbiYjNDM7XHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4mIzQzO1x0dTE2IGJ1Zl9zeiwgaW5mb19zejtcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4mIzQzO1x0dTggY29tcG9uZW50X3R5cGU7XG4mIzQzO1x0dTMyIHRvdGFsX2xlbjtcbiYjNDM7XHR1MzIgb2Zmc2V0O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGNvbXBvbmVudF90eXBlID0gcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQocGRzYyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyKTtcbiYjNDM7XHRpZiAoY29tcG9uZW50X3R5cGUpIHtcbiYjNDM7XHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGNvbXBvbmVudF90eXBlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7XG4mIzQzO1x0XHRcdGNvbXBvbmVudF9uYW1lID0gXCYjMzQ7ZndcJiMzNDs7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHR5cGVfbmFtZSkge1xuJiM0MztcdFx0XHRzbnByaW50Zihjb21wb25lbnRfbmFtZV9idWYsIHNpemVvZihjb21wb25lbnRfbmFtZV9idWYpLFxuJiM0MztcdFx0XHRcdCBcJiMzNDslcyVzXCYjMzQ7LCBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgsIHR5cGVfbmFtZSk7XG4mIzQzO1x0XHRcdGNvbXBvbmVudF9uYW1lID0gY29tcG9uZW50X25hbWVfYnVmO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XG4mIzQzO1xuJiM0MztcdGlmIChwZHNjX3NraXBfY29tcG9uZW50KHByaXYsIGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyKSkge1xuJiM0MztcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCYjMzQ7U2tpcHBlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0b3RhbF9sZW4gPSBjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemU7XG4mIzQzO1x0ZGV2X2RiZyhkZXYsXG4mIzQzO1x0XHRcJiMzNDtjb21wb25lbnQgbmFtZSAlcyBjbGFzcyAldSBpZCAldSBhY3RfbWV0aCAldSB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdGNvbXBvbmVudF9uYW1lID86IFwmIzM0Oyh1bmtub3duKVwmIzM0OywgY29tcG9uZW50LVx1MDAzZWNsYXNzaWZpY2F0aW9uLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbiYjNDM7XHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbiwgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fc3RyaW5nLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZWluZGV4LCBjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemUpO1xuJiM0MztcbiYjNDM7XHRidWZfc3ogPSBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKTtcbiYjNDM7XHRpbmZvX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X2luZm8sIHZlcnNpb25fc3RyLFxuJiM0MztcdFx0XHQgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuJiM0MztcdGlmIChpbmZvX3N6IFx1MDAzZSBidWZfc3opIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aW5mb19zeiwgYnVmX3N6KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuJiM0MztcdH1cbiYjNDM7XHRjb21wb25lbnRfaW5mbyA9IHZ6YWxsb2MoaW5mb19zeik7XG4mIzQzO1x0aWYgKCFjb21wb25lbnRfaW5mbylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cbiYjNDM7XHRcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2VpbWFnZV9zaXplID0gY3B1X3RvX2xlMzIodG90YWxfbGVuKTtcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2VjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbik7XG4mIzQzO1x0Y29tcG9uZW50X2luZm8tXHUwMDNlaWRlbnRpZmllciA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyKTtcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2VvcHRpb25zID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZW9wdGlvbnMpO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtXHUwMDNldmVyc2lvbl90eXBlO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbjtcbiYjNDM7XHRtZW1jcHkoY29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHIsIGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3N0cmluZyxcbiYjNDM7XHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbiYjNDM7XG4mIzQzO1x0b2Zmc2V0ID0gMDtcbiYjNDM7XHR3aGlsZSAob2Zmc2V0IFx1MDAzYyB0b3RhbF9sZW4pIHtcbiYjNDM7XHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHRcdHUxNiBjb3B5X3N6O1xuJiM0MztcbiYjNDM7XHRcdGNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsXG4mIzQzO1x0XHRcdFx0dG90YWxfbGVuIC0gb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudF9jaHVuayhwZHNjLCBkZXYsIGNvbXBvbmVudF9pbmZvLFxuJiM0MztcdFx0XHRcdFx0XHQgaW5mb19zeixcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfZGF0YSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0XHQgb2Zmc2V0LCBjb3B5X3N6LCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHRcdCBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQsXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZjb21wKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT1cbiYjNDM7XHRcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCB8fFxuJiM0MztcdFx0ICAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09XG4mIzQzO1x0XHQgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUikpIHtcbiYjNDM7XHRcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCYjMzQ7U2tpcHBlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAwLCAwKTtcbiYjNDM7XHRcdFx0Z290byBza2lwX2NvbXBvbmVudDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBmbGFzaCBjb21wb25lbnRcJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBjb3B5X3N6O1xuJiM0MztcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXCYjMzQ7RXJhc2luZy9GbGFzaGluZ1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgdG90YWxfbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZmcmVlKGNvbXBvbmVudF9pbmZvKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0VyYXNpbmcvRmxhc2hpbmcgQ29tcG9uZW50IEZhaWxlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbiYjNDM7c2tpcF9jb21wb25lbnQ6XG4mIzQzO1x0dmZyZWUoY29tcG9uZW50X2luZm8pO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQuZmluYWxpemVfdXBkYXRlLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEUsXG4mIzQzO1x0XHQuZmluYWxpemVfdXBkYXRlLnZlciA9IDEsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1xuJiM0MztcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4mIzQzO1x0Y29uc3QgY2hhciAqY29tcG9uZW50X25hbWUgPSBwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lLCBlbmRfdGltZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbiYjNDM7XHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XG4mIzQzO1xuJiM0MztcdHN0YXJ0X3RpbWUgPSBqaWZmaWVzO1xuJiM0MztcdGVuZF90aW1lID0gc3RhcnRfdGltZSAmIzQzOyAoUERTQ19GV19JTlNUQUxMX1RJTUVPVVQgKiBIWik7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0ZXJyID0gcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHBkc2MpO1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRkZXZfZGJnKGRldiwgXCYjMzQ7cmV0cnlpbmcgZmluYWxpemVfdXBkYXRlOiAlcGVcXG5cJiMzNDssIEVSUl9QVFIoZXJyKSk7XG4mIzQzO1x0XHRtc2xlZXAoMjApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSBcdTAwMjZcdTAwMjYgZXJyID09IC1FQUdBSU4pO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcJiMzNDtGaW5hbGl6ZSBVcGRhdGUgRmFpbGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QocHJpdi1cdTAwM2VleHRhY2ssIFwmIzM0O0ZpbmFsaXplIHVwZGF0ZSBmYWlsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFwmIzM0O0ZpbmFsaXplZCBVcGRhdGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7XG4mIzQzO1x0Lm1hdGNoX3JlY29yZCA9IHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzLFxuJiM0MztcdC5zZW5kX3BhY2thZ2VfZGF0YSA9IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEsXG4mIzQzO1x0LnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSxcbiYjNDM7XHQuZmxhc2hfY29tcG9uZW50ID0gcGRzY19mbGFzaF9jb21wb25lbnQsXG4mIzQzO1x0LmZpbmFsaXplX3VwZGF0ZSA9IHBkc2NfZmluYWxpemVfdXBkYXRlXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfcGxkbV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2IHByaXYgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cykge1xuJiM0MztcdFx0ZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gZ2V0IGNvbXBvbmVudCBpbmZvXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHR1OCB0eXBlID0gcGRzY19uYW1lX3RvX2Z3X3R5cGUocGFyYW1zLVx1MDAzZWNvbXBvbmVudCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF0eXBlIHx8ICFwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhwZHNjLCB0eXBlKSkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtVbmtub3duIGNvbXBvbmVudCBuYW1lXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LmNvbXBvbmVudHMpO1xuJiM0MztcdHByaXYuY29udGV4dC5vcHMgPSBcdTAwMjZwZHNjX3BsZG1md19vcHM7XG4mIzQzO1x0cHJpdi5jb250ZXh0LmRldiA9IHBkc2MtXHUwMDNlZGV2O1xuJiM0MztcdHByaXYucGFyYW1zID0gcGFyYW1zO1xuJiM0MztcdHByaXYuZXh0YWNrID0gZXh0YWNrO1xuJiM0MztcdHByaXYucGRzYyA9IHBkc2M7XG4mIzQzO1xuJiM0MztcdGVyciA9IHBsZG1md19mbGFzaF9pbWFnZShcdTAwMjZwcml2LmNvbnRleHQsIGZ3KTtcbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcGFyYW1zLVx1MDAzZWNvbXBvbmVudCBcdTAwMjZcdTAwMjYgIXByaXYuY29tcG9uZW50X2ZvdW5kKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O1JlcXVlc3RlZCBjb21wb25lbnQgbm90IHByZXNlbnQgaW4gZmlybXdhcmUgcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRU5PRU5UO1xuJiM0MztcdH1cbiYjNDM7XHRwZHNjX2ZyZWVfZnd1X3ByaXYoXHUwMDI2cHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChwZHNjLVx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwZHNjLVx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXHUwMDI2XG4mIzQzO1x0XHRjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFKSlcbiYjNDM7XHRcdGVyciA9IHBkc2NfcGxkbV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdHBhcmFtcy1cdTAwM2Vmdyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyID0gcGRzY19sZWdhY3lfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrKTtcbiYjNDM7XG4mIzQzO1x0LyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi9cbiYjNDM7XHRwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG5pbmRleCA4ZDk0YTRkNzAzOTVlLi41ZTFiMDc4NTAxNjNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xuQEAgLTIxLDYgJiM0MzsyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZHNjX2lkX3RhYmxlW10gPSB7XG4gfTtcbiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGRzY19pZF90YWJsZSk7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgcGRzY193ZHRpbWVyX2NiKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIHtcbiBcdHN0cnVjdCBwZHNjICpwZHNjID0gdGltZXJfY29udGFpbmVyX29mKHBkc2MsIHQsIHdkdGltZXIpO1xuQEAgLTMxNSw2ICYjNDM7MzE3LDcgQEAgc3RhdGljIGludCBwZHNjX2luaXRfcGYoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKHBkc2MtXHUwMDNld3EpO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwZHNjLVx1MDAzZWNvbmZpZ19sb2NrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4mIzQzO1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiBcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkc2MtXHUwMDNlcGRldik7XG4gZXJyX291dF91bm1hcF9iYXJzOlxuIFx0cGRzY191bm1hcF9iYXJzKHBkc2MpO1xuQEAgLTM1Myw2ICYjNDM7MzU2LDggQEAgc3RhdGljIGludCBwZHNjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0cGRzYy1cdTAwM2VwZGV2ID0gcGRldjtcbiBcdHBkc2MtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gXHRzZXRfYml0KFBEU0NfU19JTklUSU5HX0RSSVZFUiwgXHUwMDI2cGRzYy1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbGlzdCk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGRzYyk7XG4gXHRwZHNjX2RlYnVnZnNfYWRkX2RldihwZHNjKTtcbiBcbkBAIC00NTgsNiAmIzQzOzQ2Myw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0fVxuIFxuIFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xuJiM0MztcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XG4gXG4gXHRpZGFfZnJlZShcdTAwMjZwZHNjX2lkYSwgcGRzYy1cdTAwM2V1aWQpO1xuIFx0cGRzY19kZWJ1Z2ZzX2RlbF9kZXYocGRzYyk7XG5AQCAtNTA1LDYgJiM0Mzs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpO1xuIFx0aWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKVxuIFx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGRzY19yZXNldF9kb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmggYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG5pbmRleCAxN2E4N2MxYTU1ZDdjLi45MDFlMWU2MjhmODkwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaFxuQEAgLTQwLDYgJiM0Mzs0MCwxNCBAQCBlbnVtIHBkc19jb3JlX2NtZF9vcGNvZGUge1xuIFx0UERTX0NPUkVfQ01EX0ZXX0RPV05MT0FEXHQ9IDQsXG4gXHRQRFNfQ09SRV9DTURfRldfQ09OVFJPTFx0XHQ9IDUsXG4gXG4mIzQzO1x0UERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1x0PSA2LFxuJiM0MztcdFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXHQ9IDcsXG4mIzQzO1x0UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFx0PSA4LFxuJiM0MztcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFx0PSA5LFxuJiM0MztcdFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcdD0gMTAsXG4mIzQzO1x0UERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXHQ9IDExLFxuJiM0MztcdFBEU19DT1JFX0NNRF9IT1NUX01FTVx0XHQ9IDEyLFxuJiM0MztcbiBcdC8qIFNSL0lPViBjb21tYW5kcyAqL1xuIFx0UERTX0NPUkVfQ01EX1ZGX0dFVEFUVFJcdFx0PSA2MCxcbiBcdFBEU19DT1JFX0NNRF9WRl9TRVRBVFRSXHRcdD0gNjEsXG5AQCAtMTAwLDYgJiM0MzsxMDgsMTYgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XG4gXHRjaGFyICAgZHJpdmVyX3Zlcl9zdHJbMzJdO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IC0gRGV2aWNlIGNhcGFiaWxpdGllc1xuJiM0MzsgKiBAUERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURTogRGV2aWNlIG9ubHkgc3VwcG9ydHMgRlcgdXBkYXRlIHZpYSBQTERNXG4mIzQzOyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZVxuJiM0MzsgKi9cbiYjNDM7ZW51bSBwZHNfY29yZV9kZXZfY2FwYWJpbGl0eSB7XG4mIzQzO1x0UERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSA9IEJJVCgwKSxcbiYjNDM7XHRQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNID0gQklUKDEpLFxuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVhcdDE2XG4gLyoqXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvblxuQEAgLTExOSw2ICYjNDM7MTM3LDExIEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkge1xuICAqXHRcdCAgICAgIHZhbHVlIGluIHVzZWNzIHRvIGRldmljZSB1bml0cyB1c2luZzpcbiAgKlx0XHQgICAgICBkZXZpY2UgdW5pdHMgPSB1c2VjcyAqIG11bHQgLyBkaXZcbiAgKiBAdmlmX3R5cGVzOiAgICAgICAgSG93IG1hbnkgb2YgZWFjaCBWSUYgZGV2aWNlIHR5cGUgaXMgc3VwcG9ydGVkXG4mIzQzOyAqIEBtYXhfZndfc2xvdHM6ICAgICBOdW1iZXIgb2YgZmlybXdhcmUgY29tcG9uZW50cyByZXBvcnRlZCBieSBkZXZpY2VcbiYjNDM7ICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuJiM0MzsgKiBAcnN2ZDI6XHQgICAgICBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICogQGNhcGFiaWxpdGllczogICAgIERldmljZSBjYXBhYmlsaXRpZXNcbiYjNDM7ICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuICAqL1xuIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkge1xuIFx0dTggICAgIHZlcnNpb247XG5AQCAtMTMxLDkgJiM0MzsxNTQsMTMgQEAgc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7XG4gXHRfX2xlMzIgaW50cl9jb2FsX211bHQ7XG4gXHRfX2xlMzIgaW50cl9jb2FsX2RpdjtcbiBcdF9fbGUxNiB2aWZfdHlwZXNbUERTX0RFVl9UWVBFX01BWF07XG4mIzQzO1x0X19sZTE2IG1heF9md19zbG90cztcbiYjNDM7XHR1OCAgICAgcnN2ZDJbNl07XG4mIzQzO1x0X19sZTY0IGNhcGFiaWxpdGllcztcbiB9O1xuIFxuICNkZWZpbmUgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xXHQxXG4mIzQzOyNkZWZpbmUgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXHQyXG4gXG4gLyoqXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGlmeV9jbWQgLSBEcml2ZXIvZGV2aWNlIGlkZW50aWZ5IGNvbW1hbmRcbkBAIC0yNzUsMTEgJiM0MzszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIge1xuIFx0UERTX0NPUkVfRldfR0VUX0xJU1QgICAgICAgICAgICAgICA9IDcsXG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfZndfc2xvdCAtIEZpcm13YXJlIHNsb3QgaWRlbnRpZmllcnNcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDogTGV0IGZpcm13YXJlIHNlbGVjdCBzbG90IGJhc2VkIG9uIHBhY2thZ2UgbWV0YWRhdGFcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfQTogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEFcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfQjogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEJcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfR09MRDogICAgR29sZC9yZWNvdmVyeSBmaXJtd2FyZSBzbG90XG4mIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX01BWDogICAgIFNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgbm8gc2xvdCByZXNvbHZlZFxuJiM0MzsgKi9cbiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3Qge1xuIFx0UERTX0NPUkVfRldfU0xPVF9JTlZBTElEICAgID0gMCxcbiBcdFBEU19DT1JFX0ZXX1NMT1RfQVx0ICAgID0gMSxcbiBcdFBEU19DT1JFX0ZXX1NMT1RfQiAgICAgICAgICA9IDIsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0dPTEQgICAgICAgPSAzLFxuJiM0MztcdFBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsXG4gfTtcbiBcbiAvKipcbkBAIC00NDYsNiAmIzQzOzQ4Miw0MjMgQEAgc3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY29tcCB7XG4gXHR1OFx0c3RhdHVzO1xuIH07XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQVxuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHRvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIHRoZSBwYWNrYWdlIGRhdGFcbiYjNDM7ICogQG9mZnNldDogT2Zmc2V0IGluIHRoZSBwYWNrYWdlIGRhdGEsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzIGFyZVxuJiM0MzsgKlx0ICAgIG5lZWRlZCBmb3Igc2VuZGluZyB0aGUgcGFja2FnZSBkYXRhXG4mIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgc3RvcmVkIGF0IGRhdGFfcGFcbiYjNDM7ICogQGRhdGFfcGE6IERhdGEgcGh5c2ljYWwgYWRkcmVzcyBmb3IgRE1BIHRvIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcGFja2FnZSBkYXRhIG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZVxuJiM0MzsgKiBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQSBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0X19sZTE2IHRvdGFsX2xlbjtcbiYjNDM7XHRfX2xlMTYgb2Zmc2V0O1xuJiM0MztcdF9fbGUxNiBkYXRhX2xlbjtcbiYjNDM7XHRfX2xlNjQgZGF0YV9wYTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wIC0gU2VuZCBwYWNrYWdlIGRhdGEgY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAge1xuJiM0MztcdHU4IHN0YXR1cztcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAtIENvbXBvbmVudCB0YWJsZSBkZXRhaWxzXG4mIzQzOyAqIEBjb21wYXJpc29uX3N0YW1wOiBDb21wYXJpc29uIHN0YW1wIHVzZWQgZm9yIGNvbXBvbmVudCB2ZXJzaW9uIGNoZWNrc1xuJiM0MzsgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvXG4mIzQzOyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQmIzM5O3MgSURcbiYjNDM7ICogQHRyYW5zZmVyX2ZsYWc6IFBhcnQgb2YgdGhlIGNvbXBvbmVudCB0YWJsZSB0aGlzIHJlcXVlc3QgcmVwcmVzZW50c1xuJiM0MzsgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuJiM0MzsgKiBAdmVyc2lvbl9zdHJfbGVuOiBMZW5ndGggb2YgQHZlcnNpb25fc3RyXG4mIzQzOyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb25cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsIHtcbiYjNDM7XHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcbiYjNDM7XHRfX2xlMTYgY2xhc3NpZmljYXRpb247XG4mIzQzO1x0X19sZTE2IGlkZW50aWZpZXI7XG4mIzQzO1x0dTggICAgIHRyYW5zZmVyX2ZsYWc7XG4mIzQzO1x0dTggICAgIHZlcnNpb25fc3RyX3R5cGU7XG4mIzQzO1x0dTggICAgIHZlcnNpb25fc3RyX2xlbjtcbiYjNDM7XHR1OCAgICAgdmVyc2lvbl9zdHJbXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcbiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEBzbG90X2lkOiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3RcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgY29tcG9uZW50IHRhYmxlIGluZm8gKHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsKVxuJiM0MzsgKiBpbiBjbWRfcmVncy1cdTAwM2VkYXRhLiAgRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxuJiM0MzsgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggc2xvdF9pZDtcbiYjNDM7XHR1OCByc3ZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSBwZHNfY29yZV9jb21wb25lbnRfcmVzcF9jb2RlIHtcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfVkFMSUQgPSAweDAsXG4mIzQzO1x0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCA9IDB4MSxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIgPSAweDIsXG4mIzQzO1x0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX09SX1ZFUlNJT05fSU5WQUxJRCA9IDB4MyxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfQ09ORkxJQ1QgPSAweDQsXG4mIzQzO1x0UERTX0NPUkVfQ09NUE9ORU5UX1BSRVJFUVNfTk9UX01FVCA9IDB4NSxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfTk9UX1NVUFBPUlRFRCA9IDB4NixcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfRldfVFlQRV9JTlZBTElEID0gMHhkMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uXG4mIzQzOyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQGNvbXBsZXRpb25fY29kZTogQ29tcG9uZW50IGNvbXBsZXRpb24gY29kZVxuJiM0MzsgKiBAcmVzcG9uc2U6IENvbXBvbmVudCByZXNwb25zZVxuJiM0MzsgKiBAcmVzcG9uc2VfY29kZTogQ29tcG9uZW50IHJlc3BvbnNlIGNvZGVcbiYjNDM7ICogQHNsb3RfaWQ6IEFjdHVhbCBzbG90X2lkIG9mIHRoZSBjb21wb25lbnQgKGVudW0gcGRzX2NvcmVfZndfc2xvdClcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHtcbiYjNDM7XHR1OCBzdGF0dXM7XG4mIzQzO1x0dTggdmVyO1xuJiM0MztcdHU4IGNvbXBsZXRpb25fY29kZTtcbiYjNDM7XHR1OCByZXNwb25zZTtcbiYjNDM7XHR1OCByZXNwb25zZV9jb2RlO1xuJiM0MztcdHU4IHNsb3RfaWQ7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvblxuJiM0MzsgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQ6IEluaXRpYWwgb3BlcmF0aW9uIHRvIHN0YXJ0IHRyYW5zZmVyXG4mIzQzOyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVM6IFN1YnNlcXVlbnQgY2FsbHMgdG8gY2hlY2sgb24gc3RhdHVzXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIHtcbiYjNDM7XHRQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVCA9IDAsXG4mIzQzO1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lEX0lOVkFMSUQgMHhGRkZGXG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IC0gQ29tcG9uZW50IGRldGFpbHNcbiYjNDM7ICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4mIzQzOyAqIEBpbWFnZV9zaXplOiBDb21wb25lbnQgaW1hZ2Ugc2l6ZVxuJiM0MzsgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvXG4mIzQzOyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQmIzM5O3MgSURcbiYjNDM7ICogQG9wdGlvbnM6IENvbXBvbmVudCBvcHRpb25zXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICogQHZlcnNpb25fc3RyX3R5cGU6IFRoZSB0eXBlcyBvZiBzdHJpbmdzIHVzZWRcbiYjNDM7ICogQHZlcnNpb25fc3RyX2xlbjogTGVuZ3RoIG9mIEB2ZXJzaW9uX3N0clxuJiM0MzsgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IHtcbiYjNDM7XHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcbiYjNDM7XHRfX2xlMzIgaW1hZ2Vfc2l6ZTtcbiYjNDM7XHRfX2xlMTYgY2xhc3NpZmljYXRpb247XG4mIzQzO1x0X19sZTE2IGlkZW50aWZpZXI7XG4mIzQzO1x0X19sZTE2IG9wdGlvbnM7XG4mIzQzO1x0dTggcnN2ZFszXTtcbiYjNDM7XHR1OCB2ZXJzaW9uX3N0cl90eXBlO1xuJiM0MztcdHU4IHZlcnNpb25fc3RyX2xlbjtcbiYjNDM7XHR1OCB2ZXJzaW9uX3N0cltdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgLSBTZW5kIGNvbXBvbmVudCBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRcbiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxuJiM0MzsgKiBAb3BlcmF0aW9uOiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wXG4mIzQzOyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzXG4mIzQzOyAqXHQgICAgYXJlIG5lZWRlZCBmb3IgYSBzaW5nbGUgY29tcG9uZW50XG4mIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIHRoaXMgcGFydCBvZiB0aGUgY29tcG9uZW50IHN0b3JlZCBhdCBAZGF0YV9wYVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqIEBkYXRhX3BhOiBETUEgYWRkcmVzcyBvZiB0aGUgY29tcG9uZW50XG4mIzQzOyAqXG4mIzQzOyAqIEEgY29tcG9uZW50IG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZVxuJiM0MzsgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgZmxhc2ggY29tcG9uZW50IGluZm8gKHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQpXG4mIzQzOyAqIGluIGNtZF9yZWdzLVx1MDAzZWRhdGEuIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcbiYjNDM7ICogd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoZSBmbGFzaCBjb21wb25lbnQgaW5mby5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggc2xvdF9pZDtcbiYjNDM7XHR1OCBvcGVyYXRpb247XG4mIzQzO1x0X19sZTMyIG9mZnNldDtcbiYjNDM7XHRfX2xlMzIgZGF0YV9sZW47XG4mIzQzO1x0dTggcnN2ZFs0XTtcbiYjNDM7XHRfX2xlNjQgZGF0YV9wYTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAtIFNlbmQgY29tcG9uZW50IGNvbXBsZXRpb25cbiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxuJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wbGV0aW9uIGNvZGVcbiYjNDM7ICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZClcbiYjNDM7ICogQGNvbXBhdF9yZXNwb25zZV9jb2RlOiBDb21wYXRpYmlsaXR5IHJlc3BvbnNlIGNvZGVcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAge1xuJiM0MztcdHU4IHN0YXR1cztcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggY29tcGxldGlvbl9jb2RlO1xuJiM0MztcdHU4IGNvbXBhdF9yZXNwb25zZTtcbiYjNDM7XHR1OCBjb21wYXRfcmVzcG9uc2VfY29kZTtcbiYjNDM7XHR1OCByc3ZkWzNdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUgLSBGaXJtd2FyZSBjb21wb25lbnQgdHlwZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX01BSU46IE1haW4gZmlybXdhcmVcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfQk9PVDogQm9vdCBsb2FkZXJcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TRUNVUkU6IFNlY3VyZSBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9GUEdBOiBGUEdBIGNvbmZpZ3VyYXRpb25cbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1Q6IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgYm9vdGxvYWRlclxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9VQk9PVDogVS1Cb290IGJvb3Rsb2FkZXJcbiYjNDM7ICpcbiYjNDM7ICogR29sZC9yZWNvdmVyeSB2YXJpYW50cyBhcmUgaWRlbnRpZmllZCBieSBzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRFxuJiM0MzsgKiBhbmQgcmVwb3J0ZWQgd2l0aCBhIFwmIzM0Oy5nb2xkXCYjMzQ7IHN1ZmZpeCAoZS5nLiwgZncuZ29sZCkuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHtcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX1VOS05PV04gICA9IDAsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9NQUlOICAgICAgPSAxLFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMixcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX0NQTEQgICAgICA9IDMsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9TRUNVUkUgICAgPSA0LFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSxcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOICA9IDYsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVCAgPSA3LFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIC0gQ29tcG9uZW50IGluZm8gZmxhZ3NcbiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORzogQ29tcG9uZW50IGlzIGN1cnJlbnRseSBydW5uaW5nXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdFxuJiM0MzsgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRDogQ29tcG9uZW50IGlzIGZpeGVkIGFuZCBjYW5ub3QgYmUgdXBkYXRlZFxuJiM0MzsgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRTogQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkXG4mIzQzOyAqXHRieSBuYW1lXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIHtcbiYjNDM7XHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcgPSBCSVQoMCksXG4mIzQzO1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQID0gQklUKDEpLFxuJiM0MztcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQgPSBCSVQoMiksXG4mIzQzO1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSA9IEJJVCgzKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gZW50cnlcbiYjNDM7ICogQG5hbWU6IENvbXBvbmVudCYjMzk7cyBuYW1lXG4mIzQzOyAqIEBjb21wb25lbnRfdHlwZTogZW51bSBwZHNfY29yZV9md19jb21wb25lbnRfdHlwZVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqIEBmbGFnczogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFnc1xuJiM0MzsgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50JiMzOTtzIGlkZW50aWZpZXJcbiYjNDM7ICogQHNsb3RfaWQ6IENvbXBvbmVudCYjMzk7cyBzbG90IGlkZW50aWZpZXJcbiYjNDM7ICogQHZlcnNpb246IENvbXBvbmVudCYjMzk7cyB2ZXJzaW9uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8ge1xuJiM0MzsjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAyNFxuJiM0MztcdGNoYXIgbmFtZVtQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU5dO1xuJiM0MztcdHU4IGNvbXBvbmVudF90eXBlO1xuJiM0MztcdHU4IHJzdmRbM107XG4mIzQzO1x0X19sZTE2IGZsYWdzO1xuJiM0MztcdHU4IGlkZW50aWZpZXI7XG4mIzQzO1x0dTggc2xvdF9pZDtcbiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAzMlxuJiM0MztcdGNoYXIgdmVyc2lvbltQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTl07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9MSVNUX0xFTlx0KChQRFNfUEFHRV9TSVpFIC0gOCkgLyBcXFxuJiM0MztcdFx0c2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhXG4mIzQzOyAqIEBudW1fY29tcG9uZW50czogTnVtYmVyIG9mIHZhbGlkIGNvbXBvbmVudHNcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyB7XG4mIzQzO1x0dTggbnVtX2NvbXBvbmVudHM7XG4mIzQzO1x0dTggcnN2ZFs3XTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gaW5mb1tQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5dO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogUERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1xuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAZGF0YV9sZW46IExlbmd0aCBvZiBkYXRhIGF0IGRhdGFfcGFcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YVxuJiM0MzsgKlxuJiM0MzsgKiBGVyBwb3B1bGF0ZXMgc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gcG9pbnRlZCB0byBieSBAZGF0YV9wYVxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0X19sZTE2IGRhdGFfbGVuO1xuJiM0MztcdHU4IHJzdmRbNF07XG4mIzQzO1x0X19sZTY0IGRhdGFfcGE7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbXBsZXRpb25cbiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZVxuJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAge1xuJiM0MztcdHU4IHN0YXR1cztcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAtIEZJTkFMSVpFX1VQREFURSBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcbiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICpcbiYjNDM7ICogRHJpdmVyIHNlbmRzIGF0IHRoZSBlbmQgb2YgdXBkYXRpbmcgYWxsIGNvbXBvbmVudHMgdG8gZmluYWxpemUgdGhlIHVwZGF0ZVxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgLSBGSU5BTElaRV9VUERBVEUgY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQ1xuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAdHlwZTogUExETSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVHlwZVxuJiM0MzsgKiBAc2l6ZTogTGVuZ3RoIG9mIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVmFsdWVcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgdGhlIERlc2NyaXB0b3IgSWRlbnRpZmllciBEYXRhIGluIGNtZF9yZWdzLVx1MDAzZWRhdGEuIERyaXZlclxuJiM0MzsgKiBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQgd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoaXNcbiYjNDM7ICogY29tbWFuZC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQge1xuJiM0MztcdHU4IG9wY29kZTtcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0X19sZTE2IHR5cGU7XG4mIzQzO1x0X19sZTE2IHNpemU7XG4mIzQzO1x0dTggcnN2ZFsyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbXBsZXRpb25cbiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZVxuJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAbWF0Y2g6IFdoZXRoZXIgb3Igbm90IHRoZSBSZWNvcmQgRGVzY3JpcHRvciBtYXRjaGVzIHRoZSBkZXZpY2VcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIHN0YXR1cyBpcyBQRFNfUkNfU1VDQ0VTUywgdGhlbiBAbWF0Y2ggaXMgdmFsaWQsIG90aGVyd2lzZSBpdCYjMzk7c1xuJiM0MzsgKiB1bmRlZmluZWQuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCBtYXRjaDtcbiYjNDM7XHR1OCByc3ZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfaG9zdF9tZW1fb3BlciAtIEhPU1RfTUVNIHN1Yi1vcGVyYXRpb25zXG4mIzQzOyAqIEBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ6IFF1ZXJ5IG51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHNcbiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0XG4mIzQzOyAqIEBQRFNfQ09SRV9IT1NUX01FTV9BREQ6ICAgICAgIFByb3ZpZGUgYWxsb2NhdGVkIG1lbW9yeSB0byBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fREVMOiAgICAgICBOb3RpZnkgZmlybXdhcmUgb2YgbWVtb3J5IGRlYWxsb2NhdGlvblxuJiM0MzsgKi9cbiYjNDM7ZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIHtcbiYjNDM7XHRQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlRcdD0gMCxcbiYjNDM7XHRQRFNfQ09SRV9IT1NUX01FTV9RVUVSWVx0XHQ9IDEsXG4mIzQzO1x0UERTX0NPUkVfSE9TVF9NRU1fQUREXHRcdD0gMixcbiYjNDM7XHRQRFNfQ09SRV9IT1NUX01FTV9ERUxcdFx0PSAzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgLSBIT1NUX01FTSBjb21tYW5kXG4mIzQzOyAqIEBvcGNvZGU6ICAgICBPcGNvZGUgUERTX0NPUkVfQ01EX0hPU1RfTUVNXG4mIzQzOyAqIEBvcGVyOiAgICAgICBPcGVyYXRpb24gKGVudW0gcGRzX2NvcmVfaG9zdF9tZW1fb3BlcilcbiYjNDM7ICogQGluZGV4OiAgICAgIE1lbW9yeSByZXF1ZXN0IGluZGV4IChHRVRfQ09VTlQ6IG1heF9jb3VudCwgUVVFUlk6IGluZGV4KVxuJiM0MzsgKiBAdGFnOiAgICAgICAgVGFnIGZvciB0aGlzIG1lbW9yeSByZXF1ZXN0IChBREQvREVMKVxuJiM0MzsgKiBAcmVhc29uOiAgICAgUmVhc29uIGZvciBkZWxldGlvbiAoREVMIG9ubHkpXG4mIzQzOyAqIEByc3ZkOiAgICAgICBSZXNlcnZlZFxuJiM0MzsgKiBAbWF4X2NvbnRpZzogTWF4aW11bSBjb250aWd1b3VzIG1lbW9yeSBzaXplIChHRVRfQ09VTlQgb25seSlcbiYjNDM7ICogQHNpemU6ICAgICAgIFNpemUgb2YgbWVtb3J5IGluIGJ5dGVzIChBREQgb25seSlcbiYjNDM7ICogQGJ1Zl9wYTogICAgIERNQSBhZGRyZXNzIG9mIG1lbW9yeSAoQUREIG9ubHkpXG4mIzQzOyAqXG4mIzQzOyAqIFVuaWZpZWQgY29tbWFuZCBmb3IgYWxsIGhvc3QgbWVtb3J5IG9wZXJhdGlvbnMuIEZpZWxkcyBhcmUgcmV1c2VkXG4mIzQzOyAqIGFjcm9zcyBvcGVyYXRpb25zIHRvIG1pbmltaXplIG9wY29kZSBzcGFjZSB1c2FnZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQge1xuJiM0MztcdHU4ICAgICBvcGNvZGU7XG4mIzQzO1x0dTggICAgIG9wZXI7XG4mIzQzO1x0X19sZTE2IGluZGV4O1xuJiM0MztcdF9fbGUxNiB0YWc7XG4mIzQzO1x0dTggICAgIHJlYXNvbjtcbiYjNDM7XHR1OCAgICAgcnN2ZDtcbiYjNDM7XHRfX2xlMzIgbWF4X2NvbnRpZztcbiYjNDM7XHRfX2xlMzIgc2l6ZTtcbiYjNDM7XHRfX2xlNjQgYnVmX3BhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIC0gSE9TVF9NRU0gY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiAgICAgICBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4mIzQzOyAqIEBvcGVyOiAgICAgICAgIE9wZXJhdGlvbiB0aGF0IHdhcyBwZXJmb3JtZWRcbiYjNDM7ICogQGNvdW50OiAgICAgICAgTnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0cyAoR0VUX0NPVU5UKVxuJiM0MzsgKiBAc2l6ZTogICAgICAgICBTaXplIG9mIG1lbW9yeSByZXF1ZXN0IGluIGJ5dGVzIChRVUVSWSlcbiYjNDM7ICogQHRhZzogICAgICAgICAgVGFnIGZvciB0aGlzIG1lbW9yeSByZXF1ZXN0IChRVUVSWS9ERUwpXG4mIzQzOyAqIEByc3ZkOiAgICAgICAgIFJlc2VydmVkXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCB7XG4mIzQzO1x0dTggICAgIHN0YXR1cztcbiYjNDM7XHR1OCAgICAgb3BlcjtcbiYjNDM7XHRfX2xlMTYgY291bnQ7XG4mIzQzO1x0X19sZTMyIHNpemU7XG4mIzQzO1x0X19sZTE2IHRhZztcbiYjNDM7XHR1OCAgICAgcnN2ZFs2XTtcbiYjNDM7fTtcbiYjNDM7XG4gLypcbiAgKiB1bmlvbiBwZHNfY29yZV9kZXZfY21kIC0gT3ZlcmxheSBvZiBjb3JlIGRldmljZSBjb21tYW5kIHN0cnVjdHVyZXNcbiAgKi9cbkBAIC00NjIsNiAmIzQzOzkxNSwxNCBAQCB1bmlvbiBwZHNfY29yZV9kZXZfY21kIHtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NtZCAgIHZmX3NldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jbWQgICB2Zl9nZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY21kICAgICAgdmZfY3RybDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgZ2V0X2NvbXBvbmVudF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAgICAgIHNlbmRfcGtnX2RhdGE7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgc2VuZF9jb21wb25lbnRfdGJsO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgICAgIHNlbmRfY29tcG9uZW50O1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY21kICAgIGZpbmFsaXplX3VwZGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kICBtYXRjaF9yZWNvcmRfZGVzYztcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kICAgICAgICAgICBob3N0X21lbTtcbiB9O1xuIFxuIC8qXG5AQCAtNDgwLDYgJiM0Mzs5NDEsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAge1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX3NldGF0dHJfY29tcCAgIHZmX3NldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jb21wICAgdmZfZ2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NvbXAgICAgICB2Zl9jdHJsO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgZ2V0X2NvbXBvbmVudF9pbmZvO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgICAgICBzZW5kX3BrZ19kYXRhO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgICAgIHNlbmRfY29tcG9uZW50O1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCAgICBmaW5hbGl6ZV91cGRhdGU7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wICAgICAgICAgICBob3N0X21lbTtcbiB9O1xuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDEzOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGRzX2NvcmUgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFkYWJhZmNiMmU5YjAzYjRlMDk2N2M5NDNlNTQzNGM1OWVkMmE3ZGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAxMzozMDozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QKaW5kZXggOWU4YTE2YzQ0MTAyOS4uNDk0ODdhMzVjMTYzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QKQEAgLTEwMiw2ICYjNDM7MTAyLDk1IEBAIGN1cnJlbnRseSBpbiB1c2UsIGFuZCB0aGF0IGJhbmsgd2lsbCB1c2VkIGZvciB0aGUgbmV4dCBib290OjoKICAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFwKICAgICAgICAgICAgIGZpbGUgcGVuc2FuZG8vZHNjX2Z3XzEuNjMuMC0yMi50YXIKIAomIzQzO0Zpcm13YXJlIE1hbmFnZW1lbnQgKFBMRE0pCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGRldmxpbmsgZmxhc2ggY29tbWFuZAomIzQzO3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjoKJiM0MzsKJiM0MzsgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBmaWxlIGZpcm13YXJlLnBsZG1mdwomIzQzOwomIzQzO0luZGl2aWR1YWwgY29tcG9uZW50cyBjYW4gYWxzbyBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBuYW1lOjoKJiM0MzsKJiM0MzsgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcCiYjNDM7ICAgICAgICAgICAgZmlsZSBmaXJtd2FyZS5wbGRtZncgY29tcG9uZW50IGZ3LmNwbGQKJiM0MzsKJiM0MztQZXItY29tcG9uZW50IHVwZGF0ZSB1c2VzIGRyaXZlci1kZWZpbmVkIGNvbXBvbmVudCBuYW1lcyAoZncsIGZ3LmNwbGQsCiYjNDM7ZXRjLikuIE5vdCBhbGwgY29tcG9uZW50cyBzdXBwb3J0IHBlci1jb21wb25lbnQgdXBkYXRlIC0KJiM0MztkZXZsaW5rIHdpbGwgcmVqZWN0IHRoZSByZXF1ZXN0IGlmIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50IGNhbm5vdAomIzQzO2JlIHVwZGF0ZWQuCiYjNDM7CiYjNDM7R29sZCAocmVjb3ZlcnkpIGNvbXBvbmVudHMgY2FuIGJlIHVwZGF0ZWQgYnkgc3BlY2lmeWluZyB0aGUgYmFzZSBjb21wb25lbnQKJiM0MztuYW1lIChlLmcuLCBgYGZ3YGAgZm9yIGBgZncuZ29sZGBgKSB3aXRoIGEgZ29sZGZ3IHBhY2thZ2UgZmlsZSB3aGVuIHRoZQomIzQzO2RldmljZSBzdXBwb3J0cyBwZXItY29tcG9uZW50IHVwZGF0ZS4gVGhlIGBgLmdvbGRgYCBzdWZmaXggaW4gZGV2bGluayBpbmZvCiYjNDM7b3V0cHV0IGluZGljYXRlcyB0aGUgZ29sZCBzbG90IHZlcnNpb24sIG5vdCBhIGZsYXNoIHRhcmdldC4KJiM0MzsKJiM0MztJbmZvIHZlcnNpb25zIChQTERNKQomIzQzOz09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7RmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIHJlcG9ydHMgY29tcG9uZW50IHZlcnNpb25zIHVzaW5nIGRyaXZlci1kZWZpbmVkCiYjNDM7bmFtZXMuIFRoZSBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudCB2ZXJzaW9uczoKJiM0MzsKJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGZvciBQTERNLWNhcGFibGUgZmlybXdhcmUKJiM0MzsgICA6d2lkdGhzOiA1IDUgOTAKJiM0MzsKJiM0MzsgICAqIC0gTmFtZQomIzQzOyAgICAgLSBUeXBlCiYjNDM7ICAgICAtIERlc2NyaXB0aW9uCiYjNDM7ICAgKiAtIGBgZndgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gTWFpbiBmaXJtd2FyZQomIzQzOyAgICogLSBgYGZ3LmdvbGRgYAomIzQzOyAgICAgLSBzdG9yZWQKJiM0MzsgICAgIC0gR29sZCAocmVjb3ZlcnkpIGZpcm13YXJlCiYjNDM7ICAgKiAtIGBgZncuYm9vdGxvYWRlcmBgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBCb290IGxvYWRlcgomIzQzOyAgICogLSBgYGZ3LmNwbGRgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gQ1BMRAomIzQzOyAgICogLSBgYGZ3LnNlY3VyZWBgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBTZWN1cmUgYm9vdCBmaXJtd2FyZQomIzQzOyAgICogLSBgYGZ3LmZwZ2FgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gRlBHQSBjb25maWd1cmF0aW9uCiYjNDM7ICAgKiAtIGBgZncuc3VjYGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmUKJiM0MzsgICAqIC0gYGBmdy5zdWMuYm9vdGxvYWRlcmBgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGJvb3Rsb2FkZXIKJiM0MzsgICAqIC0gYGBmdy51Ym9vdGBgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBVLUJvb3QgYm9vdGxvYWRlcgomIzQzOyAgICogLSBgYGFzaWMuaWRgYAomIzQzOyAgICAgLSBmaXhlZAomIzQzOyAgICAgLSBUaGUgQVNJQyB0eXBlIGZvciB0aGlzIGRldmljZQomIzQzOyAgICogLSBgYGFzaWMucmV2YGAKJiM0MzsgICAgIC0gZml4ZWQKJiM0MzsgICAgIC0gVGhlIHJldmlzaW9uIG9mIHRoZSBBU0lDIGZvciB0aGlzIGRldmljZQomIzQzOwomIzQzO0V4YW1wbGUgb3V0cHV0OjoKJiM0MzsKJiM0MzsgICQgZGV2bGluayBkZXYgaW5mbyBwY2kvMDAwMDowMDowNS4wCiYjNDM7ICBwY2kvMDAwMDowMDowNS4wOgomIzQzOyAgICBkcml2ZXIgcGRzX2NvcmUKJiM0MzsgICAgc2VyaWFsX251bWJlciBGTE0xODQyMDA3MwomIzQzOyAgICB2ZXJzaW9uczoKJiM0MzsgICAgICAgIGZpeGVkOgomIzQzOyAgICAgICAgICBhc2ljLmlkIDB4MAomIzQzOyAgICAgICAgICBhc2ljLnJldiAweDAKJiM0MzsgICAgICAgIHJ1bm5pbmc6CiYjNDM7ICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjMKJiM0MzsgICAgICAgICAgZncgMS4zLjAKJiM0MzsgICAgICAgICAgZncuY3BsZCAzLjE4CiYjNDM7ICAgICAgICBzdG9yZWQ6CiYjNDM7ICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjMKJiM0MzsgICAgICAgICAgZncuZ29sZCAxLjIuMAomIzQzOyAgICAgICAgICBmdyAxLjMuMAomIzQzOyAgICAgICAgICBmdy5jcGxkIDMuMTgKJiM0MzsKIEhlYWx0aCBSZXBvcnRlcnMKID09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZwppbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZwpAQCAtMTcxLDYgJiM0MzsxNzEsNyBAQCBjb25maWcgUERTX0NPUkUKIAlkZXBlbmRzIG9uIDY0QklUICZhbXA7JmFtcDsgUENJCiAJc2VsZWN0IEFVWElMSUFSWV9CVVMKIAlzZWxlY3QgTkVUX0RFVkxJTksKJiM0MzsJc2VsZWN0IFBMRE1GVwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2YKIAkgIGFkYXB0ZXJzLiAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBjYW4gYmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jCmluZGV4IDA0ZWMyNTY5YzYxYzAuLjkyMmUzZWM4YWYxYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuYwpAQCAtNDg5LDYgJiM0Mzs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKQogCQlwZHNjX2RldmNtZF9yZXNldChwZHNjKTsKIAogCXBjaV9jbGVhcl9tYXN0ZXIocGRzYy0mZ3Q7cGRldik7CiYjNDM7CWlmICghcGRzYy0mZ3Q7cGRldi0mZ3Q7aXNfdmlydGZuKSB7CiYjNDM7CQl1MTYgdmFsOwomIzQzOwomIzQzOwkJLyogRmx1c2ggYW55IGluLWZsaWdodCBETUEgYmVmb3JlIGZyZWVpbmcgYnVmZmVycy4KJiM0MzsJCSAqIEEgY29uZmlnIHJlYWQgY29tcGxldGlvbiBjYW5ub3QgcmV0dXJuIHVudGlsIGFsbCBwcmlvcgomIzQzOwkJICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLgomIzQzOwkJICovCiYjNDM7CQlwY2lfcmVhZF9jb25maWdfd29yZChwZHNjLSZndDtwZGV2LCBQQ0lfVkVORE9SX0lELCAmYW1wO3ZhbCk7CiYjNDM7CX0KIAogCXBkc2NfY29yZV91bmluaXQocGRzYyk7CiAKQEAgLTQ5Nyw2ICYjNDM7NTA2LDggQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKQogCQlwZHNjLSZndDt2aWZ0eXBlX3N0YXR1cyA9IE5VTEw7CiAJfQogCiYjNDM7CXBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7CiYjNDM7CXBkc2NfaG9zdF9tZW1fZnJlZShwZHNjKTsKIAlwZHNjX2Rldl91bmluaXQocGRzYyk7CiAKIAlzZXRfYml0KFBEU0NfU19GV19ERUFELCAmYW1wO3Bkc2MtJmd0O3N0YXRlKTsKQEAgLTUwNiw2ICYjNDM7NTE3LDggQEAgaW50IHBkc2Nfc3RhcnQoc3RydWN0IHBkc2MgKnBkc2MpCiB7CiAJcGRzX2NvcmVfaW50cl9tYXNrKCZhbXA7cGRzYy0mZ3Q7aW50cl9jdHJsW3Bkc2MtJmd0O2FkbWlucWNxLmludHhdLAogCQkJICAgUERTX0NPUkVfSU5UUl9NQVNLX0NMRUFSKTsKJiM0MzsJcGRzY19ob3N0X21lbV9hZGQocGRzYyk7CiYjNDM7CXBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0ocGRzYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4Nyw2ICYjNDM7NjAwLDggQEAgdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKQogCQlyZXR1cm47CiAJfQogCiYjNDM7CXBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpOwomIzQzOwogCWVyciA9IHBkc2Nfc2V0dXAocGRzYywgUERTQ19TRVRVUF9SRUNPVkVSWSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwpAQCAtNjcwLDMgJiM0Mzs2ODUsMTYxIEBAIHZvaWQgcGRzY19oZWFsdGhfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7Y29uZmlnX2xvY2spOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU0sCiYjNDM7CQkuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCwKJiM0MzsJCS5ob3N0X21lbS50YWcgPSBjcHVfdG9fbGUxNih0YWcpLAomIzQzOwkJLmhvc3RfbWVtLnJlYXNvbiA9IHJlYXNvbiwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJZGV2X2RiZyhwZHNjLSZndDtkZXYsICYjMzQ7U2VuZGluZyBkZXZjbWQgZm9yIG1lbSBkZWwgdGFnICVkXG4mIzM0OywgdGFnKTsKJiM0MzsJcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfaG9zdF9tZW1fYWRkX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgaW50IGluZGV4KQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtID0gJmFtcDtwZHNjLSZndDtob3N0X21lbV9yZXFzW2luZGV4XTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwljbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNOwomIzQzOwljbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOwomIzQzOwljbWQuaG9zdF9tZW0uaW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcbiYjMzQ7LCBpbmRleCk7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0MzsJaWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7bWVtIHF1ZXJ5IGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkXG4mIzM0OywKJiM0MzsJCQllcnIsIGNvbXAuc3RhdHVzKTsKJiM0MzsJCXJldHVybiBlcnIgPyBlcnIgOiAtRUlPOwomIzQzOwl9CiYjNDM7CWhtLSZndDtzaXplID0gbGUzMl90b19jcHUoY29tcC5ob3N0X21lbS5zaXplKTsKJiM0MzsJaG0tJmd0O3RhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTsKJiM0MzsJZGV2X2RiZyhwZHNjLSZndDtkZXYsICYjMzQ7bWVtIHF1ZXJ5IHJldHVybmVkIHNpemUgJWQgdGFnICVkXG4mIzM0OywKJiM0MzsJCWhtLSZndDtzaXplLCBobS0mZ3Q7dGFnKTsKJiM0MzsKJiM0MzsJaWYgKCFobS0mZ3Q7c2l6ZSB8fCBobS0mZ3Q7c2l6ZSAmZ3Q7IFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRykgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7aW52YWxpZCBzaXplICVkIGZvciB0YWcgJWRcbiYjMzQ7LAomIzQzOwkJCWhtLSZndDtzaXplLCBobS0mZ3Q7dGFnKTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGVycl9kZWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaG0tJmd0O29yZGVyID0gZ2V0X29yZGVyKGhtLSZndDtzaXplKTsKJiM0MzsJaG0tJmd0O3BnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sIGhtLSZndDtvcmRlcik7CiYjNDM7CWlmICghaG0tJmd0O3BnKSB7CiYjNDM7CQlkZXZfd2FybihwZHNjLSZndDtkZXYsICYjMzQ7YWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcbiYjMzQ7LAomIzQzOwkJCSBobS0mZ3Q7b3JkZXIsIGhtLSZndDt0YWcpOwomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyX2RlbDsKJiM0MzsJfQomIzQzOwomIzQzOwlobS0mZ3Q7cGEgPSBkbWFfbWFwX3BhZ2UocGRzYy0mZ3Q7ZGV2LCBobS0mZ3Q7cGcsIDAsIGhtLSZndDtzaXplLAomIzQzOwkJCSAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKJiM0MzsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtJmd0O2RldiwgaG0tJmd0O3BhKSkgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7ZG1hIG1hcCBmYWlsZWQgZm9yIHRhZyAlZCBzaXplICVkXG4mIzM0OywKJiM0MzsJCQlobS0mZ3Q7dGFnLCBobS0mZ3Q7c2l6ZSk7CiYjNDM7CQlfX2ZyZWVfcGFnZXMoaG0tJmd0O3BnLCBobS0mZ3Q7b3JkZXIpOwomIzQzOwkJaG0tJmd0O3BnID0gTlVMTDsKJiM0MzsJCWVyciA9IC1FSU87CiYjNDM7CQlnb3RvIGVycl9kZWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVHJhY2sgdGhpcyBhbGxvY2F0aW9uIHNvIHBkc2NfaG9zdF9tZW1fZnJlZSgpIGNhbiBjbGVhbiBpdCB1cCAqLwomIzQzOwlwZHNjLSZndDtudW1faG9zdF9tZW1fcmVxcyYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2NtZCwgMCwgc2l6ZW9mKGNtZCkpOwomIzQzOwltZW1zZXQoJmFtcDtjb21wLCAwLCBzaXplb2YoY29tcCkpOwomIzQzOwljbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNOwomIzQzOwljbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0FERDsKJiM0MzsJY21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLSZndDt0YWcpOwomIzQzOwljbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLSZndDtzaXplKTsKJiM0MzsJY21kLmhvc3RfbWVtLmJ1Zl9wYSA9IGNwdV90b19sZTY0KGhtLSZndDtwYSk7CiYjNDM7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gYWRkIHRhZyAlZCBzaXplICVkIHBhICVwYWRcbiYjMzQ7LAomIzQzOwkJaG0tJmd0O3RhZywgaG0tJmd0O3NpemUsICZhbXA7aG0tJmd0O3BhKTsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzOwlpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7CiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDttZW0gYWRkIGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkIGZvciB0YWcgJWRcbiYjMzQ7LAomIzQzOwkJCWVyciwgY29tcC5zdGF0dXMsIGhtLSZndDt0YWcpOwomIzQzOwkJZXJyID0gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJCWdvdG8gZXJyX2RlbDsKJiM0MzsJfQomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDttZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXG4mIzM0OywgaG0tJmd0O3RhZyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9kZWw6CiYjNDM7CS8qIEFmdGVyIE1FTV9RVUVSWSBzdWNjZWVkcywgZmlybXdhcmUgZXhwZWN0cyBNRU1fQUREIG9yIE1FTV9ERUwgKi8KJiM0MzsJcGRzY19ob3N0X21lbV9kZWxfb25lKHBkc2MsIGhtLSZndDt0YWcsIFBEU19SQ19FTk9NRU0pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9OwomIzQzOwl1MTYgY291bnQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIShwZHNjLSZndDtkZXZfaWRlbnQuY2FwYWJpbGl0aWVzICZhbXA7CiYjNDM7CSAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwljbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNOwomIzQzOwljbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVDsKJiM0MzsJY21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpOwomIzQzOwljbWQuaG9zdF9tZW0ubWF4X2NvbnRpZyA9IGNwdV90b19sZTMyKFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gZ2V0IGNvdW50IG1heF9jb250aWcgJXVcbiYjMzQ7LAomIzQzOwkJUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzOwlpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7CiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDttZW0gZ2V0IGNvdW50IGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkXG4mIzM0OywKJiM0MzsJCQllcnIsIGNvbXAuc3RhdHVzKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwljb3VudCA9IG1pbihsZTE2X3RvX2NwdShjb21wLmhvc3RfbWVtLmNvdW50KSwKJiM0MzsJCSAgICBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O21lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcbiYjMzQ7LCBjb3VudCk7CiYjNDM7CWlmIChjb3VudCA9PSAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwZHNjLSZndDtob3N0X21lbV9yZXFzID0ga3phbGxvY19vYmpzKCpwZHNjLSZndDtob3N0X21lbV9yZXFzLCBjb3VudCwKJiM0MzsJCQkJCSAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBkc2MtJmd0O2hvc3RfbWVtX3JlcXMpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byBhbGxvYyBob3N0X21lbV9yZXFzIGFycmF5XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gcGRzY19ob3N0X21lbV9hZGRfb25lKHBkc2MsIGkpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIXBkc2MtJmd0O2hvc3RfbWVtX3JlcXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZHNjLSZndDtudW1faG9zdF9tZW1fcmVxczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWRtYV91bm1hcF9wYWdlKHBkc2MtJmd0O2RldiwgcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpXS5wYSwKJiM0MzsJCQkgICAgICAgcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpXS5zaXplLAomIzQzOwkJCSAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CiYjNDM7CQlfX2ZyZWVfcGFnZXMocGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpXS5wZywKJiM0MzsJCQkgICAgIHBkc2MtJmd0O2hvc3RfbWVtX3JlcXNbaV0ub3JkZXIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtmcmVlKHBkc2MtJmd0O2hvc3RfbWVtX3JlcXMpOwomIzQzOwlwZHNjLSZndDtob3N0X21lbV9yZXFzID0gTlVMTDsKJiM0MzsJcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXMgPSAwOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oCmluZGV4IGI3ZmU5YWQ3MzM0OTguLjc5MTc1NmE1MDg3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaApAQCAtNSw2ICYjNDM7NSw3IEBACiAjZGVmaW5lIF9QRFNDX0hfCiAKICNpbmNsdWRlICZsdDtsaW51eC9kZWJ1Z2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21tem9uZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9wZHMvcGRzX2NvbW1vbi5oJmd0OwpAQCAtMjMsNiAmIzQzOzI0LDIwIEBACiAjZGVmaW5lIFBEU0NfU0VUVVBfUkVDT1ZFUlkJZmFsc2UKICNkZWZpbmUgUERTQ19TRVRVUF9JTklUCQl0cnVlCiAKJiM0MzsvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFICZsdDsmbHQ7IE1BWF9QQUdFX09SREVSIHRvIGF2b2lkCiYjNDM7ICogY3B1X3RvX2xlMzIoKSB0cnVuY2F0aW9uIG9uIGxhcmdlLXBhZ2UgY29uZmlncwomIzQzOyAqLwomIzQzOyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHICg0ICogMTAyNCAqIDEwMjQpCiYjNDM7I2RlZmluZSBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCAgMjU2CiYjNDM7CiYjNDM7c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwl2b2lkICp2YTsKJiM0MzsJc2l6ZV90IHNpemU7CiYjNDM7CWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHBkc2NfZGV2X2JhciB7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKIAlwaHlzX2FkZHJfdCBidXNfYWRkcjsKQEAgLTE0MSw2ICYjNDM7MTU2LDE0IEBAIHN0cnVjdCBwZHNjX3ZpZnR5cGUgewogCXN0cnVjdCBwZHNfYXV4aWxpYXJ5X2RldiAqcGFkZXY7CiB9OwogCiYjNDM7c3RydWN0IHBkc2NfaG9zdF9tZW0gewomIzQzOwl1MzIgc2l6ZTsKJiM0MzsJdTE2IHRhZzsKJiM0MzsJdTggb3JkZXI7CiYjNDM7CXN0cnVjdCBwYWdlICpwZzsKJiM0MzsJZG1hX2FkZHJfdCBwYTsKJiM0Mzt9OwomIzQzOwogLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovCiBlbnVtIHBkc2Nfc3RhdGVfZmxhZ3MgewogCVBEU0NfU19GV19ERUFELAkJICAgIC8qIHN0b3BwZWQsIHdhaXQgb24gc3RhcnR1cCBvciByZWNvdmVyeSAqLwpAQCAtMTg1LDYgJiM0MzsyMDgsOCBAQCBzdHJ1Y3QgcGRzYyB7CiAJc3RydWN0IG11dGV4IGRldmNtZF9sb2NrOwkvKiBsb2NrIGZvciBkZXZfY21kIG9wZXJhdGlvbnMgKi8KIAlzdHJ1Y3QgbXV0ZXggY29uZmlnX2xvY2s7CS8qIGxvY2sgZm9yIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyAqLwogCXNwaW5sb2NrX3QgYWRtaW5xX2xvY2s7CQkvKiBsb2NrIGZvciBhZG1pbnEgb3BlcmF0aW9ucyAqLwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2RtYV9saXN0OwomIzQzOwlzcGlubG9ja190IGRlZmVycmVkX2RtYV9sb2NrOwkvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqLwogCXJlZmNvdW50X3QgYWRtaW5xX3JlZmNudDsKIAlzdHJ1Y3QgcGRzX2NvcmVfZGV2X2luZm9fcmVncyBfX2lvbWVtICppbmZvX3JlZ3M7CiAJc3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVnczsKQEAgLTE5OSw2ICYjNDM7MjI0LDExIEBAIHN0cnVjdCBwZHNjIHsKIAl1NjQgbGFzdF9laWQ7CiAJc3RydWN0IHBkc2NfdmlmdHlwZSAqdmlmdHlwZV9zdGF0dXM7CiAJc3RydWN0IHdvcmtfc3RydWN0IHBjaV9yZXNldF93b3JrOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG9zdF9tZW1fcmVxczsKJiM0MzsJdTE2IG51bV9ob3N0X21lbV9yZXFzOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzOwogfTsKIAogLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLgpAQCAtMjc1LDE0ICYjNDM7MzA1LDI0IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF92aWZ0eXBlKHN0cnVjdCBwZHNjICpwZHNjKTsKIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9pcnFzKHN0cnVjdCBwZHNjICpwZHNjKTsKIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9xY3Eoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX3FjcSAqcWNxKTsKIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpOwomIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTsKIAogaW50IHBkc2NfZXJyX3RvX2Vycm5vKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUgY29kZSk7CiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7CiBib29sIHBkc2NfaXNfZndfZ29vZChzdHJ1Y3QgcGRzYyAqcGRzYyk7CiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7CiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAomIzQzOwkJCSAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7CiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCiYjNDM7CQkJCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwogaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAogCQkgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7CiYjNDM7aW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCSAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7CiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7CiBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpOwogaW50IHBkc2NfZGV2X2luaXQoc3RydWN0IHBkc2MgKnBkc2MpOwpAQCAtMzE1LDExICYjNDM7MzU1LDIzIEBAIHZvaWQgcGRzY19wcm9jZXNzX2FkbWlucShzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7CiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGlycXJldHVybl90IHBkc2NfYWRtaW5xX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKTsKIAotaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAomIzQzO2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAogCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKTsKJiM0Mztjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKTsKJiM0Mzt2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKTsKIAogdm9pZCBwZHNjX2Z3X2Rvd24oc3RydWN0IHBkc2MgKnBkc2MpOwogdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKTsKIHZvaWQgcGRzY19wY2lfcmVzZXRfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTsKJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7CiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksCiYjNDM7CQkJICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLAomIzQzOwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTsKJiM0MzsKICNlbmRpZiAvKiBfUERTQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMKaW5kZXggODEwYTBjZDliY2FjOC4uZWYwYTFiN2QxNTliNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jCkBAIC0xNzgsMyAmIzQzOzE3OCw0OCBAQCB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKQogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShxY3EtJmd0O2RlbnRyeSk7CiAJcWNxLSZndDtkZW50cnkgPSBOVUxMOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaG9zdF9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gc2VxLSZndDtwcml2YXRlOwomIzQzOwlzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG07CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIXBkc2MtJmd0O2hvc3RfbWVtX3JlcXMgfHwgcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXMgPT0gMCkgewomIzQzOwkJc2VxX3B1dHMoc2VxLCAmIzM0O05vIGhvc3QgbWVtb3J5IGFsbG9jYXRlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VxX3ByaW50ZihzZXEsICYjMzQ7SG9zdCBtZW1vcnkgcmVxdWVzdHM6ICV1XG5cbiYjMzQ7LAomIzQzOwkJICAgcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXMpOwomIzQzOwlzZXFfcHV0cyhzZXEsICYjMzQ7VGFnICAgIFNpemUgICAgICAgICBPcmRlciAgUEFcbiYjMzQ7KTsKJiM0MzsJc2VxX3B1dHMoc2VxLCAmIzM0Oy0tLSAgICAtLS0tICAgICAgICAgLS0tLS0gIC0tXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZHNjLSZndDtudW1faG9zdF9tZW1fcmVxczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWhtID0gJmFtcDtwZHNjLSZndDtob3N0X21lbV9yZXFzW2ldOwomIzQzOwomIzQzOwkJaWYgKCFobS0mZ3Q7cGcpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzZXFfcHJpbnRmKHNlcSwgJiMzNDslLTZ1ICUtMTJ1ICUtNnUgJXBhZFxuJiMzNDssCiYjNDM7CQkJICAgaG0tJmd0O3RhZywgaG0tJmd0O3NpemUsIGhtLSZndDtvcmRlciwgJmFtcDtobS0mZ3Q7cGEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoaG9zdF9tZW0pOwomIzQzOwomIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CWlmICghKHBkc2MtJmd0O2Rldl9pZGVudC5jYXBhYmlsaXRpZXMgJmFtcDsKJiM0MzsJICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtob3N0X21lbSYjMzQ7LCAwNDAwLCBwZHNjLSZndDtkZW50cnksCiYjNDM7CQkJICAgIHBkc2MsICZhbXA7aG9zdF9tZW1fZm9wcyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CWRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUoJiMzNDtob3N0X21lbSYjMzQ7LCBwZHNjLSZndDtkZW50cnkpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuYwppbmRleCBiZGVkNmIzMzI4OWNlLi5jNTA3NzgxNzVlMmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jCkBAIC0xMjYsNyAmIzQzOzEyNiw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwZHNjX2RldmNtZF9zdHIoaW50IG9wY29kZSkKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpCiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzLAomIzQzOwkJCSAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtJmd0O2RldjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CkBAIC0xNzksNyAmIzQzOzE4MCw3IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpCiAKIAlzdGF0dXMgPSBwZHNjX2RldmNtZF9zdGF0dXMocGRzYyk7CiAJZXJyID0gcGRzY19lcnJfdG9fZXJybm8oc3RhdHVzKTsKLQlpZiAoZXJyICZhbXA7JmFtcDsgZXJyICE9IC1FQUdBSU4pCiYjNDM7CWlmIChkb19tc2cgJmFtcDsmYW1wOyBlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVBR0FJTikKIAkJZGV2X2VycihkZXYsICYjMzQ7REVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcbiYjMzQ7LAogCQkJb3Bjb2RlLCBwZHNjX2RldmNtZF9zdHIob3Bjb2RlKSwgc3RhdHVzLCBlcnIsCiAJCQlFUlJfUFRSKGVycikpOwpAQCAtMTg3LDggJiM0MzsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKQogCXJldHVybiBlcnI7CiB9CiAKLWludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKLQkJICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpCiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCQl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzLAomIzQzOwkJCQljb25zdCBib29sIGRvX21zZykKIHsKIAlpbnQgZXJyOwogCkBAIC0xOTcsMTYgJiM0MzsxOTksNjMgQEAgaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAogCiAJbWVtY3B5X3RvaW8oJmFtcDtwZHNjLSZndDtjbWRfcmVncy0mZ3Q7Y21kLCBjbWQsIHNpemVvZigqY21kKSk7CiAJcGRzY19kZXZjbWRfZGJlbGwocGRzYyk7Ci0JZXJyID0gcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtJmd0O29wY29kZSwgbWF4X3NlY29uZHMpOwomIzQzOwllcnIgPSBfX3Bkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLSZndDtvcGNvZGUsIG1heF9zZWNvbmRzLCBkb19tc2cpOwogCiAJaWYgKChlcnIgPT0gLUVOWElPIHx8IGVyciA9PSAtRVRJTUVET1VUKSAmYW1wOyZhbXA7IHBkc2MtJmd0O3dxKQogCQlxdWV1ZV93b3JrKHBkc2MtJmd0O3dxLCAmYW1wO3Bkc2MtJmd0O2hlYWx0aF93b3JrKTsKIAllbHNlCiAJCW1lbWNweV9mcm9taW8oY29tcCwgJmFtcDtwZHNjLSZndDtjbWRfcmVncy0mZ3Q7Y29tcCwgc2l6ZW9mKCpjb21wKSk7CiAKJiM0MzsJaWYgKGVyciAhPSAtRVRJTUVET1VUICZhbXA7JmFtcDsgZXJyICE9IC1FQUdBSU4pCiYjNDM7CQlwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpOwomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKJiM0Mzt2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSwKJiM0MzsJCQkgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsCiYjNDM7CQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQomIzQzO3sKJiM0MzsJZW50cnktJmd0O2RtYV9hZGRyID0gZG1hX2FkZHI7CiYjNDM7CWVudHJ5LSZndDt2YSA9IHZhOwomIzQzOwllbnRyeS0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CWVudHJ5LSZndDtkaXIgPSBkaXI7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9sb2NrKTsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO2VudHJ5LSZndDtsaXN0LCAmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9saXN0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwZHNjLSZndDtkZWZlcnJlZF9kbWFfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksICp0bXA7CiYjNDM7CUxJU1RfSEVBRChsb2NhbF9saXN0KTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xvY2spOwomIzQzOwlsaXN0X3NwbGljZV9pbml0KCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xpc3QsICZhbXA7bG9jYWxfbGlzdCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmFtcDtsb2NhbF9saXN0LCBsaXN0KSB7CiYjNDM7CQlkbWFfdW5tYXBfc2luZ2xlKHBkc2MtJmd0O2RldiwgZW50cnktJmd0O2RtYV9hZGRyLAomIzQzOwkJCQkgZW50cnktJmd0O3NpemUsIGVudHJ5LSZndDtkaXIpOwomIzQzOwkJa2ZyZWUoZW50cnktJmd0O3ZhKTsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7ZW50cnktJmd0O2xpc3QpOwomIzQzOwkJa2ZyZWUoZW50cnkpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCSAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkJICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKIHsKQEAgLTIxOSw2ICYjNDM7MjY4LDQ3IEBAIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCQkgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKJiM0MzsJCQkJICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsCiYjNDM7CQkJCSAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGV2Y21kX2xvY2spOwomIzQzOwlpZiAoIXBkc2MtJmd0O2NtZF9yZWdzKSB7CiYjNDM7CQllcnIgPSAtRU5YSU87CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwlpZiAoZGF0YV9sZW4gJmd0OyBzaXplb2YocGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEpKSB7CiYjNDM7CQllcnIgPSAtRU5PU1BDOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsJbWVtY3B5X3RvaW8oJmFtcDtwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSwgZGF0YSwgZGF0YV9sZW4pOwomIzQzOwllcnIgPSBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCBkb19tc2cpOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGV2Y21kX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkJICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCiYjNDM7CQkJICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sCiYjNDM7CQkJCSAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAomIzQzOwkJCQl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sCiYjNDM7CQkJCSAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpOwomIzQzO30KJiM0MzsKIGludCBwZHNjX2RldmNtZF9pbml0KHN0cnVjdCBwZHNjICpwZHNjKQogewogCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKQEAgLTI0MiwxNSAmIzQzOzMzMiwxNyBAQCBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpCiAJcmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKIH0KIAotc3RhdGljIGludCBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IGRydl9pZGVudF92ZXIsCiYjNDM7CQkJCSAgICAgICBib29sIGRvX21zZykKIHsKIAl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiAJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiAJCS5pZGVudGlmeS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSURFTlRJRlksCi0JCS5pZGVudGlmeS52ZXIgPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEsCiYjNDM7CQkuaWRlbnRpZnkudmVyID0gZHJ2X2lkZW50X3ZlciwKIAl9OwogCi0JcmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCwKJiM0MzsJCQkJICAgIGRvX21zZyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBkc2NfaW5pdF9kZXZpbmZvKHN0cnVjdCBwZHNjICpwZHNjKQpAQCAtMjczLDggJiM0MzszNjUsOSBAQCBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYykKIAlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDtmd192ZXJzaW9uICVzXG4mIzM0OywgcGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvbik7CiB9CiAKLXN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0MztzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnlfdmVyKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyKQogewomIzQzOwlib29sIGRvX21zZyA9IGRydl9pZGVudF92ZXIgPT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xOwogCXN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307CiAJc2l6ZV90IHN6OwogCWludCBlcnI7CkBAIC0yOTcsMTkgJiM0MzszOTAsMjIgQEAgc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKQogCXN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoZHJ2KSwgc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKSk7CiAJbWVtY3B5X3RvaW8oJmFtcDtwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSwgJmFtcDtkcnYsIHN6KTsKIAotCWVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHBkc2MsIGRydl9pZGVudF92ZXIsIGRvX21zZyk7CiAJaWYgKCFlcnIpIHsKIAkJc3ogPSBtaW5fdChzaXplX3QsIHNpemVvZihwZHNjLSZndDtkZXZfaWRlbnQpLAogCQkJICAgc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKSk7CiAJCW1lbWNweV9mcm9taW8oJmFtcDtwZHNjLSZndDtkZXZfaWRlbnQsICZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEsIHN6KTsKJiM0MzsKJiM0MzsJCS8qIFYxIGZpcm13YXJlIGRvZXNuJiMzOTt0IHNldCBjYXBhYmlsaXRpZXMsIHNvIHRoZSBmaWVsZCBtYXkKJiM0MzsJCSAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwZHNjLSZndDtkZXZfaWRlbnQudmVyc2lvbiAmbHQ7IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikKJiM0MzsJCQlwZHNjLSZndDtkZXZfaWRlbnQuY2FwYWJpbGl0aWVzID0gMDsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGV2Y21kX2xvY2spOwogCi0JaWYgKGVycikgewotCQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDtDYW5ub3QgaWRlbnRpZnkgZGV2aWNlOiAlcGVcbiYjMzQ7LAotCQkJRVJSX1BUUihlcnIpKTsKJiM0MzsJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQl9CiAKIAlpZiAoaXNwcmludChwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uWzBdKSAmYW1wOyZhbXA7CiAJICAgIGlzYXNjaWkocGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvblswXSkpCkBAIC0zMjYsNiAmIzQzOzQyMiwyNiBAQCBzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBPbGRlciBmaXJtd2FyZSByZWplY3RzIGFueXRoaW5nIGJ1dCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEKJiM0MzsJICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb24KJiM0MzsJICogcmVqZWN0aW9uLiBEb24mIzM5O3QgcmV0cnkgb24gb3RoZXIgZXJyb3JzIGxpa2UgLUVOWElPLy1FVElNRURPVVQKJiM0MzsJICogd2hpY2ggaW5kaWNhdGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgb3IgaHVuZy4KJiM0MzsJICovCiYjNDM7CWVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMik7CiYjNDM7CWlmIChlcnIgPT0gLUVJTlZBTCkKJiM0MzsJCWVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSk7CiYjNDM7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDtDYW5ub3QgaWRlbnRpZnkgZGV2aWNlOiAlcGVcbiYjMzQ7LAomIzQzOwkJCUVSUl9QVFIoZXJyKSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogdm9pZCBwZHNjX2Rldl91bmluaXQoc3RydWN0IHBkc2MgKnBkc2MpCiB7CiAJaWYgKHBkc2MtJmd0O2ludHJfaW5mbykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMKaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jCkBAIC05MCwxMyAmIzQzOzkwLDExMiBAQCBpbnQgcGRzY19kbF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLAogewogCXN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTsKIAotCWlmIChwYXJhbXMtJmd0O2NvbXBvbmVudCkgewotCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAotCQkJCSAgICYjMzQ7Q29tcG9uZW50IHVwZGF0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlJiMzNDspOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CXJldHVybiBwZHNjX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwllbnVtIGRldmxpbmtfaW5mb192ZXJzaW9uX3R5cGUgdmVyX3R5cGU7CiYjNDM7CXUxNiBmbGFncyA9IGxlMTZfdG9fY3B1KGluZm8tJmd0O2ZsYWdzKTsKJiM0MzsJY2hhciAqdmVyID0gaW5mby0mZ3Q7dmVyc2lvbjsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJY2hhciBidWZbMzJdOwomIzQzOwomIzQzOwkvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgJiMzNDtmdyYjMzQ7ICovCiYjNDM7CWlmIChpbmZvLSZndDtjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHsKJiM0MzsJCWlmIChpbmZvLSZndDtzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRCkKJiM0MzsJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0O2Z3LmdvbGQmIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDtmdyYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCW5hbWUgPSBwZHNjX2Z3X3R5cGVfdG9fbmFtZShpbmZvLSZndDtjb21wb25lbnRfdHlwZSk7CiYjNDM7CQlpZiAoIW5hbWUpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQpCiYjNDM7CQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDtmdy4lcy5nb2xkJiMzNDssIG5hbWUpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7ZncuJXMmIzM0OywgbmFtZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FKQomIzQzOwkJdmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX0NPTVBPTkVOVDsKJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQpIHsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBidWYsIHZlcik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykgewomIzQzOwkJaW50IGVycjsKJiM0MzsKJiM0MzsJCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0X2V4dChyZXEsIGJ1ZiwKJiM0MzsJCQkJCQkJICAgdmVyLCB2ZXJfdHlwZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy0mZ3Q7ZncsIGV4dGFjayk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVApIHsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0X2V4dChyZXEsIGJ1ZiwKJiM0MzsJCQkJCQkJICB2ZXIsIHZlcl90eXBlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2RsX3JlcG9ydF9md192ZXIoc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwgY2hhciAqZndfdmVyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwKJiM0MzsJCQkJCQlERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLAomIzQzOwkJCQkJCWZ3X3Zlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9jb21wb25lbnRfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7CiYjNDM7CXU4IG51bV9jb21wb25lbnRzOwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuCiYjNDM7CSAqIFVzZSBSRUFEX09OQ0UgdG8gZ2V0IGEgY29uc2lzdGVudCBzbmFwc2hvdCBvZiBudW1fY29tcG9uZW50cy4KJiM0MzsJICogcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoKSBjYW4gemVybyBpdCBjb25jdXJyZW50bHkgZHVyaW5nCiYjNDM7CSAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm8KJiM0MzsJICogdGltZXMgd2hlbiB3ZSBhbHJlYWR5IGRlY2lkZWQgdGhlIGNhY2hlIHdhcyB2YWxpZC4KJiM0MzsJICovCiYjNDM7CW51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtJmd0O2Z3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpOwomIzQzOwlpZiAoIW51bV9jb21wb25lbnRzKSB7CiYjNDM7CQllcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsCiYjNDM7CQkJCQkJICAgIHBkc2MtJmd0O2Rldl9pbmZvLmZ3X3ZlcnNpb24pOwomIzQzOwkJbnVtX2NvbXBvbmVudHMgPSBSRUFEX09OQ0UocGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7CiYjNDM7CQlpZiAoIW51bV9jb21wb25lbnRzKQomIzQzOwkJCXJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLAomIzQzOwkJCQkJCSAgICBwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uKTsKJiM0MzsJfQomIzQzOwomIzQzOwludW1fY29tcG9uZW50cyA9IG1pbl90KHUxNiwgbnVtX2NvbXBvbmVudHMsCiYjNDM7CQkJICAgICAgIGxlMTZfdG9fY3B1KHBkc2MtJmd0O2Rldl9pZGVudC5tYXhfZndfc2xvdHMpKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHJlcSwKJiM0MzsJCQkJCSAgICAgICAmYW1wO3Bkc2MtJmd0O2Z3X2NvbXBvbmVudHMuaW5mb1tpXSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjaGFyICpmd19zbG90bmFtZXNbXSA9IHsKQEAgLTEwNSw4ICYjNDM7MjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0gewogCSYjMzQ7ZncubWFpbmZ3YiYjMzQ7LAogfTsKIAotaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAotCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0gewogCQkuZndfY29udHJvbC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfRldfQ09OVFJPTCwKQEAgLTE0MCwxMiAmIzQzOzI0MCw0MSBAQCBpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwKLQkJCQkJICAgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsCi0JCQkJCSAgICAgICBwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9pbmZvX2dldF92MShzdHJ1Y3QgZGV2bGluayAqZGwsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcGRzY19kbF9md19saXN0X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwkvKiBWZXJzaW9uIDE6IHJlcG9ydCBmdyBmcm9tIGRldl9pbmZvIChydW5uaW5nIG9ubHkpICovCiYjNDM7CXJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLCBwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7CiYjNDM7CWNoYXIgYnVmWzMyXTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKHBkc2MtJmd0O2Rldl9pZGVudC52ZXJzaW9uICZndDs9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikgewomIzQzOwkJZXJyID0gcGRzY19kbF9jb21wb25lbnRfaW5mb19nZXQoZGwsIHJlcSwgZXh0YWNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVyciA9IHBkc2NfZGxfaW5mb19nZXRfdjEoZGwsIHJlcSwgZXh0YWNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7MHgleCYjMzQ7LCBwZHNjLSZndDtkZXZfaW5mby5hc2ljX3R5cGUpOwogCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsCiAJCQkJCSAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYwppbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYwpAQCAtMSw2ICYjNDM7MSw5IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogLyogQ29weXJpZ2h0KGMpIDIwMjMgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGxkbWZ3LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7Y29yZS5oJiMzNDsKIAogLyogVGhlIHdvcnN0IGNhc2Ugd2FpdCBmb3IgdGhlIGluc3RhbGwgYWN0aXZpdHkgaXMgYWJvdXQgMjUgbWludXRlcyB3aGVuCkBAIC0xNCw2ICYjNDM7MTcsNTggQEAKIC8qIE51bWJlciBvZiBwZXJpb2RpYyBsb2cgdXBkYXRlcyBkdXJpbmcgZncgZmlsZSBkb3dubG9hZCAqLwogI2RlZmluZSBQRFNDX0ZXX0lOVEVSVkFMX0ZSQUNUSU9OCTMyCiAKJiM0MzsjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWAkJJiMzNDtmdy4mIzM0OwomIzQzOyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTiBcCiYjNDM7CShzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSAmIzQzOyBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4pCiYjNDM7CiYjNDM7LyogRHJpdmVyLWRlZmluZWQgY29tcG9uZW50IHR5cGUgdG8gbmFtZSBtYXBwaW5nLgomIzQzOyAqIFBEU19DT1JFX0ZXX1RZUEVfTUFJTiBpcyBOVUxMIC0gaGFuZGxlZCBzcGVjaWFsbHkgYXMgJiMzNDtmdyYjMzQ7IHdpdGhvdXQgcHJlZml4LgomIzQzOyAqLwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGRzY19md190eXBlX25hbWVzW10gPSB7CiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9CT09UXSAgICAgID0gJiMzNDtib290bG9hZGVyJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX0NQTERdICAgICAgPSAmIzM0O2NwbGQmIzM0OywKJiM0MzsJW1BEU19DT1JFX0ZXX1RZUEVfU0VDVVJFXSAgICA9ICYjMzQ7c2VjdXJlJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX0ZQR0FdICAgICAgPSAmIzM0O2ZwZ2EmIzM0OywKJiM0MzsJW1BEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU5dICA9ICYjMzQ7c3VjJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UXSAgPSAmIzM0O3N1Yy5ib290bG9hZGVyJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX1VCT09UXSAgICAgPSAmIzM0O3Vib290JiMzNDssCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKQomIzQzO3sKJiM0MzsJaWYgKHR5cGUgJmx0OyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcykgJmFtcDsmYW1wOyBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pCiYjNDM7CQlyZXR1cm4gcGRzY19md190eXBlX25hbWVzW3R5cGVdOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CS8qIFBhaXJzIHdpdGggUkVBRF9PTkNFIGluIHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KCkgKi8KJiM0MzsJV1JJVEVfT05DRShwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU4IHBkc2NfbmFtZV90b19md190eXBlKGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzaXplX3QgcHJlZml4X2xlbjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CS8qICYjMzQ7ZncmIzM0OyB3aXRob3V0IHN1ZmZpeCBtYXBzIHRvIG1haW4gZmlybXdhcmUgKi8KJiM0MzsJaWYgKCFzdHJjbXAobmFtZSwgJiMzNDtmdyYjMzQ7KSkKJiM0MzsJCXJldHVybiBQRFNfQ09SRV9GV19UWVBFX01BSU47CiYjNDM7CiYjNDM7CXByZWZpeF9sZW4gPSBzdHJfaGFzX3ByZWZpeChuYW1lLCBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgpOwomIzQzOwlpZiAocHJlZml4X2xlbikKJiM0MzsJCW5hbWUgJiM0Mzs9IHByZWZpeF9sZW47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAocGRzY19md190eXBlX25hbWVzW2ldICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhc3RyY21wKG5hbWUsIHBkc2NfZndfdHlwZV9uYW1lc1tpXSkpCiYjNDM7CQkJcmV0dXJuIGk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBwZHNjX2RldmNtZF9md19kb3dubG9hZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLAogCQkJCQkgIHUzMiBvZmZzZXQsIHUzMiBsZW5ndGgpCiB7CkBAIC0yMyw3ICYjNDM7NzgsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsCiAJCS5md19kb3dubG9hZC5hZGRyID0gY3B1X3RvX2xlNjQoYWRkciksCiAJCS5md19kb3dubG9hZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpLAogCX07Ci0JdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcDsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwogCiAJcmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiB9CkBAIC05NSw5ICYjNDM7MTUwLDEyIEBAIHN0YXRpYyBpbnQgcGRzY19md19zdGF0dXNfbG9uZ193YWl0KHN0cnVjdCBwZHNjICpwZHNjLAogCXJldHVybiBlcnI7CiB9CiAKLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKLQkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7c3RhdGljIGludAomIzQzO3Bkc2NfbGVnYWN5X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwYXJhbXMtJmd0O2Z3OwogCXUzMiBidWZfc3osIGNvcHlfc3osIG9mZnNldDsKIAlzdHJ1Y3QgZGV2bGluayAqZGw7CiAJaW50IG5leHRfaW50ZXJ2YWw7CkBAIC0xMDUsNiAmIzQzOzE2MywxMiBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsCiAJaW50IGVyciA9IDA7CiAJaW50IGZ3X3Nsb3Q7CiAKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7Y29tcG9uZW50KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0NvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWRldl9pbmZvKHBkc2MtJmd0O2RldiwgJiMzNDtJbnN0YWxsaW5nIGZpcm13YXJlXG4mIzM0Oyk7CiAKIAlpZiAoIXBkc2MtJmd0O2NtZF9yZWdzKQpAQCAtMTk1LDMgJiM0MzsyNTksNzI5IEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKIAkJCQkJCSAgIE5VTEwsIDAsIDApOwogCXJldHVybiBlcnI7CiB9CiYjNDM7CiYjNDM7c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgewomIzQzOwl1MTYgY29tcG9uZW50X2lkOwomIzQzOwlib29sIHNraXA7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwZHNfY29yZV9md3VfcHJpdiB7CiYjNDM7CXN0cnVjdCBwbGRtZncgY29udGV4dDsKJiM0MzsJc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zOwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGNvbXBvbmVudHM7CiYjNDM7CWJvb2wgY29tcG9uZW50X2ZvdW5kOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGRzY19mcmVlX2Z3dV9wcml2KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdiwgKnRtcDsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbXBvbmVudF9wcml2LCB0bXAsICZhbXA7cHJpdi0mZ3Q7Y29tcG9uZW50cywKJiM0MzsJCQkJIGxpc3RfZW50cnkpIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7Y29tcG9uZW50X3ByaXYtJmd0O2xpc3RfZW50cnkpOwomIzQzOwkJa2ZyZWUoY29tcG9uZW50X3ByaXYpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2Moc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBkZXNjX3R5cGUsCiYjNDM7CQkJCQkgdTE2IGRlc2Nfc2l6ZSwgY29uc3QgdTggKmRlc2NfZGF0YSwKJiM0MzsJCQkJCSB1OCAqbWF0Y2gpCiYjNDM7ewomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsCiYjNDM7CQkubWF0Y2hfcmVjb3JkX2Rlc2MudmVyID0gMSwKJiM0MzsJCS5tYXRjaF9yZWNvcmRfZGVzYy50eXBlID0gY3B1X3RvX2xlMTYoZGVzY190eXBlKSwKJiM0MzsJCS5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSwKJiM0MzsJfTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgJmFtcDtjbWQsIGRlc2NfZGF0YSwgZGVzY19zaXplLAomIzQzOwkJCQkgICAgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7CSptYXRjaCA9IGNvbXAubWF0Y2hfcmVjb3JkX2Rlc2MubWF0Y2g7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGxkbWZ3X3JlY29yZCAqcmVjb3JkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpOwomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtJmd0O3Bkc2M7CiYjNDM7CXN0cnVjdCBwbGRtZndfZGVzY190bHYgKmRlc2M7CiYjNDM7CiYjNDM7CWlmICghcGxkbWZ3X29wX3BjaV9tYXRjaF9yZWNvcmQoY29udGV4dCwgcmVjb3JkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmYW1wO3JlY29yZC0mZ3Q7ZGVzY3MsIGVudHJ5KSB7CiYjNDM7CQl1OCBtYXRjaDsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQlzd2l0Y2ggKGRlc2MtJmd0O3R5cGUpIHsKJiM0MzsJCS8qIHNraXAgdHlwZXMgY2hlY2tlZCBpbiBwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZCAqLwomIzQzOwkJY2FzZSBQTERNX0RFU0NfSURfUENJX1ZFTkRPUl9JRDoKJiM0MzsJCWNhc2UgUExETV9ERVNDX0lEX1BDSV9ERVZJQ0VfSUQ6CiYjNDM7CQljYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCVkVORE9SX0lEOgomIzQzOwkJY2FzZSBQTERNX0RFU0NfSURfUENJX1NVQkRFVl9JRDoKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghZGVzYy0mZ3Q7c2l6ZSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQllcnIgPSBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhwZHNjLCBkZXNjLSZndDt0eXBlLAomIzQzOwkJCQkJCSAgICBkZXNjLSZndDtzaXplLCBkZXNjLSZndDtkYXRhLAomIzQzOwkJCQkJCSAgICAmYW1wO21hdGNoKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlkZXZfZXJyKHBkc2MtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDttYXRjaF9yZWNvcmRfZGVzYyBmYWlsZWQgdHlwZTogMHglMDR4IHNpemU6ICV1LCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCQlkZXNjLSZndDt0eXBlLCBkZXNjLSZndDtzaXplLCBlcnIpOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJCS8qIGFsbCByZWNvcmQgZGVzY3JpcHRvcnMgbXVzdCBtYXRjaCAqLwomIzQzOwkJaWYgKCFtYXRjaCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLAomIzQzOwkJCQkJIHUxNiBsZW5ndGgsIHUxNiBvZmZzZXQsIHUxNiB0b3RhbF9sZW4pCiYjNDM7ewomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLm9wY29kZSA9IFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBLAomIzQzOwkJLnNlbmRfcGtnX2RhdGEudmVyID0gMSwKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChhZGRyKSwKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYobGVuZ3RoKSwKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLm9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldCksCiYjNDM7CQkuc2VuZF9wa2dfZGF0YS50b3RhbF9sZW4gPSBjcHVfdG9fbGUxNih0b3RhbF9sZW4pLAomIzQzOwl9OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiYjNDM7CiYjNDM7CXJldHVybiBwZHNjX2RldmNtZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19zZW5kX3BhY2thZ2VfZGF0YShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LCBjb25zdCB1OCAqZGF0YSwKJiM0MzsJCQkJICB1MTYgbGVuZ3RoKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpOwomIzQzOwlzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi0mZ3Q7cGRzYzsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfYWRkcjsKJiM0MzsJdTggKnBhY2thZ2VfZGF0YTsKJiM0MzsJdTMyIG9mZnNldDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFsZW5ndGgpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRlZmVycmVkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBhY2thZ2VfZGF0YSA9IGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwYWNrYWdlX2RhdGEpIHsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGRtYV9tYXAgcGFja2FnZV9kYXRhIGxlbmd0aCAweCV4XG4mIzM0OywKJiM0MzsJCQlsZW5ndGgpOwomIzQzOwkJa2ZyZWUocGFja2FnZV9kYXRhKTsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0ICZsdDsgbGVuZ3RoOyBvZmZzZXQgJiM0Mzs9IFBEU19QQUdFX1NJWkUpIHsKJiM0MzsJCXUzMiBjb3B5X3N6OwomIzQzOwomIzQzOwkJY29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSwgbGVuZ3RoIC0gb2Zmc2V0KTsKJiM0MzsJCWVyciA9IHBkc2NfZGV2Y21kX3NlbmRfcGFja2FnZV9kYXRhKHBkc2MsIGRtYV9hZGRyICYjNDM7IG9mZnNldCwKJiM0MzsJCQkJCQkgICAgY29weV9zeiwgb2Zmc2V0LCBsZW5ndGgpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChwcml2LSZndDtleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O0ZhaWxlZCB0byBzZW5kIHBhY2thZ2UgZGF0YSYjMzQ7KTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHsKJiM0MzsJCXBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsCiYjNDM7CQkJCSAgICAgIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CWtmcmVlKHBhY2thZ2VfZGF0YSk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHBkc2MtJmd0O2Z3X2NvbXBvbmVudHMuaW5mb1tpXS5jb21wb25lbnRfdHlwZSA9PSB0eXBlKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcGRzY19jb21wb25lbnRfaWRfbWF0Y2hlc190eXBlKHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCQkJICAgdTggY29tcG9uZW50X2lkLCB1OCB0eXBlKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID0KJiM0MzsJCQkmYW1wO3Bkc2MtJmd0O2Z3X2NvbXBvbmVudHMuaW5mb1tpXTsKJiM0MzsKJiM0MzsJCWlmIChpbmZvLSZndDtpZGVudGlmaWVyID09IGNvbXBvbmVudF9pZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaW5mby0mZ3Q7Y29tcG9uZW50X3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9CiYjNDM7CQkJJmFtcDtwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV07CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7aWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQpCiYjNDM7CQkJcmV0dXJuIGluZm8tJmd0O2NvbXBvbmVudF90eXBlOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBwZHNjX3NraXBfY29tcG9uZW50KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiwKJiM0MzsJCQkJdTE2IGNvbXBvbmVudF9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShjb21wb25lbnRfcHJpdiwgJmFtcDtwcml2LSZndDtjb21wb25lbnRzLCBsaXN0X2VudHJ5KSB7CiYjNDM7CQlpZiAoY29tcG9uZW50X3ByaXYtJmd0O2NvbXBvbmVudF9pZCA9PSBjb21wb25lbnRfaWQpCiYjNDM7CQkJcmV0dXJuIGNvbXBvbmVudF9wcml2LSZndDtza2lwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX3NlbmRfY29tcG9uZW50X3RhYmxlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsCiYjNDM7CQkJCSAgICAgc3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudCwKJiM0MzsJCQkJICAgICB1OCB0cmFuc2Zlcl9mbGFnKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAqY29tcG9uZW50X3RibDsKJiM0MzsJc3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LSZndDtkZXY7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTsKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LSZndDtwZHNjOwomIzQzOwlib29sIHNraXBfY29tcG9uZW50ID0gZmFsc2U7CiYjNDM7CXU4IHJlcXVlc3RlZF90eXBlID0gMDsKJiM0MzsJdTE2IGJ1Zl9zeiwgdGJsX3N6OwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJZGV2X2RiZyhkZXYsCiYjNDM7CQkmIzM0O2NvbXBvbmVudCBuYW1lICVzIGNsYXNzaWZpY2F0aW9uICV1IGlkICV1IGFjdGl2YXRpb25fbWV0aG9kICV1IHZlcl9sZW4gJWQgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXUgdHJhbnNmZXJfZmxhZyAweCUwMnhcbiYjMzQ7LAomIzQzOwkJcHJpdi0mZ3Q7cGFyYW1zLSZndDtjb21wb25lbnQsIGNvbXBvbmVudC0mZ3Q7Y2xhc3NpZmljYXRpb24sCiYjNDM7CQljb21wb25lbnQtJmd0O2lkZW50aWZpZXIsIGNvbXBvbmVudC0mZ3Q7YWN0aXZhdGlvbl9tZXRob2QsCiYjNDM7CQljb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuLCBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuLAomIzQzOwkJY29tcG9uZW50LSZndDt2ZXJzaW9uX3N0cmluZywgY29tcG9uZW50LSZndDtpbmRleCwKJiM0MzsJCWNvbXBvbmVudC0mZ3Q7Y29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpOwomIzQzOwomIzQzOwljb21wb25lbnRfcHJpdiA9IGt6YWxsb2Nfb2JqKCpjb21wb25lbnRfcHJpdiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY29tcG9uZW50X3ByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3BhcmFtcy0mZ3Q7Y29tcG9uZW50KSB7CiYjNDM7CQlyZXF1ZXN0ZWRfdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHByaXYtJmd0O3BhcmFtcy0mZ3Q7Y29tcG9uZW50KTsKJiM0MzsJCWlmIChjb21wb25lbnQtJmd0O2lkZW50aWZpZXIgJmd0OyBVOF9NQVggfHwKJiM0MzsJCSAgICAhcGRzY19jb21wb25lbnRfaWRfbWF0Y2hlc190eXBlKHBkc2MsCiYjNDM7CQkJCQkJICAgIGNvbXBvbmVudC0mZ3Q7aWRlbnRpZmllciwKJiM0MzsJCQkJCQkgICAgcmVxdWVzdGVkX3R5cGUpKSB7CiYjNDM7CQkJc2tpcF9jb21wb25lbnQgPSB0cnVlOwomIzQzOwkJCWdvdG8gYWRkX2NvbXBvbmVudF9wcml2OwomIzQzOwkJfQomIzQzOwkJcHJpdi0mZ3Q7Y29tcG9uZW50X2ZvdW5kID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlidWZfc3ogPSBzaXplb2YocGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEpOwomIzQzOwl0Ymxfc3ogPSBzdHJ1Y3Rfc2l6ZShjb21wb25lbnRfdGJsLCB2ZXJzaW9uX3N0ciwKJiM0MzsJCQkgICAgIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9sZW4pOwomIzQzOwlpZiAodGJsX3N6ICZndDsgYnVmX3N6KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXG4mIzM0OywKJiM0MzsJCQl0Ymxfc3osIGJ1Zl9zeik7CiYjNDM7CQllcnIgPSAtRU5PU1BDOwomIzQzOwkJZ290byBmcmVlX2NvbXBvbmVudF9wcml2OwomIzQzOwl9CiYjNDM7CWNvbXBvbmVudF90YmwgPSBremFsbG9jKHRibF9zeiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY29tcG9uZW50X3RibCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjsKJiM0MzsJfQomIzQzOwomIzQzOwljb21wb25lbnRfdGJsLSZndDtjb21wYXJpc29uX3N0YW1wID0KJiM0MzsJCWNwdV90b19sZTMyKGNvbXBvbmVudC0mZ3Q7Y29tcGFyaXNvbl9zdGFtcCk7CiYjNDM7CWNvbXBvbmVudF90YmwtJmd0O2NsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtjbGFzc2lmaWNhdGlvbik7CiYjNDM7CWNvbXBvbmVudF90YmwtJmd0O2lkZW50aWZpZXIgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtJmd0O2lkZW50aWZpZXIpOwomIzQzOwljb21wb25lbnRfdGJsLSZndDt0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZzsKJiM0MzsJY29tcG9uZW50X3RibC0mZ3Q7dmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl90eXBlOwomIzQzOwljb21wb25lbnRfdGJsLSZndDt2ZXJzaW9uX3N0cl9sZW4gPSBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuOwomIzQzOwltZW1jcHkoY29tcG9uZW50X3RibC0mZ3Q7dmVyc2lvbl9zdHIsIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9zdHJpbmcsCiYjNDM7CSAgICAgICBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuKTsKJiM0MzsKJiM0MzsJY21kLnNlbmRfY29tcG9uZW50X3RibC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMOwomIzQzOwljbWQuc2VuZF9jb21wb25lbnRfdGJsLnZlciA9IDE7CiYjNDM7CWNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDsKJiM0MzsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsICZhbXA7Y21kLCBjb21wb25lbnRfdGJsLCB0Ymxfc3osCiYjNDM7CQkJCSAgICAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0MzsJa2ZyZWUoY29tcG9uZW50X3RibCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCBzZW5kaW5nIGNvbXBvbmVudCB0YWJsZTogJXBlXG4mIzM0OywKJiM0MzsJCQlFUlJfUFRSKGVycikpOwomIzQzOwkJZ290byBmcmVlX2NvbXBvbmVudF9wcml2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTsKJiM0MzsKJiM0MzthZGRfY29tcG9uZW50X3ByaXY6CiYjNDM7CWNvbXBvbmVudF9wcml2LSZndDtza2lwID0gc2tpcF9jb21wb25lbnQ7CiYjNDM7CWNvbXBvbmVudF9wcml2LSZndDtjb21wb25lbnRfaWQgPSBjb21wb25lbnQtJmd0O2lkZW50aWZpZXI7CiYjNDM7CWxpc3RfYWRkKCZhbXA7Y29tcG9uZW50X3ByaXYtJmd0O2xpc3RfZW50cnksICZhbXA7cHJpdi0mZ3Q7Y29tcG9uZW50cyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2ZyZWVfY29tcG9uZW50X3ByaXY6CiYjNDM7CWtmcmVlKGNvbXBvbmVudF9wcml2KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sCiYjNDM7CQkuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9IDEsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvICpsaXN0X2luZm87CiYjNDM7CXN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfYWRkcjsKJiM0MzsJdTggbnVtX2NvbXBvbmVudHM7CiYjNDM7CWludCBlcnIsIGk7CiYjNDM7CiYjNDM7CWRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkKTsKJiM0MzsJaWYgKCFkZWZlcnJlZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlsaXN0X2luZm8gPSBremFsbG9jKFBEU19QQUdFX1NJWkUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWxpc3RfaW5mbykgewomIzQzOwkJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwZHNjLSZndDtkZXYsIGxpc3RfaW5mbywgUERTX1BBR0VfU0laRSwKJiM0MzsJCQkJICBETUFfRlJPTV9ERVZJQ0UpOwomIzQzOwlpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy0mZ3Q7ZGV2LCBkbWFfYWRkcikpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7RmFpbGVkIHRvIGRtYV9tYXAgY29tcG9uZW50X2xpc3RfaW5mbyBsZW5ndGggJWRcbiYjMzQ7LAomIzQzOwkJCVBEU19QQUdFX1NJWkUpOwomIzQzOwkJa2ZyZWUobGlzdF9pbmZvKTsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNtZC5nZXRfY29tcG9uZW50X2luZm8uZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihQRFNfUEFHRV9TSVpFKTsKJiM0MzsJY21kLmdldF9jb21wb25lbnRfaW5mby5kYXRhX3BhID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpOwomIzQzOwomIzQzOwllcnIgPSBwZHNjX2RldmNtZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCAqIDIpOwomIzQzOwlpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHsKJiM0MzsJCXBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsIGxpc3RfaW5mbywKJiM0MzsJCQkJICAgICAgUERTX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwlkbWFfdW5tYXBfc2luZ2xlKHBkc2MtJmd0O2RldiwgZG1hX2FkZHIsIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9PSAwKSB7CiYjNDM7CQkvKiBEb24mIzM5O3Qgc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHZlcnNpb24gMCBoYXMKJiM0MzsJCSAqIGFsaWdubWVudCBpc3N1ZXMsIHNvIGdpdmUgYSBoaW50IHRvIHVzZXJzIHRvIHVwZGF0ZQomIzQzOwkJICogdGhlaXIgZmlybXdhcmUKJiM0MzsJCSAqLwomIzQzOwkJZGV2X3dhcm5fb25jZShwZHNjLSZndDtkZXYsCiYjNDM7CQkJICAgICAgJiMzNDtJbmNvbXBhdGlibGUgZ2V0X2NvbXBvbmVudF9pbmZvIHZlcnNpb24gJXUgcmVwb3J0ZWQgYnkgZmlybXdhcmVcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlcik7CiYjNDM7CQllcnIgPSAwOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtX2NvbXBvbmVudHMgPSBsaXN0X2luZm8tJmd0O251bV9jb21wb25lbnRzOwomIzQzOwlpZiAobnVtX2NvbXBvbmVudHMgJmd0OyBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzID0gbnVtX2NvbXBvbmVudHM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9CiYjNDM7CQkJJmFtcDtwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV07CiYjNDM7CiYjNDM7CQltZW1jcHkoaW5mbywgJmFtcDtsaXN0X2luZm8tJmd0O2luZm9baV0sIHNpemVvZigqaW5mbykpOwomIzQzOwkJaW5mby0mZ3Q7dmVyc2lvbltQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAtIDFdID0gMDsKJiM0MzsJCWluZm8tJmd0O25hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIC0gMV0gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrZnJlZShsaXN0X2luZm8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLAomIzQzOwkJCQkgICAgICB1MTYgaW5mb19zeiwgZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuZ3RoLAomIzQzOwkJCQkgICAgICB1MzIgb2Zmc2V0LCB1MTYgc2xvdF9pZCwKJiM0MzsJCQkJICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApCiYjNDM7ewomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5zZW5kX2NvbXBvbmVudC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQsCiYjNDM7CQkuc2VuZF9jb21wb25lbnQudmVyID0gMSwKJiM0MzsJCS5zZW5kX2NvbXBvbmVudC5vcGVyYXRpb24gPSBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVCwKJiM0MzsJCS5zZW5kX2NvbXBvbmVudC5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksCiYjNDM7CQkuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLAomIzQzOwkJLnNlbmRfY29tcG9uZW50Lm9mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCksCiYjNDM7CQkuc2VuZF9jb21wb25lbnQuc2xvdF9pZCA9IHNsb3RfaWQsCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDMwMCAqIEhaOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXN0YXJ0X3RpbWUgPSBqaWZmaWVzOwomIzQzOwllbmRfdGltZSA9IHN0YXJ0X3RpbWUgJiM0MzsgdGltZW91dDsKJiM0MzsJZG8gewomIzQzOwkJLyogcHJldmVudCBub2lzeS9iZW5pZ24gZGV2Y21kIGZhaWx1cmVzICovCiYjNDM7CQllcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2cocGRzYywgJmFtcDtjbWQsIGluZm8sIGluZm9fc3osCiYjNDM7CQkJCQkJICBjb21wLCA2MCk7CiYjNDM7CQlpZiAoZXJyICE9IC1FQUdBSU4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBpZiByZXF1aXJlZCwgc3Vic2VxdWVudCBjb21tYW5kcyBjaGVjayBzdGF0dXMgb2YKJiM0MzsJCSAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBjb21tYW5kLCB3aGljaCByZXR1cm5zCiYjNDM7CQkgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZywKJiM0MzsJCSAqIGVsc2Ugd2UgZ2V0IHRoZSBmaW5hbCBjb21tYW5kIHN0YXR1cy4KJiM0MzsJCSAqLwomIzQzOwkJY21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUzsKJiM0MzsJCW1zbGVlcCgyMCk7CiYjNDM7CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7CiYjNDM7CiYjNDM7CWlmIChlcnIgPT0gLUVBR0FJTiB8fCBlcnIgPT0gLUVUSU1FRE9VVCkKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O1BEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCB0aW1lZCBvdXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2ZsYXNoX2NvbXBvbmVudF9jaHVuayhzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLAomIzQzOwkJCQkgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LAomIzQzOwkJCQkgICAgICB1MzIgb2Zmc2V0LCB1OCBzbG90X2lkLAomIzQzOwkJCQkgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7CiYjNDM7CWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXU4ICpjb21wb25lbnRfZGF0YTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWRlZmVycmVkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWNvbXBvbmVudF9kYXRhID0ga21lbWR1cChkYXRhLCBjb3B5X3N6LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFjb21wb25lbnRfZGF0YSkgewomIzQzOwkJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTsKJiM0MzsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwKJiM0MzsJCQkmIzM0O0ZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9kYXRhIGF0IG9mZnNldCAweCV4IGNvcHlfc3ogMHgleFxuJiMzNDssCiYjNDM7CQkJb2Zmc2V0LCBjb3B5X3N6KTsKJiM0MzsJCWtmcmVlKGNvbXBvbmVudF9kYXRhKTsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHBkc2MsIGluZm8sIGluZm9fc3osIGRtYV9hZGRyLAomIzQzOwkJCQkJIGNvcHlfc3osIG9mZnNldCwgc2xvdF9pZCwgY29tcCk7CiYjNDM7CWlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikgewomIzQzOwkJcGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkciwKJiM0MzsJCQkJICAgICAgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CWtmcmVlKGNvbXBvbmVudF9kYXRhKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2ZsYXNoX2NvbXBvbmVudChzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LAomIzQzOwkJCQlzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50KQomIzQzO3sKJiM0MzsJY2hhciBjb21wb25lbnRfbmFtZV9idWZbUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTl07CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqY29tcG9uZW50X2luZm87CiYjNDM7CWNvbnN0IGNoYXIgKmNvbXBvbmVudF9uYW1lID0gTlVMTDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtJmd0O3Bkc2M7CiYjNDM7CXUxNiBidWZfc3osIGluZm9fc3o7CiYjNDM7CXN0cnVjdCBkZXZsaW5rICpkbDsKJiM0MzsJdTggY29tcG9uZW50X3R5cGU7CiYjNDM7CXUzMiB0b3RhbF9sZW47CiYjNDM7CXUzMiBvZmZzZXQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWNvbXBvbmVudF90eXBlID0gcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQocGRzYywKJiM0MzsJCQkJCQkgICAgICAgY29tcG9uZW50LSZndDtpZGVudGlmaWVyKTsKJiM0MzsJaWYgKGNvbXBvbmVudF90eXBlKSB7CiYjNDM7CQljb25zdCBjaGFyICp0eXBlX25hbWUgPSBwZHNjX2Z3X3R5cGVfdG9fbmFtZShjb21wb25lbnRfdHlwZSk7CiYjNDM7CiYjNDM7CQlpZiAoY29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7CiYjNDM7CQkJY29tcG9uZW50X25hbWUgPSAmIzM0O2Z3JiMzNDs7CiYjNDM7CQl9IGVsc2UgaWYgKHR5cGVfbmFtZSkgewomIzQzOwkJCXNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksCiYjNDM7CQkJCSAmIzM0OyVzJXMmIzM0OywgUERTQ19GV19DT01QT05FTlRfUFJFRklYLCB0eXBlX25hbWUpOwomIzQzOwkJCWNvbXBvbmVudF9uYW1lID0gY29tcG9uZW50X25hbWVfYnVmOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpOwomIzQzOwomIzQzOwlpZiAocGRzY19za2lwX2NvbXBvbmVudChwcml2LCBjb21wb25lbnQtJmd0O2lkZW50aWZpZXIpKSB7CiYjNDM7CQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCAmIzM0O1NraXBwZWQmIzM0OywKJiM0MzsJCQkJCQkgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwl0b3RhbF9sZW4gPSBjb21wb25lbnQtJmd0O2NvbXBvbmVudF9zaXplOwomIzQzOwlkZXZfZGJnKGRldiwKJiM0MzsJCSYjMzQ7Y29tcG9uZW50IG5hbWUgJXMgY2xhc3MgJXUgaWQgJXUgYWN0X21ldGggJXUgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXVcbiYjMzQ7LAomIzQzOwkJY29tcG9uZW50X25hbWUgPzogJiMzNDsodW5rbm93bikmIzM0OywgY29tcG9uZW50LSZndDtjbGFzc2lmaWNhdGlvbiwKJiM0MzsJCWNvbXBvbmVudC0mZ3Q7aWRlbnRpZmllciwgY29tcG9uZW50LSZndDthY3RpdmF0aW9uX21ldGhvZCwKJiM0MzsJCWNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9sZW4sIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9zdHJpbmcsCiYjNDM7CQljb21wb25lbnQtJmd0O2luZGV4LCBjb21wb25lbnQtJmd0O2NvbXBvbmVudF9zaXplKTsKJiM0MzsKJiM0MzsJYnVmX3N6ID0gc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKTsKJiM0MzsJaW5mb19zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF9pbmZvLCB2ZXJzaW9uX3N0ciwKJiM0MzsJCQkgICAgICBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuKTsKJiM0MzsJaWYgKGluZm9fc3ogJmd0OyBidWZfc3opIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2NvbXBvbmVudF9pbmZvIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXG4mIzM0OywKJiM0MzsJCQlpbmZvX3N6LCBidWZfc3opOwomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CX0KJiM0MzsJY29tcG9uZW50X2luZm8gPSB2emFsbG9jKGluZm9fc3opOwomIzQzOwlpZiAoIWNvbXBvbmVudF9pbmZvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtjb21wYXJpc29uX3N0YW1wID0KJiM0MzsJCWNwdV90b19sZTMyKGNvbXBvbmVudC0mZ3Q7Y29tcGFyaXNvbl9zdGFtcCk7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtpbWFnZV9zaXplID0gY3B1X3RvX2xlMzIodG90YWxfbGVuKTsKJiM0MzsJY29tcG9uZW50X2luZm8tJmd0O2NsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtjbGFzc2lmaWNhdGlvbik7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtpZGVudGlmaWVyKTsKJiM0MzsJY29tcG9uZW50X2luZm8tJmd0O29wdGlvbnMgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtJmd0O29wdGlvbnMpOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7dmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl90eXBlOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7dmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbjsKJiM0MzsJbWVtY3B5KGNvbXBvbmVudF9pbmZvLSZndDt2ZXJzaW9uX3N0ciwgY29tcG9uZW50LSZndDt2ZXJzaW9uX3N0cmluZywKJiM0MzsJICAgICAgIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9sZW4pOwomIzQzOwomIzQzOwlvZmZzZXQgPSAwOwomIzQzOwl3aGlsZSAob2Zmc2V0ICZsdDsgdG90YWxfbGVuKSB7CiYjNDM7CQl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiYjNDM7CQl1MTYgY29weV9zejsKJiM0MzsKJiM0MzsJCWNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsCiYjNDM7CQkJCXRvdGFsX2xlbiAtIG9mZnNldCk7CiYjNDM7CiYjNDM7CQllcnIgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudF9jaHVuayhwZHNjLCBkZXYsIGNvbXBvbmVudF9pbmZvLAomIzQzOwkJCQkJCSBpbmZvX3N6LAomIzQzOwkJCQkJCSBjb21wb25lbnQtJmd0O2NvbXBvbmVudF9kYXRhICYjNDM7CiYjNDM7CQkJCQkJIG9mZnNldCwgY29weV9zeiwgb2Zmc2V0LAomIzQzOwkJCQkJCSBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQsCiYjNDM7CQkJCQkJICZhbXA7Y29tcCk7CiYjNDM7CQlpZiAoZXJyICZhbXA7JmFtcDsKJiM0MzsJCSAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT0KJiM0MzsJCSAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCB8fAomIzQzOwkJICAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09CiYjNDM7CQkgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUikpIHsKJiM0MzsJCQllcnIgPSAwOwomIzQzOwkJCWRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsICYjMzQ7U2tpcHBlZCYjMzQ7LAomIzQzOwkJCQkJCQkgICBjb21wb25lbnRfbmFtZSwKJiM0MzsJCQkJCQkJICAgMCwgMCk7CiYjNDM7CQkJZ290byBza2lwX2NvbXBvbmVudDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QocHJpdi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtGYWlsZWQgdG8gZmxhc2ggY29tcG9uZW50JiMzNDspOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9mZnNldCAmIzQzOz0gY29weV9zejsKJiM0MzsJCWRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsCiYjNDM7CQkJCQkJICAgJiMzNDtFcmFzaW5nL0ZsYXNoaW5nJiMzNDssCiYjNDM7CQkJCQkJICAgY29tcG9uZW50X25hbWUsIG9mZnNldCwKJiM0MzsJCQkJCQkgICB0b3RhbF9sZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZmcmVlKGNvbXBvbmVudF9pbmZvKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX291dDoKJiM0MzsJZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwKJiM0MzsJCQkJCSAgICYjMzQ7RXJhc2luZy9GbGFzaGluZyBDb21wb25lbnQgRmFpbGVkJiMzNDssCiYjNDM7CQkJCQkgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7CiYjNDM7c2tpcF9jb21wb25lbnQ6CiYjNDM7CXZmcmVlKGNvbXBvbmVudF9pbmZvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKJiM0MzsJCS5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSwKJiM0MzsJCS5maW5hbGl6ZV91cGRhdGUudmVyID0gMSwKJiM0MzsJfTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwomIzQzOwlyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7CiYjNDM7CWNvbnN0IGNoYXIgKmNvbXBvbmVudF9uYW1lID0gcHJpdi0mZ3Q7cGFyYW1zLSZndDtjb21wb25lbnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSwgZW5kX3RpbWU7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtJmd0O2RldjsKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LSZndDtwZHNjOwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGw7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpOwomIzQzOwomIzQzOwlzdGFydF90aW1lID0gamlmZmllczsKJiM0MzsJZW5kX3RpbWUgPSBzdGFydF90aW1lICYjNDM7IChQRFNDX0ZXX0lOU1RBTExfVElNRU9VVCAqIEhaKTsKJiM0MzsJZG8gewomIzQzOwkJZXJyID0gcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHBkc2MpOwomIzQzOwkJaWYgKGVyciAhPSAtRUFHQUlOKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZGV2X2RiZyhkZXYsICYjMzQ7cmV0cnlpbmcgZmluYWxpemVfdXBkYXRlOiAlcGVcbiYjMzQ7LCBFUlJfUFRSKGVycikpOwomIzQzOwkJbXNsZWVwKDIwKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpICZhbXA7JmFtcDsgZXJyID09IC1FQUdBSU4pOwomIzQzOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCAmIzM0O0ZpbmFsaXplIFVwZGF0ZSBGYWlsZWQmIzM0OywKJiM0MzsJCQkJCQkgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QocHJpdi0mZ3Q7ZXh0YWNrLCAmIzM0O0ZpbmFsaXplIHVwZGF0ZSBmYWlsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsICYjMzQ7RmluYWxpemVkIFVwZGF0ZSYjMzQ7LAomIzQzOwkJCQkJICAgY29tcG9uZW50X25hbWUsIDAsIDApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwbGRtZndfb3BzIHBkc2NfcGxkbWZ3X29wcyA9IHsKJiM0MzsJLm1hdGNoX3JlY29yZCA9IHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzLAomIzQzOwkuc2VuZF9wYWNrYWdlX2RhdGEgPSBwZHNjX3NlbmRfcGFja2FnZV9kYXRhLAomIzQzOwkuc2VuZF9jb21wb25lbnRfdGFibGUgPSBwZHNjX3NlbmRfY29tcG9uZW50X3RhYmxlLAomIzQzOwkuZmxhc2hfY29tcG9uZW50ID0gcGRzY19mbGFzaF9jb21wb25lbnQsCiYjNDM7CS5maW5hbGl6ZV91cGRhdGUgPSBwZHNjX2ZpbmFsaXplX3VwZGF0ZQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCQkgICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiBwcml2ID0ge307CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cykgewomIzQzOwkJZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7RmFpbGVkIHRvIGdldCBjb21wb25lbnQgaW5mbyYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwYXJhbXMtJmd0O2NvbXBvbmVudCkgewomIzQzOwkJdTggdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHBhcmFtcy0mZ3Q7Y29tcG9uZW50KTsKJiM0MzsKJiM0MzsJCWlmICghdHlwZSB8fCAhcGRzY19jb21wb25lbnRfdHlwZV9leGlzdHMocGRzYywgdHlwZSkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O1Vua25vd24gY29tcG9uZW50IG5hbWUmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtwcml2LmNvbXBvbmVudHMpOwomIzQzOwlwcml2LmNvbnRleHQub3BzID0gJmFtcDtwZHNjX3BsZG1md19vcHM7CiYjNDM7CXByaXYuY29udGV4dC5kZXYgPSBwZHNjLSZndDtkZXY7CiYjNDM7CXByaXYucGFyYW1zID0gcGFyYW1zOwomIzQzOwlwcml2LmV4dGFjayA9IGV4dGFjazsKJiM0MzsJcHJpdi5wZHNjID0gcGRzYzsKJiM0MzsKJiM0MzsJZXJyID0gcGxkbWZ3X2ZsYXNoX2ltYWdlKCZhbXA7cHJpdi5jb250ZXh0LCBmdyk7CiYjNDM7CWlmICghZXJyICZhbXA7JmFtcDsgcGFyYW1zLSZndDtjb21wb25lbnQgJmFtcDsmYW1wOyAhcHJpdi5jb21wb25lbnRfZm91bmQpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7UmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlJiMzNDspOwomIzQzOwkJZXJyID0gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwlwZHNjX2ZyZWVfZnd1X3ByaXYoJmFtcDtwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLAomIzQzOwkJCSBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChwZHNjLSZndDtkZXZfaWRlbnQudmVyc2lvbiAmZ3Q7PSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgJmFtcDsmYW1wOwomIzQzOwkgICAgcGRzYy0mZ3Q7ZGV2X2lkZW50LmNhcGFiaWxpdGllcyAmYW1wOwomIzQzOwkJY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSkpCiYjNDM7CQllcnIgPSBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrLAomIzQzOwkJCQkJCXBhcmFtcy0mZ3Q7ZncpOwomIzQzOwllbHNlCiYjNDM7CQllcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spOwomIzQzOwomIzQzOwkvKiBJbnZhbGlkYXRlIGNhY2hlZCBjb21wb25lbnQgaW5mbyBzbyBuZXh0IGluZm9fZ2V0IHJlZnJlc2hlcyAqLwomIzQzOwlwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYwppbmRleCA4ZDk0YTRkNzAzOTVlLi41ZTFiMDc4NTAxNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMKQEAgLTIxLDYgJiM0MzsyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZHNjX2lkX3RhYmxlW10gPSB7CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBkc2NfaWRfdGFibGUpOwogCiYjNDM7c3RhdGljIHZvaWQgcGRzY19zdG9wX2hlYWx0aF90aHJlYWQoc3RydWN0IHBkc2MgKnBkc2MpOwomIzQzOwogc3RhdGljIHZvaWQgcGRzY193ZHRpbWVyX2NiKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogewogCXN0cnVjdCBwZHNjICpwZHNjID0gdGltZXJfY29udGFpbmVyX29mKHBkc2MsIHQsIHdkdGltZXIpOwpAQCAtMzE1LDYgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IHBkc2NfaW5pdF9wZihzdHJ1Y3QgcGRzYyAqcGRzYykKIAkJZGVzdHJveV93b3JrcXVldWUocGRzYy0mZ3Q7d3EpOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwZHNjLSZndDtjb25maWdfbG9jayk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO3Bkc2MtJmd0O2RldmNtZF9sb2NrKTsKJiM0MzsJcGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTsKIAlwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZHNjLSZndDtwZGV2KTsKIGVycl9vdXRfdW5tYXBfYmFyczoKIAlwZHNjX3VubWFwX2JhcnMocGRzYyk7CkBAIC0zNTMsNiAmIzQzOzM1Niw4IEBAIHN0YXRpYyBpbnQgcGRzY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAlwZHNjLSZndDtwZGV2ID0gcGRldjsKIAlwZHNjLSZndDtkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKIAlzZXRfYml0KFBEU0NfU19JTklUSU5HX0RSSVZFUiwgJmFtcDtwZHNjLSZndDtzdGF0ZSk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xpc3QpOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9sb2NrKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgcGRzYyk7CiAJcGRzY19kZWJ1Z2ZzX2FkZF9kZXYocGRzYyk7CiAKQEAgLTQ1OCw2ICYjNDM7NDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJfQogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpOwogCiAJaWRhX2ZyZWUoJmFtcDtwZHNjX2lkYSwgcGRzYy0mZ3Q7dWlkKTsKIAlwZHNjX2RlYnVnZnNfZGVsX2RldihwZHNjKTsKQEAgLTUwNSw2ICYjNDM7NTExLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZXNldF9wcmVwYXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJaWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKQogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiYjNDM7CXBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmggYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oCmluZGV4IDE3YTg3YzFhNTVkN2MuLjkwMWUxZTYyOGY4OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaApAQCAtNDAsNiAmIzQzOzQwLDE0IEBAIGVudW0gcGRzX2NvcmVfY21kX29wY29kZSB7CiAJUERTX0NPUkVfQ01EX0ZXX0RPV05MT0FECT0gNCwKIAlQRFNfQ09SRV9DTURfRldfQ09OVFJPTAkJPSA1LAogCiYjNDM7CVBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8JPSA2LAomIzQzOwlQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQQk9IDcsCiYjNDM7CVBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkwJPSA4LAomIzQzOwlQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQJPSA5LAomIzQzOwlQRFNfQ09SRV9DTURfRklOQUxJWkVfVVBEQVRFCT0gMTAsCiYjNDM7CVBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQwk9IDExLAomIzQzOwlQRFNfQ09SRV9DTURfSE9TVF9NRU0JCT0gMTIsCiYjNDM7CiAJLyogU1IvSU9WIGNvbW1hbmRzICovCiAJUERTX0NPUkVfQ01EX1ZGX0dFVEFUVFIJCT0gNjAsCiAJUERTX0NPUkVfQ01EX1ZGX1NFVEFUVFIJCT0gNjEsCkBAIC0xMDAsNiAmIzQzOzEwOCwxNiBAQCBzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IHsKIAljaGFyICAgZHJpdmVyX3Zlcl9zdHJbMzJdOwogfTsKIAomIzQzOy8qKgomIzQzOyAqIGVudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgLSBEZXZpY2UgY2FwYWJpbGl0aWVzCiYjNDM7ICogQFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEU6IERldmljZSBvbmx5IHN1cHBvcnRzIEZXIHVwZGF0ZSB2aWEgUExETQomIzQzOyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZQomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgewomIzQzOwlQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFID0gQklUKDApLAomIzQzOwlQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNID0gQklUKDEpLAomIzQzO307CiYjNDM7CiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVgJMTYKIC8qKgogICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvbgpAQCAtMTE5LDYgJiM0MzsxMzcsMTEgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7CiAgKgkJICAgICAgdmFsdWUgaW4gdXNlY3MgdG8gZGV2aWNlIHVuaXRzIHVzaW5nOgogICoJCSAgICAgIGRldmljZSB1bml0cyA9IHVzZWNzICogbXVsdCAvIGRpdgogICogQHZpZl90eXBlczogICAgICAgIEhvdyBtYW55IG9mIGVhY2ggVklGIGRldmljZSB0eXBlIGlzIHN1cHBvcnRlZAomIzQzOyAqIEBtYXhfZndfc2xvdHM6ICAgICBOdW1iZXIgb2YgZmlybXdhcmUgY29tcG9uZW50cyByZXBvcnRlZCBieSBkZXZpY2UKJiM0MzsgKgkJICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiAmZ3Q7PSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIKJiM0MzsgKiBAcnN2ZDI6CSAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqIEBjYXBhYmlsaXRpZXM6ICAgICBEZXZpY2UgY2FwYWJpbGl0aWVzCiYjNDM7ICoJCSAgICAgIG9ubHkgc3VwcG9ydGVkIG9uIHZlcnNpb24gJmd0Oz0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yCiAgKi8KIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkgewogCXU4ICAgICB2ZXJzaW9uOwpAQCAtMTMxLDkgJiM0MzsxNTQsMTMgQEAgc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7CiAJX19sZTMyIGludHJfY29hbF9tdWx0OwogCV9fbGUzMiBpbnRyX2NvYWxfZGl2OwogCV9fbGUxNiB2aWZfdHlwZXNbUERTX0RFVl9UWVBFX01BWF07CiYjNDM7CV9fbGUxNiBtYXhfZndfc2xvdHM7CiYjNDM7CXU4ICAgICByc3ZkMls2XTsKJiM0MzsJX19sZTY0IGNhcGFiaWxpdGllczsKIH07CiAKICNkZWZpbmUgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xCTEKJiM0MzsjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMgkyCiAKIC8qKgogICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGlmeV9jbWQgLSBEcml2ZXIvZGV2aWNlIGlkZW50aWZ5IGNvbW1hbmQKQEAgLTI3NSwxMSAmIzQzOzMwMiwyMCBAQCBlbnVtIHBkc19jb3JlX2Z3X2NvbnRyb2xfb3BlciB7CiAJUERTX0NPUkVfRldfR0VUX0xJU1QgICAgICAgICAgICAgICA9IDcsCiB9OwogCiYjNDM7LyoqCiYjNDM7ICogZW51bSBwZHNfY29yZV9md19zbG90IC0gRmlybXdhcmUgc2xvdCBpZGVudGlmaWVycwomIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQ6IExldCBmaXJtd2FyZSBzZWxlY3Qgc2xvdCBiYXNlZCBvbiBwYWNrYWdlIG1ldGFkYXRhCiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfQTogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEEKJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9COiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQgomIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX0dPTEQ6ICAgIEdvbGQvcmVjb3ZlcnkgZmlybXdhcmUgc2xvdAomIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX01BWDogICAgIFNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgbm8gc2xvdCByZXNvbHZlZAomIzQzOyAqLwogZW51bSBwZHNfY29yZV9md19zbG90IHsKIAlQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQgICAgPSAwLAogCVBEU19DT1JFX0ZXX1NMT1RfQQkgICAgPSAxLAogCVBEU19DT1JFX0ZXX1NMT1RfQiAgICAgICAgICA9IDIsCiAJUERTX0NPUkVfRldfU0xPVF9HT0xEICAgICAgID0gMywKJiM0MzsJUERTX0NPUkVfRldfU0xPVF9NQVggICAgICAgID0gMHhmZiwKIH07CiAKIC8qKgpAQCAtNDQ2LDYgJiM0Mzs0ODIsNDIzIEBAIHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NvbXAgewogCXU4CXN0YXR1czsKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBCiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHRvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIHRoZSBwYWNrYWdlIGRhdGEKJiM0MzsgKiBAb2Zmc2V0OiBPZmZzZXQgaW4gdGhlIHBhY2thZ2UgZGF0YSwgbm9uLXplcm8gaWYgbXVsdGlwbGUgY29tbWFuZHMgYXJlCiYjNDM7ICoJICAgIG5lZWRlZCBmb3Igc2VuZGluZyB0aGUgcGFja2FnZSBkYXRhCiYjNDM7ICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYQomIzQzOyAqIEBkYXRhX3BhOiBEYXRhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSB0byBkZXZpY2UKJiM0MzsgKgomIzQzOyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlCiYjNDM7ICogUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwlfX2xlMTYgdG90YWxfbGVuOwomIzQzOwlfX2xlMTYgb2Zmc2V0OwomIzQzOwlfX2xlMTYgZGF0YV9sZW47CiYjNDM7CV9fbGU2NCBkYXRhX3BhOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpCiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgLSBDb21wb25lbnQgdGFibGUgZGV0YWlscwomIzQzOyAqIEBjb21wYXJpc29uX3N0YW1wOiBDb21wYXJpc29uIHN0YW1wIHVzZWQgZm9yIGNvbXBvbmVudCB2ZXJzaW9uIGNoZWNrcwomIzQzOyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm8KJiM0MzsgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50JiMzOTtzIElECiYjNDM7ICogQHRyYW5zZmVyX2ZsYWc6IFBhcnQgb2YgdGhlIGNvbXBvbmVudCB0YWJsZSB0aGlzIHJlcXVlc3QgcmVwcmVzZW50cwomIzQzOyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkCiYjNDM7ICogQHZlcnNpb25fc3RyX2xlbjogTGVuZ3RoIG9mIEB2ZXJzaW9uX3N0cgomIzQzOyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb24KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCB7CiYjNDM7CV9fbGUzMiBjb21wYXJpc29uX3N0YW1wOwomIzQzOwlfX2xlMTYgY2xhc3NpZmljYXRpb247CiYjNDM7CV9fbGUxNiBpZGVudGlmaWVyOwomIzQzOwl1OCAgICAgdHJhbnNmZXJfZmxhZzsKJiM0MzsJdTggICAgIHZlcnNpb25fc3RyX3R5cGU7CiYjNDM7CXU4ICAgICB2ZXJzaW9uX3N0cl9sZW47CiYjNDM7CXU4ICAgICB2ZXJzaW9uX3N0cltdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkwKJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90CiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqCiYjNDM7ICogRXhwZWN0cyB0byBmaW5kIGNvbXBvbmVudCB0YWJsZSBpbmZvIChzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCkKJiM0MzsgKiBpbiBjbWRfcmVncy0mZ3Q7ZGF0YS4gIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQKJiM0MzsgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHsKJiM0MzsJdTggb3Bjb2RlOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IHNsb3RfaWQ7CiYjNDM7CXU4IHJzdmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9yZXNwX2NvZGUgewomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfVkFMSUQgPSAweDAsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgPSAweDEsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUiA9IDB4MiwKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX09SX1ZFUlNJT05fSU5WQUxJRCA9IDB4MywKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX0NPTkZMSUNUID0gMHg0LAomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfUFJFUkVRU19OT1RfTUVUID0gMHg1LAomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfTk9UX1NVUFBPUlRFRCA9IDB4NiwKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX0ZXX1RZUEVfSU5WQUxJRCA9IDB4ZDAsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQGNvbXBsZXRpb25fY29kZTogQ29tcG9uZW50IGNvbXBsZXRpb24gY29kZQomIzQzOyAqIEByZXNwb25zZTogQ29tcG9uZW50IHJlc3BvbnNlCiYjNDM7ICogQHJlc3BvbnNlX2NvZGU6IENvbXBvbmVudCByZXNwb25zZSBjb2RlCiYjNDM7ICogQHNsb3RfaWQ6IEFjdHVhbCBzbG90X2lkIG9mIHRoZSBjb21wb25lbnQgKGVudW0gcGRzX2NvcmVfZndfc2xvdCkKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IGNvbXBsZXRpb25fY29kZTsKJiM0MzsJdTggcmVzcG9uc2U7CiYjNDM7CXU4IHJlc3BvbnNlX2NvZGU7CiYjNDM7CXU4IHNsb3RfaWQ7CiYjNDM7CXU4IHJzdmRbMl07CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvbgomIzQzOyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVDogSW5pdGlhbCBvcGVyYXRpb24gdG8gc3RhcnQgdHJhbnNmZXIKJiM0MzsgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTOiBTdWJzZXF1ZW50IGNhbGxzIHRvIGNoZWNrIG9uIHN0YXR1cwomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3AgewomIzQzOwlQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVCA9IDAsCiYjNDM7CVBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUyA9IDEsCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JRF9JTlZBTElEIDB4RkZGRgomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgLSBDb21wb25lbnQgZGV0YWlscwomIzQzOyAqIEBjb21wYXJpc29uX3N0YW1wOiBDb21wYXJpc29uIHN0YW1wIHVzZWQgZm9yIGNvbXBvbmVudCB2ZXJzaW9uIGNoZWNrcwomIzQzOyAqIEBpbWFnZV9zaXplOiBDb21wb25lbnQgaW1hZ2Ugc2l6ZQomIzQzOyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm8KJiM0MzsgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50JiMzOTtzIElECiYjNDM7ICogQG9wdGlvbnM6IENvbXBvbmVudCBvcHRpb25zCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkCiYjNDM7ICogQHZlcnNpb25fc3RyX2xlbjogTGVuZ3RoIG9mIEB2ZXJzaW9uX3N0cgomIzQzOyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb24KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IHsKJiM0MzsJX19sZTMyIGNvbXBhcmlzb25fc3RhbXA7CiYjNDM7CV9fbGUzMiBpbWFnZV9zaXplOwomIzQzOwlfX2xlMTYgY2xhc3NpZmljYXRpb247CiYjNDM7CV9fbGUxNiBpZGVudGlmaWVyOwomIzQzOwlfX2xlMTYgb3B0aW9uczsKJiM0MzsJdTggcnN2ZFszXTsKJiM0MzsJdTggdmVyc2lvbl9zdHJfdHlwZTsKJiM0MzsJdTggdmVyc2lvbl9zdHJfbGVuOwomIzQzOwl1OCB2ZXJzaW9uX3N0cltdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAtIFNlbmQgY29tcG9uZW50IGNvbW1hbmQKJiM0MzsgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UCiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90CiYjNDM7ICogQG9wZXJhdGlvbjogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcAomIzQzOyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzCiYjNDM7ICoJICAgIGFyZSBuZWVkZWQgZm9yIGEgc2luZ2xlIGNvbXBvbmVudAomIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIHRoaXMgcGFydCBvZiB0aGUgY29tcG9uZW50IHN0b3JlZCBhdCBAZGF0YV9wYQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgdGhlIGNvbXBvbmVudAomIzQzOyAqCiYjNDM7ICogQSBjb21wb25lbnQgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlCiYjNDM7ICogUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIGRldmNtZHMgbWF5IGJlIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIEV4cGVjdHMgdG8gZmluZCBmbGFzaCBjb21wb25lbnQgaW5mbyAoc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCkKJiM0MzsgKiBpbiBjbWRfcmVncy0mZ3Q7ZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZAomIzQzOyAqIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGUgZmxhc2ggY29tcG9uZW50IGluZm8uCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCBzbG90X2lkOwomIzQzOwl1OCBvcGVyYXRpb247CiYjNDM7CV9fbGUzMiBvZmZzZXQ7CiYjNDM7CV9fbGUzMiBkYXRhX2xlbjsKJiM0MzsJdTggcnN2ZFs0XTsKJiM0MzsJX19sZTY0IGRhdGFfcGE7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAtIFNlbmQgY29tcG9uZW50IGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpCiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wbGV0aW9uIGNvZGUKJiM0MzsgKiBAY29tcGF0X3Jlc3BvbnNlOiBDb21wYXRpYmlsaXR5IHJlc3BvbnNlICgwID0gQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkKQomIzQzOyAqIEBjb21wYXRfcmVzcG9uc2VfY29kZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSBjb2RlCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IGNvbXBsZXRpb25fY29kZTsKJiM0MzsJdTggY29tcGF0X3Jlc3BvbnNlOwomIzQzOwl1OCBjb21wYXRfcmVzcG9uc2VfY29kZTsKJiM0MzsJdTggcnN2ZFszXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUgLSBGaXJtd2FyZSBjb21wb25lbnQgdHlwZQomIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1VOS05PV046IFVua25vd24gY29tcG9uZW50IHR5cGUKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9NQUlOOiBNYWluIGZpcm13YXJlCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfQk9PVDogQm9vdCBsb2FkZXIKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9DUExEOiBDUExEIGZpcm13YXJlCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFOiBTZWN1cmUgZmlybXdhcmUKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9GUEdBOiBGUEdBIGNvbmZpZ3VyYXRpb24KJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTjogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBmaXJtd2FyZQomIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UOiBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGJvb3Rsb2FkZXIKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9VQk9PVDogVS1Cb290IGJvb3Rsb2FkZXIKJiM0MzsgKgomIzQzOyAqIEdvbGQvcmVjb3ZlcnkgdmFyaWFudHMgYXJlIGlkZW50aWZpZWQgYnkgc2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQKJiM0MzsgKiBhbmQgcmVwb3J0ZWQgd2l0aCBhICYjMzQ7LmdvbGQmIzM0OyBzdWZmaXggKGUuZy4sIGZ3LmdvbGQpLgomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUgewomIzQzOwlQRFNfQ09SRV9GV19UWVBFX1VOS05PV04gICA9IDAsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfTUFJTiAgICAgID0gMSwKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9CT09UICAgICAgPSAyLAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX0NQTEQgICAgICA9IDMsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFICAgID0gNCwKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9GUEdBICAgICAgPSA1LAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOICA9IDYsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1QgID0gNywKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9VQk9PVCAgICAgPSA4LAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFncyAtIENvbXBvbmVudCBpbmZvIGZsYWdzCiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORzogQ29tcG9uZW50IGlzIGN1cnJlbnRseSBydW5uaW5nCiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUDogQ29tcG9uZW50IHZlcnNpb24gb24gbmV4dCBGVyBib290CiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQ6IENvbXBvbmVudCBpcyBmaXhlZCBhbmQgY2Fubm90IGJlIHVwZGF0ZWQKJiM0MzsgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRTogQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkCiYjNDM7ICoJYnkgbmFtZQomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgewomIzQzOwlQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcgPSBCSVQoMCksCiYjNDM7CVBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUCA9IEJJVCgxKSwKJiM0MzsJUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRCA9IEJJVCgyKSwKJiM0MzsJUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSA9IEJJVCgzKSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeQomIzQzOyAqIEBuYW1lOiBDb21wb25lbnQmIzM5O3MgbmFtZQomIzQzOyAqIEBjb21wb25lbnRfdHlwZTogZW51bSBwZHNfY29yZV9md19jb21wb25lbnRfdHlwZQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAZmxhZ3M6IGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MKJiM0MzsgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50JiMzOTtzIGlkZW50aWZpZXIKJiM0MzsgKiBAc2xvdF9pZDogQ29tcG9uZW50JiMzOTtzIHNsb3QgaWRlbnRpZmllcgomIzQzOyAqIEB2ZXJzaW9uOiBDb21wb25lbnQmIzM5O3MgdmVyc2lvbgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyB7CiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4gMjQKJiM0MzsJY2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07CiYjNDM7CXU4IGNvbXBvbmVudF90eXBlOwomIzQzOwl1OCByc3ZkWzNdOwomIzQzOwlfX2xlMTYgZmxhZ3M7CiYjNDM7CXU4IGlkZW50aWZpZXI7CiYjNDM7CXU4IHNsb3RfaWQ7CiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAzMgomIzQzOwljaGFyIHZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU5dOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4JKChQRFNfUEFHRV9TSVpFIC0gOCkgLyBcCiYjNDM7CQlzaXplb2Yoc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvKSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21wbGV0aW9uIGRhdGEKJiM0MzsgKiBAbnVtX2NvbXBvbmVudHM6IE51bWJlciBvZiB2YWxpZCBjb21wb25lbnRzCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqIEBpbmZvOiBMaXN0IG9mIHZhbGlkIGNvbXBvbmVudHMKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyB7CiYjNDM7CXU4IG51bV9jb21wb25lbnRzOwomIzQzOwl1OCByc3ZkWzddOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gaW5mb1tQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5dOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8KJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YQomIzQzOyAqCiYjNDM7ICogRlcgcG9wdWxhdGVzIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIHBvaW50ZWQgdG8gYnkgQGRhdGFfcGEKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwlfX2xlMTYgZGF0YV9sZW47CiYjNDM7CXU4IHJzdmRbNF07CiYjNDM7CV9fbGU2NCBkYXRhX3BhOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlCiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IHJzdmRbMl07CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAtIEZJTkFMSVpFX1VQREFURSBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURQomIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKgomIzQzOyAqIERyaXZlciBzZW5kcyBhdCB0aGUgZW5kIG9mIHVwZGF0aW5nIGFsbCBjb21wb25lbnRzIHRvIGZpbmFsaXplIHRoZSB1cGRhdGUKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIC0gRklOQUxJWkVfVVBEQVRFIGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlCiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IHJzdmRbMl07CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kIC0gTUFUQ0hfUkVDT1JEX0RFU0MgY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQwomIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHR5cGU6IFBMRE0gRGVzY3JpcHRvciBJZGVudGlmaWVyIFR5cGUKJiM0MzsgKiBAc2l6ZTogTGVuZ3RoIG9mIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVmFsdWUKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICoKJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgdGhlIERlc2NyaXB0b3IgSWRlbnRpZmllciBEYXRhIGluIGNtZF9yZWdzLSZndDtkYXRhLiBEcml2ZXIKJiM0MzsgKiBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQgd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoaXMKJiM0MzsgKiBjb21tYW5kLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJX19sZTE2IHR5cGU7CiYjNDM7CV9fbGUxNiBzaXplOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQG1hdGNoOiBXaGV0aGVyIG9yIG5vdCB0aGUgUmVjb3JkIERlc2NyaXB0b3IgbWF0Y2hlcyB0aGUgZGV2aWNlCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqCiYjNDM7ICogV2hlbiBzdGF0dXMgaXMgUERTX1JDX1NVQ0NFU1MsIHRoZW4gQG1hdGNoIGlzIHZhbGlkLCBvdGhlcndpc2UgaXQmIzM5O3MKJiM0MzsgKiB1bmRlZmluZWQuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgewomIzQzOwl1OCBzdGF0dXM7CiYjNDM7CXU4IHZlcjsKJiM0MzsJdTggbWF0Y2g7CiYjNDM7CXU4IHJzdmQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIgLSBIT1NUX01FTSBzdWItb3BlcmF0aW9ucwomIzQzOyAqIEBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ6IFF1ZXJ5IG51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHMKJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk6ICAgICBRdWVyeSBkZXRhaWxzIG9mIGEgbWVtb3J5IHJlcXVlc3QKJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fQUREOiAgICAgICBQcm92aWRlIGFsbG9jYXRlZCBtZW1vcnkgdG8gZmlybXdhcmUKJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fREVMOiAgICAgICBOb3RpZnkgZmlybXdhcmUgb2YgbWVtb3J5IGRlYWxsb2NhdGlvbgomIzQzOyAqLwomIzQzO2VudW0gcGRzX2NvcmVfaG9zdF9tZW1fb3BlciB7CiYjNDM7CVBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVAk9IDAsCiYjNDM7CVBEU19DT1JFX0hPU1RfTUVNX1FVRVJZCQk9IDEsCiYjNDM7CVBEU19DT1JFX0hPU1RfTUVNX0FERAkJPSAyLAomIzQzOwlQRFNfQ09SRV9IT1NUX01FTV9ERUwJCT0gMywKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgLSBIT1NUX01FTSBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU0KJiM0MzsgKiBAb3BlcjogICAgICAgT3BlcmF0aW9uIChlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIpCiYjNDM7ICogQGluZGV4OiAgICAgIE1lbW9yeSByZXF1ZXN0IGluZGV4IChHRVRfQ09VTlQ6IG1heF9jb3VudCwgUVVFUlk6IGluZGV4KQomIzQzOyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpCiYjNDM7ICogQHJlYXNvbjogICAgIFJlYXNvbiBmb3IgZGVsZXRpb24gKERFTCBvbmx5KQomIzQzOyAqIEByc3ZkOiAgICAgICBSZXNlcnZlZAomIzQzOyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KQomIzQzOyAqIEBzaXplOiAgICAgICBTaXplIG9mIG1lbW9yeSBpbiBieXRlcyAoQUREIG9ubHkpCiYjNDM7ICogQGJ1Zl9wYTogICAgIERNQSBhZGRyZXNzIG9mIG1lbW9yeSAoQUREIG9ubHkpCiYjNDM7ICoKJiM0MzsgKiBVbmlmaWVkIGNvbW1hbmQgZm9yIGFsbCBob3N0IG1lbW9yeSBvcGVyYXRpb25zLiBGaWVsZHMgYXJlIHJldXNlZAomIzQzOyAqIGFjcm9zcyBvcGVyYXRpb25zIHRvIG1pbmltaXplIG9wY29kZSBzcGFjZSB1c2FnZS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIHsKJiM0MzsJdTggICAgIG9wY29kZTsKJiM0MzsJdTggICAgIG9wZXI7CiYjNDM7CV9fbGUxNiBpbmRleDsKJiM0MzsJX19sZTE2IHRhZzsKJiM0MzsJdTggICAgIHJlYXNvbjsKJiM0MzsJdTggICAgIHJzdmQ7CiYjNDM7CV9fbGUzMiBtYXhfY29udGlnOwomIzQzOwlfX2xlMzIgc2l6ZTsKJiM0MzsJX19sZTY0IGJ1Zl9wYTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIC0gSE9TVF9NRU0gY29tcGxldGlvbgomIzQzOyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSkKJiM0MzsgKiBAb3BlcjogICAgICAgICBPcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkCiYjNDM7ICogQGNvdW50OiAgICAgICAgTnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0cyAoR0VUX0NPVU5UKQomIzQzOyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKQomIzQzOyAqIEB0YWc6ICAgICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoUVVFUlkvREVMKQomIzQzOyAqIEByc3ZkOiAgICAgICAgIFJlc2VydmVkCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgewomIzQzOwl1OCAgICAgc3RhdHVzOwomIzQzOwl1OCAgICAgb3BlcjsKJiM0MzsJX19sZTE2IGNvdW50OwomIzQzOwlfX2xlMzIgc2l6ZTsKJiM0MzsJX19sZTE2IHRhZzsKJiM0MzsJdTggICAgIHJzdmRbNl07CiYjNDM7fTsKJiM0MzsKIC8qCiAgKiB1bmlvbiBwZHNfY29yZV9kZXZfY21kIC0gT3ZlcmxheSBvZiBjb3JlIGRldmljZSBjb21tYW5kIHN0cnVjdHVyZXMKICAqLwpAQCAtNDYyLDYgJiM0Mzs5MTUsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCB7CiAJc3RydWN0IHBkc19jb3JlX3ZmX3NldGF0dHJfY21kICAgdmZfc2V0YXR0cjsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jbWQgICB2Zl9nZXRhdHRyOwogCXN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NtZCAgICAgIHZmX2N0cmw7CiYjNDM7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIGdldF9jb21wb25lbnRfaW5mbzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kICAgICAgc2VuZF9wa2dfZGF0YTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgc2VuZF9jb21wb25lbnRfdGJsOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY21kICAgICBzZW5kX2NvbXBvbmVudDsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgICAgZmluYWxpemVfdXBkYXRlOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kICBtYXRjaF9yZWNvcmRfZGVzYzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCAgICAgICAgICAgaG9zdF9tZW07CiB9OwogCiAvKgpAQCAtNDgwLDYgJiM0Mzs5NDEsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgewogCXN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NvbXAgICB2Zl9zZXRhdHRyOwogCXN0cnVjdCBwZHNfY29yZV92Zl9nZXRhdHRyX2NvbXAgICB2Zl9nZXRhdHRyOwogCXN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NvbXAgICAgICB2Zl9jdHJsOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgZ2V0X2NvbXBvbmVudF9pbmZvOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wICAgICAgc2VuZF9wa2dfZGF0YTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHNlbmRfY29tcG9uZW50X3RibDsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgICAgIHNlbmRfY29tcG9uZW50OwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgICAgZmluYWxpemVfdXBkYXRlOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAgbWF0Y2hfcmVjb3JkX2Rlc2M7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wICAgICAgICAgICBob3N0X21lbTsKIH07CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA2MQoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFF1aWNrIERlY2lzaW9uKioKCk9rYXksIHNvIEkgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIHRoZSBgcGRzX2NvcmVgIGRyaXZlciwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSBzcGVjaWZpYyBjb25kaXRpb24gaW4gbXkgZXZhbHVhdGlvbiBwcm9jZXNzLiBJIHJlbWVtYmVyIHRoZSBwcm9tcHQ7IGl0IGV4cGxpY2l0bHkgY2FsbHMgb3V0IGBwZHNfY29yZWAgYXMgYW4gZXhhbXBsZSBvZiB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBmb3IgUENJZSBkZXZpY2VzLCBTbWFydE5JQ3Mgc3BlY2lmaWNhbGx5LCB0aGF0IGNhbiYjMzk7dCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBwYXRjaCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLCBidXQgSSBjYW4gc2VlIHJpZ2h0IGF3YXkgaXQgaXMgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvYC4gVGhlIHBhdGNoIGFkZHMgUExETSBmaXJtd2FyZSB1cGRhdGUgc3VwcG9ydCBhbmQgaG9zdCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIGZpcm13YXJlLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBtYXR0ZXIgaGVyZS4KClRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGRyaXZlciBpdHNlbGYuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgZmlsZSBwYXRoIGlzIGNvcnJlY3QgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvYCkgYW5kIGl0IGlzIGluZGVlZCBhIGRldmljZSBkcml2ZXIgZm9yIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZXMgYW5kIHVzZXMgUENJLiBUaGUgcHJvbXB0IGlzIHZlcnkgY2xlYXI6ICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBBbmQsIHRoZSBwcm9tcHQgKipleHBsaWNpdGx5KiogdXNlcyBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUuCgpHaXZlbiB0aGlzIGRpcmVjdCBtYXRjaCwgYW5kIHRoZSBuZWVkIGZvciBQQ0kgaGFyZHdhcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTm8gbmVlZCBmb3IgYSBsZW5ndGh5IGFuYWx5c2lzIGhlcmUsIGJlY2F1c2UgaXQgaXMgZXhwbGljaXRseSBjYWxsZWQgb3V0LiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYSBkcml2ZXIgdGhhdCByZWxpZXMgb24gYSBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBmb3Igd2hpY2ggd2UgY2Fubm90IHRlc3QgaXRzIGNoYW5nZXMgYW5kLCB0aGVyZWZvcmUsIGl0JiMzOTtzIG5vdCBzdWl0YWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1enppbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZHNfY29yZSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGRzX2NvcmUgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDEzOjMwOjMzLjU4MTQ3OTIzM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NTU4MjA2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZHNfY29yZSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzozMDozMy41ODE0ODY4NDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTMwNjY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFkYWJhZmNiMmU5YjAzYjRlMDk2N2M5NDNlNTQzNGM1OWVkMmE3ZGZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTM6MzA6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxcbmluZGV4IDllOGExNmM0NDEwMjkuLjQ5NDg3YTM1YzE2MzIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxcbkBAIC0xMDIsNiArMTAyLDk1IEBAIGN1cnJlbnRseSBpbiB1c2UsIGFuZCB0aGF0IGJhbmsgd2lsbCB1c2VkIGZvciB0aGUgbmV4dCBib290OjpcXG4gICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgXFxcXFxcbiAgICAgICAgICAgICBmaWxlIHBlbnNhbmRvL2RzY19md18xLjYzLjAtMjIudGFyXFxuIFxcbitGaXJtd2FyZSBNYW5hZ2VtZW50IChQTERNKVxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rRmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIGNhbiBiZSB1cGRhdGVkIHVzaW5nIHRoZSBkZXZsaW5rIGZsYXNoIGNvbW1hbmRcXG4rd2l0aCBhIFBMRE0gZmlybXdhcmUgcGFja2FnZS4gVGhlIGVudGlyZSBwYWNrYWdlIGNhbiBiZSB1cGRhdGVkIGF0IG9uY2U6OlxcbitcXG4rICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgZmlsZSBmaXJtd2FyZS5wbGRtZndcXG4rXFxuK0luZGl2aWR1YWwgY29tcG9uZW50cyBjYW4gYWxzbyBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBuYW1lOjpcXG4rXFxuKyAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFxcXFxcXG4rICAgICAgICAgICAgZmlsZSBmaXJtd2FyZS5wbGRtZncgY29tcG9uZW50IGZ3LmNwbGRcXG4rXFxuK1Blci1jb21wb25lbnQgdXBkYXRlIHVzZXMgZHJpdmVyLWRlZmluZWQgY29tcG9uZW50IG5hbWVzIChmdywgZncuY3BsZCxcXG4rZXRjLikuIE5vdCBhbGwgY29tcG9uZW50cyBzdXBwb3J0IHBlci1jb21wb25lbnQgdXBkYXRlIC1cXG4rZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3RcXG4rYmUgdXBkYXRlZC5cXG4rXFxuK0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50XFxuK25hbWUgKGUuZy4sIGBgZndgYCBmb3IgYGBmdy5nb2xkYGApIHdpdGggYSBnb2xkZncgcGFja2FnZSBmaWxlIHdoZW4gdGhlXFxuK2RldmljZSBzdXBwb3J0cyBwZXItY29tcG9uZW50IHVwZGF0ZS4gVGhlIGBgLmdvbGRgYCBzdWZmaXggaW4gZGV2bGluayBpbmZvXFxuK291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuXFxuK1xcbitJbmZvIHZlcnNpb25zIChQTERNKVxcbis9PT09PT09PT09PT09PT09PT09PVxcbitcXG4rRmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIHJlcG9ydHMgY29tcG9uZW50IHZlcnNpb25zIHVzaW5nIGRyaXZlci1kZWZpbmVkXFxuK25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6XFxuK1xcbisuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGZvciBQTERNLWNhcGFibGUgZmlybXdhcmVcXG4rICAgOndpZHRoczogNSA1IDkwXFxuK1xcbisgICAqIC0gTmFtZVxcbisgICAgIC0gVHlwZVxcbisgICAgIC0gRGVzY3JpcHRpb25cXG4rICAgKiAtIGBgZndgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBNYWluIGZpcm13YXJlXFxuKyAgICogLSBgYGZ3LmdvbGRgYFxcbisgICAgIC0gc3RvcmVkXFxuKyAgICAgLSBHb2xkIChyZWNvdmVyeSkgZmlybXdhcmVcXG4rICAgKiAtIGBgZncuYm9vdGxvYWRlcmBgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIEJvb3QgbG9hZGVyXFxuKyAgICogLSBgYGZ3LmNwbGRgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBDUExEXFxuKyAgICogLSBgYGZ3LnNlY3VyZWBgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIFNlY3VyZSBib290IGZpcm13YXJlXFxuKyAgICogLSBgYGZ3LmZwZ2FgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBGUEdBIGNvbmZpZ3VyYXRpb25cXG4rICAgKiAtIGBgZncuc3VjYGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBmaXJtd2FyZVxcbisgICAqIC0gYGBmdy5zdWMuYm9vdGxvYWRlcmBgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIFN5c3RlbSBVbml0IENvbnRyb2xsZXIgYm9vdGxvYWRlclxcbisgICAqIC0gYGBmdy51Ym9vdGBgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIFUtQm9vdCBib290bG9hZGVyXFxuKyAgICogLSBgYGFzaWMuaWRgYFxcbisgICAgIC0gZml4ZWRcXG4rICAgICAtIFRoZSBBU0lDIHR5cGUgZm9yIHRoaXMgZGV2aWNlXFxuKyAgICogLSBgYGFzaWMucmV2YGBcXG4rICAgICAtIGZpeGVkXFxuKyAgICAgLSBUaGUgcmV2aXNpb24gb2YgdGhlIEFTSUMgZm9yIHRoaXMgZGV2aWNlXFxuK1xcbitFeGFtcGxlIG91dHB1dDo6XFxuK1xcbisgICQgZGV2bGluayBkZXYgaW5mbyBwY2kvMDAwMDowMDowNS4wXFxuKyAgcGNpLzAwMDA6MDA6MDUuMDpcXG4rICAgIGRyaXZlciBwZHNfY29yZVxcbisgICAgc2VyaWFsX251bWJlciBGTE0xODQyMDA3M1xcbisgICAgdmVyc2lvbnM6XFxuKyAgICAgICAgZml4ZWQ6XFxuKyAgICAgICAgICBhc2ljLmlkIDB4MFxcbisgICAgICAgICAgYXNpYy5yZXYgMHgwXFxuKyAgICAgICAgcnVubmluZzpcXG4rICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjNcXG4rICAgICAgICAgIGZ3IDEuMy4wXFxuKyAgICAgICAgICBmdy5jcGxkIDMuMThcXG4rICAgICAgICBzdG9yZWQ6XFxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXFxuKyAgICAgICAgICBmdy5nb2xkIDEuMi4wXFxuKyAgICAgICAgICBmdyAxLjMuMFxcbisgICAgICAgICAgZncuY3BsZCAzLjE4XFxuK1xcbiBIZWFsdGggUmVwb3J0ZXJzXFxuID09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcXG5pbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcXG5AQCAtMTcxLDYgKzE3MSw3IEBAIGNvbmZpZyBQRFNfQ09SRVxcbiBcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiBcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbiBcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4rXFx0c2VsZWN0IFBMRE1GV1xcbiBcXHRoZWxwXFxuIFxcdCAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciB0aGUgQU1EL1BlbnNhbmRvIENvcmUgZGV2aWNlIGZhbWlseSBvZlxcbiBcXHQgIGFkYXB0ZXJzLiAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBjYW4gYmVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmNcXG5pbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXFxuQEAgLTQ4OSw2ICs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxcbiBcXHRcXHRwZHNjX2RldmNtZF9yZXNldChwZHNjKTtcXG4gXFxuIFxcdHBjaV9jbGVhcl9tYXN0ZXIocGRzYy1cXHUwMDNlcGRldik7XFxuK1xcdGlmICghcGRzYy1cXHUwMDNlcGRldi1cXHUwMDNlaXNfdmlydGZuKSB7XFxuK1xcdFxcdHUxNiB2YWw7XFxuK1xcbitcXHRcXHQvKiBGbHVzaCBhbnkgaW4tZmxpZ2h0IERNQSBiZWZvcmUgZnJlZWluZyBidWZmZXJzLlxcbitcXHRcXHQgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3JcXG4rXFx0XFx0ICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy1cXHUwMDNlcGRldiwgUENJX1ZFTkRPUl9JRCwgXFx1MDAyNnZhbCk7XFxuK1xcdH1cXG4gXFxuIFxcdHBkc2NfY29yZV91bmluaXQocGRzYyk7XFxuIFxcbkBAIC00OTcsNiArNTA2LDggQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxcbiBcXHRcXHRwZHNjLVxcdTAwM2V2aWZ0eXBlX3N0YXR1cyA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuK1xcdHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7XFxuK1xcdHBkc2NfaG9zdF9tZW1fZnJlZShwZHNjKTtcXG4gXFx0cGRzY19kZXZfdW5pbml0KHBkc2MpO1xcbiBcXG4gXFx0c2V0X2JpdChQRFNDX1NfRldfREVBRCwgXFx1MDAyNnBkc2MtXFx1MDAzZXN0YXRlKTtcXG5AQCAtNTA2LDYgKzUxNyw4IEBAIGludCBwZHNjX3N0YXJ0KHN0cnVjdCBwZHNjICpwZHNjKVxcbiB7XFxuIFxcdHBkc19jb3JlX2ludHJfbWFzayhcXHUwMDI2cGRzYy1cXHUwMDNlaW50cl9jdHJsW3Bkc2MtXFx1MDAzZWFkbWlucWNxLmludHhdLFxcbiBcXHRcXHRcXHQgICBQRFNfQ09SRV9JTlRSX01BU0tfQ0xFQVIpO1xcbitcXHRwZHNjX2hvc3RfbWVtX2FkZChwZHNjKTtcXG4rXFx0cGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShwZHNjKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTU4Nyw2ICs2MDAsOCBAQCB2b2lkIHBkc2NfZndfdXAoc3RydWN0IHBkc2MgKnBkc2MpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0cGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUocGRzYyk7XFxuK1xcbiBcXHRlcnIgPSBwZHNjX3NldHVwKHBkc2MsIFBEU0NfU0VUVVBfUkVDT1ZFUlkpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9vdXQ7XFxuQEAgLTY3MCwzICs2ODUsMTYxIEBAIHZvaWQgcGRzY19oZWFsdGhfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gb3V0X3VubG9jazpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIH1cXG4rXFxuK3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuK1xcdFxcdC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU0sXFxuK1xcdFxcdC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fREVMLFxcbitcXHRcXHQuaG9zdF9tZW0udGFnID0gY3B1X3RvX2xlMTYodGFnKSxcXG4rXFx0XFx0Lmhvc3RfbWVtLnJlYXNvbiA9IHJlYXNvbixcXG4rXFx0fTtcXG4rXFxuK1xcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwiU2VuZGluZyBkZXZjbWQgZm9yIG1lbSBkZWwgdGFnICVkXFxcXG5cXFwiLCB0YWcpO1xcbitcXHRwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfaG9zdF9tZW1fYWRkX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgaW50IGluZGV4KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpobSA9IFxcdTAwMjZwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzW2luZGV4XTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcXG4rXFx0Y21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9RVUVSWTtcXG4rXFx0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpO1xcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcXFxcblxcXCIsIGluZGV4KTtcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBxdWVyeSBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyLCBjb21wLnN0YXR1cyk7XFxuK1xcdFxcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xcbitcXHR9XFxuK1xcdGhtLVxcdTAwM2VzaXplID0gbGUzMl90b19jcHUoY29tcC5ob3N0X21lbS5zaXplKTtcXG4rXFx0aG0tXFx1MDAzZXRhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTtcXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJtZW0gcXVlcnkgcmV0dXJuZWQgc2l6ZSAlZCB0YWcgJWRcXFxcblxcXCIsXFxuK1xcdFxcdGhtLVxcdTAwM2VzaXplLCBobS1cXHUwMDNldGFnKTtcXG4rXFxuK1xcdGlmICghaG0tXFx1MDAzZXNpemUgfHwgaG0tXFx1MDAzZXNpemUgXFx1MDAzZSBQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJpbnZhbGlkIHNpemUgJWQgZm9yIHRhZyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aG0tXFx1MDAzZXNpemUsIGhtLVxcdTAwM2V0YWcpO1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9kZWw7XFxuK1xcdH1cXG4rXFxuK1xcdGhtLVxcdTAwM2VvcmRlciA9IGdldF9vcmRlcihobS1cXHUwMDNlc2l6ZSk7XFxuK1xcdGhtLVxcdTAwM2VwZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOLCBobS1cXHUwMDNlb3JkZXIpO1xcbitcXHRpZiAoIWhtLVxcdTAwM2VwZykge1xcbitcXHRcXHRkZXZfd2FybihwZHNjLVxcdTAwM2VkZXYsIFxcXCJhbGxvYyBvcmRlciAlZCBmYWlsZWQgZm9yIHRhZyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGhtLVxcdTAwM2VvcmRlciwgaG0tXFx1MDAzZXRhZyk7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyX2RlbDtcXG4rXFx0fVxcbitcXG4rXFx0aG0tXFx1MDAzZXBhID0gZG1hX21hcF9wYWdlKHBkc2MtXFx1MDAzZWRldiwgaG0tXFx1MDAzZXBnLCAwLCBobS1cXHUwMDNlc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgRE1BX0JJRElSRUNUSU9OQUwpO1xcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cXHUwMDNlZGV2LCBobS1cXHUwMDNlcGEpKSB7XFxuK1xcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwiZG1hIG1hcCBmYWlsZWQgZm9yIHRhZyAlZCBzaXplICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRobS1cXHUwMDNldGFnLCBobS1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdF9fZnJlZV9wYWdlcyhobS1cXHUwMDNlcGcsIGhtLVxcdTAwM2VvcmRlcik7XFxuK1xcdFxcdGhtLVxcdTAwM2VwZyA9IE5VTEw7XFxuK1xcdFxcdGVyciA9IC1FSU87XFxuK1xcdFxcdGdvdG8gZXJyX2RlbDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVHJhY2sgdGhpcyBhbGxvY2F0aW9uIHNvIHBkc2NfaG9zdF9tZW1fZnJlZSgpIGNhbiBjbGVhbiBpdCB1cCAqL1xcbitcXHRwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxcysrO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZjbWQsIDAsIHNpemVvZihjbWQpKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZjb21wLCAwLCBzaXplb2YoY29tcCkpO1xcbitcXHRjbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNO1xcbitcXHRjbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0FERDtcXG4rXFx0Y21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLVxcdTAwM2V0YWcpO1xcbitcXHRjbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLVxcdTAwM2VzaXplKTtcXG4rXFx0Y21kLmhvc3RfbWVtLmJ1Zl9wYSA9IGNwdV90b19sZTY0KGhtLVxcdTAwM2VwYSk7XFxuK1xcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gYWRkIHRhZyAlZCBzaXplICVkIHBhICVwYWRcXFxcblxcXCIsXFxuK1xcdFxcdGhtLVxcdTAwM2V0YWcsIGhtLVxcdTAwM2VzaXplLCBcXHUwMDI2aG0tXFx1MDAzZXBhKTtcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBhZGQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWQgZm9yIHRhZyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyLCBjb21wLnN0YXR1cywgaG0tXFx1MDAzZXRhZyk7XFxuK1xcdFxcdGVyciA9IGVyciA/IGVyciA6IC1FSU87XFxuK1xcdFxcdGdvdG8gZXJyX2RlbDtcXG4rXFx0fVxcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBhZGQgY29tcGxldGVkIGZvciB0YWcgJWRcXFxcblxcXCIsIGhtLVxcdTAwM2V0YWcpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZGVsOlxcbitcXHQvKiBBZnRlciBNRU1fUVVFUlkgc3VjY2VlZHMsIGZpcm13YXJlIGV4cGVjdHMgTUVNX0FERCBvciBNRU1fREVMICovXFxuK1xcdHBkc2NfaG9zdF9tZW1fZGVsX29uZShwZHNjLCBobS1cXHUwMDNldGFnLCBQRFNfUkNfRU5PTUVNKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XFxuK1xcdHUxNiBjb3VudDtcXG4rXFx0aW50IGVycjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIShwZHNjLVxcdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFxcdTAwMjZcXG4rXFx0ICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGNtZC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU07XFxuK1xcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UO1xcbitcXHRjbWQuaG9zdF9tZW0uaW5kZXggPSBjcHVfdG9fbGUxNihQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7XFxuK1xcdGNtZC5ob3N0X21lbS5tYXhfY29udGlnID0gY3B1X3RvX2xlMzIoUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTtcXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XFxcXG5cXFwiLFxcbitcXHRcXHRQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpO1xcbitcXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbitcXHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XFxuK1xcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwibWVtIGdldCBjb3VudCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyLCBjb21wLnN0YXR1cyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Y291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksXFxuK1xcdFxcdCAgICBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7XFxuK1xcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwibWVtIGdldCBjb3VudCByZXR1cm5lZCBjb3VudCAlZFxcXFxuXFxcIiwgY291bnQpO1xcbitcXHRpZiAoY291bnQgPT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcywgY291bnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gYWxsb2MgaG9zdF9tZW1fcmVxcyBhcnJheVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0ZXJyID0gcGRzY19ob3N0X21lbV9hZGRfb25lKHBkc2MsIGkpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbit2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZW51bV9ob3N0X21lbV9yZXFzOyBpKyspIHtcXG4rXFx0XFx0ZG1hX3VubWFwX3BhZ2UocGRzYy1cXHUwMDNlZGV2LCBwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzW2ldLnBhLFxcbitcXHRcXHRcXHQgICAgICAgcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5zaXplLFxcbitcXHRcXHRcXHQgICAgICAgRE1BX0JJRElSRUNUSU9OQUwpO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5wZyxcXG4rXFx0XFx0XFx0ICAgICBwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzW2ldLm9yZGVyKTtcXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUocGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcyk7XFxuK1xcdHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMgPSBOVUxMO1xcbitcXHRwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxcyA9IDA7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcXG5pbmRleCBiN2ZlOWFkNzMzNDk4Li43OTE3NTZhNTA4NzBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXFxuQEAgLTUsNiArNSw3IEBAXFxuICNkZWZpbmUgX1BEU0NfSF9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXpvbmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kZXZsaW5rLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGRzL3Bkc19jb21tb24uaFxcdTAwM2VcXG5AQCAtMjMsNiArMjQsMjAgQEBcXG4gI2RlZmluZSBQRFNDX1NFVFVQX1JFQ09WRVJZXFx0ZmFsc2VcXG4gI2RlZmluZSBQRFNDX1NFVFVQX0lOSVRcXHRcXHR0cnVlXFxuIFxcbisvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIE1BWF9QQUdFX09SREVSIHRvIGF2b2lkXFxuKyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3NcXG4rICovXFxuKyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHICg0ICogMTAyNCAqIDEwMjQpXFxuKyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NlxcbitcXG4rc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHR2b2lkICp2YTtcXG4rXFx0c2l6ZV90IHNpemU7XFxuK1xcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjtcXG4rfTtcXG4rXFxuIHN0cnVjdCBwZHNjX2Rldl9iYXIge1xcbiBcXHR2b2lkIF9faW9tZW0gKnZhZGRyO1xcbiBcXHRwaHlzX2FkZHJfdCBidXNfYWRkcjtcXG5AQCAtMTQxLDYgKzE1NiwxNCBAQCBzdHJ1Y3QgcGRzY192aWZ0eXBlIHtcXG4gXFx0c3RydWN0IHBkc19hdXhpbGlhcnlfZGV2ICpwYWRldjtcXG4gfTtcXG4gXFxuK3N0cnVjdCBwZHNjX2hvc3RfbWVtIHtcXG4rXFx0dTMyIHNpemU7XFxuK1xcdHUxNiB0YWc7XFxuK1xcdHU4IG9yZGVyO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGc7XFxuK1xcdGRtYV9hZGRyX3QgcGE7XFxuK307XFxuK1xcbiAvKiBObyBzdGF0ZSBmbGFncyBzZXQgbWVhbnMgd2UgYXJlIGluIGEgc3RlYWR5IHJ1bm5pbmcgc3RhdGUgKi9cXG4gZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHtcXG4gXFx0UERTQ19TX0ZXX0RFQUQsXFx0XFx0ICAgIC8qIHN0b3BwZWQsIHdhaXQgb24gc3RhcnR1cCBvciByZWNvdmVyeSAqL1xcbkBAIC0xODUsNiArMjA4LDggQEAgc3RydWN0IHBkc2Mge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggZGV2Y21kX2xvY2s7XFx0LyogbG9jayBmb3IgZGV2X2NtZCBvcGVyYXRpb25zICovXFxuIFxcdHN0cnVjdCBtdXRleCBjb25maWdfbG9jaztcXHQvKiBsb2NrIGZvciBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgKi9cXG4gXFx0c3BpbmxvY2tfdCBhZG1pbnFfbG9jaztcXHRcXHQvKiBsb2NrIGZvciBhZG1pbnEgb3BlcmF0aW9ucyAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2RtYV9saXN0O1xcbitcXHRzcGlubG9ja190IGRlZmVycmVkX2RtYV9sb2NrO1xcdC8qIGxvY2sgZm9yIGRlZmVycmVkIERNQSBsaXN0ICovXFxuIFxcdHJlZmNvdW50X3QgYWRtaW5xX3JlZmNudDtcXG4gXFx0c3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfZGV2X2NtZF9yZWdzIF9faW9tZW0gKmNtZF9yZWdzO1xcbkBAIC0xOTksNiArMjI0LDExIEBAIHN0cnVjdCBwZHNjIHtcXG4gXFx0dTY0IGxhc3RfZWlkO1xcbiBcXHRzdHJ1Y3QgcGRzY192aWZ0eXBlICp2aWZ0eXBlX3N0YXR1cztcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHBjaV9yZXNldF93b3JrO1xcbitcXG4rXFx0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7XFxuK1xcdHUxNiBudW1faG9zdF9tZW1fcmVxcztcXG4rXFxuK1xcdHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIGZ3X2NvbXBvbmVudHM7XFxuIH07XFxuIFxcbiAvKiogZW51bSBwZHNfY29yZV9kYmVsbF9iaXRzIC0gYml0d2lzZSBjb21wb3NpdGlvbiBvZiBkYmVsbCB2YWx1ZXMuXFxuQEAgLTI3NSwxNCArMzA1LDI0IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF92aWZ0eXBlKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX2lycXMoc3RydWN0IHBkc2MgKnBkc2MpO1xcbiB2b2lkIHBkc2NfZGVidWdmc19hZGRfcWNxKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XFxuIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpO1xcbit2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpO1xcbit2b2lkIHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpO1xcbiBcXG4gaW50IHBkc2NfZXJyX3RvX2Vycm5vKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUgY29kZSk7XFxuIGJvb2wgcGRzY19pc19md19ydW5uaW5nKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpO1xcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4gXFx0XFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcXG4gaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbiBcXHRcXHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuK2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcXG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpO1xcbiBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpO1xcbiBpbnQgcGRzY19kZXZfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuQEAgLTMxNSwxMSArMzU1LDIzIEBAIHZvaWQgcGRzY19wcm9jZXNzX2FkbWlucShzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7XFxuIHZvaWQgcGRzY193b3JrX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7XFxuIFxcbi1pbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuK2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4gXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuK2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuK2NvbnN0IGNoYXIgKnBkc2NfZndfdHlwZV90b19uYW1lKHU4IHR5cGUpO1xcbit2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gXFxuIHZvaWQgcGRzY19md19kb3duKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gdm9pZCBwZHNjX3BjaV9yZXNldF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gXFxuK3ZvaWQgcGRzY19ob3N0X21lbV9hZGQoc3RydWN0IHBkc2MgKnBkc2MpO1xcbit2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuK1xcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcXG4rXFx0XFx0XFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpO1xcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpO1xcbitcXG4gI2VuZGlmIC8qIF9QRFNDX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXFxuaW5kZXggODEwYTBjZDliY2FjOC4uZWYwYTFiN2QxNTliNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xcbkBAIC0xNzgsMyArMTc4LDQ4IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpXFxuIFxcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShxY3EtXFx1MDAzZWRlbnRyeSk7XFxuIFxcdHFjcS1cXHUwMDNlZGVudHJ5ID0gTlVMTDtcXG4gfVxcbitcXG4rc3RhdGljIGludCBob3N0X21lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG07XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzIHx8IHBkc2MtXFx1MDAzZW51bV9ob3N0X21lbV9yZXFzID09IDApIHtcXG4rXFx0XFx0c2VxX3B1dHMoc2VxLCBcXFwiTm8gaG9zdCBtZW1vcnkgYWxsb2NhdGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNlcV9wcmludGYoc2VxLCBcXFwiSG9zdCBtZW1vcnkgcmVxdWVzdHM6ICV1XFxcXG5cXFxcblxcXCIsXFxuK1xcdFxcdCAgIHBkc2MtXFx1MDAzZW51bV9ob3N0X21lbV9yZXFzKTtcXG4rXFx0c2VxX3B1dHMoc2VxLCBcXFwiVGFnICAgIFNpemUgICAgICAgICBPcmRlciAgUEFcXFxcblxcXCIpO1xcbitcXHRzZXFfcHV0cyhzZXEsIFxcXCItLS0gICAgLS0tLSAgICAgICAgIC0tLS0tICAtLVxcXFxuXFxcIik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGRzYy1cXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXM7IGkrKykge1xcbitcXHRcXHRobSA9IFxcdTAwMjZwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzW2ldO1xcbitcXG4rXFx0XFx0aWYgKCFobS1cXHUwMDNlcGcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIlLTZ1ICUtMTJ1ICUtNnUgJXBhZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgaG0tXFx1MDAzZXRhZywgaG0tXFx1MDAzZXNpemUsIGhtLVxcdTAwM2VvcmRlciwgXFx1MDAyNmhtLVxcdTAwM2VwYSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0RFRklORV9TSE9XX0FUVFJJQlVURShob3N0X21lbSk7XFxuK1xcbit2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0aWYgKCEocGRzYy1cXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcXHUwMDI2XFxuK1xcdCAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJob3N0X21lbVxcXCIsIDA0MDAsIHBkc2MtXFx1MDAzZWRlbnRyeSxcXG4rXFx0XFx0XFx0ICAgIHBkc2MsIFxcdTAwMjZob3N0X21lbV9mb3BzKTtcXG4rfVxcbitcXG4rdm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdGRlYnVnZnNfbG9va3VwX2FuZF9yZW1vdmUoXFxcImhvc3RfbWVtXFxcIiwgcGRzYy1cXHUwMDNlZGVudHJ5KTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcXG5pbmRleCBiZGVkNmIzMzI4OWNlLi5jNTA3NzgxNzVlMmYzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xcbkBAIC0xMjYsNyArMTI2LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBkc2NfZGV2Y21kX3N0cihpbnQgb3Bjb2RlKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXFxuK3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcyxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgYm9vbCBkb19tc2cpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gcGRzYy1cXHUwMDNlZGV2O1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7XFxuQEAgLTE3OSw3ICsxODAsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxcbiBcXG4gXFx0c3RhdHVzID0gcGRzY19kZXZjbWRfc3RhdHVzKHBkc2MpO1xcbiBcXHRlcnIgPSBwZHNjX2Vycl90b19lcnJubyhzdGF0dXMpO1xcbi1cXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRUFHQUlOKVxcbitcXHRpZiAoZG9fbXNnIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVBR0FJTilcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJERVZDTUQgJWQgJXMgZmFpbGVkLCBzdGF0dXM9JWQgZXJyICVkICVwZVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0b3Bjb2RlLCBwZHNjX2RldmNtZF9zdHIob3Bjb2RlKSwgc3RhdHVzLCBlcnIsXFxuIFxcdFxcdFxcdEVSUl9QVFIoZXJyKSk7XFxuQEAgLTE4Nyw4ICsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuLVxcdFxcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IGJvb2wgZG9fbXNnKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbkBAIC0xOTcsMTYgKzE5OSw2MyBAQCBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuIFxcbiBcXHRtZW1jcHlfdG9pbyhcXHUwMDI2cGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWNtZCwgY21kLCBzaXplb2YoKmNtZCkpO1xcbiBcXHRwZHNjX2RldmNtZF9kYmVsbChwZHNjKTtcXG4tXFx0ZXJyID0gcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtXFx1MDAzZW9wY29kZSwgbWF4X3NlY29uZHMpO1xcbitcXHRlcnIgPSBfX3Bkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLVxcdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzLCBkb19tc2cpO1xcbiBcXG4gXFx0aWYgKChlcnIgPT0gLUVOWElPIHx8IGVyciA9PSAtRVRJTUVET1VUKSBcXHUwMDI2XFx1MDAyNiBwZHNjLVxcdTAwM2V3cSlcXG4gXFx0XFx0cXVldWVfd29yayhwZHNjLVxcdTAwM2V3cSwgXFx1MDAyNnBkc2MtXFx1MDAzZWhlYWx0aF93b3JrKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRtZW1jcHlfZnJvbWlvKGNvbXAsIFxcdTAwMjZwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlY29tcCwgc2l6ZW9mKCpjb21wKSk7XFxuIFxcbitcXHRpZiAoZXJyICE9IC1FVElNRURPVVQgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FQUdBSU4pXFxuK1xcdFxcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XFxuK1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcXG4rXFx0XFx0XFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxcbitcXHRcXHRcXHQgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpXFxuK3tcXG4rXFx0ZW50cnktXFx1MDAzZWRtYV9hZGRyID0gZG1hX2FkZHI7XFxuK1xcdGVudHJ5LVxcdTAwM2V2YSA9IHZhO1xcbitcXHRlbnRyeS1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdGVudHJ5LVxcdTAwM2VkaXIgPSBkaXI7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZW50cnktXFx1MDAzZWxpc3QsIFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuK31cXG4rXFxuK3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wO1xcbitcXHRMSVNUX0hFQUQobG9jYWxfbGlzdCk7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcXG4rXFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2cGRzYy1cXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QsIFxcdTAwMjZsb2NhbF9saXN0KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCBcXHUwMDI2bG9jYWxfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKHBkc2MtXFx1MDAzZWRldiwgZW50cnktXFx1MDAzZWRtYV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgZW50cnktXFx1MDAzZXNpemUsIGVudHJ5LVxcdTAwM2VkaXIpO1xcbitcXHRcXHRrZnJlZShlbnRyeS1cXHUwMDNldmEpO1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2ZW50cnktXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRrZnJlZShlbnRyeSk7XFxuK1xcdH1cXG4rfVxcbitcXG4raW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbitcXHRcXHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4re1xcbitcXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XFxuK31cXG4rXFxuK2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxcbit7XFxuK1xcdHJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCBmYWxzZSk7XFxuK31cXG4rXFxuIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbiBcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxcbiB7XFxuQEAgLTIxOSw2ICsyNjgsNDcgQEAgaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdFxcdCAgIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCxcXG4rXFx0XFx0XFx0XFx0ICAgaW50IG1heF9zZWNvbmRzLCBib29sIGRvX21zZylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGRzYy1cXHUwMDNlZGV2Y21kX2xvY2spO1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZWNtZF9yZWdzKSB7XFxuK1xcdFxcdGVyciA9IC1FTlhJTztcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFx0aWYgKGRhdGFfbGVuIFxcdTAwM2Ugc2l6ZW9mKHBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhKSkge1xcbitcXHRcXHRlcnIgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXHRtZW1jcHlfdG9pbyhcXHUwMDI2cGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWRhdGEsIGRhdGEsIGRhdGFfbGVuKTtcXG4rXFx0ZXJyID0gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRldmNtZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4re1xcbitcXHRyZXR1cm4gX19wZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgY21kLCBkYXRhLCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTtcXG4rfVxcbitcXG4raW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbitcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xcbit9XFxuK1xcbiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4ge1xcbiBcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuQEAgLTI0MiwxNSArMzMyLDE3IEBAIGludCBwZHNjX2RldmNtZF9yZXNldChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4gXFx0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjKVxcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgZG9fbXNnKVxcbiB7XFxuIFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4gXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuIFxcdFxcdC5pZGVudGlmeS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSURFTlRJRlksXFxuLVxcdFxcdC5pZGVudGlmeS52ZXIgPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEsXFxuK1xcdFxcdC5pZGVudGlmeS52ZXIgPSBkcnZfaWRlbnRfdmVyLFxcbiBcXHR9O1xcbiBcXG4tXFx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbitcXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0LFxcbitcXHRcXHRcXHRcXHQgICAgZG9fbXNnKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXFxuQEAgLTI3Myw4ICszNjUsOSBAQCBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcXG4gXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJmd192ZXJzaW9uICVzXFxcXG5cXFwiLCBwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxcbitzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnlfdmVyKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyKVxcbiB7XFxuK1xcdGJvb2wgZG9fbXNnID0gZHJ2X2lkZW50X3ZlciA9PSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzE7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307XFxuIFxcdHNpemVfdCBzejtcXG4gXFx0aW50IGVycjtcXG5AQCAtMjk3LDE5ICszOTAsMjIgQEAgc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxcbiBcXHRzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKGRydiksIHNpemVvZihwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSkpO1xcbiBcXHRtZW1jcHlfdG9pbyhcXHUwMDI2cGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWRhdGEsIFxcdTAwMjZkcnYsIHN6KTtcXG4gXFxuLVxcdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTtcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHBkc2MsIGRydl9pZGVudF92ZXIsIGRvX21zZyk7XFxuIFxcdGlmICghZXJyKSB7XFxuIFxcdFxcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YocGRzYy1cXHUwMDNlZGV2X2lkZW50KSxcXG4gXFx0XFx0XFx0ICAgc2l6ZW9mKHBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhKSk7XFxuIFxcdFxcdG1lbWNweV9mcm9taW8oXFx1MDAyNnBkc2MtXFx1MDAzZWRldl9pZGVudCwgXFx1MDAyNnBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhLCBzeik7XFxuK1xcbitcXHRcXHQvKiBWMSBmaXJtd2FyZSBkb2Vzbid0IHNldCBjYXBhYmlsaXRpZXMsIHNvIHRoZSBmaWVsZCBtYXlcXG4rXFx0XFx0ICogY29udGFpbiBnYXJiYWdlIGZyb20gdGhlIG91dGdvaW5nIGRyaXZlciBpZGVudGl0eS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChwZHNjLVxcdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcXHUwMDNjIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMilcXG4rXFx0XFx0XFx0cGRzYy1cXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7XFxuIFxcdH1cXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZXZjbWRfbG9jayk7XFxuIFxcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRFUlJfUFRSKGVycikpO1xcbitcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuIFxcbiBcXHRpZiAoaXNwcmludChwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgaXNhc2NpaShwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSlcXG5AQCAtMzI2LDYgKzQyMiwyNiBAQCBzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdC8qIE9sZGVyIGZpcm13YXJlIHJlamVjdHMgYW55dGhpbmcgYnV0IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxcbitcXHQgKiB3aXRoIFBEU19SQ19FVkVSU0lPTiAoLUVJTlZBTCksIHNvIHJldHJ5IHdpdGggVjEgb24gdmVyc2lvblxcbitcXHQgKiByZWplY3Rpb24uIERvbid0IHJldHJ5IG9uIG90aGVyIGVycm9ycyBsaWtlIC1FTlhJTy8tRVRJTUVET1VUXFxuK1xcdCAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpO1xcbitcXHRpZiAoZXJyID09IC1FSU5WQUwpXFxuK1xcdFxcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSk7XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIkNhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIHZvaWQgcGRzY19kZXZfdW5pbml0KHN0cnVjdCBwZHNjICpwZHNjKVxcbiB7XFxuIFxcdGlmIChwZHNjLVxcdTAwM2VpbnRyX2luZm8pIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcXG5pbmRleCA4YWRhZTdiMTg4OThkLi42M2ZlNDVlOTFmNzEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jXFxuQEAgLTkwLDEzICs5MCwxMTIgQEAgaW50IHBkc2NfZGxfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCxcXG4ge1xcbiBcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XFxuIFxcbi1cXHRpZiAocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4tXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4tXFx0XFx0XFx0XFx0ICAgXFxcIkNvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdHJldHVybiBwZHNjX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8pXFxuK3tcXG4rXFx0ZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlO1xcbitcXHR1MTYgZmxhZ3MgPSBsZTE2X3RvX2NwdShpbmZvLVxcdTAwM2VmbGFncyk7XFxuK1xcdGNoYXIgKnZlciA9IGluZm8tXFx1MDAzZXZlcnNpb247XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdGNoYXIgYnVmWzMyXTtcXG4rXFxuK1xcdC8qIE1haW4gZmlybXdhcmUgaXMgcmVwb3J0ZWQgYXMgZ2VuZXJpYyBcXFwiZndcXFwiICovXFxuK1xcdGlmIChpbmZvLVxcdTAwM2Vjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiZncuZ29sZFxcXCIpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCJmd1xcXCIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRuYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoaW5mby1cXHUwMDNlY29tcG9uZW50X3R5cGUpO1xcbitcXHRcXHRpZiAoIW5hbWUpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiZncuJXMuZ29sZFxcXCIsIG5hbWUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCJmdy4lc1xcXCIsIG5hbWUpO1xcbitcXHR9XFxuK1xcbitcXHR2ZXJfdHlwZSA9IERFVkxJTktfSU5GT19WRVJTSU9OX1RZUEVfTk9ORTtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSlcXG4rXFx0XFx0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX0NPTVBPTkVOVDtcXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQpIHtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsIGJ1ZiwgdmVyKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HKSB7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHZlciwgdmVyX3R5cGUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLVxcdTAwM2VmdywgZXh0YWNrKTtcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQKSB7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0X2V4dChyZXEsIGJ1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB2ZXIsIHZlcl90eXBlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfZndfdmVyKHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsIGNoYXIgKmZ3X3ZlcilcXG4re1xcbitcXHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRmd192ZXIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcXG4rXFx0dTggbnVtX2NvbXBvbmVudHM7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuXFxuK1xcdCAqIFVzZSBSRUFEX09OQ0UgdG8gZ2V0IGEgY29uc2lzdGVudCBzbmFwc2hvdCBvZiBudW1fY29tcG9uZW50cy5cXG4rXFx0ICogcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoKSBjYW4gemVybyBpdCBjb25jdXJyZW50bHkgZHVyaW5nXFxuK1xcdCAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm9cXG4rXFx0ICogdGltZXMgd2hlbiB3ZSBhbHJlYWR5IGRlY2lkZWQgdGhlIGNhY2hlIHdhcyB2YWxpZC5cXG4rXFx0ICovXFxuK1xcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpO1xcbitcXHRpZiAoIW51bV9jb21wb25lbnRzKSB7XFxuK1xcdFxcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBkc2MtXFx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xcbitcXHRcXHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKTtcXG4rXFx0XFx0aWYgKCFudW1fY29tcG9uZW50cylcXG4rXFx0XFx0XFx0cmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcXG4rXFx0fVxcbitcXG4rXFx0bnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLFxcbitcXHRcXHRcXHQgICAgICAgbGUxNl90b19jcHUocGRzYy1cXHUwMDNlZGV2X2lkZW50Lm1heF9md19zbG90cykpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRlcnIgPSBwZHNjX2RsX3JlcG9ydF9jb21wb25lbnQocmVxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7XFxuQEAgLTEwNSw4ICsyMDQsOSBAQCBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7XFxuIFxcdFxcXCJmdy5tYWluZndiXFxcIixcXG4gfTtcXG4gXFxuLWludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4tXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3N0YXRpYyBpbnQgcGRzY19kbF9md19saXN0X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuIFxcdFxcdC5md19jb250cm9sLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GV19DT05UUk9MLFxcbkBAIC0xNDAsMTIgKzI0MCw0MSBAQCBpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kbF9pbmZvX2dldF92MShzdHJ1Y3QgZGV2bGluayAqZGwsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0LyogVmVyc2lvbiAxOiByZXBvcnQgZncgZnJvbSBkZXZfaW5mbyAocnVubmluZyBvbmx5KSAqL1xcbitcXHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSwgcGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XFxuK31cXG4rXFxuK2ludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4rXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xcbitcXHRjaGFyIGJ1ZlszMl07XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAocGRzYy1cXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKSB7XFxuK1xcdFxcdGVyciA9IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVyciA9IHBkc2NfZGxfaW5mb19nZXRfdjEoZGwsIHJlcSwgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIjB4JXhcXFwiLCBwZHNjLVxcdTAwM2VkZXZfaW5mby5hc2ljX3R5cGUpO1xcbiBcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuY1xcbmluZGV4IGZhNjI2NzE5ZTY4ZDEuLjVjY2YwMTdmNmFmNDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuY1xcbkBAIC0xLDYgKzEsOSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQoYykgMjAyMyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbGRtZncuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4rXFxuICNpbmNsdWRlIFxcXCJjb3JlLmhcXFwiXFxuIFxcbiAvKiBUaGUgd29yc3QgY2FzZSB3YWl0IGZvciB0aGUgaW5zdGFsbCBhY3Rpdml0eSBpcyBhYm91dCAyNSBtaW51dGVzIHdoZW5cXG5AQCAtMTQsNiArMTcsNTggQEBcXG4gLyogTnVtYmVyIG9mIHBlcmlvZGljIGxvZyB1cGRhdGVzIGR1cmluZyBmdyBmaWxlIGRvd25sb2FkICovXFxuICNkZWZpbmUgUERTQ19GV19JTlRFUlZBTF9GUkFDVElPTlxcdDMyXFxuIFxcbisjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWFxcdFxcdFxcXCJmdy5cXFwiXFxuKyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTiBcXFxcXFxuK1xcdChzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSArIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTilcXG4rXFxuKy8qIERyaXZlci1kZWZpbmVkIGNvbXBvbmVudCB0eXBlIHRvIG5hbWUgbWFwcGluZy5cXG4rICogUERTX0NPUkVfRldfVFlQRV9NQUlOIGlzIE5VTEwgLSBoYW5kbGVkIHNwZWNpYWxseSBhcyBcXFwiZndcXFwiIHdpdGhvdXQgcHJlZml4LlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZHNjX2Z3X3R5cGVfbmFtZXNbXSA9IHtcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfTUFJTl0gICAgICA9IE5VTEwsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX0JPT1RdICAgICAgPSBcXFwiYm9vdGxvYWRlclxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX0NQTERdICAgICAgPSBcXFwiY3BsZFxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRV0gICAgPSBcXFwic2VjdXJlXFxcIixcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfRlBHQV0gICAgICA9IFxcXCJmcGdhXFxcIixcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU5dICA9IFxcXCJzdWNcXFwiLFxcbitcXHRbUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVF0gID0gXFxcInN1Yy5ib290bG9hZGVyXFxcIixcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfVUJPT1RdICAgICA9IFxcXCJ1Ym9vdFxcXCIsXFxuK307XFxuK1xcbitjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKVxcbit7XFxuK1xcdGlmICh0eXBlIFxcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpIFxcdTAwMjZcXHUwMDI2IHBkc2NfZndfdHlwZV9uYW1lc1t0eXBlXSlcXG4rXFx0XFx0cmV0dXJuIHBkc2NfZndfdHlwZV9uYW1lc1t0eXBlXTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3ZvaWQgcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UgaW4gcGRzY19kbF9jb21wb25lbnRfaW5mb19nZXQoKSAqL1xcbitcXHRXUklURV9PTkNFKHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdTggcGRzY19uYW1lX3RvX2Z3X3R5cGUoY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRzaXplX3QgcHJlZml4X2xlbjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBcXFwiZndcXFwiIHdpdGhvdXQgc3VmZml4IG1hcHMgdG8gbWFpbiBmaXJtd2FyZSAqL1xcbitcXHRpZiAoIXN0cmNtcChuYW1lLCBcXFwiZndcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIFBEU19DT1JFX0ZXX1RZUEVfTUFJTjtcXG4rXFxuK1xcdHByZWZpeF9sZW4gPSBzdHJfaGFzX3ByZWZpeChuYW1lLCBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgpO1xcbitcXHRpZiAocHJlZml4X2xlbilcXG4rXFx0XFx0bmFtZSArPSBwcmVmaXhfbGVuO1xcbitcXG4rXFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocGRzY19md190eXBlX25hbWVzKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChwZHNjX2Z3X3R5cGVfbmFtZXNbaV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFzdHJjbXAobmFtZSwgcGRzY19md190eXBlX25hbWVzW2ldKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICB1MzIgb2Zmc2V0LCB1MzIgbGVuZ3RoKVxcbiB7XFxuQEAgLTIzLDcgKzc4LDcgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF9md19kb3dubG9hZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxcbiBcXHRcXHQuZndfZG93bmxvYWQuYWRkciA9IGNwdV90b19sZTY0KGFkZHIpLFxcbiBcXHRcXHQuZndfZG93bmxvYWQubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKSxcXG4gXFx0fTtcXG4tXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcDtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbiBcXG4gXFx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbiB9XFxuQEAgLTk1LDkgKzE1MCwxMiBAQCBzdGF0aWMgaW50IHBkc2NfZndfc3RhdHVzX2xvbmdfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbi1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbitzdGF0aWMgaW50XFxuK3Bkc2NfbGVnYWN5X2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gcGFyYW1zLVxcdTAwM2VmdztcXG4gXFx0dTMyIGJ1Zl9zeiwgY29weV9zeiwgb2Zmc2V0O1xcbiBcXHRzdHJ1Y3QgZGV2bGluayAqZGw7XFxuIFxcdGludCBuZXh0X2ludGVydmFsO1xcbkBAIC0xMDUsNiArMTYzLDEyIEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdGludCBmd19zbG90O1xcbiBcXG4rXFx0aWYgKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRkZXZfaW5mbyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJJbnN0YWxsaW5nIGZpcm13YXJlXFxcXG5cXFwiKTtcXG4gXFxuIFxcdGlmICghcGRzYy1cXHUwMDNlY21kX3JlZ3MpXFxuQEAgLTE5NSwzICsyNTksNzI5IEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgTlVMTCwgMCwgMCk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4rXFxuK3N0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2IHtcXG4rXFx0dTE2IGNvbXBvbmVudF9pZDtcXG4rXFx0Ym9vbCBza2lwO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7XFxuK307XFxuK1xcbitzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYge1xcbitcXHRzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7XFxuK1xcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcztcXG4rXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrO1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYztcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBjb21wb25lbnRzO1xcbitcXHRib29sIGNvbXBvbmVudF9mb3VuZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHBkc2NfZnJlZV9md3VfcHJpdihzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2LCAqdG1wO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbXBvbmVudF9wcml2LCB0bXAsIFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wb25lbnRzLFxcbitcXHRcXHRcXHRcXHQgbGlzdF9lbnRyeSkge1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2Y29tcG9uZW50X3ByaXYtXFx1MDAzZWxpc3RfZW50cnkpO1xcbitcXHRcXHRrZnJlZShjb21wb25lbnRfcHJpdik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGRlc2NfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCB1OCAqbWF0Y2gpXFxuK3tcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuK1xcdFxcdC5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsXFxuK1xcdFxcdC5tYXRjaF9yZWNvcmRfZGVzYy52ZXIgPSAxLFxcbitcXHRcXHQubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksXFxuK1xcdFxcdC5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSxcXG4rXFx0fTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFxcdTAwMjZjbWQsIGRlc2NfZGF0YSwgZGVzY19zaXplLFxcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0Km1hdGNoID0gY29tcC5tYXRjaF9yZWNvcmRfZGVzYy5tYXRjaDtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHBkc2NfbWF0Y2hfcmVjb3JkX2Rlc2NzKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGxkbWZ3X3JlY29yZCAqcmVjb3JkKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdHN0cnVjdCBwbGRtZndfZGVzY190bHYgKmRlc2M7XFxuK1xcbitcXHRpZiAoIXBsZG1md19vcF9wY2lfbWF0Y2hfcmVjb3JkKGNvbnRleHQsIHJlY29yZCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgXFx1MDAyNnJlY29yZC1cXHUwMDNlZGVzY3MsIGVudHJ5KSB7XFxuK1xcdFxcdHU4IG1hdGNoO1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0c3dpdGNoIChkZXNjLVxcdTAwM2V0eXBlKSB7XFxuK1xcdFxcdC8qIHNraXAgdHlwZXMgY2hlY2tlZCBpbiBwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZCAqL1xcbitcXHRcXHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfVkVORE9SX0lEOlxcbitcXHRcXHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOlxcbitcXHRcXHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCVkVORE9SX0lEOlxcbitcXHRcXHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCREVWX0lEOlxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFkZXNjLVxcdTAwM2VzaXplKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRlcnIgPSBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhwZHNjLCBkZXNjLVxcdTAwM2V0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGVzYy1cXHUwMDNlc2l6ZSwgZGVzYy1cXHUwMDNlZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtYXRjaCk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJtYXRjaF9yZWNvcmRfZGVzYyBmYWlsZWQgdHlwZTogMHglMDR4IHNpemU6ICV1LCBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGRlc2MtXFx1MDAzZXR5cGUsIGRlc2MtXFx1MDAzZXNpemUsIGVycik7XFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBhbGwgcmVjb3JkIGRlc2NyaXB0b3JzIG11c3QgbWF0Y2ggKi9cXG4rXFx0XFx0aWYgKCFtYXRjaClcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCB1MTYgbGVuZ3RoLCB1MTYgb2Zmc2V0LCB1MTYgdG90YWxfbGVuKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuc2VuZF9wa2dfZGF0YS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQSxcXG4rXFx0XFx0LnNlbmRfcGtnX2RhdGEudmVyID0gMSxcXG4rXFx0XFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxcbitcXHRcXHQuc2VuZF9wa2dfZGF0YS5kYXRhX2xlbiA9IGNwdV90b19sZTE2KGxlbmd0aCksXFxuK1xcdFxcdC5zZW5kX3BrZ19kYXRhLm9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldCksXFxuK1xcdFxcdC5zZW5kX3BrZ19kYXRhLnRvdGFsX2xlbiA9IGNwdV90b19sZTE2KHRvdGFsX2xlbiksXFxuK1xcdH07XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFxuK1xcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgdTE2IGxlbmd0aClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XFxuK1xcdHU4ICpwYWNrYWdlX2RhdGE7XFxuK1xcdHUzMiBvZmZzZXQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWxlbmd0aClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZGVmZXJyZWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGFja2FnZV9kYXRhID0ga21lbWR1cChkYXRhLCBsZW5ndGgsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBhY2thZ2VfZGF0YSkge1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gZG1hX21hcCBwYWNrYWdlX2RhdGEgbGVuZ3RoIDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGxlbmd0aCk7XFxuK1xcdFxcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XFxuK1xcdFxcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IFxcdTAwM2MgbGVuZ3RoOyBvZmZzZXQgKz0gUERTX1BBR0VfU0laRSkge1xcbitcXHRcXHR1MzIgY29weV9zejtcXG4rXFxuK1xcdFxcdGNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsIGxlbmd0aCAtIG9mZnNldCk7XFxuK1xcdFxcdGVyciA9IHBkc2NfZGV2Y21kX3NlbmRfcGFja2FnZV9kYXRhKHBkc2MsIGRtYV9hZGRyICsgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29weV9zeiwgb2Zmc2V0LCBsZW5ndGgpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGFcXFwiKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7XFxuK1xcdFxcdHBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRpZiAocGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldLmNvbXBvbmVudF90eXBlID09IHR5cGUpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcGRzY19jb21wb25lbnRfaWRfbWF0Y2hlc190eXBlKHN0cnVjdCBwZHNjICpwZHNjLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1OCBjb21wb25lbnRfaWQsIHU4IHR5cGUpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9XFxuK1xcdFxcdFxcdFxcdTAwMjZwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XFxuK1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGluZm8tXFx1MDAzZWNvbXBvbmVudF90eXBlID09IHR5cGUpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIHU4IHBkc2NfZ2V0X2NvbXBvbmVudF90eXBlX2J5X2lkKHN0cnVjdCBwZHNjICpwZHNjLCB1MTYgY29tcG9uZW50X2lkKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxcbitcXHRcXHRcXHRcXHUwMDI2cGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWlkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkKVxcbitcXHRcXHRcXHRyZXR1cm4gaW5mby1cXHUwMDNlY29tcG9uZW50X3R5cGU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHBkc2Nfc2tpcF9jb21wb25lbnQoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHR1MTYgY29tcG9uZW50X2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29tcG9uZW50X3ByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wb25lbnRzLCBsaXN0X2VudHJ5KSB7XFxuK1xcdFxcdGlmIChjb21wb25lbnRfcHJpdi1cXHUwMDNlY29tcG9uZW50X2lkID09IGNvbXBvbmVudF9pZClcXG4rXFx0XFx0XFx0cmV0dXJuIGNvbXBvbmVudF9wcml2LVxcdTAwM2Vza2lwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwbGRtZndfY29tcG9uZW50ICpjb21wb25lbnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgdTggdHJhbnNmZXJfZmxhZylcXG4re1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7XFxuK1xcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cXHUwMDNlZGV2O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cXHUwMDNlcGRzYztcXG4rXFx0Ym9vbCBza2lwX2NvbXBvbmVudCA9IGZhbHNlO1xcbitcXHR1OCByZXF1ZXN0ZWRfdHlwZSA9IDA7XFxuK1xcdHUxNiBidWZfc3osIHRibF9zejtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRkZXZfZGJnKGRldixcXG4rXFx0XFx0XFxcImNvbXBvbmVudCBuYW1lICVzIGNsYXNzaWZpY2F0aW9uICV1IGlkICV1IGFjdGl2YXRpb25fbWV0aG9kICV1IHZlcl9sZW4gJWQgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXUgdHJhbnNmZXJfZmxhZyAweCUwMnhcXFxcblxcXCIsXFxuK1xcdFxcdHByaXYtXFx1MDAzZXBhcmFtcy1cXHUwMDNlY29tcG9uZW50LCBjb21wb25lbnQtXFx1MDAzZWNsYXNzaWZpY2F0aW9uLFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cXHUwMDNlYWN0aXZhdGlvbl9tZXRob2QsXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4sIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4sXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9zdHJpbmcsIGNvbXBvbmVudC1cXHUwMDNlaW5kZXgsXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNlY29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpO1xcbitcXG4rXFx0Y29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWNvbXBvbmVudF9wcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCkge1xcbitcXHRcXHRyZXF1ZXN0ZWRfdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHByaXYtXFx1MDAzZXBhcmFtcy1cXHUwMDNlY29tcG9uZW50KTtcXG4rXFx0XFx0aWYgKGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllciBcXHUwMDNlIFU4X01BWCB8fFxcbitcXHRcXHQgICAgIXBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShwZHNjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmVxdWVzdGVkX3R5cGUpKSB7XFxuK1xcdFxcdFxcdHNraXBfY29tcG9uZW50ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Z290byBhZGRfY29tcG9uZW50X3ByaXY7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cHJpdi1cXHUwMDNlY29tcG9uZW50X2ZvdW5kID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0YnVmX3N6ID0gc2l6ZW9mKHBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhKTtcXG4rXFx0dGJsX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X3RibCwgdmVyc2lvbl9zdHIsXFxuK1xcdFxcdFxcdCAgICAgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbik7XFxuK1xcdGlmICh0Ymxfc3ogXFx1MDAzZSBidWZfc3opIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR0Ymxfc3osIGJ1Zl9zeik7XFxuK1xcdFxcdGVyciA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcXG4rXFx0fVxcbitcXHRjb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWNvbXBvbmVudF90YmwpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmcmVlX2NvbXBvbmVudF9wcml2O1xcbitcXHR9XFxuK1xcbitcXHRjb21wb25lbnRfdGJsLVxcdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cXG4rXFx0XFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVxcdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcXG4rXFx0Y29tcG9uZW50X3RibC1cXHUwMDNlY2xhc3NpZmljYXRpb24gPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZWNsYXNzaWZpY2F0aW9uKTtcXG4rXFx0Y29tcG9uZW50X3RibC1cXHUwMDNlaWRlbnRpZmllciA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllcik7XFxuK1xcdGNvbXBvbmVudF90YmwtXFx1MDAzZXRyYW5zZmVyX2ZsYWcgPSB0cmFuc2Zlcl9mbGFnO1xcbitcXHRjb21wb25lbnRfdGJsLVxcdTAwM2V2ZXJzaW9uX3N0cl90eXBlID0gY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3R5cGU7XFxuK1xcdGNvbXBvbmVudF90YmwtXFx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW47XFxuK1xcdG1lbWNweShjb21wb25lbnRfdGJsLVxcdTAwM2V2ZXJzaW9uX3N0ciwgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3N0cmluZyxcXG4rXFx0ICAgICAgIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4pO1xcbitcXG4rXFx0Y21kLnNlbmRfY29tcG9uZW50X3RibC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMO1xcbitcXHRjbWQuc2VuZF9jb21wb25lbnRfdGJsLnZlciA9IDE7XFxuK1xcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDtcXG4rXFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBcXHUwMDI2Y21kLCBjb21wb25lbnRfdGJsLCB0Ymxfc3osXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbitcXHRrZnJlZShjb21wb25lbnRfdGJsKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCBzZW5kaW5nIGNvbXBvbmVudCB0YWJsZTogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRFUlJfUFRSKGVycikpO1xcbitcXHRcXHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XFxuK1xcdH1cXG4rXFxuK1xcdHNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTtcXG4rXFxuK2FkZF9jb21wb25lbnRfcHJpdjpcXG4rXFx0Y29tcG9uZW50X3ByaXYtXFx1MDAzZXNraXAgPSBza2lwX2NvbXBvbmVudDtcXG4rXFx0Y29tcG9uZW50X3ByaXYtXFx1MDAzZWNvbXBvbmVudF9pZCA9IGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllcjtcXG4rXFx0bGlzdF9hZGQoXFx1MDAyNmNvbXBvbmVudF9wcml2LVxcdTAwM2VsaXN0X2VudHJ5LCBcXHUwMDI2cHJpdi1cXHUwMDNlY29tcG9uZW50cyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfY29tcG9uZW50X3ByaXY6XFxuK1xcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sXFxuK1xcdFxcdC5nZXRfY29tcG9uZW50X2luZm8udmVyID0gMSxcXG4rXFx0fTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gKmxpc3RfaW5mbztcXG4rXFx0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHR1OCBudW1fY29tcG9uZW50cztcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdGRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkKTtcXG4rXFx0aWYgKCFkZWZlcnJlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRsaXN0X2luZm8gPSBremFsbG9jKFBEU19QQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWxpc3RfaW5mbykge1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHBkc2MtXFx1MDAzZWRldiwgbGlzdF9pbmZvLCBQRFNfUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHQgIERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdGlmIChkbWFfbWFwcGluZ19lcnJvcihwZHNjLVxcdTAwM2VkZXYsIGRtYV9hZGRyKSkge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRQRFNfUEFHRV9TSVpFKTtcXG4rXFx0XFx0a2ZyZWUobGlzdF9pbmZvKTtcXG4rXFx0XFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0Y21kLmdldF9jb21wb25lbnRfaW5mby5kYXRhX2xlbiA9IGNwdV90b19sZTE2KFBEU19QQUdFX1NJWkUpO1xcbitcXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XFxuK1xcbitcXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQgKiAyKTtcXG4rXFx0aWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7XFxuK1xcdFxcdHBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsIGxpc3RfaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUERTX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRkbWFfdW5tYXBfc2luZ2xlKHBkc2MtXFx1MDAzZWRldiwgZG1hX2FkZHIsIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9PSAwKSB7XFxuK1xcdFxcdC8qIERvbid0IHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyB2ZXJzaW9uIDAgaGFzXFxuK1xcdFxcdCAqIGFsaWdubWVudCBpc3N1ZXMsIHNvIGdpdmUgYSBoaW50IHRvIHVzZXJzIHRvIHVwZGF0ZVxcbitcXHRcXHQgKiB0aGVpciBmaXJtd2FyZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X3dhcm5fb25jZShwZHNjLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJJbmNvbXBhdGlibGUgZ2V0X2NvbXBvbmVudF9pbmZvIHZlcnNpb24gJXUgcmVwb3J0ZWQgYnkgZmlybXdhcmVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlcik7XFxuK1xcdFxcdGVyciA9IDA7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRudW1fY29tcG9uZW50cyA9IGxpc3RfaW5mby1cXHUwMDNlbnVtX2NvbXBvbmVudHM7XFxuK1xcdGlmIChudW1fY29tcG9uZW50cyBcXHUwMDNlIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9MSVNUX0xFTikge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyA9IG51bV9jb21wb25lbnRzO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxcbitcXHRcXHRcXHRcXHUwMDI2cGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldO1xcbitcXG4rXFx0XFx0bWVtY3B5KGluZm8sIFxcdTAwMjZsaXN0X2luZm8tXFx1MDAzZWluZm9baV0sIHNpemVvZigqaW5mbykpO1xcbitcXHRcXHRpbmZvLVxcdTAwM2V2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIC0gMV0gPSAwO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAtIDFdID0gMDtcXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRrZnJlZShsaXN0X2luZm8pO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHN0cnVjdCBwZHNjICpwZHNjLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICB1MTYgaW5mb19zeiwgZG1hX2FkZHJfdCBhZGRyLCB1MzIgbGVuZ3RoLFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgb2Zmc2V0LCB1MTYgc2xvdF9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApXFxuK3tcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQsXFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC52ZXIgPSAxLFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQub3BlcmF0aW9uID0gUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQsXFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksXFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC5kYXRhX2xlbiA9IGNwdV90b19sZTMyKGxlbmd0aCksXFxuK1xcdFxcdC5zZW5kX2NvbXBvbmVudC5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpLFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQuc2xvdF9pZCA9IHNsb3RfaWQsXFxuK1xcdH07XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDMwMCAqIEhaO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzdGFydF90aW1lID0gamlmZmllcztcXG4rXFx0ZW5kX3RpbWUgPSBzdGFydF90aW1lICsgdGltZW91dDtcXG4rXFx0ZG8ge1xcbitcXHRcXHQvKiBwcmV2ZW50IG5vaXN5L2JlbmlnbiBkZXZjbWQgZmFpbHVyZXMgKi9cXG4rXFx0XFx0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHBkc2MsIFxcdTAwMjZjbWQsIGluZm8sIGluZm9fc3osXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29tcCwgNjApO1xcbitcXHRcXHRpZiAoZXJyICE9IC1FQUdBSU4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogaWYgcmVxdWlyZWQsIHN1YnNlcXVlbnQgY29tbWFuZHMgY2hlY2sgc3RhdHVzIG9mXFxuK1xcdFxcdCAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBjb21tYW5kLCB3aGljaCByZXR1cm5zXFxuK1xcdFxcdCAqIEVBR0FJTiB3aGlsZSB0aGUgY29tbWFuZCBpcyBzdGlsbCBydW5uaW5nLFxcbitcXHRcXHQgKiBlbHNlIHdlIGdldCB0aGUgZmluYWwgY29tbWFuZCBzdGF0dXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjbWQuc2VuZF9jb21wb25lbnQub3BlcmF0aW9uID0gUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTO1xcbitcXHRcXHRtc2xlZXAoMjApO1xcbitcXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpO1xcbitcXG4rXFx0aWYgKGVyciA9PSAtRUFHQUlOIHx8IGVyciA9PSAtRVRJTUVET1VUKVxcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIlBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCB0aW1lZCBvdXRcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2ZsYXNoX2NvbXBvbmVudF9jaHVuayhzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IGRldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLFxcbitcXHRcXHRcXHRcXHQgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgb2Zmc2V0LCB1OCBzbG90X2lkLFxcbitcXHRcXHRcXHRcXHQgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkO1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHR1OCAqY29tcG9uZW50X2RhdGE7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZGVmZXJyZWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Y29tcG9uZW50X2RhdGEgPSBrbWVtZHVwKGRhdGEsIGNvcHlfc3osIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWNvbXBvbmVudF9kYXRhKSB7XFxuK1xcdFxcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkge1xcbitcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9kYXRhIGF0IG9mZnNldCAweCV4IGNvcHlfc3ogMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0b2Zmc2V0LCBjb3B5X3N6KTtcXG4rXFx0XFx0a2ZyZWUoY29tcG9uZW50X2RhdGEpO1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChwZHNjLCBpbmZvLCBpbmZvX3N6LCBkbWFfYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0IGNvcHlfc3osIG9mZnNldCwgc2xvdF9pZCwgY29tcCk7XFxuK1xcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcXG4rXFx0a2ZyZWUoY29tcG9uZW50X2RhdGEpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2ZsYXNoX2NvbXBvbmVudChzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50KVxcbit7XFxuK1xcdGNoYXIgY29tcG9uZW50X25hbWVfYnVmW1BEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU5dO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqY29tcG9uZW50X2luZm87XFxuK1xcdGNvbnN0IGNoYXIgKmNvbXBvbmVudF9uYW1lID0gTlVMTDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdHUxNiBidWZfc3osIGluZm9fc3o7XFxuK1xcdHN0cnVjdCBkZXZsaW5rICpkbDtcXG4rXFx0dTggY29tcG9uZW50X3R5cGU7XFxuK1xcdHUzMiB0b3RhbF9sZW47XFxuK1xcdHUzMiBvZmZzZXQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRjb21wb25lbnRfdHlwZSA9IHBkc2NfZ2V0X2NvbXBvbmVudF90eXBlX2J5X2lkKHBkc2MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIpO1xcbitcXHRpZiAoY29tcG9uZW50X3R5cGUpIHtcXG4rXFx0XFx0Y29uc3QgY2hhciAqdHlwZV9uYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoY29tcG9uZW50X3R5cGUpO1xcbitcXG4rXFx0XFx0aWYgKGNvbXBvbmVudF90eXBlID09IFBEU19DT1JFX0ZXX1RZUEVfTUFJTikge1xcbitcXHRcXHRcXHRjb21wb25lbnRfbmFtZSA9IFxcXCJmd1xcXCI7XFxuK1xcdFxcdH0gZWxzZSBpZiAodHlwZV9uYW1lKSB7XFxuK1xcdFxcdFxcdHNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksXFxuK1xcdFxcdFxcdFxcdCBcXFwiJXMlc1xcXCIsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTtcXG4rXFx0XFx0XFx0Y29tcG9uZW50X25hbWUgPSBjb21wb25lbnRfbmFtZV9idWY7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XFxuK1xcbitcXHRpZiAocGRzY19za2lwX2NvbXBvbmVudChwcml2LCBjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIpKSB7XFxuK1xcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFxcXCJTa2lwcGVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0dG90YWxfbGVuID0gY29tcG9uZW50LVxcdTAwM2Vjb21wb25lbnRfc2l6ZTtcXG4rXFx0ZGV2X2RiZyhkZXYsXFxuK1xcdFxcdFxcXCJjb21wb25lbnQgbmFtZSAlcyBjbGFzcyAldSBpZCAldSBhY3RfbWV0aCAldSB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldVxcXFxuXFxcIixcXG4rXFx0XFx0Y29tcG9uZW50X25hbWUgPzogXFxcIih1bmtub3duKVxcXCIsIGNvbXBvbmVudC1cXHUwMDNlY2xhc3NpZmljYXRpb24sXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllciwgY29tcG9uZW50LVxcdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcXG4rXFx0XFx0Y29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbiwgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3N0cmluZyxcXG4rXFx0XFx0Y29tcG9uZW50LVxcdTAwM2VpbmRleCwgY29tcG9uZW50LVxcdTAwM2Vjb21wb25lbnRfc2l6ZSk7XFxuK1xcbitcXHRidWZfc3ogPSBzaXplb2YocGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWRhdGEpO1xcbitcXHRpbmZvX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X2luZm8sIHZlcnNpb25fc3RyLFxcbitcXHRcXHRcXHQgICAgICBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuKTtcXG4rXFx0aWYgKGluZm9fc3ogXFx1MDAzZSBidWZfc3opIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aW5mb19zeiwgYnVmX3N6KTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcdH1cXG4rXFx0Y29tcG9uZW50X2luZm8gPSB2emFsbG9jKGluZm9fc3opO1xcbitcXHRpZiAoIWNvbXBvbmVudF9pbmZvKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cXG4rXFx0XFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVxcdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcXG4rXFx0Y29tcG9uZW50X2luZm8tXFx1MDAzZWltYWdlX3NpemUgPSBjcHVfdG9fbGUzMih0b3RhbF9sZW4pO1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNlY2xhc3NpZmljYXRpb24gPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZWNsYXNzaWZpY2F0aW9uKTtcXG4rXFx0Y29tcG9uZW50X2luZm8tXFx1MDAzZWlkZW50aWZpZXIgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIpO1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNlb3B0aW9ucyA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cXHUwMDNlb3B0aW9ucyk7XFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2V2ZXJzaW9uX3N0cl90eXBlID0gY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3R5cGU7XFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2V2ZXJzaW9uX3N0cl9sZW4gPSBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuO1xcbitcXHRtZW1jcHkoY29tcG9uZW50X2luZm8tXFx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fc3RyaW5nLFxcbitcXHQgICAgICAgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbik7XFxuK1xcbitcXHRvZmZzZXQgPSAwO1xcbitcXHR3aGlsZSAob2Zmc2V0IFxcdTAwM2MgdG90YWxfbGVuKSB7XFxuK1xcdFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0XFx0dTE2IGNvcHlfc3o7XFxuK1xcbitcXHRcXHRjb3B5X3N6ID0gbWluX3QodW5zaWduZWQgaW50LCBQRFNfUEFHRV9TSVpFLFxcbitcXHRcXHRcXHRcXHR0b3RhbF9sZW4gLSBvZmZzZXQpO1xcbitcXG4rXFx0XFx0ZXJyID0gcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsocGRzYywgZGV2LCBjb21wb25lbnRfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGluZm9fc3osXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb21wb25lbnQtXFx1MDAzZWNvbXBvbmVudF9kYXRhICtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG9mZnNldCwgY29weV9zeiwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgUERTX0NPUkVfRldfU0xPVF9JTlZBTElELFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmNvbXApO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT1cXG4rXFx0XFx0ICAgICBQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfSURFTlRJQ0FMIHx8XFxuK1xcdFxcdCAgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PVxcbitcXHRcXHQgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUikpIHtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXFxcIlNraXBwZWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBjb21wb25lbnRfbmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgMCwgMCk7XFxuK1xcdFxcdFxcdGdvdG8gc2tpcF9jb21wb25lbnQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byBmbGFzaCBjb21wb25lbnRcXFwiKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZmZzZXQgKz0gY29weV9zejtcXG4rXFx0XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIkVyYXNpbmcvRmxhc2hpbmdcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBjb21wb25lbnRfbmFtZSwgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICB0b3RhbF9sZW4pO1xcbitcXHR9XFxuK1xcbitcXHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX291dDpcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkVyYXNpbmcvRmxhc2hpbmcgQ29tcG9uZW50IEZhaWxlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcXG4rc2tpcF9jb21wb25lbnQ6XFxuK1xcdHZmcmVlKGNvbXBvbmVudF9pbmZvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XFxuK1xcdFxcdC5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSxcXG4rXFx0XFx0LmZpbmFsaXplX3VwZGF0ZS52ZXIgPSAxLFxcbitcXHR9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcbitcXHRyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2ZpbmFsaXplX3VwZGF0ZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xcbitcXHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtXFx1MDAzZXBhcmFtcy1cXHUwMDNlY29tcG9uZW50O1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cXHUwMDNlcGRzYztcXG4rXFx0c3RydWN0IGRldmxpbmsgKmRsO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XFxuK1xcbitcXHRzdGFydF90aW1lID0gamlmZmllcztcXG4rXFx0ZW5kX3RpbWUgPSBzdGFydF90aW1lICsgKFBEU0NfRldfSU5TVEFMTF9USU1FT1VUICogSFopO1xcbitcXHRkbyB7XFxuK1xcdFxcdGVyciA9IHBkc2NfZGV2Y21kX2ZpbmFsaXplX3VwZGF0ZShwZHNjKTtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRUFHQUlOKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGRldl9kYmcoZGV2LCBcXFwicmV0cnlpbmcgZmluYWxpemVfdXBkYXRlOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIoZXJyKSk7XFxuK1xcdFxcdG1zbGVlcCgyMCk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSBcXHUwMDI2XFx1MDAyNiBlcnIgPT0gLUVBR0FJTik7XFxuK1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFxcXCJGaW5hbGl6ZSBVcGRhdGUgRmFpbGVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QocHJpdi1cXHUwMDNlZXh0YWNrLCBcXFwiRmluYWxpemUgdXBkYXRlIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcXFwiRmluYWxpemVkIFVwZGF0ZVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7XFxuK1xcdC5tYXRjaF9yZWNvcmQgPSBwZHNjX21hdGNoX3JlY29yZF9kZXNjcyxcXG4rXFx0LnNlbmRfcGFja2FnZV9kYXRhID0gcGRzY19zZW5kX3BhY2thZ2VfZGF0YSxcXG4rXFx0LnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSxcXG4rXFx0LmZsYXNoX2NvbXBvbmVudCA9IHBkc2NfZmxhc2hfY29tcG9uZW50LFxcbitcXHQuZmluYWxpemVfdXBkYXRlID0gcGRzY19maW5hbGl6ZV91cGRhdGVcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuK3tcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2IHByaXYgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghcGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cykge1xcbitcXHRcXHRlcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIGdldCBjb21wb25lbnQgaW5mb1xcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCkge1xcbitcXHRcXHR1OCB0eXBlID0gcGRzY19uYW1lX3RvX2Z3X3R5cGUocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpO1xcbitcXG4rXFx0XFx0aWYgKCF0eXBlIHx8ICFwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhwZHNjLCB0eXBlKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiVW5rbm93biBjb21wb25lbnQgbmFtZVxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cHJpdi5jb21wb25lbnRzKTtcXG4rXFx0cHJpdi5jb250ZXh0Lm9wcyA9IFxcdTAwMjZwZHNjX3BsZG1md19vcHM7XFxuK1xcdHByaXYuY29udGV4dC5kZXYgPSBwZHNjLVxcdTAwM2VkZXY7XFxuK1xcdHByaXYucGFyYW1zID0gcGFyYW1zO1xcbitcXHRwcml2LmV4dGFjayA9IGV4dGFjaztcXG4rXFx0cHJpdi5wZHNjID0gcGRzYztcXG4rXFxuK1xcdGVyciA9IHBsZG1md19mbGFzaF9pbWFnZShcXHUwMDI2cHJpdi5jb250ZXh0LCBmdyk7XFxuK1xcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHBhcmFtcy1cXHUwMDNlY29tcG9uZW50IFxcdTAwMjZcXHUwMDI2ICFwcml2LmNvbXBvbmVudF9mb3VuZCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiUmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FTk9FTlQ7XFxuK1xcdH1cXG4rXFx0cGRzY19mcmVlX2Z3dV9wcml2KFxcdTAwMjZwcml2KTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKHBkc2MtXFx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFxcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMiBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGRzYy1cXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcXHUwMDI2XFxuK1xcdFxcdGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEUpKVxcbitcXHRcXHRlcnIgPSBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRwYXJhbXMtXFx1MDAzZWZ3KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRlcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xcbitcXG4rXFx0LyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi9cXG4rXFx0cGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUocGRzYyk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXFxuaW5kZXggOGQ5NGE0ZDcwMzk1ZS4uNWUxYjA3ODUwMTYzYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xcbkBAIC0yMSw2ICsyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZHNjX2lkX3RhYmxlW10gPSB7XFxuIH07XFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwZHNjX2lkX3RhYmxlKTtcXG4gXFxuK3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4rXFxuIHN0YXRpYyB2b2lkIHBkc2Nfd2R0aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4ge1xcbiBcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHRpbWVyX2NvbnRhaW5lcl9vZihwZHNjLCB0LCB3ZHRpbWVyKTtcXG5AQCAtMzE1LDYgKzMxNyw3IEBAIHN0YXRpYyBpbnQgcGRzY19pbml0X3BmKHN0cnVjdCBwZHNjICpwZHNjKVxcbiBcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShwZHNjLVxcdTAwM2V3cSk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBkc2MtXFx1MDAzZWNvbmZpZ19sb2NrKTtcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cGRzYy1cXHUwMDNlZGV2Y21kX2xvY2spO1xcbitcXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xcbiBcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZHNjLVxcdTAwM2VwZGV2KTtcXG4gZXJyX291dF91bm1hcF9iYXJzOlxcbiBcXHRwZHNjX3VubWFwX2JhcnMocGRzYyk7XFxuQEAgLTM1Myw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdHBkc2MtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbiBcXHRwZHNjLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiBcXHRzZXRfYml0KFBEU0NfU19JTklUSU5HX0RSSVZFUiwgXFx1MDAyNnBkc2MtXFx1MDAzZXN0YXRlKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9saXN0KTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHBkc2MpO1xcbiBcXHRwZHNjX2RlYnVnZnNfYWRkX2RldihwZHNjKTtcXG4gXFxuQEAgLTQ1OCw2ICs0NjMsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0fVxcbiBcXG4gXFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xcbiBcXG4gXFx0aWRhX2ZyZWUoXFx1MDAyNnBkc2NfaWRhLCBwZHNjLVxcdTAwM2V1aWQpO1xcbiBcXHRwZHNjX2RlYnVnZnNfZGVsX2RldihwZHNjKTtcXG5AQCAtNTA1LDYgKzUxMSw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0cGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTtcXG4gXFx0aWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKVxcbiBcXHRcXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XFxuK1xcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfZG9uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaCBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcXG5pbmRleCAxN2E4N2MxYTU1ZDdjLi45MDFlMWU2MjhmODkwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXFxuQEAgLTQwLDYgKzQwLDE0IEBAIGVudW0gcGRzX2NvcmVfY21kX29wY29kZSB7XFxuIFxcdFBEU19DT1JFX0NNRF9GV19ET1dOTE9BRFxcdD0gNCxcXG4gXFx0UERTX0NPUkVfQ01EX0ZXX0NPTlRST0xcXHRcXHQ9IDUsXFxuIFxcbitcXHRQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXFx0PSA2LFxcbitcXHRQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQVxcdD0gNyxcXG4rXFx0UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFxcdD0gOCxcXG4rXFx0UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UXFx0PSA5LFxcbitcXHRQRFNfQ09SRV9DTURfRklOQUxJWkVfVVBEQVRFXFx0PSAxMCxcXG4rXFx0UERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXFx0PSAxMSxcXG4rXFx0UERTX0NPUkVfQ01EX0hPU1RfTUVNXFx0XFx0PSAxMixcXG4rXFxuIFxcdC8qIFNSL0lPViBjb21tYW5kcyAqL1xcbiBcXHRQRFNfQ09SRV9DTURfVkZfR0VUQVRUUlxcdFxcdD0gNjAsXFxuIFxcdFBEU19DT1JFX0NNRF9WRl9TRVRBVFRSXFx0XFx0PSA2MSxcXG5AQCAtMTAwLDYgKzEwOCwxNiBAQCBzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IHtcXG4gXFx0Y2hhciAgIGRyaXZlcl92ZXJfc3RyWzMyXTtcXG4gfTtcXG4gXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IC0gRGV2aWNlIGNhcGFiaWxpdGllc1xcbisgKiBAUERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURTogRGV2aWNlIG9ubHkgc3VwcG9ydHMgRlcgdXBkYXRlIHZpYSBQTERNXFxuKyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZVxcbisgKi9cXG4rZW51bSBwZHNfY29yZV9kZXZfY2FwYWJpbGl0eSB7XFxuK1xcdFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEUgPSBCSVQoMCksXFxuK1xcdFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0gPSBCSVQoMSksXFxuK307XFxuK1xcbiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVhcXHQxNlxcbiAvKipcXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvblxcbkBAIC0xMTksNiArMTM3LDExIEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkge1xcbiAgKlxcdFxcdCAgICAgIHZhbHVlIGluIHVzZWNzIHRvIGRldmljZSB1bml0cyB1c2luZzpcXG4gICpcXHRcXHQgICAgICBkZXZpY2UgdW5pdHMgPSB1c2VjcyAqIG11bHQgLyBkaXZcXG4gICogQHZpZl90eXBlczogICAgICAgIEhvdyBtYW55IG9mIGVhY2ggVklGIGRldmljZSB0eXBlIGlzIHN1cHBvcnRlZFxcbisgKiBAbWF4X2Z3X3Nsb3RzOiAgICAgTnVtYmVyIG9mIGZpcm13YXJlIGNvbXBvbmVudHMgcmVwb3J0ZWQgYnkgZGV2aWNlXFxuKyAqXFx0XFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzJcXG4rICogQHJzdmQyOlxcdCAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAY2FwYWJpbGl0aWVzOiAgICAgRGV2aWNlIGNhcGFiaWxpdGllc1xcbisgKlxcdFxcdCAgICAgIG9ubHkgc3VwcG9ydGVkIG9uIHZlcnNpb24gXFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXFxuICAqL1xcbiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHtcXG4gXFx0dTggICAgIHZlcnNpb247XFxuQEAgLTEzMSw5ICsxNTQsMTMgQEAgc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7XFxuIFxcdF9fbGUzMiBpbnRyX2NvYWxfbXVsdDtcXG4gXFx0X19sZTMyIGludHJfY29hbF9kaXY7XFxuIFxcdF9fbGUxNiB2aWZfdHlwZXNbUERTX0RFVl9UWVBFX01BWF07XFxuK1xcdF9fbGUxNiBtYXhfZndfc2xvdHM7XFxuK1xcdHU4ICAgICByc3ZkMls2XTtcXG4rXFx0X19sZTY0IGNhcGFiaWxpdGllcztcXG4gfTtcXG4gXFxuICNkZWZpbmUgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xXFx0MVxcbisjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxcdDJcXG4gXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aWZ5X2NtZCAtIERyaXZlci9kZXZpY2UgaWRlbnRpZnkgY29tbWFuZFxcbkBAIC0yNzUsMTEgKzMwMiwyMCBAQCBlbnVtIHBkc19jb3JlX2Z3X2NvbnRyb2xfb3BlciB7XFxuIFxcdFBEU19DT1JFX0ZXX0dFVF9MSVNUICAgICAgICAgICAgICAgPSA3LFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGVudW0gcGRzX2NvcmVfZndfc2xvdCAtIEZpcm13YXJlIHNsb3QgaWRlbnRpZmllcnNcXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDogTGV0IGZpcm13YXJlIHNlbGVjdCBzbG90IGJhc2VkIG9uIHBhY2thZ2UgbWV0YWRhdGFcXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfQTogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEFcXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfQjogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEJcXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfR09MRDogICAgR29sZC9yZWNvdmVyeSBmaXJtd2FyZSBzbG90XFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX01BWDogICAgIFNlbnRpbmVsIHZhbHVlIGluZGljYXRpbmcgbm8gc2xvdCByZXNvbHZlZFxcbisgKi9cXG4gZW51bSBwZHNfY29yZV9md19zbG90IHtcXG4gXFx0UERTX0NPUkVfRldfU0xPVF9JTlZBTElEICAgID0gMCxcXG4gXFx0UERTX0NPUkVfRldfU0xPVF9BXFx0ICAgID0gMSxcXG4gXFx0UERTX0NPUkVfRldfU0xPVF9CICAgICAgICAgID0gMixcXG4gXFx0UERTX0NPUkVfRldfU0xPVF9HT0xEICAgICAgID0gMyxcXG4rXFx0UERTX0NPUkVfRldfU0xPVF9NQVggICAgICAgID0gMHhmZixcXG4gfTtcXG4gXFxuIC8qKlxcbkBAIC00NDYsNiArNDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHtcXG4gXFx0dThcXHRzdGF0dXM7XFxuIH07XFxuIFxcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kIC0gU2VuZCBwYWNrYWdlIGRhdGEgY29tbWFuZFxcbisgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHRvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIHRoZSBwYWNrYWdlIGRhdGFcXG4rICogQG9mZnNldDogT2Zmc2V0IGluIHRoZSBwYWNrYWdlIGRhdGEsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzIGFyZVxcbisgKlxcdCAgICBuZWVkZWQgZm9yIHNlbmRpbmcgdGhlIHBhY2thZ2UgZGF0YVxcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiBkYXRhIHN0b3JlZCBhdCBkYXRhX3BhXFxuKyAqIEBkYXRhX3BhOiBEYXRhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSB0byBkZXZpY2VcXG4rICpcXG4rICogVGhlIHBhY2thZ2UgZGF0YSBtYXkgYmUgdG9vIGxhcmdlIHRvIHN0b3JlIGluIGEgc2luZ2xlIGJ1ZmZlciwgc28gbXVsdGlwbGVcXG4rICogUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kIHtcXG4rXFx0dTggb3Bjb2RlO1xcbitcXHR1OCB2ZXI7XFxuK1xcdF9fbGUxNiB0b3RhbF9sZW47XFxuK1xcdF9fbGUxNiBvZmZzZXQ7XFxuK1xcdF9fbGUxNiBkYXRhX2xlbjtcXG4rXFx0X19sZTY0IGRhdGFfcGE7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbXBsZXRpb25cXG4rICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAtIENvbXBvbmVudCB0YWJsZSBkZXRhaWxzXFxuKyAqIEBjb21wYXJpc29uX3N0YW1wOiBDb21wYXJpc29uIHN0YW1wIHVzZWQgZm9yIGNvbXBvbmVudCB2ZXJzaW9uIGNoZWNrc1xcbisgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvXFxuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxcbisgKiBAdHJhbnNmZXJfZmxhZzogUGFydCBvZiB0aGUgY29tcG9uZW50IHRhYmxlIHRoaXMgcmVxdWVzdCByZXByZXNlbnRzXFxuKyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkXFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcXG4rICogQHZlcnNpb25fc3RyOiBDb21wb25lbnQgdmVyc2lvbiBpbmZvcm1hdGlvblxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90Ymwge1xcbitcXHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcXG4rXFx0X19sZTE2IGNsYXNzaWZpY2F0aW9uO1xcbitcXHRfX2xlMTYgaWRlbnRpZmllcjtcXG4rXFx0dTggICAgIHRyYW5zZmVyX2ZsYWc7XFxuK1xcdHU4ICAgICB2ZXJzaW9uX3N0cl90eXBlO1xcbitcXHR1OCAgICAgdmVyc2lvbl9zdHJfbGVuO1xcbitcXHR1OCAgICAgdmVyc2lvbl9zdHJbXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbW1hbmRcXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqXFxuKyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpXFxuKyAqIGluIGNtZF9yZWdzLVxcdTAwM2VkYXRhLiAgRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxcbisgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggc2xvdF9pZDtcXG4rXFx0dTggcnN2ZDtcXG4rfTtcXG4rXFxuK2VudW0gcGRzX2NvcmVfY29tcG9uZW50X3Jlc3BfY29kZSB7XFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9WQUxJRCA9IDB4MCxcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCA9IDB4MSxcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0xPV0VSID0gMHgyLFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfT1JfVkVSU0lPTl9JTlZBTElEID0gMHgzLFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfQ09ORkxJQ1QgPSAweDQsXFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9QUkVSRVFTX05PVF9NRVQgPSAweDUsXFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9OT1RfU1VQUE9SVEVEID0gMHg2LFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfRldfVFlQRV9JTlZBTElEID0gMHhkMCxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wb25lbnQgY29tcGxldGlvbiBjb2RlXFxuKyAqIEByZXNwb25zZTogQ29tcG9uZW50IHJlc3BvbnNlXFxuKyAqIEByZXNwb25zZV9jb2RlOiBDb21wb25lbnQgcmVzcG9uc2UgY29kZVxcbisgKiBAc2xvdF9pZDogQWN0dWFsIHNsb3RfaWQgb2YgdGhlIGNvbXBvbmVudCAoZW51bSBwZHNfY29yZV9md19zbG90KVxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggY29tcGxldGlvbl9jb2RlO1xcbitcXHR1OCByZXNwb25zZTtcXG4rXFx0dTggcmVzcG9uc2VfY29kZTtcXG4rXFx0dTggc2xvdF9pZDtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvblxcbisgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQ6IEluaXRpYWwgb3BlcmF0aW9uIHRvIHN0YXJ0IHRyYW5zZmVyXFxuKyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVM6IFN1YnNlcXVlbnQgY2FsbHMgdG8gY2hlY2sgb24gc3RhdHVzXFxuKyAqL1xcbitlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIHtcXG4rXFx0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQgPSAwLFxcbitcXHRQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVMgPSAxLFxcbit9O1xcbitcXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfSURfSU5WQUxJRCAweEZGRkZcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgLSBDb21wb25lbnQgZGV0YWlsc1xcbisgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3NcXG4rICogQGltYWdlX3NpemU6IENvbXBvbmVudCBpbWFnZSBzaXplXFxuKyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm9cXG4rICogQGlkZW50aWZpZXI6IENvbXBvbmVudCdzIElEXFxuKyAqIEBvcHRpb25zOiBDb21wb25lbnQgb3B0aW9uc1xcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkXFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcXG4rICogQHZlcnNpb25fc3RyOiBDb21wb25lbnQgdmVyc2lvbiBpbmZvcm1hdGlvblxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCB7XFxuK1xcdF9fbGUzMiBjb21wYXJpc29uX3N0YW1wO1xcbitcXHRfX2xlMzIgaW1hZ2Vfc2l6ZTtcXG4rXFx0X19sZTE2IGNsYXNzaWZpY2F0aW9uO1xcbitcXHRfX2xlMTYgaWRlbnRpZmllcjtcXG4rXFx0X19sZTE2IG9wdGlvbnM7XFxuK1xcdHU4IHJzdmRbM107XFxuK1xcdHU4IHZlcnNpb25fc3RyX3R5cGU7XFxuK1xcdHU4IHZlcnNpb25fc3RyX2xlbjtcXG4rXFx0dTggdmVyc2lvbl9zdHJbXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY21kIC0gU2VuZCBjb21wb25lbnQgY29tbWFuZFxcbisgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxcbisgKiBAb3BlcmF0aW9uOiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wXFxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzXFxuKyAqXFx0ICAgIGFyZSBuZWVkZWQgZm9yIGEgc2luZ2xlIGNvbXBvbmVudFxcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBzdG9yZWQgYXQgQGRhdGFfcGFcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgdGhlIGNvbXBvbmVudFxcbisgKlxcbisgKiBBIGNvbXBvbmVudCBtYXkgYmUgdG9vIGxhcmdlIHRvIHN0b3JlIGluIGEgc2luZ2xlIGJ1ZmZlciwgc28gbXVsdGlwbGVcXG4rICogUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIGRldmNtZHMgbWF5IGJlIG5lZWRlZC5cXG4rICpcXG4rICogRXhwZWN0cyB0byBmaW5kIGZsYXNoIGNvbXBvbmVudCBpbmZvIChzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50KVxcbisgKiBpbiBjbWRfcmVncy1cXHUwMDNlZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxcbisgKiB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhlIGZsYXNoIGNvbXBvbmVudCBpbmZvLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHR1OCBzbG90X2lkO1xcbitcXHR1OCBvcGVyYXRpb247XFxuK1xcdF9fbGUzMiBvZmZzZXQ7XFxuK1xcdF9fbGUzMiBkYXRhX2xlbjtcXG4rXFx0dTggcnN2ZFs0XTtcXG4rXFx0X19sZTY0IGRhdGFfcGE7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgLSBTZW5kIGNvbXBvbmVudCBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wbGV0aW9uIGNvZGVcXG4rICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZClcXG4rICogQGNvbXBhdF9yZXNwb25zZV9jb2RlOiBDb21wYXRpYmlsaXR5IHJlc3BvbnNlIGNvZGVcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggY29tcGxldGlvbl9jb2RlO1xcbitcXHR1OCBjb21wYXRfcmVzcG9uc2U7XFxuK1xcdHU4IGNvbXBhdF9yZXNwb25zZV9jb2RlO1xcbitcXHR1OCByc3ZkWzNdO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUgLSBGaXJtd2FyZSBjb21wb25lbnQgdHlwZVxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX01BSU46IE1haW4gZmlybXdhcmVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfQk9PVDogQm9vdCBsb2FkZXJcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZVxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9TRUNVUkU6IFNlY3VyZSBmaXJtd2FyZVxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9GUEdBOiBGUEdBIGNvbmZpZ3VyYXRpb25cXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1Q6IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgYm9vdGxvYWRlclxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9VQk9PVDogVS1Cb290IGJvb3Rsb2FkZXJcXG4rICpcXG4rICogR29sZC9yZWNvdmVyeSB2YXJpYW50cyBhcmUgaWRlbnRpZmllZCBieSBzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRFxcbisgKiBhbmQgcmVwb3J0ZWQgd2l0aCBhIFxcXCIuZ29sZFxcXCIgc3VmZml4IChlLmcuLCBmdy5nb2xkKS5cXG4rICovXFxuK2VudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUge1xcbitcXHRQRFNfQ09SRV9GV19UWVBFX1VOS05PV04gICA9IDAsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfTUFJTiAgICAgID0gMSxcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9CT09UICAgICAgPSAyLFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX0NQTEQgICAgICA9IDMsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFICAgID0gNCxcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9GUEdBICAgICAgPSA1LFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOICA9IDYsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1QgID0gNyxcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9VQk9PVCAgICAgPSA4LFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFnc1xcbisgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HOiBDb21wb25lbnQgaXMgY3VycmVudGx5IHJ1bm5pbmdcXG4rICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUDogQ29tcG9uZW50IHZlcnNpb24gb24gbmV4dCBGVyBib290XFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkXFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FOiBDb21wb25lbnQgY2FuIGJlIHVwZGF0ZWRcXG4rICpcXHRieSBuYW1lXFxuKyAqL1xcbitlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIHtcXG4rXFx0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HID0gQklUKDApLFxcbitcXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksXFxuK1xcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQgPSBCSVQoMiksXFxuK1xcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUgPSBCSVQoMyksXFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGVudHJ5XFxuKyAqIEBuYW1lOiBDb21wb25lbnQncyBuYW1lXFxuKyAqIEBjb21wb25lbnRfdHlwZTogZW51bSBwZHNfY29yZV9md19jb21wb25lbnRfdHlwZVxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqIEBmbGFnczogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFnc1xcbisgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50J3MgaWRlbnRpZmllclxcbisgKiBAc2xvdF9pZDogQ29tcG9uZW50J3Mgc2xvdCBpZGVudGlmaWVyXFxuKyAqIEB2ZXJzaW9uOiBDb21wb25lbnQncyB2ZXJzaW9uXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8ge1xcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAyNFxcbitcXHRjaGFyIG5hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOXTtcXG4rXFx0dTggY29tcG9uZW50X3R5cGU7XFxuK1xcdHU4IHJzdmRbM107XFxuK1xcdF9fbGUxNiBmbGFncztcXG4rXFx0dTggaWRlbnRpZmllcjtcXG4rXFx0dTggc2xvdF9pZDtcXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAzMlxcbitcXHRjaGFyIHZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU5dO1xcbit9O1xcbitcXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5cXHQoKFBEU19QQUdFX1NJWkUgLSA4KSAvIFxcXFxcXG4rXFx0XFx0c2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpXFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhXFxuKyAqIEBudW1fY29tcG9uZW50czogTnVtYmVyIG9mIHZhbGlkIGNvbXBvbmVudHNcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyB7XFxuK1xcdHU4IG51bV9jb21wb25lbnRzO1xcbitcXHR1OCByc3ZkWzddO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gaW5mb1tQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5dO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmRcXG4rICogQG9wY29kZTogUERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1xcbisgKiBAdmVyOiBEcml2ZXIncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYVxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqIEBkYXRhX3BhOiBETUEgYWRkcmVzcyBvZiBkYXRhXFxuKyAqXFxuKyAqIEZXIHBvcHVsYXRlcyBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBwb2ludGVkIHRvIGJ5IEBkYXRhX3BhXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHRfX2xlMTYgZGF0YV9sZW47XFxuK1xcdHU4IHJzdmRbNF07XFxuK1xcdF9fbGU2NCBkYXRhX3BhO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAtIEZJTkFMSVpFX1VQREFURSBjb21tYW5kXFxuKyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKlxcbisgKiBEcml2ZXIgc2VuZHMgYXQgdGhlIGVuZCBvZiB1cGRhdGluZyBhbGwgY29tcG9uZW50cyB0byBmaW5hbGl6ZSB0aGUgdXBkYXRlXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHR1OCByc3ZkWzJdO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCAtIEZJTkFMSVpFX1VQREFURSBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kIC0gTUFUQ0hfUkVDT1JEX0RFU0MgY29tbWFuZFxcbisgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0NcXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAdHlwZTogUExETSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVHlwZVxcbisgKiBAc2l6ZTogTGVuZ3RoIG9mIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgVmFsdWVcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKlxcbisgKiBFeHBlY3RzIHRvIGZpbmQgdGhlIERlc2NyaXB0b3IgSWRlbnRpZmllciBEYXRhIGluIGNtZF9yZWdzLVxcdTAwM2VkYXRhLiBEcml2ZXJcXG4rICogc2hvdWxkIGtlZXAgdGhlIGRldmNtZCBpbnRlcmZhY2UgbG9ja2VkIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGlzXFxuKyAqIGNvbW1hbmQuXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kIHtcXG4rXFx0dTggb3Bjb2RlO1xcbitcXHR1OCB2ZXI7XFxuK1xcdF9fbGUxNiB0eXBlO1xcbitcXHRfX2xlMTYgc2l6ZTtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbXBsZXRpb25cXG4rICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZVxcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZVxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqXFxuKyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0J3NcXG4rICogdW5kZWZpbmVkLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAge1xcbitcXHR1OCBzdGF0dXM7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggbWF0Y2g7XFxuK1xcdHU4IHJzdmQ7XFxuK307XFxuK1xcbisvKipcXG4rICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnNcXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVDogUXVlcnkgbnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0c1xcbisgKiBAUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk6ICAgICBRdWVyeSBkZXRhaWxzIG9mIGEgbWVtb3J5IHJlcXVlc3RcXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlXFxuKyAqIEBQRFNfQ09SRV9IT1NUX01FTV9ERUw6ICAgICAgIE5vdGlmeSBmaXJtd2FyZSBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uXFxuKyAqL1xcbitlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIge1xcbitcXHRQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlRcXHQ9IDAsXFxuK1xcdFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZXFx0XFx0PSAxLFxcbitcXHRQRFNfQ09SRV9IT1NUX01FTV9BRERcXHRcXHQ9IDIsXFxuK1xcdFBEU19DT1JFX0hPU1RfTUVNX0RFTFxcdFxcdD0gMyxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIC0gSE9TVF9NRU0gY29tbWFuZFxcbisgKiBAb3Bjb2RlOiAgICAgT3Bjb2RlIFBEU19DT1JFX0NNRF9IT1NUX01FTVxcbisgKiBAb3BlcjogICAgICAgT3BlcmF0aW9uIChlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIpXFxuKyAqIEBpbmRleDogICAgICBNZW1vcnkgcmVxdWVzdCBpbmRleCAoR0VUX0NPVU5UOiBtYXhfY291bnQsIFFVRVJZOiBpbmRleClcXG4rICogQHRhZzogICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoQUREL0RFTClcXG4rICogQHJlYXNvbjogICAgIFJlYXNvbiBmb3IgZGVsZXRpb24gKERFTCBvbmx5KVxcbisgKiBAcnN2ZDogICAgICAgUmVzZXJ2ZWRcXG4rICogQG1heF9jb250aWc6IE1heGltdW0gY29udGlndW91cyBtZW1vcnkgc2l6ZSAoR0VUX0NPVU5UIG9ubHkpXFxuKyAqIEBzaXplOiAgICAgICBTaXplIG9mIG1lbW9yeSBpbiBieXRlcyAoQUREIG9ubHkpXFxuKyAqIEBidWZfcGE6ICAgICBETUEgYWRkcmVzcyBvZiBtZW1vcnkgKEFERCBvbmx5KVxcbisgKlxcbisgKiBVbmlmaWVkIGNvbW1hbmQgZm9yIGFsbCBob3N0IG1lbW9yeSBvcGVyYXRpb25zLiBGaWVsZHMgYXJlIHJldXNlZFxcbisgKiBhY3Jvc3Mgb3BlcmF0aW9ucyB0byBtaW5pbWl6ZSBvcGNvZGUgc3BhY2UgdXNhZ2UuXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIHtcXG4rXFx0dTggICAgIG9wY29kZTtcXG4rXFx0dTggICAgIG9wZXI7XFxuK1xcdF9fbGUxNiBpbmRleDtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0dTggICAgIHJlYXNvbjtcXG4rXFx0dTggICAgIHJzdmQ7XFxuK1xcdF9fbGUzMiBtYXhfY29udGlnO1xcbitcXHRfX2xlMzIgc2l6ZTtcXG4rXFx0X19sZTY0IGJ1Zl9wYTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCAtIEhPU1RfTUVNIGNvbXBsZXRpb25cXG4rICogQHN0YXR1czogICAgICAgU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxcbisgKiBAb3BlcjogICAgICAgICBPcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkXFxuKyAqIEBjb3VudDogICAgICAgIE51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHMgKEdFVF9DT1VOVClcXG4rICogQHNpemU6ICAgICAgICAgU2l6ZSBvZiBtZW1vcnkgcmVxdWVzdCBpbiBieXRlcyAoUVVFUlkpXFxuKyAqIEB0YWc6ICAgICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoUVVFUlkvREVMKVxcbisgKiBAcnN2ZDogICAgICAgICBSZXNlcnZlZFxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAge1xcbitcXHR1OCAgICAgc3RhdHVzO1xcbitcXHR1OCAgICAgb3BlcjtcXG4rXFx0X19sZTE2IGNvdW50O1xcbitcXHRfX2xlMzIgc2l6ZTtcXG4rXFx0X19sZTE2IHRhZztcXG4rXFx0dTggICAgIHJzdmRbNl07XFxuK307XFxuK1xcbiAvKlxcbiAgKiB1bmlvbiBwZHNfY29yZV9kZXZfY21kIC0gT3ZlcmxheSBvZiBjb3JlIGRldmljZSBjb21tYW5kIHN0cnVjdHVyZXNcXG4gICovXFxuQEAgLTQ2Miw2ICs5MTUsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCB7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NtZCAgIHZmX3NldGF0dHI7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9nZXRhdHRyX2NtZCAgIHZmX2dldGF0dHI7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NtZCAgICAgIHZmX2N0cmw7XFxuK1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAgICAgIHNlbmRfcGtnX2RhdGE7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHNlbmRfY29tcG9uZW50X3RibDtcXG4rXFx0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY21kICAgIGZpbmFsaXplX3VwZGF0ZTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAgbWF0Y2hfcmVjb3JkX2Rlc2M7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtO1xcbiB9O1xcbiBcXG4gLypcXG5AQCAtNDgwLDYgKzk0MSwxNCBAQCB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCB7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NvbXAgICB2Zl9zZXRhdHRyO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jb21wICAgdmZfZ2V0YXR0cjtcXG4gXFx0c3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY29tcCAgICAgIHZmX2N0cmw7XFxuK1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgZ2V0X2NvbXBvbmVudF9pbmZvO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wICAgICAgc2VuZF9wa2dfZGF0YTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHNlbmRfY29tcG9uZW50X3RibDtcXG4rXFx0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgICAgIHNlbmRfY29tcG9uZW50O1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgICAgZmluYWxpemVfdXBkYXRlO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAgbWF0Y2hfcmVjb3JkX2Rlc2M7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wICAgICAgICAgICBob3N0X21lbTtcXG4gfTtcXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzozMDozNC4xNDE4ODMwODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MDk1NDA0NDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGRzX2NvcmUgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWRhYmFmY2IyZTliMDNiNGUwOTY3Yzk0M2U1NDM0YzU5ZWQyYTdkZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDEzOjMwOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuaW5kZXggOWU4YTE2YzQ0MTAyOS4uNDk0ODdhMzVjMTYzMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuQEAgLTEwMiw2ICsxMDIsOTUgQEAgY3VycmVudGx5IGluIHVzZSwgYW5kIHRoYXQgYmFuayB3aWxsIHVzZWQgZm9yIHRoZSBuZXh0IGJvb3Q6OlxuICAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFxcXG4gICAgICAgICAgICAgZmlsZSBwZW5zYW5kby9kc2NfZndfMS42My4wLTIyLnRhclxuIFxuK0Zpcm13YXJlIE1hbmFnZW1lbnQgKFBMRE0pXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGRldmxpbmsgZmxhc2ggY29tbWFuZFxuK3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjpcbitcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBmaWxlIGZpcm13YXJlLnBsZG1md1xuK1xuK0luZGl2aWR1YWwgY29tcG9uZW50cyBjYW4gYWxzbyBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBuYW1lOjpcbitcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxuKyAgICAgICAgICAgIGZpbGUgZmlybXdhcmUucGxkbWZ3IGNvbXBvbmVudCBmdy5jcGxkXG4rXG4rUGVyLWNvbXBvbmVudCB1cGRhdGUgdXNlcyBkcml2ZXItZGVmaW5lZCBjb21wb25lbnQgbmFtZXMgKGZ3LCBmdy5jcGxkLFxuK2V0Yy4pLiBOb3QgYWxsIGNvbXBvbmVudHMgc3VwcG9ydCBwZXItY29tcG9uZW50IHVwZGF0ZSAtXG4rZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3RcbitiZSB1cGRhdGVkLlxuK1xuK0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50XG4rbmFtZSAoZS5nLiwgYGBmd2BgIGZvciBgYGZ3LmdvbGRgYCkgd2l0aCBhIGdvbGRmdyBwYWNrYWdlIGZpbGUgd2hlbiB0aGVcbitkZXZpY2Ugc3VwcG9ydHMgcGVyLWNvbXBvbmVudCB1cGRhdGUuIFRoZSBgYC5nb2xkYGAgc3VmZml4IGluIGRldmxpbmsgaW5mb1xuK291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuXG4rXG4rSW5mbyB2ZXJzaW9ucyAoUExETSlcbis9PT09PT09PT09PT09PT09PT09PVxuK1xuK0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSByZXBvcnRzIGNvbXBvbmVudCB2ZXJzaW9ucyB1c2luZyBkcml2ZXItZGVmaW5lZFxuK25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6XG4rXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBmb3IgUExETS1jYXBhYmxlIGZpcm13YXJlXG4rICAgOndpZHRoczogNSA1IDkwXG4rXG4rICAgKiAtIE5hbWVcbisgICAgIC0gVHlwZVxuKyAgICAgLSBEZXNjcmlwdGlvblxuKyAgICogLSBgYGZ3YGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIE1haW4gZmlybXdhcmVcbisgICAqIC0gYGBmdy5nb2xkYGBcbisgICAgIC0gc3RvcmVkXG4rICAgICAtIEdvbGQgKHJlY292ZXJ5KSBmaXJtd2FyZVxuKyAgICogLSBgYGZ3LmJvb3Rsb2FkZXJgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gQm9vdCBsb2FkZXJcbisgICAqIC0gYGBmdy5jcGxkYGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIENQTERcbisgICAqIC0gYGBmdy5zZWN1cmVgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gU2VjdXJlIGJvb3QgZmlybXdhcmVcbisgICAqIC0gYGBmdy5mcGdhYGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIEZQR0EgY29uZmlndXJhdGlvblxuKyAgICogLSBgYGZ3LnN1Y2BgXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuKyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlXG4rICAgKiAtIGBgZncuc3VjLmJvb3Rsb2FkZXJgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4rICAgKiAtIGBgZncudWJvb3RgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gVS1Cb290IGJvb3Rsb2FkZXJcbisgICAqIC0gYGBhc2ljLmlkYGBcbisgICAgIC0gZml4ZWRcbisgICAgIC0gVGhlIEFTSUMgdHlwZSBmb3IgdGhpcyBkZXZpY2VcbisgICAqIC0gYGBhc2ljLnJldmBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIFRoZSByZXZpc2lvbiBvZiB0aGUgQVNJQyBmb3IgdGhpcyBkZXZpY2VcbitcbitFeGFtcGxlIG91dHB1dDo6XG4rXG4rICAkIGRldmxpbmsgZGV2IGluZm8gcGNpLzAwMDA6MDA6MDUuMFxuKyAgcGNpLzAwMDA6MDA6MDUuMDpcbisgICAgZHJpdmVyIHBkc19jb3JlXG4rICAgIHNlcmlhbF9udW1iZXIgRkxNMTg0MjAwNzNcbisgICAgdmVyc2lvbnM6XG4rICAgICAgICBmaXhlZDpcbisgICAgICAgICAgYXNpYy5pZCAweDBcbisgICAgICAgICAgYXNpYy5yZXYgMHgwXG4rICAgICAgICBydW5uaW5nOlxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4rICAgICAgICAgIGZ3IDEuMy4wXG4rICAgICAgICAgIGZ3LmNwbGQgMy4xOFxuKyAgICAgICAgc3RvcmVkOlxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4rICAgICAgICAgIGZ3LmdvbGQgMS4yLjBcbisgICAgICAgICAgZncgMS4zLjBcbisgICAgICAgICAgZncuY3BsZCAzLjE4XG4rXG4gSGVhbHRoIFJlcG9ydGVyc1xuID09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5pbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5AQCAtMTcxLDYgKzE3MSw3IEBAIGNvbmZpZyBQRFNfQ09SRVxuIFx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJXG4gXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4rXHRzZWxlY3QgUExETUZXXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2ZcbiBcdCAgYWRhcHRlcnMuICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG5pbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuQEAgLTQ4OSw2ICs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjX2RldmNtZF9yZXNldChwZHNjKTtcbiBcbiBcdHBjaV9jbGVhcl9tYXN0ZXIocGRzYy1cdTAwM2VwZGV2KTtcbitcdGlmICghcGRzYy1cdTAwM2VwZGV2LVx1MDAzZWlzX3ZpcnRmbikge1xuK1x0XHR1MTYgdmFsO1xuK1xuK1x0XHQvKiBGbHVzaCBhbnkgaW4tZmxpZ2h0IERNQSBiZWZvcmUgZnJlZWluZyBidWZmZXJzLlxuK1x0XHQgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3JcbitcdFx0ICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLlxuK1x0XHQgKi9cbitcdFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2YWwpO1xuK1x0fVxuIFxuIFx0cGRzY19jb3JlX3VuaW5pdChwZHNjKTtcbiBcbkBAIC00OTcsNiArNTA2LDggQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjLVx1MDAzZXZpZnR5cGVfc3RhdHVzID0gTlVMTDtcbiBcdH1cbiBcbitcdHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7XG4rXHRwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7XG4gXHRwZHNjX2Rldl91bmluaXQocGRzYyk7XG4gXG4gXHRzZXRfYml0KFBEU0NfU19GV19ERUFELCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbkBAIC01MDYsNiArNTE3LDggQEAgaW50IHBkc2Nfc3RhcnQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0cGRzX2NvcmVfaW50cl9tYXNrKFx1MDAyNnBkc2MtXHUwMDNlaW50cl9jdHJsW3Bkc2MtXHUwMDNlYWRtaW5xY3EuaW50eF0sXG4gXHRcdFx0ICAgUERTX0NPUkVfSU5UUl9NQVNLX0NMRUFSKTtcbitcdHBkc2NfaG9zdF9tZW1fYWRkKHBkc2MpO1xuK1x0cGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShwZHNjKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01ODcsNiArNjAwLDggQEAgdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHRwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTtcbitcbiBcdGVyciA9IHBkc2Nfc2V0dXAocGRzYywgUERTQ19TRVRVUF9SRUNPVkVSWSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtNjcwLDMgKzY4NSwxNjEgQEAgdm9pZCBwZHNjX2hlYWx0aF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2Vjb25maWdfbG9jayk7XG4gfVxuK1xuK3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNLFxuK1x0XHQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCxcbitcdFx0Lmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KHRhZyksXG4rXHRcdC5ob3N0X21lbS5yZWFzb24gPSByZWFzb24sXG4rXHR9O1xuK1xuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGRlbCB0YWcgJWRcXG5cIiwgdGFnKTtcbitcdHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19ob3N0X21lbV9hZGRfb25lKHN0cnVjdCBwZHNjICpwZHNjLCBpbnQgaW5kZXgpXG4re1xuK1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtID0gXHUwMDI2cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2luZGV4XTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk7XG4rXHRjbWQuaG9zdF9tZW0uaW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7XG4rXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcXG5cIiwgaW5kZXgpO1xuK1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbitcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbitcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCJtZW0gcXVlcnkgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cIixcbitcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRobS1cdTAwM2VzaXplID0gbGUzMl90b19jcHUoY29tcC5ob3N0X21lbS5zaXplKTtcbitcdGhtLVx1MDAzZXRhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTtcbitcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwibWVtIHF1ZXJ5IHJldHVybmVkIHNpemUgJWQgdGFnICVkXFxuXCIsXG4rXHRcdGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZXRhZyk7XG4rXG4rXHRpZiAoIWhtLVx1MDAzZXNpemUgfHwgaG0tXHUwMDNlc2l6ZSBcdTAwM2UgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKSB7XG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiaW52YWxpZCBzaXplICVkIGZvciB0YWcgJWRcXG5cIixcbitcdFx0XHRobS1cdTAwM2VzaXplLCBobS1cdTAwM2V0YWcpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9kZWw7XG4rXHR9XG4rXG4rXHRobS1cdTAwM2VvcmRlciA9IGdldF9vcmRlcihobS1cdTAwM2VzaXplKTtcbitcdGhtLVx1MDAzZXBnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sIGhtLVx1MDAzZW9yZGVyKTtcbitcdGlmICghaG0tXHUwMDNlcGcpIHtcbitcdFx0ZGV2X3dhcm4ocGRzYy1cdTAwM2VkZXYsIFwiYWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcXG5cIixcbitcdFx0XHQgaG0tXHUwMDNlb3JkZXIsIGhtLVx1MDAzZXRhZyk7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyX2RlbDtcbitcdH1cbitcbitcdGhtLVx1MDAzZXBhID0gZG1hX21hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBobS1cdTAwM2VwZywgMCwgaG0tXHUwMDNlc2l6ZSxcbitcdFx0XHQgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4rXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cdTAwM2VkZXYsIGhtLVx1MDAzZXBhKSkge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcImRtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxcblwiLFxuK1x0XHRcdGhtLVx1MDAzZXRhZywgaG0tXHUwMDNlc2l6ZSk7XG4rXHRcdF9fZnJlZV9wYWdlcyhobS1cdTAwM2VwZywgaG0tXHUwMDNlb3JkZXIpO1xuK1x0XHRobS1cdTAwM2VwZyA9IE5VTEw7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gZXJyX2RlbDtcbitcdH1cbitcbitcdC8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi9cbitcdHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMrKztcbitcbitcdG1lbXNldChcdTAwMjZjbWQsIDAsIHNpemVvZihjbWQpKTtcbitcdG1lbXNldChcdTAwMjZjb21wLCAwLCBzaXplb2YoY29tcCkpO1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fQUREO1xuK1x0Y21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLVx1MDAzZXRhZyk7XG4rXHRjbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLVx1MDAzZXNpemUpO1xuK1x0Y21kLmhvc3RfbWVtLmJ1Zl9wYSA9IGNwdV90b19sZTY0KGhtLVx1MDAzZXBhKTtcbitcbitcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwiU2VuZGluZyBkZXZjbWQgZm9yIG1lbSBhZGQgdGFnICVkIHNpemUgJWQgcGEgJXBhZFxcblwiLFxuK1x0XHRobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIFx1MDAyNmhtLVx1MDAzZXBhKTtcbitcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rXHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwibWVtIGFkZCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZCBmb3IgdGFnICVkXFxuXCIsXG4rXHRcdFx0ZXJyLCBjb21wLnN0YXR1cywgaG0tXHUwMDNldGFnKTtcbitcdFx0ZXJyID0gZXJyID8gZXJyIDogLUVJTztcbitcdFx0Z290byBlcnJfZGVsO1xuK1x0fVxuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJtZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXFxuXCIsIGhtLVx1MDAzZXRhZyk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfZGVsOlxuK1x0LyogQWZ0ZXIgTUVNX1FVRVJZIHN1Y2NlZWRzLCBmaXJtd2FyZSBleHBlY3RzIE1FTV9BREQgb3IgTUVNX0RFTCAqL1xuK1x0cGRzY19ob3N0X21lbV9kZWxfb25lKHBkc2MsIGhtLVx1MDAzZXRhZywgUERTX1JDX0VOT01FTSk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHR1MTYgY291bnQ7XG4rXHRpbnQgZXJyO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIShwZHNjLVx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXHUwMDI2XG4rXHQgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UO1xuK1x0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xuK1x0Y21kLmhvc3RfbWVtLm1heF9jb250aWcgPSBjcHVfdG9fbGUzMihQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpO1xuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XFxuXCIsXG4rXHRcdFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XG4rXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK1x0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcIm1lbSBnZXQgY291bnQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cIixcbitcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Y291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksXG4rXHRcdCAgICBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7XG4rXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcIm1lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcXG5cIiwgY291bnQpO1xuK1x0aWYgKGNvdW50ID09IDApXG4rXHRcdHJldHVybjtcbitcbitcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzLCBjb3VudCxcbitcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcykge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBhbGxvYyBob3N0X21lbV9yZXFzIGFycmF5XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdGVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRicmVhaztcbitcdH1cbit9XG4rXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSsrKSB7XG4rXHRcdGRtYV91bm1hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGEsXG4rXHRcdFx0ICAgICAgIHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5zaXplLFxuK1x0XHRcdCAgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4rXHRcdF9fZnJlZV9wYWdlcyhwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGcsXG4rXHRcdFx0ICAgICBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ub3JkZXIpO1xuK1x0fVxuK1xuK1x0a2ZyZWUocGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzKTtcbitcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IE5VTEw7XG4rXHRwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzID0gMDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcbmluZGV4IGI3ZmU5YWQ3MzM0OTguLjc5MTc1NmE1MDg3MGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG5AQCAtNSw2ICs1LDcgQEBcbiAjZGVmaW5lIF9QRFNDX0hfXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW16b25lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGRzL3Bkc19jb21tb24uaFx1MDAzZVxuQEAgLTIzLDYgKzI0LDIwIEBAXG4gI2RlZmluZSBQRFNDX1NFVFVQX1JFQ09WRVJZXHRmYWxzZVxuICNkZWZpbmUgUERTQ19TRVRVUF9JTklUXHRcdHRydWVcbiBcbisvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZFxuKyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3NcbisgKi9cbisjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KVxuKyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NlxuK1xuK3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dm9pZCAqdmE7XG4rXHRzaXplX3Qgc2l6ZTtcbitcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjtcbit9O1xuK1xuIHN0cnVjdCBwZHNjX2Rldl9iYXIge1xuIFx0dm9pZCBfX2lvbWVtICp2YWRkcjtcbiBcdHBoeXNfYWRkcl90IGJ1c19hZGRyO1xuQEAgLTE0MSw2ICsxNTYsMTQgQEAgc3RydWN0IHBkc2NfdmlmdHlwZSB7XG4gXHRzdHJ1Y3QgcGRzX2F1eGlsaWFyeV9kZXYgKnBhZGV2O1xuIH07XG4gXG4rc3RydWN0IHBkc2NfaG9zdF9tZW0ge1xuK1x0dTMyIHNpemU7XG4rXHR1MTYgdGFnO1xuK1x0dTggb3JkZXI7XG4rXHRzdHJ1Y3QgcGFnZSAqcGc7XG4rXHRkbWFfYWRkcl90IHBhO1xuK307XG4rXG4gLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovXG4gZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHtcbiBcdFBEU0NfU19GV19ERUFELFx0XHQgICAgLyogc3RvcHBlZCwgd2FpdCBvbiBzdGFydHVwIG9yIHJlY292ZXJ5ICovXG5AQCAtMTg1LDYgKzIwOCw4IEBAIHN0cnVjdCBwZHNjIHtcbiBcdHN0cnVjdCBtdXRleCBkZXZjbWRfbG9jaztcdC8qIGxvY2sgZm9yIGRldl9jbWQgb3BlcmF0aW9ucyAqL1xuIFx0c3RydWN0IG11dGV4IGNvbmZpZ19sb2NrO1x0LyogbG9jayBmb3IgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zICovXG4gXHRzcGlubG9ja190IGFkbWlucV9sb2NrO1x0XHQvKiBsb2NrIGZvciBhZG1pbnEgb3BlcmF0aW9ucyAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDtcbitcdHNwaW5sb2NrX3QgZGVmZXJyZWRfZG1hX2xvY2s7XHQvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqL1xuIFx0cmVmY291bnRfdCBhZG1pbnFfcmVmY250O1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzO1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVncztcbkBAIC0xOTksNiArMjI0LDExIEBAIHN0cnVjdCBwZHNjIHtcbiBcdHU2NCBsYXN0X2VpZDtcbiBcdHN0cnVjdCBwZHNjX3ZpZnR5cGUgKnZpZnR5cGVfc3RhdHVzO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHBjaV9yZXNldF93b3JrO1xuK1xuK1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7XG4rXHR1MTYgbnVtX2hvc3RfbWVtX3JlcXM7XG4rXG4rXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzO1xuIH07XG4gXG4gLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLlxuQEAgLTI3NSwxNCArMzA1LDI0IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF92aWZ0eXBlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiB2b2lkIHBkc2NfZGVidWdmc19hZGRfaXJxcyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX3FjcShzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfcWNxICpxY3EpO1xuIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpO1xuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rdm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBcbiBpbnQgcGRzY19lcnJfdG9fZXJybm8oZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSBjb2RlKTtcbiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0ICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG5AQCAtMzE1LDExICszNTUsMjMgQEAgdm9pZCBwZHNjX3Byb2Nlc3NfYWRtaW5xKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7XG4gXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuK2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbitcdFx0XHQgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuK2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSk7XG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gXG4gdm9pZCBwZHNjX2Z3X2Rvd24oc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX3BjaV9yZXNldF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTtcbit2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXG4rXHRcdFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxuK1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcbitcbiAjZW5kaWYgLyogX1BEU0NfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xuaW5kZXggODEwYTBjZDliY2FjOC4uZWYwYTFiN2QxNTliNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbkBAIC0xNzgsMyArMTc4LDQ4IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpXG4gXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLVx1MDAzZWRlbnRyeSk7XG4gXHRxY3EtXHUwMDNlZGVudHJ5ID0gTlVMTDtcbiB9XG4rXG4rc3RhdGljIGludCBob3N0X21lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG07XG4rXHRpbnQgaTtcbitcbitcdGlmICghcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzIHx8IHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMgPT0gMCkge1xuK1x0XHRzZXFfcHV0cyhzZXEsIFwiTm8gaG9zdCBtZW1vcnkgYWxsb2NhdGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNlcV9wcmludGYoc2VxLCBcIkhvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxcblxcblwiLFxuK1x0XHQgICBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzKTtcbitcdHNlcV9wdXRzKHNlcSwgXCJUYWcgICAgU2l6ZSAgICAgICAgIE9yZGVyICBQQVxcblwiKTtcbitcdHNlcV9wdXRzKHNlcSwgXCItLS0gICAgLS0tLSAgICAgICAgIC0tLS0tICAtLVxcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXM7IGkrKykge1xuK1x0XHRobSA9IFx1MDAyNnBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXTtcbitcbitcdFx0aWYgKCFobS1cdTAwM2VwZylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2VxX3ByaW50ZihzZXEsIFwiJS02dSAlLTEydSAlLTZ1ICVwYWRcXG5cIixcbitcdFx0XHQgICBobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZW9yZGVyLCBcdTAwMjZobS1cdTAwM2VwYSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGhvc3RfbWVtKTtcbitcbit2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aWYgKCEocGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuK1x0ICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpXG4rXHRcdHJldHVybjtcbitcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJob3N0X21lbVwiLCAwNDAwLCBwZHNjLVx1MDAzZWRlbnRyeSxcbitcdFx0XHQgICAgcGRzYywgXHUwMDI2aG9zdF9tZW1fZm9wcyk7XG4rfVxuK1xuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHRkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKFwiaG9zdF9tZW1cIiwgcGRzYy1cdTAwM2VkZW50cnkpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbmluZGV4IGJkZWQ2YjMzMjg5Y2UuLmM1MDc3ODE3NWUyZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xuQEAgLTEyNiw3ICsxMjYsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGRzY19kZXZjbWRfc3RyKGludCBvcGNvZGUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXG4rc3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzLFxuK1x0XHRcdCAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtXHUwMDNlZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuQEAgLTE3OSw3ICsxODAsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFxuIFx0c3RhdHVzID0gcGRzY19kZXZjbWRfc3RhdHVzKHBkc2MpO1xuIFx0ZXJyID0gcGRzY19lcnJfdG9fZXJybm8oc3RhdHVzKTtcbi1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUFHQUlOKVxuK1x0aWYgKGRvX21zZyBcdTAwMjZcdTAwMjYgZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiBcdFx0ZGV2X2VycihkZXYsIFwiREVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcXG5cIixcbiBcdFx0XHRvcGNvZGUsIHBkc2NfZGV2Y21kX3N0cihvcGNvZGUpLCBzdGF0dXMsIGVycixcbiBcdFx0XHRFUlJfUFRSKGVycikpO1xuQEAgLTE4Nyw4ICsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuLVx0XHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzLFxuK1x0XHRcdFx0Y29uc3QgYm9vbCBkb19tc2cpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xOTcsMTYgKzE5OSw2MyBAQCBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXG4gXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWNtZCwgY21kLCBzaXplb2YoKmNtZCkpO1xuIFx0cGRzY19kZXZjbWRfZGJlbGwocGRzYyk7XG4tXHRlcnIgPSBwZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzKTtcbitcdGVyciA9IF9fcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtXHUwMDNlb3Bjb2RlLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcbiBcbiBcdGlmICgoZXJyID09IC1FTlhJTyB8fCBlcnIgPT0gLUVUSU1FRE9VVCkgXHUwMDI2XHUwMDI2IHBkc2MtXHUwMDNld3EpXG4gXHRcdHF1ZXVlX3dvcmsocGRzYy1cdTAwM2V3cSwgXHUwMDI2cGRzYy1cdTAwM2VoZWFsdGhfd29yayk7XG4gXHRlbHNlXG4gXHRcdG1lbWNweV9mcm9taW8oY29tcCwgXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2Vjb21wLCBzaXplb2YoKmNvbXApKTtcbiBcbitcdGlmIChlcnIgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pXG4rXHRcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcbitcdFx0XHQgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsXG4rXHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuK3tcbitcdGVudHJ5LVx1MDAzZWRtYV9hZGRyID0gZG1hX2FkZHI7XG4rXHRlbnRyeS1cdTAwM2V2YSA9IHZhO1xuK1x0ZW50cnktXHUwMDNlc2l6ZSA9IHNpemU7XG4rXHRlbnRyeS1cdTAwM2VkaXIgPSBkaXI7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4rXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4rfVxuK1xuK3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wO1xuK1x0TElTVF9IRUFEKGxvY2FsX2xpc3QpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuK1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9saXN0LCBcdTAwMjZsb2NhbF9saXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsIFx1MDAyNmxvY2FsX2xpc3QsIGxpc3QpIHtcbitcdFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZW50cnktXHUwMDNlZG1hX2FkZHIsXG4rXHRcdFx0XHQgZW50cnktXHUwMDNlc2l6ZSwgZW50cnktXHUwMDNlZGlyKTtcbitcdFx0a2ZyZWUoZW50cnktXHUwMDNldmEpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0KTtcbitcdFx0a2ZyZWUoZW50cnkpO1xuK1x0fVxuK31cbitcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuK3tcbitcdHJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTtcbit9XG4rXG4raW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuK1x0XHRcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbit7XG4rXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xuK31cbitcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiB7XG5AQCAtMjE5LDYgKzI2OCw0NyBAQCBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsXG4rXHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHQgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCxcbitcdFx0XHRcdCAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpXG4re1xuK1x0aW50IGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4rXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpIHtcbitcdFx0ZXJyID0gLUVOWElPO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcdGlmIChkYXRhX2xlbiBcdTAwM2Ugc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpIHtcbitcdFx0ZXJyID0gLUVOT1NQQztcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEsIGRhdGEsIGRhdGFfbGVuKTtcbitcdGVyciA9IF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGRvX21zZyk7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuK1x0XHRcdCAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxuK1x0XHRcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbit7XG4rXHRyZXR1cm4gX19wZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgY21kLCBkYXRhLCBkYXRhX2xlbixcbitcdFx0XHRcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XG4rfVxuK1xuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbitcdFx0XHRcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbitcdFx0XHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXG4re1xuK1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXG4rXHRcdFx0XHQgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTtcbit9XG4rXG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuQEAgLTI0MiwxNSArMzMyLDE3IEBAIGludCBwZHNjX2RldmNtZF9yZXNldChzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYylcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcixcbitcdFx0XHRcdCAgICAgICBib29sIGRvX21zZylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmlkZW50aWZ5Lm9wY29kZSA9IFBEU19DT1JFX0NNRF9JREVOVElGWSxcbi1cdFx0LmlkZW50aWZ5LnZlciA9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSxcbitcdFx0LmlkZW50aWZ5LnZlciA9IGRydl9pZGVudF92ZXIsXG4gXHR9O1xuIFxuLVx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCxcbitcdFx0XHRcdCAgICBkb19tc2cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcbkBAIC0yNzMsOCArMzY1LDkgQEAgc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcImZ3X3ZlcnNpb24gJXNcXG5cIiwgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxuK3N0YXRpYyBpbnQgcGRzY19pZGVudGlmeV92ZXIoc3RydWN0IHBkc2MgKnBkc2MsIHU4IGRydl9pZGVudF92ZXIpXG4ge1xuK1x0Ym9vbCBkb19tc2cgPSBkcnZfaWRlbnRfdmVyID09IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMTtcbiBcdHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307XG4gXHRzaXplX3Qgc3o7XG4gXHRpbnQgZXJyO1xuQEAgLTI5NywxOSArMzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoZHJ2KSwgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBcdTAwMjZkcnYsIHN6KTtcbiBcbi1cdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTtcbitcdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjLCBkcnZfaWRlbnRfdmVyLCBkb19tc2cpO1xuIFx0aWYgKCFlcnIpIHtcbiBcdFx0c3ogPSBtaW5fdChzaXplX3QsIHNpemVvZihwZHNjLVx1MDAzZWRldl9pZGVudCksXG4gXHRcdFx0ICAgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0XHRtZW1jcHlfZnJvbWlvKFx1MDAyNnBkc2MtXHUwMDNlZGV2X2lkZW50LCBcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEsIHN6KTtcbitcbitcdFx0LyogVjEgZmlybXdhcmUgZG9lc24ndCBzZXQgY2FwYWJpbGl0aWVzLCBzbyB0aGUgZmllbGQgbWF5XG4rXHRcdCAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGRzYy1cdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcdTAwM2MgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKVxuK1x0XHRcdHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4gXG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiQ2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxuXCIsXG4tXHRcdFx0RVJSX1BUUihlcnIpKTtcbitcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXG4gXHRpZiAoaXNwcmludChwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb25bMF0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlzYXNjaWkocGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSlcbkBAIC0zMjYsNiArNDIyLDI2IEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdC8qIE9sZGVyIGZpcm13YXJlIHJlamVjdHMgYW55dGhpbmcgYnV0IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxuK1x0ICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb25cbitcdCAqIHJlamVjdGlvbi4gRG9uJ3QgcmV0cnkgb24gb3RoZXIgZXJyb3JzIGxpa2UgLUVOWElPLy1FVElNRURPVVRcbitcdCAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuXG4rXHQgKi9cbitcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMik7XG4rXHRpZiAoZXJyID09IC1FSU5WQUwpXG4rXHRcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSk7XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcIkNhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiB2b2lkIHBkc2NfZGV2X3VuaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcbiB7XG4gXHRpZiAocGRzYy1cdTAwM2VpbnRyX2luZm8pIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbkBAIC05MCwxMyArOTAsMTEyIEBAIGludCBwZHNjX2RsX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdCAgIFwiQ29tcG9uZW50IHVwZGF0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCIpO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbylcbit7XG4rXHRlbnVtIGRldmxpbmtfaW5mb192ZXJzaW9uX3R5cGUgdmVyX3R5cGU7XG4rXHR1MTYgZmxhZ3MgPSBsZTE2X3RvX2NwdShpbmZvLVx1MDAzZWZsYWdzKTtcbitcdGNoYXIgKnZlciA9IGluZm8tXHUwMDNldmVyc2lvbjtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHRjaGFyIGJ1ZlszMl07XG4rXG4rXHQvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgXCJmd1wiICovXG4rXHRpZiAoaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcbitcdFx0aWYgKGluZm8tXHUwMDNlc2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQpXG4rXHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCJmdy5nb2xkXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCJmd1wiKTtcbitcdH0gZWxzZSB7XG4rXHRcdG5hbWUgPSBwZHNjX2Z3X3R5cGVfdG9fbmFtZShpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlKTtcbitcdFx0aWYgKCFuYW1lKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRpZiAoaW5mby1cdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcbitcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcImZ3LiVzLmdvbGRcIiwgbmFtZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcImZ3LiVzXCIsIG5hbWUpO1xuK1x0fVxuK1xuK1x0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUpXG4rXHRcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQpIHtcbitcdFx0aW50IGVycjtcbitcbitcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgYnVmLCB2ZXIpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykge1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsXG4rXHRcdFx0XHRcdFx0XHQgICB2ZXIsIHZlcl90eXBlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy1cdTAwM2VmdywgZXh0YWNrKTtcbitcdGlmIChmbGFncyBcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQKSB7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXRfZXh0KHJlcSwgYnVmLFxuK1x0XHRcdFx0XHRcdFx0ICB2ZXIsIHZlcl90eXBlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfZndfdmVyKHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsIGNoYXIgKmZ3X3Zlcilcbit7XG4rXHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLFxuK1x0XHRcdFx0XHRcdERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsXG4rXHRcdFx0XHRcdFx0ZndfdmVyKTtcbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbitcdHU4IG51bV9jb21wb25lbnRzO1xuK1x0aW50IGVycjtcbitcdGludCBpO1xuK1xuK1x0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuXG4rXHQgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuXG4rXHQgKiBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZSgpIGNhbiB6ZXJvIGl0IGNvbmN1cnJlbnRseSBkdXJpbmdcbitcdCAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm9cbitcdCAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuXG4rXHQgKi9cbitcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XG4rXHRpZiAoIW51bV9jb21wb25lbnRzKSB7XG4rXHRcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuK1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK1x0XHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpO1xuK1x0XHRpZiAoIW51bV9jb21wb25lbnRzKVxuK1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuK1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK1x0fVxuK1xuK1x0bnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLFxuK1x0XHRcdCAgICAgICBsZTE2X3RvX2NwdShwZHNjLVx1MDAzZWRldl9pZGVudC5tYXhfZndfc2xvdHMpKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0ZXJyID0gcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHJlcSxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBjaGFyICpmd19zbG90bmFtZXNbXSA9IHtcbkBAIC0xMDUsOCArMjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xuIFx0XCJmdy5tYWluZndiXCIsXG4gfTtcbiBcbi1pbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4tXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnQgcGRzY19kbF9md19saXN0X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmZ3X2NvbnRyb2wub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZXX0NPTlRST0wsXG5AQCAtMTQwLDEyICsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsXG4tXHRcdFx0XHRcdCAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxuLVx0XHRcdFx0XHQgICAgICAgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdC8qIFZlcnNpb24gMTogcmVwb3J0IGZ3IGZyb20gZGV2X2luZm8gKHJ1bm5pbmcgb25seSkgKi9cbitcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLCBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK31cbitcbitpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbitcdGNoYXIgYnVmWzMyXTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocGRzYy1cdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikge1xuK1x0XHRlcnIgPSBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiMHgleFwiLCBwZHNjLVx1MDAzZWRldl9pbmZvLmFzaWNfdHlwZSk7XG4gXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuIFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5pbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5AQCAtMSw2ICsxLDkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodChjKSAyMDIzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsZG1mdy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJjb3JlLmhcIlxuIFxuIC8qIFRoZSB3b3JzdCBjYXNlIHdhaXQgZm9yIHRoZSBpbnN0YWxsIGFjdGl2aXR5IGlzIGFib3V0IDI1IG1pbnV0ZXMgd2hlblxuQEAgLTE0LDYgKzE3LDU4IEBAXG4gLyogTnVtYmVyIG9mIHBlcmlvZGljIGxvZyB1cGRhdGVzIGR1cmluZyBmdyBmaWxlIGRvd25sb2FkICovXG4gI2RlZmluZSBQRFNDX0ZXX0lOVEVSVkFMX0ZSQUNUSU9OXHQzMlxuIFxuKyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfUFJFRklYXHRcdFwiZncuXCJcbisjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXFxcbitcdChzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSArIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTilcbitcbisvKiBEcml2ZXItZGVmaW5lZCBjb21wb25lbnQgdHlwZSB0byBuYW1lIG1hcHBpbmcuXG4rICogUERTX0NPUkVfRldfVFlQRV9NQUlOIGlzIE5VTEwgLSBoYW5kbGVkIHNwZWNpYWxseSBhcyBcImZ3XCIgd2l0aG91dCBwcmVmaXguXG4rICovXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZHNjX2Z3X3R5cGVfbmFtZXNbXSA9IHtcbitcdFtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfQk9PVF0gICAgICA9IFwiYm9vdGxvYWRlclwiLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfQ1BMRF0gICAgICA9IFwiY3BsZFwiLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfU0VDVVJFXSAgICA9IFwic2VjdXJlXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9GUEdBXSAgICAgID0gXCJmcGdhXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTl0gID0gXCJzdWNcIixcbitcdFtQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UXSAgPSBcInN1Yy5ib290bG9hZGVyXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9VQk9PVF0gICAgID0gXCJ1Ym9vdFwiLFxuK307XG4rXG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSlcbit7XG4rXHRpZiAodHlwZSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpIFx1MDAyNlx1MDAyNiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pXG4rXHRcdHJldHVybiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV07XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSBpbiBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldCgpICovXG4rXHRXUklURV9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB1OCBwZHNjX25hbWVfdG9fZndfdHlwZShjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHNpemVfdCBwcmVmaXhfbGVuO1xuK1x0aW50IGk7XG4rXG4rXHQvKiBcImZ3XCIgd2l0aG91dCBzdWZmaXggbWFwcyB0byBtYWluIGZpcm13YXJlICovXG4rXHRpZiAoIXN0cmNtcChuYW1lLCBcImZ3XCIpKVxuK1x0XHRyZXR1cm4gUERTX0NPUkVfRldfVFlQRV9NQUlOO1xuK1xuK1x0cHJlZml4X2xlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCk7XG4rXHRpZiAocHJlZml4X2xlbilcbitcdFx0bmFtZSArPSBwcmVmaXhfbGVuO1xuK1xuK1x0Zm9yIChpID0gMTsgaSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpOyBpKyspIHtcbitcdFx0aWYgKHBkc2NfZndfdHlwZV9uYW1lc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdHJjbXAobmFtZSwgcGRzY19md190eXBlX25hbWVzW2ldKSlcbitcdFx0XHRyZXR1cm4gaTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdFx0XHRcdCAgdTMyIG9mZnNldCwgdTMyIGxlbmd0aClcbiB7XG5AQCAtMjMsNyArNzgsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdC5md19kb3dubG9hZC5hZGRyID0gY3B1X3RvX2xlNjQoYWRkciksXG4gXHRcdC5md19kb3dubG9hZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuIFx0fTtcbi1cdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXG4gXHRyZXR1cm4gcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4gfVxuQEAgLTk1LDkgKzE1MCwxMiBAQCBzdGF0aWMgaW50IHBkc2NfZndfc3RhdHVzX2xvbmdfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbi1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnRcbitwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4rXHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwYXJhbXMtXHUwMDNlZnc7XG4gXHR1MzIgYnVmX3N6LCBjb3B5X3N6LCBvZmZzZXQ7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4gXHRpbnQgbmV4dF9pbnRlcnZhbDtcbkBAIC0xMDUsNiArMTYzLDEyIEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiBcdGludCBlcnIgPSAwO1xuIFx0aW50IGZ3X3Nsb3Q7XG4gXG4rXHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGRldl9pbmZvKHBkc2MtXHUwMDNlZGV2LCBcIkluc3RhbGxpbmcgZmlybXdhcmVcXG5cIik7XG4gXG4gXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpXG5AQCAtMTk1LDMgKzI1OSw3MjkgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuIFx0XHRcdFx0XHRcdCAgIE5VTEwsIDAsIDApO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rXG4rc3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYge1xuK1x0dTE2IGNvbXBvbmVudF9pZDtcbitcdGJvb2wgc2tpcDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTtcbit9O1xuK1xuK3N0cnVjdCBwZHNfY29yZV9md3VfcHJpdiB7XG4rXHRzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7XG4rXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXM7XG4rXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYztcbitcdHN0cnVjdCBsaXN0X2hlYWQgY29tcG9uZW50cztcbitcdGJvb2wgY29tcG9uZW50X2ZvdW5kO1xuK307XG4rXG4rc3RhdGljIHZvaWQgcGRzY19mcmVlX2Z3dV9wcml2KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXYsICp0bXA7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29tcG9uZW50X3ByaXYsIHRtcCwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzLFxuK1x0XHRcdFx0IGxpc3RfZW50cnkpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2Y29tcG9uZW50X3ByaXYtXHUwMDNlbGlzdF9lbnRyeSk7XG4rXHRcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGRlc2NfdHlwZSxcbitcdFx0XHRcdFx0IHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsXG4rXHRcdFx0XHRcdCB1OCAqbWF0Y2gpXG4re1xuK1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsXG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy52ZXIgPSAxLFxuK1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksXG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSxcbitcdH07XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFx1MDAyNmNtZCwgZGVzY19kYXRhLCBkZXNjX3NpemUsXG4rXHRcdFx0XHQgICAgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rXHQqbWF0Y2ggPSBjb21wLm1hdGNoX3JlY29yZF9kZXNjLm1hdGNoO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGJvb2wgcGRzY19tYXRjaF9yZWNvcmRfZGVzY3Moc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgcGxkbWZ3X3JlY29yZCAqcmVjb3JkKVxuK3tcbitcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuK1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4rXHRzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjO1xuK1xuK1x0aWYgKCFwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZChjb250ZXh0LCByZWNvcmQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsIFx1MDAyNnJlY29yZC1cdTAwM2VkZXNjcywgZW50cnkpIHtcbitcdFx0dTggbWF0Y2g7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdHN3aXRjaCAoZGVzYy1cdTAwM2V0eXBlKSB7XG4rXHRcdC8qIHNraXAgdHlwZXMgY2hlY2tlZCBpbiBwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZCAqL1xuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfVkVORE9SX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCVkVORE9SX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCREVWX0lEOlxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghZGVzYy1cdTAwM2VzaXplKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0ZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy1cdTAwM2V0eXBlLFxuK1x0XHRcdFx0XHRcdCAgICBkZXNjLVx1MDAzZXNpemUsIGRlc2MtXHUwMDNlZGF0YSxcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2bWF0Y2gpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldixcbitcdFx0XHRcdFwibWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRkZXNjLVx1MDAzZXR5cGUsIGRlc2MtXHUwMDNlc2l6ZSwgZXJyKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0LyogYWxsIHJlY29yZCBkZXNjcmlwdG9ycyBtdXN0IG1hdGNoICovXG4rXHRcdGlmICghbWF0Y2gpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxuK1x0XHRcdFx0XHQgdTE2IGxlbmd0aCwgdTE2IG9mZnNldCwgdTE2IHRvdGFsX2xlbilcbit7XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbitcdFx0LnNlbmRfcGtnX2RhdGEub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEsXG4rXHRcdC5zZW5kX3BrZ19kYXRhLnZlciA9IDEsXG4rXHRcdC5zZW5kX3BrZ19kYXRhLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChhZGRyKSxcbitcdFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihsZW5ndGgpLFxuK1x0XHQuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLFxuK1x0XHQuc2VuZF9wa2dfZGF0YS50b3RhbF9sZW4gPSBjcHVfdG9fbGUxNih0b3RhbF9sZW4pLFxuK1x0fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcbitcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsXG4rXHRcdFx0XHQgIHUxNiBsZW5ndGgpXG4re1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4rXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR1OCAqcGFja2FnZV9kYXRhO1xuK1x0dTMyIG9mZnNldDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWxlbmd0aClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWRlZmVycmVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBhY2thZ2VfZGF0YSA9IGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcGFja2FnZV9kYXRhKSB7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBkbWFfbWFwIHBhY2thZ2VfZGF0YSBsZW5ndGggMHgleFxcblwiLFxuK1x0XHRcdGxlbmd0aCk7XG4rXHRcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuZ3RoOyBvZmZzZXQgKz0gUERTX1BBR0VfU0laRSkge1xuK1x0XHR1MzIgY29weV9zejtcbitcbitcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSwgbGVuZ3RoIC0gb2Zmc2V0KTtcbitcdFx0ZXJyID0gcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEocGRzYywgZG1hX2FkZHIgKyBvZmZzZXQsXG4rXHRcdFx0XHRcdFx0ICAgIGNvcHlfc3osIG9mZnNldCwgbGVuZ3RoKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGFcIik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuK1x0XHRcdFx0ICAgICAgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0a2ZyZWUocGFja2FnZV9kYXRhKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0aWYgKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldLmNvbXBvbmVudF90eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbitcdFx0XHRcdFx0ICAgdTggY29tcG9uZW50X2lkLCB1OCB0eXBlKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbitcbitcdFx0aWYgKGluZm8tXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSsrKSB7XG4rXHRcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9XG4rXHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4rXG4rXHRcdGlmIChpbmZvLVx1MDAzZWlkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkKVxuK1x0XHRcdHJldHVybiBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2Nfc2tpcF9jb21wb25lbnQoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2LFxuK1x0XHRcdFx0dTE2IGNvbXBvbmVudF9pZClcbit7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXBvbmVudF9wcml2LCBcdTAwMjZwcml2LVx1MDAzZWNvbXBvbmVudHMsIGxpc3RfZW50cnkpIHtcbitcdFx0aWYgKGNvbXBvbmVudF9wcml2LVx1MDAzZWNvbXBvbmVudF9pZCA9PSBjb21wb25lbnRfaWQpXG4rXHRcdFx0cmV0dXJuIGNvbXBvbmVudF9wcml2LVx1MDAzZXNraXA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50LFxuK1x0XHRcdFx0ICAgICB1OCB0cmFuc2Zlcl9mbGFnKVxuK3tcbitcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuK1x0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdGJvb2wgc2tpcF9jb21wb25lbnQgPSBmYWxzZTtcbitcdHU4IHJlcXVlc3RlZF90eXBlID0gMDtcbitcdHUxNiBidWZfc3osIHRibF9zejtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0ZGV2X2RiZyhkZXYsXG4rXHRcdFwiY29tcG9uZW50IG5hbWUgJXMgY2xhc3NpZmljYXRpb24gJXUgaWQgJXUgYWN0aXZhdGlvbl9tZXRob2QgJXUgdmVyX2xlbiAlZCB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldSB0cmFuc2Zlcl9mbGFnIDB4JTAyeFxcblwiLFxuK1x0XHRwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbitcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbitcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4sXG4rXHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3N0cmluZywgY29tcG9uZW50LVx1MDAzZWluZGV4LFxuK1x0XHRjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpO1xuK1xuK1x0Y29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdHJlcXVlc3RlZF90eXBlID0gcGRzY19uYW1lX3RvX2Z3X3R5cGUocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbitcdFx0aWYgKGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyIFx1MDAzZSBVOF9NQVggfHxcbitcdFx0ICAgICFwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUocGRzYyxcbitcdFx0XHRcdFx0XHQgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsXG4rXHRcdFx0XHRcdFx0ICAgIHJlcXVlc3RlZF90eXBlKSkge1xuK1x0XHRcdHNraXBfY29tcG9uZW50ID0gdHJ1ZTtcbitcdFx0XHRnb3RvIGFkZF9jb21wb25lbnRfcHJpdjtcbitcdFx0fVxuK1x0XHRwcml2LVx1MDAzZWNvbXBvbmVudF9mb3VuZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRidWZfc3ogPSBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKTtcbitcdHRibF9zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF90YmwsIHZlcnNpb25fc3RyLFxuK1x0XHRcdCAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcdGlmICh0Ymxfc3ogXHUwMDNlIGJ1Zl9zeikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxuXCIsXG4rXHRcdFx0dGJsX3N6LCBidWZfc3opO1xuK1x0XHRlcnIgPSAtRU5PU1BDO1xuK1x0XHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XG4rXHR9XG4rXHRjb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfdGJsKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbitcdH1cbitcbitcdGNvbXBvbmVudF90YmwtXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XG4rXHRcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcbitcdGNvbXBvbmVudF90YmwtXHUwMDNlY2xhc3NpZmljYXRpb24gPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXHUwMDNlY2xhc3NpZmljYXRpb24pO1xuK1x0Y29tcG9uZW50X3RibC1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0Y29tcG9uZW50X3RibC1cdTAwM2V0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZztcbitcdGNvbXBvbmVudF90YmwtXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3R5cGU7XG4rXHRjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbjtcbitcdG1lbWNweShjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDtcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90YmwudmVyID0gMTtcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDtcbitcbitcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBcdTAwMjZjbWQsIGNvbXBvbmVudF90YmwsIHRibF9zeixcbitcdFx0XHRcdCAgICBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbitcdGtmcmVlKGNvbXBvbmVudF90YmwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4rXHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbitcdH1cbitcbitcdHNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTtcbitcbithZGRfY29tcG9uZW50X3ByaXY6XG4rXHRjb21wb25lbnRfcHJpdi1cdTAwM2Vza2lwID0gc2tpcF9jb21wb25lbnQ7XG4rXHRjb21wb25lbnRfcHJpdi1cdTAwM2Vjb21wb25lbnRfaWQgPSBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcjtcbitcdGxpc3RfYWRkKFx1MDAyNmNvbXBvbmVudF9wcml2LVx1MDAzZWxpc3RfZW50cnksIFx1MDAyNnByaXYtXHUwMDNlY29tcG9uZW50cyk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX2NvbXBvbmVudF9wcml2OlxuK1x0a2ZyZWUoY29tcG9uZW50X3ByaXYpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sXG4rXHRcdC5nZXRfY29tcG9uZW50X2luZm8udmVyID0gMSxcbitcdH07XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAqbGlzdF9pbmZvO1xuK1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR1OCBudW1fY29tcG9uZW50cztcbitcdGludCBlcnIsIGk7XG4rXG4rXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7XG4rXHRpZiAoIWRlZmVycmVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGxpc3RfaW5mbyA9IGt6YWxsb2MoUERTX1BBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxpc3RfaW5mbykge1xuK1x0XHRrZnJlZShkZWZlcnJlZCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgbGlzdF9pbmZvLCBQRFNfUEFHRV9TSVpFLFxuK1x0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcbitcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldixcbitcdFx0XHRcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXFxuXCIsXG4rXHRcdFx0UERTX1BBR0VfU0laRSk7XG4rXHRcdGtmcmVlKGxpc3RfaW5mbyk7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoUERTX1BBR0VfU0laRSk7XG4rXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XG4rXG4rXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQgKiAyKTtcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLCBsaXN0X2luZm8sXG4rXHRcdFx0XHQgICAgICBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZG1hX2FkZHIsIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkge1xuK1x0XHQvKiBEb24ndCBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgdmVyc2lvbiAwIGhhc1xuK1x0XHQgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGVcbitcdFx0ICogdGhlaXIgZmlybXdhcmVcbitcdFx0ICovXG4rXHRcdGRldl93YXJuX29uY2UocGRzYy1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICAgXCJJbmNvbXBhdGlibGUgZ2V0X2NvbXBvbmVudF9pbmZvIHZlcnNpb24gJXUgcmVwb3J0ZWQgYnkgZmlybXdhcmVcXG5cIixcbitcdFx0XHQgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpO1xuK1x0XHRlcnIgPSAwO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdG51bV9jb21wb25lbnRzID0gbGlzdF9pbmZvLVx1MDAzZW51bV9jb21wb25lbnRzO1xuK1x0aWYgKG51bV9jb21wb25lbnRzIFx1MDAzZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMgPSBudW1fY29tcG9uZW50cztcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbitcbitcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxpc3RfaW5mby1cdTAwM2VpbmZvW2ldLCBzaXplb2YoKmluZm8pKTtcbitcdFx0aW5mby1cdTAwM2V2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIC0gMV0gPSAwO1xuK1x0XHRpbmZvLVx1MDAzZW5hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIC0gMV0gPSAwO1xuK1x0fVxuK1xuK291dDpcbitcdGtmcmVlKGxpc3RfaW5mbyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcbitcdFx0XHRcdCAgICAgIHUxNiBpbmZvX3N6LCBkbWFfYWRkcl90IGFkZHIsIHUzMiBsZW5ndGgsXG4rXHRcdFx0XHQgICAgICB1MzIgb2Zmc2V0LCB1MTYgc2xvdF9pZCxcbitcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULFxuK1x0XHQuc2VuZF9jb21wb25lbnQudmVyID0gMSxcbitcdFx0LnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJULFxuK1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxuK1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuK1x0XHQuc2VuZF9jb21wb25lbnQub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KSxcbitcdFx0LnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDMwMCAqIEhaO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuK1x0dW5zaWduZWQgbG9uZyBlbmRfdGltZTtcbitcdGludCBlcnI7XG4rXG4rXHRzdGFydF90aW1lID0gamlmZmllcztcbitcdGVuZF90aW1lID0gc3RhcnRfdGltZSArIHRpbWVvdXQ7XG4rXHRkbyB7XG4rXHRcdC8qIHByZXZlbnQgbm9pc3kvYmVuaWduIGRldmNtZCBmYWlsdXJlcyAqL1xuK1x0XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2cocGRzYywgXHUwMDI2Y21kLCBpbmZvLCBpbmZvX3N6LFxuK1x0XHRcdFx0XHRcdCAgY29tcCwgNjApO1xuK1x0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGlmIHJlcXVpcmVkLCBzdWJzZXF1ZW50IGNvbW1hbmRzIGNoZWNrIHN0YXR1cyBvZlxuK1x0XHQgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJuc1xuK1x0XHQgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZyxcbitcdFx0ICogZWxzZSB3ZSBnZXQgdGhlIGZpbmFsIGNvbW1hbmQgc3RhdHVzLlxuK1x0XHQgKi9cbitcdFx0Y21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUztcbitcdFx0bXNsZWVwKDIwKTtcbitcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7XG4rXG4rXHRpZiAoZXJyID09IC1FQUdBSU4gfHwgZXJyID09IC1FVElNRURPVVQpXG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIHRpbWVkIG91dFxcblwiKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmluZm8sXG4rXHRcdFx0XHQgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LFxuK1x0XHRcdFx0ICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCxcbitcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuK3tcbitcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dTggKmNvbXBvbmVudF9kYXRhO1xuK1x0aW50IGVycjtcbitcbitcdGRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGVmZXJyZWQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y29tcG9uZW50X2RhdGEgPSBrbWVtZHVwKGRhdGEsIGNvcHlfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfZGF0YSkge1xuK1x0XHRrZnJlZShkZWZlcnJlZCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbitcdGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkge1xuK1x0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9kYXRhIGF0IG9mZnNldCAweCV4IGNvcHlfc3ogMHgleFxcblwiLFxuK1x0XHRcdG9mZnNldCwgY29weV9zeik7XG4rXHRcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcbitcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGVyciA9IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHBkc2MsIGluZm8sIGluZm9fc3osIGRtYV9hZGRyLFxuK1x0XHRcdFx0XHQgY29weV9zeiwgb2Zmc2V0LCBzbG90X2lkLCBjb21wKTtcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuK1x0XHRcdFx0ICAgICAgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbitcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbitcdFx0XHRcdHN0cnVjdCBwbGRtZndfY29tcG9uZW50ICpjb21wb25lbnQpXG4re1xuK1x0Y2hhciBjb21wb25lbnRfbmFtZV9idWZbUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTl07XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbitcdHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvO1xuK1x0Y29uc3QgY2hhciAqY29tcG9uZW50X25hbWUgPSBOVUxMO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdHUxNiBidWZfc3osIGluZm9fc3o7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4rXHR1OCBjb21wb25lbnRfdHlwZTtcbitcdHUzMiB0b3RhbF9sZW47XG4rXHR1MzIgb2Zmc2V0O1xuK1x0aW50IGVycjtcbitcbitcdGNvbXBvbmVudF90eXBlID0gcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQocGRzYyxcbitcdFx0XHRcdFx0XHQgICAgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0aWYgKGNvbXBvbmVudF90eXBlKSB7XG4rXHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGNvbXBvbmVudF90eXBlKTtcbitcbitcdFx0aWYgKGNvbXBvbmVudF90eXBlID09IFBEU19DT1JFX0ZXX1RZUEVfTUFJTikge1xuK1x0XHRcdGNvbXBvbmVudF9uYW1lID0gXCJmd1wiO1xuK1x0XHR9IGVsc2UgaWYgKHR5cGVfbmFtZSkge1xuK1x0XHRcdHNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksXG4rXHRcdFx0XHQgXCIlcyVzXCIsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTtcbitcdFx0XHRjb21wb25lbnRfbmFtZSA9IGNvbXBvbmVudF9uYW1lX2J1ZjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XG4rXG4rXHRpZiAocGRzY19za2lwX2NvbXBvbmVudChwcml2LCBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcikpIHtcbitcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCJTa2lwcGVkXCIsXG4rXHRcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHRvdGFsX2xlbiA9IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfc2l6ZTtcbitcdGRldl9kYmcoZGV2LFxuK1x0XHRcImNvbXBvbmVudCBuYW1lICVzIGNsYXNzICV1IGlkICV1IGFjdF9tZXRoICV1IHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1XFxuXCIsXG4rXHRcdGNvbXBvbmVudF9uYW1lID86IFwiKHVua25vd24pXCIsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbitcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbitcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHRcdGNvbXBvbmVudC1cdTAwM2VpbmRleCwgY29tcG9uZW50LVx1MDAzZWNvbXBvbmVudF9zaXplKTtcbitcbitcdGJ1Zl9zeiA9IHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpO1xuK1x0aW5mb19zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF9pbmZvLCB2ZXJzaW9uX3N0cixcbitcdFx0XHQgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuK1x0aWYgKGluZm9fc3ogXHUwMDNlIGJ1Zl9zeikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcblwiLFxuK1x0XHRcdGluZm9fc3osIGJ1Zl9zeik7XG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0fVxuK1x0Y29tcG9uZW50X2luZm8gPSB2emFsbG9jKGluZm9fc3opO1xuK1x0aWYgKCFjb21wb25lbnRfaW5mbylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cbitcdFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVx1MDAzZWNvbXBhcmlzb25fc3RhbXApO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNlaW1hZ2Vfc2l6ZSA9IGNwdV90b19sZTMyKHRvdGFsX2xlbik7XG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2VjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbik7XG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNlb3B0aW9ucyA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VvcHRpb25zKTtcbitcdGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtXHUwMDNldmVyc2lvbl90eXBlO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuO1xuK1x0bWVtY3B5KGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcbitcdG9mZnNldCA9IDA7XG4rXHR3aGlsZSAob2Zmc2V0IFx1MDAzYyB0b3RhbF9sZW4pIHtcbitcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuK1x0XHR1MTYgY29weV9zejtcbitcbitcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSxcbitcdFx0XHRcdHRvdGFsX2xlbiAtIG9mZnNldCk7XG4rXG4rXHRcdGVyciA9IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHBkc2MsIGRldiwgY29tcG9uZW50X2luZm8sXG4rXHRcdFx0XHRcdFx0IGluZm9fc3osXG4rXHRcdFx0XHRcdFx0IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfZGF0YSArXG4rXHRcdFx0XHRcdFx0IG9mZnNldCwgY29weV9zeiwgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdCBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNmNvbXApO1xuK1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PVxuK1x0XHQgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgfHxcbitcdFx0ICAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09XG4rXHRcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0xPV0VSKSkge1xuK1x0XHRcdGVyciA9IDA7XG4rXHRcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCJTa2lwcGVkXCIsXG4rXHRcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSxcbitcdFx0XHRcdFx0XHRcdCAgIDAsIDApO1xuK1x0XHRcdGdvdG8gc2tpcF9jb21wb25lbnQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gZmxhc2ggY29tcG9uZW50XCIpO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0fVxuK1xuK1x0XHRvZmZzZXQgKz0gY29weV9zejtcbitcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbitcdFx0XHRcdFx0XHQgICBcIkVyYXNpbmcvRmxhc2hpbmdcIixcbitcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdCAgIHRvdGFsX2xlbik7XG4rXHR9XG4rXG4rXHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbitcdFx0XHRcdFx0ICAgXCJFcmFzaW5nL0ZsYXNoaW5nIENvbXBvbmVudCBGYWlsZWRcIixcbitcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK3NraXBfY29tcG9uZW50OlxuK1x0dmZyZWUoY29tcG9uZW50X2luZm8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4rXHRcdC5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSxcbitcdFx0LmZpbmFsaXplX3VwZGF0ZS52ZXIgPSAxLFxuK1x0fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcbitcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQpXG4re1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4rXHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudDtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cdTAwM2VwZHNjO1xuK1x0c3RydWN0IGRldmxpbmsgKmRsO1xuK1x0aW50IGVycjtcbitcbitcdGRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpO1xuK1xuK1x0c3RhcnRfdGltZSA9IGppZmZpZXM7XG4rXHRlbmRfdGltZSA9IHN0YXJ0X3RpbWUgKyAoUERTQ19GV19JTlNUQUxMX1RJTUVPVVQgKiBIWik7XG4rXHRkbyB7XG4rXHRcdGVyciA9IHBkc2NfZGV2Y21kX2ZpbmFsaXplX3VwZGF0ZShwZHNjKTtcbitcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRkZXZfZGJnKGRldiwgXCJyZXRyeWluZyBmaW5hbGl6ZV91cGRhdGU6ICVwZVxcblwiLCBFUlJfUFRSKGVycikpO1xuK1x0XHRtc2xlZXAoMjApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpIFx1MDAyNlx1MDAyNiBlcnIgPT0gLUVBR0FJTik7XG4rXG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFwiRmluYWxpemUgVXBkYXRlIEZhaWxlZFwiLFxuK1x0XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXHUwMDNlZXh0YWNrLCBcIkZpbmFsaXplIHVwZGF0ZSBmYWlsZWRcIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcIkZpbmFsaXplZCBVcGRhdGVcIixcbitcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7XG4rXHQubWF0Y2hfcmVjb3JkID0gcGRzY19tYXRjaF9yZWNvcmRfZGVzY3MsXG4rXHQuc2VuZF9wYWNrYWdlX2RhdGEgPSBwZHNjX3NlbmRfcGFja2FnZV9kYXRhLFxuK1x0LnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSxcbitcdC5mbGFzaF9jb21wb25lbnQgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudCxcbitcdC5maW5hbGl6ZV91cGRhdGUgPSBwZHNjX2ZpbmFsaXplX3VwZGF0ZVxuK307XG4rXG4rc3RhdGljIGludCBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbit7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgcHJpdiA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdGlmICghcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKSB7XG4rXHRcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gZ2V0IGNvbXBvbmVudCBpbmZvXCIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdHU4IHR5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbitcbitcdFx0aWYgKCF0eXBlIHx8ICFwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhwZHNjLCB0eXBlKSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiVW5rbm93biBjb21wb25lbnQgbmFtZVwiKTtcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cHJpdi5jb21wb25lbnRzKTtcbitcdHByaXYuY29udGV4dC5vcHMgPSBcdTAwMjZwZHNjX3BsZG1md19vcHM7XG4rXHRwcml2LmNvbnRleHQuZGV2ID0gcGRzYy1cdTAwM2VkZXY7XG4rXHRwcml2LnBhcmFtcyA9IHBhcmFtcztcbitcdHByaXYuZXh0YWNrID0gZXh0YWNrO1xuK1x0cHJpdi5wZHNjID0gcGRzYztcbitcbitcdGVyciA9IHBsZG1md19mbGFzaF9pbWFnZShcdTAwMjZwcml2LmNvbnRleHQsIGZ3KTtcbitcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBwYXJhbXMtXHUwMDNlY29tcG9uZW50IFx1MDAyNlx1MDAyNiAhcHJpdi5jb21wb25lbnRfZm91bmQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiUmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlXCIpO1xuK1x0XHRlcnIgPSAtRU5PRU5UO1xuK1x0fVxuK1x0cGRzY19mcmVlX2Z3dV9wcml2KFx1MDAyNnByaXYpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuK1x0XHRjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFKSlcbitcdFx0ZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayxcbitcdFx0XHRcdFx0XHRwYXJhbXMtXHUwMDNlZncpO1xuK1x0ZWxzZVxuK1x0XHRlcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuK1xuK1x0LyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi9cbitcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmNcbmluZGV4IDhkOTRhNGQ3MDM5NWUuLjVlMWIwNzg1MDE2M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG5AQCAtMjEsNiArMjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRzY19pZF90YWJsZVtdID0ge1xuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBkc2NfaWRfdGFibGUpO1xuIFxuK3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTtcbitcbiBzdGF0aWMgdm9pZCBwZHNjX3dkdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSB0aW1lcl9jb250YWluZXJfb2YocGRzYywgdCwgd2R0aW1lcik7XG5AQCAtMzE1LDYgKzMxNyw3IEBAIHN0YXRpYyBpbnQgcGRzY19pbml0X3BmKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShwZHNjLVx1MDAzZXdxKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGRzYy1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiBcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkc2MtXHUwMDNlcGRldik7XG4gZXJyX291dF91bm1hcF9iYXJzOlxuIFx0cGRzY191bm1hcF9iYXJzKHBkc2MpO1xuQEAgLTM1Myw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRwZHNjLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0cGRzYy1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdHNldF9iaXQoUERTQ19TX0lOSVRJTkdfRFJJVkVSLCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGRzYyk7XG4gXHRwZHNjX2RlYnVnZnNfYWRkX2RldihwZHNjKTtcbiBcbkBAIC00NTgsNiArNDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHR9XG4gXG4gXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIFxuIFx0aWRhX2ZyZWUoXHUwMDI2cGRzY19pZGEsIHBkc2MtXHUwMDNldWlkKTtcbiBcdHBkc2NfZGVidWdmc19kZWxfZGV2KHBkc2MpO1xuQEAgLTUwNSw2ICs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpO1xuIFx0aWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKVxuIFx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaCBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcbmluZGV4IDE3YTg3YzFhNTVkN2MuLjkwMWUxZTYyOGY4OTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG5AQCAtNDAsNiArNDAsMTQgQEAgZW51bSBwZHNfY29yZV9jbWRfb3Bjb2RlIHtcbiBcdFBEU19DT1JFX0NNRF9GV19ET1dOTE9BRFx0PSA0LFxuIFx0UERTX0NPUkVfQ01EX0ZXX0NPTlRST0xcdFx0PSA1LFxuIFxuK1x0UERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1x0PSA2LFxuK1x0UERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcdD0gNyxcbitcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcdD0gOCxcbitcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFx0PSA5LFxuK1x0UERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVx0PSAxMCxcbitcdFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQ1x0PSAxMSxcbitcdFBEU19DT1JFX0NNRF9IT1NUX01FTVx0XHQ9IDEyLFxuK1xuIFx0LyogU1IvSU9WIGNvbW1hbmRzICovXG4gXHRQRFNfQ09SRV9DTURfVkZfR0VUQVRUUlx0XHQ9IDYwLFxuIFx0UERTX0NPUkVfQ01EX1ZGX1NFVEFUVFJcdFx0PSA2MSxcbkBAIC0xMDAsNiArMTA4LDE2IEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkge1xuIFx0Y2hhciAgIGRyaXZlcl92ZXJfc3RyWzMyXTtcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgLSBEZXZpY2UgY2FwYWJpbGl0aWVzXG4rICogQFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEU6IERldmljZSBvbmx5IHN1cHBvcnRzIEZXIHVwZGF0ZSB2aWEgUExETVxuKyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZVxuKyAqL1xuK2VudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkge1xuK1x0UERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSA9IEJJVCgwKSxcbitcdFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0gPSBCSVQoMSksXG4rfTtcbitcbiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVhcdDE2XG4gLyoqXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvblxuQEAgLTExOSw2ICsxMzcsMTEgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XG4gICpcdFx0ICAgICAgdmFsdWUgaW4gdXNlY3MgdG8gZGV2aWNlIHVuaXRzIHVzaW5nOlxuICAqXHRcdCAgICAgIGRldmljZSB1bml0cyA9IHVzZWNzICogbXVsdCAvIGRpdlxuICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWRcbisgKiBAbWF4X2Z3X3Nsb3RzOiAgICAgTnVtYmVyIG9mIGZpcm13YXJlIGNvbXBvbmVudHMgcmVwb3J0ZWQgYnkgZGV2aWNlXG4rICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuKyAqIEByc3ZkMjpcdCAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqIEBjYXBhYmlsaXRpZXM6ICAgICBEZXZpY2UgY2FwYWJpbGl0aWVzXG4rICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuICAqL1xuIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkge1xuIFx0dTggICAgIHZlcnNpb247XG5AQCAtMTMxLDkgKzE1NCwxMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfbXVsdDtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfZGl2O1xuIFx0X19sZTE2IHZpZl90eXBlc1tQRFNfREVWX1RZUEVfTUFYXTtcbitcdF9fbGUxNiBtYXhfZndfc2xvdHM7XG4rXHR1OCAgICAgcnN2ZDJbNl07XG4rXHRfX2xlNjQgY2FwYWJpbGl0aWVzO1xuIH07XG4gXG4gI2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzFcdDFcbisjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlx0MlxuIFxuIC8qKlxuICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpZnlfY21kIC0gRHJpdmVyL2RldmljZSBpZGVudGlmeSBjb21tYW5kXG5AQCAtMjc1LDExICszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIge1xuIFx0UERTX0NPUkVfRldfR0VUX0xJU1QgICAgICAgICAgICAgICA9IDcsXG4gfTtcbiBcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3QgLSBGaXJtd2FyZSBzbG90IGlkZW50aWZpZXJzXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDogTGV0IGZpcm13YXJlIHNlbGVjdCBzbG90IGJhc2VkIG9uIHBhY2thZ2UgbWV0YWRhdGFcbisgKiBAUERTX0NPUkVfRldfU0xPVF9BOiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQVxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0I6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBCXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfR09MRDogICAgR29sZC9yZWNvdmVyeSBmaXJtd2FyZSBzbG90XG4rICogQFBEU19DT1JFX0ZXX1NMT1RfTUFYOiAgICAgU2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyBubyBzbG90IHJlc29sdmVkXG4rICovXG4gZW51bSBwZHNfY29yZV9md19zbG90IHtcbiBcdFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCAgICA9IDAsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0FcdCAgICA9IDEsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0IgICAgICAgICAgPSAyLFxuIFx0UERTX0NPUkVfRldfU0xPVF9HT0xEICAgICAgID0gMyxcbitcdFBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsXG4gfTtcbiBcbiAvKipcbkBAIC00NDYsNiArNDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHtcbiBcdHU4XHRzdGF0dXM7XG4gfTtcbiBcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21tYW5kXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgdGhlIHBhY2thZ2UgZGF0YVxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbiB0aGUgcGFja2FnZSBkYXRhLCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kcyBhcmVcbisgKlx0ICAgIG5lZWRlZCBmb3Igc2VuZGluZyB0aGUgcGFja2FnZSBkYXRhXG4rICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYVxuKyAqIEBkYXRhX3BhOiBEYXRhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSB0byBkZXZpY2VcbisgKlxuKyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXG4rICogUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHRfX2xlMTYgdG90YWxfbGVuO1xuK1x0X19sZTE2IG9mZnNldDtcbitcdF9fbGUxNiBkYXRhX2xlbjtcbitcdF9fbGU2NCBkYXRhX3BhO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wIHtcbitcdHU4IHN0YXR1cztcbitcdHU4IHZlcjtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAtIENvbXBvbmVudCB0YWJsZSBkZXRhaWxzXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxuKyAqIEB0cmFuc2Zlcl9mbGFnOiBQYXJ0IG9mIHRoZSBjb21wb25lbnQgdGFibGUgdGhpcyByZXF1ZXN0IHJlcHJlc2VudHNcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbisgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90Ymwge1xuK1x0X19sZTMyIGNvbXBhcmlzb25fc3RhbXA7XG4rXHRfX2xlMTYgY2xhc3NpZmljYXRpb247XG4rXHRfX2xlMTYgaWRlbnRpZmllcjtcbitcdHU4ICAgICB0cmFuc2Zlcl9mbGFnO1xuK1x0dTggICAgIHZlcnNpb25fc3RyX3R5cGU7XG4rXHR1OCAgICAgdmVyc2lvbl9zdHJfbGVuO1xuK1x0dTggICAgIHZlcnNpb25fc3RyW107XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbW1hbmRcbisgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpXG4rICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcbisgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHtcbitcdHU4IG9wY29kZTtcbitcdHU4IHZlcjtcbitcdHU4IHNsb3RfaWQ7XG4rXHR1OCByc3ZkO1xuK307XG4rXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfcmVzcF9jb2RlIHtcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9WQUxJRCA9IDB4MCxcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgPSAweDEsXG4rXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIgPSAweDIsXG4rXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfT1JfVkVSU0lPTl9JTlZBTElEID0gMHgzLFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX0NPTkZMSUNUID0gMHg0LFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX1BSRVJFUVNfTk9UX01FVCA9IDB4NSxcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9OT1RfU1VQUE9SVEVEID0gMHg2LFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX0ZXX1RZUEVfSU5WQUxJRCA9IDB4ZDAsXG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uXG4rICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wb25lbnQgY29tcGxldGlvbiBjb2RlXG4rICogQHJlc3BvbnNlOiBDb21wb25lbnQgcmVzcG9uc2VcbisgKiBAcmVzcG9uc2VfY29kZTogQ29tcG9uZW50IHJlc3BvbnNlIGNvZGVcbisgKiBAc2xvdF9pZDogQWN0dWFsIHNsb3RfaWQgb2YgdGhlIGNvbXBvbmVudCAoZW51bSBwZHNfY29yZV9md19zbG90KVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggY29tcGxldGlvbl9jb2RlO1xuK1x0dTggcmVzcG9uc2U7XG4rXHR1OCByZXNwb25zZV9jb2RlO1xuK1x0dTggc2xvdF9pZDtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvblxuKyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVDogSW5pdGlhbCBvcGVyYXRpb24gdG8gc3RhcnQgdHJhbnNmZXJcbisgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTOiBTdWJzZXF1ZW50IGNhbGxzIHRvIGNoZWNrIG9uIHN0YXR1c1xuKyAqL1xuK2VudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3Age1xuK1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQgPSAwLFxuK1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTID0gMSxcbit9O1xuK1xuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lEX0lOVkFMSUQgMHhGRkZGXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAtIENvbXBvbmVudCBkZXRhaWxzXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4rICogQGltYWdlX3NpemU6IENvbXBvbmVudCBpbWFnZSBzaXplXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxuKyAqIEBvcHRpb25zOiBDb21wb25lbnQgb3B0aW9uc1xuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbisgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCB7XG4rXHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcbitcdF9fbGUzMiBpbWFnZV9zaXplO1xuK1x0X19sZTE2IGNsYXNzaWZpY2F0aW9uO1xuK1x0X19sZTE2IGlkZW50aWZpZXI7XG4rXHRfX2xlMTYgb3B0aW9ucztcbitcdHU4IHJzdmRbM107XG4rXHR1OCB2ZXJzaW9uX3N0cl90eXBlO1xuK1x0dTggdmVyc2lvbl9zdHJfbGVuO1xuK1x0dTggdmVyc2lvbl9zdHJbXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgLSBTZW5kIGNvbXBvbmVudCBjb21tYW5kXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90XG4rICogQG9wZXJhdGlvbjogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcFxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzXG4rICpcdCAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnRcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBzdG9yZWQgYXQgQGRhdGFfcGFcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4rICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnRcbisgKlxuKyAqIEEgY29tcG9uZW50IG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZVxuKyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXG4rICpcbisgKiBFeHBlY3RzIHRvIGZpbmQgZmxhc2ggY29tcG9uZW50IGluZm8gKHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQpXG4rICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxuKyAqIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGUgZmxhc2ggY29tcG9uZW50IGluZm8uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHR1OCBzbG90X2lkO1xuK1x0dTggb3BlcmF0aW9uO1xuK1x0X19sZTMyIG9mZnNldDtcbitcdF9fbGUzMiBkYXRhX2xlbjtcbitcdHU4IHJzdmRbNF07XG4rXHRfX2xlNjQgZGF0YV9wYTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIC0gU2VuZCBjb21wb25lbnQgY29tcGxldGlvblxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQGNvbXBsZXRpb25fY29kZTogQ29tcGxldGlvbiBjb2RlXG4rICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZClcbisgKiBAY29tcGF0X3Jlc3BvbnNlX2NvZGU6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgY29kZVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCB7XG4rXHR1OCBzdGF0dXM7XG4rXHR1OCB2ZXI7XG4rXHR1OCBjb21wbGV0aW9uX2NvZGU7XG4rXHR1OCBjb21wYXRfcmVzcG9uc2U7XG4rXHR1OCBjb21wYXRfcmVzcG9uc2VfY29kZTtcbitcdHU4IHJzdmRbM107XG4rfTtcbitcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIC0gRmlybXdhcmUgY29tcG9uZW50IHR5cGVcbisgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfTUFJTjogTWFpbiBmaXJtd2FyZVxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX0JPT1Q6IEJvb3QgbG9hZGVyXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZVxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRTogU2VjdXJlIGZpcm13YXJlXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfRlBHQTogRlBHQSBjb25maWd1cmF0aW9uXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcbisgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVDogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfVUJPT1Q6IFUtQm9vdCBib290bG9hZGVyXG4rICpcbisgKiBHb2xkL3JlY292ZXJ5IHZhcmlhbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEXG4rICogYW5kIHJlcG9ydGVkIHdpdGggYSBcIi5nb2xkXCIgc3VmZml4IChlLmcuLCBmdy5nb2xkKS5cbisgKi9cbitlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHtcbitcdFBEU19DT1JFX0ZXX1RZUEVfVU5LTk9XTiAgID0gMCxcbitcdFBEU19DT1JFX0ZXX1RZUEVfTUFJTiAgICAgID0gMSxcbitcdFBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMixcbitcdFBEU19DT1JFX0ZXX1RZUEVfQ1BMRCAgICAgID0gMyxcbitcdFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFICAgID0gNCxcbitcdFBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSxcbitcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU4gID0gNixcbitcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1QgID0gNyxcbitcdFBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCxcbit9O1xuK1xuKy8qKlxuKyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFnc1xuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkc6IENvbXBvbmVudCBpcyBjdXJyZW50bHkgcnVubmluZ1xuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkXG4rICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUU6IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZFxuKyAqXHRieSBuYW1lXG4rICovXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFncyB7XG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcgPSBCSVQoMCksXG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksXG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEID0gQklUKDIpLFxuK1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSA9IEJJVCgzKSxcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeVxuKyAqIEBuYW1lOiBDb21wb25lbnQncyBuYW1lXG4rICogQGNvbXBvbmVudF90eXBlOiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqIEBmbGFnczogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFnc1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBpZGVudGlmaWVyXG4rICogQHNsb3RfaWQ6IENvbXBvbmVudCdzIHNsb3QgaWRlbnRpZmllclxuKyAqIEB2ZXJzaW9uOiBDb21wb25lbnQncyB2ZXJzaW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIHtcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAyNFxuK1x0Y2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07XG4rXHR1OCBjb21wb25lbnRfdHlwZTtcbitcdHU4IHJzdmRbM107XG4rXHRfX2xlMTYgZmxhZ3M7XG4rXHR1OCBpZGVudGlmaWVyO1xuK1x0dTggc2xvdF9pZDtcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIDMyXG4rXHRjaGFyIHZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU5dO1xuK307XG4rXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5cdCgoUERTX1BBR0VfU0laRSAtIDgpIC8gXFxcbitcdFx0c2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpXG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhXG4rICogQG51bV9jb21wb25lbnRzOiBOdW1iZXIgb2YgdmFsaWQgY29tcG9uZW50c1xuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8ge1xuK1x0dTggbnVtX2NvbXBvbmVudHM7XG4rXHR1OCByc3ZkWzddO1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIGluZm9bUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmRcbisgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YVxuKyAqXG4rICogRlcgcG9wdWxhdGVzIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIHBvaW50ZWQgdG8gYnkgQGRhdGFfcGFcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHRfX2xlMTYgZGF0YV9sZW47XG4rXHR1OCByc3ZkWzRdO1xuK1x0X19sZTY0IGRhdGFfcGE7XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvblxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCB7XG4rXHR1OCBzdGF0dXM7XG4rXHR1OCB2ZXI7XG4rXHR1OCByc3ZkWzJdO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgLSBGSU5BTElaRV9VUERBVEUgY29tbWFuZFxuKyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcbisgKiBAdmVyOiBEcml2ZXIncyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIERyaXZlciBzZW5kcyBhdCB0aGUgZW5kIG9mIHVwZGF0aW5nIGFsbCBjb21wb25lbnRzIHRvIGZpbmFsaXplIHRoZSB1cGRhdGVcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHR1OCByc3ZkWzJdO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIC0gRklOQUxJWkVfVVBEQVRFIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggcnN2ZFsyXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21tYW5kXG4rICogQG9wY29kZTogUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEB0eXBlOiBQTERNIERlc2NyaXB0b3IgSWRlbnRpZmllciBUeXBlXG4rICogQHNpemU6IExlbmd0aCBvZiB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIFZhbHVlXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqXG4rICogRXhwZWN0cyB0byBmaW5kIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgRGF0YSBpbiBjbWRfcmVncy1cdTAwM2VkYXRhLiBEcml2ZXJcbisgKiBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQgd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoaXNcbisgKiBjb21tYW5kLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggdmVyO1xuK1x0X19sZTE2IHR5cGU7XG4rXHRfX2xlMTYgc2l6ZTtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0J3NcbisgKiB1bmRlZmluZWQuXG4rICovXG4rc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggbWF0Y2g7XG4rXHR1OCByc3ZkO1xuK307XG4rXG4rLyoqXG4rICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnNcbisgKiBAUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UOiBRdWVyeSBudW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0XG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0RFTDogICAgICAgTm90aWZ5IGZpcm13YXJlIG9mIG1lbW9yeSBkZWFsbG9jYXRpb25cbisgKi9cbitlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIge1xuK1x0UERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UXHQ9IDAsXG4rXHRQRFNfQ09SRV9IT1NUX01FTV9RVUVSWVx0XHQ9IDEsXG4rXHRQRFNfQ09SRV9IT1NUX01FTV9BRERcdFx0PSAyLFxuK1x0UERTX0NPUkVfSE9TVF9NRU1fREVMXHRcdD0gMyxcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgLSBIT1NUX01FTSBjb21tYW5kXG4rICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU1cbisgKiBAb3BlcjogICAgICAgT3BlcmF0aW9uIChlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIpXG4rICogQGluZGV4OiAgICAgIE1lbW9yeSByZXF1ZXN0IGluZGV4IChHRVRfQ09VTlQ6IG1heF9jb3VudCwgUVVFUlk6IGluZGV4KVxuKyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpXG4rICogQHJlYXNvbjogICAgIFJlYXNvbiBmb3IgZGVsZXRpb24gKERFTCBvbmx5KVxuKyAqIEByc3ZkOiAgICAgICBSZXNlcnZlZFxuKyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KVxuKyAqIEBzaXplOiAgICAgICBTaXplIG9mIG1lbW9yeSBpbiBieXRlcyAoQUREIG9ubHkpXG4rICogQGJ1Zl9wYTogICAgIERNQSBhZGRyZXNzIG9mIG1lbW9yeSAoQUREIG9ubHkpXG4rICpcbisgKiBVbmlmaWVkIGNvbW1hbmQgZm9yIGFsbCBob3N0IG1lbW9yeSBvcGVyYXRpb25zLiBGaWVsZHMgYXJlIHJldXNlZFxuKyAqIGFjcm9zcyBvcGVyYXRpb25zIHRvIG1pbmltaXplIG9wY29kZSBzcGFjZSB1c2FnZS5cbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIHtcbitcdHU4ICAgICBvcGNvZGU7XG4rXHR1OCAgICAgb3BlcjtcbitcdF9fbGUxNiBpbmRleDtcbitcdF9fbGUxNiB0YWc7XG4rXHR1OCAgICAgcmVhc29uO1xuK1x0dTggICAgIHJzdmQ7XG4rXHRfX2xlMzIgbWF4X2NvbnRpZztcbitcdF9fbGUzMiBzaXplO1xuK1x0X19sZTY0IGJ1Zl9wYTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIC0gSE9TVF9NRU0gY29tcGxldGlvblxuKyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbisgKiBAb3BlcjogICAgICAgICBPcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkXG4rICogQGNvdW50OiAgICAgICAgTnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0cyAoR0VUX0NPVU5UKVxuKyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKVxuKyAqIEB0YWc6ICAgICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoUVVFUlkvREVMKVxuKyAqIEByc3ZkOiAgICAgICAgIFJlc2VydmVkXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAge1xuK1x0dTggICAgIHN0YXR1cztcbitcdHU4ICAgICBvcGVyO1xuK1x0X19sZTE2IGNvdW50O1xuK1x0X19sZTMyIHNpemU7XG4rXHRfX2xlMTYgdGFnO1xuK1x0dTggICAgIHJzdmRbNl07XG4rfTtcbitcbiAvKlxuICAqIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgLSBPdmVybGF5IG9mIGNvcmUgZGV2aWNlIGNvbW1hbmQgc3RydWN0dXJlc1xuICAqL1xuQEAgLTQ2Miw2ICs5MTUsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCB7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jbWQgICB2Zl9zZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY21kICAgdmZfZ2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NtZCAgICAgIHZmX2N0cmw7XG4rXG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgICAgICBzZW5kX3BrZ19kYXRhO1xuK1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgc2VuZF9jb21wb25lbnRfdGJsO1xuK1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAgICBmaW5hbGl6ZV91cGRhdGU7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kICBtYXRjaF9yZWNvcmRfZGVzYztcbitcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLypcbkBAIC00ODAsNiArOTQxLDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIHtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NvbXAgICB2Zl9zZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY29tcCAgIHZmX2dldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wICAgICAgdmZfY3RybDtcbitcbitcdHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCBnZXRfY29tcG9uZW50X2luZm87XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wICAgICAgc2VuZF9wa2dfZGF0YTtcbitcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAgICAgc2VuZF9jb21wb25lbnQ7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgICAgZmluYWxpemVfdXBkYXRlO1xuK1x0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjO1xuK1x0c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzozMDozNC4xNDE4ODYyNjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDk1MzY1MjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogUXVpY2sgRGVjaXNpb24qKlxuXG5Pa2F5LCBzbyBJIGhhdmUgYSBwYXRjaCB0b3VjaGluZyB0aGUgYHBkc19jb3JlYCBkcml2ZXIsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgc3BlY2lmaWMgY29uZGl0aW9uIGluIG15IGV2YWx1YXRpb24gcHJvY2Vzcy4gSSByZW1lbWJlciB0aGUgcHJvbXB0OyBpdCBleHBsaWNpdGx5IGNhbGxzIG91dCBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUgb2YgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgZm9yIFBDSWUgZGV2aWNlcywgU21hcnROSUNzIHNwZWNpZmljYWxseSwgdGhhdCBjYW4ndCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgZGVlcGVyIGludG8gdGhlIHBhdGNoIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMsIGJ1dCBJIGNhbiBzZWUgcmlnaHQgYXdheSBpdCBpcyBtb2RpZnlpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9gLiBUaGUgcGF0Y2ggYWRkcyBQTERNIGZpcm13YXJlIHVwZGF0ZSBzdXBwb3J0IGFuZCBob3N0IG1lbW9yeSBhbGxvY2F0aW9uIGZvciB0aGUgZmlybXdhcmUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyIGhlcmUuXG5cblRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGRyaXZlciBpdHNlbGYuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgZmlsZSBwYXRoIGlzIGNvcnJlY3QgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvYCkgYW5kIGl0IGlzIGluZGVlZCBhIGRldmljZSBkcml2ZXIgZm9yIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZXMgYW5kIHVzZXMgUENJLiBUaGUgcHJvbXB0IGlzIHZlcnkgY2xlYXI6IFwidmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBBbmQsIHRoZSBwcm9tcHQgKipleHBsaWNpdGx5KiogdXNlcyBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUuXG5cbkdpdmVuIHRoaXMgZGlyZWN0IG1hdGNoLCBhbmQgdGhlIG5lZWQgZm9yIFBDSSBoYXJkd2FyZSwgSSdtIGNvbmZpZGVudCBpbiByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIE5vIG5lZWQgZm9yIGEgbGVuZ3RoeSBhbmFseXNpcyBoZXJlLCBiZWNhdXNlIGl0IGlzIGV4cGxpY2l0bHkgY2FsbGVkIG91dC4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGEgZHJpdmVyIHRoYXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUgZm9yIHdoaWNoIHdlIGNhbm5vdCB0ZXN0IGl0cyBjaGFuZ2VzIGFuZCwgdGhlcmVmb3JlLCBpdCdzIG5vdCBzdWl0YWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1enppbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNjEsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMzozMDo0Mi4yMzcyNTU1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBkc19jb3JlIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwZHNfY29yZSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf8nf9[1] Phase: Running StartedAt: 2026-07-31 13:30:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf8nf9[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-31 13:30:54 +0000 UTC FinishedAt: 2026-07-31 13:31:16 +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,}