Name: series-workflow7b4tr Phase: Failed StartedAt: 2026-09-07 01:50:45 +0000 UTC FinishedAt: 2026-09-07 01:52:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4tr[0] Phase: Succeeded StartedAt: 2026-09-07 01:50:45 +0000 UTC FinishedAt: 2026-09-07 01:52:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4tr[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 01:50:45 +0000 UTC FinishedAt: 2026-09-07 01:52:42 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgRGV2aWNlIFRyZWUgYmluZGluZ3MsIGFuIE1ESU8gTUNVIGRyaXZlciwgYW5kIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWS9NQ1UgaGFyZHdhcmUuIFRoZXNlIGRyaXZlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIEFpcm9oYSBoYXJkd2FyZSAoYW5kIHJlcXVpcmUgRGV2aWNlIFRyZWUgTURJTyBlbnVtZXJhdGlvbikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyNzY1Yjc3OWE0MWIyZDgzZjQ5MGJkYTFlOGM5MzYxMmY1MTgxYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjUyOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2JlMGFiODYyMjY2MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTE3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBBaXJvaGEgRU44ODExSCBQSFkgTUNVXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjogfFxuJiM0MzsgIFRoZSBBaXJvaGEgRU44ODExSCAyLjVHIFBIWSBpcyBidWlsdCBhcm91bmQgYW4gTUQzMiBjb3JlIHRoYXQgZXhlY3V0ZXNcbiYjNDM7ICBmaXJtd2FyZSBmcm9tIHZvbGF0aWxlIFJBTS4gVGhlIGNoaXAgYW5zd2VycyBhbiBNRElPIGFkZHJlc3MgZnJvbVxuJiM0MzsgIHBvd2VyLW9uLCBidXQgdGhlIFBIWSBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdCB1bnRpbCBmaXJtd2FyZSBoYXMgYmVlblxuJiM0MzsgIGxvYWRlZCBvdmVyIE1ESU8sIGFuZCBpdCBkaXNhcHBlYXJzIGFnYWluIGlmIHRoYXQgUkFNIGlzIGNsZWFyZWQuXG4mIzQzO1xuJiM0MzsgIFRoaXMgbm9kZSBkZXNjcmliZXMgdGhlIE1EMzIgY29yZS4gVGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIGEgY2hpbGRcbiYjNDM7ICBNRElPIGJ1cyBiZWxvdyBpdCwgYXQgdGhlIHNhbWUgYWRkcmVzcyB0aGUgY29yZSBvY2N1cGllcyBvbiB0aGUgcGFyZW50XG4mIzQzOyAgYnVzLCBhbmQgb25seSB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLlxuJiM0MztcbiYjNDM7ICBUaGUgcmVzZXQgbGluZSBpcyB3aXJlZCB0byB0aGUgY29yZSwgYW5kIGFzc2VydGluZyBpdCBjbGVhcnMgdGhlXG4mIzQzOyAgZmlybXdhcmUgUkFNLiBJdCB0aGVyZWZvcmUgYmVsb25ncyB0byB0aGlzIG5vZGU6IGEgcmVzZXQgZGVzY3JpYmVkIG9uXG4mIzQzOyAgdGhlIFBIWSBub2RlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGF0IG5vZGUmIzM5O3Mgb3duIGxpZmVjeWNsZSwgd2hhdGV2ZXJcbiYjNDM7ICB0aGUgY29yZSBpcyBkb2luZy5cbiYjNDM7XG4mIzQzOyAgQSBib2FyZCB0aGF0IGhhcyBmaXJtd2FyZSBpbiBoYW5kIHdoaWxlIGl0cyBNRElPIGJ1cyBpcyBlbnVtZXJhdGVkIGNhblxuJiM0MzsgIGRlc2NyaWJlIHRoZSBQSFkgb24gaXRzIG93biwgYXMgYWlyb2hhLGVuODgxMWgueWFtbCBkb2VzLCBhbmQgdGhhdCBmb3JtXG4mIzQzOyAgc3RheXMgdmFsaWQuIFRoaXMgYmluZGluZyBpcyBmb3IgdGhlIGJvYXJkcyB3aGVyZSBmaXJtd2FyZSBhcnJpdmVzXG4mIzQzOyAgbGF0ZXIsIHNvIHRoYXQgdGhlcmUgaXMgbm8gUEhZIHRvIGRlc2NyaWJlIHVudGlsIHRoZSBjb3JlIGhhcyBpdC5cbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgJG5vZGVuYW1lOlxuJiM0MzsgICAgcGF0dGVybjogXCYjMzQ7Xm1jdUBbMC05YS1mXSYjNDM7JFwmIzM0O1xuJiM0MztcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgY29uc3Q6IGFpcm9oYSxlbjg4MTFoLW1jdVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICByZXNldC1ncGlvczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgVGhlIEdQSU8gcGhhbmRsZSBhbmQgc3BlY2lmaWVyIGZvciB0aGUgcmVzZXQgc2lnbmFsIHdpcmVkIHRvIHRoZVxuJiM0MzsgICAgICBNRDMyIGNvcmUuXG4mIzQzO1xuJiM0MzsgIHJlc2V0LWFzc2VydC11czpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBEZWxheSBhZnRlciB0aGUgcmVzZXQgd2FzIGFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpc1xuJiM0MzsgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuXG4mIzQzO1xuJiM0MzsgIHJlc2V0LWRlYXNzZXJ0LXVzOlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgZGVhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXNcbiYjNDM7ICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLlxuJiM0MztcbiYjNDM7ICBtZGlvOlxuJiM0MzsgICAgJHJlZjogbWRpby55YW1sI1xuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFRoZSBidXMgdGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcsIGF0XG4mIzQzOyAgICAgIHRoZSBzYW1lIGFkZHJlc3MgdGhpcyBub2RlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnQgYnVzLiBPbmx5IHRoYXRcbiYjNDM7ICAgICAgb25lIGFkZHJlc3MgaXMgcGFzc2VkIHRocm91Z2guXG4mIzQzO1xuJiM0MzsgICAgcGF0dGVyblByb3BlcnRpZXM6XG4mIzQzOyAgICAgICYjMzk7XmV0aGVybmV0LXBoeUBbMC05YS1mXSYjNDM7JCYjMzk7OlxuJiM0MzsgICAgICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xuJiM0MzsgICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzOyAgICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICAgIHJlc2V0LWdwaW9zOiBmYWxzZVxuJiM0MzsgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzOiBmYWxzZVxuJiM0MzsgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAgICAgVGhlIHJlc2V0IGxpbmUgYmVsb25ncyB0byB0aGUgTUNVIG5vZGUgYWJvdmUuIEEgcmVzZXQgZGVzY3JpYmVkXG4mIzQzOyAgICAgICAgICBoZXJlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGlzIG5vZGUmIzM5O3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXG4mIzQzOyAgICAgICAgICB0aGUgZmlybXdhcmUgdGhhdCBjcmVhdGVkIHRoaXMgUEhZLlxuJiM0MztcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gcmVnXG4mIzQzOyAgLSBtZGlvXG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgbWN1QGQge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuODgxMWgtbWN1XCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MweGRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2cGlvIDE0IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMTAwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzID0gXHUwMDNjMjAwMDBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBldGhlcm5ldC1waHlAZCB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MweGRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFx1MDAzY1x1MDAyNnBpbyAxNSBJUlFfVFlQRV9MRVZFTF9MT1dcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGIyM2ZiNmYyZjRlZjQuLjNiZDg2ZGYyYmU1NzEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC03NTAsNiAmIzQzOzc1MCwxNCBAQCBTOlx0U3VwcG9ydGVkXG4gRjpcdGZzL2Fpby5jXG4gRjpcdGluY2x1ZGUvbGludXgvKmFpbyouaFxuIFxuJiM0MztBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcbiYjNDM7TTpcdEFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xuJiM0MztGOlx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuJiM0MztcbiBBSVJPSEEgRVRIRVJORVQgRFJJVkVSXG4gTTpcdExvcmVuem8gQmlhbmNvbmkgXHUwMDNjbG9yZW56b0BrZXJuZWwub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG5pbmRleCBkNDQyNzhmMjZmYWJlLi4zM2VmYzZiYzg3NWY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbkBAIC0yOSw2ICYjNDM7MjksMTkgQEAgY29uZmlnIE1ESU9fQUlST0hBXG4gXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXG4gXHQgIEFpcm9oYSBBTjc1ODMgU29DJiMzOTtzLlxuIFxuJiM0Mztjb25maWcgTURJT19BSVJPSEFfRU44ODExSFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIE9GX01ESU9cbiYjNDM7XHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuJiM0MztcdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxuJiM0MztcdGltcGx5IEFJUl9FTjg4MTFIX1BIWVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUgsIHdoaWNoIGlzIGFuXG4mIzQzO1x0ICBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8gaXQgYW5kIG9ubHlcbiYjNDM7XHQgIGJlY29tZXMgYW4gRXRoZXJuZXQgUEhZIGFmdGVyd2FyZHMuIFRoZSBkcml2ZXIgZG93bmxvYWRzIHRoYXRcbiYjNDM7XHQgIGZpcm13YXJlIG9uY2UgaXQgYmVjb21lcyByZWFkYWJsZSwgb3IgYWRvcHRzIGZpcm13YXJlIGEgYm9vdGxvYWRlclxuJiM0MztcdCAgbGVmdCBydW5uaW5nLlxuJiM0MztcbiBjb25maWcgTURJT19TVU40SVxuIFx0dHJpc3RhdGUgXCYjMzQ7QWxsd2lubmVyIHN1bjRpIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxuaW5kZXggMDQ4NTg2NzQ2MDI2Mi4uMDZkMDk2Njc1ZGFjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbkBAIC02LDYgJiM0Mzs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbiBvYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuIFxuIG9iai0kKENPTkZJR19NRElPX0FJUk9IQSlcdFx0JiM0Mzs9IG1kaW8tYWlyb2hhLm9cbiYjNDM7b2JqLSQoQ09ORklHX01ESU9fQUlST0hBX0VOODgxMUgpXHQmIzQzOz0gbWRpby1haXJvaGEtZW44ODExaC5vXG4gb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKVx0XHQmIzQzOz0gbWRpby1hc3BlZWQub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQylcdFx0JiM0Mzs9IG1kaW8tYmNtLWlwcm9jLm9cbiBvYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKVx0XHQmIzQzOz0gbWRpby1iY20tdW5pbWFjLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzIyNDU1ODkxNDcyN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcbkBAIC0wLDAgJiM0MzsxLDM4MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cbiYjNDM7ICogaXQsIGFuZCBvbmx5IHRoZW4gYW4gRXRoZXJuZXQgUEhZLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfUE9MTF9NSU5fTVNcdDEwMDBcbiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXHQzMDAwMFxuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfV0FSTl9NU1x0NjAwMDBcbiYjNDM7XG4mIzQzO3N0cnVjdCBlbjg4MTFoX21jdSB7XG4mIzQzO1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayBmd19wb2xsO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBvbGxfbXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdhaXRlZF9tcztcbiYjNDM7XHR1MzIgZndfdmVyc2lvbjtcbiYjNDM7XHRib29sIHdhcm5lZDtcbiYjNDM7XHRib29sIGZ3X3J1bm5pbmc7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX3JlYWRfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgcmVnbnVtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1kaW9idXNfd3JpdGVfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgcmVnbnVtLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdFx0aW50IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1kaW9idXNfYzQ1X3JlYWRfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgZGV2YWQsIHJlZ251bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLFxuJiM0MztcdFx0XHRcdFx0dmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIoc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XG4mIzQzO1x0ICogZGV0YWNoLlxuJiM0MztcdCAqL1xuJiM0MztcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIWJ1cykge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQobnApO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidXMtXHUwMDNlbmFtZSA9IFwmIzM0O2Fpcm9oYS1lbjg4MTFoXCYjMzQ7O1xuJiM0MztcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslc1wmIzM0OywgZGV2X25hbWUoZGV2KSk7XG4mIzQzO1x0YnVzLVx1MDAzZXByaXYgPSBtY3U7XG4mIzQzO1x0YnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZXJlYWQpIHtcbiYjNDM7XHRcdGJ1cy1cdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcbiYjNDM7XHRcdGJ1cy1cdTAwM2V3cml0ZSA9IGVuODgxMWhfbWN1X3dyaXRlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZXJlYWRfYzQ1KSB7XG4mIzQzO1x0XHRidXMtXHUwMDNlcmVhZF9jNDUgPSBlbjg4MTFoX21jdV9yZWFkX2M0NTtcbiYjNDM7XHRcdGJ1cy1cdTAwM2V3cml0ZV9jNDUgPSBlbjg4MTFoX21jdV93cml0ZV9jNDU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuJiM0MztcdG9mX25vZGVfcHV0KG5wKTtcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIW1kaW9idXNfZ2V0X3BoeShidXMsIG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpKSB7XG4mIzQzO1x0XHQvKiBBbiBJRCByZWFkIHRoYXQgZmFpbGVkIGxlYXZlcyB0aGUgYnVzIHJlZ2lzdGVyZWQgYW5kIHRoZVxuJiM0MztcdFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1kaW9idXNfZnJlZShidXMpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1jdS1cdTAwM2VidXMgPSBidXM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlcmlhbGlzZSB3aXRoIHRoZSBQSFkgYmVsb3csIHdoaWNoIHJlYWNoZXMgdGhlIHNhbWUgcmVnaXN0ZXJzIHVuZGVyXG4mIzQzOyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBtaWlfYnVzICplbjg4MTFoX21jdV9jaGlwX2xvY2soc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWN1LVx1MDAzZWJ1cztcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1cylcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYnVzKVxuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKSB7XG4mIzQzO1x0XHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XG4mIzQzO1x0XHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAhIWNoaXApO1xuJiM0MztcdFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtmaXJtd2FyZSAlMDh4IHJ1bm5pbmcgYWZ0ZXIgJXVtc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0bWN1LVx1MDAzZWZ3X3ZlcnNpb24sIG1jdS1cdTAwM2V3YWl0ZWRfbXMpO1xuJiM0MztcdFx0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9ETSkgPzpcbiYjNDM7XHRcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRtY3UtXHUwMDNlZndfcnVubmluZyA9IHRydWU7XG4mIzQzO1x0XHRtY3UtXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XG4mIzQzO1x0XHRtY3UtXHUwMDNld2FpdGVkX21zID0gMDtcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcbiYjNDM7XHQgKiBmd25vZGVfbWRpbyBkZWZlcnMgd2hpbGUgdGhlIFBIWSBub2RlJiMzOTtzIGludGVycnVwdCBjb250cm9sbGVyIGlzXG4mIzQzO1x0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbWN1LVx1MDAzZWJ1cyA/IDAgOiBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIobWN1KTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdGlmICghbWN1LVx1MDAzZXdhcm5lZCBcdTAwMjZcdTAwMjYgbWN1LVx1MDAzZXdhaXRlZF9tcyBcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUykge1xuJiM0MztcdFx0aWYgKCFtY3UtXHUwMDNlZndfcnVubmluZylcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtubyBmaXJtd2FyZSBhZnRlciAldW1zIG9mIHdhaXRpbmcgZm9yICVzIGFuZCAlczogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBtY3UtXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXG4mIzQzO1x0XHRcdFx0IEVOODgxMUhfTUQzMl9EU1AsIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7bm8gUEhZIGF0IGFkZHJlc3MgJWQsICV1bXMgYWZ0ZXIgdGhlIGZpcm13YXJlIHN0YXJ0ZWQ6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciwgbWN1LVx1MDAzZXdhaXRlZF9tcyxcbiYjNDM7XHRcdFx0XHQgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YXJuZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGFzdCBpdHMgYnVkZ2V0LCBvbmx5IGEgZGVmZXJyYWwgd2lsbCBjaGFuZ2Ugb24gaXRzIG93bjogZXZlcnlcbiYjNDM7XHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xuJiM0MztcdCAqIGNvcmUgYW5kIGl0cyB1ZXZlbnRzIGZvciB0aGUgdXB0aW1lLiBGaXJtd2FyZSBmaWxlcyBhcmUgdGhlXG4mIzQzO1x0ICogZXhjZXB0aW9uLCBzaW5jZSB0aGV5IGNhbiBiZSBpbnN0YWxsZWQgYXQgYW55IHRpbWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1jdS1cdTAwM2Vmd19ydW5uaW5nIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQUk9CRV9ERUZFUiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbWN1LVx1MDAzZXdhaXRlZF9tcyBcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWN1LVx1MDAzZXBvbGxfbXMgPSBtaW4obWN1LVx1MDAzZXBvbGxfbXMgKiAyLCBFTjg4MTFIX0ZXX1BPTExfTUFYX01TKTtcbiYjNDM7XHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cbiYjNDM7XHRtY3UtXHUwMDNld2FpdGVkX21zICYjNDM7PSBtY3UtXHUwMDNlcG9sbF9tcztcbiYjNDM7XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsXG4mIzQzO1x0XHRcdCAgIG1zZWNzX3RvX2ppZmZpZXMobWN1LVx1MDAzZXBvbGxfbXMpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGZpcm13YXJlIGxpdmVzIGluIHZvbGF0aWxlIFJBTTogbm8gcmVzZXQgd2hpbGUgdGhlIE1EMzIgcmVwb3J0cyByZWFkeS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYgPSBtY3UtXHUwMDNlbWRpb2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O01EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghbWN1LVx1MDAzZXJlc2V0X2dwaW8pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgZmFpbGVkIHJlYWQgaXMgbm90IGEgZG9ybWFudCBjaGlwLCBzbyBkbyBub3QgdG91Y2ggYSBsaW5lIHRoYXRcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChtY3UtXHUwMDNlcmVzZXRfZ3BpbykgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRkZXZfZGJnKGRldiwgXCYjMzQ7TUQzMiBzdGF0ZSB1bmtub3duICglZCksIGxlYXZpbmcgcmVzZXQgYWxvbmVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcJiMzNDtyZXNldC1hc3NlcnQtdXNcJiMzNDssIFx1MDAyNmFzc2VydF91cyk7XG4mIzQzO1x0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXCYjMzQ7cmVzZXQtZGVhc3NlcnQtdXNcJiMzNDssIFx1MDAyNmRlYXNzZXJ0X3VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChtY3UtXHUwMDNlcmVzZXRfZ3BpbywgMSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtyZXNldCBub3QgYXNzZXJ0ZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhc3NlcnRfdXMpXG4mIzQzO1x0XHRmc2xlZXAoYXNzZXJ0X3VzKTtcbiYjNDM7XG4mIzQzO1x0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG1jdS1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbiYjNDM7XHRpZiAoZGVhc3NlcnRfdXMpXG4mIzQzO1x0XHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4mIzQzO1xuJiM0MztcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFtY3UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWN1LVx1MDAzZW1kaW9kZXYgPSBtZGlvZGV2O1xuJiM0MztcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgbWN1KTtcbiYjNDM7XG4mIzQzO1x0LyogUmVnaXN0cmF0aW9uIG5lZWRzIHRoaXMgb25seSBvbmNlIHRoZSBmaXJtd2FyZSBydW5zLCBidXQgYSBEVFxuJiM0MztcdCAqIGhvbGUgc2hvdWxkIGZhaWwgdGhlIGJpbmQgbm93LCBub3QgYXMgYSB3b3JrLWl0ZW0gZXJyb3IgbGF0ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFVixcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O25vIG1kaW8gbm9kZSBkZXNjcmliaW5nIHRoZSBQSFlcXG5cJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KG5wKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNvcmUgY2xhaW1zIHJlc2V0LWdwaW9zIG9ubHkgZm9yIGRldmljZXMgZmxhZ2dlZCBhcyBQSFlzLiAqL1xuJiM0MztcdG1jdS1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcJiMzNDtyZXNldFwmIzM0OywgR1BJT0RfQVNJUyk7XG4mIzQzO1x0aWYgKElTX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobWN1LVx1MDAzZXJlc2V0X2dwaW8pLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCByZXNldCBHUElPXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1jdS1cdTAwM2VyZXNldF9ncGlvKVxuJiM0MztcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWN1LVx1MDAzZXJlc2V0X2dwaW8sIFwmIzM0O0VOODgxMUggcmVzZXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRtY3UtXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsIGVuODgxMWhfbWN1X2Z3X3BvbGwpO1xuJiM0MztcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxuJiM0MztcdCAqIGEgc3VzcGVuZGluZyBidXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG4mIzQzO1xuJiM0MztcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZtY3UtXHUwMDNlZndfcG9sbCk7XG4mIzQzO1x0aWYgKG1jdS1cdTAwM2VidXMpIHtcbiYjNDM7XHRcdG1kaW9idXNfdW5yZWdpc3RlcihtY3UtXHUwMDNlYnVzKTtcbiYjNDM7XHRcdG1kaW9idXNfZnJlZShtY3UtXHUwMDNlYnVzKTtcbiYjNDM7XHRcdG1jdS1cdTAwM2VidXMgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBOb3RoaW5nIHRvIHJlZG86IHRoZSBwb2xsIGlzIGFybWVkIGFuZCB0aGF3cyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gKi9cbiYjNDM7XHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0JiMzOTtzIFBIWSByZXN1bWVzIHJpZ2h0IGFmdGVyIHRoaXNcbiYjNDM7XHQgKiBvbmUgYW5kIGNhbGxzIHBoeV9pbml0X2h3KCksIHdoaWNoIG5lZWRzIHRoZSBmaXJtd2FyZSBieSB0aGVuLlxuJiM0MztcdCAqL1xuJiM0MztcdGNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTtcbiYjNDM7XHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgISFjaGlwKTtcbiYjNDM7XHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XG4mIzQzO1x0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0LyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHNcbiYjNDM7XHRcdCAqIG93biByZXN1bWUgaGFzIGFscmVhZHkgZmFpbGVkIGJ5IHRoZW4gYW5kIG5vdGhpbmcgY2FsbHNcbiYjNDM7XHRcdCAqIHBoeV9pbml0X2h3KCkgdHdpY2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtmaXJtd2FyZSBub3QgcmVzdG9yZWQsIHJlbG9hZGluZzogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0bWN1LVx1MDAzZWZ3X3J1bm5pbmcgPSBmYWxzZTtcbiYjNDM7XHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YWl0ZWRfbXMgPSAwO1xuJiM0MztcdFx0bWN1LVx1MDAzZXdhcm5lZCA9IGZhbHNlO1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGVuODgxMWhfbWN1X3BtX29wcywgTlVMTCwgZW44ODExaF9tY3VfcmVzdW1lKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVuODgxMWhfbWN1X29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdVwmIzM0OyB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBlbjg4MTFoX21jdV9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGVuODgxMWhfbWN1X2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSBlbjg4MTFoX21jdV9wcm9iZSxcbiYjNDM7XHQucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLFxuJiM0MztcdC5tZGlvZHJ2LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7YWlyb2hhLWVuODgxMWgtbWN1XCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gZW44ODExaF9tY3Vfb2ZfbWF0Y2gsXG4mIzQzO1x0XHQucG0gPSBwbV9zbGVlcF9wdHIoXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcbiYjNDM7XHRcdC8qIFRlYXJpbmcgdGhlIGNoaWxkIGJ1cyBkb3duIHVuZGVyIGFuIGF0dGFjaGVkIFBIWSBpcyBub3RcbiYjNDM7XHRcdCAqIHNvbWV0aGluZyB0aGlzIGRyaXZlciBjYW4gbWFrZSBzYWZlIG9uIGl0cyBvd24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKGVuODgxMWhfbWN1X2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbiYjNDM7TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7QWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IGVjN2M0NGNhNjhlN2QuLjg2MWI4ZmU0OWUyNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0yMCwyMSAmIzQzOzIwLDE1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG4gXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFx0XHQweDAzYTJhNDExXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcdFx0MHhjMGZmMDRhMFxuIFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFwmIzM0O2Fpcm9oYS9FdGhNRDMyLmRtLmJpblwmIzM0O1xuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFx0XCYjMzQ7YWlyb2hhL0V0aE1EMzIuRFNQLmJpblwmIzM0O1xuICNkZWZpbmUgQU44ODExSEJfTUQzMl9ETVx0XCYjMzQ7YWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRNLmJpblwmIzM0O1xuICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1BcdFwmIzM0O2Fpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5EU1AuYmluXCYjMzQ7XG4gXG4tI2RlZmluZSBBSVJfRldfQUREUl9ETVx0MHgwMDAwMDAwMFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQXHQweDAwMTAwMDAwXG4tXG4gLyogTUlJIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQUlSX0FVWF9DVFJMX1NUQVRVU1x0XHQweDFkXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfTUFTS1x0R0VOTUFTSyg0LCAyKVxuQEAgLTQ0LDggJiM0MzszOCw2IEBAXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFx0MHhjXG4gXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcdFx0MHg4MDA5XG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXHRcdFx0MHgwMlxuIFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcdFx0MHg4MDBiXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVx0XHQweDgwMGNcbkBAIC0xMDgsOCAmIzQzOzEwMCw2IEBAXG4gI2RlZmluZSBFTjg4MTFIXzJQNUdfTFBBXHRcdDB4M2IzMFxuICNkZWZpbmUgICBFTjg4MTFIXzJQNUdfTFBBXzJQNUdcdFx0XHRCSVQoMClcbiBcbi0jZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlx0XHQweDNiM2Ncbi1cbiAjZGVmaW5lIEVOODgxMUhfUE9MQVJJVFlcdFx0MHhjYTBmOFxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTFx0XHRCSVQoMClcbiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFXHRcdEJJVCgxKVxuQEAgLTEyMiwxMiAmIzQzOzExMiw2IEBAXG4gI2RlZmluZSBFTjg4MTFIX0NMS19DR01cdFx0XHQweGNmOTU4XG4gI2RlZmluZSAgIEVOODgxMUhfQ0xLX0NHTV9DS09cdFx0XHRCSVQoMjYpXG4gXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMVx0XHQweDBmMDAxOFxuLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVFx0XHQweDBcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXHRcdDB4MVxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJcdFx0MHg4MDAwMDBcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkdcdFx0QklUKDExKVxuLVxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX1NFVDFcdFx0MHhmMDIwY1xuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjJcdFx0MHhmMDIxOFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjNcdFx0MHhmMDIxY1xuQEAgLTI3MCw4NiAmIzQzOzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IHJldDtcbi1cdHUxNiB2YWw7XG4tXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCAmIzQzOz0gNCkge1xuLVx0XHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXHUwMDI2ZnctXHUwMDNlZGF0YVtvZmZzZXQgJiM0MzsgMl0pO1xuLVx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmZ3LVx1MDAzZWRhdGFbb2Zmc2V0XSk7XG4tXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuLXtcbi1cdGludCBzYXZlZF9wYWdlO1xuLVx0aW50IHJldCA9IDA7XG4tXG4tXHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbi1cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2Zpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cJiMzNDssXG4tXHRcdFx0ICAgZnctXHUwMDNlc2l6ZSk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbi1cbi1cdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBfX2Fpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCBmdyk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgIGFkZHJlc3MsIHJldCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQsIHJlZ192YWx1ZTtcbiYjNDM7XHRpbnQgcmV0ID0gYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGZhbHNlKTtcbiBcbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqL1xuLVx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuLVx0XHRcdFx0XHRFTjg4MTFIX1BIWV9GV19TVEFUVVMsIHJlZ192YWx1ZSxcbi1cdFx0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuLVx0XHRcdFx0XHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtNQ1Ugbm90IHJlYWR5OiAweCV4XFxuXCYjMzQ7LCByZWdfdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxuQEAgLTQxMSw3ICYjNDM7MzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcbiYjNDM7XHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBhZGRyZXNzLCBmdywgZmFsc2UpO1xuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC01MDcsNTQgJiM0Mzs0MTksMTEgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXG4gc3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjtcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbi1cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuLVx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuLVxuLVx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuLVxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4tXG4tZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tXG4mIzQzO1x0cmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIFx1MDAyNnByaXYtXHUwMDNlZmlybXdhcmVfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFxuQEAgLTExNTYsOCAmIzQzOzEwMjUsOCBAQCBzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cbi1cdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcbiYjNDM7XHQvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gKHJldCA9PSAxKTtcbiBcbiBcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbiBcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcbmluZGV4IDUxNDFkYjE5ZmE1ZWUuLjdmNzUzMDI3MzYwMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcbkBAIC04LDM3ICYjNDM7OCw0MiBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG4gXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4mIzQzO1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4mIzQzO1x0XHRcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4tXHRcdFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4mIzQzO1x0cGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbiBcdGlmIChwYnVzX2RhdGFfaGlnaCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBidXNfZGF0YV9oaWdoO1xuIFxuLVx0cGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuJiM0MztcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuIFx0aWYgKHBidXNfZGF0YV9sb3cgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfbG93O1xuIFxuQEAgLTQ2LDY0ICYjNDM7NTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4mIzQzO1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4mIzQzO1x0XHRcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4tXHRcdFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbiYjNDM7XHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdHUzMiBwYnVzX2RhdGFfb2xkLCBwYnVzX2RhdGFfbmV3O1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcbiYjNDM7XHRcdFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbiYjNDM7XHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbiYjNDM7XHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xuIFx0aWYgKHBidXNfZGF0YV9oaWdoIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XG4gXG4tXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4mIzQzO1x0cGJ1c19kYXRhX2xvdyA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4gXHRpZiAocGJ1c19kYXRhX2xvdyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBidXNfZGF0YV9sb3c7XG4gXG5AQCAtMTEyLDIzICYjNDM7MTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxuJiM0MztcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuJiM0MztcdFx0XHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuJiM0MztcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0xNDQsNyAmIzQzOzE1MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcbkBAIC0xNjMsNyAmIzQzOzE3MSw3IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbiBcbiBcdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBwYnVzX2FkZHJlc3MsXG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbkBAIC0xODMsOCAmIzQzOzE5MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzayxcbi1cdFx0XHRcdFx0XHRzZXQpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRtYXNrLCBzZXQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4gXHRcdFx0XHQgICBwYnVzX2FkZHJlc3MsIHJldCk7XG5AQCAtMTk0LDYgJiM0MzsyMDIsMzQzIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KTtcbiBcbiYjNDM7c3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbiYjNDM7XHRcdFx0ICAgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTE2IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuJiM0MztcdFx0XHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuOyBvZmZzZXQgJiM0Mzs9IDQpIHtcbiYjNDM7XHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZkYXRhW29mZnNldCAmIzQzOyAyXSk7XG4mIzQzO1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwgdmFsKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmRhdGFbb2Zmc2V0XSk7XG4mIzQzO1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cbiYjNDM7c3RhdGljIGludCBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gc2F2ZWRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuJiM0MztcdFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsIHBhZ2UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzYXZlZF9wYWdlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiYjNDM7XHRcdFx0XHQgICBpbnQgc2F2ZWRfcGFnZSwgaW50IHBhZ2UsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuJiM0MztcdFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxuJiM0MztcdFx0XHRcdFx0ICBzYXZlZF9wYWdlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByZXN0b3JlIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXQgPSByZXN0b3JlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuJiM0MztzdGF0aWMgdm9pZCBhaXJfbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAobmVzdGVkKVxuJiM0MztcdFx0bWRpb2Rldl9sb2NrX25lc3RlZChtZGlvZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4mIzQzO1x0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGNodW5rLCBkb25lID0gMDtcbiYjNDM7XHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0O2Zpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGZ3LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAoZG9uZSBcdTAwM2MgZnctXHUwMDNlc2l6ZSkge1xuJiM0MztcdFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVx1MDAzZXNpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpO1xuJiM0MztcbiYjNDM7XHRcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XG4mIzQzO1x0XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuJiM0MztcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gc2F2ZWRfcGFnZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICYjNDM7IGRvbmUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBmdy1cdTAwM2VkYXRhICYjNDM7IGRvbmUsIGNodW5rKTtcbiYjNDM7XHRcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHJldCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGRvbmUgJiM0Mzs9IGNodW5rO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2Z3X3dyaXRlX2J1Zik7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgKnBidXNfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgICBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4mIzQzO1xuJiM0MztcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XG4mIzQzO1x0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuJiM0MztcdGlmIChzYXZlZF9wYWdlIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyZXQgPSBzYXZlZF9wYWdlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbiYjNDM7XG4mIzQzO1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcGJ1c19kYXRhKTtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4mIzQzO1x0XHRcdFx0XHR1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbiYjNDM7XG4mIzQzO1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgcGJ1c19hZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRtYXNrLCBzZXQpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogbW1kX3BoeV9yZWFkKCkgZHJvcHMgdGhlIGVycm9ycyBmcm9tIHRoZSB0aHJlZSB3cml0ZXMgdGhhdCBzZWxlY3QgdGhlXG4mIzQzOyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfbW1kX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MTYgZGV2YWQsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4mIzQzO1x0aW50IGFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLCBkZXZhZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLFxuJiM0MztcdFx0XHQgICAgICBkZXZhZCB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XHRyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTtcbiYjNDM7XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gYWlyX21tZF9zdGF0dXNfcmVhZChtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9tY3VfcnVubmluZyk7XG4mIzQzO1xuJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHJlZ192YWx1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxuJiM0MztcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2Fkcy4gQSByZWFkXG4mIzQzO1x0ICogZXJyb3IgZW5kcyB0aGUgcG9sbCBhdCBvbmNlLCBsaWtlIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhaXJfbW1kX3N0YXR1c19yZWFkLCByZWdfdmFsdWUsXG4mIzQzO1x0XHRcdFx0cmVnX3ZhbHVlIFx1MDAzYyAwIHx8XG4mIzQzO1x0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuJiM0MztcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlLCBtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZWdfdmFsdWUgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmVnX3ZhbHVlO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9kYmcoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6IDB4JXhcXG5cJiMzNDssIHJlZ192YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KTtcbiYjNDM7XG4mIzQzO2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbiYjNDM7XHRcdFx0ICAgIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuJiM0MztcdFx0XHRcdFx0XHQgZndfdmVyc2lvbiwgbmVzdGVkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICpmd192ZXJzaW9uKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxuJiM0MztcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxuJiM0MztcdFx0XHRcdFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyxcbiYjNDM7XHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9ETSwgZncxLCBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9md193cml0ZV9idWYobWRpb2RldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbiYjNDM7XHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuJiM0MztcdFx0XHRcdFx0IGZ3X3ZlcnNpb24sIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm8oZGV2LCBcJiMzNDtNRDMyIGZpcm13YXJlIHZlcnNpb246ICUwOHhcXG5cJiMzNDssICpmd192ZXJzaW9uKTtcbiYjNDM7XG4mIzQzO2Fpcl9md19kb3dubG9hZF9vdXQ6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShmdzIpO1xuJiM0MztcbiYjNDM7YWlyX2Z3X2Rvd25sb2FkX3JlbDE6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShmdzEpO1xuJiM0MztcbiYjNDM7XHQvKiBObyBlcnJvciBwcmludDogY2FsbGVycyBsb2cgb24gdGhlaXIgb3duIHRlcm1zLCBhbmQgYSBwb2xsZXJcbiYjNDM7XHQgKiB3b3VsZCByZXBlYXQgaXQgb24gZXZlcnkgcmV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7XG4mIzQzO1xuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmggYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxuaW5kZXggMDFiYjMyZTdjN2M5NS4uNTZiYTk4N2E2OGNjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxuQEAgLTEwLDEyICYjNDM7MTAsMTkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFx1MDAzZVxuJiM0MztcbiAjZGVmaW5lIEFJUl9FWFRfUEFHRV9BQ0NFU1NcdFx0MHgxZlxuIFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX1NUQU5EQVJEXHRcdDB4MDAwMFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzFcdFx0MHgwMDAxXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfNFx0XHQweDAwMDRcbiBcbiYjNDM7LyogQnl0ZXMgd3JpdHRlbiBiZXR3ZWVuIGJ1cyByZWxlYXNlcywgc28gdGhlIG90aGVyIFBIWXMgb24gaXQgZ2V0IGEgdHVybi5cbiYjNDM7ICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFJUl9GV19DSFVOS19CWVRFU1x0XHQyMzA0XG4mIzQzO1xuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cbiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFXHRcdFx0MHgxMFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXHRcdDB4MDAwMFxuQEAgLTI5LDYgJiM0MzszNiwyMCBAQFxuICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfSElHSFx0XHQweDE3XG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9MT1dcdFx0MHgxOFxuIFxuJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RNXHRcdFx0MHgwMDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0XHRcdDB4MDAxMDAwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcdFx0MHgwZjAwMThcbiYjNDM7I2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXHRcdDB4MFxuJiM0MzsjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXHRcdDB4MVxuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXHRcdDB4ODAwMDAwXG4mIzQzOyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTXHRcdDB4ODAwOVxuJiM0MzsjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcdFx0XHQweDAyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlx0XHQweDNiM2NcbiYjNDM7XG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0XHRcdFx0dTMyIG1hc2ssIHUzMiBzZXQpO1xuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG5AQCAtMzgsNCAmIzQzOzU5LDEwIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgYWlyX3BoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKTtcbiBcbiYjNDM7c3RydWN0IGZpcm13YXJlO1xuJiM0MztcbiYjNDM7aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbiYjNDM7XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpO1xuJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7XG4mIzQzO1xuICNlbmRpZiAvKiBfX0FJUl9QSFlfTElCX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0OTRkYzZjMTAyMmNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhcbkBAIC0wLDAgJiM0MzsxLDI1IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2xsYWJvcmEgTHRkLlxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgTG91aXMtQWxleGlzIEV5cmF1ZCBcdTAwM2Nsb3Vpc2FsZXhpcy5leXJhdWRAY29sbGFib3JhLmNvbVx1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXG4mIzQzOyNkZWZpbmUgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBtZGlvX2RldmljZTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFx0XCYjMzQ7YWlyb2hhL0V0aE1EMzIuZG0uYmluXCYjMzQ7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFx0XHRcJiMzNDthaXJvaGEvRXRoTUQzMi5EU1AuYmluXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm5zIDEgcnVubmluZywgMCBkb3JtYW50LCBuZWdhdGl2ZSBvbiBhIGZhaWxlZCBzdGF0dXMgcmVhZC4gKi9cbiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xuJiM0MzsvKiBSZXR1cm5zIDEgd2hlbiBpdCBhZG9wdGVkIGZpcm13YXJlIHRoYXQgd2FzIGFscmVhZHkgcnVubmluZy4gKi9cbiYjNDM7aW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLFxuJiM0MztcdFx0XHQgICAgYm9vbCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmU3NGE4ZjVjZjVjNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjI4NCw2ICYjNDM7MjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdF9fcHJpbnRmKDIsIDMpO1xuIGNoYXIgKnBoeV9hdHRhY2hlZF9pbmZvX2lycShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIERldmljZSBUcmVlIGJpbmRpbmdzLCBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkvTUNVIGhhcmR3YXJlLiBUaGVzZSBkcml2ZXJzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBBaXJvaGEgaGFyZHdhcmUgKGFuZCByZXF1aXJlIERldmljZSBUcmVlIE1ESU8gZW51bWVyYXRpb24pIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMjc2NWI3NzlhNDFiMmQ4M2Y0OTBiZGExZThjOTM2MTJmNTE4MWFiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwMTo1MjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdiZTBhYjg2MjI2NjEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sCkBAIC0wLDAgJiM0MzsxLDExNyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBBaXJvaGEgRU44ODExSCBQSFkgTUNVCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEFsZWtzZWkgU3Zpcmlka2luICZsdDtmQGxleC5sYSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgVGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgUEhZIGlzIGJ1aWx0IGFyb3VuZCBhbiBNRDMyIGNvcmUgdGhhdCBleGVjdXRlcwomIzQzOyAgZmlybXdhcmUgZnJvbSB2b2xhdGlsZSBSQU0uIFRoZSBjaGlwIGFuc3dlcnMgYW4gTURJTyBhZGRyZXNzIGZyb20KJiM0MzsgIHBvd2VyLW9uLCBidXQgdGhlIFBIWSBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdCB1bnRpbCBmaXJtd2FyZSBoYXMgYmVlbgomIzQzOyAgbG9hZGVkIG92ZXIgTURJTywgYW5kIGl0IGRpc2FwcGVhcnMgYWdhaW4gaWYgdGhhdCBSQU0gaXMgY2xlYXJlZC4KJiM0MzsKJiM0MzsgIFRoaXMgbm9kZSBkZXNjcmliZXMgdGhlIE1EMzIgY29yZS4gVGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIGEgY2hpbGQKJiM0MzsgIE1ESU8gYnVzIGJlbG93IGl0LCBhdCB0aGUgc2FtZSBhZGRyZXNzIHRoZSBjb3JlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnQKJiM0MzsgIGJ1cywgYW5kIG9ubHkgd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZy4KJiM0MzsKJiM0MzsgIFRoZSByZXNldCBsaW5lIGlzIHdpcmVkIHRvIHRoZSBjb3JlLCBhbmQgYXNzZXJ0aW5nIGl0IGNsZWFycyB0aGUKJiM0MzsgIGZpcm13YXJlIFJBTS4gSXQgdGhlcmVmb3JlIGJlbG9uZ3MgdG8gdGhpcyBub2RlOiBhIHJlc2V0IGRlc2NyaWJlZCBvbgomIzQzOyAgdGhlIFBIWSBub2RlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGF0IG5vZGUmIzM5O3Mgb3duIGxpZmVjeWNsZSwgd2hhdGV2ZXIKJiM0MzsgIHRoZSBjb3JlIGlzIGRvaW5nLgomIzQzOwomIzQzOyAgQSBib2FyZCB0aGF0IGhhcyBmaXJtd2FyZSBpbiBoYW5kIHdoaWxlIGl0cyBNRElPIGJ1cyBpcyBlbnVtZXJhdGVkIGNhbgomIzQzOyAgZGVzY3JpYmUgdGhlIFBIWSBvbiBpdHMgb3duLCBhcyBhaXJvaGEsZW44ODExaC55YW1sIGRvZXMsIGFuZCB0aGF0IGZvcm0KJiM0MzsgIHN0YXlzIHZhbGlkLiBUaGlzIGJpbmRpbmcgaXMgZm9yIHRoZSBib2FyZHMgd2hlcmUgZmlybXdhcmUgYXJyaXZlcwomIzQzOyAgbGF0ZXIsIHNvIHRoYXQgdGhlcmUgaXMgbm8gUEhZIHRvIGRlc2NyaWJlIHVudGlsIHRoZSBjb3JlIGhhcyBpdC4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgJG5vZGVuYW1lOgomIzQzOyAgICBwYXR0ZXJuOiAmIzM0O15tY3VAWzAtOWEtZl0mIzQzOyQmIzM0OwomIzQzOwomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgY29uc3Q6IGFpcm9oYSxlbjg4MTFoLW1jdQomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgcmVzZXQtZ3Bpb3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFRoZSBHUElPIHBoYW5kbGUgYW5kIHNwZWNpZmllciBmb3IgdGhlIHJlc2V0IHNpZ25hbCB3aXJlZCB0byB0aGUKJiM0MzsgICAgICBNRDMyIGNvcmUuCiYjNDM7CiYjNDM7ICByZXNldC1hc3NlcnQtdXM6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzCiYjNDM7ICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLgomIzQzOwomIzQzOyAgcmVzZXQtZGVhc3NlcnQtdXM6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgZGVhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXMKJiM0MzsgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuCiYjNDM7CiYjNDM7ICBtZGlvOgomIzQzOyAgICAkcmVmOiBtZGlvLnlhbWwjCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFRoZSBidXMgdGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcsIGF0CiYjNDM7ICAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGlzIG5vZGUgb2NjdXBpZXMgb24gdGhlIHBhcmVudCBidXMuIE9ubHkgdGhhdAomIzQzOyAgICAgIG9uZSBhZGRyZXNzIGlzIHBhc3NlZCB0aHJvdWdoLgomIzQzOwomIzQzOyAgICBwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgICAgICAmIzM5O15ldGhlcm5ldC1waHlAWzAtOWEtZl0mIzQzOyQmIzM5OzoKJiM0MzsgICAgICAgIHR5cGU6IG9iamVjdAomIzQzOyAgICAgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjCiYjNDM7ICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2UKJiM0MzsgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzOiBmYWxzZQomIzQzOyAgICAgICAgICByZXNldC1kZWFzc2VydC11czogZmFsc2UKJiM0MzsKJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICBUaGUgcmVzZXQgbGluZSBiZWxvbmdzIHRvIHRoZSBNQ1Ugbm9kZSBhYm92ZS4gQSByZXNldCBkZXNjcmliZWQKJiM0MzsgICAgICAgICAgaGVyZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhpcyBub2RlJiMzOTtzIG93biBsaWZlY3ljbGUsIGFuZCB0aGF0IGVyYXNlcwomIzQzOyAgICAgICAgICB0aGUgZmlybXdhcmUgdGhhdCBjcmVhdGVkIHRoaXMgUEhZLgomIzQzOwomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gcmVnCiYjNDM7ICAtIG1kaW8KJiM0MzsKJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmgmZ3Q7CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaCZndDsKJiM0MzsKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgbWN1QGQgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdSYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweGQmZ3Q7OwomIzQzOyAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gJmx0OyZhbXA7cGlvIDE0IEdQSU9fQUNUSVZFX0xPVyZndDs7CiYjNDM7ICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gJmx0OzEwMDAwJmd0OzsKJiM0MzsgICAgICAgICAgICByZXNldC1kZWFzc2VydC11cyA9ICZsdDsyMDAwMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgbWRpbyB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgZXRoZXJuZXQtcGh5QGQgewomIzQzOyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDNhMi5hNDExJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MHhkJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMtZXh0ZW5kZWQgPSAmbHQ7JmFtcDtwaW8gMTUgSVJRX1RZUEVfTEVWRUxfTE9XJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYjIzZmI2ZjJmNGVmNC4uM2JkODZkZjJiZTU3MSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTc1MCw2ICYjNDM7NzUwLDE0IEBAIFM6CVN1cHBvcnRlZAogRjoJZnMvYWlvLmMKIEY6CWluY2x1ZGUvbGludXgvKmFpbyouaAogCiYjNDM7QUlST0hBIEVOODgxMUggTUNVIE1ESU8gRFJJVkVSCiYjNDM7TToJQWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbAomIzQzO0Y6CWRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jCiYjNDM7RjoJaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaAomIzQzOwogQUlST0hBIEVUSEVSTkVUIERSSVZFUgogTToJTG9yZW56byBCaWFuY29uaSAmbHQ7bG9yZW56b0BrZXJuZWwub3JnJmd0OwogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZwppbmRleCBkNDQyNzhmMjZmYWJlLi4zM2VmYzZiYzg3NWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnCkBAIC0yOSw2ICYjNDM7MjksMTkgQEAgY29uZmlnIE1ESU9fQUlST0hBCiAJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE1ESU8gYnVzc2VzIGZvdW5kIGluIHRoZQogCSAgQWlyb2hhIEFONzU4MyBTb0MmIzM5O3MuCiAKJiM0Mztjb25maWcgTURJT19BSVJPSEFfRU44ODExSAomIzQzOwl0cmlzdGF0ZSAmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnQmIzM0OwomIzQzOwlkZXBlbmRzIG9uIE9GX01ESU8KJiM0MzsJZGVwZW5kcyBvbiBGV19MT0FERVIKJiM0MzsJc2VsZWN0IEFJUl9ORVRfUEhZTElCCiYjNDM7CWltcGx5IEFJUl9FTjg4MTFIX1BIWQomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCwgd2hpY2ggaXMgYW4KJiM0MzsJICBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8gaXQgYW5kIG9ubHkKJiM0MzsJICBiZWNvbWVzIGFuIEV0aGVybmV0IFBIWSBhZnRlcndhcmRzLiBUaGUgZHJpdmVyIGRvd25sb2FkcyB0aGF0CiYjNDM7CSAgZmlybXdhcmUgb25jZSBpdCBiZWNvbWVzIHJlYWRhYmxlLCBvciBhZG9wdHMgZmlybXdhcmUgYSBib290bG9hZGVyCiYjNDM7CSAgbGVmdCBydW5uaW5nLgomIzQzOwogY29uZmlnIE1ESU9fU1VONEkKIAl0cmlzdGF0ZSAmIzM0O0FsbHdpbm5lciBzdW40aSBNRElPIGludGVyZmFjZSBzdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZQppbmRleCAwNDg1ODY3NDYwMjYyLi4wNmQwOTY2NzVkYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUKQEAgLTYsNiAmIzQzOzYsNyBAQCBvYmotJChDT05GSUdfRldOT0RFX01ESU8pCSYjNDM7PSBmd25vZGVfbWRpby5vCiBvYmotJChDT05GSUdfT0ZfTURJTykJCSYjNDM7PSBvZl9tZGlvLm8KIAogb2JqLSQoQ09ORklHX01ESU9fQUlST0hBKQkJJiM0Mzs9IG1kaW8tYWlyb2hhLm8KJiM0MztvYmotJChDT05GSUdfTURJT19BSVJPSEFfRU44ODExSCkJJiM0Mzs9IG1kaW8tYWlyb2hhLWVuODgxMWgubwogb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKQkJJiM0Mzs9IG1kaW8tYXNwZWVkLm8KIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQykJCSYjNDM7PSBtZGlvLWJjbS1pcHJvYy5vCiBvYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKQkJJiM0Mzs9IG1kaW8tYmNtLXVuaW1hYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyMjQ1NTg5MTQ3MjcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYwpAQCAtMCwwICYjNDM7MSwzODIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIFRoZSBFTjg4MTFIIGlzIGFuIE1EMzIgbWljcm9jb250cm9sbGVyIHVudGlsIGZpcm13YXJlIGlzIGRvd25sb2FkZWQgaW50bwomIzQzOyAqIGl0LCBhbmQgb25seSB0aGVuIGFuIEV0aGVybmV0IFBIWS4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBbGVrc2VpIFN2aXJpZGtpbiAmbHQ7ZkBsZXgubGEmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Zpcm13YXJlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2dwaW8vY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgRU44ODExSF9GV19QT0xMX01JTl9NUwkxMDAwCiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TCTMwMDAwCiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX1dBUk5fTVMJNjAwMDAKJiM0MzsKJiM0MztzdHJ1Y3QgZW44ODExaF9tY3UgewomIzQzOwlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CiYjNDM7CXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CiYjNDM7CXN0cnVjdCBkZWxheWVkX3dvcmsgZndfcG9sbDsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1czsKJiM0MzsJdW5zaWduZWQgaW50IHBvbGxfbXM7CiYjNDM7CXVuc2lnbmVkIGludCB3YWl0ZWRfbXM7CiYjNDM7CXUzMiBmd192ZXJzaW9uOwomIzQzOwlib29sIHdhcm5lZDsKJiM0MzsJYm9vbCBmd19ydW5uaW5nOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChhZGRyICE9IG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXR1cm4gbWRpb2J1c19yZWFkX25lc3RlZChtY3UtJmd0O21kaW9kZXYtJmd0O2J1cywgYWRkciwgcmVnbnVtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoYWRkciAhPSBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1kaW9idXNfd3JpdGVfbmVzdGVkKG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLCBhZGRyLCByZWdudW0sIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCwKJiM0MzsJCQkJaW50IHJlZ251bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoYWRkciAhPSBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1kaW9idXNfYzQ1X3JlYWRfbmVzdGVkKG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCwKJiM0MzsJCQkJIGludCByZWdudW0sIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgIT0gbWN1LSZndDttZGlvZGV2LSZndDthZGRyKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LSZndDttZGlvZGV2LSZndDtidXMsIGFkZHIsIGRldmFkLCByZWdudW0sCiYjNDM7CQkJCQl2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X2J1c19yZWdpc3RlcihzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpwYXJlbnQgPSBtY3UtJmd0O21kaW9kZXYtJmd0O2J1czsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttY3UtJmd0O21kaW9kZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucDsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtJmd0O29mX25vZGUsICYjMzQ7bWRpbyYjMzQ7KTsKJiM0MzsJaWYgKCFucCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwkvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0CiYjNDM7CSAqIGRldGFjaC4KJiM0MzsJICovCiYjNDM7CWJ1cyA9IG1kaW9idXNfYWxsb2MoKTsKJiM0MzsJaWYgKCFidXMpIHsKJiM0MzsJCW9mX25vZGVfcHV0KG5wKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1cy0mZ3Q7bmFtZSA9ICYjMzQ7YWlyb2hhLWVuODgxMWgmIzM0OzsKJiM0MzsJc25wcmludGYoYnVzLSZndDtpZCwgTUlJX0JVU19JRF9TSVpFLCAmIzM0OyVzJiMzNDssIGRldl9uYW1lKGRldikpOwomIzQzOwlidXMtJmd0O3ByaXYgPSBtY3U7CiYjNDM7CWJ1cy0mZ3Q7cGFyZW50ID0gZGV2OwomIzQzOwlpZiAocGFyZW50LSZndDtyZWFkKSB7CiYjNDM7CQlidXMtJmd0O3JlYWQgPSBlbjg4MTFoX21jdV9yZWFkOwomIzQzOwkJYnVzLSZndDt3cml0ZSA9IGVuODgxMWhfbWN1X3dyaXRlOwomIzQzOwl9CiYjNDM7CWlmIChwYXJlbnQtJmd0O3JlYWRfYzQ1KSB7CiYjNDM7CQlidXMtJmd0O3JlYWRfYzQ1ID0gZW44ODExaF9tY3VfcmVhZF9jNDU7CiYjNDM7CQlidXMtJmd0O3dyaXRlX2M0NSA9IGVuODgxMWhfbWN1X3dyaXRlX2M0NTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApOwomIzQzOwlvZl9ub2RlX3B1dChucCk7CiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgIW1kaW9idXNfZ2V0X3BoeShidXMsIG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcikpIHsKJiM0MzsJCS8qIEFuIElEIHJlYWQgdGhhdCBmYWlsZWQgbGVhdmVzIHRoZSBidXMgcmVnaXN0ZXJlZCBhbmQgdGhlCiYjNDM7CQkgKiBQSFkgYWJzZW50OyBvZl9tZGlvYnVzX3JlZ2lzdGVyKCkgcmV0dXJucyAwIGVpdGhlciB3YXkuCiYjNDM7CQkgKi8KJiM0MzsJCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQltZGlvYnVzX2ZyZWUoYnVzKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWN1LSZndDtidXMgPSBidXM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXJpYWxpc2Ugd2l0aCB0aGUgUEhZIGJlbG93LCB3aGljaCByZWFjaGVzIHRoZSBzYW1lIHJlZ2lzdGVycyB1bmRlcgomIzQzOyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZW44ODExaF9tY3VfY2hpcF9sb2NrKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IG1jdS0mZ3Q7YnVzOwomIzQzOwomIzQzOwlpZiAoYnVzKQomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ1czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfY2hpcF91bmxvY2soc3RydWN0IG1paV9idXMgKmJ1cykKJiM0Mzt7CiYjNDM7CWlmIChidXMpCiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2Z3X3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBlbjg4MTFoX21jdSwgZndfcG9sbCk7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7bWN1LSZndDttZGlvZGV2LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpjaGlwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW1jdS0mZ3Q7ZndfcnVubmluZykgewomIzQzOwkJY2hpcCA9IGVuODgxMWhfbWN1X2NoaXBfbG9jayhtY3UpOwomIzQzOwkJcmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQobWN1LSZndDttZGlvZGV2LCAmYW1wO21jdS0mZ3Q7ZndfdmVyc2lvbiwKJiM0MzsJCQkJCSAgICAgICEhY2hpcCk7CiYjNDM7CQllbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQlkZXZfZGJnKGRldiwgJiMzNDtmaXJtd2FyZSAlMDh4IHJ1bm5pbmcgYWZ0ZXIgJXVtc1xuJiMzNDssCiYjNDM7CQkJbWN1LSZndDtmd192ZXJzaW9uLCBtY3UtJmd0O3dhaXRlZF9tcyk7CiYjNDM7CQlyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X2NhY2hlKGRldiwgRU44ODExSF9NRDMyX0RNKSA/OgomIzQzOwkJICAgICAgZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9EU1ApOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlkZXZfZGJnKGRldiwgJiMzNDtub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXG4mIzM0OywKJiM0MzsJCQkJRVJSX1BUUihyZXQpKTsKJiM0MzsJCW1jdS0mZ3Q7ZndfcnVubmluZyA9IHRydWU7CiYjNDM7CQltY3UtJmd0O3BvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TOwomIzQzOwkJbWN1LSZndDt3YWl0ZWRfbXMgPSAwOwomIzQzOwkJbWN1LSZndDt3YXJuZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZXN1bWUgcmUtcnVucyB0aGUgZG93bmxvYWQsIHNvIHRoZSBidXMgY2FuIGFscmVhZHkgYmUgaGVyZSwgYW5kCiYjNDM7CSAqIGZ3bm9kZV9tZGlvIGRlZmVycyB3aGlsZSB0aGUgUEhZIG5vZGUmIzM5O3MgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMKJiM0MzsJICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBtY3UtJmd0O2J1cyA/IDAgOiBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIobWN1KTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CWlmICghbWN1LSZndDt3YXJuZWQgJmFtcDsmYW1wOyBtY3UtJmd0O3dhaXRlZF9tcyAmZ3Q7PSBFTjg4MTFIX0ZXX1dBUk5fTVMpIHsKJiM0MzsJCWlmICghbWN1LSZndDtmd19ydW5uaW5nKQomIzQzOwkJCWRldl93YXJuKGRldiwgJiMzNDtubyBmaXJtd2FyZSBhZnRlciAldW1zIG9mIHdhaXRpbmcgZm9yICVzIGFuZCAlczogJXBlXG4mIzM0OywKJiM0MzsJCQkJIG1jdS0mZ3Q7d2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sCiYjNDM7CQkJCSBFTjg4MTFIX01EMzJfRFNQLCBFUlJfUFRSKHJldCkpOwomIzQzOwkJZWxzZQomIzQzOwkJCWRldl93YXJuKGRldiwgJiMzNDtubyBQSFkgYXQgYWRkcmVzcyAlZCwgJXVtcyBhZnRlciB0aGUgZmlybXdhcmUgc3RhcnRlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJIG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkciwgbWN1LSZndDt3YWl0ZWRfbXMsCiYjNDM7CQkJCSBFUlJfUFRSKHJldCkpOwomIzQzOwkJbWN1LSZndDt3YXJuZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBhc3QgaXRzIGJ1ZGdldCwgb25seSBhIGRlZmVycmFsIHdpbGwgY2hhbmdlIG9uIGl0cyBvd246IGV2ZXJ5CiYjNDM7CSAqIG90aGVyIGVycm9yIHJlcGVhdHMgYSBidXMgcmVnaXN0cmF0aW9uLCBpdHMgbWVzc2FnZSBmcm9tIHRoZSBNRElPCiYjNDM7CSAqIGNvcmUgYW5kIGl0cyB1ZXZlbnRzIGZvciB0aGUgdXB0aW1lLiBGaXJtd2FyZSBmaWxlcyBhcmUgdGhlCiYjNDM7CSAqIGV4Y2VwdGlvbiwgc2luY2UgdGhleSBjYW4gYmUgaW5zdGFsbGVkIGF0IGFueSB0aW1lLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1jdS0mZ3Q7ZndfcnVubmluZyAmYW1wOyZhbXA7IHJldCAhPSAtRVBST0JFX0RFRkVSICZhbXA7JmFtcDsKJiM0MzsJICAgIG1jdS0mZ3Q7d2FpdGVkX21zICZndDs9IEVOODgxMUhfRldfV0FSTl9NUykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWN1LSZndDtwb2xsX21zID0gbWluKG1jdS0mZ3Q7cG9sbF9tcyAqIDIsIEVOODgxMUhfRldfUE9MTF9NQVhfTVMpOwomIzQzOwkvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi8KJiM0MzsJbWN1LSZndDt3YWl0ZWRfbXMgJiM0Mzs9IG1jdS0mZ3Q7cG9sbF9tczsKJiM0MzsJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZhbXA7bWN1LSZndDtmd19wb2xsLAomIzQzOwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMobWN1LSZndDtwb2xsX21zKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBmaXJtd2FyZSBsaXZlcyBpbiB2b2xhdGlsZSBSQU06IG5vIHJlc2V0IHdoaWxlIHRoZSBNRDMyIHJlcG9ydHMgcmVhZHkuICovCiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYgPSBtY3UtJmd0O21kaW9kZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7bWRpb2Rldi0mZ3Q7ZGV2OwomIzQzOwl1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhaXJfZW44ODExaF9tY3VfcnVubmluZyhtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZndDsgMCkgewomIzQzOwkJZGV2X2RiZyhkZXYsICYjMzQ7TUQzMiBhbHJlYWR5IHJ1bm5pbmcsIGxlYXZpbmcgcmVzZXQgYWxvbmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIW1jdS0mZ3Q7cmVzZXRfZ3BpbykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogQSBmYWlsZWQgcmVhZCBpcyBub3QgYSBkb3JtYW50IGNoaXAsIHNvIGRvIG5vdCB0b3VjaCBhIGxpbmUgdGhhdAomIzQzOwkgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAobWN1LSZndDtyZXNldF9ncGlvKSAmbHQ7PSAwKSB7CiYjNDM7CQlkZXZfZGJnKGRldiwgJiMzNDtNRDMyIHN0YXRlIHVua25vd24gKCVkKSwgbGVhdmluZyByZXNldCBhbG9uZVxuJiMzNDssCiYjNDM7CQkJcmV0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAmIzM0O3Jlc2V0LWFzc2VydC11cyYjMzQ7LCAmYW1wO2Fzc2VydF91cyk7CiYjNDM7CWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICYjMzQ7cmVzZXQtZGVhc3NlcnQtdXMmIzM0OywgJmFtcDtkZWFzc2VydF91cyk7CiYjNDM7CiYjNDM7CXJldCA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQobWN1LSZndDtyZXNldF9ncGlvLCAxKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O3Jlc2V0IG5vdCBhc3NlcnRlZDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYXNzZXJ0X3VzKQomIzQzOwkJZnNsZWVwKGFzc2VydF91cyk7CiYjNDM7CiYjNDM7CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChtY3UtJmd0O3Jlc2V0X2dwaW8sIDApOwomIzQzOwlpZiAoZGVhc3NlcnRfdXMpCiYjNDM7CQlmc2xlZXAoZGVhc3NlcnRfdXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7bWRpb2Rldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucDsKJiM0MzsKJiM0MzsJbWN1ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptY3UpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtY3UpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbWN1LSZndDttZGlvZGV2ID0gbWRpb2RldjsKJiM0MzsJbWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBtY3UpOwomIzQzOwomIzQzOwkvKiBSZWdpc3RyYXRpb24gbmVlZHMgdGhpcyBvbmx5IG9uY2UgdGhlIGZpcm13YXJlIHJ1bnMsIGJ1dCBhIERUCiYjNDM7CSAqIGhvbGUgc2hvdWxkIGZhaWwgdGhlIGJpbmQgbm93LCBub3QgYXMgYSB3b3JrLWl0ZW0gZXJyb3IgbGF0ZXIuCiYjNDM7CSAqLwomIzQzOwlucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi0mZ3Q7b2Zfbm9kZSwgJiMzNDttZGlvJiMzNDspOwomIzQzOwlpZiAoIW5wKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLAomIzQzOwkJCQkgICAgICYjMzQ7bm8gbWRpbyBub2RlIGRlc2NyaWJpbmcgdGhlIFBIWVxuJiMzNDspOwomIzQzOwlvZl9ub2RlX3B1dChucCk7CiYjNDM7CiYjNDM7CS8qIFRoZSBjb3JlIGNsYWltcyByZXNldC1ncGlvcyBvbmx5IGZvciBkZXZpY2VzIGZsYWdnZWQgYXMgUEhZcy4gKi8KJiM0MzsJbWN1LSZndDtyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAmIzM0O3Jlc2V0JiMzNDssIEdQSU9EX0FTSVMpOwomIzQzOwlpZiAoSVNfRVJSKG1jdS0mZ3Q7cmVzZXRfZ3BpbykpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobWN1LSZndDtyZXNldF9ncGlvKSwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgcmVzZXQgR1BJT1xuJiMzNDspOwomIzQzOwomIzQzOwlpZiAobWN1LSZndDtyZXNldF9ncGlvKQomIzQzOwkJZ3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWN1LSZndDtyZXNldF9ncGlvLCAmIzM0O0VOODgxMUggcmVzZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQobWN1LCBmYWxzZSk7CiYjNDM7CiYjNDM7CW1jdS0mZ3Q7cG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7bWN1LSZndDtmd19wb2xsLCBlbjg4MTFoX21jdV9md19wb2xsKTsKJiM0MzsJLyogRnJlZXphYmxlOiBuZWl0aGVyIHRoZSBmaWxlIGxvb2t1cCBub3IgdGhlIGRvd25sb2FkIG1heSBsYW5kIG9uCiYjNDM7CSAqIGEgc3VzcGVuZGluZyBidXMuCiYjNDM7CSAqLwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgJmFtcDttY3UtJmd0O2Z3X3BvbGwsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTsKJiM0MzsKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7bWN1LSZndDtmd19wb2xsKTsKJiM0MzsJaWYgKG1jdS0mZ3Q7YnVzKSB7CiYjNDM7CQltZGlvYnVzX3VucmVnaXN0ZXIobWN1LSZndDtidXMpOwomIzQzOwkJbWRpb2J1c19mcmVlKG1jdS0mZ3Q7YnVzKTsKJiM0MzsJCW1jdS0mZ3Q7YnVzID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqY2hpcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogTm90aGluZyB0byByZWRvOiB0aGUgcG9sbCBpcyBhcm1lZCBhbmQgdGhhd3Mgd2l0aCBldmVyeXRoaW5nIGVsc2UuICovCiYjNDM7CWlmICghbWN1LSZndDtmd19ydW5uaW5nKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0JiMzOTtzIFBIWSByZXN1bWVzIHJpZ2h0IGFmdGVyIHRoaXMKJiM0MzsJICogb25lIGFuZCBjYWxscyBwaHlfaW5pdF9odygpLCB3aGljaCBuZWVkcyB0aGUgZmlybXdhcmUgYnkgdGhlbi4KJiM0MzsJICovCiYjNDM7CWNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTsKJiM0MzsJZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsICEhY2hpcCk7CiYjNDM7CXJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS0mZ3Q7bWRpb2RldiwgJmFtcDttY3UtJmd0O2Z3X3ZlcnNpb24sICEhY2hpcCk7CiYjNDM7CWVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKGNoaXApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJLyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHMKJiM0MzsJCSAqIG93biByZXN1bWUgaGFzIGFscmVhZHkgZmFpbGVkIGJ5IHRoZW4gYW5kIG5vdGhpbmcgY2FsbHMKJiM0MzsJCSAqIHBoeV9pbml0X2h3KCkgdHdpY2UuCiYjNDM7CQkgKi8KJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2Zpcm13YXJlIG5vdCByZXN0b3JlZCwgcmVsb2FkaW5nOiAlcGVcbiYjMzQ7LAomIzQzOwkJCUVSUl9QVFIocmV0KSk7CiYjNDM7CQltY3UtJmd0O2Z3X3J1bm5pbmcgPSBmYWxzZTsKJiM0MzsJCW1jdS0mZ3Q7cG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7CiYjNDM7CQltY3UtJmd0O3dhaXRlZF9tcyA9IDA7CiYjNDM7CQltY3UtJmd0O3dhcm5lZCA9IGZhbHNlOwomIzQzOwkJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZhbXA7bWN1LSZndDtmd19wb2xsLCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhlbjg4MTFoX21jdV9wbV9vcHMsIE5VTEwsIGVuODgxMWhfbWN1X3Jlc3VtZSk7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZW44ODExaF9tY3Vfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7YWlyb2hhLGVuODgxMWgtbWN1JiMzNDsgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBlbjg4MTFoX21jdV9vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBlbjg4MTFoX21jdV9kcml2ZXIgPSB7CiYjNDM7CS5wcm9iZSA9IGVuODgxMWhfbWN1X3Byb2JlLAomIzQzOwkucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLAomIzQzOwkubWRpb2Rydi5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7YWlyb2hhLWVuODgxMWgtbWN1JiMzNDssCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSBlbjg4MTFoX21jdV9vZl9tYXRjaCwKJiM0MzsJCS5wbSA9IHBtX3NsZWVwX3B0cigmYW1wO2VuODgxMWhfbWN1X3BtX29wcyksCiYjNDM7CQkvKiBUZWFyaW5nIHRoZSBjaGlsZCBidXMgZG93biB1bmRlciBhbiBhdHRhY2hlZCBQSFkgaXMgbm90CiYjNDM7CQkgKiBzb21ldGhpbmcgdGhpcyBkcml2ZXIgY2FuIG1ha2Ugc2FmZSBvbiBpdHMgb3duLgomIzQzOwkJICovCiYjNDM7CQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MzttZGlvX21vZHVsZV9kcml2ZXIoZW44ODExaF9tY3VfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTsKJiM0MztNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RTUCk7CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7QWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtBbGVrc2VpIFN2aXJpZGtpbiAmbHQ7ZkBsZXgubGEmZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYwppbmRleCBlYzdjNDRjYTY4ZTdkLi44NjFiOGZlNDllMjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYwpAQCAtMjAsMjEgJiM0MzsyMCwxNSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Fpcl9waHlfbGliLmgmIzM0OwogCiAjZGVmaW5lIEVOODgxMUhfUEhZX0lECQkweDAzYTJhNDExCiAjZGVmaW5lIEFOODgxMUhCX1BIWV9JRAkJMHhjMGZmMDRhMAogCi0jZGVmaW5lIEVOODgxMUhfTUQzMl9ETQkJJiMzNDthaXJvaGEvRXRoTUQzMi5kbS5iaW4mIzM0OwotI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQCSYjMzQ7YWlyb2hhL0V0aE1EMzIuRFNQLmJpbiYjMzQ7CiAjZGVmaW5lIEFOODgxMUhCX01EMzJfRE0JJiMzNDthaXJvaGEvYW44ODExaGIvRXRoTUQzMl9DUkMuRE0uYmluJiMzNDsKICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1AJJiMzNDthaXJvaGEvYW44ODExaGIvRXRoTUQzMl9DUkMuRFNQLmJpbiYjMzQ7CiAKLSNkZWZpbmUgQUlSX0ZXX0FERFJfRE0JMHgwMDAwMDAwMAotI2RlZmluZSBBSVJfRldfQUREUl9EU1AJMHgwMDEwMDAwMAotCiAvKiBNSUkgUmVnaXN0ZXJzICovCiAjZGVmaW5lIEFJUl9BVVhfQ1RSTF9TVEFUVVMJCTB4MWQKICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0sJR0VOTUFTSyg0LCAyKQpAQCAtNDQsOCAmIzQzOzM4LDYgQEAKICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzI1MDAJMHhjCiAKIC8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMSAqLwotI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVMJCTB4ODAwOQotI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZCQkJMHgwMgogCiAjZGVmaW5lIEFJUl9QSFlfTUNVX0NNRF8wCQkweDgwMGIKICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzEJCTB4ODAwYwpAQCAtMTA4LDggJiM0MzsxMDAsNiBAQAogI2RlZmluZSBFTjg4MTFIXzJQNUdfTFBBCQkweDNiMzAKICNkZWZpbmUgICBFTjg4MTFIXzJQNUdfTFBBXzJQNUcJCQlCSVQoMCkKIAotI2RlZmluZSBFTjg4MTFIX0ZXX1ZFUlNJT04JCTB4M2IzYwotCiAjZGVmaW5lIEVOODgxMUhfUE9MQVJJVFkJCTB4Y2EwZjgKICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTAkJQklUKDApCiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFCQlCSVQoMSkKQEAgLTEyMiwxMiAmIzQzOzExMiw2IEBACiAjZGVmaW5lIEVOODgxMUhfQ0xLX0NHTQkJCTB4Y2Y5NTgKICNkZWZpbmUgICBFTjg4MTFIX0NMS19DR01fQ0tPCQkJQklUKDI2KQogCi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8xCQkweDBmMDAxOAotI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUCQkweDAKLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gJCTB4MQotI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMgkJMHg4MDAwMDAKLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJfTE9BRElORwkJQklUKDExKQotCiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9TRVQxCQkweGYwMjBjCiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04yCQkweGYwMjE4CiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04zCQkweGYwMjFjCkBAIC0yNzAsODYgJiM0MzsyNTQsMTQgQEAgc3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiAJCQkgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTsKIH0KIAotc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsCi0JCQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQotewotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JaW50IHJldDsKLQl1MTYgdmFsOwotCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhhZGRyZXNzKSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCAmbHQ7IGZ3LSZndDtzaXplOyBvZmZzZXQgJiM0Mzs9IDQpIHsKLQkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZhbXA7ZnctJmd0O2RhdGFbb2Zmc2V0ICYjNDM7IDJdKTsKLQkJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZhbXA7ZnctJmd0O2RhdGFbb2Zmc2V0XSk7Ci0JCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcywKLQkJCSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQotewotCWludCBzYXZlZF9wYWdlOwotCWludCByZXQgPSAwOwotCi0JaWYgKGZ3LSZndDtzaXplICUgNCkgewotCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XG4mIzM0OywKLQkJCSAgIGZ3LSZndDtzaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKLQotCWlmIChzYXZlZF9wYWdlICZndDs9IDApIHsKLQkJcmV0ID0gX19haXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgZncpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXG4mIzM0OywgX19mdW5jX18sCi0JCQkJICAgYWRkcmVzcywgcmV0KTsKLQl9Ci0KLQlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7Ci19Ci0KIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCWludCByZXQsIHJlZ192YWx1ZTsKJiM0MzsJaW50IHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KCZhbXA7cGh5ZGV2LSZndDttZGlvLCBmYWxzZSk7CiAKLQlyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8xLAotCQkJCQkgRU44ODExSF9GV19DVFJMXzFfRklOSVNIKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovCi0JcmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLAotCQkJCQlFTjg4MTFIX1BIWV9GV19TVEFUVVMsIHJlZ192YWx1ZSwKLQkJCQkJcmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLAotCQkJCQkyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7Ci0JaWYgKHJldCkgewotCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtNQ1Ugbm90IHJlYWR5OiAweCV4XG4mIzM0OywgcmVnX3ZhbHVlKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O01DVSBub3QgcmVhZHk6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhbjg4MTFoYl9jaGVja19jcmMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHNldDEsCkBAIC00MTEsNyAmIzQzOzMyMyw3IEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maWxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTsKJiM0MzsJcmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZigmYW1wO3BoeWRldi0mZ3Q7bWRpbywgYWRkcmVzcywgZncsIGZhbHNlKTsKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTA3LDU0ICYjNDM7NDE5LDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCiBzdGF0aWMgaW50IGVuODgxMWhfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjsKJiM0MzsJc3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmFtcDtmdzEsIEVOODgxMUhfTUQzMl9ETSwgZGV2KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9yZWwxOwotCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSwKLQkJCQkJIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsCi0JCQkJCSAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywKLQkJCQkJICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JcmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JcmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RTUCwgZncyKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsCi0JCQkJCSAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JZW44ODExaF9wcmludF9md192ZXJzaW9uKHBoeWRldik7Ci0KLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6Ci0JcmVsZWFzZV9maXJtd2FyZShmdzIpOwotCi1lbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMToKLQlyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7Ci0KJiM0MzsJcmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQoJmFtcDtwaHlkZXYtJmd0O21kaW8sICZhbXA7cHJpdi0mZ3Q7ZmlybXdhcmVfdmVyc2lvbiwKJiM0MzsJCQkJICAgICAgZmFsc2UpOwogCWlmIChyZXQgJmx0OyAwKQogCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtMb2FkIGZpcm13YXJlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwogCkBAIC0xMTU2LDggJiM0MzsxMDI1LDggQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQkvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi8KLQlwcml2LSZndDttY3VfbmVlZHNfcmVzdGFydCA9IGZhbHNlOwomIzQzOwkvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7bWN1X25lZWRzX3Jlc3RhcnQgPSAocmV0ID09IDEpOwogCiAJLyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqLwogCXBoeWRldi0mZ3Q7YzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMKaW5kZXggNTE0MWRiMTlmYTVlZS4uN2Y3NTMwMjczNjAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMKQEAgLTgsMzcgJiM0Mzs4LDQyIEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maXJtd2FyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Fpcl9waHlfbGliLmgmIzM0OwogCi1zdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7c3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiAJCQkJICAgdTMyIHBidXNfYWRkcmVzcywgdTMyICpwYnVzX2RhdGEpCiB7CiAJaW50IHBidXNfZGF0YV9sb3csIHBidXNfZGF0YV9oaWdoOwogCWludCByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLAomIzQzOwkJCSAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILAotCQkJICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCwKJiM0MzsJCQkgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csCi0JCQkgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csCiYjNDM7CQkJICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXBidXNfZGF0YV9oaWdoID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpOwomIzQzOwlwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpOwogCWlmIChwYnVzX2RhdGFfaGlnaCAmbHQ7IDApCiAJCXJldHVybiBwYnVzX2RhdGFfaGlnaDsKIAotCXBidXNfZGF0YV9sb3cgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTsKJiM0MzsJcGJ1c19kYXRhX2xvdyA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7CiAJaWYgKHBidXNfZGF0YV9sb3cgJmx0OyAwKQogCQlyZXR1cm4gcGJ1c19kYXRhX2xvdzsKIApAQCAtNDYsNjQgJiM0Mzs1MSw2NiBAQCBzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7c3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCQkJCSAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLAomIzQzOwkJCSAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILAotCQkJICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKJiM0MzsJCQkgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csCi0JCQkgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csCiYjNDM7CQkJICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YSkpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7c3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKIAkJCQkgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KQogewogCWludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDsKIAl1MzIgcGJ1c19kYXRhX29sZCwgcGJ1c19kYXRhX25ldzsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSwKJiM0MzsJCQkgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTsKJiM0MzsJcGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTsKIAlpZiAocGJ1c19kYXRhX2hpZ2ggJmx0OyAwKQogCQlyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7CiAKLQlwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7CiYjNDM7CXBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpOwogCWlmIChwYnVzX2RhdGFfbG93ICZsdDsgMCkKIAkJcmV0dXJuIHBidXNfZGF0YV9sb3c7CiAKQEAgLTExMiwyMyAmIzQzOzExOSwyMyBAQCBzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlpZiAocGJ1c19kYXRhX25ldyA9PSBwYnVzX2RhdGFfb2xkKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwKJiM0MzsJCQkgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywKJiM0MzsJCQkgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTQ0LDcgJiM0MzsxNTEsOCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiAKIAlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7Ci0JCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpOwomIzQzOwkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQoJmFtcDtwaHlkZXYtJmd0O21kaW8sIHBidXNfYWRkcmVzcywKJiM0MzsJCQkJCSAgICAgIHBidXNfZGF0YSk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7JXMgMHglMDh4IGZhaWxlZDogJWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJCQkgICBwYnVzX2FkZHJlc3MsIHJldCk7CkBAIC0xNjMsNyAmIzQzOzE3MSw3IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiAKIAlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7Ci0JCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShwaHlkZXYsIHBidXNfYWRkcmVzcywKJiM0MzsJCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZSgmYW1wO3BoeWRldi0mZ3Q7bWRpbywgcGJ1c19hZGRyZXNzLAogCQkJCQkgICAgICAgcGJ1c19kYXRhKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxuJiMzNDssIF9fZnVuY19fLApAQCAtMTgzLDggJiM0MzsxOTEsOCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsCiAJc2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKIAogCWlmIChzYXZlZF9wYWdlICZndDs9IDApIHsKLQkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzaywKLQkJCQkJCXNldCk7CiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KCZhbXA7cGh5ZGV2LSZndDttZGlvLCBwYnVzX2FkZHJlc3MsCiYjNDM7CQkJCQkJbWFzaywgc2V0KTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxuJiMzNDssIF9fZnVuY19fLAogCQkJCSAgIHBidXNfYWRkcmVzcywgcmV0KTsKQEAgLTE5NCw2ICYjNDM7MjAyLDM0MyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkpOwogCiYjNDM7c3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcywKJiM0MzsJCQkgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXUxNiB2YWw7CiYjNDM7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSwKJiM0MzsJCQkgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILAomIzQzOwkJCSAgICAgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csCiYjNDM7CQkJICAgICAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgJmx0OyBsZW47IG9mZnNldCAmIzQzOz0gNCkgewomIzQzOwkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZhbXA7ZGF0YVtvZmZzZXQgJiM0MzsgMl0pOwomIzQzOwkJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZhbXA7ZGF0YVtvZmZzZXRdKTsKJiM0MzsJCXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi8KJiM0MztzdGF0aWMgaW50IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CXNhdmVkX3BhZ2UgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTsKJiM0MzsJaWYgKHNhdmVkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHNhdmVkX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHsKJiM0MzsJCXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLCBwYWdlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNhdmVkX3BhZ2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAomIzQzOwkJCQkgICBpbnQgc2F2ZWRfcGFnZSwgaW50IHBhZ2UsIGludCByZXQpCiYjNDM7ewomIzQzOwlpbnQgcmVzdG9yZTsKJiM0MzsKJiM0MzsJaWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkgewomIzQzOwkJcmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLAomIzQzOwkJCQkJICBzYXZlZF9wYWdlKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHJlc3RvcmUgJmx0OyAwKQomIzQzOwkJCXJldCA9IHJlc3RvcmU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqLwomIzQzO3N0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWlmIChuZXN0ZWQpCiYjNDM7CQltZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpOwomIzQzOwllbHNlCiYjNDM7CQltZGlvZGV2X2xvY2sobWRpb2Rldik7CiYjNDM7fQomIzQzOwomIzQzO2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsCiYjNDM7CQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJc2l6ZV90IGNodW5rLCBkb25lID0gMDsKJiM0MzsJaW50IHNhdmVkX3BhZ2UsIHJldDsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICUgNCkgewomIzQzOwkJZGV2X2VycigmYW1wO21kaW9kZXYtJmd0O2RldiwgJiMzNDtmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XG4mIzM0OywKJiM0MzsJCQlmdy0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwl3aGlsZSAoZG9uZSAmbHQ7IGZ3LSZndDtzaXplKSB7CiYjNDM7CQljaHVuayA9IG1pbl90KHNpemVfdCwgZnctJmd0O3NpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpOwomIzQzOwomIzQzOwkJYWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwomIzQzOwkJc2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwKJiM0MzsJCQkJCQkgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwomIzQzOwkJaWYgKHNhdmVkX3BhZ2UgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gc2F2ZWRfcGFnZTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gX19haXJfd3JpdGVfYnVmKG1kaW9kZXYsIGFkZHJlc3MgJiM0MzsgZG9uZSwKJiM0MzsJCQkJCSAgICAgIGZ3LSZndDtkYXRhICYjNDM7IGRvbmUsIGNodW5rKTsKJiM0MzsJCQlyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLAomIzQzOwkJCQkJCSAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LAomIzQzOwkJCQkJCSAgICAgIHJldCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltZGlvZGV2X3VubG9jayhtZGlvZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlkb25lICYjNDM7PSBjaHVuazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2Z3X3dyaXRlX2J1Zik7CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiYjNDM7CQkJCSAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhLAomIzQzOwkJCQkgICAgICBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CWFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJc2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwomIzQzOwlpZiAoc2F2ZWRfcGFnZSAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IHNhdmVkX3BhZ2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7CiYjNDM7CQlyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLAomIzQzOwkJCQkJICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKJiM0MzsJCQkJICAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEsCiYjNDM7CQkJCSAgICAgICBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CWFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJc2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwomIzQzOwlpZiAoc2F2ZWRfcGFnZSAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IHNhdmVkX3BhZ2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgcGJ1c19hZGRyZXNzLAomIzQzOwkJCQkJICAgICAgIHBidXNfZGF0YSk7CiYjNDM7CQlyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLAomIzQzOwkJCQkJICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiYjNDM7CQkJCQl1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCwKJiM0MzsJCQkJCWJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJaW50IHNhdmVkX3BhZ2UsIHJldDsKJiM0MzsKJiM0MzsJYWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwomIzQzOwlzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiYjNDM7CWlmIChzYXZlZF9wYWdlICZsdDsgMCkgewomIzQzOwkJcmV0ID0gc2F2ZWRfcGFnZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgcGJ1c19hZGRyZXNzLAomIzQzOwkJCQkJCW1hc2ssIHNldCk7CiYjNDM7CQlyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLAomIzQzOwkJCQkJICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIG1tZF9waHlfcmVhZCgpIGRyb3BzIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGhyZWUgd3JpdGVzIHRoYXQgc2VsZWN0IHRoZQomIzQzOyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fYWlyX21tZF9yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTE2IGRldmFkLCB1MTYgcmVnbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtJmd0O2J1czsKJiM0MzsJaW50IGFkZHIgPSBtZGlvZGV2LSZndDthZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsIGRldmFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLAomIzQzOwkJCSAgICAgIGRldmFkIHwgTUlJX01NRF9DVFJMX05PSU5DUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgYWRkciwgTUlJX01NRF9EQVRBKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJfbW1kX3N0YXR1c19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CXJldCA9IF9fYWlyX21tZF9yZWFkKG1kaW9kZXYsIE1ESU9fTU1EX1ZFTkQxLCBFTjg4MTFIX1BIWV9GV19TVEFUVVMpOwomIzQzOwltZGlvZGV2X3VubG9jayhtZGlvZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gYWlyX21tZF9zdGF0dXNfcmVhZChtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByZXQgPT0gRU44ODExSF9QSFlfUkVBRFk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKTsKJiM0MzsKJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWludCByZXQsIHJlZ192YWx1ZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLAomIzQzOwkJCQkJICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBCZWNhdXNlIG9mIG1kaW8tbG9jaywgbWF5IGhhdmUgdG8gd2FpdCBmb3IgbXVsdGlwbGUgbG9hZHMuIEEgcmVhZAomIzQzOwkgKiBlcnJvciBlbmRzIHRoZSBwb2xsIGF0IG9uY2UsIGxpa2UgcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dCgpLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyX21tZF9zdGF0dXNfcmVhZCwgcmVnX3ZhbHVlLAomIzQzOwkJCQlyZWdfdmFsdWUgJmx0OyAwIHx8CiYjNDM7CQkJCXJlZ192YWx1ZSA9PSBFTjg4MTFIX1BIWV9SRUFEWSwKJiM0MzsJCQkJMjAwMDAsIDc1MDAwMDAsIHRydWUsIG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CWlmIChyZWdfdmFsdWUgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJlZ192YWx1ZTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2RiZygmYW1wO21kaW9kZXYtJmd0O2RldiwgJiMzNDtNQ1Ugbm90IHJlYWR5OiAweCV4XG4mIzM0OywgcmVnX3ZhbHVlKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeSk7CiYjNDM7CiYjNDM7aW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLAomIzQzOwkJCSAgICBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO21kaW9kZXYtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sCiYjNDM7CQkJCQkJIGZ3X3ZlcnNpb24sIG5lc3RlZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJZGV2X2luZm8oZGV2LCAmIzM0O01EMzIgYWxyZWFkeSBydW5uaW5nLCBmaXJtd2FyZSAlMDh4XG4mIzM0OywKJiM0MzsJCQkgKmZ3X3ZlcnNpb24pOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmFtcDtmdzEsIEVOODgxMUhfTUQzMl9ETSwgZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgmYW1wO2Z3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9yZWwxOwomIzQzOwomIzQzOwlyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzEsCiYjNDM7CQkJCQkgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJULCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMiwKJiM0MzsJCQkJCSAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsCiYjNDM7CQkJCQkgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9ETSwgZncxLCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3MiwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsCiYjNDM7CQkJCQkgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwLAomIzQzOwkJCQkJICAgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfb3V0OwomIzQzOwomIzQzOwlyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sCiYjNDM7CQkJCQkgZndfdmVyc2lvbiwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CWRldl9pbmZvKGRldiwgJiMzNDtNRDMyIGZpcm13YXJlIHZlcnNpb246ICUwOHhcbiYjMzQ7LCAqZndfdmVyc2lvbik7CiYjNDM7CiYjNDM7YWlyX2Z3X2Rvd25sb2FkX291dDoKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShmdzIpOwomIzQzOwomIzQzO2Fpcl9md19kb3dubG9hZF9yZWwxOgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7CiYjNDM7CiYjNDM7CS8qIE5vIGVycm9yIHByaW50OiBjYWxsZXJzIGxvZyBvbiB0aGVpciBvd24gdGVybXMsIGFuZCBhIHBvbGxlcgomIzQzOwkgKiB3b3VsZCByZXBlYXQgaXQgb24gZXZlcnkgcmV0cnkuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7CiYjNDM7CiBpbnQgYWlyX3BoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmggYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaAppbmRleCAwMWJiMzJlN2M3Yzk1Li41NmJhOTg3YTY4Y2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaApAQCAtMTAsMTIgJiM0MzsxMCwxOSBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmgmZ3Q7CiYjNDM7CiAjZGVmaW5lIEFJUl9FWFRfUEFHRV9BQ0NFU1MJCTB4MWYKIAogI2RlZmluZSBBSVJfUEhZX1BBR0VfU1RBTkRBUkQJCTB4MDAwMAogI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfMQkJMHgwMDAxCiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80CQkweDAwMDQKIAomIzQzOy8qIEJ5dGVzIHdyaXR0ZW4gYmV0d2VlbiBidXMgcmVsZWFzZXMsIHNvIHRoZSBvdGhlciBQSFlzIG9uIGl0IGdldCBhIHR1cm4uCiYjNDM7ICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBBSVJfRldfQ0hVTktfQllURVMJCTIzMDQKJiM0MzsKIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki8KICNkZWZpbmUgQUlSX0JQQlVTX01PREUJCQkweDEwCiAjZGVmaW5lICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRAkJMHgwMDAwCkBAIC0yOSw2ICYjNDM7MzYsMjAgQEAKICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfSElHSAkJMHgxNwogI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9MT1cJCTB4MTgKIAomIzQzOyNkZWZpbmUgQUlSX0ZXX0FERFJfRE0JCQkweDAwMDAwMDAwCiYjNDM7I2RlZmluZSBBSVJfRldfQUREUl9EU1AJCQkweDAwMTAwMDAwCiYjNDM7CiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMQkJMHgwZjAwMTgKJiM0MzsjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfU1RBUlQJCTB4MAomIzQzOyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gJCTB4MQomIzQzOyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzIJCTB4ODAwMDAwCiYjNDM7I2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcJCUJJVCgxMSkKJiM0MzsKJiM0MzsjZGVmaW5lIEVOODgxMUhfUEhZX0ZXX1NUQVRVUwkJMHg4MDA5CiYjNDM7I2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZCQkJMHgwMgomIzQzOwomIzQzOyNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OCQkweDNiM2MKJiM0MzsKIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKIAkJCQl1MzIgbWFzaywgdTMyIHNldCk7CiBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLApAQCAtMzgsNCAmIzQzOzU5LDEwIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGFpcl9waHlfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSk7CiAKJiM0MztzdHJ1Y3QgZmlybXdhcmU7CiYjNDM7CiYjNDM7aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcywKJiM0MzsJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpOwomIzQzO2ludCBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKTsKJiM0MzsKICNlbmRpZiAvKiBfX0FJUl9QSFlfTElCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmggYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0OTRkYzZjMTAyMmMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oCkBAIC0wLDAgJiM0MzsxLDI1IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOyAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvbGxhYm9yYSBMdGQuCiYjNDM7ICogICAgICAgICAgICAgICAgICAgIExvdWlzLUFsZXhpcyBFeXJhdWQgJmx0O2xvdWlzYWxleGlzLmV5cmF1ZEBjb2xsYWJvcmEuY29tJmd0OwomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBbGVrc2VpIFN2aXJpZGtpbiAmbHQ7ZkBsZXgubGEmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSAomIzQzOyNkZWZpbmUgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgbWRpb19kZXZpY2U7CiYjNDM7CiYjNDM7I2RlZmluZSBFTjg4MTFIX01EMzJfRE0JCQkmIzM0O2Fpcm9oYS9FdGhNRDMyLmRtLmJpbiYjMzQ7CiYjNDM7I2RlZmluZSBFTjg4MTFIX01EMzJfRFNQCQkmIzM0O2Fpcm9oYS9FdGhNRDMyLkRTUC5iaW4mIzM0OwomIzQzOwomIzQzOy8qIFJldHVybnMgMSBydW5uaW5nLCAwIGRvcm1hbnQsIG5lZ2F0aXZlIG9uIGEgZmFpbGVkIHN0YXR1cyByZWFkLiAqLwomIzQzO2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKTsKJiM0MzsvKiBSZXR1cm5zIDEgd2hlbiBpdCBhZG9wdGVkIGZpcm13YXJlIHRoYXQgd2FzIGFscmVhZHkgcnVubmluZy4gKi8KJiM0MztpbnQgYWlyX2VuODgxMWhfZndfZG93bmxvYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgKmZ3X3ZlcnNpb24sCiYjNDM7CQkJICAgIGJvb2wgbmVzdGVkKTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDNkOGFmZTZiN2YxYzUuLmU3NGE4ZjVjZjVjNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjI4NCw2ICYjNDM7MjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCW11dGV4X3VubG9jaygmYW1wO3BoeWRldi0mZ3Q7bWRpby5idXMtJmd0O21kaW9fbG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0Mzt7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrX25lc3RlZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrX25lc3RlZCgmYW1wO21kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwltdXRleF91bmxvY2soJmFtcDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7fQomIzQzOwogdm9pZCBwaHlfYXR0YWNoZWRfcHJpbnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJX19wcmludGYoMiwgMyk7CiBjaGFyICpwaHlfYXR0YWNoZWRfaW5mb19pcnEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaXMgaW50cm9kdWNpbmcgYSBmYWlybHkgc2lnbmlmaWNhbnQgY2h1bmsgb2YgbmV3IGNvZGUgcmVsYXRlZCB0byBBaXJvaGEgbmV0d29yayBkZXZpY2VzLiBJIHNlZSBhIG5ldyBkZXZpY2UgdHJlZSBiaW5kaW5nLCBhbiB1cGRhdGUgdG8gdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSwgYW5kIGEgY2x1c3RlciBvZiBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGNlbnRlcmVkIGFyb3VuZCBNRElPIGFuZCBQSFkgaW1wbGVtZW50YXRpb25zLiBUaGUga2V5IGZpbGVzIGFwcGVhciB0byBiZSBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCB3aGljaCBpcyBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgLCB3aGljaCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyB0aGUgZmlybXdhcmUgbG9hZGluZyBmb3IgYW4gQWlyb2hhIFBIWS4gVGhlcmUgYXJlIGFsc28gYXNzb2NpYXRlZCBsaWJyYXJ5IGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMuIE5vdGFibHksIHRoZXJlIGFyZSBzb21lIGhlbHBlciBmdW5jdGlvbnMgYWRkZWQgdG8gYGluY2x1ZGUvbGludXgvcGh5LmhgIHRoYXQgZGVhbCB3aXRoIGxvY2tpbmcuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyByZWFjaGFiaWxpdHksIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgdGhvc2UgdXNlZCB3aXRoIHN5emthbGxlci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGRyaXZlcnMsIHBhcnRpY3VsYXJseSB0aGUgTURJTyBhbmQgUEhZIGltcGxlbWVudGF0aW9ucywgYXJlIGluaGVyZW50bHkgcmVsaWFudCBvbiBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBvciBkZXZpY2UgdHJlZXMgdGhhdCBtaWdodCBtYWtlIHRoZW0gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZT8KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgIG1vcmUgZGVlcGx5LiBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIE1ESU8gYW5kIFBIWSBkZXZpY2VzIGdlbmVyYWxseSwgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHR5cGljYWxseSB0aWVkIHRvIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlcyAoQVJNLCBNSVBTLCBldGMuKSBvciByZXF1aXJlIGEgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgc2V0dXAgb3IgYSBkZXZpY2UgdHJlZSBjb25maWd1cmVkIGluIGEgY2VydGFpbiB3YXkgdG8gYmUgYWNjZXNzaWJsZS4KCkkmIzM5O2xsIHN0YXJ0IHdpdGggc29tZSBxdWljayBjaGVja3MsIHByb2JhYmx5IHVzaW5nIGBncmVwcGVyYCBvciBieSBzY3J1dGluaXppbmcgdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgYW55IG9idmlvdXMgaGludHMgYWJvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCByb2FkYmxvY2tzIHRvIGZ1enppbmcgdGhpcyBjb2RlIGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FJUl9FTjg4MTFIX1BIWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0zMj1jb25maWcgTURJT19BSVJPSEFfRU44ODExSFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zNi1cdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjM3Olx0aW1wbHkgQUlSX0VOODgxMUhfUEhZXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzgtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9OTM9Y29uZmlnIEFJUl9BTjg4MDFfUEhZXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctOTgtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo5OTpjb25maWcgQUlSX0VOODgxMUhfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDAtXHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgRU44ODExSCAyLjUgR2lnYWJpdCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVx0JiM0Mzs9IGFpcl9hbjg4MDEub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgJiM0Mzs9IGFpcl9lbjg4MTFoLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXHQmIzQzOz0gYWlyX3BoeV9saWIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIEFpcm9oYSBFTjg4MTFIIERyaXZlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEFpcm9oYSBFTjg4MTFIIGRyaXZlcnMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGRyaXZlcnMgZ2V0IHByb2JlZCBhbmQgaW5zdGFudGlhdGVkLiBMb29raW5nIGF0IGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCBJIHNlZSBgZW44ODExaF9tY3Vfb2ZfbWF0Y2hbXWAgYW5kIGBtZGlvX21vZHVsZV9kcml2ZXIoZW44ODExaF9tY3VfZHJpdmVyKWAuIFJpZ2h0LCB0aGlzIGlzIE9wZW4gRmlybXdhcmUvRGV2aWNlIFRyZWUgYmFzZWQsIGJvdW5kIHRvIGFuIE1ESU8gYnVzIHVzaW5nIGBzdHJ1Y3QgbWRpb19kcml2ZXJgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVuIGBhaXJfZW44ODExaC5jYCBpcyBjbGVhcmx5IGEgUEhZIGRyaXZlciAoYHBoeV9kcml2ZXJgKS4KCk5vdyB0aGUgcmVhbCBxdWVzdGlvbjogQ2FuIEkgYWN0dWFsbHkgZ2V0IHRoZXNlIE1ESU8gZGV2aWNlcyBvciBQSFkgZHJpdmVycyB0byAqZG8gYW55dGhpbmcqIGluIGEgc3RhbmRhcmQgUUVNVS9HQ0UgYW1kNjQgZW52aXJvbm1lbnQsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc3BlY2lmaWMsIGRldGFpbGVkIGVtdWxhdGlvbiBvZiB0aGUgaGFyZHdhcmU/IEkmIzM5O20gZG91YnRmdWwsIGJ1dCBsZXQmIzM5O3Mgc2VlLgoKV2FpdCwgaG93IGRvZXMgU3l6a2FsbGVyIGV2ZW4gZGVhbCB3aXRoIFBIWSBkcml2ZXJzIGFuZCBNRElPIGRldmljZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIHRlc3QgY292ZXJhZ2UgaXMgb24gdGhpcyBmcm9udC4gQXJlIHRoZXJlIGFueSBtb2NrIE1ESU8gYnVzZXMsIHZpcnR1YWwgTURJTyBkZXZpY2VzLCBvciBuZXRsaW5rIFBIWSBpbnRlcmZhY2VzIHRoYXQgSSBjYW4gbGV2ZXJhZ2U/IE15IGZpbmFsIHRob3VnaHQgaXMgY2FuIEkgZXZlbiBjcmVhdGUgcGh5IGRldmljZXMgb3IgbWRpbyBkZXZpY2VzIGZyb20gdXNlcnNwYWNlPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBkZWVwZXIgZGlnZ2luZyB0byBnZXQgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZHJpdmVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mzg5MT1zdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzkxOS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzkyMDogKiBwaHlfZHJpdmVyX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBwaHlfZHJpdmVyIHdpdGggdGhlIFBIWSBsYXllclxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zOTIxLSAqIEBuZXdfZHJpdmVyOiBuZXcgcGh5X2RyaXZlciB0byByZWdpc3RlclxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzkyMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzkyNDpzdGF0aWMgaW50IHBoeV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHBoeV9kcml2ZXIgKm5ld19kcml2ZXIsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5MjUtXHRcdFx0ICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mzk3ND1pbnQgcGh5X2RyaXZlcnNfcmVnaXN0ZXIoc3RydWN0IHBoeV9kcml2ZXIgKm5ld19kcml2ZXIsIGludCBuLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzk3OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM5ODA6XHRcdHJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIobmV3X2RyaXZlciAmIzQzOyBpLCBvd25lcik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5ODEtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQwMzg9c3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNjAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjQwNjE6XHRyYyA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIsIFRISVNfTU9EVUxFKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDA2Mi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNjQtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjQwNjU6XHRyYyA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2RyaXZlciwgVEhJU19NT0RVTEUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDY2LVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJiMzOTtkIG5lZWQgdG8gZXhhbWluZToKCioqQW5hbHl6aW5nIHRoZSBFTjg4MTFIIERyaXZlciBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIHNvIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgZW44ODExaF9kcml2ZXJgIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLCBJIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGFpcl9lbjg4MTFoLmNgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBjb25zaWRlcmluZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZHJpdmVyJiMzOTtzIHJlZ2lzdHJhdGlvbiBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBvciBtYWNybyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciB3aXRoIHRoZSBrZXJuZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBtb2R1bGVfaW5pdCgpYCwgb3IgcGVyaGFwcyBhIGN1c3RvbSByZWdpc3RyYXRpb24gZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlLiBPbmNlIEkgZmluZCBpdCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSwgd2hhdCByZXNvdXJjZXMgaXQgcmVxdWVzdHMsIGFuZCB3aGF0JiMzOTtzIGl0cyBvdmVyYWxsIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgZXhhY3RseSAqaG93KiBhbmQgKndoZW4qIHRoaXMgZHJpdmVyIGlzIGJlaW5nIGluaXRpYWxpemVkIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGJhc2Ugb2YgdW5kZXJzdGFuZGluZyBmb3IgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BoeV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0xMDEwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA1OC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MTA1OTptb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MzIzPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM0Mi1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM0Mzptb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zNDQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluMTE0MF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExNDAtcGh5LmMtNjAtfTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYzo2MTptb2R1bGVfcGh5X2RyaXZlcihhZGluMTE0MF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jLTYyLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTEyMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWlyb2hhX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTE0NS19IH07XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNDY6bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTM4Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW44ODExaF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNDMwLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTQzMTptb2R1bGVfcGh5X2RyaXZlcihlbjg4MTFoX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNDMyLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYz05MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYW03OWNfZHJpdmVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYy0xMTEtXG5kcml2ZXJzL25ldC9waHkvYW1kLmM6MTEyOm1vZHVsZV9waHlfZHJpdmVyKGFtNzljX2RyaXZlcnMpO1xuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExMy1cbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTExODE9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFxcl9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjQtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE1NjU6bW9kdWxlX3BoeV9kcml2ZXIoYXFyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz05NDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFzMjF4eHhfZHJpdmVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA3Ny19O1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzoxMDc4Om1vZHVsZV9waHlfZHJpdmVyKGFzMjF4eHhfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTEwNzktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM9OTc9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFzaXhfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTIwLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM6MTIxOm1vZHVsZV9waHlfZHJpdmVyKGFzaXhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jLTEyMi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmJfcnVzdC5ycy0xMi1cbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yl9ydXN0LnJzOjEzOmtlcm5lbDo6bW9kdWxlX3BoeV9kcml2ZXIhIHtcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yl9ydXN0LnJzLTE0LSAgICBkcml2ZXJzOiBbUGh5QVg4ODc3MkEsIFBoeUFYODg3NzJDLCBQaHlBWDg4Nzk2Ql0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYz0yODY9TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBiY21fY3lnbnVzX3BoeV90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODctXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI4ODptb2R1bGVfcGh5X2RyaXZlcihiY21fY3lnbnVzX3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9ODY1PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDE0MF9kcml2ZXJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtODg0LX07XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo4ODU6bW9kdWxlX3BoeV9kcml2ZXIoYmNtNTQxNDBfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy04ODYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYz03Mj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNjN4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtNjN4eC5jLTkzLVxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYzo5NDptb2R1bGVfcGh5X2RyaXZlcihiY202M3h4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYmNtNjN4eC5jLTk1LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM9OTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYmNtN3h4eF90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTk2OS1cbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM6OTcwOm1vZHVsZV9waHlfZHJpdmVyKGJjbTd4eHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmMtOTcxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jPTQxOT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODQ4ODFfZHJpdmVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTQ2MS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjQ2Mjptb2R1bGVfcGh5X2RyaXZlcihiY204NDg4MV9kcml2ZXJzKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTQ2My1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jPTE5ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODd4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTIxOC1cbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MjE5Om1vZHVsZV9waHlfZHJpdmVyKGJjbTg3eHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMjIwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jPTE0NjY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJyb2FkY29tX2RyaXZlcnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYy0xNzUzLVxuZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmM6MTc1NDptb2R1bGVfcGh5X2RyaXZlcihicm9hZGNvbV9kcml2ZXJzKTtcbmRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jLTE3NTUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jPTEyNz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgY2lzODIweF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvY2ljYWRhLmMtMTQ1LVxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jOjE0Njptb2R1bGVfcGh5X2RyaXZlcihjaXM4MjB4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvY2ljYWRhLmMtMTQ3LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmM9NzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGNvcnRpbmFfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2NvcnRpbmEuYy04Ny1cbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmM6ODg6bW9kdWxlX3BoeV9kcml2ZXIoY29ydGluYV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2NvcnRpbmEuYy04OS1cbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz0xOTY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRhcDgyMTFyX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTIwOC19O1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6MjA5Om1vZHVsZV9waHlfZHJpdmVyKGRhcDgyMTFyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0yMTAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYz0xNzM9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRtOTF4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGF2aWNvbS5jLTIwOS1cbmRyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmM6MjEwOm1vZHVsZV9waHlfZHJpdmVyKGRtOTF4eF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYy0yMTEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYz0xNDU2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzNjQwX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmMtMTQ3MC1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmM6MTQ3MTptb2R1bGVfcGh5X2RyaXZlcihkcDgzNjQwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvZHA4MzY0MC5jLTE0NzItXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMjM2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODIyX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTI0NC19O1xuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzoxMjQ1Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4MjJfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTI0Ni1cbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg0OC5jPTE1Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4Mzg0OF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg0OC5jLTE2Ni19O1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NDguYzoxNjc6bW9kdWxlX3BoeV9kcml2ZXIoZHA4Mzg0OF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NDguYy0xNjgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYz0xMTgwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY3X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMTIxOC19O1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoxMjE5Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4NjdfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMTIyMC1cbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2OS5jPTkzND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4Mzg2OV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2OS5jLTkzOC19O1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjkuYzo5Mzk6bW9kdWxlX3BoeV9kcml2ZXIoZHA4Mzg2OV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjkuYy05NDAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODN0YzgxMS5jPTM4Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4MzgxMV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4M3RjODExLmMtNDA0LX07XG5kcml2ZXJzL25ldC9waHkvZHA4M3RjODExLmM6NDA1Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4MTFfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGM4MTEuYy00MDYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jPTkzNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4M3RkNTEwX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGQ1MTAuYy05NjYtfSB9O1xuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jOjk2Nzptb2R1bGVfcGh5X2RyaXZlcihkcDgzdGQ1MTBfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGQ1MTAuYy05NjgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jPTY0ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4M3RnNzIwX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGc3MjAuYy02NjctfSB9O1xuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jOjY2ODptb2R1bGVfcGh5X2RyaXZlcihkcDgzdGc3MjBfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGc3MjAuYy02NjktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2V0MTAxMWMuYz04Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZXQxMDExY19kcml2ZXJbXSA9IHsge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ldDEwMTFjLmMtOTQtXG5kcml2ZXJzL25ldC9waHkvZXQxMDExYy5jOjk1Om1vZHVsZV9waHlfZHJpdmVyKGV0MTAxMWNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9ldDEwMTFjLmMtOTYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jPTU3NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgaWNwbHVzX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9pY3BsdXMuYy02MjUtXG5kcml2ZXJzL25ldC9waHkvaWNwbHVzLmM6NjI2Om1vZHVsZV9waHlfZHJpdmVyKGljcGx1c19kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jLTYyNy1cbi0tXG5kcml2ZXJzL25ldC9waHkvaW50ZWwteHdheS5jPTU4ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgeHdheV9ncGh5W10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ludGVsLXh3YXkuYy03NzAtfTtcbmRyaXZlcnMvbmV0L3BoeS9pbnRlbC14d2F5LmM6NzcxOm1vZHVsZV9waHlfZHJpdmVyKHh3YXlfZ3BoeSk7XG5kcml2ZXJzL25ldC9waHkvaW50ZWwteHdheS5jLTc3Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvbHh0LmM9MzA4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBseHQ5N3hfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2x4dC5jLTM0OC1cbmRyaXZlcnMvbmV0L3BoeS9seHQuYzozNDk6bW9kdWxlX3BoeV9kcml2ZXIobHh0OTd4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbHh0LmMtMzUwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4cTJ4eHguYz0xMTAyPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdjg4cTJ4eHhfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODhxMnh4eC5jLTExNDMtXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHEyeHh4LmM6MTE0NDptb2R1bGVfcGh5X2RyaXZlcihtdjg4cTJ4eHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4cTJ4eHguYy0xMTQ1LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4eDIyMjIuYz01Nzg9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG12MjIyMl9kcml2ZXJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODh4MjIyMi5jLTU5NC19O1xuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODh4MjIyMi5jOjU5NTptb2R1bGVfcGh5X2RyaXZlcihtdjIyMjJfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHgyMjIyLmMtNTk2LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmM9MzY2Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWFydmVsbF9kcml2ZXJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYy00MTc2LVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYzo0MTc3Om1vZHVsZV9waHlfZHJpdmVyKG1hcnZlbGxfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jLTQxNzgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYz0xMzg4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdjMzMTBfZHJpdmVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmMtMTQ3Ni1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmM6MTQ3Nzptb2R1bGVfcGh5X2RyaXZlcihtdjMzMTBfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvbWFydmVsbDEwZy5jLTE0NzgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jPTM3OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrXzJwNWdlcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYy00MDAtXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmM6NDAxOm1vZHVsZV9waHlfZHJpdmVyKG10a18ycDVnZXBoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jLTQwMi1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWZlLXNvYy5jPTMwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jX2ZlX3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWZlLXNvYy5jLTQxLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1mZS1zb2MuYzo0Mjptb2R1bGVfcGh5X2RyaXZlcihtdGtfc29jX2ZlX3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1mZS1zb2MuYy00My1zdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG10a19zb2NfZmVfcGh5X3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ5NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE1NjgtXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE1Njk6bW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTcwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYz05OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX2dlcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYy0xMjktXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmM6MTMwOm1vZHVsZV9waHlfZHJpdmVyKG10a19nZXBoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jLTEzMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWVzb24tZ3hsLmM9MjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbWVzb25fZ3hsX3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZXNvbi1neGwuYy0yMjktXG5kcml2ZXJzL25ldC9waHkvbWVzb24tZ3hsLmM6MjMwOm1vZHVsZV9waHlfZHJpdmVyKG1lc29uX2d4bF9waHkpO1xuZHJpdmVycy9uZXQvcGh5L21lc29uLWd4bC5jLTIzMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmM9Njc4MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIga3NwaHlfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21pY3JlbC5jLTcxMDgtXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmM6NzEwOTptb2R1bGVfcGh5X2RyaXZlcihrc3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21pY3JlbC5jLTcxMTAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jPTU0Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWljcm9jaGlwX3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwLmMtNTg4LVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jOjU4OTptb2R1bGVfcGh5X2RyaXZlcihtaWNyb2NoaXBfcGh5X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwLmMtNTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDEuYz0yMTA0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtaWNyb2NoaXBfdDFfcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDEuYy0yMTYyLVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MS5jOjIxNjM6bW9kdWxlX3BoeV9kcml2ZXIobWljcm9jaGlwX3QxX3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MS5jLTIxNjQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYz01MDk9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1pY3JvY2hpcF90MXNfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYy01NjYtXG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jOjU2Nzptb2R1bGVfcGh5X2RyaXZlcihtaWNyb2NoaXBfdDFzX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jLTU2OC1cbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MzA3NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNjItXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzE2Mzptb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNjQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmM9MjU0OD1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdnNjODV4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbXNjYy9tc2NjX21haW4uYy0yOTg4LVxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmM6Mjk4OTptb2R1bGVfcGh5X2RyaXZlcih2c2M4NXh4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbXNjYy9tc2NjX21haW4uYy0yOTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9teGwtODYxMTAuYz05MzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG14bF9waHlfZHJ2c1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9teGwtODYxMTAuYy05NjgtXG5kcml2ZXJzL25ldC9waHkvbXhsLTg2MTEwLmM6OTY5Om1vZHVsZV9waHlfZHJpdmVyKG14bF9waHlfZHJ2cyk7XG5kcml2ZXJzL25ldC9waHkvbXhsLTg2MTEwLmMtOTcwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmM9MTEwMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ3B5X2RyaXZlcnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbXhsLWdweS5jLTE0NzgtfTtcbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmM6MTQ3OTptb2R1bGVfcGh5X2RyaXZlcihncHlfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvbXhsLWdweS5jLTE0ODAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmM9MTYwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY1X2RyaXZlcltdID0geyB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmMtMTY5LVxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmM6MTcwOm1vZHVsZV9waHlfZHJpdmVyKGRwODM4NjVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jLTE3MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuYz0xNDM9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG5jbjI2MDAwX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jLTE1OS1cbmRyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jOjE2MDptb2R1bGVfcGh5X2RyaXZlcihuY24yNjAwMF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmMtMTYxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtYzQ1LXRqYTExeHguYz0yMDczPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBueHBfYzQ1X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtYzQ1LXRqYTExeHguYy0yMTc3LVxuZHJpdmVycy9uZXQvcGh5L254cC1jNDUtdGphMTF4eC5jOjIxNzg6bW9kdWxlX3BoeV9kcml2ZXIobnhwX2M0NV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L254cC1jNDUtdGphMTF4eC5jLTIxNzktXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC1jYnR4LmM9MTk3PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBjYnR4X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtY2J0eC5jLTIxNS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtY2J0eC5jOjIxNjptb2R1bGVfcGh5X2RyaXZlcihjYnR4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbnhwLWNidHguYy0yMTctXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9ODE4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTkyNy1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjkyODptb2R1bGVfcGh5X2RyaXZlcih0amExMXh4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy05MjktXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vYXQ4MDN4LmM9MTExMz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYXQ4MDN4X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL2F0ODAzeC5jLTEyMzUtXG5kcml2ZXJzL25ldC9waHkvcWNvbS9hdDgwM3guYzoxMjM2Om1vZHVsZV9waHlfZHJpdmVyKGF0ODAzeF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vYXQ4MDN4LmMtMTIzNy1cbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NzkxPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxY2E4MDd4X2RyaXZlcnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtODQzLX07XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6ODQ0Om1vZHVsZV9waHlfZHJpdmVyKHFjYTgwN3hfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtODQ1LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYz02NDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHFjYTgwOHhfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA4eC5jLTY3OC1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYzo2Nzk6bW9kdWxlX3BoeV9kcml2ZXIocWNhODA4eF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA4eC5jLTY4MC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmM9MjEzPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxY2E4M3h4X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgzeHguYy0yNTktXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmM6MjYwOm1vZHVsZV9waHlfZHJpdmVyKHFjYTgzeHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgzeHguYy0yNjEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3FzZW1pLmM9MTQ2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxczY2MTJfZHJpdmVyW10gPSB7IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcXNlbWkuYy0xNTUtXG5kcml2ZXJzL25ldC9waHkvcXNlbWkuYzoxNTY6bW9kdWxlX3BoeV9kcml2ZXIocXM2NjEyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvcXNlbWkuYy0xNTctXG4tLVxuZHJpdmVycy9uZXQvcGh5L3F0MjAyNS5ycy0yMy1cbmRyaXZlcnMvbmV0L3BoeS9xdDIwMjUucnM6MjQ6a2VybmVsOjptb2R1bGVfcGh5X2RyaXZlciEge1xuZHJpdmVycy9uZXQvcGh5L3F0MjAyNS5ycy0yNS0gICAgZHJpdmVyczogW1BoeVFUMjAyNV0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmM9MzA0Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMzM2NC1cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jOjMzNjU6bW9kdWxlX3BoeV9kcml2ZXIocmVhbHRla19kcnZzKTtcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTMzNjYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmM9MTczPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByb2NrY2hpcF9waHlfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmMtMTg4LVxuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmM6MTg5Om1vZHVsZV9waHlfZHJpdmVyKHJvY2tjaGlwX3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmMtMTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zbXNjLmM9Njg3PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBzbXNjX3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvc21zYy5jLTg4Mi1cbmRyaXZlcnMvbmV0L3BoeS9zbXNjLmM6ODgzOm1vZHVsZV9waHlfZHJpdmVyKHNtc2NfcGh5X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvc21zYy5jLTg4NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvc3RlMTBYcC5jPTEwMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgc3RlMTB4cF9wZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYy0xMjQtXG5kcml2ZXJzL25ldC9waHkvc3RlMTBYcC5jOjEyNTptb2R1bGVfcGh5X2RyaXZlcihzdGUxMHhwX3Bkcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYy0xMjYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3RlcmFuZXRpY3MuYz03Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGVyYW5ldGljc19kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvdGVyYW5ldGljcy5jLTg4LVxuZHJpdmVycy9uZXQvcGh5L3RlcmFuZXRpY3MuYzo4OTptb2R1bGVfcGh5X2RyaXZlcih0ZXJhbmV0aWNzX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvdGVyYW5ldGljcy5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS91UEQ2MDYyMC5jPTgxPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB1cGQ2MDYyMF9kcml2ZXJbMV0gPSB7IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYy05MC1cbmRyaXZlcnMvbmV0L3BoeS91UEQ2MDYyMC5jOjkxOm1vZHVsZV9waHlfZHJpdmVyKHVwZDYwNjIwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYy05Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jPTYwMT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdnNjODJ4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jLTcxNS1cbmRyaXZlcnMvbmV0L3BoeS92aXRlc3NlLmM6NzE2Om1vZHVsZV9waHlfZHJpdmVyKHZzYzgyeHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS92aXRlc3NlLmMtNzE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDA1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQWlyb2hhIEVOODgxMUggTURJTyBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYW4gTURJTyBNQ1UgZHJpdmVyLCBgbWRpby1haXJvaGEtZW44ODExaC5jYCwgZm9yIHRoZSBBaXJvaGEgRU44ODExSCAyLjVHIFBIWSBtaWNyb2NvbnRyb2xsZXIsIGFsb25nIHdpdGggcmVmYWN0b3Jpbmcgd2l0aGluIHRoZSBgYWlyX2VuODgxMWguY2AgYW5kIGBhaXJfcGh5X2xpYi5jYCBkcml2ZXJzLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBgbWRpby1haXJvaGEtZW44ODExaC5jYCBhbmQgYGFpcl9lbjg4MTFoLmNgIGFyZSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGV4aXN0ZW5jZSBvZiBhbiBNRElPIGJ1cywgYW5kIHNwZWNpZmljYWxseSwgdG8gYSBkZXZpY2UgdHJlZSBub2RlIG1hdGNoaW5nIGAmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdSYjMzQ7YCBvciBQSFkgSURzIGAweDAzYTJhNDExIC8gMHhjMGZmMDRhMGAuCgpUaGUgTURJTyBkcml2ZXIgKGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgKSByZWxpZXMgb24gYE9GX01ESU9gLCBtYWtpbmcgaXQgY2xlYXIgdGhhdCBEZXZpY2UgVHJlZSBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGluc3RhbnRpYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGVzZSBhcmUgc3BlY2lmaWMgdG8gQWlyb2hhIGhhcmR3YXJlLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogY2FuIHRoaXMgaGFyZHdhcmUgZXZlbiAqYmUqIHJlYWNoZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9uIGFuIHg4Nl82NCBzeXN0ZW0/ICBCYXNlZCBvbiB3aGF0IEkga25vdyBhYm91dCB2aXJ0dWFsaXphdGlvbiBhbmQgdGhlIG5hdHVyZSBvZiBNRElPLCB0aGUgYW5zd2VyIGlzIGRlZmluaXRpdmVseSBuby4gVGhlcmUmIzM5O3Mgbm8gZW11bGF0aW9uIG9mIHRoaXMgQWlyb2hhLXNwZWNpZmljIE1ESU8gZGV2aWNlIG9yIHRoZSBFTjg4MTFIIFBIWSBpbiBRRU1VLiAgVGhpcyByZXF1aXJlcyBwaHlzaWNhbCBBaXJvaGEgRU44ODExSCBoYXJkd2FyZSwgY29ubmVjdGVkIHZpYSBhbiBNRElPIGJ1cywgc29tZXRoaW5nIGNvbW1vbiBvbiBBUk0gb3IgTUlQUyByb3V0ZXIvYm9hcmQgYXJjaGl0ZWN0dXJlcywgbm90IHg4Ni4KClRvIGNvbmZpcm0gdGhpcywgSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGd1aWRlbGluZXMgYWJvdXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBUaGlzIHBhdGNoIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIGNhdGVnb3J5IG9mICYjMzQ7VmVuZG9yLXNwZWNpZmljIFsuLi5dIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIFsuLi5dIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsuCgpUbyBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJIGFsc28gcmV2aWV3ZWQgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBXaGlsZSB0aGUga2VybmVsIGhlYWRlcnMgc3VjaCBhcyBgaW5jbHVkZS9saW51eC9waHkuaGAgd2VyZSB0b3VjaGVkLCB0aGF0JiMzOTtzIGZpbmUuIFRoZSBrZXkgaXMgaW4gdGhlIHNwZWNpZmljcyBvZiB0aGUgYWRkZWQgY29kZTogYG1kaW8tYWlyb2hhLWVuODgxMWguY2AsIGBhaXJfZW44ODExaC5jYCwgYGFpcl9waHlfbGliLmNgIGFuZCB0aGUgc3VwcG9ydGluZyBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBjb25maWcgZmlsZXMuICBUaGUgaGVscGVyIGZ1bmN0aW9ucyBhZGRlZCB0byBgcGh5LmhgLCB3aGlsZSBnZW5lcmljIGluIG5hbWUsIGFyZSB1c2VkICpleGNsdXNpdmVseSogaW4gdGhlIEFpcm9oYS1zcGVjaWZpYyBkcml2ZXJzLiAgSSB3aWxsIHF1aWNrbHkgY2hlY2ssIGhvd2V2ZXIsIHRoYXQgdGhlIG5ldyBgbWRpb2Rldl9sb2NrKmAgaGVscGVyIGZ1bmN0aW9ucyBhcmUgbm90IGNhbGxlZCBhbnl3aGVyZSBlbHNlIG91dHNpZGUgb2YgQWlyb2hhIGNvZGUgaW4gdGhlIGtlcm5lbCwgYW5kIGlmIHNvLCBpdCBmdXJ0aGVyIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyB1bnJlYWNoYWJsZSBjb2RlLgoKSW4gc2hvcnQsIHRoZXJlJiMzOTtzIG5vIHBhdGggZm9yIHRoaXMgY29kZSB0byBiZSBleGVjdXRlZCBpbiBhIHN0YW5kYXJkIHg4Nl82NCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gVGhlIGNvZGUgaXMgYXJjaGl0ZWN0dXJhbGx5IGlzb2xhdGVkIHRvIGhhcmR3YXJlIHRoYXQgZG9lc24mIzM5O3QgZXhpc3QgaW4gc3VjaCBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2Rldl9sb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTI2MD1zdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yNzUtLyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjc2OnN0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3Ny17XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yNzgtXHRpZiAobmVzdGVkKVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjc5Olx0XHRtZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjgwLVx0ZWxzZVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MjgxOlx0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yODItfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTI4ND1pbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI5OC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjI5OTpcdFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzAwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTMyND1zdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zMjktXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozMzA6XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zMzEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzQ1PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTAtXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozNTE6XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTItXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzY3PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzcyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzczOlx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzc0LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTQxND1zdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy00MTctXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzo0MTg6XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy00MTktXHRyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIyODI9c3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODYtXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyODc6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODgte1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5Mi0vKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyOTM6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuaW5jbHVkZS9saW51eC9waHkuaC0yMjk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4ODQKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIE1ESU8gTUNVL1BIWSBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhpcyBjb2RlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGUgYG1kaW9kZXZfbG9jaypgIHZhcmlhYmxlcyBhcmUgZXhjbHVzaXZlbHkgdXNlZCB3aXRoaW4gYGFpcl9waHlfbGliLmNgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGNsZWFyIHNpZ25hbCB0aGF0IHRoaXMgd2hvbGUgbW9kaWZpY2F0aW9uIGlzIGNvbmZpbmVkIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIGZvciB0aGUgQWlyb2hhIEVOODgxMUggTURJTyBNQ1UgYW5kIFBIWS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBmdXp6aW5nIGFwcGxpY2FiaWxpdHksIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIGNvbmZpcm1lZC4KClRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBBaXJvaGEgaGFyZHdhcmUgaXMgbm90IHNvbWV0aGluZyB3ZSBjYW4gZW11bGF0ZSB3aXRoIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHNldHVwcyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9uIGFtZDY0LiBUaGUgZnVuY3Rpb25hbGl0eSByZXZvbHZlcyBhcm91bmQgbG9hZGluZyBNRDMyIGNvcmUgZmlybXdhcmUsIHdoaWNoLCB3aXRob3V0IGFjY2VzcyB0byB0aGUgYWN0dWFsIEFpcm9oYSBoYXJkd2FyZSBhbmQgaXRzIERldmljZSBUcmVlIHJlcHJlc2VudGF0aW9uLCBpcyBjb21wbGV0ZWx5IGluYWNjZXNzaWJsZS4KCkxldCYjMzk7cyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluOgoqICAgYFdvcnRoRnV6emluZ2A6IEZhbHNlIOKAkyB5ZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBFbXB0eSBhcnJheSDigJMgY29ycmVjdC4gTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCBvciByZWxldmFudCBoZXJlLgoqICAgYEZvY3VzU3ltYm9sc2A6IEFsc28gZW1wdHkg4oCTIG1ha2VzIHNlbnNlLiBObyBzcGVjaWZpYyBzeW1ib2xzIGFyZSBoaWdobGlnaHRlZCBmb3IgZnV6emluZy4KKiAgIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGUsIGFuZCB0aGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgTURJTyBNQ1UsIGFuZCBQSFkuCgpBbGwgY3JpdGVyaWEgcG9pbnQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLiBJdCYjMzk7cyBzYWZlIHRvIHNheSB0aGVzZSBjaGFuZ2VzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGFueSBmdXp6aW5nIGFjdGl2aXRpZXMgd2UmIzM5O2QgcnVuIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gRXhjZWxsZW50LCBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBtYXJrIHRoaXMgb25lIGFwcHJvcHJpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgRGV2aWNlIFRyZWUgYmluZGluZ3MsIGFuIE1ESU8gTUNVIGRyaXZlciwgYW5kIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWS9NQ1UgaGFyZHdhcmUuIFRoZXNlIGRyaXZlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIEFpcm9oYSBoYXJkd2FyZSAoYW5kIHJlcXVpcmUgRGV2aWNlIFRyZWUgTURJTyBlbnVtZXJhdGlvbikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgRGV2aWNlIFRyZWUgYmluZGluZ3MsIGFuIE1ESU8gTUNVIGRyaXZlciwgYW5kIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWS9NQ1UgaGFyZHdhcmUuIFRoZXNlIGRyaXZlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIEFpcm9oYSBoYXJkd2FyZSAoYW5kIHJlcXVpcmUgRGV2aWNlIFRyZWUgTURJTyBlbnVtZXJhdGlvbikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjA4LjI5NDQzNTgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NDEwODE0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBEZXZpY2UgVHJlZSBiaW5kaW5ncywgYW4gTURJTyBNQ1UgZHJpdmVyLCBhbmQgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IGZvciB0aGUgQWlyb2hhIEVOODgxMUggUEhZL01DVSBoYXJkd2FyZS4gVGhlc2UgZHJpdmVycyBhbmQgaGVscGVyIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gcGh5c2ljYWwgQWlyb2hhIGhhcmR3YXJlIChhbmQgcmVxdWlyZSBEZXZpY2UgVHJlZSBNRElPIGVudW1lcmF0aW9uKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjowOC4yOTQ0NDAzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzg4NDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYyNzY1Yjc3OWE0MWIyZDgzZjQ5MGJkYTFlOGM5MzYxMmY1MTgxYWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwMTo1MjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2JlMGFiODYyMjY2MVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXFxuQEAgLTAsMCArMSwxMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1VcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gQWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246IHxcXG4rICBUaGUgQWlyb2hhIEVOODgxMUggMi41RyBQSFkgaXMgYnVpbHQgYXJvdW5kIGFuIE1EMzIgY29yZSB0aGF0IGV4ZWN1dGVzXFxuKyAgZmlybXdhcmUgZnJvbSB2b2xhdGlsZSBSQU0uIFRoZSBjaGlwIGFuc3dlcnMgYW4gTURJTyBhZGRyZXNzIGZyb21cXG4rICBwb3dlci1vbiwgYnV0IHRoZSBQSFkgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QgdW50aWwgZmlybXdhcmUgaGFzIGJlZW5cXG4rICBsb2FkZWQgb3ZlciBNRElPLCBhbmQgaXQgZGlzYXBwZWFycyBhZ2FpbiBpZiB0aGF0IFJBTSBpcyBjbGVhcmVkLlxcbitcXG4rICBUaGlzIG5vZGUgZGVzY3JpYmVzIHRoZSBNRDMyIGNvcmUuIFRoZSBQSFkgZnVuY3Rpb24gYW5zd2VycyBvbiBhIGNoaWxkXFxuKyAgTURJTyBidXMgYmVsb3cgaXQsIGF0IHRoZSBzYW1lIGFkZHJlc3MgdGhlIGNvcmUgb2NjdXBpZXMgb24gdGhlIHBhcmVudFxcbisgIGJ1cywgYW5kIG9ubHkgd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZy5cXG4rXFxuKyAgVGhlIHJlc2V0IGxpbmUgaXMgd2lyZWQgdG8gdGhlIGNvcmUsIGFuZCBhc3NlcnRpbmcgaXQgY2xlYXJzIHRoZVxcbisgIGZpcm13YXJlIFJBTS4gSXQgdGhlcmVmb3JlIGJlbG9uZ3MgdG8gdGhpcyBub2RlOiBhIHJlc2V0IGRlc2NyaWJlZCBvblxcbisgIHRoZSBQSFkgbm9kZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhhdCBub2RlJ3Mgb3duIGxpZmVjeWNsZSwgd2hhdGV2ZXJcXG4rICB0aGUgY29yZSBpcyBkb2luZy5cXG4rXFxuKyAgQSBib2FyZCB0aGF0IGhhcyBmaXJtd2FyZSBpbiBoYW5kIHdoaWxlIGl0cyBNRElPIGJ1cyBpcyBlbnVtZXJhdGVkIGNhblxcbisgIGRlc2NyaWJlIHRoZSBQSFkgb24gaXRzIG93biwgYXMgYWlyb2hhLGVuODgxMWgueWFtbCBkb2VzLCBhbmQgdGhhdCBmb3JtXFxuKyAgc3RheXMgdmFsaWQuIFRoaXMgYmluZGluZyBpcyBmb3IgdGhlIGJvYXJkcyB3aGVyZSBmaXJtd2FyZSBhcnJpdmVzXFxuKyAgbGF0ZXIsIHNvIHRoYXQgdGhlcmUgaXMgbm8gUEhZIHRvIGRlc2NyaWJlIHVudGlsIHRoZSBjb3JlIGhhcyBpdC5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgJG5vZGVuYW1lOlxcbisgICAgcGF0dGVybjogXFxcIl5tY3VAWzAtOWEtZl0rJFxcXCJcXG4rXFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGNvbnN0OiBhaXJvaGEsZW44ODExaC1tY3VcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgcmVzZXQtZ3Bpb3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFRoZSBHUElPIHBoYW5kbGUgYW5kIHNwZWNpZmllciBmb3IgdGhlIHJlc2V0IHNpZ25hbCB3aXJlZCB0byB0aGVcXG4rICAgICAgTUQzMiBjb3JlLlxcbitcXG4rICByZXNldC1hc3NlcnQtdXM6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXNcXG4rICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLlxcbitcXG4rICByZXNldC1kZWFzc2VydC11czpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBEZWxheSBhZnRlciB0aGUgcmVzZXQgd2FzIGRlYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXFxuKyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC5cXG4rXFxuKyAgbWRpbzpcXG4rICAgICRyZWY6IG1kaW8ueWFtbCNcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBUaGUgYnVzIHRoZSBQSFkgZnVuY3Rpb24gYW5zd2VycyBvbiB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLCBhdFxcbisgICAgICB0aGUgc2FtZSBhZGRyZXNzIHRoaXMgbm9kZSBvY2N1cGllcyBvbiB0aGUgcGFyZW50IGJ1cy4gT25seSB0aGF0XFxuKyAgICAgIG9uZSBhZGRyZXNzIGlzIHBhc3NlZCB0aHJvdWdoLlxcbitcXG4rICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbisgICAgICAnXmV0aGVybmV0LXBoeUBbMC05YS1mXSskJzpcXG4rICAgICAgICB0eXBlOiBvYmplY3RcXG4rICAgICAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbisgICAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcXG4rICAgICAgICAgIHJlc2V0LWFzc2VydC11czogZmFsc2VcXG4rICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzOiBmYWxzZVxcbitcXG4rICAgICAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgICAgIFRoZSByZXNldCBsaW5lIGJlbG9uZ3MgdG8gdGhlIE1DVSBub2RlIGFib3ZlLiBBIHJlc2V0IGRlc2NyaWJlZFxcbisgICAgICAgICAgaGVyZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhpcyBub2RlJ3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXFxuKyAgICAgICAgICB0aGUgZmlybXdhcmUgdGhhdCBjcmVhdGVkIHRoaXMgUEhZLlxcbitcXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gcmVnXFxuKyAgLSBtZGlvXFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXFx1MDAzZVxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXFx1MDAzZVxcbitcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBtY3VAZCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiYWlyb2hhLGVuODgxMWgtbWN1XFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4ZFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gXFx1MDAzY1xcdTAwMjZwaW8gMTQgR1BJT19BQ1RJVkVfTE9XXFx1MDAzZTtcXG4rICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXFx1MDAzYzEwMDAwXFx1MDAzZTtcXG4rICAgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXMgPSBcXHUwMDNjMjAwMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgbWRpbyB7XFxuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgICAgIGV0aGVybmV0LXBoeUBkIHtcXG4rICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImV0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVxcXCI7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4ZFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFxcdTAwM2NcXHUwMDI2cGlvIDE1IElSUV9UWVBFX0xFVkVMX0xPV1xcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggYjIzZmI2ZjJmNGVmNC4uM2JkODZkZjJiZTU3MSAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTc1MCw2ICs3NTAsMTQgQEAgUzpcXHRTdXBwb3J0ZWRcXG4gRjpcXHRmcy9haW8uY1xcbiBGOlxcdGluY2x1ZGUvbGludXgvKmFpbyouaFxcbiBcXG4rQUlST0hBIEVOODgxMUggTUNVIE1ESU8gRFJJVkVSXFxuK006XFx0QWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcbitMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXFxuK0Y6XFx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcbitcXG4gQUlST0hBIEVUSEVSTkVUIERSSVZFUlxcbiBNOlxcdExvcmVuem8gQmlhbmNvbmkgXFx1MDAzY2xvcmVuem9Aa2VybmVsLm9yZ1xcdTAwM2VcXG4gTDpcXHRsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXG5pbmRleCBkNDQyNzhmMjZmYWJlLi4zM2VmYzZiYzg3NWY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbkBAIC0yOSw2ICsyOSwxOSBAQCBjb25maWcgTURJT19BSVJPSEFcXG4gXFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE1ESU8gYnVzc2VzIGZvdW5kIGluIHRoZVxcbiBcXHQgIEFpcm9oYSBBTjc1ODMgU29DJ3MuXFxuIFxcbitjb25maWcgTURJT19BSVJPSEFfRU44ODExSFxcbitcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBPRl9NRElPXFxuK1xcdGRlcGVuZHMgb24gRldfTE9BREVSXFxuK1xcdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxcbitcXHRpbXBseSBBSVJfRU44ODExSF9QSFlcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUgsIHdoaWNoIGlzIGFuXFxuK1xcdCAgTUQzMiBtaWNyb2NvbnRyb2xsZXIgdW50aWwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBpbnRvIGl0IGFuZCBvbmx5XFxuK1xcdCAgYmVjb21lcyBhbiBFdGhlcm5ldCBQSFkgYWZ0ZXJ3YXJkcy4gVGhlIGRyaXZlciBkb3dubG9hZHMgdGhhdFxcbitcXHQgIGZpcm13YXJlIG9uY2UgaXQgYmVjb21lcyByZWFkYWJsZSwgb3IgYWRvcHRzIGZpcm13YXJlIGEgYm9vdGxvYWRlclxcbitcXHQgIGxlZnQgcnVubmluZy5cXG4rXFxuIGNvbmZpZyBNRElPX1NVTjRJXFxuIFxcdHRyaXN0YXRlIFxcXCJBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxcbmluZGV4IDA0ODU4Njc0NjAyNjIuLjA2ZDA5NjY3NWRhY2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcXG5AQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVxcdCs9IGZ3bm9kZV9tZGlvLm9cXG4gb2JqLSQoQ09ORklHX09GX01ESU8pXFx0XFx0Kz0gb2ZfbWRpby5vXFxuIFxcbiBvYmotJChDT05GSUdfTURJT19BSVJPSEEpXFx0XFx0Kz0gbWRpby1haXJvaGEub1xcbitvYmotJChDT05GSUdfTURJT19BSVJPSEFfRU44ODExSClcXHQrPSBtZGlvLWFpcm9oYS1lbjg4MTFoLm9cXG4gb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKVxcdFxcdCs9IG1kaW8tYXNwZWVkLm9cXG4gb2JqLSQoQ09ORklHX01ESU9fQkNNX0lQUk9DKVxcdFxcdCs9IG1kaW8tYmNtLWlwcm9jLm9cXG4gb2JqLSQoQ09ORklHX01ESU9fQkNNX1VOSU1BQylcXHRcXHQrPSBtZGlvLWJjbS11bmltYWMub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MjI0NTU4OTE0NzI3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXFxuQEAgLTAsMCArMSwzODIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuKy8qXFxuKyAqIEFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclxcbisgKlxcbisgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cXG4rICogaXQsIGFuZCBvbmx5IHRoZW4gYW4gRXRoZXJuZXQgUEhZLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcG0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9GV19QT0xMX01JTl9NU1xcdDEwMDBcXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXFx0MzAwMDBcXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1dBUk5fTVNcXHQ2MDAwMFxcbitcXG4rc3RydWN0IGVuODgxMWhfbWN1IHtcXG4rXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbitcXHRzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvO1xcbitcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGZ3X3BvbGw7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuK1xcdHVuc2lnbmVkIGludCBwb2xsX21zO1xcbitcXHR1bnNpZ25lZCBpbnQgd2FpdGVkX21zO1xcbitcXHR1MzIgZndfdmVyc2lvbjtcXG4rXFx0Ym9vbCB3YXJuZWQ7XFxuK1xcdGJvb2wgZndfcnVubmluZztcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSlcXG4re1xcbitcXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChhZGRyICE9IG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcilcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXR1cm4gbWRpb2J1c19yZWFkX25lc3RlZChtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cywgYWRkciwgcmVnbnVtKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbClcXG4re1xcbitcXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChhZGRyICE9IG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcilcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXR1cm4gbWRpb2J1c193cml0ZV9uZXN0ZWQobWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VidXMsIGFkZHIsIHJlZ251bSwgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldmFkLFxcbitcXHRcXHRcXHRcXHRpbnQgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKGFkZHIgIT0gbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBtZGlvYnVzX2M0NV9yZWFkX25lc3RlZChtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cywgYWRkciwgZGV2YWQsIHJlZ251bSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXFxuK1xcdFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKGFkZHIgIT0gbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VidXMsIGFkZHIsIGRldmFkLCByZWdudW0sXFxuK1xcdFxcdFxcdFxcdFxcdHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpwYXJlbnQgPSBtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cztcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJtZGlvXFxcIik7XFxuK1xcdGlmICghbnApXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0LyogTm90IGRldm06IHRoaXMgaXMgcmV0cmllZCwgYW5kIGEgZGV2bSBidXMgd291bGQgb25seSBiZSBmcmVlZCBhdFxcbitcXHQgKiBkZXRhY2guXFxuK1xcdCAqL1xcbitcXHRidXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxuK1xcdGlmICghYnVzKSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJhaXJvaGEtZW44ODExaFxcXCI7XFxuK1xcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzXFxcIiwgZGV2X25hbWUoZGV2KSk7XFxuK1xcdGJ1cy1cXHUwMDNlcHJpdiA9IG1jdTtcXG4rXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuK1xcdGlmIChwYXJlbnQtXFx1MDAzZXJlYWQpIHtcXG4rXFx0XFx0YnVzLVxcdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcXG4rXFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IGVuODgxMWhfbWN1X3dyaXRlO1xcbitcXHR9XFxuK1xcdGlmIChwYXJlbnQtXFx1MDAzZXJlYWRfYzQ1KSB7XFxuK1xcdFxcdGJ1cy1cXHUwMDNlcmVhZF9jNDUgPSBlbjg4MTFoX21jdV9yZWFkX2M0NTtcXG4rXFx0XFx0YnVzLVxcdTAwM2V3cml0ZV9jNDUgPSBlbjg4MTFoX21jdV93cml0ZV9jNDU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuK1xcdG9mX25vZGVfcHV0KG5wKTtcXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIW1kaW9idXNfZ2V0X3BoeShidXMsIG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcikpIHtcXG4rXFx0XFx0LyogQW4gSUQgcmVhZCB0aGF0IGZhaWxlZCBsZWF2ZXMgdGhlIGJ1cyByZWdpc3RlcmVkIGFuZCB0aGVcXG4rXFx0XFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdH1cXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRtZGlvYnVzX2ZyZWUoYnVzKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0bWN1LVxcdTAwM2VidXMgPSBidXM7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBTZXJpYWxpc2Ugd2l0aCB0aGUgUEhZIGJlbG93LCB3aGljaCByZWFjaGVzIHRoZSBzYW1lIHJlZ2lzdGVycyB1bmRlclxcbisgKiB0aGlzIGxvY2sgdGhyb3VnaCBwaHlfc2VsZWN0X3BhZ2UoKS5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZW44ODExaF9tY3VfY2hpcF9sb2NrKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtY3UtXFx1MDAzZWJ1cztcXG4rXFxuK1xcdGlmIChidXMpXFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBidXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuK3tcXG4rXFx0aWYgKGJ1cylcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2Z3X3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBlbjg4MTFoX21jdSwgZndfcG9sbCk7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IG1paV9idXMgKmNoaXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW1jdS1cXHUwMDNlZndfcnVubmluZykge1xcbitcXHRcXHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XFxuK1xcdFxcdHJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS1cXHUwMDNlbWRpb2RldiwgXFx1MDAyNm1jdS1cXHUwMDNlZndfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgISFjaGlwKTtcXG4rXFx0XFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJmaXJtd2FyZSAlMDh4IHJ1bm5pbmcgYWZ0ZXIgJXVtc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0bWN1LVxcdTAwM2Vmd192ZXJzaW9uLCBtY3UtXFx1MDAzZXdhaXRlZF9tcyk7XFxuK1xcdFxcdHJldCA9IGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRE0pID86XFxuK1xcdFxcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRtY3UtXFx1MDAzZWZ3X3J1bm5pbmcgPSB0cnVlO1xcbitcXHRcXHRtY3UtXFx1MDAzZXBvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TO1xcbitcXHRcXHRtY3UtXFx1MDAzZXdhaXRlZF9tcyA9IDA7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FybmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcXG4rXFx0ICogZndub2RlX21kaW8gZGVmZXJzIHdoaWxlIHRoZSBQSFkgbm9kZSdzIGludGVycnVwdCBjb250cm9sbGVyIGlzXFxuK1xcdCAqIG1pc3NpbmcsIHNvIGEgZmFpbHVyZSBpcyBub3QgbmVjZXNzYXJpbHkgcGVybWFuZW50LlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gbWN1LVxcdTAwM2VidXMgPyAwIDogZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKG1jdSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbityZXRyeTpcXG4rXFx0aWYgKCFtY3UtXFx1MDAzZXdhcm5lZCBcXHUwMDI2XFx1MDAyNiBtY3UtXFx1MDAzZXdhaXRlZF9tcyBcXHUwMDNlPSBFTjg4MTFIX0ZXX1dBUk5fTVMpIHtcXG4rXFx0XFx0aWYgKCFtY3UtXFx1MDAzZWZ3X3J1bm5pbmcpXFxuK1xcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIm5vIGZpcm13YXJlIGFmdGVyICV1bXMgb2Ygd2FpdGluZyBmb3IgJXMgYW5kICVzOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBtY3UtXFx1MDAzZXdhaXRlZF9tcywgRU44ODExSF9NRDMyX0RNLFxcbitcXHRcXHRcXHRcXHQgRU44ODExSF9NRDMyX0RTUCwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJubyBQSFkgYXQgYWRkcmVzcyAlZCwgJXVtcyBhZnRlciB0aGUgZmlybXdhcmUgc3RhcnRlZDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyLCBtY3UtXFx1MDAzZXdhaXRlZF9tcyxcXG4rXFx0XFx0XFx0XFx0IEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FybmVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUGFzdCBpdHMgYnVkZ2V0LCBvbmx5IGEgZGVmZXJyYWwgd2lsbCBjaGFuZ2Ugb24gaXRzIG93bjogZXZlcnlcXG4rXFx0ICogb3RoZXIgZXJyb3IgcmVwZWF0cyBhIGJ1cyByZWdpc3RyYXRpb24sIGl0cyBtZXNzYWdlIGZyb20gdGhlIE1ESU9cXG4rXFx0ICogY29yZSBhbmQgaXRzIHVldmVudHMgZm9yIHRoZSB1cHRpbWUuIEZpcm13YXJlIGZpbGVzIGFyZSB0aGVcXG4rXFx0ICogZXhjZXB0aW9uLCBzaW5jZSB0aGV5IGNhbiBiZSBpbnN0YWxsZWQgYXQgYW55IHRpbWUuXFxuK1xcdCAqL1xcbitcXHRpZiAobWN1LVxcdTAwM2Vmd19ydW5uaW5nIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRVBST0JFX0RFRkVSIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBtY3UtXFx1MDAzZXdhaXRlZF9tcyBcXHUwMDNlPSBFTjg4MTFIX0ZXX1dBUk5fTVMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1jdS1cXHUwMDNlcG9sbF9tcyA9IG1pbihtY3UtXFx1MDAzZXBvbGxfbXMgKiAyLCBFTjg4MTFIX0ZXX1BPTExfTUFYX01TKTtcXG4rXFx0LyogQ291bnQgdGhlIHNsZWVwIGFoZWFkOiB0aGUgZmlyc3QgcnVuIHdhcyBpbW1lZGlhdGUuICovXFxuK1xcdG1jdS1cXHUwMDNld2FpdGVkX21zICs9IG1jdS1cXHUwMDNlcG9sbF9tcztcXG4rXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwsXFxuK1xcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXMobWN1LVxcdTAwM2Vwb2xsX21zKSk7XFxuK31cXG4rXFxuKy8qIFRoZSBmaXJtd2FyZSBsaXZlcyBpbiB2b2xhdGlsZSBSQU06IG5vIHJlc2V0IHdoaWxlIHRoZSBNRDMyIHJlcG9ydHMgcmVhZHkuICovXFxuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQoc3RydWN0IGVuODgxMWhfbWN1ICptY3UsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9IG1jdS1cXHUwMDNlbWRpb2RldjtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0dTMyIGFzc2VydF91cyA9IDAsIGRlYXNzZXJ0X3VzID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGRldl9kYmcoZGV2LCBcXFwiTUQzMiBhbHJlYWR5IHJ1bm5pbmcsIGxlYXZpbmcgcmVzZXQgYWxvbmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghbWN1LVxcdTAwM2VyZXNldF9ncGlvKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBBIGZhaWxlZCByZWFkIGlzIG5vdCBhIGRvcm1hbnQgY2hpcCwgc28gZG8gbm90IHRvdWNoIGEgbGluZSB0aGF0XFxuK1xcdCAqIGlzIGFscmVhZHkgZGVhc3NlcnRlZC4gQW4gYXNzZXJ0ZWQgb25lIGlzIHdoeSB0aGUgcmVhZCBmYWlsZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVxcdTAwM2VyZXNldF9ncGlvKSBcXHUwMDNjPSAwKSB7XFxuK1xcdFxcdGRldl9kYmcoZGV2LCBcXFwiTUQzMiBzdGF0ZSB1bmtub3duICglZCksIGxlYXZpbmcgcmVzZXQgYWxvbmVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXFxcInJlc2V0LWFzc2VydC11c1xcXCIsIFxcdTAwMjZhc3NlcnRfdXMpO1xcbitcXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcXFwicmVzZXQtZGVhc3NlcnQtdXNcXFwiLCBcXHUwMDI2ZGVhc3NlcnRfdXMpO1xcbitcXG4rXFx0cmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChtY3UtXFx1MDAzZXJlc2V0X2dwaW8sIDEpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcInJlc2V0IG5vdCBhc3NlcnRlZDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChhc3NlcnRfdXMpXFxuK1xcdFxcdGZzbGVlcChhc3NlcnRfdXMpO1xcbitcXG4rXFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG1jdS1cXHUwMDNlcmVzZXRfZ3BpbywgMCk7XFxuK1xcdGlmIChkZWFzc2VydF91cylcXG4rXFx0XFx0ZnNsZWVwKGRlYXNzZXJ0X3VzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3U7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcbitcXHRtY3UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1jdSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIW1jdSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRtY3UtXFx1MDAzZW1kaW9kZXYgPSBtZGlvZGV2O1xcbitcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIG1jdSk7XFxuK1xcbitcXHQvKiBSZWdpc3RyYXRpb24gbmVlZHMgdGhpcyBvbmx5IG9uY2UgdGhlIGZpcm13YXJlIHJ1bnMsIGJ1dCBhIERUXFxuK1xcdCAqIGhvbGUgc2hvdWxkIGZhaWwgdGhlIGJpbmQgbm93LCBub3QgYXMgYSB3b3JrLWl0ZW0gZXJyb3IgbGF0ZXIuXFxuK1xcdCAqL1xcbitcXHRucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1kaW9cXFwiKTtcXG4rXFx0aWYgKCFucClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJubyBtZGlvIG5vZGUgZGVzY3JpYmluZyB0aGUgUEhZXFxcXG5cXFwiKTtcXG4rXFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXG4rXFx0LyogVGhlIGNvcmUgY2xhaW1zIHJlc2V0LWdwaW9zIG9ubHkgZm9yIGRldmljZXMgZmxhZ2dlZCBhcyBQSFlzLiAqL1xcbitcXHRtY3UtXFx1MDAzZXJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIFxcXCJyZXNldFxcXCIsIEdQSU9EX0FTSVMpO1xcbitcXHRpZiAoSVNfRVJSKG1jdS1cXHUwMDNlcmVzZXRfZ3BpbykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihtY3UtXFx1MDAzZXJlc2V0X2dwaW8pLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IHJlc2V0IEdQSU9cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKG1jdS1cXHUwMDNlcmVzZXRfZ3BpbylcXG4rXFx0XFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWN1LVxcdTAwM2VyZXNldF9ncGlvLCBcXFwiRU44ODExSCByZXNldFxcXCIpO1xcbitcXG4rXFx0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsIGZhbHNlKTtcXG4rXFxuK1xcdG1jdS1cXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwsIGVuODgxMWhfbWN1X2Z3X3BvbGwpO1xcbitcXHQvKiBGcmVlemFibGU6IG5laXRoZXIgdGhlIGZpbGUgbG9va3VwIG5vciB0aGUgZG93bmxvYWQgbWF5IGxhbmQgb25cXG4rXFx0ICogYSBzdXNwZW5kaW5nIGJ1cy5cXG4rXFx0ICovXFxuK1xcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCBcXHUwMDI2bWN1LVxcdTAwM2Vmd19wb2xsLCAwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcXG4rXFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bWN1LVxcdTAwM2Vmd19wb2xsKTtcXG4rXFx0aWYgKG1jdS1cXHUwMDNlYnVzKSB7XFxuK1xcdFxcdG1kaW9idXNfdW5yZWdpc3RlcihtY3UtXFx1MDAzZWJ1cyk7XFxuK1xcdFxcdG1kaW9idXNfZnJlZShtY3UtXFx1MDAzZWJ1cyk7XFxuK1xcdFxcdG1jdS1cXHUwMDNlYnVzID0gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFx0c3RydWN0IG1paV9idXMgKmNoaXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBOb3RoaW5nIHRvIHJlZG86IHRoZSBwb2xsIGlzIGFybWVkIGFuZCB0aGF3cyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gKi9cXG4rXFx0aWYgKCFtY3UtXFx1MDAzZWZ3X3J1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogTm90IG9uIHRoZSB3b3JrcXVldWU6IGEgRFNBIHBvcnQncyBQSFkgcmVzdW1lcyByaWdodCBhZnRlciB0aGlzXFxuK1xcdCAqIG9uZSBhbmQgY2FsbHMgcGh5X2luaXRfaHcoKSwgd2hpY2ggbmVlZHMgdGhlIGZpcm13YXJlIGJ5IHRoZW4uXFxuK1xcdCAqL1xcbitcXHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XFxuK1xcdGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQobWN1LCAhIWNoaXApO1xcbitcXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXFx1MDAzZW1kaW9kZXYsIFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XFxuK1xcdGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKGNoaXApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHQvKiBUaGUgcmVsb2FkIHJlc3RvcmVzIHRoaXMgY2hpcCwgbm90IHRoZSBQSFkgYmVsb3cgaXQ6IGl0c1xcbitcXHRcXHQgKiBvd24gcmVzdW1lIGhhcyBhbHJlYWR5IGZhaWxlZCBieSB0aGVuIGFuZCBub3RoaW5nIGNhbGxzXFxuK1xcdFxcdCAqIHBoeV9pbml0X2h3KCkgdHdpY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZpcm13YXJlIG5vdCByZXN0b3JlZCwgcmVsb2FkaW5nOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdG1jdS1cXHUwMDNlZndfcnVubmluZyA9IGZhbHNlO1xcbitcXHRcXHRtY3UtXFx1MDAzZXBvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TO1xcbitcXHRcXHRtY3UtXFx1MDAzZXdhaXRlZF9tcyA9IDA7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FybmVkID0gZmFsc2U7XFxuK1xcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCBcXHUwMDI2bWN1LVxcdTAwM2Vmd19wb2xsLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFMoZW44ODExaF9tY3VfcG1fb3BzLCBOVUxMLCBlbjg4MTFoX21jdV9yZXN1bWUpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZW44ODExaF9tY3Vfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW44ODExaC1tY3VcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBlbjg4MTFoX21jdV9vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGVuODgxMWhfbWN1X2RyaXZlciA9IHtcXG4rXFx0LnByb2JlID0gZW44ODExaF9tY3VfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSBlbjg4MTFoX21jdV9yZW1vdmUsXFxuK1xcdC5tZGlvZHJ2LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiYWlyb2hhLWVuODgxMWgtbWN1XFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gZW44ODExaF9tY3Vfb2ZfbWF0Y2gsXFxuK1xcdFxcdC5wbSA9IHBtX3NsZWVwX3B0cihcXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcXG4rXFx0XFx0LyogVGVhcmluZyB0aGUgY2hpbGQgYnVzIGRvd24gdW5kZXIgYW4gYXR0YWNoZWQgUEhZIGlzIG5vdFxcbitcXHRcXHQgKiBzb21ldGhpbmcgdGhpcyBkcml2ZXIgY2FuIG1ha2Ugc2FmZSBvbiBpdHMgb3duLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxcbitcXHR9LFxcbit9O1xcbitcXG4rbWRpb19tb2R1bGVfZHJpdmVyKGVuODgxMWhfbWN1X2RyaXZlcik7XFxuK1xcbitNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcXG4rTU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApO1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiQWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcXG5pbmRleCBlYzdjNDRjYTY4ZTdkLi44NjFiOGZlNDllMjRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcXG5AQCAtMjAsMjEgKzIwLDE1IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJhaXJfcGh5X2xpYi5oXFxcIlxcbiBcXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFxcdFxcdDB4MDNhMmE0MTFcXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcXHRcXHQweGMwZmYwNGEwXFxuIFxcbi0jZGVmaW5lIEVOODgxMUhfTUQzMl9ETVxcdFxcdFxcXCJhaXJvaGEvRXRoTUQzMi5kbS5iaW5cXFwiXFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFxcdFxcXCJhaXJvaGEvRXRoTUQzMi5EU1AuYmluXFxcIlxcbiAjZGVmaW5lIEFOODgxMUhCX01EMzJfRE1cXHRcXFwiYWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRNLmJpblxcXCJcXG4gI2RlZmluZSBBTjg4MTFIQl9NRDMyX0RTUFxcdFxcXCJhaXJvaGEvYW44ODExaGIvRXRoTUQzMl9DUkMuRFNQLmJpblxcXCJcXG4gXFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRE1cXHQweDAwMDAwMDAwXFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQXFx0MHgwMDEwMDAwMFxcbi1cXG4gLyogTUlJIFJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIEFJUl9BVVhfQ1RSTF9TVEFUVVNcXHRcXHQweDFkXFxuICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0tcXHRHRU5NQVNLKDQsIDIpXFxuQEAgLTQ0LDggKzM4LDYgQEBcXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFxcdDB4Y1xcbiBcXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXFxuLSNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTXFx0XFx0MHg4MDA5XFxuLSNkZWZpbmUgICBFTjg4MTFIX1BIWV9SRUFEWVxcdFxcdFxcdDB4MDJcXG4gXFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcXHRcXHQweDgwMGJcXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVxcdFxcdDB4ODAwY1xcbkBAIC0xMDgsOCArMTAwLDYgQEBcXG4gI2RlZmluZSBFTjg4MTFIXzJQNUdfTFBBXFx0XFx0MHgzYjMwXFxuICNkZWZpbmUgICBFTjg4MTFIXzJQNUdfTFBBXzJQNUdcXHRcXHRcXHRCSVQoMClcXG4gXFxuLSNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OXFx0XFx0MHgzYjNjXFxuLVxcbiAjZGVmaW5lIEVOODgxMUhfUE9MQVJJVFlcXHRcXHQweGNhMGY4XFxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFXFx0XFx0QklUKDEpXFxuQEAgLTEyMiwxMiArMTEyLDYgQEBcXG4gI2RlZmluZSBFTjg4MTFIX0NMS19DR01cXHRcXHRcXHQweGNmOTU4XFxuICNkZWZpbmUgICBFTjg4MTFIX0NMS19DR01fQ0tPXFx0XFx0XFx0QklUKDI2KVxcbiBcXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMVxcdFxcdDB4MGYwMDE4XFxuLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVFxcdFxcdDB4MFxcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXFx0XFx0MHgxXFxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJcXHRcXHQweDgwMDAwMFxcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkdcXHRcXHRCSVQoMTEpXFxuLVxcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9TRVQxXFx0XFx0MHhmMDIwY1xcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04yXFx0XFx0MHhmMDIxOFxcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04zXFx0XFx0MHhmMDIxY1xcbkBAIC0yNzAsODYgKzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4gXFx0XFx0XFx0ICAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19haXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxcbi1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCBvZmZzZXQ7XFxuLVxcdGludCByZXQ7XFxuLVxcdHUxNiB2YWw7XFxuLVxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcXG4tXFx0XFx0XFx0ICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcXG4tXFx0XFx0XFx0ICBsb3dlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcXHUwMDNjIGZ3LVxcdTAwM2VzaXplOyBvZmZzZXQgKz0gNCkge1xcbi1cXHRcXHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXFx1MDAyNmZ3LVxcdTAwM2VkYXRhW29mZnNldCArIDJdKTtcXG4tXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZnctXFx1MDAzZWRhdGFbb2Zmc2V0XSk7XFxuLVxcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcyxcXG4tXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuLXtcXG4tXFx0aW50IHNhdmVkX3BhZ2U7XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXG4tXFx0aWYgKGZ3LVxcdTAwM2VzaXplICUgNCkge1xcbi1cXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImZpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgIGZ3LVxcdTAwM2VzaXplKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4tXFxuLVxcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuLVxcbi1cXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbi1cXHRcXHRcXHRcXHQgICBhZGRyZXNzLCByZXQpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuLVxcdGludCByZXQsIHJlZ192YWx1ZTtcXG4rXFx0aW50IHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8sIGZhbHNlKTtcXG4gXFxuLVxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXFxuLVxcdFxcdFxcdFxcdFxcdCBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXFxuLVxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG4tXFx0XFx0XFx0XFx0XFx0RU44ODExSF9QSFlfRldfU1RBVFVTLCByZWdfdmFsdWUsXFxuLVxcdFxcdFxcdFxcdFxcdHJlZ192YWx1ZSA9PSBFTjg4MTFIX1BIWV9SRUFEWSxcXG4tXFx0XFx0XFx0XFx0XFx0MjAwMDAsIDc1MDAwMDAsIHRydWUpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTUNVIG5vdCByZWFkeTogMHgleFxcXFxuXFxcIiwgcmVnX3ZhbHVlKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLVxcdH1cXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTUNVIG5vdCByZWFkeTogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxcbkBAIC00MTEsNyArMzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcXG4rXFx0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBhZGRyZXNzLCBmdywgZmFsc2UpO1xcbiBcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC01MDcsNTQgKzQxOSwxMSBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFxuIHN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4tXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuLVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyO1xcbitcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3MSwgRU44ODExSF9NRDMyX0RNLCBkZXYpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZmdzIsIEVOODgxMUhfTUQzMl9EU1AsIGRldik7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9yZWwxO1xcbi1cXG4tXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4tXFx0XFx0XFx0XFx0XFx0IEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4tXFxuLVxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuLVxcbi1cXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgQUlSX0ZXX0FERFJfRE0sICBmdzEpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RTUCwgZncyKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4tXFxuLVxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDApO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0cmV0ID0gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0ZW44ODExaF9wcmludF9md192ZXJzaW9uKHBoeWRldik7XFxuLVxcbi1lbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0Olxcbi1cXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XFxuLVxcbi1lbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTpcXG4tXFx0cmVsZWFzZV9maXJtd2FyZShmdzEpO1xcbi1cXG4rXFx0cmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgXFx1MDAyNnByaXYtXFx1MDAzZWZpcm13YXJlX3ZlcnNpb24sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGZhbHNlKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXG5AQCAtMTE1Niw4ICsxMDI1LDggQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXFxuLVxcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XFxuK1xcdC8qIEFkb3B0ZWQgZmlybXdhcmUgd2FzIG5ldmVyIHJlc3RhcnRlZCBoZXJlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VtY3VfbmVlZHNfcmVzdGFydCA9IChyZXQgPT0gMSk7XFxuIFxcbiBcXHQvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovXFxuIFxcdHBoeWRldi1cXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xcbmluZGV4IDUxNDFkYjE5ZmE1ZWUuLjdmNzUzMDI3MzYwMTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xcbkBAIC04LDM3ICs4LDQyIEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJhaXJfcGh5X2xpYi5oXFxcIlxcbiBcXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4gXFx0XFx0XFx0XFx0ICAgdTMyIHBidXNfYWRkcmVzcywgdTMyICpwYnVzX2RhdGEpXFxuIHtcXG4gXFx0aW50IHBidXNfZGF0YV9sb3csIHBidXNfZGF0YV9oaWdoO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XFxuK1xcdHBidXNfZGF0YV9oaWdoID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XFxuIFxcdGlmIChwYnVzX2RhdGFfaGlnaCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwYnVzX2RhdGFfaGlnaDtcXG4gXFxuLVxcdHBidXNfZGF0YV9sb3cgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcXG4rXFx0cGJ1c19kYXRhX2xvdyA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XFxuIFxcdGlmIChwYnVzX2RhdGFfbG93IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBidXNfZGF0YV9sb3c7XFxuIFxcbkBAIC00Niw2NCArNTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSlcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YSkpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxcbiB7XFxuIFxcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcXG4gXFx0dTMyIHBidXNfZGF0YV9vbGQsIHBidXNfZGF0YV9uZXc7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxcbitcXHRcXHRcXHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXFxuLVxcdFxcdFxcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcXG4rXFx0cGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcXG4gXFx0aWYgKHBidXNfZGF0YV9oaWdoIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBidXNfZGF0YV9oaWdoO1xcbiBcXG4tXFx0cGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xcbitcXHRwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcXG4gXFx0aWYgKHBidXNfZGF0YV9sb3cgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcGJ1c19kYXRhX2xvdztcXG4gXFxuQEAgLTExMiwyMyArMTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRpZiAocGJ1c19kYXRhX25ldyA9PSBwYnVzX2RhdGFfb2xkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcXG4tXFx0XFx0XFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcXG4rXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcXG4tXFx0XFx0XFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbitcXHRcXHRcXHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcXG4tXFx0XFx0XFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxcbitcXHRcXHRcXHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC0xNDQsNyArMTUxLDggQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcXG4gXFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4gXFxuIFxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQocGh5ZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XFxuK1xcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgcGJ1c19kYXRhKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbiBcXHRcXHRcXHRcXHQgICBwYnVzX2FkZHJlc3MsIHJldCk7XFxuQEAgLTE2Myw3ICsxNzEsNyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcXG4gXFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4gXFxuIFxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgcGJ1c19kYXRhKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbkBAIC0xODMsOCArMTkxLDggQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBcXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbiBcXG4gXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgcGJ1c19hZGRyZXNzLCBtYXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRzZXQpO1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bWFzaywgc2V0KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbiBcXHRcXHRcXHRcXHQgICBwYnVzX2FkZHJlc3MsIHJldCk7XFxuQEAgLTE5NCw2ICsyMDIsMzQzIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkpO1xcbiBcXG4rc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4rXFx0XFx0XFx0ICAgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4rXFx0aW50IHJldDtcXG4rXFx0dTE2IHZhbDtcXG4rXFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcXG4rXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhhZGRyZXNzKSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXFx1MDAzYyBsZW47IG9mZnNldCArPSA0KSB7XFxuK1xcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZGF0YVtvZmZzZXQgKyAyXSk7XFxuK1xcdFxcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZGF0YVtvZmZzZXRdKTtcXG4rXFx0XFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywgdmFsKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cXG4rc3RhdGljIGludCBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0aW50IHNhdmVkX3BhZ2UsIHJldDtcXG4rXFxuK1xcdHNhdmVkX3BhZ2UgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTtcXG4rXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gc2F2ZWRfcGFnZTtcXG4rXFxuK1xcdGlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHtcXG4rXFx0XFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsIHBhZ2UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHNhdmVkX3BhZ2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbitcXHRcXHRcXHRcXHQgICBpbnQgc2F2ZWRfcGFnZSwgaW50IHBhZ2UsIGludCByZXQpXFxuK3tcXG4rXFx0aW50IHJlc3RvcmU7XFxuK1xcbitcXHRpZiAoc2F2ZWRfcGFnZSAhPSBwYWdlKSB7XFxuK1xcdFxcdHJlc3RvcmUgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzYXZlZF9wYWdlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHJlc3RvcmUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXQgPSByZXN0b3JlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBOZXN0ZWQgd2hlbiB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdGhlIGJ1cyB0aGlzIGNoaXAgaGFuZ3MgYmVsb3cuICovXFxuK3N0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcXG4re1xcbitcXHRpZiAobmVzdGVkKVxcbitcXHRcXHRtZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG1kaW9kZXZfbG9jayhtZGlvZGV2KTtcXG4rfVxcbitcXG4raW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4rXFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBib29sIG5lc3RlZClcXG4re1xcbitcXHRzaXplX3QgY2h1bmssIGRvbmUgPSAwO1xcbitcXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xcbitcXG4rXFx0aWYgKGZ3LVxcdTAwM2VzaXplICUgNCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCJmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRmdy1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHR3aGlsZSAoZG9uZSBcXHUwMDNjIGZ3LVxcdTAwM2VzaXplKSB7XFxuK1xcdFxcdGNodW5rID0gbWluX3Qoc2l6ZV90LCBmdy1cXHUwMDNlc2l6ZSAtIGRvbmUsIEFJUl9GV19DSFVOS19CWVRFUyk7XFxuK1xcbitcXHRcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRcXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbitcXHRcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0cmV0ID0gc2F2ZWRfcGFnZTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0ID0gX19haXJfd3JpdGVfYnVmKG1kaW9kZXYsIGFkZHJlc3MgKyBkb25lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBmdy1cXHUwMDNlZGF0YSArIGRvbmUsIGNodW5rKTtcXG4rXFx0XFx0XFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJldCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGRvbmUgKz0gY2h1bms7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9md193cml0ZV9idWYpO1xcbitcXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIG5lc3RlZClcXG4re1xcbitcXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xcbitcXG4rXFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXG4rXFx0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbitcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc2F2ZWRfcGFnZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBib29sIG5lc3RlZClcXG4re1xcbitcXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xcbitcXG4rXFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXG4rXFx0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbitcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc2F2ZWRfcGFnZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIHBidXNfYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBidXNfZGF0YSk7XFxuK1xcdFxcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xcbitcXHR9XFxuK1xcbitcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCBzYXZlZF9wYWdlLCByZXQ7XFxuK1xcbitcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuK1xcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXQgPSBzYXZlZF9wYWdlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIHBidXNfYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bWFzaywgc2V0KTtcXG4rXFx0XFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XFxuK1xcdH1cXG4rXFxuK1xcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBtbWRfcGh5X3JlYWQoKSBkcm9wcyB0aGUgZXJyb3JzIGZyb20gdGhlIHRocmVlIHdyaXRlcyB0aGF0IHNlbGVjdCB0aGVcXG4rICogcmVnaXN0ZXIsIHNvIGEgZmFpbGVkIHNlbGVjdGlvbiByZWFkcyBhIGRpZmZlcmVudCBvbmUgYmFjayBhcyBzdWNjZXNzLlxcbisgKi9cXG4rc3RhdGljIGludCBfX2Fpcl9tbWRfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUxNiBkZXZhZCwgdTE2IHJlZ251bSlcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsIGRldmFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLFxcbitcXHRcXHRcXHQgICAgICBkZXZhZCB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX21kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9NTURfREFUQSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyX21tZF9zdGF0dXNfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcdHJldCA9IF9fYWlyX21tZF9yZWFkKG1kaW9kZXYsIE1ESU9fTU1EX1ZFTkQxLCBFTjg4MTFIX1BIWV9GV19TVEFUVVMpO1xcbitcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCByZXQgPSBhaXJfbW1kX3N0YXR1c19yZWFkKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiByZXQgPT0gRU44ODExSF9QSFlfUkVBRFk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcpO1xcbitcXG4raW50IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0aW50IHJldCwgcmVnX3ZhbHVlO1xcbitcXG4rXFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxcbitcXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2Fkcy4gQSByZWFkXFxuK1xcdCAqIGVycm9yIGVuZHMgdGhlIHBvbGwgYXQgb25jZSwgbGlrZSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KCkuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhaXJfbW1kX3N0YXR1c19yZWFkLCByZWdfdmFsdWUsXFxuK1xcdFxcdFxcdFxcdHJlZ192YWx1ZSBcXHUwMDNjIDAgfHxcXG4rXFx0XFx0XFx0XFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxcbitcXHRcXHRcXHRcXHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSwgbWRpb2RldiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJlZ192YWx1ZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZWdfdmFsdWU7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2RiZyhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBcXFwiTUNVIG5vdCByZWFkeTogMHgleFxcXFxuXFxcIiwgcmVnX3ZhbHVlKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KTtcXG4rXFxuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcXG4rXFx0XFx0XFx0ICAgIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKG1kaW9kZXYsIEVOODgxMUhfRldfVkVSU0lPTixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGZ3X3ZlcnNpb24sIG5lc3RlZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiTUQzMiBhbHJlYWR5IHJ1bm5pbmcsIGZpcm13YXJlICUwOHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAqZndfdmVyc2lvbik7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX3JlbDE7XFxuK1xcbitcXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzFfU1RBUlQsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxcbitcXHRcXHRcXHRcXHRcXHQgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxcbitcXHRcXHRcXHRcXHRcXHQgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9ETSwgZncxLCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3MiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcXG4rXFxuK1xcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxcbitcXHRcXHRcXHRcXHRcXHQgZndfdmVyc2lvbiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcXG4rXFxuK1xcdGRldl9pbmZvKGRldiwgXFxcIk1EMzIgZmlybXdhcmUgdmVyc2lvbjogJTA4eFxcXFxuXFxcIiwgKmZ3X3ZlcnNpb24pO1xcbitcXG4rYWlyX2Z3X2Rvd25sb2FkX291dDpcXG4rXFx0cmVsZWFzZV9maXJtd2FyZShmdzIpO1xcbitcXG4rYWlyX2Z3X2Rvd25sb2FkX3JlbDE6XFxuK1xcdHJlbGVhc2VfZmlybXdhcmUoZncxKTtcXG4rXFxuK1xcdC8qIE5vIGVycm9yIHByaW50OiBjYWxsZXJzIGxvZyBvbiB0aGVpciBvd24gdGVybXMsIGFuZCBhIHBvbGxlclxcbitcXHQgKiB3b3VsZCByZXBlYXQgaXQgb24gZXZlcnkgcmV0cnkuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKTtcXG4rXFxuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcXG5pbmRleCAwMWJiMzJlN2M3Yzk1Li41NmJhOTg3YTY4Y2M5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcXG5AQCAtMTAsMTIgKzEwLDE5IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhcXHUwMDNlXFxuK1xcbiAjZGVmaW5lIEFJUl9FWFRfUEFHRV9BQ0NFU1NcXHRcXHQweDFmXFxuIFxcbiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9TVEFOREFSRFxcdFxcdDB4MDAwMFxcbiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF8xXFx0XFx0MHgwMDAxXFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzRcXHRcXHQweDAwMDRcXG4gXFxuKy8qIEJ5dGVzIHdyaXR0ZW4gYmV0d2VlbiBidXMgcmVsZWFzZXMsIHNvIHRoZSBvdGhlciBQSFlzIG9uIGl0IGdldCBhIHR1cm4uXFxuKyAqIEF0IGEgMi41IE1IeiBNREMgdGhpcyBzaXplIGhvbGRzIHRoZSBidXMgZm9yIGFib3V0IDMwIG1zLlxcbisgKi9cXG4rI2RlZmluZSBBSVJfRldfQ0hVTktfQllURVNcXHRcXHQyMzA0XFxuK1xcbiAvKiBNSUkgUmVnaXN0ZXJzIFBhZ2UgNCovXFxuICNkZWZpbmUgQUlSX0JQQlVTX01PREVcXHRcXHRcXHQweDEwXFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXFx0XFx0MHgwMDAwXFxuQEAgLTI5LDYgKzM2LDIwIEBAXFxuICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfSElHSFxcdFxcdDB4MTdcXG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9MT1dcXHRcXHQweDE4XFxuIFxcbisjZGVmaW5lIEFJUl9GV19BRERSX0RNXFx0XFx0XFx0MHgwMDAwMDAwMFxcbisjZGVmaW5lIEFJUl9GV19BRERSX0RTUFxcdFxcdFxcdDB4MDAxMDAwMDBcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcXHRcXHQweDBmMDAxOFxcbisjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfU1RBUlRcXHRcXHQweDBcXG4rI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSFxcdFxcdDB4MVxcbisjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXFx0XFx0MHg4MDAwMDBcXG4rI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkdcXHRcXHRCSVQoMTEpXFxuK1xcbisjZGVmaW5lIEVOODgxMUhfUEhZX0ZXX1NUQVRVU1xcdFxcdDB4ODAwOVxcbisjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcXHRcXHRcXHQweDAyXFxuK1xcbisjZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlxcdFxcdDB4M2IzY1xcbitcXG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBcXHRcXHRcXHRcXHR1MzIgbWFzaywgdTMyIHNldCk7XFxuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXFxuQEAgLTM4LDQgKzU5LDEwIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBpbnQgYWlyX3BoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBhaXJfcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpO1xcbiBcXG4rc3RydWN0IGZpcm13YXJlO1xcbitcXG4raW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4rXFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBib29sIG5lc3RlZCk7XFxuK2ludCBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKTtcXG4rXFxuICNlbmRpZiAvKiBfX0FJUl9QSFlfTElCX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaCBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0OTRkYzZjMTAyMmNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcbkBAIC0wLDAgKzEsMjUgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBaXJvaGEgVGVjaG5vbG9neSBDb3JwLlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQ29sbGFib3JhIEx0ZC5cXG4rICogICAgICAgICAgICAgICAgICAgIExvdWlzLUFsZXhpcyBFeXJhdWQgXFx1MDAzY2xvdWlzYWxleGlzLmV5cmF1ZEBjb2xsYWJvcmEuY29tXFx1MDAzZVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0hcXG4rI2RlZmluZSBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgbWRpb19kZXZpY2U7XFxuK1xcbisjZGVmaW5lIEVOODgxMUhfTUQzMl9ETVxcdFxcdFxcdFxcXCJhaXJvaGEvRXRoTUQzMi5kbS5iaW5cXFwiXFxuKyNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFxcdFxcdFxcXCJhaXJvaGEvRXRoTUQzMi5EU1AuYmluXFxcIlxcbitcXG4rLyogUmV0dXJucyAxIHJ1bm5pbmcsIDAgZG9ybWFudCwgbmVnYXRpdmUgb24gYSBmYWlsZWQgc3RhdHVzIHJlYWQuICovXFxuK2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKTtcXG4rLyogUmV0dXJucyAxIHdoZW4gaXQgYWRvcHRlZCBmaXJtd2FyZSB0aGF0IHdhcyBhbHJlYWR5IHJ1bm5pbmcuICovXFxuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcXG4rXFx0XFx0XFx0ICAgIGJvb2wgbmVzdGVkKTtcXG4rXFxuKyNlbmRpZiAvKiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmU3NGE4ZjVjZjVjNjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjI4NCw2ICsyMjg0LDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfdW5sb2NrX21kaW9fYnVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbit9XFxuK1xcbisvKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X2xvY2tfbmVzdGVkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfdW5sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rfVxcbitcXG4gdm9pZCBwaHlfYXR0YWNoZWRfcHJpbnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIFxcdF9fcHJpbnRmKDIsIDMpO1xcbiBjaGFyICpwaHlfYXR0YWNoZWRfaW5mb19pcnEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MDkuNzkyOTYxNzE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjA0MjU0MDgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgRGV2aWNlIFRyZWUgYmluZGluZ3MsIGFuIE1ESU8gTUNVIGRyaXZlciwgYW5kIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWS9NQ1UgaGFyZHdhcmUuIFRoZXNlIGRyaXZlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIEFpcm9oYSBoYXJkd2FyZSAoYW5kIHJlcXVpcmUgRGV2aWNlIFRyZWUgTURJTyBlbnVtZXJhdGlvbikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMjc2NWI3NzlhNDFiMmQ4M2Y0OTBiZGExZThjOTM2MTJmNTE4MWFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMTo1MjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2JlMGFiODYyMjY2MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxuQEAgLTAsMCArMSwxMTcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogQWlyb2hhIEVOODgxMUggUEhZIE1DVVxuK1xuK21haW50YWluZXJzOlxuKyAgLSBBbGVrc2VpIFN2aXJpZGtpbiBcdTAwM2NmQGxleC5sYVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBUaGUgQWlyb2hhIEVOODgxMUggMi41RyBQSFkgaXMgYnVpbHQgYXJvdW5kIGFuIE1EMzIgY29yZSB0aGF0IGV4ZWN1dGVzXG4rICBmaXJtd2FyZSBmcm9tIHZvbGF0aWxlIFJBTS4gVGhlIGNoaXAgYW5zd2VycyBhbiBNRElPIGFkZHJlc3MgZnJvbVxuKyAgcG93ZXItb24sIGJ1dCB0aGUgUEhZIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IHVudGlsIGZpcm13YXJlIGhhcyBiZWVuXG4rICBsb2FkZWQgb3ZlciBNRElPLCBhbmQgaXQgZGlzYXBwZWFycyBhZ2FpbiBpZiB0aGF0IFJBTSBpcyBjbGVhcmVkLlxuK1xuKyAgVGhpcyBub2RlIGRlc2NyaWJlcyB0aGUgTUQzMiBjb3JlLiBUaGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gYSBjaGlsZFxuKyAgTURJTyBidXMgYmVsb3cgaXQsIGF0IHRoZSBzYW1lIGFkZHJlc3MgdGhlIGNvcmUgb2NjdXBpZXMgb24gdGhlIHBhcmVudFxuKyAgYnVzLCBhbmQgb25seSB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLlxuK1xuKyAgVGhlIHJlc2V0IGxpbmUgaXMgd2lyZWQgdG8gdGhlIGNvcmUsIGFuZCBhc3NlcnRpbmcgaXQgY2xlYXJzIHRoZVxuKyAgZmlybXdhcmUgUkFNLiBJdCB0aGVyZWZvcmUgYmVsb25ncyB0byB0aGlzIG5vZGU6IGEgcmVzZXQgZGVzY3JpYmVkIG9uXG4rICB0aGUgUEhZIG5vZGUgd291bGQgYmUgcHVsc2VkIGJ5IHRoYXQgbm9kZSdzIG93biBsaWZlY3ljbGUsIHdoYXRldmVyXG4rICB0aGUgY29yZSBpcyBkb2luZy5cbitcbisgIEEgYm9hcmQgdGhhdCBoYXMgZmlybXdhcmUgaW4gaGFuZCB3aGlsZSBpdHMgTURJTyBidXMgaXMgZW51bWVyYXRlZCBjYW5cbisgIGRlc2NyaWJlIHRoZSBQSFkgb24gaXRzIG93biwgYXMgYWlyb2hhLGVuODgxMWgueWFtbCBkb2VzLCBhbmQgdGhhdCBmb3JtXG4rICBzdGF5cyB2YWxpZC4gVGhpcyBiaW5kaW5nIGlzIGZvciB0aGUgYm9hcmRzIHdoZXJlIGZpcm13YXJlIGFycml2ZXNcbisgIGxhdGVyLCBzbyB0aGF0IHRoZXJlIGlzIG5vIFBIWSB0byBkZXNjcmliZSB1bnRpbCB0aGUgY29yZSBoYXMgaXQuXG4rXG4rcHJvcGVydGllczpcbisgICRub2RlbmFtZTpcbisgICAgcGF0dGVybjogXCJebWN1QFswLTlhLWZdKyRcIlxuK1xuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IGFpcm9oYSxlbjg4MTFoLW1jdVxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgcmVzZXQtZ3Bpb3M6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFRoZSBHUElPIHBoYW5kbGUgYW5kIHNwZWNpZmllciBmb3IgdGhlIHJlc2V0IHNpZ25hbCB3aXJlZCB0byB0aGVcbisgICAgICBNRDMyIGNvcmUuXG4rXG4rICByZXNldC1hc3NlcnQtdXM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXG4rICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLlxuK1xuKyAgcmVzZXQtZGVhc3NlcnQtdXM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgZGVhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXNcbisgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuXG4rXG4rICBtZGlvOlxuKyAgICAkcmVmOiBtZGlvLnlhbWwjXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFRoZSBidXMgdGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcsIGF0XG4rICAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGlzIG5vZGUgb2NjdXBpZXMgb24gdGhlIHBhcmVudCBidXMuIE9ubHkgdGhhdFxuKyAgICAgIG9uZSBhZGRyZXNzIGlzIHBhc3NlZCB0aHJvdWdoLlxuK1xuKyAgICBwYXR0ZXJuUHJvcGVydGllczpcbisgICAgICAnXmV0aGVybmV0LXBoeUBbMC05YS1mXSskJzpcbisgICAgICAgIHR5cGU6IG9iamVjdFxuKyAgICAgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcbisgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzOiBmYWxzZVxuKyAgICAgICAgICByZXNldC1kZWFzc2VydC11czogZmFsc2VcbitcbisgICAgICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICBUaGUgcmVzZXQgbGluZSBiZWxvbmdzIHRvIHRoZSBNQ1Ugbm9kZSBhYm92ZS4gQSByZXNldCBkZXNjcmliZWRcbisgICAgICAgICAgaGVyZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhpcyBub2RlJ3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXG4rICAgICAgICAgIHRoZSBmaXJtd2FyZSB0aGF0IGNyZWF0ZWQgdGhpcyBQSFkuXG4rXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gbWRpb1xuK1xuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4rXG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgbWN1QGQge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImFpcm9oYSxlbjg4MTFoLW1jdVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4ZFx1MDAzZTtcbisgICAgICAgICAgICByZXNldC1ncGlvcyA9IFx1MDAzY1x1MDAyNnBpbyAxNCBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMTAwMDBcdTAwM2U7XG4rICAgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXMgPSBcdTAwM2MyMDAwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBtZGlvIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIGV0aGVybmV0LXBoeUBkIHtcbisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVwiO1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMHhkXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFx1MDAzY1x1MDAyNnBpbyAxNSBJUlFfVFlQRV9MRVZFTF9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjIzZmI2ZjJmNGVmNC4uM2JkODZkZjJiZTU3MSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTc1MCw2ICs3NTAsMTQgQEAgUzpcdFN1cHBvcnRlZFxuIEY6XHRmcy9haW8uY1xuIEY6XHRpbmNsdWRlL2xpbnV4LyphaW8qLmhcbiBcbitBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcbitNOlx0QWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK1M6XHRNYWludGFpbmVkXG4rRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcbitGOlx0ZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcbitGOlx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuK1xuIEFJUk9IQSBFVEhFUk5FVCBEUklWRVJcbiBNOlx0TG9yZW56byBCaWFuY29uaSBcdTAwM2Nsb3JlbnpvQGtlcm5lbC5vcmdcdTAwM2VcbiBMOlx0bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbmluZGV4IGQ0NDI3OGYyNmZhYmUuLjMzZWZjNmJjODc1ZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xuQEAgLTI5LDYgKzI5LDE5IEBAIGNvbmZpZyBNRElPX0FJUk9IQVxuIFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE1ESU8gYnVzc2VzIGZvdW5kIGluIHRoZVxuIFx0ICBBaXJvaGEgQU43NTgzIFNvQydzLlxuIFxuK2NvbmZpZyBNRElPX0FJUk9IQV9FTjg4MTFIXG4rXHR0cmlzdGF0ZSBcIkFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBPRl9NRElPXG4rXHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuK1x0c2VsZWN0IEFJUl9ORVRfUEhZTElCXG4rXHRpbXBseSBBSVJfRU44ODExSF9QSFlcbitcdGhlbHBcbitcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCwgd2hpY2ggaXMgYW5cbitcdCAgTUQzMiBtaWNyb2NvbnRyb2xsZXIgdW50aWwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBpbnRvIGl0IGFuZCBvbmx5XG4rXHQgIGJlY29tZXMgYW4gRXRoZXJuZXQgUEhZIGFmdGVyd2FyZHMuIFRoZSBkcml2ZXIgZG93bmxvYWRzIHRoYXRcbitcdCAgZmlybXdhcmUgb25jZSBpdCBiZWNvbWVzIHJlYWRhYmxlLCBvciBhZG9wdHMgZmlybXdhcmUgYSBib290bG9hZGVyXG4rXHQgIGxlZnQgcnVubmluZy5cbitcbiBjb25maWcgTURJT19TVU40SVxuIFx0dHJpc3RhdGUgXCJBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwiXG4gXHRkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbmluZGV4IDA0ODU4Njc0NjAyNjIuLjA2ZDA5NjY3NWRhY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXG5AQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0Kz0gZndub2RlX21kaW8ub1xuIG9iai0kKENPTkZJR19PRl9NRElPKVx0XHQrPSBvZl9tZGlvLm9cbiBcbiBvYmotJChDT05GSUdfTURJT19BSVJPSEEpXHRcdCs9IG1kaW8tYWlyb2hhLm9cbitvYmotJChDT05GSUdfTURJT19BSVJPSEFfRU44ODExSClcdCs9IG1kaW8tYWlyb2hhLWVuODgxMWgub1xuIG9iai0kKENPTkZJR19NRElPX0FTUEVFRClcdFx0Kz0gbWRpby1hc3BlZWQub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQylcdFx0Kz0gbWRpby1iY20taXByb2Mub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9VTklNQUMpXHRcdCs9IG1kaW8tYmNtLXVuaW1hYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyMjQ1NTg5MTQ3Mjdcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXG5AQCAtMCwwICsxLDM4MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKy8qXG4rICogQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyXG4rICpcbisgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cbisgKiBpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdGhlcm5ldCBQSFkuXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcG0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXHUwMDNlXG4rXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TXHQxMDAwXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXHQzMDAwMFxuKyNkZWZpbmUgRU44ODExSF9GV19XQVJOX01TXHQ2MDAwMFxuK1xuK3N0cnVjdCBlbjg4MTFoX21jdSB7XG4rXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBmd19wb2xsO1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cztcbitcdHVuc2lnbmVkIGludCBwb2xsX21zO1xuK1x0dW5zaWduZWQgaW50IHdhaXRlZF9tcztcbitcdHUzMiBmd192ZXJzaW9uO1xuK1x0Ym9vbCB3YXJuZWQ7XG4rXHRib29sIGZ3X3J1bm5pbmc7XG4rfTtcbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4re1xuK1x0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtXHUwMDNlcHJpdjtcbitcbitcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0cmV0dXJuIG1kaW9idXNfcmVhZF9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCByZWdudW0pO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBtZGlvYnVzX3dyaXRlX25lc3RlZChtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMsIGFkZHIsIHJlZ251bSwgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldmFkLFxuK1x0XHRcdFx0aW50IHJlZ251bSlcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKGFkZHIgIT0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcilcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXR1cm4gbWRpb2J1c19jNDVfcmVhZF9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcbit9XG4rXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCxcbitcdFx0XHRcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLFxuK1x0XHRcdFx0XHR2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X2J1c19yZWdpc3RlcihzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSlcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCJtZGlvXCIpO1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XG4rXHQgKiBkZXRhY2guXG4rXHQgKi9cbitcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcbitcdGlmICghYnVzKSB7XG4rXHRcdG9mX25vZGVfcHV0KG5wKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRidXMtXHUwMDNlbmFtZSA9IFwiYWlyb2hhLWVuODgxMWhcIjtcbitcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcIiVzXCIsIGRldl9uYW1lKGRldikpO1xuK1x0YnVzLVx1MDAzZXByaXYgPSBtY3U7XG4rXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuK1x0aWYgKHBhcmVudC1cdTAwM2VyZWFkKSB7XG4rXHRcdGJ1cy1cdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcbitcdFx0YnVzLVx1MDAzZXdyaXRlID0gZW44ODExaF9tY3Vfd3JpdGU7XG4rXHR9XG4rXHRpZiAocGFyZW50LVx1MDAzZXJlYWRfYzQ1KSB7XG4rXHRcdGJ1cy1cdTAwM2VyZWFkX2M0NSA9IGVuODgxMWhfbWN1X3JlYWRfYzQ1O1xuK1x0XHRidXMtXHUwMDNld3JpdGVfYzQ1ID0gZW44ODExaF9tY3Vfd3JpdGVfYzQ1O1xuK1x0fVxuK1xuK1x0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbitcdG9mX25vZGVfcHV0KG5wKTtcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhbWRpb2J1c19nZXRfcGh5KGJ1cywgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcikpIHtcbitcdFx0LyogQW4gSUQgcmVhZCB0aGF0IGZhaWxlZCBsZWF2ZXMgdGhlIGJ1cyByZWdpc3RlcmVkIGFuZCB0aGVcbitcdFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxuK1x0XHQgKi9cbitcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHR9XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1kaW9idXNfZnJlZShidXMpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bWN1LVx1MDAzZWJ1cyA9IGJ1cztcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBTZXJpYWxpc2Ugd2l0aCB0aGUgUEhZIGJlbG93LCB3aGljaCByZWFjaGVzIHRoZSBzYW1lIHJlZ2lzdGVycyB1bmRlclxuKyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZW44ODExaF9tY3VfY2hpcF9sb2NrKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtY3UtXHUwMDNlYnVzO1xuK1xuK1x0aWYgKGJ1cylcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdHJldHVybiBidXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXG4re1xuK1x0aWYgKGJ1cylcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IG1paV9idXMgKmNoaXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFtY3UtXHUwMDNlZndfcnVubmluZykge1xuK1x0XHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XG4rXHRcdHJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS1cdTAwM2VtZGlvZGV2LCBcdTAwMjZtY3UtXHUwMDNlZndfdmVyc2lvbixcbitcdFx0XHRcdFx0ICAgICAgISFjaGlwKTtcbitcdFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0ZGV2X2RiZyhkZXYsIFwiZmlybXdhcmUgJTA4eCBydW5uaW5nIGFmdGVyICV1bXNcXG5cIixcbitcdFx0XHRtY3UtXHUwMDNlZndfdmVyc2lvbiwgbWN1LVx1MDAzZXdhaXRlZF9tcyk7XG4rXHRcdHJldCA9IGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRE0pID86XG4rXHRcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRkZXZfZGJnKGRldiwgXCJub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxuXCIsXG4rXHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuK1x0XHRtY3UtXHUwMDNlZndfcnVubmluZyA9IHRydWU7XG4rXHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdFx0bWN1LVx1MDAzZXdhaXRlZF9tcyA9IDA7XG4rXHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcbitcdCAqIGZ3bm9kZV9tZGlvIGRlZmVycyB3aGlsZSB0aGUgUEhZIG5vZGUncyBpbnRlcnJ1cHQgY29udHJvbGxlciBpc1xuK1x0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXG4rXHQgKi9cbitcdHJldCA9IG1jdS1cdTAwM2VidXMgPyAwIDogZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKG1jdSk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0dXJuO1xuK1xuK3JldHJ5OlxuK1x0aWYgKCFtY3UtXHUwMDNld2FybmVkIFx1MDAyNlx1MDAyNiBtY3UtXHUwMDNld2FpdGVkX21zIFx1MDAzZT0gRU44ODExSF9GV19XQVJOX01TKSB7XG4rXHRcdGlmICghbWN1LVx1MDAzZWZ3X3J1bm5pbmcpXG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm5vIGZpcm13YXJlIGFmdGVyICV1bXMgb2Ygd2FpdGluZyBmb3IgJXMgYW5kICVzOiAlcGVcXG5cIixcbitcdFx0XHRcdCBtY3UtXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXG4rXHRcdFx0XHQgRU44ODExSF9NRDMyX0RTUCwgRVJSX1BUUihyZXQpKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGRldl93YXJuKGRldiwgXCJubyBQSFkgYXQgYWRkcmVzcyAlZCwgJXVtcyBhZnRlciB0aGUgZmlybXdhcmUgc3RhcnRlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciwgbWN1LVx1MDAzZXdhaXRlZF9tcyxcbitcdFx0XHRcdCBFUlJfUFRSKHJldCkpO1xuK1x0XHRtY3UtXHUwMDNld2FybmVkID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qIFBhc3QgaXRzIGJ1ZGdldCwgb25seSBhIGRlZmVycmFsIHdpbGwgY2hhbmdlIG9uIGl0cyBvd246IGV2ZXJ5XG4rXHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xuK1x0ICogY29yZSBhbmQgaXRzIHVldmVudHMgZm9yIHRoZSB1cHRpbWUuIEZpcm13YXJlIGZpbGVzIGFyZSB0aGVcbitcdCAqIGV4Y2VwdGlvbiwgc2luY2UgdGhleSBjYW4gYmUgaW5zdGFsbGVkIGF0IGFueSB0aW1lLlxuK1x0ICovXG4rXHRpZiAobWN1LVx1MDAzZWZ3X3J1bm5pbmcgXHUwMDI2XHUwMDI2IHJldCAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG1jdS1cdTAwM2V3YWl0ZWRfbXMgXHUwMDNlPSBFTjg4MTFIX0ZXX1dBUk5fTVMpXG4rXHRcdHJldHVybjtcbitcbitcdG1jdS1cdTAwM2Vwb2xsX21zID0gbWluKG1jdS1cdTAwM2Vwb2xsX21zICogMiwgRU44ODExSF9GV19QT0xMX01BWF9NUyk7XG4rXHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cbitcdG1jdS1cdTAwM2V3YWl0ZWRfbXMgKz0gbWN1LVx1MDAzZXBvbGxfbXM7XG4rXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsXG4rXHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyhtY3UtXHUwMDNlcG9sbF9tcykpO1xuK31cbitcbisvKiBUaGUgZmlybXdhcmUgbGl2ZXMgaW4gdm9sYXRpbGUgUkFNOiBubyByZXNldCB3aGlsZSB0aGUgTUQzMiByZXBvcnRzIHJlYWR5LiAqL1xuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQoc3RydWN0IGVuODgxMWhfbWN1ICptY3UsIGJvb2wgbmVzdGVkKVxuK3tcbitcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9IG1jdS1cdTAwM2VtZGlvZGV2O1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4rXHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdGRldl9kYmcoZGV2LCBcIk1EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIW1jdS1cdTAwM2VyZXNldF9ncGlvKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBBIGZhaWxlZCByZWFkIGlzIG5vdCBhIGRvcm1hbnQgY2hpcCwgc28gZG8gbm90IHRvdWNoIGEgbGluZSB0aGF0XG4rXHQgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLlxuK1x0ICovXG4rXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVx1MDAzZXJlc2V0X2dwaW8pIFx1MDAzYz0gMCkge1xuK1x0XHRkZXZfZGJnKGRldiwgXCJNRDMyIHN0YXRlIHVua25vd24gKCVkKSwgbGVhdmluZyByZXNldCBhbG9uZVxcblwiLFxuK1x0XHRcdHJldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFwicmVzZXQtYXNzZXJ0LXVzXCIsIFx1MDAyNmFzc2VydF91cyk7XG4rXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcInJlc2V0LWRlYXNzZXJ0LXVzXCIsIFx1MDAyNmRlYXNzZXJ0X3VzKTtcbitcbitcdHJldCA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQobWN1LVx1MDAzZXJlc2V0X2dwaW8sIDEpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfd2FybihkZXYsIFwicmVzZXQgbm90IGFzc2VydGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGFzc2VydF91cylcbitcdFx0ZnNsZWVwKGFzc2VydF91cyk7XG4rXG4rXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVx1MDAzZXJlc2V0X2dwaW8sIDApO1xuK1x0aWYgKGRlYXNzZXJ0X3VzKVxuK1x0XHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1O1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcbitcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW1jdSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtY3UtXHUwMDNlbWRpb2RldiA9IG1kaW9kZXY7XG4rXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIG1jdSk7XG4rXG4rXHQvKiBSZWdpc3RyYXRpb24gbmVlZHMgdGhpcyBvbmx5IG9uY2UgdGhlIGZpcm13YXJlIHJ1bnMsIGJ1dCBhIERUXG4rXHQgKiBob2xlIHNob3VsZCBmYWlsIHRoZSBiaW5kIG5vdywgbm90IGFzIGEgd29yay1pdGVtIGVycm9yIGxhdGVyLlxuK1x0ICovXG4rXHRucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2VvZl9ub2RlLCBcIm1kaW9cIik7XG4rXHRpZiAoIW5wKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsXG4rXHRcdFx0XHQgICAgIFwibm8gbWRpbyBub2RlIGRlc2NyaWJpbmcgdGhlIFBIWVxcblwiKTtcbitcdG9mX25vZGVfcHV0KG5wKTtcbitcbitcdC8qIFRoZSBjb3JlIGNsYWltcyByZXNldC1ncGlvcyBvbmx5IGZvciBkZXZpY2VzIGZsYWdnZWQgYXMgUEhZcy4gKi9cbitcdG1jdS1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcInJlc2V0XCIsIEdQSU9EX0FTSVMpO1xuK1x0aWYgKElTX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbyksXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCByZXNldCBHUElPXFxuXCIpO1xuK1xuK1x0aWYgKG1jdS1cdTAwM2VyZXNldF9ncGlvKVxuK1x0XHRncGlvZF9zZXRfY29uc3VtZXJfbmFtZShtY3UtXHUwMDNlcmVzZXRfZ3BpbywgXCJFTjg4MTFIIHJlc2V0XCIpO1xuK1xuK1x0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsIGZhbHNlKTtcbitcbitcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCBlbjg4MTFoX21jdV9md19wb2xsKTtcbitcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxuK1x0ICogYSBzdXNwZW5kaW5nIGJ1cy5cbitcdCAqL1xuK1x0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbitcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZtY3UtXHUwMDNlZndfcG9sbCk7XG4rXHRpZiAobWN1LVx1MDAzZWJ1cykge1xuK1x0XHRtZGlvYnVzX3VucmVnaXN0ZXIobWN1LVx1MDAzZWJ1cyk7XG4rXHRcdG1kaW9idXNfZnJlZShtY3UtXHUwMDNlYnVzKTtcbitcdFx0bWN1LVx1MDAzZWJ1cyA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0c3RydWN0IG1paV9idXMgKmNoaXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogTm90aGluZyB0byByZWRvOiB0aGUgcG9sbCBpcyBhcm1lZCBhbmQgdGhhd3Mgd2l0aCBldmVyeXRoaW5nIGVsc2UuICovXG4rXHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0J3MgUEhZIHJlc3VtZXMgcmlnaHQgYWZ0ZXIgdGhpc1xuK1x0ICogb25lIGFuZCBjYWxscyBwaHlfaW5pdF9odygpLCB3aGljaCBuZWVkcyB0aGUgZmlybXdhcmUgYnkgdGhlbi5cbitcdCAqL1xuK1x0Y2hpcCA9IGVuODgxMWhfbWN1X2NoaXBfbG9jayhtY3UpO1xuK1x0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsICEhY2hpcCk7XG4rXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XG4rXHRlbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0LyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHNcbitcdFx0ICogb3duIHJlc3VtZSBoYXMgYWxyZWFkeSBmYWlsZWQgYnkgdGhlbiBhbmQgbm90aGluZyBjYWxsc1xuK1x0XHQgKiBwaHlfaW5pdF9odygpIHR3aWNlLlxuK1x0XHQgKi9cbitcdFx0ZGV2X2VycihkZXYsIFwiZmlybXdhcmUgbm90IHJlc3RvcmVkLCByZWxvYWRpbmc6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdG1jdS1cdTAwM2Vmd19ydW5uaW5nID0gZmFsc2U7XG4rXHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdFx0bWN1LVx1MDAzZXdhaXRlZF9tcyA9IDA7XG4rXHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbitcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGVuODgxMWhfbWN1X3BtX29wcywgTlVMTCwgZW44ODExaF9tY3VfcmVzdW1lKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbjg4MTFoX21jdV9vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwiYWlyb2hhLGVuODgxMWgtbWN1XCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZW44ODExaF9tY3Vfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZW44ODExaF9tY3VfZHJpdmVyID0ge1xuK1x0LnByb2JlID0gZW44ODExaF9tY3VfcHJvYmUsXG4rXHQucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLFxuK1x0Lm1kaW9kcnYuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwiYWlyb2hhLWVuODgxMWgtbWN1XCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IGVuODgxMWhfbWN1X29mX21hdGNoLFxuK1x0XHQucG0gPSBwbV9zbGVlcF9wdHIoXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcbitcdFx0LyogVGVhcmluZyB0aGUgY2hpbGQgYnVzIGRvd24gdW5kZXIgYW4gYXR0YWNoZWQgUEhZIGlzIG5vdFxuK1x0XHQgKiBzb21ldGhpbmcgdGhpcyBkcml2ZXIgY2FuIG1ha2Ugc2FmZSBvbiBpdHMgb3duLlxuK1x0XHQgKi9cbitcdFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxuK1x0fSxcbit9O1xuK1xuK21kaW9fbW9kdWxlX2RyaXZlcihlbjg4MTFoX21jdV9kcml2ZXIpO1xuK1xuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRFNQKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBkcml2ZXJcIik7XG4rTU9EVUxFX0FVVEhPUihcIkFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IGVjN2M0NGNhNjhlN2QuLjg2MWI4ZmU0OWUyNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0yMCwyMSArMjAsMTUgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYWlyX3BoeV9saWIuaFwiXG4gXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFx0XHQweDAzYTJhNDExXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcdFx0MHhjMGZmMDRhMFxuIFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFwiYWlyb2hhL0V0aE1EMzIuZG0uYmluXCJcbi0jZGVmaW5lIEVOODgxMUhfTUQzMl9EU1BcdFwiYWlyb2hhL0V0aE1EMzIuRFNQLmJpblwiXG4gI2RlZmluZSBBTjg4MTFIQl9NRDMyX0RNXHRcImFpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5ETS5iaW5cIlxuICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1BcdFwiYWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRTUC5iaW5cIlxuIFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRE1cdDB4MDAwMDAwMDBcbi0jZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0MHgwMDEwMDAwMFxuLVxuIC8qIE1JSSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIEFJUl9BVVhfQ1RSTF9TVEFUVVNcdFx0MHgxZFxuICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0tcdEdFTk1BU0soNCwgMilcbkBAIC00NCw4ICszOCw2IEBAXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFx0MHhjXG4gXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcdFx0MHg4MDA5XG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXHRcdFx0MHgwMlxuIFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcdFx0MHg4MDBiXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVx0XHQweDgwMGNcbkBAIC0xMDgsOCArMTAwLDYgQEBcbiAjZGVmaW5lIEVOODgxMUhfMlA1R19MUEFcdFx0MHgzYjMwXG4gI2RlZmluZSAgIEVOODgxMUhfMlA1R19MUEFfMlA1R1x0XHRcdEJJVCgwKVxuIFxuLSNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OXHRcdDB4M2IzY1xuLVxuICNkZWZpbmUgRU44ODExSF9QT0xBUklUWVx0XHQweGNhMGY4XG4gI2RlZmluZSAgIEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMXHRcdEJJVCgwKVxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1JYX1JFVkVSU0VcdFx0QklUKDEpXG5AQCAtMTIyLDEyICsxMTIsNiBAQFxuICNkZWZpbmUgRU44ODExSF9DTEtfQ0dNXHRcdFx0MHhjZjk1OFxuICNkZWZpbmUgICBFTjg4MTFIX0NMS19DR01fQ0tPXHRcdFx0QklUKDI2KVxuIFxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcdFx0MHgwZjAwMThcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfU1RBUlRcdFx0MHgwXG4tI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSFx0XHQweDFcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXHRcdDB4ODAwMDAwXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbi1cbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9TRVQxXHRcdDB4ZjAyMGNcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04yXHRcdDB4ZjAyMThcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04zXHRcdDB4ZjAyMWNcbkBAIC0yNzAsODYgKzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IHJldDtcbi1cdHUxNiB2YWw7XG4tXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCArPSA0KSB7XG4tXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldCArIDJdKTtcbi1cdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXG4tXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldF0pO1xuLVx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcyxcbi1cdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHRpbnQgc2F2ZWRfcGFnZTtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0aWYgKGZ3LVx1MDAzZXNpemUgJSA0KSB7XG4tXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImZpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cIixcbi1cdFx0XHQgICBmdy1cdTAwM2VzaXplKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuLVxuLVx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgIGFkZHJlc3MsIHJldCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQsIHJlZ192YWx1ZTtcbitcdGludCByZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZmFsc2UpO1xuIFxuLVx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbi1cdFx0XHRcdFx0IEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG4tXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4tXHRcdFx0XHRcdEVOODgxMUhfUEhZX0ZXX1NUQVRVUywgcmVnX3ZhbHVlLFxuLVx0XHRcdFx0XHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXG4tXHRcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiTUNVIG5vdCByZWFkeTogMHgleFxcblwiLCByZWdfdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIk1DVSBub3QgcmVhZHk6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGFuODgxMWhiX2NoZWNrX2NyYyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgc2V0MSxcbkBAIC00MTEsNyArMzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcbitcdHJldCA9IGFpcl9md193cml0ZV9idWYoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGFkZHJlc3MsIGZ3LCBmYWxzZSk7XG4gXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTUwNyw1NCArNDE5LDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFxuIHN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuLVx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4rXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbi1cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuLVx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuLVxuLVx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuLVxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4tXG4tZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tXG4rXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgXHUwMDI2cHJpdi1cdTAwM2VmaXJtd2FyZV92ZXJzaW9uLFxuK1x0XHRcdFx0ICAgICAgZmFsc2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiTG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4gXG5AQCAtMTE1Niw4ICsxMDI1LDggQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXG4tXHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XG4rXHQvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi9cbitcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSAocmV0ID09IDEpO1xuIFxuIFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xuIFx0cGh5ZGV2LVx1MDAzZWM0NV9pZHMubW1kc19wcmVzZW50IHw9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuaW5kZXggNTE0MWRiMTlmYTVlZS4uN2Y3NTMwMjczNjAxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuQEAgLTgsMzcgKzgsNDIgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImFpcl9waHlfbGliLmhcIlxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcbitcdFx0XHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4rXHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xuIFx0aWYgKHBidXNfZGF0YV9oaWdoIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XG4gXG4tXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4rXHRwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcbiBcdGlmIChwYnVzX2RhdGFfbG93IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2xvdztcbiBcbkBAIC00Niw2NCArNTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuK1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4rXHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YSkpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdHUzMiBwYnVzX2RhdGFfb2xkLCBwYnVzX2RhdGFfbmV3O1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuK1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4rXHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbitcdHBidXNfZGF0YV9oaWdoID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4gXHRpZiAocGJ1c19kYXRhX2hpZ2ggXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfaGlnaDtcbiBcbi1cdHBidXNfZGF0YV9sb3cgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcbitcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuIFx0aWYgKHBidXNfZGF0YV9sb3cgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfbG93O1xuIFxuQEAgLTExMiwyMyArMTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbitcdFx0XHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMTQ0LDcgKzE1MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxuK1x0XHRcdFx0XHQgICAgICBwYnVzX2RhdGEpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIiVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRcdFx0ICAgcGJ1c19hZGRyZXNzLCByZXQpO1xuQEAgLTE2Myw3ICsxNzEsNyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgcGJ1c19hZGRyZXNzLFxuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXG5cIiwgX19mdW5jX18sXG5AQCAtMTgzLDggKzE5MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzayxcbi1cdFx0XHRcdFx0XHRzZXQpO1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdFx0bWFzaywgc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcbkBAIC0xOTQsNiArMjAyLDM0MyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeSk7XG4gXG4rc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbitcdFx0XHQgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbit7XG4rXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuK1x0aW50IHJldDtcbitcdHUxNiB2YWw7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4rXHRcdFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IFx1MDAzYyBsZW47IG9mZnNldCArPSA0KSB7XG4rXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZkYXRhW29mZnNldCArIDJdKTtcbitcdFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmRhdGFbb2Zmc2V0XSk7XG4rXHRcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cbitzdGF0aWMgaW50IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuK1xuK1x0c2F2ZWRfcGFnZSA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MpO1xuK1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBzYXZlZF9wYWdlO1xuK1xuK1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuK1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywgcGFnZSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiBzYXZlZF9wYWdlO1xuK31cbitcbitzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdCAgIGludCBzYXZlZF9wYWdlLCBpbnQgcGFnZSwgaW50IHJldClcbit7XG4rXHRpbnQgcmVzdG9yZTtcbitcbitcdGlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHtcbitcdFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxuK1x0XHRcdFx0XHQgIHNhdmVkX3BhZ2UpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgcmVzdG9yZSBcdTAwM2MgMClcbitcdFx0XHRyZXQgPSByZXN0b3JlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuK3N0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbit7XG4rXHRpZiAobmVzdGVkKVxuK1x0XHRtZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpO1xuK1x0ZWxzZVxuK1x0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG4rfVxuK1xuK2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4rXHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpXG4re1xuK1x0c2l6ZV90IGNodW5rLCBkb25lID0gMDtcbitcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4rXG4rXHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgXCJmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxuXCIsXG4rXHRcdFx0ZnctXHUwMDNlc2l6ZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGZ3LVx1MDAzZXNpemUpIHtcbitcdFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVx1MDAzZXNpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpO1xuK1xuK1x0XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsXG4rXHRcdFx0XHRcdFx0ICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbitcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbitcdFx0XHRyZXQgPSBzYXZlZF9wYWdlO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICsgZG9uZSxcbitcdFx0XHRcdFx0ICAgICAgZnctXHUwMDNlZGF0YSArIGRvbmUsIGNodW5rKTtcbitcdFx0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuK1x0XHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LFxuK1x0XHRcdFx0XHRcdCAgICAgIHJldCk7XG4rXHRcdH1cbitcbitcdFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0ZG9uZSArPSBjaHVuaztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZndfd3JpdGVfYnVmKTtcbitcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdCAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhLFxuK1x0XHRcdFx0ICAgICAgYm9vbCBuZXN0ZWQpXG4re1xuK1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbitcbitcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbitcbitcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbitcdGlmIChzYXZlZF9wYWdlIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XG4rXHRcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXG4rXHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xuK1x0fVxuK1xuK1x0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4rXHRcdFx0XHQgICAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSxcbitcdFx0XHRcdCAgICAgICBib29sIG5lc3RlZClcbit7XG4rXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuK1xuK1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuK1xuK1x0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuK1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc2F2ZWRfcGFnZTtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdCAgICAgICBwYnVzX2RhdGEpO1xuK1x0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuK1x0XHRcdFx0XHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcbitcdH1cbitcbitcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdFx0dTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQsXG4rXHRcdFx0XHRcdGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4rXG4rXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4rXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2MgMCkge1xuK1x0XHRyZXQgPSBzYXZlZF9wYWdlO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdFx0bWFzaywgc2V0KTtcbitcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbitcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XG4rXHR9XG4rXG4rXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qIG1tZF9waHlfcmVhZCgpIGRyb3BzIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGhyZWUgd3JpdGVzIHRoYXQgc2VsZWN0IHRoZVxuKyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IF9fYWlyX21tZF9yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTE2IGRldmFkLCB1MTYgcmVnbnVtKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBhZGRyID0gbWRpb2Rldi1cdTAwM2VhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfQ1RSTCwgZGV2YWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsXG4rXHRcdFx0ICAgICAgZGV2YWQgfCBNSUlfTU1EX0NUUkxfTk9JTkNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEpO1xuK31cbitcbitzdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuK1x0cmV0ID0gX19haXJfbW1kX3JlYWQobWRpb2RldiwgTURJT19NTURfVkVORDEsIEVOODgxMUhfUEhZX0ZXX1NUQVRVUyk7XG4rXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCByZXQgPSBhaXJfbW1kX3N0YXR1c19yZWFkKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcpO1xuK1xuK2ludCBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCByZXQsIHJlZ192YWx1ZTtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbitcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzLiBBIHJlYWRcbitcdCAqIGVycm9yIGVuZHMgdGhlIHBvbGwgYXQgb25jZSwgbGlrZSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KCkuXG4rXHQgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcl9tbWRfc3RhdHVzX3JlYWQsIHJlZ192YWx1ZSxcbitcdFx0XHRcdHJlZ192YWx1ZSBcdTAwM2MgMCB8fFxuK1x0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuK1x0XHRcdFx0MjAwMDAsIDc1MDAwMDAsIHRydWUsIG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmVnX3ZhbHVlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmVnX3ZhbHVlO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZGJnKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBcIk1DVSBub3QgcmVhZHk6IDB4JXhcXG5cIiwgcmVnX3ZhbHVlKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkpO1xuK1xuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbitcdFx0XHQgICAgYm9vbCBuZXN0ZWQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhaXJfZW44ODExaF9tY3VfcnVubmluZyhtZGlvZGV2LCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChyZXQpIHtcbitcdFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuK1x0XHRcdFx0XHRcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGRldl9pbmZvKGRldiwgXCJNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcblwiLFxuK1x0XHRcdCAqZndfdmVyc2lvbik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbitcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsXG4rXHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXG4rXHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RNLCBmdzEsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RTUCwgZncyLCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuK1xuK1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbitcdFx0XHRcdFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCxcbitcdFx0XHRcdFx0ICAgbmVzdGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbitcbitcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sXG4rXHRcdFx0XHRcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuK1xuK1x0ZGV2X2luZm8oZGV2LCBcIk1EMzIgZmlybXdhcmUgdmVyc2lvbjogJTA4eFxcblwiLCAqZndfdmVyc2lvbik7XG4rXG4rYWlyX2Z3X2Rvd25sb2FkX291dDpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncyKTtcbitcbithaXJfZndfZG93bmxvYWRfcmVsMTpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncxKTtcbitcbitcdC8qIE5vIGVycm9yIHByaW50OiBjYWxsZXJzIGxvZyBvbiB0aGVpciBvd24gdGVybXMsIGFuZCBhIHBvbGxlclxuK1x0ICogd291bGQgcmVwZWF0IGl0IG9uIGV2ZXJ5IHJldHJ5LlxuK1x0ICovXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7XG4rXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaCBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG5pbmRleCAwMWJiMzJlN2M3Yzk1Li41NmJhOTg3YTY4Y2M5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG5AQCAtMTAsMTIgKzEwLDE5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFx1MDAzZVxuK1xuICNkZWZpbmUgQUlSX0VYVF9QQUdFX0FDQ0VTU1x0XHQweDFmXG4gXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfU1RBTkRBUkRcdFx0MHgwMDAwXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfMVx0XHQweDAwMDFcbiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80XHRcdDB4MDAwNFxuIFxuKy8qIEJ5dGVzIHdyaXR0ZW4gYmV0d2VlbiBidXMgcmVsZWFzZXMsIHNvIHRoZSBvdGhlciBQSFlzIG9uIGl0IGdldCBhIHR1cm4uXG4rICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXG4rICovXG4rI2RlZmluZSBBSVJfRldfQ0hVTktfQllURVNcdFx0MjMwNFxuK1xuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cbiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFXHRcdFx0MHgxMFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXHRcdDB4MDAwMFxuQEAgLTI5LDYgKzM2LDIwIEBAXG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9ISUdIXHRcdDB4MTdcbiAjZGVmaW5lIEFJUl9CUEJVU19SRF9EQVRBX0xPV1x0XHQweDE4XG4gXG4rI2RlZmluZSBBSVJfRldfQUREUl9ETVx0XHRcdDB4MDAwMDAwMDBcbisjZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0XHRcdDB4MDAxMDAwMDBcbitcbisjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8xXHRcdDB4MGYwMDE4XG4rI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXHRcdDB4MFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0hcdFx0MHgxXG4rI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMlx0XHQweDgwMDAwMFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbitcbisjZGVmaW5lIEVOODgxMUhfUEhZX0ZXX1NUQVRVU1x0XHQweDgwMDlcbisjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcdFx0XHQweDAyXG4rXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1ZFUlNJT05cdFx0MHgzYjNjXG4rXG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0XHRcdFx0dTMyIG1hc2ssIHUzMiBzZXQpO1xuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG5AQCAtMzgsNCArNTksMTAgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBhaXJfcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpO1xuIFxuK3N0cnVjdCBmaXJtd2FyZTtcbitcbitpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxuK1x0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKTtcbitpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7XG4rXG4gI2VuZGlmIC8qIF9fQUlSX1BIWV9MSUJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmggYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDQ5NGRjNmMxMDIyY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuQEAgLTAsMCArMSwyNSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IENvbGxhYm9yYSBMdGQuXG4rICogICAgICAgICAgICAgICAgICAgIExvdWlzLUFsZXhpcyBFeXJhdWQgXHUwMDNjbG91aXNhbGV4aXMuZXlyYXVkQGNvbGxhYm9yYS5jb21cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbisgKi9cbitcbisjaWZuZGVmIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXG4rI2RlZmluZSBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgbWRpb19kZXZpY2U7XG4rXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRE1cdFx0XHRcImFpcm9oYS9FdGhNRDMyLmRtLmJpblwiXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQXHRcdFwiYWlyb2hhL0V0aE1EMzIuRFNQLmJpblwiXG4rXG4rLyogUmV0dXJucyAxIHJ1bm5pbmcsIDAgZG9ybWFudCwgbmVnYXRpdmUgb24gYSBmYWlsZWQgc3RhdHVzIHJlYWQuICovXG4raW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xuKy8qIFJldHVybnMgMSB3aGVuIGl0IGFkb3B0ZWQgZmlybXdhcmUgdGhhdCB3YXMgYWxyZWFkeSBydW5uaW5nLiAqL1xuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbitcdFx0XHQgICAgYm9vbCBuZXN0ZWQpO1xuK1xuKyNlbmRpZiAvKiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5lNzRhOGY1Y2Y1YzY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIyODQsNiArMjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rfVxuK1xuKy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrX25lc3RlZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rfVxuK1xuIHZvaWQgcGh5X2F0dGFjaGVkX3ByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0X19wcmludGYoMiwgMyk7XG4gY2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjowOS43OTI5NjI5MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjY2ODczOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaXMgaW50cm9kdWNpbmcgYSBmYWlybHkgc2lnbmlmaWNhbnQgY2h1bmsgb2YgbmV3IGNvZGUgcmVsYXRlZCB0byBBaXJvaGEgbmV0d29yayBkZXZpY2VzLiBJIHNlZSBhIG5ldyBkZXZpY2UgdHJlZSBiaW5kaW5nLCBhbiB1cGRhdGUgdG8gdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSwgYW5kIGEgY2x1c3RlciBvZiBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGNlbnRlcmVkIGFyb3VuZCBNRElPIGFuZCBQSFkgaW1wbGVtZW50YXRpb25zLiBUaGUga2V5IGZpbGVzIGFwcGVhciB0byBiZSBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCB3aGljaCBpcyBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgLCB3aGljaCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyB0aGUgZmlybXdhcmUgbG9hZGluZyBmb3IgYW4gQWlyb2hhIFBIWS4gVGhlcmUgYXJlIGFsc28gYXNzb2NpYXRlZCBsaWJyYXJ5IGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMuIE5vdGFibHksIHRoZXJlIGFyZSBzb21lIGhlbHBlciBmdW5jdGlvbnMgYWRkZWQgdG8gYGluY2x1ZGUvbGludXgvcGh5LmhgIHRoYXQgZGVhbCB3aXRoIGxvY2tpbmcuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHJlYWNoYWJpbGl0eSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSB0aG9zZSB1c2VkIHdpdGggc3l6a2FsbGVyLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgZHJpdmVycywgcGFydGljdWxhcmx5IHRoZSBNRElPIGFuZCBQSFkgaW1wbGVtZW50YXRpb25zLCBhcmUgaW5oZXJlbnRseSByZWxpYW50IG9uIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGRldmljZSB0cmVlcyB0aGF0IG1pZ2h0IG1ha2UgdGhlbSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlP1xuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuYXR1cmUgb2YgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCBtb3JlIGRlZXBseS4gSSdsbCBuZWVkIHRvIHJlc2VhcmNoIE1ESU8gYW5kIFBIWSBkZXZpY2VzIGdlbmVyYWxseSwgdG8gc2VlIGlmIHRoZXkncmUgdHlwaWNhbGx5IHRpZWQgdG8gcGFydGljdWxhciBhcmNoaXRlY3R1cmVzIChBUk0sIE1JUFMsIGV0Yy4pIG9yIHJlcXVpcmUgYSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBzZXR1cCBvciBhIGRldmljZSB0cmVlIGNvbmZpZ3VyZWQgaW4gYSBjZXJ0YWluIHdheSB0byBiZSBhY2Nlc3NpYmxlLlxuXG5JJ2xsIHN0YXJ0IHdpdGggc29tZSBxdWljayBjaGVja3MsIHByb2JhYmx5IHVzaW5nIGBncmVwcGVyYCBvciBieSBzY3J1dGluaXppbmcgdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgYW55IG9idmlvdXMgaGludHMgYWJvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCByb2FkYmxvY2tzIHRvIGZ1enppbmcgdGhpcyBjb2RlIGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjE0LjA1OTgzODQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzM1NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBSVJfRU44ODExSF9QSFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTMyPWNvbmZpZyBNRElPX0FJUk9IQV9FTjg4MTFIXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzYtXFx0c2VsZWN0IEFJUl9ORVRfUEhZTElCXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjM3OlxcdGltcGx5IEFJUl9FTjg4MTFIX1BIWVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zOC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDAtXFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXFx0Kz0gYWlyX2FuODgwMS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgKz0gYWlyX2VuODgxMWgub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXFx0Kz0gYWlyX3BoeV9saWIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoxNC4xODMxOTY5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTQxNDgyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgQWlyb2hhIEVOODgxMUggRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBBaXJvaGEgRU44ODExSCBkcml2ZXJzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGRyaXZlcnMgZ2V0IHByb2JlZCBhbmQgaW5zdGFudGlhdGVkLiBMb29raW5nIGF0IGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCBJIHNlZSBgZW44ODExaF9tY3Vfb2ZfbWF0Y2hbXWAgYW5kIGBtZGlvX21vZHVsZV9kcml2ZXIoZW44ODExaF9tY3VfZHJpdmVyKWAuIFJpZ2h0LCB0aGlzIGlzIE9wZW4gRmlybXdhcmUvRGV2aWNlIFRyZWUgYmFzZWQsIGJvdW5kIHRvIGFuIE1ESU8gYnVzIHVzaW5nIGBzdHJ1Y3QgbWRpb19kcml2ZXJgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVuIGBhaXJfZW44ODExaC5jYCBpcyBjbGVhcmx5IGEgUEhZIGRyaXZlciAoYHBoeV9kcml2ZXJgKS5cblxuTm93IHRoZSByZWFsIHF1ZXN0aW9uOiBDYW4gSSBhY3R1YWxseSBnZXQgdGhlc2UgTURJTyBkZXZpY2VzIG9yIFBIWSBkcml2ZXJzIHRvICpkbyBhbnl0aGluZyogaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBhbWQ2NCBlbnZpcm9ubWVudCwgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBvciBzcGVjaWZpYywgZGV0YWlsZWQgZW11bGF0aW9uIG9mIHRoZSBoYXJkd2FyZT8gSSdtIGRvdWJ0ZnVsLCBidXQgbGV0J3Mgc2VlLlxuXG5XYWl0LCBob3cgZG9lcyBTeXprYWxsZXIgZXZlbiBkZWFsIHdpdGggUEhZIGRyaXZlcnMgYW5kIE1ESU8gZGV2aWNlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdHMgdGVzdCBjb3ZlcmFnZSBpcyBvbiB0aGlzIGZyb250LiBBcmUgdGhlcmUgYW55IG1vY2sgTURJTyBidXNlcywgdmlydHVhbCBNRElPIGRldmljZXMsIG9yIG5ldGxpbmsgUEhZIGludGVyZmFjZXMgdGhhdCBJIGNhbiBsZXZlcmFnZT8gTXkgZmluYWwgdGhvdWdodCBpcyBjYW4gSSBldmVuIGNyZWF0ZSBwaHkgZGV2aWNlcyBvciBtZGlvIGRldmljZXMgZnJvbSB1c2Vyc3BhY2U/IEknbSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWUgZGVlcGVyIGRpZ2dpbmcgdG8gZ2V0IHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjE3LjQ5NzM0NjgyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk0NzA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZHJpdmVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM4OTE9c3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzkxOS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM5MjA6ICogcGh5X2RyaXZlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgcGh5X2RyaXZlciB3aXRoIHRoZSBQSFkgbGF5ZXJcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5MjEtICogQG5ld19kcml2ZXI6IG5ldyBwaHlfZHJpdmVyIHRvIHJlZ2lzdGVyXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5MjMtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozOTI0OnN0YXRpYyBpbnQgcGh5X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlcixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5MjUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zOTc0PWludCBwaHlfZHJpdmVyc19yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlciwgaW50IG4sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5NzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG47IGkrKykge1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzk4MDpcXHRcXHRyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKG5ld19kcml2ZXIgKyBpLCBvd25lcik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zOTgxLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDAzOD1zdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDYwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NDA2MTpcXHRyYyA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyLCBUSElTX01PRFVMRSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDYyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDA2NC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjQwNjU6XFx0cmMgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZnZW5waHlfZHJpdmVyLCBUSElTX01PRFVMRSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDY2LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MTcuNTQ0Mjk2ODY4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzNTg0Nzc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ2QgbmVlZCB0byBleGFtaW5lOlxuXG4qKkFuYWx5emluZyB0aGUgRU44ODExSCBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuUmlnaHQsIHNvIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgZW44ODExaF9kcml2ZXJgIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLCBJIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgYWlyX2VuODgxMWguY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgY29uc2lkZXJpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSBkcml2ZXIncyByZWdpc3RyYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZnVuY3Rpb24gb3IgbWFjcm8gcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBkcml2ZXIgd2l0aCB0aGUga2VybmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBtb2R1bGVfaW5pdCgpYCwgb3IgcGVyaGFwcyBhIGN1c3RvbSByZWdpc3RyYXRpb24gZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlLiBPbmNlIEkgZmluZCBpdCwgSSdsbCBleGFtaW5lIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCB3aGF0IHJlc291cmNlcyBpdCByZXF1ZXN0cywgYW5kIHdoYXQncyBpdHMgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBLbm93aW5nIGV4YWN0bHkgKmhvdyogYW5kICp3aGVuKiB0aGlzIGRyaXZlciBpcyBiZWluZyBpbml0aWFsaXplZCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIG9mIHVuZGVyc3RhbmRpbmcgZm9yIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEwMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjE5Ljg4MDE0NjM5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU3NjA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGh5X2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0xMDEwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0xMDU4LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MTA1OTptb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0xMDYwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MzIzPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQyLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM0Mzptb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluMTE0MF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYy02MC19O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYzo2MTptb2R1bGVfcGh5X2RyaXZlcihhZGluMTE0MF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYy02Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTEyMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWlyb2hhX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTQ1LX0gfTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNDY6bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTM4Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW44ODExaF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE0MzAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTQzMTptb2R1bGVfcGh5X2RyaXZlcihlbjg4MTFoX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTQzMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYz05MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYW03OWNfZHJpdmVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExMS1cXG5kcml2ZXJzL25ldC9waHkvYW1kLmM6MTEyOm1vZHVsZV9waHlfZHJpdmVyKGFtNzljX2RyaXZlcnMpO1xcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYy0xMTMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTExODE9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFxcl9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU2NC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE1NjU6bW9kdWxlX3BoeV9kcml2ZXIoYXFyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNTY2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz05NDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFzMjF4eHhfZHJpdmVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDc3LX07XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzoxMDc4Om1vZHVsZV9waHlfZHJpdmVyKGFzMjF4eHhfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDc5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM9OTc9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFzaXhfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmIuYy0xMjAtXFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM6MTIxOm1vZHVsZV9waHlfZHJpdmVyKGFzaXhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmIuYy0xMjItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmJfcnVzdC5ycy0xMi1cXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmJfcnVzdC5yczoxMzprZXJuZWw6Om1vZHVsZV9waHlfZHJpdmVyISB7XFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiX3J1c3QucnMtMTQtICAgIGRyaXZlcnM6IFtQaHlBWDg4NzcyQSwgUGh5QVg4ODc3MkMsIFBoeUFYODg3OTZCXSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmM9Mjg2PU1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYmNtX2N5Z251c19waHlfdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI4Ny1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI4ODptb2R1bGVfcGh5X2RyaXZlcihiY21fY3lnbnVzX3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjg5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9ODY1PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDE0MF9kcml2ZXJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy04ODQtfTtcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo4ODU6bW9kdWxlX3BoeV9kcml2ZXIoYmNtNTQxNDBfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtODg2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYz03Mj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNjN4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY202M3h4LmMtOTMtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYzo5NDptb2R1bGVfcGh5X2RyaXZlcihiY202M3h4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYy05NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM9OTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYmNtN3h4eF90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmMtOTY5LVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM6OTcwOm1vZHVsZV9waHlfZHJpdmVyKGJjbTd4eHhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTk3MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jPTQxOT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODQ4ODFfZHJpdmVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtNDYxLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjQ2Mjptb2R1bGVfcGh5X2RyaXZlcihiY204NDg4MV9kcml2ZXJzKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy00NjMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jPTE5ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODd4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMjE4LVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MjE5Om1vZHVsZV9waHlfZHJpdmVyKGJjbTg3eHhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTIyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jPTE0NjY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJyb2FkY29tX2RyaXZlcnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jLTE3NTMtXFxuZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmM6MTc1NDptb2R1bGVfcGh5X2RyaXZlcihicm9hZGNvbV9kcml2ZXJzKTtcXG5kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYy0xNzU1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jPTEyNz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgY2lzODIweF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9jaWNhZGEuYy0xNDUtXFxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jOjE0Njptb2R1bGVfcGh5X2RyaXZlcihjaXM4MjB4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jLTE0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmM9NzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGNvcnRpbmFfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvY29ydGluYS5jLTg3LVxcbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmM6ODg6bW9kdWxlX3BoeV9kcml2ZXIoY29ydGluYV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmMtODktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz0xOTY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRhcDgyMTFyX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMjA4LX07XFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6MjA5Om1vZHVsZV9waHlfZHJpdmVyKGRhcDgyMTFyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMjEwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYz0xNzM9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRtOTF4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMtMjA5LVxcbmRyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmM6MjEwOm1vZHVsZV9waHlfZHJpdmVyKGRtOTF4eF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMtMjExLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYz0xNDU2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzNjQwX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYy0xNDcwLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmM6MTQ3MTptb2R1bGVfcGh5X2RyaXZlcihkcDgzNjQwX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYy0xNDcyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMjM2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODIyX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMjQ0LX07XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzoxMjQ1Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4MjJfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTEyNDYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg0OC5jPTE1Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4Mzg0OF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODQ4LmMtMTY2LX07XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NDguYzoxNjc6bW9kdWxlX3BoeV9kcml2ZXIoZHA4Mzg0OF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODQ4LmMtMTY4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYz0xMTgwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY3X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYy0xMjE4LX07XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoxMjE5Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4NjdfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTEyMjAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2OS5jPTkzND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4Mzg2OV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY5LmMtOTM4LX07XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjkuYzo5Mzk6bW9kdWxlX3BoeV9kcml2ZXIoZHA4Mzg2OV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY5LmMtOTQwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0YzgxMS5jPTM4Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4MzgxMV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGM4MTEuYy00MDQtfTtcXG5kcml2ZXJzL25ldC9waHkvZHA4M3RjODExLmM6NDA1Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4MTFfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4M3RjODExLmMtNDA2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jPTkzNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4M3RkNTEwX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jLTk2Ni19IH07XFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jOjk2Nzptb2R1bGVfcGh5X2RyaXZlcihkcDgzdGQ1MTBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4M3RkNTEwLmMtOTY4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jPTY0ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4M3RnNzIwX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jLTY2Ny19IH07XFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jOjY2ODptb2R1bGVfcGh5X2RyaXZlcihkcDgzdGc3MjBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4M3RnNzIwLmMtNjY5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2V0MTAxMWMuYz04Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZXQxMDExY19kcml2ZXJbXSA9IHsge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2V0MTAxMWMuYy05NC1cXG5kcml2ZXJzL25ldC9waHkvZXQxMDExYy5jOjk1Om1vZHVsZV9waHlfZHJpdmVyKGV0MTAxMWNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZXQxMDExYy5jLTk2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jPTU3NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgaWNwbHVzX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jLTYyNS1cXG5kcml2ZXJzL25ldC9waHkvaWNwbHVzLmM6NjI2Om1vZHVsZV9waHlfZHJpdmVyKGljcGx1c19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9pY3BsdXMuYy02MjctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvaW50ZWwteHdheS5jPTU4ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgeHdheV9ncGh5W10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvaW50ZWwteHdheS5jLTc3MC19O1xcbmRyaXZlcnMvbmV0L3BoeS9pbnRlbC14d2F5LmM6NzcxOm1vZHVsZV9waHlfZHJpdmVyKHh3YXlfZ3BoeSk7XFxuZHJpdmVycy9uZXQvcGh5L2ludGVsLXh3YXkuYy03NzItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbHh0LmM9MzA4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBseHQ5N3hfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbHh0LmMtMzQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9seHQuYzozNDk6bW9kdWxlX3BoeV9kcml2ZXIobHh0OTd4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2x4dC5jLTM1MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4cTJ4eHguYz0xMTAyPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdjg4cTJ4eHhfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHEyeHh4LmMtMTE0My1cXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHEyeHh4LmM6MTE0NDptb2R1bGVfcGh5X2RyaXZlcihtdjg4cTJ4eHhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHEyeHh4LmMtMTE0NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4eDIyMjIuYz01Nzg9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG12MjIyMl9kcml2ZXJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHgyMjIyLmMtNTk0LX07XFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODh4MjIyMi5jOjU5NTptb2R1bGVfcGh5X2RyaXZlcihtdjIyMjJfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODh4MjIyMi5jLTU5Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmM9MzY2Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWFydmVsbF9kcml2ZXJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jLTQxNzYtXFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYzo0MTc3Om1vZHVsZV9waHlfZHJpdmVyKG1hcnZlbGxfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYy00MTc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYz0xMzg4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdjMzMTBfZHJpdmVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYy0xNDc2LVxcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmM6MTQ3Nzptb2R1bGVfcGh5X2RyaXZlcihtdjMzMTBfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYy0xNDc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jPTM3OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrXzJwNWdlcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jLTQwMC1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmM6NDAxOm1vZHVsZV9waHlfZHJpdmVyKG10a18ycDVnZXBoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYy00MDItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWZlLXNvYy5jPTMwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jX2ZlX3BoeV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmMtNDEtXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1mZS1zb2MuYzo0Mjptb2R1bGVfcGh5X2RyaXZlcihtdGtfc29jX2ZlX3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmMtNDMtc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtdGtfc29jX2ZlX3BoeV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ5NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTU2OC1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE1Njk6bW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTU3MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYz05OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX2dlcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jLTEyOS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmM6MTMwOm1vZHVsZV9waHlfZHJpdmVyKG10a19nZXBoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYy0xMzEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVzb24tZ3hsLmM9MjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbWVzb25fZ3hsX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lc29uLWd4bC5jLTIyOS1cXG5kcml2ZXJzL25ldC9waHkvbWVzb24tZ3hsLmM6MjMwOm1vZHVsZV9waHlfZHJpdmVyKG1lc29uX2d4bF9waHkpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZXNvbi1neGwuYy0yMzEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmM9Njc4MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIga3NwaHlfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmMtNzEwOC1cXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmM6NzEwOTptb2R1bGVfcGh5X2RyaXZlcihrc3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9taWNyZWwuYy03MTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jPTU0Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWljcm9jaGlwX3BoeV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXAuYy01ODgtXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jOjU4OTptb2R1bGVfcGh5X2RyaXZlcihtaWNyb2NoaXBfcGh5X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jLTU5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDEuYz0yMTA0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtaWNyb2NoaXBfdDFfcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MS5jLTIxNjItXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MS5jOjIxNjM6bW9kdWxlX3BoeV9kcml2ZXIobWljcm9jaGlwX3QxX3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDEuYy0yMTY0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYz01MDk9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1pY3JvY2hpcF90MXNfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jLTU2Ni1cXG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jOjU2Nzptb2R1bGVfcGh5X2RyaXZlcihtaWNyb2NoaXBfdDFzX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYy01NjgtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MzA3NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzE2Mi1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzE2Mzptb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTY0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmM9MjU0OD1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdnNjODV4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tc2NjL21zY2NfbWFpbi5jLTI5ODgtXFxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmM6Mjk4OTptb2R1bGVfcGh5X2RyaXZlcih2c2M4NXh4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmMtMjk5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9teGwtODYxMTAuYz05MzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG14bF9waHlfZHJ2c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L214bC04NjExMC5jLTk2OC1cXG5kcml2ZXJzL25ldC9waHkvbXhsLTg2MTEwLmM6OTY5Om1vZHVsZV9waHlfZHJpdmVyKG14bF9waHlfZHJ2cyk7XFxuZHJpdmVycy9uZXQvcGh5L214bC04NjExMC5jLTk3MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmM9MTEwMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ3B5X2RyaXZlcnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmMtMTQ3OC19O1xcbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmM6MTQ3OTptb2R1bGVfcGh5X2RyaXZlcihncHlfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L214bC1ncHkuYy0xNDgwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmM9MTYwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY1X2RyaXZlcltdID0geyB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYy0xNjktXFxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmM6MTcwOm1vZHVsZV9waHlfZHJpdmVyKGRwODM4NjVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYy0xNzEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuYz0xNDM9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG5jbjI2MDAwX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmMtMTU5LVxcbmRyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jOjE2MDptb2R1bGVfcGh5X2RyaXZlcihuY24yNjAwMF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jLTE2MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtYzQ1LXRqYTExeHguYz0yMDczPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBueHBfYzQ1X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC1jNDUtdGphMTF4eC5jLTIxNzctXFxuZHJpdmVycy9uZXQvcGh5L254cC1jNDUtdGphMTF4eC5jOjIxNzg6bW9kdWxlX3BoeV9kcml2ZXIobnhwX2M0NV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtYzQ1LXRqYTExeHguYy0yMTc5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC1jYnR4LmM9MTk3PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBjYnR4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC1jYnR4LmMtMjE1LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtY2J0eC5jOjIxNjptb2R1bGVfcGh5X2RyaXZlcihjYnR4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L254cC1jYnR4LmMtMjE3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9ODE4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtOTI3LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjkyODptb2R1bGVfcGh5X2RyaXZlcih0amExMXh4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtOTI5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vYXQ4MDN4LmM9MTExMz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYXQ4MDN4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vYXQ4MDN4LmMtMTIzNS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9hdDgwM3guYzoxMjM2Om1vZHVsZV9waHlfZHJpdmVyKGF0ODAzeF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL2F0ODAzeC5jLTEyMzctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NzkxPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxY2E4MDd4X2RyaXZlcnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy04NDMtfTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6ODQ0Om1vZHVsZV9waHlfZHJpdmVyKHFjYTgwN3hfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTg0NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYz02NDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHFjYTgwOHhfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDh4LmMtNjc4LVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYzo2Nzk6bW9kdWxlX3BoeV9kcml2ZXIocWNhODA4eF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYy02ODAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmM9MjEzPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxY2E4M3h4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODN4eC5jLTI1OS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmM6MjYwOm1vZHVsZV9waHlfZHJpdmVyKHFjYTgzeHhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmMtMjYxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3FzZW1pLmM9MTQ2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxczY2MTJfZHJpdmVyW10gPSB7IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xc2VtaS5jLTE1NS1cXG5kcml2ZXJzL25ldC9waHkvcXNlbWkuYzoxNTY6bW9kdWxlX3BoeV9kcml2ZXIocXM2NjEyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L3FzZW1pLmMtMTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3F0MjAyNS5ycy0yMy1cXG5kcml2ZXJzL25ldC9waHkvcXQyMDI1LnJzOjI0Omtlcm5lbDo6bW9kdWxlX3BoeV9kcml2ZXIhIHtcXG5kcml2ZXJzL25ldC9waHkvcXQyMDI1LnJzLTI1LSAgICBkcml2ZXJzOiBbUGh5UVQyMDI1XSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jPTMwNDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMzM2NC1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzozMzY1Om1vZHVsZV9waHlfZHJpdmVyKHJlYWx0ZWtfZHJ2cyk7XFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMzM2Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9yb2NrY2hpcC5jPTE3Mz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcm9ja2NoaXBfcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmMtMTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9yb2NrY2hpcC5jOjE4OTptb2R1bGVfcGh5X2RyaXZlcihyb2NrY2hpcF9waHlfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvcm9ja2NoaXAuYy0xOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc21zYy5jPTY4Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgc21zY19waHlfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc21zYy5jLTg4Mi1cXG5kcml2ZXJzL25ldC9waHkvc21zYy5jOjg4Mzptb2R1bGVfcGh5X2RyaXZlcihzbXNjX3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9zbXNjLmMtODg0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYz0xMDI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHN0ZTEweHBfcGRyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYy0xMjQtXFxuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYzoxMjU6bW9kdWxlX3BoeV9kcml2ZXIoc3RlMTB4cF9wZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvc3RlMTBYcC5jLTEyNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS90ZXJhbmV0aWNzLmM9NzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRlcmFuZXRpY3NfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvdGVyYW5ldGljcy5jLTg4LVxcbmRyaXZlcnMvbmV0L3BoeS90ZXJhbmV0aWNzLmM6ODk6bW9kdWxlX3BoeV9kcml2ZXIodGVyYW5ldGljc19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS90ZXJhbmV0aWNzLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYz04MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdXBkNjA2MjBfZHJpdmVyWzFdID0geyB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYy05MC1cXG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYzo5MTptb2R1bGVfcGh5X2RyaXZlcih1cGQ2MDYyMF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS91UEQ2MDYyMC5jLTkyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYz02MDE9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHZzYzgyeHhfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jLTcxNS1cXG5kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jOjcxNjptb2R1bGVfcGh5X2RyaXZlcih2c2M4Mnh4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYy03MTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjE5LjkyNTcyNjc1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MTYwMDYxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIE1ESU8gRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGFuIE1ESU8gTUNVIGRyaXZlciwgYG1kaW8tYWlyb2hhLWVuODgxMWguY2AsIGZvciB0aGUgQWlyb2hhIEVOODgxMUggMi41RyBQSFkgbWljcm9jb250cm9sbGVyLCBhbG9uZyB3aXRoIHJlZmFjdG9yaW5nIHdpdGhpbiB0aGUgYGFpcl9lbjg4MTFoLmNgIGFuZCBgYWlyX3BoeV9saWIuY2AgZHJpdmVycy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYG1kaW8tYWlyb2hhLWVuODgxMWguY2AgYW5kIGBhaXJfZW44ODExaC5jYCBhcmUgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBleGlzdGVuY2Ugb2YgYW4gTURJTyBidXMsIGFuZCBzcGVjaWZpY2FsbHksIHRvIGEgZGV2aWNlIHRyZWUgbm9kZSBtYXRjaGluZyBgXCJhaXJvaGEsZW44ODExaC1tY3VcImAgb3IgUEhZIElEcyBgMHgwM2EyYTQxMSAvIDB4YzBmZjA0YTBgLlxuXG5UaGUgTURJTyBkcml2ZXIgKGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgKSByZWxpZXMgb24gYE9GX01ESU9gLCBtYWtpbmcgaXQgY2xlYXIgdGhhdCBEZXZpY2UgVHJlZSBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGluc3RhbnRpYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGVzZSBhcmUgc3BlY2lmaWMgdG8gQWlyb2hhIGhhcmR3YXJlLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gdGhpcyBoYXJkd2FyZSBldmVuICpiZSogcmVhY2hlZCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb24gYW4geDg2XzY0IHN5c3RlbT8gIEJhc2VkIG9uIHdoYXQgSSBrbm93IGFib3V0IHZpcnR1YWxpemF0aW9uIGFuZCB0aGUgbmF0dXJlIG9mIE1ESU8sIHRoZSBhbnN3ZXIgaXMgZGVmaW5pdGl2ZWx5IG5vLiBUaGVyZSdzIG5vIGVtdWxhdGlvbiBvZiB0aGlzIEFpcm9oYS1zcGVjaWZpYyBNRElPIGRldmljZSBvciB0aGUgRU44ODExSCBQSFkgaW4gUUVNVS4gIFRoaXMgcmVxdWlyZXMgcGh5c2ljYWwgQWlyb2hhIEVOODgxMUggaGFyZHdhcmUsIGNvbm5lY3RlZCB2aWEgYW4gTURJTyBidXMsIHNvbWV0aGluZyBjb21tb24gb24gQVJNIG9yIE1JUFMgcm91dGVyL2JvYXJkIGFyY2hpdGVjdHVyZXMsIG5vdCB4ODYuXG5cblRvIGNvbmZpcm0gdGhpcywgSSd2ZSByZXZpZXdlZCB0aGUgZ3VpZGVsaW5lcyBhYm91dCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFRoaXMgcGF0Y2ggZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgY2F0ZWdvcnkgb2YgXCJWZW5kb3Itc3BlY2lmaWMgWy4uLl0gZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgWy4uLl0gY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi5cblxuVG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSBhbHNvIHJldmlld2VkIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gV2hpbGUgdGhlIGtlcm5lbCBoZWFkZXJzIHN1Y2ggYXMgYGluY2x1ZGUvbGludXgvcGh5LmhgIHdlcmUgdG91Y2hlZCwgdGhhdCdzIGZpbmUuIFRoZSBrZXkgaXMgaW4gdGhlIHNwZWNpZmljcyBvZiB0aGUgYWRkZWQgY29kZTogYG1kaW8tYWlyb2hhLWVuODgxMWguY2AsIGBhaXJfZW44ODExaC5jYCwgYGFpcl9waHlfbGliLmNgIGFuZCB0aGUgc3VwcG9ydGluZyBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBjb25maWcgZmlsZXMuICBUaGUgaGVscGVyIGZ1bmN0aW9ucyBhZGRlZCB0byBgcGh5LmhgLCB3aGlsZSBnZW5lcmljIGluIG5hbWUsIGFyZSB1c2VkICpleGNsdXNpdmVseSogaW4gdGhlIEFpcm9oYS1zcGVjaWZpYyBkcml2ZXJzLiAgSSB3aWxsIHF1aWNrbHkgY2hlY2ssIGhvd2V2ZXIsIHRoYXQgdGhlIG5ldyBgbWRpb2Rldl9sb2NrKmAgaGVscGVyIGZ1bmN0aW9ucyBhcmUgbm90IGNhbGxlZCBhbnl3aGVyZSBlbHNlIG91dHNpZGUgb2YgQWlyb2hhIGNvZGUgaW4gdGhlIGtlcm5lbCwgYW5kIGlmIHNvLCBpdCBmdXJ0aGVyIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyB1bnJlYWNoYWJsZSBjb2RlLlxuXG5JbiBzaG9ydCwgdGhlcmUncyBubyBwYXRoIGZvciB0aGlzIGNvZGUgdG8gYmUgZXhlY3V0ZWQgaW4gYSBzdGFuZGFyZCB4ODZfNjQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIGFyY2hpdGVjdHVyYWxseSBpc29sYXRlZCB0byBoYXJkd2FyZSB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gc3VjaCBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjI2LjM0MTczNjA5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjUxMjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvZGV2X2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MjYwPXN0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc1LS8qIE5lc3RlZCB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB0aGUgYnVzIHRoaXMgY2hpcCBoYW5ncyBiZWxvdy4gKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyNzY6c3RhdGljIHZvaWQgYWlyX21kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3Ny17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc4LVxcdGlmIChuZXN0ZWQpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjc5OlxcdFxcdG1kaW9kZXZfbG9ja19uZXN0ZWQobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjgwLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyODE6XFx0XFx0bWRpb2Rldl9sb2NrKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI4Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0yODQ9aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI5OC1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyOTk6XFx0XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMwMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTMyND1zdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMyOS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozMzA6XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTM0NT1zdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzUxOlxcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0zNjc9c3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM3Mi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozNzM6XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM3NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTQxND1zdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTQxNy1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzo0MTg6XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTQxOS1cXHRyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MjI4Mj1zdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMjg2LVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjI4NzpzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMjkyLS8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyOTM6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjI4LjAwNDI1NTA1MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODMxMjE2NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIE1ESU8gTUNVL1BIWSBQYXRjaCoqXG5cbk9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRoaXMgY29kZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlIGBtZGlvZGV2X2xvY2sqYCB2YXJpYWJsZXMgYXJlIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIGBhaXJfcGh5X2xpYi5jYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIHNpZ25hbCB0aGF0IHRoaXMgd2hvbGUgbW9kaWZpY2F0aW9uIGlzIGNvbmZpbmVkIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIGZvciB0aGUgQWlyb2hhIEVOODgxMUggTURJTyBNQ1UgYW5kIFBIWS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBmdXp6aW5nIGFwcGxpY2FiaWxpdHksIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIGNvbmZpcm1lZC5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIEFpcm9oYSBoYXJkd2FyZSBpcyBub3Qgc29tZXRoaW5nIHdlIGNhbiBlbXVsYXRlIHdpdGggc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gc2V0dXBzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb24gYW1kNjQuIFRoZSBmdW5jdGlvbmFsaXR5IHJldm9sdmVzIGFyb3VuZCBsb2FkaW5nIE1EMzIgY29yZSBmaXJtd2FyZSwgd2hpY2gsIHdpdGhvdXQgYWNjZXNzIHRvIHRoZSBhY3R1YWwgQWlyb2hhIGhhcmR3YXJlIGFuZCBpdHMgRGV2aWNlIFRyZWUgcmVwcmVzZW50YXRpb24sIGlzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlLlxuXG5MZXQncyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluOlxuKiAgIGBXb3J0aEZ1enppbmdgOiBGYWxzZSDigJMgeWVwLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkLlxuKiAgIGBFbmFibGVDb25maWdzYDogRW1wdHkgYXJyYXkg4oCTIGNvcnJlY3QuIE5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgb3IgcmVsZXZhbnQgaGVyZS5cbiogICBgRm9jdXNTeW1ib2xzYDogQWxzbyBlbXB0eSDigJMgbWFrZXMgc2Vuc2UuIE5vIHNwZWNpZmljIHN5bWJvbHMgYXJlIGhpZ2hsaWdodGVkIGZvciBmdXp6aW5nLlxuKiAgIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGUsIGFuZCB0aGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgTURJTyBNQ1UsIGFuZCBQSFkuXG5cbkFsbCBjcml0ZXJpYSBwb2ludCBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uIEl0J3Mgc2FmZSB0byBzYXkgdGhlc2UgY2hhbmdlcyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBhbnkgZnV6emluZyBhY3Rpdml0aWVzIHdlJ2QgcnVuIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gRXhjZWxsZW50LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIG1hcmsgdGhpcyBvbmUgYXBwcm9wcmlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4ODQsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjMxLjgzNTQ3NDQwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIERldmljZSBUcmVlIGJpbmRpbmdzLCBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkvTUNVIGhhcmR3YXJlLiBUaGVzZSBkcml2ZXJzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBBaXJvaGEgaGFyZHdhcmUgKGFuZCByZXF1aXJlIERldmljZSBUcmVlIE1ESU8gZW51bWVyYXRpb24pIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIERldmljZSBUcmVlIGJpbmRpbmdzLCBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkvTUNVIGhhcmR3YXJlLiBUaGVzZSBkcml2ZXJzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBBaXJvaGEgaGFyZHdhcmUgKGFuZCByZXF1aXJlIERldmljZSBUcmVlIE1ESU8gZW51bWVyYXRpb24pIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjMxLjgzNTUwNDc5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7b4tr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 01:50:45 +0000 UTC FinishedAt: 2026-09-07 01:52:32 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgRGV2aWNlIFRyZWUgYmluZGluZ3MsIGFuIE1ESU8gTUNVIGRyaXZlciwgYW5kIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWS9NQ1UgaGFyZHdhcmUuIFRoZXNlIGRyaXZlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIEFpcm9oYSBoYXJkd2FyZSAoYW5kIHJlcXVpcmUgRGV2aWNlIFRyZWUgTURJTyBlbnVtZXJhdGlvbikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyNzY1Yjc3OWE0MWIyZDgzZjQ5MGJkYTFlOGM5MzYxMmY1MTgxYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDAxOjUyOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2JlMGFiODYyMjY2MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTE3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBBaXJvaGEgRU44ODExSCBQSFkgTUNVXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjogfFxuJiM0MzsgIFRoZSBBaXJvaGEgRU44ODExSCAyLjVHIFBIWSBpcyBidWlsdCBhcm91bmQgYW4gTUQzMiBjb3JlIHRoYXQgZXhlY3V0ZXNcbiYjNDM7ICBmaXJtd2FyZSBmcm9tIHZvbGF0aWxlIFJBTS4gVGhlIGNoaXAgYW5zd2VycyBhbiBNRElPIGFkZHJlc3MgZnJvbVxuJiM0MzsgIHBvd2VyLW9uLCBidXQgdGhlIFBIWSBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdCB1bnRpbCBmaXJtd2FyZSBoYXMgYmVlblxuJiM0MzsgIGxvYWRlZCBvdmVyIE1ESU8sIGFuZCBpdCBkaXNhcHBlYXJzIGFnYWluIGlmIHRoYXQgUkFNIGlzIGNsZWFyZWQuXG4mIzQzO1xuJiM0MzsgIFRoaXMgbm9kZSBkZXNjcmliZXMgdGhlIE1EMzIgY29yZS4gVGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIGEgY2hpbGRcbiYjNDM7ICBNRElPIGJ1cyBiZWxvdyBpdCwgYXQgdGhlIHNhbWUgYWRkcmVzcyB0aGUgY29yZSBvY2N1cGllcyBvbiB0aGUgcGFyZW50XG4mIzQzOyAgYnVzLCBhbmQgb25seSB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLlxuJiM0MztcbiYjNDM7ICBUaGUgcmVzZXQgbGluZSBpcyB3aXJlZCB0byB0aGUgY29yZSwgYW5kIGFzc2VydGluZyBpdCBjbGVhcnMgdGhlXG4mIzQzOyAgZmlybXdhcmUgUkFNLiBJdCB0aGVyZWZvcmUgYmVsb25ncyB0byB0aGlzIG5vZGU6IGEgcmVzZXQgZGVzY3JpYmVkIG9uXG4mIzQzOyAgdGhlIFBIWSBub2RlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGF0IG5vZGUmIzM5O3Mgb3duIGxpZmVjeWNsZSwgd2hhdGV2ZXJcbiYjNDM7ICB0aGUgY29yZSBpcyBkb2luZy5cbiYjNDM7XG4mIzQzOyAgQSBib2FyZCB0aGF0IGhhcyBmaXJtd2FyZSBpbiBoYW5kIHdoaWxlIGl0cyBNRElPIGJ1cyBpcyBlbnVtZXJhdGVkIGNhblxuJiM0MzsgIGRlc2NyaWJlIHRoZSBQSFkgb24gaXRzIG93biwgYXMgYWlyb2hhLGVuODgxMWgueWFtbCBkb2VzLCBhbmQgdGhhdCBmb3JtXG4mIzQzOyAgc3RheXMgdmFsaWQuIFRoaXMgYmluZGluZyBpcyBmb3IgdGhlIGJvYXJkcyB3aGVyZSBmaXJtd2FyZSBhcnJpdmVzXG4mIzQzOyAgbGF0ZXIsIHNvIHRoYXQgdGhlcmUgaXMgbm8gUEhZIHRvIGRlc2NyaWJlIHVudGlsIHRoZSBjb3JlIGhhcyBpdC5cbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgJG5vZGVuYW1lOlxuJiM0MzsgICAgcGF0dGVybjogXCYjMzQ7Xm1jdUBbMC05YS1mXSYjNDM7JFwmIzM0O1xuJiM0MztcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgY29uc3Q6IGFpcm9oYSxlbjg4MTFoLW1jdVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICByZXNldC1ncGlvczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgVGhlIEdQSU8gcGhhbmRsZSBhbmQgc3BlY2lmaWVyIGZvciB0aGUgcmVzZXQgc2lnbmFsIHdpcmVkIHRvIHRoZVxuJiM0MzsgICAgICBNRDMyIGNvcmUuXG4mIzQzO1xuJiM0MzsgIHJlc2V0LWFzc2VydC11czpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBEZWxheSBhZnRlciB0aGUgcmVzZXQgd2FzIGFzc2VydGVkIGluIG1pY3Jvc2Vjb25kcy4gSWYgdGhpc1xuJiM0MzsgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuXG4mIzQzO1xuJiM0MzsgIHJlc2V0LWRlYXNzZXJ0LXVzOlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgZGVhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXNcbiYjNDM7ICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLlxuJiM0MztcbiYjNDM7ICBtZGlvOlxuJiM0MzsgICAgJHJlZjogbWRpby55YW1sI1xuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFRoZSBidXMgdGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcsIGF0XG4mIzQzOyAgICAgIHRoZSBzYW1lIGFkZHJlc3MgdGhpcyBub2RlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnQgYnVzLiBPbmx5IHRoYXRcbiYjNDM7ICAgICAgb25lIGFkZHJlc3MgaXMgcGFzc2VkIHRocm91Z2guXG4mIzQzO1xuJiM0MzsgICAgcGF0dGVyblByb3BlcnRpZXM6XG4mIzQzOyAgICAgICYjMzk7XmV0aGVybmV0LXBoeUBbMC05YS1mXSYjNDM7JCYjMzk7OlxuJiM0MzsgICAgICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xuJiM0MzsgICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzOyAgICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICAgIHJlc2V0LWdwaW9zOiBmYWxzZVxuJiM0MzsgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzOiBmYWxzZVxuJiM0MzsgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAgICAgVGhlIHJlc2V0IGxpbmUgYmVsb25ncyB0byB0aGUgTUNVIG5vZGUgYWJvdmUuIEEgcmVzZXQgZGVzY3JpYmVkXG4mIzQzOyAgICAgICAgICBoZXJlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGlzIG5vZGUmIzM5O3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXG4mIzQzOyAgICAgICAgICB0aGUgZmlybXdhcmUgdGhhdCBjcmVhdGVkIHRoaXMgUEhZLlxuJiM0MztcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gcmVnXG4mIzQzOyAgLSBtZGlvXG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmhcdTAwM2VcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgbWN1QGQge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuODgxMWgtbWN1XCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MweGRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2cGlvIDE0IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMTAwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzID0gXHUwMDNjMjAwMDBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBldGhlcm5ldC1waHlAZCB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MweGRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFx1MDAzY1x1MDAyNnBpbyAxNSBJUlFfVFlQRV9MRVZFTF9MT1dcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGIyM2ZiNmYyZjRlZjQuLjNiZDg2ZGYyYmU1NzEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC03NTAsNiAmIzQzOzc1MCwxNCBAQCBTOlx0U3VwcG9ydGVkXG4gRjpcdGZzL2Fpby5jXG4gRjpcdGluY2x1ZGUvbGludXgvKmFpbyouaFxuIFxuJiM0MztBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcbiYjNDM7TTpcdEFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG4mIzQzO0Y6XHRkcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xuJiM0MztGOlx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuJiM0MztcbiBBSVJPSEEgRVRIRVJORVQgRFJJVkVSXG4gTTpcdExvcmVuem8gQmlhbmNvbmkgXHUwMDNjbG9yZW56b0BrZXJuZWwub3JnXHUwMDNlXG4gTDpcdGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG5pbmRleCBkNDQyNzhmMjZmYWJlLi4zM2VmYzZiYzg3NWY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbkBAIC0yOSw2ICYjNDM7MjksMTkgQEAgY29uZmlnIE1ESU9fQUlST0hBXG4gXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXG4gXHQgIEFpcm9oYSBBTjc1ODMgU29DJiMzOTtzLlxuIFxuJiM0Mztjb25maWcgTURJT19BSVJPSEFfRU44ODExSFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIE9GX01ESU9cbiYjNDM7XHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuJiM0MztcdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxuJiM0MztcdGltcGx5IEFJUl9FTjg4MTFIX1BIWVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUgsIHdoaWNoIGlzIGFuXG4mIzQzO1x0ICBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8gaXQgYW5kIG9ubHlcbiYjNDM7XHQgIGJlY29tZXMgYW4gRXRoZXJuZXQgUEhZIGFmdGVyd2FyZHMuIFRoZSBkcml2ZXIgZG93bmxvYWRzIHRoYXRcbiYjNDM7XHQgIGZpcm13YXJlIG9uY2UgaXQgYmVjb21lcyByZWFkYWJsZSwgb3IgYWRvcHRzIGZpcm13YXJlIGEgYm9vdGxvYWRlclxuJiM0MztcdCAgbGVmdCBydW5uaW5nLlxuJiM0MztcbiBjb25maWcgTURJT19TVU40SVxuIFx0dHJpc3RhdGUgXCYjMzQ7QWxsd2lubmVyIHN1bjRpIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiBcdGRlcGVuZHMgb24gQVJDSF9TVU5YSSB8fCBDT01QSUxFX1RFU1RcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxuaW5kZXggMDQ4NTg2NzQ2MDI2Mi4uMDZkMDk2Njc1ZGFjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbkBAIC02LDYgJiM0Mzs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbiBvYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuIFxuIG9iai0kKENPTkZJR19NRElPX0FJUk9IQSlcdFx0JiM0Mzs9IG1kaW8tYWlyb2hhLm9cbiYjNDM7b2JqLSQoQ09ORklHX01ESU9fQUlST0hBX0VOODgxMUgpXHQmIzQzOz0gbWRpby1haXJvaGEtZW44ODExaC5vXG4gb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKVx0XHQmIzQzOz0gbWRpby1hc3BlZWQub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQylcdFx0JiM0Mzs9IG1kaW8tYmNtLWlwcm9jLm9cbiBvYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKVx0XHQmIzQzOz0gbWRpby1iY20tdW5pbWFjLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzIyNDU1ODkxNDcyN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcbkBAIC0wLDAgJiM0MzsxLDM4MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cbiYjNDM7ICogaXQsIGFuZCBvbmx5IHRoZW4gYW4gRXRoZXJuZXQgUEhZLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ3Bpby9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfUE9MTF9NSU5fTVNcdDEwMDBcbiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXHQzMDAwMFxuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfV0FSTl9NU1x0NjAwMDBcbiYjNDM7XG4mIzQzO3N0cnVjdCBlbjg4MTFoX21jdSB7XG4mIzQzO1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuJiM0MztcdHN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayBmd19wb2xsO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBvbGxfbXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdhaXRlZF9tcztcbiYjNDM7XHR1MzIgZndfdmVyc2lvbjtcbiYjNDM7XHRib29sIHdhcm5lZDtcbiYjNDM7XHRib29sIGZ3X3J1bm5pbmc7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX3JlYWRfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgcmVnbnVtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1kaW9idXNfd3JpdGVfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgcmVnbnVtLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdFx0aW50IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1kaW9idXNfYzQ1X3JlYWRfbmVzdGVkKG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cywgYWRkciwgZGV2YWQsIHJlZ251bSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG4mIzQzO1x0XHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLFxuJiM0MztcdFx0XHRcdFx0dmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIoc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XG4mIzQzO1x0ICogZGV0YWNoLlxuJiM0MztcdCAqL1xuJiM0MztcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIWJ1cykge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQobnApO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidXMtXHUwMDNlbmFtZSA9IFwmIzM0O2Fpcm9oYS1lbjg4MTFoXCYjMzQ7O1xuJiM0MztcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslc1wmIzM0OywgZGV2X25hbWUoZGV2KSk7XG4mIzQzO1x0YnVzLVx1MDAzZXByaXYgPSBtY3U7XG4mIzQzO1x0YnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZXJlYWQpIHtcbiYjNDM7XHRcdGJ1cy1cdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcbiYjNDM7XHRcdGJ1cy1cdTAwM2V3cml0ZSA9IGVuODgxMWhfbWN1X3dyaXRlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAocGFyZW50LVx1MDAzZXJlYWRfYzQ1KSB7XG4mIzQzO1x0XHRidXMtXHUwMDNlcmVhZF9jNDUgPSBlbjg4MTFoX21jdV9yZWFkX2M0NTtcbiYjNDM7XHRcdGJ1cy1cdTAwM2V3cml0ZV9jNDUgPSBlbjg4MTFoX21jdV93cml0ZV9jNDU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApO1xuJiM0MztcdG9mX25vZGVfcHV0KG5wKTtcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIW1kaW9idXNfZ2V0X3BoeShidXMsIG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpKSB7XG4mIzQzO1x0XHQvKiBBbiBJRCByZWFkIHRoYXQgZmFpbGVkIGxlYXZlcyB0aGUgYnVzIHJlZ2lzdGVyZWQgYW5kIHRoZVxuJiM0MztcdFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1kaW9idXNfZnJlZShidXMpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1jdS1cdTAwM2VidXMgPSBidXM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlcmlhbGlzZSB3aXRoIHRoZSBQSFkgYmVsb3csIHdoaWNoIHJlYWNoZXMgdGhlIHNhbWUgcmVnaXN0ZXJzIHVuZGVyXG4mIzQzOyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBtaWlfYnVzICplbjg4MTFoX21jdV9jaGlwX2xvY2soc3RydWN0IGVuODgxMWhfbWN1ICptY3UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWN1LVx1MDAzZWJ1cztcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1cylcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYnVzKVxuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKSB7XG4mIzQzO1x0XHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XG4mIzQzO1x0XHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAhIWNoaXApO1xuJiM0MztcdFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtmaXJtd2FyZSAlMDh4IHJ1bm5pbmcgYWZ0ZXIgJXVtc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0bWN1LVx1MDAzZWZ3X3ZlcnNpb24sIG1jdS1cdTAwM2V3YWl0ZWRfbXMpO1xuJiM0MztcdFx0cmV0ID0gZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9ETSkgPzpcbiYjNDM7XHRcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRtY3UtXHUwMDNlZndfcnVubmluZyA9IHRydWU7XG4mIzQzO1x0XHRtY3UtXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XG4mIzQzO1x0XHRtY3UtXHUwMDNld2FpdGVkX21zID0gMDtcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcbiYjNDM7XHQgKiBmd25vZGVfbWRpbyBkZWZlcnMgd2hpbGUgdGhlIFBIWSBub2RlJiMzOTtzIGludGVycnVwdCBjb250cm9sbGVyIGlzXG4mIzQzO1x0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbWN1LVx1MDAzZWJ1cyA/IDAgOiBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIobWN1KTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdGlmICghbWN1LVx1MDAzZXdhcm5lZCBcdTAwMjZcdTAwMjYgbWN1LVx1MDAzZXdhaXRlZF9tcyBcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUykge1xuJiM0MztcdFx0aWYgKCFtY3UtXHUwMDNlZndfcnVubmluZylcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtubyBmaXJtd2FyZSBhZnRlciAldW1zIG9mIHdhaXRpbmcgZm9yICVzIGFuZCAlczogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBtY3UtXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXG4mIzQzO1x0XHRcdFx0IEVOODgxMUhfTUQzMl9EU1AsIEVSUl9QVFIocmV0KSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7bm8gUEhZIGF0IGFkZHJlc3MgJWQsICV1bXMgYWZ0ZXIgdGhlIGZpcm13YXJlIHN0YXJ0ZWQ6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciwgbWN1LVx1MDAzZXdhaXRlZF9tcyxcbiYjNDM7XHRcdFx0XHQgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YXJuZWQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGFzdCBpdHMgYnVkZ2V0LCBvbmx5IGEgZGVmZXJyYWwgd2lsbCBjaGFuZ2Ugb24gaXRzIG93bjogZXZlcnlcbiYjNDM7XHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xuJiM0MztcdCAqIGNvcmUgYW5kIGl0cyB1ZXZlbnRzIGZvciB0aGUgdXB0aW1lLiBGaXJtd2FyZSBmaWxlcyBhcmUgdGhlXG4mIzQzO1x0ICogZXhjZXB0aW9uLCBzaW5jZSB0aGV5IGNhbiBiZSBpbnN0YWxsZWQgYXQgYW55IHRpbWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1jdS1cdTAwM2Vmd19ydW5uaW5nIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVQUk9CRV9ERUZFUiBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbWN1LVx1MDAzZXdhaXRlZF9tcyBcdTAwM2U9IEVOODgxMUhfRldfV0FSTl9NUylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWN1LVx1MDAzZXBvbGxfbXMgPSBtaW4obWN1LVx1MDAzZXBvbGxfbXMgKiAyLCBFTjg4MTFIX0ZXX1BPTExfTUFYX01TKTtcbiYjNDM7XHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cbiYjNDM7XHRtY3UtXHUwMDNld2FpdGVkX21zICYjNDM7PSBtY3UtXHUwMDNlcG9sbF9tcztcbiYjNDM7XHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsXG4mIzQzO1x0XHRcdCAgIG1zZWNzX3RvX2ppZmZpZXMobWN1LVx1MDAzZXBvbGxfbXMpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGZpcm13YXJlIGxpdmVzIGluIHZvbGF0aWxlIFJBTTogbm8gcmVzZXQgd2hpbGUgdGhlIE1EMzIgcmVwb3J0cyByZWFkeS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYgPSBtY3UtXHUwMDNlbWRpb2RldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2UgMCkge1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O01EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghbWN1LVx1MDAzZXJlc2V0X2dwaW8pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgZmFpbGVkIHJlYWQgaXMgbm90IGEgZG9ybWFudCBjaGlwLCBzbyBkbyBub3QgdG91Y2ggYSBsaW5lIHRoYXRcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChtY3UtXHUwMDNlcmVzZXRfZ3BpbykgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRkZXZfZGJnKGRldiwgXCYjMzQ7TUQzMiBzdGF0ZSB1bmtub3duICglZCksIGxlYXZpbmcgcmVzZXQgYWxvbmVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcJiMzNDtyZXNldC1hc3NlcnQtdXNcJiMzNDssIFx1MDAyNmFzc2VydF91cyk7XG4mIzQzO1x0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXCYjMzQ7cmVzZXQtZGVhc3NlcnQtdXNcJiMzNDssIFx1MDAyNmRlYXNzZXJ0X3VzKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChtY3UtXHUwMDNlcmVzZXRfZ3BpbywgMSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtyZXNldCBub3QgYXNzZXJ0ZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhc3NlcnRfdXMpXG4mIzQzO1x0XHRmc2xlZXAoYXNzZXJ0X3VzKTtcbiYjNDM7XG4mIzQzO1x0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG1jdS1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbiYjNDM7XHRpZiAoZGVhc3NlcnRfdXMpXG4mIzQzO1x0XHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4mIzQzO1xuJiM0MztcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFtY3UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWN1LVx1MDAzZW1kaW9kZXYgPSBtZGlvZGV2O1xuJiM0MztcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgbWN1KTtcbiYjNDM7XG4mIzQzO1x0LyogUmVnaXN0cmF0aW9uIG5lZWRzIHRoaXMgb25seSBvbmNlIHRoZSBmaXJtd2FyZSBydW5zLCBidXQgYSBEVFxuJiM0MztcdCAqIGhvbGUgc2hvdWxkIGZhaWwgdGhlIGJpbmQgbm93LCBub3QgYXMgYSB3b3JrLWl0ZW0gZXJyb3IgbGF0ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7bWRpb1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFVixcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O25vIG1kaW8gbm9kZSBkZXNjcmliaW5nIHRoZSBQSFlcXG5cJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KG5wKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNvcmUgY2xhaW1zIHJlc2V0LWdwaW9zIG9ubHkgZm9yIGRldmljZXMgZmxhZ2dlZCBhcyBQSFlzLiAqL1xuJiM0MztcdG1jdS1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcJiMzNDtyZXNldFwmIzM0OywgR1BJT0RfQVNJUyk7XG4mIzQzO1x0aWYgKElTX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobWN1LVx1MDAzZXJlc2V0X2dwaW8pLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCByZXNldCBHUElPXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1jdS1cdTAwM2VyZXNldF9ncGlvKVxuJiM0MztcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWN1LVx1MDAzZXJlc2V0X2dwaW8sIFwmIzM0O0VOODgxMUggcmVzZXRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRtY3UtXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsIGVuODgxMWhfbWN1X2Z3X3BvbGwpO1xuJiM0MztcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxuJiM0MztcdCAqIGEgc3VzcGVuZGluZyBidXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG4mIzQzO1xuJiM0MztcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZtY3UtXHUwMDNlZndfcG9sbCk7XG4mIzQzO1x0aWYgKG1jdS1cdTAwM2VidXMpIHtcbiYjNDM7XHRcdG1kaW9idXNfdW5yZWdpc3RlcihtY3UtXHUwMDNlYnVzKTtcbiYjNDM7XHRcdG1kaW9idXNfZnJlZShtY3UtXHUwMDNlYnVzKTtcbiYjNDM7XHRcdG1jdS1cdTAwM2VidXMgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqY2hpcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBOb3RoaW5nIHRvIHJlZG86IHRoZSBwb2xsIGlzIGFybWVkIGFuZCB0aGF3cyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gKi9cbiYjNDM7XHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0JiMzOTtzIFBIWSByZXN1bWVzIHJpZ2h0IGFmdGVyIHRoaXNcbiYjNDM7XHQgKiBvbmUgYW5kIGNhbGxzIHBoeV9pbml0X2h3KCksIHdoaWNoIG5lZWRzIHRoZSBmaXJtd2FyZSBieSB0aGVuLlxuJiM0MztcdCAqL1xuJiM0MztcdGNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTtcbiYjNDM7XHRlbjg4MTFoX21jdV9yZXNldF9pZl9kb3JtYW50KG1jdSwgISFjaGlwKTtcbiYjNDM7XHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XG4mIzQzO1x0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0LyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHNcbiYjNDM7XHRcdCAqIG93biByZXN1bWUgaGFzIGFscmVhZHkgZmFpbGVkIGJ5IHRoZW4gYW5kIG5vdGhpbmcgY2FsbHNcbiYjNDM7XHRcdCAqIHBoeV9pbml0X2h3KCkgdHdpY2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtmaXJtd2FyZSBub3QgcmVzdG9yZWQsIHJlbG9hZGluZzogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0bWN1LVx1MDAzZWZ3X3J1bm5pbmcgPSBmYWxzZTtcbiYjNDM7XHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbiYjNDM7XHRcdG1jdS1cdTAwM2V3YWl0ZWRfbXMgPSAwO1xuJiM0MztcdFx0bWN1LVx1MDAzZXdhcm5lZCA9IGZhbHNlO1xuJiM0MztcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGVuODgxMWhfbWN1X3BtX29wcywgTlVMTCwgZW44ODExaF9tY3VfcmVzdW1lKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVuODgxMWhfbWN1X29mX21hdGNoW10gPSB7XG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdVwmIzM0OyB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBlbjg4MTFoX21jdV9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGVuODgxMWhfbWN1X2RyaXZlciA9IHtcbiYjNDM7XHQucHJvYmUgPSBlbjg4MTFoX21jdV9wcm9iZSxcbiYjNDM7XHQucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLFxuJiM0MztcdC5tZGlvZHJ2LmRyaXZlciA9IHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7YWlyb2hhLWVuODgxMWgtbWN1XCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gZW44ODExaF9tY3Vfb2ZfbWF0Y2gsXG4mIzQzO1x0XHQucG0gPSBwbV9zbGVlcF9wdHIoXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcbiYjNDM7XHRcdC8qIFRlYXJpbmcgdGhlIGNoaWxkIGJ1cyBkb3duIHVuZGVyIGFuIGF0dGFjaGVkIFBIWSBpcyBub3RcbiYjNDM7XHRcdCAqIHNvbWV0aGluZyB0aGlzIGRyaXZlciBjYW4gbWFrZSBzYWZlIG9uIGl0cyBvd24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdC5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKGVuODgxMWhfbWN1X2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcbiYjNDM7TU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7QWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IGVjN2M0NGNhNjhlN2QuLjg2MWI4ZmU0OWUyNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0yMCwyMSAmIzQzOzIwLDE1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG4gXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFx0XHQweDAzYTJhNDExXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcdFx0MHhjMGZmMDRhMFxuIFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFwmIzM0O2Fpcm9oYS9FdGhNRDMyLmRtLmJpblwmIzM0O1xuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFx0XCYjMzQ7YWlyb2hhL0V0aE1EMzIuRFNQLmJpblwmIzM0O1xuICNkZWZpbmUgQU44ODExSEJfTUQzMl9ETVx0XCYjMzQ7YWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRNLmJpblwmIzM0O1xuICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1BcdFwmIzM0O2Fpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5EU1AuYmluXCYjMzQ7XG4gXG4tI2RlZmluZSBBSVJfRldfQUREUl9ETVx0MHgwMDAwMDAwMFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQXHQweDAwMTAwMDAwXG4tXG4gLyogTUlJIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgQUlSX0FVWF9DVFJMX1NUQVRVU1x0XHQweDFkXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfTUFTS1x0R0VOTUFTSyg0LCAyKVxuQEAgLTQ0LDggJiM0MzszOCw2IEBAXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFx0MHhjXG4gXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcdFx0MHg4MDA5XG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXHRcdFx0MHgwMlxuIFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcdFx0MHg4MDBiXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVx0XHQweDgwMGNcbkBAIC0xMDgsOCAmIzQzOzEwMCw2IEBAXG4gI2RlZmluZSBFTjg4MTFIXzJQNUdfTFBBXHRcdDB4M2IzMFxuICNkZWZpbmUgICBFTjg4MTFIXzJQNUdfTFBBXzJQNUdcdFx0XHRCSVQoMClcbiBcbi0jZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlx0XHQweDNiM2Ncbi1cbiAjZGVmaW5lIEVOODgxMUhfUE9MQVJJVFlcdFx0MHhjYTBmOFxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTFx0XHRCSVQoMClcbiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFXHRcdEJJVCgxKVxuQEAgLTEyMiwxMiAmIzQzOzExMiw2IEBAXG4gI2RlZmluZSBFTjg4MTFIX0NMS19DR01cdFx0XHQweGNmOTU4XG4gI2RlZmluZSAgIEVOODgxMUhfQ0xLX0NHTV9DS09cdFx0XHRCSVQoMjYpXG4gXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMVx0XHQweDBmMDAxOFxuLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVFx0XHQweDBcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXHRcdDB4MVxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJcdFx0MHg4MDAwMDBcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkdcdFx0QklUKDExKVxuLVxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX1NFVDFcdFx0MHhmMDIwY1xuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjJcdFx0MHhmMDIxOFxuICNkZWZpbmUgQU44ODExSEJfQ1JDX1BNX01PTjNcdFx0MHhmMDIxY1xuQEAgLTI3MCw4NiAmIzQzOzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IHJldDtcbi1cdHUxNiB2YWw7XG4tXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCAmIzQzOz0gNCkge1xuLVx0XHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXHUwMDI2ZnctXHUwMDNlZGF0YVtvZmZzZXQgJiM0MzsgMl0pO1xuLVx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmZ3LVx1MDAzZWRhdGFbb2Zmc2V0XSk7XG4tXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBhaXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxuLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxuLXtcbi1cdGludCBzYXZlZF9wYWdlO1xuLVx0aW50IHJldCA9IDA7XG4tXG4tXHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbi1cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O2Zpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cJiMzNDssXG4tXHRcdFx0ICAgZnctXHUwMDNlc2l6ZSk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbi1cbi1cdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBfX2Fpcl93cml0ZV9idWYocGh5ZGV2LCBhZGRyZXNzLCBmdyk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgIGFkZHJlc3MsIHJldCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQsIHJlZ192YWx1ZTtcbiYjNDM7XHRpbnQgcmV0ID0gYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGZhbHNlKTtcbiBcbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2FkcyAqL1xuLVx0cmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLFxuLVx0XHRcdFx0XHRFTjg4MTFIX1BIWV9GV19TVEFUVVMsIHJlZ192YWx1ZSxcbi1cdFx0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuLVx0XHRcdFx0XHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtNQ1Ugbm90IHJlYWR5OiAweCV4XFxuXCYjMzQ7LCByZWdfdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxuQEAgLTQxMSw3ICYjNDM7MzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcbiYjNDM7XHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBhZGRyZXNzLCBmdywgZmFsc2UpO1xuIFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC01MDcsNTQgJiM0Mzs0MTksMTEgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXG4gc3RhdGljIGludCBlbjg4MTFoX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjtcbiYjNDM7XHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbi1cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuLVx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuLVxuLVx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuLVxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4tXG4tZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tXG4mIzQzO1x0cmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIFx1MDAyNnByaXYtXHUwMDNlZmlybXdhcmVfdmVyc2lvbixcbiYjNDM7XHRcdFx0XHQgICAgICBmYWxzZSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7TG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFxuQEAgLTExNTYsOCAmIzQzOzEwMjUsOCBAQCBzdGF0aWMgaW50IGVuODgxMWhfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi9cbi1cdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSBmYWxzZTtcbiYjNDM7XHQvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gKHJldCA9PSAxKTtcbiBcbiBcdC8qIE1ESU9fREVWUzEvMiBlbXB0eSwgc28gc2V0IG1tZHNfcHJlc2VudCBiaXRzIGhlcmUgKi9cbiBcdHBoeWRldi1cdTAwM2VjNDVfaWRzLm1tZHNfcHJlc2VudCB8PSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX0FOO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcbmluZGV4IDUxNDFkYjE5ZmE1ZWUuLjdmNzUzMDI3MzYwMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcbkBAIC04LDM3ICYjNDM7OCw0MiBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDthaXJfcGh5X2xpYi5oXCYjMzQ7XG4gXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4mIzQzO1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4mIzQzO1x0XHRcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4tXHRcdFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4mIzQzO1x0cGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbiBcdGlmIChwYnVzX2RhdGFfaGlnaCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBidXNfZGF0YV9oaWdoO1xuIFxuLVx0cGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuJiM0MztcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuIFx0aWYgKHBidXNfZGF0YV9sb3cgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfbG93O1xuIFxuQEAgLTQ2LDY0ICYjNDM7NTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4mIzQzO1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4mIzQzO1x0XHRcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4tXHRcdFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbiYjNDM7XHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdHUzMiBwYnVzX2RhdGFfb2xkLCBwYnVzX2RhdGFfbmV3O1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcbiYjNDM7XHRcdFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbiYjNDM7XHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbiYjNDM7XHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xuIFx0aWYgKHBidXNfZGF0YV9oaWdoIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XG4gXG4tXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4mIzQzO1x0cGJ1c19kYXRhX2xvdyA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4gXHRpZiAocGJ1c19kYXRhX2xvdyBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBidXNfZGF0YV9sb3c7XG4gXG5AQCAtMTEyLDIzICYjNDM7MTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxuJiM0MztcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuJiM0MztcdFx0XHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuJiM0MztcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0xNDQsNyAmIzQzOzE1MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcbkBAIC0xNjMsNyAmIzQzOzE3MSw3IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbiBcbiBcdGlmIChzYXZlZF9wYWdlIFx1MDAzZT0gMCkge1xuLVx0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBwYnVzX2FkZHJlc3MsXG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbkBAIC0xODMsOCAmIzQzOzE5MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzayxcbi1cdFx0XHRcdFx0XHRzZXQpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRtYXNrLCBzZXQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4gXHRcdFx0XHQgICBwYnVzX2FkZHJlc3MsIHJldCk7XG5AQCAtMTk0LDYgJiM0MzsyMDIsMzQzIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KTtcbiBcbiYjNDM7c3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbiYjNDM7XHRcdFx0ICAgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTE2IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuJiM0MztcdFx0XHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbiYjNDM7XHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4mIzQzO1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuOyBvZmZzZXQgJiM0Mzs9IDQpIHtcbiYjNDM7XHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZkYXRhW29mZnNldCAmIzQzOyAyXSk7XG4mIzQzO1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwgdmFsKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmRhdGFbb2Zmc2V0XSk7XG4mIzQzO1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cbiYjNDM7c3RhdGljIGludCBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gc2F2ZWRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuJiM0MztcdFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsIHBhZ2UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzYXZlZF9wYWdlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiYjNDM7XHRcdFx0XHQgICBpbnQgc2F2ZWRfcGFnZSwgaW50IHBhZ2UsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuJiM0MztcdFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxuJiM0MztcdFx0XHRcdFx0ICBzYXZlZF9wYWdlKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByZXN0b3JlIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXQgPSByZXN0b3JlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuJiM0MztzdGF0aWMgdm9pZCBhaXJfbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAobmVzdGVkKVxuJiM0MztcdFx0bWRpb2Rldl9sb2NrX25lc3RlZChtZGlvZGV2KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4mIzQzO1x0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGNodW5rLCBkb25lID0gMDtcbiYjNDM7XHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0O2Zpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGZ3LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAoZG9uZSBcdTAwM2MgZnctXHUwMDNlc2l6ZSkge1xuJiM0MztcdFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVx1MDAzZXNpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpO1xuJiM0MztcbiYjNDM7XHRcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XG4mIzQzO1x0XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuJiM0MztcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gc2F2ZWRfcGFnZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICYjNDM7IGRvbmUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBmdy1cdTAwM2VkYXRhICYjNDM7IGRvbmUsIGNodW5rKTtcbiYjNDM7XHRcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHJldCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGRvbmUgJiM0Mzs9IGNodW5rO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2Z3X3dyaXRlX2J1Zik7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgKnBidXNfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgICBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4mIzQzO1xuJiM0MztcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XG4mIzQzO1x0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuJiM0MztcdGlmIChzYXZlZF9wYWdlIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyZXQgPSBzYXZlZF9wYWdlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XG4mIzQzO1x0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbiYjNDM7XG4mIzQzO1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcGJ1c19kYXRhKTtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4mIzQzO1x0XHRcdFx0XHR1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbiYjNDM7XG4mIzQzO1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4mIzQzO1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgcGJ1c19hZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRtYXNrLCBzZXQpO1xuJiM0MztcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogbW1kX3BoeV9yZWFkKCkgZHJvcHMgdGhlIGVycm9ycyBmcm9tIHRoZSB0aHJlZSB3cml0ZXMgdGhhdCBzZWxlY3QgdGhlXG4mIzQzOyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19haXJfbW1kX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MTYgZGV2YWQsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4mIzQzO1x0aW50IGFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLCBkZXZhZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLFxuJiM0MztcdFx0XHQgICAgICBkZXZhZCB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XHRyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTtcbiYjNDM7XHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gYWlyX21tZF9zdGF0dXNfcmVhZChtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9tY3VfcnVubmluZyk7XG4mIzQzO1xuJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQsIHJlZ192YWx1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxuJiM0MztcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2Fkcy4gQSByZWFkXG4mIzQzO1x0ICogZXJyb3IgZW5kcyB0aGUgcG9sbCBhdCBvbmNlLCBsaWtlIHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhaXJfbW1kX3N0YXR1c19yZWFkLCByZWdfdmFsdWUsXG4mIzQzO1x0XHRcdFx0cmVnX3ZhbHVlIFx1MDAzYyAwIHx8XG4mIzQzO1x0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuJiM0MztcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlLCBtZGlvZGV2LCBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZWdfdmFsdWUgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmVnX3ZhbHVlO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9kYmcoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIFwmIzM0O01DVSBub3QgcmVhZHk6IDB4JXhcXG5cJiMzNDssIHJlZ192YWx1ZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KTtcbiYjNDM7XG4mIzQzO2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbiYjNDM7XHRcdFx0ICAgIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuJiM0MztcdFx0XHRcdFx0XHQgZndfdmVyc2lvbiwgbmVzdGVkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICpmd192ZXJzaW9uKTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxuJiM0MztcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxuJiM0MztcdFx0XHRcdFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyxcbiYjNDM7XHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9ETSwgZncxLCBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9md193cml0ZV9idWYobWRpb2RldiwgQUlSX0ZXX0FERFJfRFNQLCBmdzIsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbiYjNDM7XHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDAsXG4mIzQzO1x0XHRcdFx0XHQgICBuZXN0ZWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuJiM0MztcdFx0XHRcdFx0IGZ3X3ZlcnNpb24sIG5lc3RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbiYjNDM7XG4mIzQzO1x0ZGV2X2luZm8oZGV2LCBcJiMzNDtNRDMyIGZpcm13YXJlIHZlcnNpb246ICUwOHhcXG5cJiMzNDssICpmd192ZXJzaW9uKTtcbiYjNDM7XG4mIzQzO2Fpcl9md19kb3dubG9hZF9vdXQ6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShmdzIpO1xuJiM0MztcbiYjNDM7YWlyX2Z3X2Rvd25sb2FkX3JlbDE6XG4mIzQzO1x0cmVsZWFzZV9maXJtd2FyZShmdzEpO1xuJiM0MztcbiYjNDM7XHQvKiBObyBlcnJvciBwcmludDogY2FsbGVycyBsb2cgb24gdGhlaXIgb3duIHRlcm1zLCBhbmQgYSBwb2xsZXJcbiYjNDM7XHQgKiB3b3VsZCByZXBlYXQgaXQgb24gZXZlcnkgcmV0cnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7XG4mIzQzO1xuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmggYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxuaW5kZXggMDFiYjMyZTdjN2M5NS4uNTZiYTk4N2E2OGNjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaFxuQEAgLTEwLDEyICYjNDM7MTAsMTkgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFx1MDAzZVxuJiM0MztcbiAjZGVmaW5lIEFJUl9FWFRfUEFHRV9BQ0NFU1NcdFx0MHgxZlxuIFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX1NUQU5EQVJEXHRcdDB4MDAwMFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzFcdFx0MHgwMDAxXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfNFx0XHQweDAwMDRcbiBcbiYjNDM7LyogQnl0ZXMgd3JpdHRlbiBiZXR3ZWVuIGJ1cyByZWxlYXNlcywgc28gdGhlIG90aGVyIFBIWXMgb24gaXQgZ2V0IGEgdHVybi5cbiYjNDM7ICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFJUl9GV19DSFVOS19CWVRFU1x0XHQyMzA0XG4mIzQzO1xuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cbiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFXHRcdFx0MHgxMFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXHRcdDB4MDAwMFxuQEAgLTI5LDYgJiM0MzszNiwyMCBAQFxuICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfSElHSFx0XHQweDE3XG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9MT1dcdFx0MHgxOFxuIFxuJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RNXHRcdFx0MHgwMDAwMDAwMFxuJiM0MzsjZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0XHRcdDB4MDAxMDAwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcdFx0MHgwZjAwMThcbiYjNDM7I2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXHRcdDB4MFxuJiM0MzsjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXHRcdDB4MVxuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXHRcdDB4ODAwMDAwXG4mIzQzOyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTXHRcdDB4ODAwOVxuJiM0MzsjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcdFx0XHQweDAyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlx0XHQweDNiM2NcbiYjNDM7XG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0XHRcdFx0dTMyIG1hc2ssIHUzMiBzZXQpO1xuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG5AQCAtMzgsNCAmIzQzOzU5LDEwIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgYWlyX3BoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKTtcbiBcbiYjNDM7c3RydWN0IGZpcm13YXJlO1xuJiM0MztcbiYjNDM7aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbiYjNDM7XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpO1xuJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7XG4mIzQzO1xuICNlbmRpZiAvKiBfX0FJUl9QSFlfTElCX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0OTRkYzZjMTAyMmNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhcbkBAIC0wLDAgJiM0MzsxLDI1IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2xsYWJvcmEgTHRkLlxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgTG91aXMtQWxleGlzIEV5cmF1ZCBcdTAwM2Nsb3Vpc2FsZXhpcy5leXJhdWRAY29sbGFib3JhLmNvbVx1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXG4mIzQzOyNkZWZpbmUgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCBtZGlvX2RldmljZTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFx0XCYjMzQ7YWlyb2hhL0V0aE1EMzIuZG0uYmluXCYjMzQ7XG4mIzQzOyNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFx0XHRcJiMzNDthaXJvaGEvRXRoTUQzMi5EU1AuYmluXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm5zIDEgcnVubmluZywgMCBkb3JtYW50LCBuZWdhdGl2ZSBvbiBhIGZhaWxlZCBzdGF0dXMgcmVhZC4gKi9cbiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xuJiM0MzsvKiBSZXR1cm5zIDEgd2hlbiBpdCBhZG9wdGVkIGZpcm13YXJlIHRoYXQgd2FzIGFscmVhZHkgcnVubmluZy4gKi9cbiYjNDM7aW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLFxuJiM0MztcdFx0XHQgICAgYm9vbCBuZXN0ZWQpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmU3NGE4ZjVjZjVjNjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjI4NCw2ICYjNDM7MjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcbiBcdF9fcHJpbnRmKDIsIDMpO1xuIGNoYXIgKnBoeV9hdHRhY2hlZF9pbmZvX2lycShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRzIERldmljZSBUcmVlIGJpbmRpbmdzLCBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkvTUNVIGhhcmR3YXJlLiBUaGVzZSBkcml2ZXJzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBBaXJvaGEgaGFyZHdhcmUgKGFuZCByZXF1aXJlIERldmljZSBUcmVlIE1ESU8gZW51bWVyYXRpb24pIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMjc2NWI3NzlhNDFiMmQ4M2Y0OTBiZGExZThjOTM2MTJmNTE4MWFiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwMTo1MjowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdiZTBhYjg2MjI2NjEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sCkBAIC0wLDAgJiM0MzsxLDExNyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKQomIzQzOyVZQU1MIDEuMgomIzQzOy0tLQomIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBBaXJvaGEgRU44ODExSCBQSFkgTUNVCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEFsZWtzZWkgU3Zpcmlka2luICZsdDtmQGxleC5sYSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgVGhlIEFpcm9oYSBFTjg4MTFIIDIuNUcgUEhZIGlzIGJ1aWx0IGFyb3VuZCBhbiBNRDMyIGNvcmUgdGhhdCBleGVjdXRlcwomIzQzOyAgZmlybXdhcmUgZnJvbSB2b2xhdGlsZSBSQU0uIFRoZSBjaGlwIGFuc3dlcnMgYW4gTURJTyBhZGRyZXNzIGZyb20KJiM0MzsgIHBvd2VyLW9uLCBidXQgdGhlIFBIWSBmdW5jdGlvbiBkb2VzIG5vdCBleGlzdCB1bnRpbCBmaXJtd2FyZSBoYXMgYmVlbgomIzQzOyAgbG9hZGVkIG92ZXIgTURJTywgYW5kIGl0IGRpc2FwcGVhcnMgYWdhaW4gaWYgdGhhdCBSQU0gaXMgY2xlYXJlZC4KJiM0MzsKJiM0MzsgIFRoaXMgbm9kZSBkZXNjcmliZXMgdGhlIE1EMzIgY29yZS4gVGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIGEgY2hpbGQKJiM0MzsgIE1ESU8gYnVzIGJlbG93IGl0LCBhdCB0aGUgc2FtZSBhZGRyZXNzIHRoZSBjb3JlIG9jY3VwaWVzIG9uIHRoZSBwYXJlbnQKJiM0MzsgIGJ1cywgYW5kIG9ubHkgd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZy4KJiM0MzsKJiM0MzsgIFRoZSByZXNldCBsaW5lIGlzIHdpcmVkIHRvIHRoZSBjb3JlLCBhbmQgYXNzZXJ0aW5nIGl0IGNsZWFycyB0aGUKJiM0MzsgIGZpcm13YXJlIFJBTS4gSXQgdGhlcmVmb3JlIGJlbG9uZ3MgdG8gdGhpcyBub2RlOiBhIHJlc2V0IGRlc2NyaWJlZCBvbgomIzQzOyAgdGhlIFBIWSBub2RlIHdvdWxkIGJlIHB1bHNlZCBieSB0aGF0IG5vZGUmIzM5O3Mgb3duIGxpZmVjeWNsZSwgd2hhdGV2ZXIKJiM0MzsgIHRoZSBjb3JlIGlzIGRvaW5nLgomIzQzOwomIzQzOyAgQSBib2FyZCB0aGF0IGhhcyBmaXJtd2FyZSBpbiBoYW5kIHdoaWxlIGl0cyBNRElPIGJ1cyBpcyBlbnVtZXJhdGVkIGNhbgomIzQzOyAgZGVzY3JpYmUgdGhlIFBIWSBvbiBpdHMgb3duLCBhcyBhaXJvaGEsZW44ODExaC55YW1sIGRvZXMsIGFuZCB0aGF0IGZvcm0KJiM0MzsgIHN0YXlzIHZhbGlkLiBUaGlzIGJpbmRpbmcgaXMgZm9yIHRoZSBib2FyZHMgd2hlcmUgZmlybXdhcmUgYXJyaXZlcwomIzQzOyAgbGF0ZXIsIHNvIHRoYXQgdGhlcmUgaXMgbm8gUEhZIHRvIGRlc2NyaWJlIHVudGlsIHRoZSBjb3JlIGhhcyBpdC4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgJG5vZGVuYW1lOgomIzQzOyAgICBwYXR0ZXJuOiAmIzM0O15tY3VAWzAtOWEtZl0mIzQzOyQmIzM0OwomIzQzOwomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgY29uc3Q6IGFpcm9oYSxlbjg4MTFoLW1jdQomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgcmVzZXQtZ3Bpb3M6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFRoZSBHUElPIHBoYW5kbGUgYW5kIHNwZWNpZmllciBmb3IgdGhlIHJlc2V0IHNpZ25hbCB3aXJlZCB0byB0aGUKJiM0MzsgICAgICBNRDMyIGNvcmUuCiYjNDM7CiYjNDM7ICByZXNldC1hc3NlcnQtdXM6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzCiYjNDM7ICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLgomIzQzOwomIzQzOyAgcmVzZXQtZGVhc3NlcnQtdXM6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgZGVhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXMKJiM0MzsgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuCiYjNDM7CiYjNDM7ICBtZGlvOgomIzQzOyAgICAkcmVmOiBtZGlvLnlhbWwjCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFRoZSBidXMgdGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcsIGF0CiYjNDM7ICAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGlzIG5vZGUgb2NjdXBpZXMgb24gdGhlIHBhcmVudCBidXMuIE9ubHkgdGhhdAomIzQzOyAgICAgIG9uZSBhZGRyZXNzIGlzIHBhc3NlZCB0aHJvdWdoLgomIzQzOwomIzQzOyAgICBwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgICAgICAmIzM5O15ldGhlcm5ldC1waHlAWzAtOWEtZl0mIzQzOyQmIzM5OzoKJiM0MzsgICAgICAgIHR5cGU6IG9iamVjdAomIzQzOyAgICAgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjCiYjNDM7ICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2UKJiM0MzsgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzOiBmYWxzZQomIzQzOyAgICAgICAgICByZXNldC1kZWFzc2VydC11czogZmFsc2UKJiM0MzsKJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICBUaGUgcmVzZXQgbGluZSBiZWxvbmdzIHRvIHRoZSBNQ1Ugbm9kZSBhYm92ZS4gQSByZXNldCBkZXNjcmliZWQKJiM0MzsgICAgICAgICAgaGVyZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhpcyBub2RlJiMzOTtzIG93biBsaWZlY3ljbGUsIGFuZCB0aGF0IGVyYXNlcwomIzQzOyAgICAgICAgICB0aGUgZmlybXdhcmUgdGhhdCBjcmVhdGVkIHRoaXMgUEhZLgomIzQzOwomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gcmVnCiYjNDM7ICAtIG1kaW8KJiM0MzsKJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmgmZ3Q7CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaCZndDsKJiM0MzsKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgbWN1QGQgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdSYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweGQmZ3Q7OwomIzQzOyAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gJmx0OyZhbXA7cGlvIDE0IEdQSU9fQUNUSVZFX0xPVyZndDs7CiYjNDM7ICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gJmx0OzEwMDAwJmd0OzsKJiM0MzsgICAgICAgICAgICByZXNldC1kZWFzc2VydC11cyA9ICZsdDsyMDAwMCZndDs7CiYjNDM7CiYjNDM7ICAgICAgICAgICAgbWRpbyB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgZXRoZXJuZXQtcGh5QGQgewomIzQzOyAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7ZXRoZXJuZXQtcGh5LWlkMDNhMi5hNDExJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MHhkJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMtZXh0ZW5kZWQgPSAmbHQ7JmFtcDtwaW8gMTUgSVJRX1RZUEVfTEVWRUxfTE9XJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYjIzZmI2ZjJmNGVmNC4uM2JkODZkZjJiZTU3MSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTc1MCw2ICYjNDM7NzUwLDE0IEBAIFM6CVN1cHBvcnRlZAogRjoJZnMvYWlvLmMKIEY6CWluY2x1ZGUvbGludXgvKmFpbyouaAogCiYjNDM7QUlST0hBIEVOODgxMUggTUNVIE1ESU8gRFJJVkVSCiYjNDM7TToJQWxla3NlaSBTdmlyaWRraW4gJmx0O2ZAbGV4LmxhJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbAomIzQzO0Y6CWRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jCiYjNDM7RjoJaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaAomIzQzOwogQUlST0hBIEVUSEVSTkVUIERSSVZFUgogTToJTG9yZW56byBCaWFuY29uaSAmbHQ7bG9yZW56b0BrZXJuZWwub3JnJmd0OwogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZwppbmRleCBkNDQyNzhmMjZmYWJlLi4zM2VmYzZiYzg3NWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9LY29uZmlnCkBAIC0yOSw2ICYjNDM7MjksMTkgQEAgY29uZmlnIE1ESU9fQUlST0hBCiAJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE1ESU8gYnVzc2VzIGZvdW5kIGluIHRoZQogCSAgQWlyb2hhIEFONzU4MyBTb0MmIzM5O3MuCiAKJiM0Mztjb25maWcgTURJT19BSVJPSEFfRU44ODExSAomIzQzOwl0cmlzdGF0ZSAmIzM0O0Fpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnQmIzM0OwomIzQzOwlkZXBlbmRzIG9uIE9GX01ESU8KJiM0MzsJZGVwZW5kcyBvbiBGV19MT0FERVIKJiM0MzsJc2VsZWN0IEFJUl9ORVRfUEhZTElCCiYjNDM7CWltcGx5IEFJUl9FTjg4MTFIX1BIWQomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCwgd2hpY2ggaXMgYW4KJiM0MzsJICBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG8gaXQgYW5kIG9ubHkKJiM0MzsJICBiZWNvbWVzIGFuIEV0aGVybmV0IFBIWSBhZnRlcndhcmRzLiBUaGUgZHJpdmVyIGRvd25sb2FkcyB0aGF0CiYjNDM7CSAgZmlybXdhcmUgb25jZSBpdCBiZWNvbWVzIHJlYWRhYmxlLCBvciBhZG9wdHMgZmlybXdhcmUgYSBib290bG9hZGVyCiYjNDM7CSAgbGVmdCBydW5uaW5nLgomIzQzOwogY29uZmlnIE1ESU9fU1VONEkKIAl0cmlzdGF0ZSAmIzM0O0FsbHdpbm5lciBzdW40aSBNRElPIGludGVyZmFjZSBzdXBwb3J0JiMzNDsKIAlkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZQppbmRleCAwNDg1ODY3NDYwMjYyLi4wNmQwOTY2NzVkYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUKQEAgLTYsNiAmIzQzOzYsNyBAQCBvYmotJChDT05GSUdfRldOT0RFX01ESU8pCSYjNDM7PSBmd25vZGVfbWRpby5vCiBvYmotJChDT05GSUdfT0ZfTURJTykJCSYjNDM7PSBvZl9tZGlvLm8KIAogb2JqLSQoQ09ORklHX01ESU9fQUlST0hBKQkJJiM0Mzs9IG1kaW8tYWlyb2hhLm8KJiM0MztvYmotJChDT05GSUdfTURJT19BSVJPSEFfRU44ODExSCkJJiM0Mzs9IG1kaW8tYWlyb2hhLWVuODgxMWgubwogb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKQkJJiM0Mzs9IG1kaW8tYXNwZWVkLm8KIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQykJCSYjNDM7PSBtZGlvLWJjbS1pcHJvYy5vCiBvYmotJChDT05GSUdfTURJT19CQ01fVU5JTUFDKQkJJiM0Mzs9IG1kaW8tYmNtLXVuaW1hYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyMjQ1NTg5MTQ3MjcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYwpAQCAtMCwwICYjNDM7MSwzODIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIFRoZSBFTjg4MTFIIGlzIGFuIE1EMzIgbWljcm9jb250cm9sbGVyIHVudGlsIGZpcm13YXJlIGlzIGRvd25sb2FkZWQgaW50bwomIzQzOyAqIGl0LCBhbmQgb25seSB0aGVuIGFuIEV0aGVybmV0IFBIWS4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBbGVrc2VpIFN2aXJpZGtpbiAmbHQ7ZkBsZXgubGEmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Zpcm13YXJlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2dwaW8vY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgRU44ODExSF9GV19QT0xMX01JTl9NUwkxMDAwCiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TCTMwMDAwCiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX1dBUk5fTVMJNjAwMDAKJiM0MzsKJiM0MztzdHJ1Y3QgZW44ODExaF9tY3UgewomIzQzOwlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CiYjNDM7CXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CiYjNDM7CXN0cnVjdCBkZWxheWVkX3dvcmsgZndfcG9sbDsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1czsKJiM0MzsJdW5zaWduZWQgaW50IHBvbGxfbXM7CiYjNDM7CXVuc2lnbmVkIGludCB3YWl0ZWRfbXM7CiYjNDM7CXUzMiBmd192ZXJzaW9uOwomIzQzOwlib29sIHdhcm5lZDsKJiM0MzsJYm9vbCBmd19ydW5uaW5nOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChhZGRyICE9IG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXR1cm4gbWRpb2J1c19yZWFkX25lc3RlZChtY3UtJmd0O21kaW9kZXYtJmd0O2J1cywgYWRkciwgcmVnbnVtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoYWRkciAhPSBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1kaW9idXNfd3JpdGVfbmVzdGVkKG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLCBhZGRyLCByZWdudW0sIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCwKJiM0MzsJCQkJaW50IHJlZ251bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoYWRkciAhPSBtY3UtJmd0O21kaW9kZXYtJmd0O2FkZHIpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcmV0dXJuIG1kaW9idXNfYzQ1X3JlYWRfbmVzdGVkKG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCwKJiM0MzsJCQkJIGludCByZWdudW0sIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgIT0gbWN1LSZndDttZGlvZGV2LSZndDthZGRyKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LSZndDttZGlvZGV2LSZndDtidXMsIGFkZHIsIGRldmFkLCByZWdudW0sCiYjNDM7CQkJCQl2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X2J1c19yZWdpc3RlcihzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpwYXJlbnQgPSBtY3UtJmd0O21kaW9kZXYtJmd0O2J1czsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttY3UtJmd0O21kaW9kZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucDsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtJmd0O29mX25vZGUsICYjMzQ7bWRpbyYjMzQ7KTsKJiM0MzsJaWYgKCFucCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwkvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0CiYjNDM7CSAqIGRldGFjaC4KJiM0MzsJICovCiYjNDM7CWJ1cyA9IG1kaW9idXNfYWxsb2MoKTsKJiM0MzsJaWYgKCFidXMpIHsKJiM0MzsJCW9mX25vZGVfcHV0KG5wKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1cy0mZ3Q7bmFtZSA9ICYjMzQ7YWlyb2hhLWVuODgxMWgmIzM0OzsKJiM0MzsJc25wcmludGYoYnVzLSZndDtpZCwgTUlJX0JVU19JRF9TSVpFLCAmIzM0OyVzJiMzNDssIGRldl9uYW1lKGRldikpOwomIzQzOwlidXMtJmd0O3ByaXYgPSBtY3U7CiYjNDM7CWJ1cy0mZ3Q7cGFyZW50ID0gZGV2OwomIzQzOwlpZiAocGFyZW50LSZndDtyZWFkKSB7CiYjNDM7CQlidXMtJmd0O3JlYWQgPSBlbjg4MTFoX21jdV9yZWFkOwomIzQzOwkJYnVzLSZndDt3cml0ZSA9IGVuODgxMWhfbWN1X3dyaXRlOwomIzQzOwl9CiYjNDM7CWlmIChwYXJlbnQtJmd0O3JlYWRfYzQ1KSB7CiYjNDM7CQlidXMtJmd0O3JlYWRfYzQ1ID0gZW44ODExaF9tY3VfcmVhZF9jNDU7CiYjNDM7CQlidXMtJmd0O3dyaXRlX2M0NSA9IGVuODgxMWhfbWN1X3dyaXRlX2M0NTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgbnApOwomIzQzOwlvZl9ub2RlX3B1dChucCk7CiYjNDM7CWlmICghcmV0ICZhbXA7JmFtcDsgIW1kaW9idXNfZ2V0X3BoeShidXMsIG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcikpIHsKJiM0MzsJCS8qIEFuIElEIHJlYWQgdGhhdCBmYWlsZWQgbGVhdmVzIHRoZSBidXMgcmVnaXN0ZXJlZCBhbmQgdGhlCiYjNDM7CQkgKiBQSFkgYWJzZW50OyBvZl9tZGlvYnVzX3JlZ2lzdGVyKCkgcmV0dXJucyAwIGVpdGhlciB3YXkuCiYjNDM7CQkgKi8KJiM0MzsJCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQltZGlvYnVzX2ZyZWUoYnVzKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWN1LSZndDtidXMgPSBidXM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXJpYWxpc2Ugd2l0aCB0aGUgUEhZIGJlbG93LCB3aGljaCByZWFjaGVzIHRoZSBzYW1lIHJlZ2lzdGVycyB1bmRlcgomIzQzOyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZW44ODExaF9tY3VfY2hpcF9sb2NrKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IG1jdS0mZ3Q7YnVzOwomIzQzOwomIzQzOwlpZiAoYnVzKQomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ1czsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfY2hpcF91bmxvY2soc3RydWN0IG1paV9idXMgKmJ1cykKJiM0Mzt7CiYjNDM7CWlmIChidXMpCiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2Z3X3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBlbjg4MTFoX21jdSwgZndfcG9sbCk7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7bWN1LSZndDttZGlvZGV2LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpjaGlwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW1jdS0mZ3Q7ZndfcnVubmluZykgewomIzQzOwkJY2hpcCA9IGVuODgxMWhfbWN1X2NoaXBfbG9jayhtY3UpOwomIzQzOwkJcmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQobWN1LSZndDttZGlvZGV2LCAmYW1wO21jdS0mZ3Q7ZndfdmVyc2lvbiwKJiM0MzsJCQkJCSAgICAgICEhY2hpcCk7CiYjNDM7CQllbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQlkZXZfZGJnKGRldiwgJiMzNDtmaXJtd2FyZSAlMDh4IHJ1bm5pbmcgYWZ0ZXIgJXVtc1xuJiMzNDssCiYjNDM7CQkJbWN1LSZndDtmd192ZXJzaW9uLCBtY3UtJmd0O3dhaXRlZF9tcyk7CiYjNDM7CQlyZXQgPSBmaXJtd2FyZV9yZXF1ZXN0X2NhY2hlKGRldiwgRU44ODExSF9NRDMyX0RNKSA/OgomIzQzOwkJICAgICAgZmlybXdhcmVfcmVxdWVzdF9jYWNoZShkZXYsIEVOODgxMUhfTUQzMl9EU1ApOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlkZXZfZGJnKGRldiwgJiMzNDtub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXG4mIzM0OywKJiM0MzsJCQkJRVJSX1BUUihyZXQpKTsKJiM0MzsJCW1jdS0mZ3Q7ZndfcnVubmluZyA9IHRydWU7CiYjNDM7CQltY3UtJmd0O3BvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TOwomIzQzOwkJbWN1LSZndDt3YWl0ZWRfbXMgPSAwOwomIzQzOwkJbWN1LSZndDt3YXJuZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZXN1bWUgcmUtcnVucyB0aGUgZG93bmxvYWQsIHNvIHRoZSBidXMgY2FuIGFscmVhZHkgYmUgaGVyZSwgYW5kCiYjNDM7CSAqIGZ3bm9kZV9tZGlvIGRlZmVycyB3aGlsZSB0aGUgUEhZIG5vZGUmIzM5O3MgaW50ZXJydXB0IGNvbnRyb2xsZXIgaXMKJiM0MzsJICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBtY3UtJmd0O2J1cyA/IDAgOiBlbjg4MTFoX21jdV9idXNfcmVnaXN0ZXIobWN1KTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CWlmICghbWN1LSZndDt3YXJuZWQgJmFtcDsmYW1wOyBtY3UtJmd0O3dhaXRlZF9tcyAmZ3Q7PSBFTjg4MTFIX0ZXX1dBUk5fTVMpIHsKJiM0MzsJCWlmICghbWN1LSZndDtmd19ydW5uaW5nKQomIzQzOwkJCWRldl93YXJuKGRldiwgJiMzNDtubyBmaXJtd2FyZSBhZnRlciAldW1zIG9mIHdhaXRpbmcgZm9yICVzIGFuZCAlczogJXBlXG4mIzM0OywKJiM0MzsJCQkJIG1jdS0mZ3Q7d2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sCiYjNDM7CQkJCSBFTjg4MTFIX01EMzJfRFNQLCBFUlJfUFRSKHJldCkpOwomIzQzOwkJZWxzZQomIzQzOwkJCWRldl93YXJuKGRldiwgJiMzNDtubyBQSFkgYXQgYWRkcmVzcyAlZCwgJXVtcyBhZnRlciB0aGUgZmlybXdhcmUgc3RhcnRlZDogJXBlXG4mIzM0OywKJiM0MzsJCQkJIG1jdS0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkciwgbWN1LSZndDt3YWl0ZWRfbXMsCiYjNDM7CQkJCSBFUlJfUFRSKHJldCkpOwomIzQzOwkJbWN1LSZndDt3YXJuZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFBhc3QgaXRzIGJ1ZGdldCwgb25seSBhIGRlZmVycmFsIHdpbGwgY2hhbmdlIG9uIGl0cyBvd246IGV2ZXJ5CiYjNDM7CSAqIG90aGVyIGVycm9yIHJlcGVhdHMgYSBidXMgcmVnaXN0cmF0aW9uLCBpdHMgbWVzc2FnZSBmcm9tIHRoZSBNRElPCiYjNDM7CSAqIGNvcmUgYW5kIGl0cyB1ZXZlbnRzIGZvciB0aGUgdXB0aW1lLiBGaXJtd2FyZSBmaWxlcyBhcmUgdGhlCiYjNDM7CSAqIGV4Y2VwdGlvbiwgc2luY2UgdGhleSBjYW4gYmUgaW5zdGFsbGVkIGF0IGFueSB0aW1lLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1jdS0mZ3Q7ZndfcnVubmluZyAmYW1wOyZhbXA7IHJldCAhPSAtRVBST0JFX0RFRkVSICZhbXA7JmFtcDsKJiM0MzsJICAgIG1jdS0mZ3Q7d2FpdGVkX21zICZndDs9IEVOODgxMUhfRldfV0FSTl9NUykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWN1LSZndDtwb2xsX21zID0gbWluKG1jdS0mZ3Q7cG9sbF9tcyAqIDIsIEVOODgxMUhfRldfUE9MTF9NQVhfTVMpOwomIzQzOwkvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi8KJiM0MzsJbWN1LSZndDt3YWl0ZWRfbXMgJiM0Mzs9IG1jdS0mZ3Q7cG9sbF9tczsKJiM0MzsJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZhbXA7bWN1LSZndDtmd19wb2xsLAomIzQzOwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMobWN1LSZndDtwb2xsX21zKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBmaXJtd2FyZSBsaXZlcyBpbiB2b2xhdGlsZSBSQU06IG5vIHJlc2V0IHdoaWxlIHRoZSBNRDMyIHJlcG9ydHMgcmVhZHkuICovCiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYgPSBtY3UtJmd0O21kaW9kZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7bWRpb2Rldi0mZ3Q7ZGV2OwomIzQzOwl1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhaXJfZW44ODExaF9tY3VfcnVubmluZyhtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZndDsgMCkgewomIzQzOwkJZGV2X2RiZyhkZXYsICYjMzQ7TUQzMiBhbHJlYWR5IHJ1bm5pbmcsIGxlYXZpbmcgcmVzZXQgYWxvbmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIW1jdS0mZ3Q7cmVzZXRfZ3BpbykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogQSBmYWlsZWQgcmVhZCBpcyBub3QgYSBkb3JtYW50IGNoaXAsIHNvIGRvIG5vdCB0b3VjaCBhIGxpbmUgdGhhdAomIzQzOwkgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAobWN1LSZndDtyZXNldF9ncGlvKSAmbHQ7PSAwKSB7CiYjNDM7CQlkZXZfZGJnKGRldiwgJiMzNDtNRDMyIHN0YXRlIHVua25vd24gKCVkKSwgbGVhdmluZyByZXNldCBhbG9uZVxuJiMzNDssCiYjNDM7CQkJcmV0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAmIzM0O3Jlc2V0LWFzc2VydC11cyYjMzQ7LCAmYW1wO2Fzc2VydF91cyk7CiYjNDM7CWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICYjMzQ7cmVzZXQtZGVhc3NlcnQtdXMmIzM0OywgJmFtcDtkZWFzc2VydF91cyk7CiYjNDM7CiYjNDM7CXJldCA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQobWN1LSZndDtyZXNldF9ncGlvLCAxKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O3Jlc2V0IG5vdCBhc3NlcnRlZDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYXNzZXJ0X3VzKQomIzQzOwkJZnNsZWVwKGFzc2VydF91cyk7CiYjNDM7CiYjNDM7CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChtY3UtJmd0O3Jlc2V0X2dwaW8sIDApOwomIzQzOwlpZiAoZGVhc3NlcnRfdXMpCiYjNDM7CQlmc2xlZXAoZGVhc3NlcnRfdXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7bWRpb2Rldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucDsKJiM0MzsKJiM0MzsJbWN1ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptY3UpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtY3UpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbWN1LSZndDttZGlvZGV2ID0gbWRpb2RldjsKJiM0MzsJbWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBtY3UpOwomIzQzOwomIzQzOwkvKiBSZWdpc3RyYXRpb24gbmVlZHMgdGhpcyBvbmx5IG9uY2UgdGhlIGZpcm13YXJlIHJ1bnMsIGJ1dCBhIERUCiYjNDM7CSAqIGhvbGUgc2hvdWxkIGZhaWwgdGhlIGJpbmQgbm93LCBub3QgYXMgYSB3b3JrLWl0ZW0gZXJyb3IgbGF0ZXIuCiYjNDM7CSAqLwomIzQzOwlucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi0mZ3Q7b2Zfbm9kZSwgJiMzNDttZGlvJiMzNDspOwomIzQzOwlpZiAoIW5wKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLAomIzQzOwkJCQkgICAgICYjMzQ7bm8gbWRpbyBub2RlIGRlc2NyaWJpbmcgdGhlIFBIWVxuJiMzNDspOwomIzQzOwlvZl9ub2RlX3B1dChucCk7CiYjNDM7CiYjNDM7CS8qIFRoZSBjb3JlIGNsYWltcyByZXNldC1ncGlvcyBvbmx5IGZvciBkZXZpY2VzIGZsYWdnZWQgYXMgUEhZcy4gKi8KJiM0MzsJbWN1LSZndDtyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAmIzM0O3Jlc2V0JiMzNDssIEdQSU9EX0FTSVMpOwomIzQzOwlpZiAoSVNfRVJSKG1jdS0mZ3Q7cmVzZXRfZ3BpbykpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIobWN1LSZndDtyZXNldF9ncGlvKSwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgcmVzZXQgR1BJT1xuJiMzNDspOwomIzQzOwomIzQzOwlpZiAobWN1LSZndDtyZXNldF9ncGlvKQomIzQzOwkJZ3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWN1LSZndDtyZXNldF9ncGlvLCAmIzM0O0VOODgxMUggcmVzZXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQobWN1LCBmYWxzZSk7CiYjNDM7CiYjNDM7CW1jdS0mZ3Q7cG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7CiYjNDM7CUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7bWN1LSZndDtmd19wb2xsLCBlbjg4MTFoX21jdV9md19wb2xsKTsKJiM0MzsJLyogRnJlZXphYmxlOiBuZWl0aGVyIHRoZSBmaWxlIGxvb2t1cCBub3IgdGhlIGRvd25sb2FkIG1heSBsYW5kIG9uCiYjNDM7CSAqIGEgc3VzcGVuZGluZyBidXMuCiYjNDM7CSAqLwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgJmFtcDttY3UtJmd0O2Z3X3BvbGwsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW44ODExaF9tY3VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTsKJiM0MzsKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7bWN1LSZndDtmd19wb2xsKTsKJiM0MzsJaWYgKG1jdS0mZ3Q7YnVzKSB7CiYjNDM7CQltZGlvYnVzX3VucmVnaXN0ZXIobWN1LSZndDtidXMpOwomIzQzOwkJbWRpb2J1c19mcmVlKG1jdS0mZ3Q7YnVzKTsKJiM0MzsJCW1jdS0mZ3Q7YnVzID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqY2hpcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogTm90aGluZyB0byByZWRvOiB0aGUgcG9sbCBpcyBhcm1lZCBhbmQgdGhhd3Mgd2l0aCBldmVyeXRoaW5nIGVsc2UuICovCiYjNDM7CWlmICghbWN1LSZndDtmd19ydW5uaW5nKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0JiMzOTtzIFBIWSByZXN1bWVzIHJpZ2h0IGFmdGVyIHRoaXMKJiM0MzsJICogb25lIGFuZCBjYWxscyBwaHlfaW5pdF9odygpLCB3aGljaCBuZWVkcyB0aGUgZmlybXdhcmUgYnkgdGhlbi4KJiM0MzsJICovCiYjNDM7CWNoaXAgPSBlbjg4MTFoX21jdV9jaGlwX2xvY2sobWN1KTsKJiM0MzsJZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsICEhY2hpcCk7CiYjNDM7CXJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS0mZ3Q7bWRpb2RldiwgJmFtcDttY3UtJmd0O2Z3X3ZlcnNpb24sICEhY2hpcCk7CiYjNDM7CWVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKGNoaXApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJLyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHMKJiM0MzsJCSAqIG93biByZXN1bWUgaGFzIGFscmVhZHkgZmFpbGVkIGJ5IHRoZW4gYW5kIG5vdGhpbmcgY2FsbHMKJiM0MzsJCSAqIHBoeV9pbml0X2h3KCkgdHdpY2UuCiYjNDM7CQkgKi8KJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O2Zpcm13YXJlIG5vdCByZXN0b3JlZCwgcmVsb2FkaW5nOiAlcGVcbiYjMzQ7LAomIzQzOwkJCUVSUl9QVFIocmV0KSk7CiYjNDM7CQltY3UtJmd0O2Z3X3J1bm5pbmcgPSBmYWxzZTsKJiM0MzsJCW1jdS0mZ3Q7cG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7CiYjNDM7CQltY3UtJmd0O3dhaXRlZF9tcyA9IDA7CiYjNDM7CQltY3UtJmd0O3dhcm5lZCA9IGZhbHNlOwomIzQzOwkJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsICZhbXA7bWN1LSZndDtmd19wb2xsLCAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9TSU1QTEVfREVWX1BNX09QUyhlbjg4MTFoX21jdV9wbV9vcHMsIE5VTEwsIGVuODgxMWhfbWN1X3Jlc3VtZSk7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZW44ODExaF9tY3Vfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7YWlyb2hhLGVuODgxMWgtbWN1JiMzNDsgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBlbjg4MTFoX21jdV9vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBlbjg4MTFoX21jdV9kcml2ZXIgPSB7CiYjNDM7CS5wcm9iZSA9IGVuODgxMWhfbWN1X3Byb2JlLAomIzQzOwkucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLAomIzQzOwkubWRpb2Rydi5kcml2ZXIgPSB7CiYjNDM7CQkubmFtZSA9ICYjMzQ7YWlyb2hhLWVuODgxMWgtbWN1JiMzNDssCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSBlbjg4MTFoX21jdV9vZl9tYXRjaCwKJiM0MzsJCS5wbSA9IHBtX3NsZWVwX3B0cigmYW1wO2VuODgxMWhfbWN1X3BtX29wcyksCiYjNDM7CQkvKiBUZWFyaW5nIHRoZSBjaGlsZCBidXMgZG93biB1bmRlciBhbiBhdHRhY2hlZCBQSFkgaXMgbm90CiYjNDM7CQkgKiBzb21ldGhpbmcgdGhpcyBkcml2ZXIgY2FuIG1ha2Ugc2FmZSBvbiBpdHMgb3duLgomIzQzOwkJICovCiYjNDM7CQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MzttZGlvX21vZHVsZV9kcml2ZXIoZW44ODExaF9tY3VfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTsKJiM0MztNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RTUCk7CiYjNDM7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7QWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtBbGVrc2VpIFN2aXJpZGtpbiAmbHQ7ZkBsZXgubGEmZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYwppbmRleCBlYzdjNDRjYTY4ZTdkLi44NjFiOGZlNDllMjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYwpAQCAtMjAsMjEgJiM0MzsyMCwxNSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Fpcl9waHlfbGliLmgmIzM0OwogCiAjZGVmaW5lIEVOODgxMUhfUEhZX0lECQkweDAzYTJhNDExCiAjZGVmaW5lIEFOODgxMUhCX1BIWV9JRAkJMHhjMGZmMDRhMAogCi0jZGVmaW5lIEVOODgxMUhfTUQzMl9ETQkJJiMzNDthaXJvaGEvRXRoTUQzMi5kbS5iaW4mIzM0OwotI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQCSYjMzQ7YWlyb2hhL0V0aE1EMzIuRFNQLmJpbiYjMzQ7CiAjZGVmaW5lIEFOODgxMUhCX01EMzJfRE0JJiMzNDthaXJvaGEvYW44ODExaGIvRXRoTUQzMl9DUkMuRE0uYmluJiMzNDsKICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1AJJiMzNDthaXJvaGEvYW44ODExaGIvRXRoTUQzMl9DUkMuRFNQLmJpbiYjMzQ7CiAKLSNkZWZpbmUgQUlSX0ZXX0FERFJfRE0JMHgwMDAwMDAwMAotI2RlZmluZSBBSVJfRldfQUREUl9EU1AJMHgwMDEwMDAwMAotCiAvKiBNSUkgUmVnaXN0ZXJzICovCiAjZGVmaW5lIEFJUl9BVVhfQ1RSTF9TVEFUVVMJCTB4MWQKICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0sJR0VOTUFTSyg0LCAyKQpAQCAtNDQsOCAmIzQzOzM4LDYgQEAKICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEXzI1MDAJMHhjCiAKIC8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMSAqLwotI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVMJCTB4ODAwOQotI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZCQkJMHgwMgogCiAjZGVmaW5lIEFJUl9QSFlfTUNVX0NNRF8wCQkweDgwMGIKICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzEJCTB4ODAwYwpAQCAtMTA4LDggJiM0MzsxMDAsNiBAQAogI2RlZmluZSBFTjg4MTFIXzJQNUdfTFBBCQkweDNiMzAKICNkZWZpbmUgICBFTjg4MTFIXzJQNUdfTFBBXzJQNUcJCQlCSVQoMCkKIAotI2RlZmluZSBFTjg4MTFIX0ZXX1ZFUlNJT04JCTB4M2IzYwotCiAjZGVmaW5lIEVOODgxMUhfUE9MQVJJVFkJCTB4Y2EwZjgKICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTAkJQklUKDApCiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFCQlCSVQoMSkKQEAgLTEyMiwxMiAmIzQzOzExMiw2IEBACiAjZGVmaW5lIEVOODgxMUhfQ0xLX0NHTQkJCTB4Y2Y5NTgKICNkZWZpbmUgICBFTjg4MTFIX0NMS19DR01fQ0tPCQkJQklUKDI2KQogCi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8xCQkweDBmMDAxOAotI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUCQkweDAKLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gJCTB4MQotI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMgkJMHg4MDAwMDAKLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJfTE9BRElORwkJQklUKDExKQotCiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9TRVQxCQkweGYwMjBjCiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04yCQkweGYwMjE4CiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04zCQkweGYwMjFjCkBAIC0yNzAsODYgJiM0MzsyNTQsMTQgQEAgc3RhdGljIGludCBfX2Fpcl9wYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiAJCQkgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTsKIH0KIAotc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsCi0JCQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQotewotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JaW50IHJldDsKLQl1MTYgdmFsOwotCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhhZGRyZXNzKSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVywKLQkJCSAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7Ci0KLQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCAmbHQ7IGZ3LSZndDtzaXplOyBvZmZzZXQgJiM0Mzs9IDQpIHsKLQkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZhbXA7ZnctJmd0O2RhdGFbb2Zmc2V0ICYjNDM7IDJdKTsKLQkJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZhbXA7ZnctJmd0O2RhdGFbb2Zmc2V0XSk7Ci0JCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcywKLQkJCSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQotewotCWludCBzYXZlZF9wYWdlOwotCWludCByZXQgPSAwOwotCi0JaWYgKGZ3LSZndDtzaXplICUgNCkgewotCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XG4mIzM0OywKLQkJCSAgIGZ3LSZndDtzaXplKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKLQotCWlmIChzYXZlZF9wYWdlICZndDs9IDApIHsKLQkJcmV0ID0gX19haXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgZncpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0OyVzIDB4JTA4eCBmYWlsZWQ6ICVkXG4mIzM0OywgX19mdW5jX18sCi0JCQkJICAgYWRkcmVzcywgcmV0KTsKLQl9Ci0KLQlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7Ci19Ci0KIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCWludCByZXQsIHJlZ192YWx1ZTsKJiM0MzsJaW50IHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KCZhbXA7cGh5ZGV2LSZndDttZGlvLCBmYWxzZSk7CiAKLQlyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8xLAotCQkJCQkgRU44ODExSF9GV19DVFJMXzFfRklOSVNIKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovCi0JcmV0ID0gcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLAotCQkJCQlFTjg4MTFIX1BIWV9GV19TVEFUVVMsIHJlZ192YWx1ZSwKLQkJCQkJcmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLAotCQkJCQkyMDAwMCwgNzUwMDAwMCwgdHJ1ZSk7Ci0JaWYgKHJldCkgewotCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtNQ1Ugbm90IHJlYWR5OiAweCV4XG4mIzM0OywgcmVnX3ZhbHVlKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O01DVSBub3QgcmVhZHk6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhbjg4MTFoYl9jaGVja19jcmMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHNldDEsCkBAIC00MTEsNyAmIzQzOzMyMyw3IEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maWxlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTsKJiM0MzsJcmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZigmYW1wO3BoeWRldi0mZ3Q7bWRpbywgYWRkcmVzcywgZncsIGZhbHNlKTsKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTA3LDU0ICYjNDM7NDE5LDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCiBzdGF0aWMgaW50IGVuODgxMWhfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MSwgKmZ3MjsKJiM0MzsJc3RydWN0IGVuODgxMWhfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmFtcDtmdzEsIEVOODgxMUhfTUQzMl9ETSwgZGV2KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9yZWwxOwotCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSwKLQkJCQkJIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsCi0JCQkJCSAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywKLQkJCQkJICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JcmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JcmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RTUCwgZncyKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JcmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgRU44ODExSF9GV19DVFJMXzIsCi0JCQkJCSAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDsKLQotCXJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0OwotCi0JZW44ODExaF9wcmludF9md192ZXJzaW9uKHBoeWRldik7Ci0KLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6Ci0JcmVsZWFzZV9maXJtd2FyZShmdzIpOwotCi1lbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMToKLQlyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7Ci0KJiM0MzsJcmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQoJmFtcDtwaHlkZXYtJmd0O21kaW8sICZhbXA7cHJpdi0mZ3Q7ZmlybXdhcmVfdmVyc2lvbiwKJiM0MzsJCQkJICAgICAgZmFsc2UpOwogCWlmIChyZXQgJmx0OyAwKQogCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtMb2FkIGZpcm13YXJlIGZhaWxlZDogJWRcbiYjMzQ7LCByZXQpOwogCkBAIC0xMTU2LDggJiM0MzsxMDI1LDggQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQkvKiBtY3UgaGFzIGp1c3QgcmVzdGFydGVkIGFmdGVyIGZpcm13YXJlIGxvYWQgKi8KLQlwcml2LSZndDttY3VfbmVlZHNfcmVzdGFydCA9IGZhbHNlOwomIzQzOwkvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7bWN1X25lZWRzX3Jlc3RhcnQgPSAocmV0ID09IDEpOwogCiAJLyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqLwogCXBoeWRldi0mZ3Q7YzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMKaW5kZXggNTE0MWRiMTlmYTVlZS4uN2Y3NTMwMjczNjAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMKQEAgLTgsMzcgJiM0Mzs4LDQyIEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maXJtd2FyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC93b3JkcGFydC5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Fpcl9waHlfbGliLmgmIzM0OwogCi1zdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7c3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiAJCQkJICAgdTMyIHBidXNfYWRkcmVzcywgdTMyICpwYnVzX2RhdGEpCiB7CiAJaW50IHBidXNfZGF0YV9sb3csIHBidXNfZGF0YV9oaWdoOwogCWludCByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLAomIzQzOwkJCSAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILAotCQkJICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCwKJiM0MzsJCQkgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csCi0JCQkgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csCiYjNDM7CQkJICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXBidXNfZGF0YV9oaWdoID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpOwomIzQzOwlwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpOwogCWlmIChwYnVzX2RhdGFfaGlnaCAmbHQ7IDApCiAJCXJldHVybiBwYnVzX2RhdGFfaGlnaDsKIAotCXBidXNfZGF0YV9sb3cgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTsKJiM0MzsJcGJ1c19kYXRhX2xvdyA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7CiAJaWYgKHBidXNfZGF0YV9sb3cgJmx0OyAwKQogCQlyZXR1cm4gcGJ1c19kYXRhX2xvdzsKIApAQCAtNDYsNjQgJiM0Mzs1MSw2NiBAQCBzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7c3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCQkJCSAgICB1MzIgcGJ1c19hZGRyZXNzLCB1MzIgcGJ1c19kYXRhKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLAomIzQzOwkJCSAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILAotCQkJICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKJiM0MzsJCQkgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csCi0JCQkgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csCiYjNDM7CQkJICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YSkpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7c3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKIAkJCQkgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KQogewogCWludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDsKIAl1MzIgcGJ1c19kYXRhX29sZCwgcGJ1c19kYXRhX25ldzsKIAlpbnQgcmV0OwogCi0JcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSwKJiM0MzsJCQkgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTsKJiM0MzsJcGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTsKIAlpZiAocGJ1c19kYXRhX2hpZ2ggJmx0OyAwKQogCQlyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7CiAKLQlwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7CiYjNDM7CXBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpOwogCWlmIChwYnVzX2RhdGFfbG93ICZsdDsgMCkKIAkJcmV0dXJuIHBidXNfZGF0YV9sb3c7CiAKQEAgLTExMiwyMyAmIzQzOzExOSwyMyBAQCBzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlpZiAocGJ1c19kYXRhX25ldyA9PSBwYnVzX2RhdGFfb2xkKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCwKLQkJCSAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsCiYjNDM7CQkJICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLAomIzQzOwkJCSAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsCi0JCQkgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpOwomIzQzOwlyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCwKJiM0MzsJCQkgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLAotCQkJICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTsKJiM0MzsJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywKJiM0MzsJCQkgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTQ0LDcgJiM0MzsxNTEsOCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiAKIAlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7Ci0JCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpOwomIzQzOwkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQoJmFtcDtwaHlkZXYtJmd0O21kaW8sIHBidXNfYWRkcmVzcywKJiM0MzsJCQkJCSAgICAgIHBidXNfZGF0YSk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7JXMgMHglMDh4IGZhaWxlZDogJWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJCQkgICBwYnVzX2FkZHJlc3MsIHJldCk7CkBAIC0xNjMsNyAmIzQzOzE3MSw3IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogCXNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiAKIAlpZiAoc2F2ZWRfcGFnZSAmZ3Q7PSAwKSB7Ci0JCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShwaHlkZXYsIHBidXNfYWRkcmVzcywKJiM0MzsJCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZSgmYW1wO3BoeWRldi0mZ3Q7bWRpbywgcGJ1c19hZGRyZXNzLAogCQkJCQkgICAgICAgcGJ1c19kYXRhKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxuJiMzNDssIF9fZnVuY19fLApAQCAtMTgzLDggJiM0MzsxOTEsOCBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsCiAJc2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTsKIAogCWlmIChzYXZlZF9wYWdlICZndDs9IDApIHsKLQkJcmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzaywKLQkJCQkJCXNldCk7CiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KCZhbXA7cGh5ZGV2LSZndDttZGlvLCBwYnVzX2FkZHJlc3MsCiYjNDM7CQkJCQkJbWFzaywgc2V0KTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDslcyAweCUwOHggZmFpbGVkOiAlZFxuJiMzNDssIF9fZnVuY19fLAogCQkJCSAgIHBidXNfYWRkcmVzcywgcmV0KTsKQEAgLTE5NCw2ICYjNDM7MjAyLDM0MyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkpOwogCiYjNDM7c3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcywKJiM0MzsJCQkgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXUxNiB2YWw7CiYjNDM7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSwKJiM0MzsJCQkgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILAomIzQzOwkJCSAgICAgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csCiYjNDM7CQkJICAgICAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgJmx0OyBsZW47IG9mZnNldCAmIzQzOz0gNCkgewomIzQzOwkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZhbXA7ZGF0YVtvZmZzZXQgJiM0MzsgMl0pOwomIzQzOwkJcmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZhbXA7ZGF0YVtvZmZzZXRdKTsKJiM0MzsJCXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi8KJiM0MztzdGF0aWMgaW50IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CXNhdmVkX3BhZ2UgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTsKJiM0MzsJaWYgKHNhdmVkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHNhdmVkX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHsKJiM0MzsJCXJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLCBwYWdlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNhdmVkX3BhZ2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAomIzQzOwkJCQkgICBpbnQgc2F2ZWRfcGFnZSwgaW50IHBhZ2UsIGludCByZXQpCiYjNDM7ewomIzQzOwlpbnQgcmVzdG9yZTsKJiM0MzsKJiM0MzsJaWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkgewomIzQzOwkJcmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLAomIzQzOwkJCQkJICBzYXZlZF9wYWdlKTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHJlc3RvcmUgJmx0OyAwKQomIzQzOwkJCXJldCA9IHJlc3RvcmU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqLwomIzQzO3N0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWlmIChuZXN0ZWQpCiYjNDM7CQltZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpOwomIzQzOwllbHNlCiYjNDM7CQltZGlvZGV2X2xvY2sobWRpb2Rldik7CiYjNDM7fQomIzQzOwomIzQzO2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsCiYjNDM7CQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJc2l6ZV90IGNodW5rLCBkb25lID0gMDsKJiM0MzsJaW50IHNhdmVkX3BhZ2UsIHJldDsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICUgNCkgewomIzQzOwkJZGV2X2VycigmYW1wO21kaW9kZXYtJmd0O2RldiwgJiMzNDtmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XG4mIzM0OywKJiM0MzsJCQlmdy0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwl3aGlsZSAoZG9uZSAmbHQ7IGZ3LSZndDtzaXplKSB7CiYjNDM7CQljaHVuayA9IG1pbl90KHNpemVfdCwgZnctJmd0O3NpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpOwomIzQzOwomIzQzOwkJYWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwomIzQzOwkJc2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwKJiM0MzsJCQkJCQkgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwomIzQzOwkJaWYgKHNhdmVkX3BhZ2UgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gc2F2ZWRfcGFnZTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0ID0gX19haXJfd3JpdGVfYnVmKG1kaW9kZXYsIGFkZHJlc3MgJiM0MzsgZG9uZSwKJiM0MzsJCQkJCSAgICAgIGZ3LSZndDtkYXRhICYjNDM7IGRvbmUsIGNodW5rKTsKJiM0MzsJCQlyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLAomIzQzOwkJCQkJCSAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LAomIzQzOwkJCQkJCSAgICAgIHJldCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltZGlvZGV2X3VubG9jayhtZGlvZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlkb25lICYjNDM7PSBjaHVuazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYWlyX2Z3X3dyaXRlX2J1Zik7CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiYjNDM7CQkJCSAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhLAomIzQzOwkJCQkgICAgICBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CWFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJc2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwomIzQzOwlpZiAoc2F2ZWRfcGFnZSAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IHNhdmVkX3BhZ2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7CiYjNDM7CQlyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLAomIzQzOwkJCQkJICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKJiM0MzsJCQkJICAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEsCiYjNDM7CQkJCSAgICAgICBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWludCBzYXZlZF9wYWdlLCByZXQ7CiYjNDM7CiYjNDM7CWFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsKJiM0MzsJc2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpOwomIzQzOwlpZiAoc2F2ZWRfcGFnZSAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IHNhdmVkX3BhZ2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgcGJ1c19hZGRyZXNzLAomIzQzOwkJCQkJICAgICAgIHBidXNfZGF0YSk7CiYjNDM7CQlyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLAomIzQzOwkJCQkJICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiYjNDM7CQkJCQl1MzIgcGJ1c19hZGRyZXNzLCB1MzIgbWFzaywgdTMyIHNldCwKJiM0MzsJCQkJCWJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJaW50IHNhdmVkX3BhZ2UsIHJldDsKJiM0MzsKJiM0MzsJYWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwomIzQzOwlzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7CiYjNDM7CWlmIChzYXZlZF9wYWdlICZsdDsgMCkgewomIzQzOwkJcmV0ID0gc2F2ZWRfcGFnZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgcGJ1c19hZGRyZXNzLAomIzQzOwkJCQkJCW1hc2ssIHNldCk7CiYjNDM7CQlyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLAomIzQzOwkJCQkJICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWRpb2Rldl91bmxvY2sobWRpb2Rldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIG1tZF9waHlfcmVhZCgpIGRyb3BzIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGhyZWUgd3JpdGVzIHRoYXQgc2VsZWN0IHRoZQomIzQzOyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fYWlyX21tZF9yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTE2IGRldmFkLCB1MTYgcmVnbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtJmd0O2J1czsKJiM0MzsJaW50IGFkZHIgPSBtZGlvZGV2LSZndDthZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsIGRldmFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLAomIzQzOwkJCSAgICAgIGRldmFkIHwgTUlJX01NRF9DVFJMX05PSU5DUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fbWRpb2J1c19yZWFkKGJ1cywgYWRkciwgTUlJX01NRF9EQVRBKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhaXJfbW1kX3N0YXR1c19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CXJldCA9IF9fYWlyX21tZF9yZWFkKG1kaW9kZXYsIE1ESU9fTU1EX1ZFTkQxLCBFTjg4MTFIX1BIWV9GV19TVEFUVVMpOwomIzQzOwltZGlvZGV2X3VubG9jayhtZGlvZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gYWlyX21tZF9zdGF0dXNfcmVhZChtZGlvZGV2LCBuZXN0ZWQpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiByZXQgPT0gRU44ODExSF9QSFlfUkVBRFk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKTsKJiM0MzsKJiM0MztpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWludCByZXQsIHJlZ192YWx1ZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLAomIzQzOwkJCQkJICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBCZWNhdXNlIG9mIG1kaW8tbG9jaywgbWF5IGhhdmUgdG8gd2FpdCBmb3IgbXVsdGlwbGUgbG9hZHMuIEEgcmVhZAomIzQzOwkgKiBlcnJvciBlbmRzIHRoZSBwb2xsIGF0IG9uY2UsIGxpa2UgcGh5X3JlYWRfbW1kX3BvbGxfdGltZW91dCgpLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyX21tZF9zdGF0dXNfcmVhZCwgcmVnX3ZhbHVlLAomIzQzOwkJCQlyZWdfdmFsdWUgJmx0OyAwIHx8CiYjNDM7CQkJCXJlZ192YWx1ZSA9PSBFTjg4MTFIX1BIWV9SRUFEWSwKJiM0MzsJCQkJMjAwMDAsIDc1MDAwMDAsIHRydWUsIG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CWlmIChyZWdfdmFsdWUgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJlZ192YWx1ZTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2RiZygmYW1wO21kaW9kZXYtJmd0O2RldiwgJiMzNDtNQ1Ugbm90IHJlYWR5OiAweCV4XG4mIzM0OywgcmVnX3ZhbHVlKTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeSk7CiYjNDM7CiYjNDM7aW50IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyICpmd192ZXJzaW9uLAomIzQzOwkJCSAgICBib29sIG5lc3RlZCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO21kaW9kZXYtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sCiYjNDM7CQkJCQkJIGZ3X3ZlcnNpb24sIG5lc3RlZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJZGV2X2luZm8oZGV2LCAmIzM0O01EMzIgYWxyZWFkeSBydW5uaW5nLCBmaXJtd2FyZSAlMDh4XG4mIzM0OywKJiM0MzsJCQkgKmZ3X3ZlcnNpb24pOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoJmFtcDtmdzEsIEVOODgxMUhfTUQzMl9ETSwgZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgmYW1wO2Z3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9yZWwxOwomIzQzOwomIzQzOwlyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzEsCiYjNDM7CQkJCQkgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJULCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMiwKJiM0MzsJCQkJCSAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsCiYjNDM7CQkJCQkgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9ETSwgZncxLCBuZXN0ZWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDsKJiM0MzsKJiM0MzsJcmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3MiwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsCiYjNDM7CQkJCQkgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwLAomIzQzOwkJCQkJICAgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBhaXJfZndfZG93bmxvYWRfb3V0OwomIzQzOwomIzQzOwlyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sCiYjNDM7CQkJCQkgZndfdmVyc2lvbiwgbmVzdGVkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7CiYjNDM7CiYjNDM7CWRldl9pbmZvKGRldiwgJiMzNDtNRDMyIGZpcm13YXJlIHZlcnNpb246ICUwOHhcbiYjMzQ7LCAqZndfdmVyc2lvbik7CiYjNDM7CiYjNDM7YWlyX2Z3X2Rvd25sb2FkX291dDoKJiM0MzsJcmVsZWFzZV9maXJtd2FyZShmdzIpOwomIzQzOwomIzQzO2Fpcl9md19kb3dubG9hZF9yZWwxOgomIzQzOwlyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7CiYjNDM7CiYjNDM7CS8qIE5vIGVycm9yIHByaW50OiBjYWxsZXJzIGxvZyBvbiB0aGVpciBvd24gdGVybXMsIGFuZCBhIHBvbGxlcgomIzQzOwkgKiB3b3VsZCByZXBlYXQgaXQgb24gZXZlcnkgcmV0cnkuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7CiYjNDM7CiBpbnQgYWlyX3BoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlyZXR1cm4gX19waHlfcmVhZChwaHlkZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmggYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaAppbmRleCAwMWJiMzJlN2M3Yzk1Li41NmJhOTg3YTY4Y2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaApAQCAtMTAsMTIgJiM0MzsxMCwxOSBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmgmZ3Q7CiYjNDM7CiAjZGVmaW5lIEFJUl9FWFRfUEFHRV9BQ0NFU1MJCTB4MWYKIAogI2RlZmluZSBBSVJfUEhZX1BBR0VfU1RBTkRBUkQJCTB4MDAwMAogI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfMQkJMHgwMDAxCiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80CQkweDAwMDQKIAomIzQzOy8qIEJ5dGVzIHdyaXR0ZW4gYmV0d2VlbiBidXMgcmVsZWFzZXMsIHNvIHRoZSBvdGhlciBQSFlzIG9uIGl0IGdldCBhIHR1cm4uCiYjNDM7ICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBBSVJfRldfQ0hVTktfQllURVMJCTIzMDQKJiM0MzsKIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki8KICNkZWZpbmUgQUlSX0JQQlVTX01PREUJCQkweDEwCiAjZGVmaW5lICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRAkJMHgwMDAwCkBAIC0yOSw2ICYjNDM7MzYsMjAgQEAKICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfSElHSAkJMHgxNwogI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9MT1cJCTB4MTgKIAomIzQzOyNkZWZpbmUgQUlSX0ZXX0FERFJfRE0JCQkweDAwMDAwMDAwCiYjNDM7I2RlZmluZSBBSVJfRldfQUREUl9EU1AJCQkweDAwMTAwMDAwCiYjNDM7CiYjNDM7I2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMQkJMHgwZjAwMTgKJiM0MzsjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfU1RBUlQJCTB4MAomIzQzOyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gJCTB4MQomIzQzOyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzIJCTB4ODAwMDAwCiYjNDM7I2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcJCUJJVCgxMSkKJiM0MzsKJiM0MzsjZGVmaW5lIEVOODgxMUhfUEhZX0ZXX1NUQVRVUwkJMHg4MDA5CiYjNDM7I2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZCQkJMHgwMgomIzQzOwomIzQzOyNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OCQkweDNiM2MKJiM0MzsKIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcywKIAkJCQl1MzIgbWFzaywgdTMyIHNldCk7CiBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLApAQCAtMzgsNCAmIzQzOzU5LDEwIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLAogaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGFpcl9waHlfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSk7CiAKJiM0MztzdHJ1Y3QgZmlybXdhcmU7CiYjNDM7CiYjNDM7aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcywKJiM0MzsJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpOwomIzQzO2ludCBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKTsKJiM0MzsKICNlbmRpZiAvKiBfX0FJUl9QSFlfTElCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmggYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0OTRkYzZjMTAyMmMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oCkBAIC0wLDAgJiM0MzsxLDI1IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOyAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvbGxhYm9yYSBMdGQuCiYjNDM7ICogICAgICAgICAgICAgICAgICAgIExvdWlzLUFsZXhpcyBFeXJhdWQgJmx0O2xvdWlzYWxleGlzLmV5cmF1ZEBjb2xsYWJvcmEuY29tJmd0OwomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBbGVrc2VpIFN2aXJpZGtpbiAmbHQ7ZkBsZXgubGEmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSAomIzQzOyNkZWZpbmUgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgbWRpb19kZXZpY2U7CiYjNDM7CiYjNDM7I2RlZmluZSBFTjg4MTFIX01EMzJfRE0JCQkmIzM0O2Fpcm9oYS9FdGhNRDMyLmRtLmJpbiYjMzQ7CiYjNDM7I2RlZmluZSBFTjg4MTFIX01EMzJfRFNQCQkmIzM0O2Fpcm9oYS9FdGhNRDMyLkRTUC5iaW4mIzM0OwomIzQzOwomIzQzOy8qIFJldHVybnMgMSBydW5uaW5nLCAwIGRvcm1hbnQsIG5lZ2F0aXZlIG9uIGEgZmFpbGVkIHN0YXR1cyByZWFkLiAqLwomIzQzO2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKTsKJiM0MzsvKiBSZXR1cm5zIDEgd2hlbiBpdCBhZG9wdGVkIGZpcm13YXJlIHRoYXQgd2FzIGFscmVhZHkgcnVubmluZy4gKi8KJiM0MztpbnQgYWlyX2VuODgxMWhfZndfZG93bmxvYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgKmZ3X3ZlcnNpb24sCiYjNDM7CQkJICAgIGJvb2wgbmVzdGVkKTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDNkOGFmZTZiN2YxYzUuLmU3NGE4ZjVjZjVjNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjI4NCw2ICYjNDM7MjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCW11dGV4X3VubG9jaygmYW1wO3BoeWRldi0mZ3Q7bWRpby5idXMtJmd0O21kaW9fbG9jayk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0Mzt7CiYjNDM7CW11dGV4X2xvY2soJmFtcDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrX25lc3RlZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrX25lc3RlZCgmYW1wO21kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwltdXRleF91bmxvY2soJmFtcDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7fQomIzQzOwogdm9pZCBwaHlfYXR0YWNoZWRfcHJpbnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJX19wcmludGYoMiwgMyk7CiBjaGFyICpwaHlfYXR0YWNoZWRfaW5mb19pcnEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MDYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaXMgaW50cm9kdWNpbmcgYSBmYWlybHkgc2lnbmlmaWNhbnQgY2h1bmsgb2YgbmV3IGNvZGUgcmVsYXRlZCB0byBBaXJvaGEgbmV0d29yayBkZXZpY2VzLiBJIHNlZSBhIG5ldyBkZXZpY2UgdHJlZSBiaW5kaW5nLCBhbiB1cGRhdGUgdG8gdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSwgYW5kIGEgY2x1c3RlciBvZiBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGNlbnRlcmVkIGFyb3VuZCBNRElPIGFuZCBQSFkgaW1wbGVtZW50YXRpb25zLiBUaGUga2V5IGZpbGVzIGFwcGVhciB0byBiZSBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCB3aGljaCBpcyBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgLCB3aGljaCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyB0aGUgZmlybXdhcmUgbG9hZGluZyBmb3IgYW4gQWlyb2hhIFBIWS4gVGhlcmUgYXJlIGFsc28gYXNzb2NpYXRlZCBsaWJyYXJ5IGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMuIE5vdGFibHksIHRoZXJlIGFyZSBzb21lIGhlbHBlciBmdW5jdGlvbnMgYWRkZWQgdG8gYGluY2x1ZGUvbGludXgvcGh5LmhgIHRoYXQgZGVhbCB3aXRoIGxvY2tpbmcuCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyByZWFjaGFiaWxpdHksIGVzcGVjaWFsbHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgdGhvc2UgdXNlZCB3aXRoIHN5emthbGxlci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGRyaXZlcnMsIHBhcnRpY3VsYXJseSB0aGUgTURJTyBhbmQgUEhZIGltcGxlbWVudGF0aW9ucywgYXJlIGluaGVyZW50bHkgcmVsaWFudCBvbiBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyBvciBkZXZpY2UgdHJlZXMgdGhhdCBtaWdodCBtYWtlIHRoZW0gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZT8KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgIG1vcmUgZGVlcGx5LiBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIE1ESU8gYW5kIFBIWSBkZXZpY2VzIGdlbmVyYWxseSwgdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHR5cGljYWxseSB0aWVkIHRvIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlcyAoQVJNLCBNSVBTLCBldGMuKSBvciByZXF1aXJlIGEgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgc2V0dXAgb3IgYSBkZXZpY2UgdHJlZSBjb25maWd1cmVkIGluIGEgY2VydGFpbiB3YXkgdG8gYmUgYWNjZXNzaWJsZS4KCkkmIzM5O2xsIHN0YXJ0IHdpdGggc29tZSBxdWljayBjaGVja3MsIHByb2JhYmx5IHVzaW5nIGBncmVwcGVyYCBvciBieSBzY3J1dGluaXppbmcgdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgYW55IG9idmlvdXMgaGludHMgYWJvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCByb2FkYmxvY2tzIHRvIGZ1enppbmcgdGhpcyBjb2RlIGVmZmVjdGl2ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FJUl9FTjg4MTFIX1BIWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0zMj1jb25maWcgTURJT19BSVJPSEFfRU44ODExSFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zNi1cdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjM3Olx0aW1wbHkgQUlSX0VOODgxMUhfUEhZXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzgtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9OTM9Y29uZmlnIEFJUl9BTjg4MDFfUEhZXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctOTgtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo5OTpjb25maWcgQUlSX0VOODgxMUhfUEhZXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDAtXHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgRU44ODExSCAyLjUgR2lnYWJpdCBQSFlcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0FJUl9BTjg4MDFfUEhZKVx0JiM0Mzs9IGFpcl9hbjg4MDEub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgJiM0Mzs9IGFpcl9lbjg4MTFoLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXHQmIzQzOz0gYWlyX3BoeV9saWIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIEFpcm9oYSBFTjg4MTFIIERyaXZlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEFpcm9oYSBFTjg4MTFIIGRyaXZlcnMgYXJlIGhhbmRsZWQsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGRyaXZlcnMgZ2V0IHByb2JlZCBhbmQgaW5zdGFudGlhdGVkLiBMb29raW5nIGF0IGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCBJIHNlZSBgZW44ODExaF9tY3Vfb2ZfbWF0Y2hbXWAgYW5kIGBtZGlvX21vZHVsZV9kcml2ZXIoZW44ODExaF9tY3VfZHJpdmVyKWAuIFJpZ2h0LCB0aGlzIGlzIE9wZW4gRmlybXdhcmUvRGV2aWNlIFRyZWUgYmFzZWQsIGJvdW5kIHRvIGFuIE1ESU8gYnVzIHVzaW5nIGBzdHJ1Y3QgbWRpb19kcml2ZXJgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVuIGBhaXJfZW44ODExaC5jYCBpcyBjbGVhcmx5IGEgUEhZIGRyaXZlciAoYHBoeV9kcml2ZXJgKS4KCk5vdyB0aGUgcmVhbCBxdWVzdGlvbjogQ2FuIEkgYWN0dWFsbHkgZ2V0IHRoZXNlIE1ESU8gZGV2aWNlcyBvciBQSFkgZHJpdmVycyB0byAqZG8gYW55dGhpbmcqIGluIGEgc3RhbmRhcmQgUUVNVS9HQ0UgYW1kNjQgZW52aXJvbm1lbnQsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc3BlY2lmaWMsIGRldGFpbGVkIGVtdWxhdGlvbiBvZiB0aGUgaGFyZHdhcmU/IEkmIzM5O20gZG91YnRmdWwsIGJ1dCBsZXQmIzM5O3Mgc2VlLgoKV2FpdCwgaG93IGRvZXMgU3l6a2FsbGVyIGV2ZW4gZGVhbCB3aXRoIFBIWSBkcml2ZXJzIGFuZCBNRElPIGRldmljZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIHRlc3QgY292ZXJhZ2UgaXMgb24gdGhpcyBmcm9udC4gQXJlIHRoZXJlIGFueSBtb2NrIE1ESU8gYnVzZXMsIHZpcnR1YWwgTURJTyBkZXZpY2VzLCBvciBuZXRsaW5rIFBIWSBpbnRlcmZhY2VzIHRoYXQgSSBjYW4gbGV2ZXJhZ2U/IE15IGZpbmFsIHRob3VnaHQgaXMgY2FuIEkgZXZlbiBjcmVhdGUgcGh5IGRldmljZXMgb3IgbWRpbyBkZXZpY2VzIGZyb20gdXNlcnNwYWNlPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBkZWVwZXIgZGlnZ2luZyB0byBnZXQgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZHJpdmVyX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mzg5MT1zdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzkxOS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzkyMDogKiBwaHlfZHJpdmVyX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBwaHlfZHJpdmVyIHdpdGggdGhlIFBIWSBsYXllclxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zOTIxLSAqIEBuZXdfZHJpdmVyOiBuZXcgcGh5X2RyaXZlciB0byByZWdpc3RlclxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzkyMy0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzkyNDpzdGF0aWMgaW50IHBoeV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHBoeV9kcml2ZXIgKm5ld19kcml2ZXIsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5MjUtXHRcdFx0ICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mzk3ND1pbnQgcGh5X2RyaXZlcnNfcmVnaXN0ZXIoc3RydWN0IHBoeV9kcml2ZXIgKm5ld19kcml2ZXIsIGludCBuLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzk3OS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM5ODA6XHRcdHJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIobmV3X2RyaXZlciAmIzQzOyBpLCBvd25lcik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5ODEtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTQwMzg9c3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNjAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjQwNjE6XHRyYyA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIsIFRISVNfTU9EVUxFKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDA2Mi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTQwNjQtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjQwNjU6XHRyYyA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2RyaXZlciwgVEhJU19NT0RVTEUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDY2LVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJiMzOTtkIG5lZWQgdG8gZXhhbWluZToKCioqQW5hbHl6aW5nIHRoZSBFTjg4MTFIIERyaXZlciBSZWdpc3RyYXRpb24qKgoKUmlnaHQsIHNvIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgZW44ODExaF9kcml2ZXJgIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLCBJIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGFpcl9lbjg4MTFoLmNgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBjb25zaWRlcmluZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZHJpdmVyJiMzOTtzIHJlZ2lzdHJhdGlvbiBpcyBoYXBwZW5pbmcuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbiBvciBtYWNybyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciB3aXRoIHRoZSBrZXJuZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBtb2R1bGVfaW5pdCgpYCwgb3IgcGVyaGFwcyBhIGN1c3RvbSByZWdpc3RyYXRpb24gZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlLiBPbmNlIEkgZmluZCBpdCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSwgd2hhdCByZXNvdXJjZXMgaXQgcmVxdWVzdHMsIGFuZCB3aGF0JiMzOTtzIGl0cyBvdmVyYWxsIGNvbmZpZ3VyYXRpb24uIEtub3dpbmcgZXhhY3RseSAqaG93KiBhbmQgKndoZW4qIHRoaXMgZHJpdmVyIGlzIGJlaW5nIGluaXRpYWxpemVkIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGJhc2Ugb2YgdW5kZXJzdGFuZGluZyBmb3IgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BoeV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0xMDEwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmMtMTA1OC1cbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MTA1OTptb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWRpbi5jLTEwNjAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MzIzPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jLTM0Mi1cbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM0Mzptb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWRpbjExMDAuYy0zNDQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluMTE0MF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWRpbjExNDAtcGh5LmMtNjAtfTtcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYzo2MTptb2R1bGVfcGh5X2RyaXZlcihhZGluMTE0MF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jLTYyLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTEyMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWlyb2hhX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmMtMTE0NS19IH07XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNDY6bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jLTExNDctXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTM4Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW44ODExaF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNDMwLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTQzMTptb2R1bGVfcGh5X2RyaXZlcihlbjg4MTFoX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguYy0xNDMyLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYz05MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYW03OWNfZHJpdmVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hbWQuYy0xMTEtXG5kcml2ZXJzL25ldC9waHkvYW1kLmM6MTEyOm1vZHVsZV9waHlfZHJpdmVyKGFtNzljX2RyaXZlcnMpO1xuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExMy1cbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTExODE9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFxcl9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjQtXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE1NjU6bW9kdWxlX3BoeV9kcml2ZXIoYXFyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jLTE1NjYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz05NDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFzMjF4eHhfZHJpdmVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9hczIxeHh4LmMtMTA3Ny19O1xuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzoxMDc4Om1vZHVsZV9waHlfZHJpdmVyKGFzMjF4eHhfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvYXMyMXh4eC5jLTEwNzktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM9OTc9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFzaXhfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmMtMTIwLVxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM6MTIxOm1vZHVsZV9waHlfZHJpdmVyKGFzaXhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yi5jLTEyMi1cbi0tXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmJfcnVzdC5ycy0xMi1cbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yl9ydXN0LnJzOjEzOmtlcm5lbDo6bW9kdWxlX3BoeV9kcml2ZXIhIHtcbmRyaXZlcnMvbmV0L3BoeS9heDg4Nzk2Yl9ydXN0LnJzLTE0LSAgICBkcml2ZXJzOiBbUGh5QVg4ODc3MkEsIFBoeUFYODg3NzJDLCBQaHlBWDg4Nzk2Ql0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYz0yODY9TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBiY21fY3lnbnVzX3BoeV90YmwpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODctXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI4ODptb2R1bGVfcGh5X2RyaXZlcihiY21fY3lnbnVzX3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2JjbS1jeWdudXMuYy0yODktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9ODY1PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDE0MF9kcml2ZXJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtODg0LX07XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo4ODU6bW9kdWxlX3BoeV9kcml2ZXIoYmNtNTQxNDBfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy04ODYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYz03Mj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNjN4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtNjN4eC5jLTkzLVxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYzo5NDptb2R1bGVfcGh5X2RyaXZlcihiY202M3h4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvYmNtNjN4eC5jLTk1LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM9OTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYmNtN3h4eF90YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTk2OS1cbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM6OTcwOm1vZHVsZV9waHlfZHJpdmVyKGJjbTd4eHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmMtOTcxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jPTQxOT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODQ4ODFfZHJpdmVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTQ2MS1cbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjQ2Mjptb2R1bGVfcGh5X2RyaXZlcihiY204NDg4MV9kcml2ZXJzKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jLTQ2My1cbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jPTE5ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODd4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTIxOC1cbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MjE5Om1vZHVsZV9waHlfZHJpdmVyKGJjbTg3eHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMjIwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jPTE0NjY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJyb2FkY29tX2RyaXZlcnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYy0xNzUzLVxuZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmM6MTc1NDptb2R1bGVfcGh5X2RyaXZlcihicm9hZGNvbV9kcml2ZXJzKTtcbmRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jLTE3NTUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jPTEyNz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgY2lzODIweF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvY2ljYWRhLmMtMTQ1LVxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jOjE0Njptb2R1bGVfcGh5X2RyaXZlcihjaXM4MjB4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvY2ljYWRhLmMtMTQ3LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmM9NzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGNvcnRpbmFfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2NvcnRpbmEuYy04Ny1cbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmM6ODg6bW9kdWxlX3BoeV9kcml2ZXIoY29ydGluYV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2NvcnRpbmEuYy04OS1cbi0tXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz0xOTY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRhcDgyMTFyX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kYXA4MjExci5jLTIwOC19O1xuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6MjA5Om1vZHVsZV9waHlfZHJpdmVyKGRhcDgyMTFyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYy0yMTAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYz0xNzM9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRtOTF4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZGF2aWNvbS5jLTIwOS1cbmRyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmM6MjEwOm1vZHVsZV9waHlfZHJpdmVyKGRtOTF4eF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYy0yMTEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYz0xNDU2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzNjQwX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmMtMTQ3MC1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmM6MTQ3MTptb2R1bGVfcGh5X2RyaXZlcihkcDgzNjQwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvZHA4MzY0MC5jLTE0NzItXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMjM2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODIyX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTI0NC19O1xuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzoxMjQ1Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4MjJfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODIyLmMtMTI0Ni1cbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg0OC5jPTE1Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4Mzg0OF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg0OC5jLTE2Ni19O1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NDguYzoxNjc6bW9kdWxlX3BoeV9kcml2ZXIoZHA4Mzg0OF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NDguYy0xNjgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYz0xMTgwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY3X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMTIxOC19O1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoxMjE5Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4NjdfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMtMTIyMC1cbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2OS5jPTkzND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4Mzg2OV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2OS5jLTkzOC19O1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjkuYzo5Mzk6bW9kdWxlX3BoeV9kcml2ZXIoZHA4Mzg2OV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2RwODM4NjkuYy05NDAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODN0YzgxMS5jPTM4Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4MzgxMV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvZHA4M3RjODExLmMtNDA0LX07XG5kcml2ZXJzL25ldC9waHkvZHA4M3RjODExLmM6NDA1Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4MTFfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGM4MTEuYy00MDYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jPTkzNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4M3RkNTEwX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGQ1MTAuYy05NjYtfSB9O1xuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jOjk2Nzptb2R1bGVfcGh5X2RyaXZlcihkcDgzdGQ1MTBfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGQ1MTAuYy05NjgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jPTY0ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4M3RnNzIwX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGc3MjAuYy02NjctfSB9O1xuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jOjY2ODptb2R1bGVfcGh5X2RyaXZlcihkcDgzdGc3MjBfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGc3MjAuYy02NjktXG4tLVxuZHJpdmVycy9uZXQvcGh5L2V0MTAxMWMuYz04Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZXQxMDExY19kcml2ZXJbXSA9IHsge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ldDEwMTFjLmMtOTQtXG5kcml2ZXJzL25ldC9waHkvZXQxMDExYy5jOjk1Om1vZHVsZV9waHlfZHJpdmVyKGV0MTAxMWNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9ldDEwMTFjLmMtOTYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jPTU3NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgaWNwbHVzX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9pY3BsdXMuYy02MjUtXG5kcml2ZXJzL25ldC9waHkvaWNwbHVzLmM6NjI2Om1vZHVsZV9waHlfZHJpdmVyKGljcGx1c19kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jLTYyNy1cbi0tXG5kcml2ZXJzL25ldC9waHkvaW50ZWwteHdheS5jPTU4ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgeHdheV9ncGh5W10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2ludGVsLXh3YXkuYy03NzAtfTtcbmRyaXZlcnMvbmV0L3BoeS9pbnRlbC14d2F5LmM6NzcxOm1vZHVsZV9waHlfZHJpdmVyKHh3YXlfZ3BoeSk7XG5kcml2ZXJzL25ldC9waHkvaW50ZWwteHdheS5jLTc3Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvbHh0LmM9MzA4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBseHQ5N3hfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L2x4dC5jLTM0OC1cbmRyaXZlcnMvbmV0L3BoeS9seHQuYzozNDk6bW9kdWxlX3BoeV9kcml2ZXIobHh0OTd4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbHh0LmMtMzUwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4cTJ4eHguYz0xMTAyPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdjg4cTJ4eHhfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODhxMnh4eC5jLTExNDMtXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHEyeHh4LmM6MTE0NDptb2R1bGVfcGh5X2RyaXZlcihtdjg4cTJ4eHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4cTJ4eHguYy0xMTQ1LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4eDIyMjIuYz01Nzg9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG12MjIyMl9kcml2ZXJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODh4MjIyMi5jLTU5NC19O1xuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODh4MjIyMi5jOjU5NTptb2R1bGVfcGh5X2RyaXZlcihtdjIyMjJfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHgyMjIyLmMtNTk2LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmM9MzY2Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWFydmVsbF9kcml2ZXJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYy00MTc2LVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYzo0MTc3Om1vZHVsZV9waHlfZHJpdmVyKG1hcnZlbGxfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jLTQxNzgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYz0xMzg4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdjMzMTBfZHJpdmVyc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmMtMTQ3Ni1cbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmM6MTQ3Nzptb2R1bGVfcGh5X2RyaXZlcihtdjMzMTBfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvbWFydmVsbDEwZy5jLTE0NzgtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jPTM3OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrXzJwNWdlcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYy00MDAtXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmM6NDAxOm1vZHVsZV9waHlfZHJpdmVyKG10a18ycDVnZXBoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jLTQwMi1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWZlLXNvYy5jPTMwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jX2ZlX3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWZlLXNvYy5jLTQxLVxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1mZS1zb2MuYzo0Mjptb2R1bGVfcGh5X2RyaXZlcihtdGtfc29jX2ZlX3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1mZS1zb2MuYy00My1zdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG10a19zb2NfZmVfcGh5X3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ5NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jLTE1NjgtXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE1Njk6bW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS1zb2MuYy0xNTcwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYz05OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX2dlcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYy0xMjktXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmM6MTMwOm1vZHVsZV9waHlfZHJpdmVyKG10a19nZXBoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jLTEzMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWVzb24tZ3hsLmM9MjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbWVzb25fZ3hsX3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZXNvbi1neGwuYy0yMjktXG5kcml2ZXJzL25ldC9waHkvbWVzb24tZ3hsLmM6MjMwOm1vZHVsZV9waHlfZHJpdmVyKG1lc29uX2d4bF9waHkpO1xuZHJpdmVycy9uZXQvcGh5L21lc29uLWd4bC5jLTIzMS1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmM9Njc4MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIga3NwaHlfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21pY3JlbC5jLTcxMDgtXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmM6NzEwOTptb2R1bGVfcGh5X2RyaXZlcihrc3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21pY3JlbC5jLTcxMTAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jPTU0Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWljcm9jaGlwX3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwLmMtNTg4LVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jOjU4OTptb2R1bGVfcGh5X2RyaXZlcihtaWNyb2NoaXBfcGh5X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwLmMtNTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDEuYz0yMTA0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtaWNyb2NoaXBfdDFfcGh5X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDEuYy0yMTYyLVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MS5jOjIxNjM6bW9kdWxlX3BoeV9kcml2ZXIobWljcm9jaGlwX3QxX3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MS5jLTIxNjQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYz01MDk9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1pY3JvY2hpcF90MXNfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYy01NjYtXG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jOjU2Nzptb2R1bGVfcGh5X2RyaXZlcihtaWNyb2NoaXBfdDFzX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jLTU2OC1cbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MzA3NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNjItXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzE2Mzptb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNjQtXG4tLVxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmM9MjU0OD1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdnNjODV4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbXNjYy9tc2NjX21haW4uYy0yOTg4LVxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmM6Mjk4OTptb2R1bGVfcGh5X2RyaXZlcih2c2M4NXh4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbXNjYy9tc2NjX21haW4uYy0yOTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9teGwtODYxMTAuYz05MzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG14bF9waHlfZHJ2c1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9teGwtODYxMTAuYy05NjgtXG5kcml2ZXJzL25ldC9waHkvbXhsLTg2MTEwLmM6OTY5Om1vZHVsZV9waHlfZHJpdmVyKG14bF9waHlfZHJ2cyk7XG5kcml2ZXJzL25ldC9waHkvbXhsLTg2MTEwLmMtOTcwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmM9MTEwMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ3B5X2RyaXZlcnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbXhsLWdweS5jLTE0NzgtfTtcbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmM6MTQ3OTptb2R1bGVfcGh5X2RyaXZlcihncHlfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvbXhsLWdweS5jLTE0ODAtXG4tLVxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmM9MTYwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY1X2RyaXZlcltdID0geyB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmMtMTY5LVxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmM6MTcwOm1vZHVsZV9waHlfZHJpdmVyKGRwODM4NjVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9uYXRpb25hbC5jLTE3MS1cbi0tXG5kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuYz0xNDM9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG5jbjI2MDAwX2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jLTE1OS1cbmRyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jOjE2MDptb2R1bGVfcGh5X2RyaXZlcihuY24yNjAwMF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmMtMTYxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtYzQ1LXRqYTExeHguYz0yMDczPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBueHBfYzQ1X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtYzQ1LXRqYTExeHguYy0yMTc3LVxuZHJpdmVycy9uZXQvcGh5L254cC1jNDUtdGphMTF4eC5jOjIxNzg6bW9kdWxlX3BoeV9kcml2ZXIobnhwX2M0NV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L254cC1jNDUtdGphMTF4eC5jLTIxNzktXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC1jYnR4LmM9MTk3PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBjYnR4X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtY2J0eC5jLTIxNS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtY2J0eC5jOjIxNjptb2R1bGVfcGh5X2RyaXZlcihjYnR4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbnhwLWNidHguYy0yMTctXG4tLVxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9ODE4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jLTkyNy1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjkyODptb2R1bGVfcGh5X2RyaXZlcih0amExMXh4X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy05MjktXG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vYXQ4MDN4LmM9MTExMz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYXQ4MDN4X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL2F0ODAzeC5jLTEyMzUtXG5kcml2ZXJzL25ldC9waHkvcWNvbS9hdDgwM3guYzoxMjM2Om1vZHVsZV9waHlfZHJpdmVyKGF0ODAzeF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vYXQ4MDN4LmMtMTIzNy1cbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NzkxPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxY2E4MDd4X2RyaXZlcnNbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtODQzLX07XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6ODQ0Om1vZHVsZV9waHlfZHJpdmVyKHFjYTgwN3hfZHJpdmVycyk7XG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtODQ1LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYz02NDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHFjYTgwOHhfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA4eC5jLTY3OC1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYzo2Nzk6bW9kdWxlX3BoeV9kcml2ZXIocWNhODA4eF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA4eC5jLTY4MC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmM9MjEzPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxY2E4M3h4X2RyaXZlcltdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgzeHguYy0yNTktXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmM6MjYwOm1vZHVsZV9waHlfZHJpdmVyKHFjYTgzeHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgzeHguYy0yNjEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3FzZW1pLmM9MTQ2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxczY2MTJfZHJpdmVyW10gPSB7IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcXNlbWkuYy0xNTUtXG5kcml2ZXJzL25ldC9waHkvcXNlbWkuYzoxNTY6bW9kdWxlX3BoeV9kcml2ZXIocXM2NjEyX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvcXNlbWkuYy0xNTctXG4tLVxuZHJpdmVycy9uZXQvcGh5L3F0MjAyNS5ycy0yMy1cbmRyaXZlcnMvbmV0L3BoeS9xdDIwMjUucnM6MjQ6a2VybmVsOjptb2R1bGVfcGh5X2RyaXZlciEge1xuZHJpdmVycy9uZXQvcGh5L3F0MjAyNS5ycy0yNS0gICAgZHJpdmVyczogW1BoeVFUMjAyNV0sXG4tLVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmM9MzA0Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMzM2NC1cbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jOjMzNjU6bW9kdWxlX3BoeV9kcml2ZXIocmVhbHRla19kcnZzKTtcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jLTMzNjYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmM9MTczPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByb2NrY2hpcF9waHlfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmMtMTg4LVxuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmM6MTg5Om1vZHVsZV9waHlfZHJpdmVyKHJvY2tjaGlwX3BoeV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmMtMTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zbXNjLmM9Njg3PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBzbXNjX3BoeV9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvc21zYy5jLTg4Mi1cbmRyaXZlcnMvbmV0L3BoeS9zbXNjLmM6ODgzOm1vZHVsZV9waHlfZHJpdmVyKHNtc2NfcGh5X2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvc21zYy5jLTg4NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvc3RlMTBYcC5jPTEwMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgc3RlMTB4cF9wZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYy0xMjQtXG5kcml2ZXJzL25ldC9waHkvc3RlMTBYcC5jOjEyNTptb2R1bGVfcGh5X2RyaXZlcihzdGUxMHhwX3Bkcml2ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYy0xMjYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3RlcmFuZXRpY3MuYz03Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdGVyYW5ldGljc19kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvdGVyYW5ldGljcy5jLTg4LVxuZHJpdmVycy9uZXQvcGh5L3RlcmFuZXRpY3MuYzo4OTptb2R1bGVfcGh5X2RyaXZlcih0ZXJhbmV0aWNzX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvdGVyYW5ldGljcy5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS91UEQ2MDYyMC5jPTgxPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB1cGQ2MDYyMF9kcml2ZXJbMV0gPSB7IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYy05MC1cbmRyaXZlcnMvbmV0L3BoeS91UEQ2MDYyMC5jOjkxOm1vZHVsZV9waHlfZHJpdmVyKHVwZDYwNjIwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYy05Mi1cbi0tXG5kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jPTYwMT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdnNjODJ4eF9kcml2ZXJbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jLTcxNS1cbmRyaXZlcnMvbmV0L3BoeS92aXRlc3NlLmM6NzE2Om1vZHVsZV9waHlfZHJpdmVyKHZzYzgyeHhfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3BoeS92aXRlc3NlLmMtNzE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDA1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTExNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQWlyb2hhIEVOODgxMUggTURJTyBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYW4gTURJTyBNQ1UgZHJpdmVyLCBgbWRpby1haXJvaGEtZW44ODExaC5jYCwgZm9yIHRoZSBBaXJvaGEgRU44ODExSCAyLjVHIFBIWSBtaWNyb2NvbnRyb2xsZXIsIGFsb25nIHdpdGggcmVmYWN0b3Jpbmcgd2l0aGluIHRoZSBgYWlyX2VuODgxMWguY2AgYW5kIGBhaXJfcGh5X2xpYi5jYCBkcml2ZXJzLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBgbWRpby1haXJvaGEtZW44ODExaC5jYCBhbmQgYGFpcl9lbjg4MTFoLmNgIGFyZSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGV4aXN0ZW5jZSBvZiBhbiBNRElPIGJ1cywgYW5kIHNwZWNpZmljYWxseSwgdG8gYSBkZXZpY2UgdHJlZSBub2RlIG1hdGNoaW5nIGAmIzM0O2Fpcm9oYSxlbjg4MTFoLW1jdSYjMzQ7YCBvciBQSFkgSURzIGAweDAzYTJhNDExIC8gMHhjMGZmMDRhMGAuCgpUaGUgTURJTyBkcml2ZXIgKGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgKSByZWxpZXMgb24gYE9GX01ESU9gLCBtYWtpbmcgaXQgY2xlYXIgdGhhdCBEZXZpY2UgVHJlZSBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGluc3RhbnRpYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGVzZSBhcmUgc3BlY2lmaWMgdG8gQWlyb2hhIGhhcmR3YXJlLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogY2FuIHRoaXMgaGFyZHdhcmUgZXZlbiAqYmUqIHJlYWNoZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9uIGFuIHg4Nl82NCBzeXN0ZW0/ICBCYXNlZCBvbiB3aGF0IEkga25vdyBhYm91dCB2aXJ0dWFsaXphdGlvbiBhbmQgdGhlIG5hdHVyZSBvZiBNRElPLCB0aGUgYW5zd2VyIGlzIGRlZmluaXRpdmVseSBuby4gVGhlcmUmIzM5O3Mgbm8gZW11bGF0aW9uIG9mIHRoaXMgQWlyb2hhLXNwZWNpZmljIE1ESU8gZGV2aWNlIG9yIHRoZSBFTjg4MTFIIFBIWSBpbiBRRU1VLiAgVGhpcyByZXF1aXJlcyBwaHlzaWNhbCBBaXJvaGEgRU44ODExSCBoYXJkd2FyZSwgY29ubmVjdGVkIHZpYSBhbiBNRElPIGJ1cywgc29tZXRoaW5nIGNvbW1vbiBvbiBBUk0gb3IgTUlQUyByb3V0ZXIvYm9hcmQgYXJjaGl0ZWN0dXJlcywgbm90IHg4Ni4KClRvIGNvbmZpcm0gdGhpcywgSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGd1aWRlbGluZXMgYWJvdXQgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBUaGlzIHBhdGNoIGZhbGxzIHNxdWFyZWx5IGludG8gdGhlIGNhdGVnb3J5IG9mICYjMzQ7VmVuZG9yLXNwZWNpZmljIFsuLi5dIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIFsuLi5dIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsuCgpUbyBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJIGFsc28gcmV2aWV3ZWQgdGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLiBXaGlsZSB0aGUga2VybmVsIGhlYWRlcnMgc3VjaCBhcyBgaW5jbHVkZS9saW51eC9waHkuaGAgd2VyZSB0b3VjaGVkLCB0aGF0JiMzOTtzIGZpbmUuIFRoZSBrZXkgaXMgaW4gdGhlIHNwZWNpZmljcyBvZiB0aGUgYWRkZWQgY29kZTogYG1kaW8tYWlyb2hhLWVuODgxMWguY2AsIGBhaXJfZW44ODExaC5jYCwgYGFpcl9waHlfbGliLmNgIGFuZCB0aGUgc3VwcG9ydGluZyBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBjb25maWcgZmlsZXMuICBUaGUgaGVscGVyIGZ1bmN0aW9ucyBhZGRlZCB0byBgcGh5LmhgLCB3aGlsZSBnZW5lcmljIGluIG5hbWUsIGFyZSB1c2VkICpleGNsdXNpdmVseSogaW4gdGhlIEFpcm9oYS1zcGVjaWZpYyBkcml2ZXJzLiAgSSB3aWxsIHF1aWNrbHkgY2hlY2ssIGhvd2V2ZXIsIHRoYXQgdGhlIG5ldyBgbWRpb2Rldl9sb2NrKmAgaGVscGVyIGZ1bmN0aW9ucyBhcmUgbm90IGNhbGxlZCBhbnl3aGVyZSBlbHNlIG91dHNpZGUgb2YgQWlyb2hhIGNvZGUgaW4gdGhlIGtlcm5lbCwgYW5kIGlmIHNvLCBpdCBmdXJ0aGVyIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyB1bnJlYWNoYWJsZSBjb2RlLgoKSW4gc2hvcnQsIHRoZXJlJiMzOTtzIG5vIHBhdGggZm9yIHRoaXMgY29kZSB0byBiZSBleGVjdXRlZCBpbiBhIHN0YW5kYXJkIHg4Nl82NCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gVGhlIGNvZGUgaXMgYXJjaGl0ZWN0dXJhbGx5IGlzb2xhdGVkIHRvIGhhcmR3YXJlIHRoYXQgZG9lc24mIzM5O3QgZXhpc3QgaW4gc3VjaCBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2Rldl9sb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTI2MD1zdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yNzUtLyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjc2OnN0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3Ny17XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yNzgtXHRpZiAobmVzdGVkKVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjc5Olx0XHRtZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjgwLVx0ZWxzZVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MjgxOlx0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0yODItfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTI4ND1pbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI5OC1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jOjI5OTpcdFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzAwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTMyND1zdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zMjktXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozMzA6XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zMzEtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzQ1PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldixcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTAtXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozNTE6XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTItXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MzY3PXN0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzcyLVxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzczOlx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMzc0LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTQxND1zdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbi0tXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy00MTctXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzo0MTg6XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy00MTktXHRyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIyODI9c3RhdGljIGlubGluZSB2b2lkIHBoeV91bmxvY2tfbWRpb19idXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODYtXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyODc6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODgte1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5Mi0vKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyOTM6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuaW5jbHVkZS9saW51eC9waHkuaC0yMjk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4ODQKCQkJCQkJCW91dHB1dDogMTE5CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIE1ESU8gTUNVL1BIWSBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhpcyBjb2RlIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGUgYG1kaW9kZXZfbG9jaypgIHZhcmlhYmxlcyBhcmUgZXhjbHVzaXZlbHkgdXNlZCB3aXRoaW4gYGFpcl9waHlfbGliLmNgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGNsZWFyIHNpZ25hbCB0aGF0IHRoaXMgd2hvbGUgbW9kaWZpY2F0aW9uIGlzIGNvbmZpbmVkIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIGZvciB0aGUgQWlyb2hhIEVOODgxMUggTURJTyBNQ1UgYW5kIFBIWS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBmdXp6aW5nIGFwcGxpY2FiaWxpdHksIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIGNvbmZpcm1lZC4KClRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBBaXJvaGEgaGFyZHdhcmUgaXMgbm90IHNvbWV0aGluZyB3ZSBjYW4gZW11bGF0ZSB3aXRoIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHNldHVwcyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIG9uIGFtZDY0LiBUaGUgZnVuY3Rpb25hbGl0eSByZXZvbHZlcyBhcm91bmQgbG9hZGluZyBNRDMyIGNvcmUgZmlybXdhcmUsIHdoaWNoLCB3aXRob3V0IGFjY2VzcyB0byB0aGUgYWN0dWFsIEFpcm9oYSBoYXJkd2FyZSBhbmQgaXRzIERldmljZSBUcmVlIHJlcHJlc2VudGF0aW9uLCBpcyBjb21wbGV0ZWx5IGluYWNjZXNzaWJsZS4KCkxldCYjMzk7cyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluOgoqICAgYFdvcnRoRnV6emluZ2A6IEZhbHNlIOKAkyB5ZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBFbXB0eSBhcnJheSDigJMgY29ycmVjdC4gTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCBvciByZWxldmFudCBoZXJlLgoqICAgYEZvY3VzU3ltYm9sc2A6IEFsc28gZW1wdHkg4oCTIG1ha2VzIHNlbnNlLiBObyBzcGVjaWZpYyBzeW1ib2xzIGFyZSBoaWdobGlnaHRlZCBmb3IgZnV6emluZy4KKiAgIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGUsIGFuZCB0aGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgTURJTyBNQ1UsIGFuZCBQSFkuCgpBbGwgY3JpdGVyaWEgcG9pbnQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLiBJdCYjMzk7cyBzYWZlIHRvIHNheSB0aGVzZSBjaGFuZ2VzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIGFueSBmdXp6aW5nIGFjdGl2aXRpZXMgd2UmIzM5O2QgcnVuIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gRXhjZWxsZW50LCBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBtYXJrIHRoaXMgb25lIGFwcHJvcHJpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgRGV2aWNlIFRyZWUgYmluZGluZ3MsIGFuIE1ESU8gTUNVIGRyaXZlciwgYW5kIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWS9NQ1UgaGFyZHdhcmUuIFRoZXNlIGRyaXZlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIEFpcm9oYSBoYXJkd2FyZSAoYW5kIHJlcXVpcmUgRGV2aWNlIFRyZWUgTURJTyBlbnVtZXJhdGlvbikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgRGV2aWNlIFRyZWUgYmluZGluZ3MsIGFuIE1ESU8gTUNVIGRyaXZlciwgYW5kIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWS9NQ1UgaGFyZHdhcmUuIFRoZXNlIGRyaXZlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIEFpcm9oYSBoYXJkd2FyZSAoYW5kIHJlcXVpcmUgRGV2aWNlIFRyZWUgTURJTyBlbnVtZXJhdGlvbikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDE6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjA4LjI5NDQzNTgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NDEwODE0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBEZXZpY2UgVHJlZSBiaW5kaW5ncywgYW4gTURJTyBNQ1UgZHJpdmVyLCBhbmQgZmlybXdhcmUgbG9hZGluZyBzdXBwb3J0IGZvciB0aGUgQWlyb2hhIEVOODgxMUggUEhZL01DVSBoYXJkd2FyZS4gVGhlc2UgZHJpdmVycyBhbmQgaGVscGVyIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgdG8gcGh5c2ljYWwgQWlyb2hhIGhhcmR3YXJlIChhbmQgcmVxdWlyZSBEZXZpY2UgVHJlZSBNRElPIGVudW1lcmF0aW9uKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjowOC4yOTQ0NDAzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzg4NDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYyNzY1Yjc3OWE0MWIyZDgzZjQ5MGJkYTFlOGM5MzYxMmY1MTgxYWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAwMTo1MjowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2JlMGFiODYyMjY2MVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXFxuQEAgLTAsMCArMSwxMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IEFpcm9oYSBFTjg4MTFIIFBIWSBNQ1VcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gQWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246IHxcXG4rICBUaGUgQWlyb2hhIEVOODgxMUggMi41RyBQSFkgaXMgYnVpbHQgYXJvdW5kIGFuIE1EMzIgY29yZSB0aGF0IGV4ZWN1dGVzXFxuKyAgZmlybXdhcmUgZnJvbSB2b2xhdGlsZSBSQU0uIFRoZSBjaGlwIGFuc3dlcnMgYW4gTURJTyBhZGRyZXNzIGZyb21cXG4rICBwb3dlci1vbiwgYnV0IHRoZSBQSFkgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QgdW50aWwgZmlybXdhcmUgaGFzIGJlZW5cXG4rICBsb2FkZWQgb3ZlciBNRElPLCBhbmQgaXQgZGlzYXBwZWFycyBhZ2FpbiBpZiB0aGF0IFJBTSBpcyBjbGVhcmVkLlxcbitcXG4rICBUaGlzIG5vZGUgZGVzY3JpYmVzIHRoZSBNRDMyIGNvcmUuIFRoZSBQSFkgZnVuY3Rpb24gYW5zd2VycyBvbiBhIGNoaWxkXFxuKyAgTURJTyBidXMgYmVsb3cgaXQsIGF0IHRoZSBzYW1lIGFkZHJlc3MgdGhlIGNvcmUgb2NjdXBpZXMgb24gdGhlIHBhcmVudFxcbisgIGJ1cywgYW5kIG9ubHkgd2hpbGUgZmlybXdhcmUgaXMgcnVubmluZy5cXG4rXFxuKyAgVGhlIHJlc2V0IGxpbmUgaXMgd2lyZWQgdG8gdGhlIGNvcmUsIGFuZCBhc3NlcnRpbmcgaXQgY2xlYXJzIHRoZVxcbisgIGZpcm13YXJlIFJBTS4gSXQgdGhlcmVmb3JlIGJlbG9uZ3MgdG8gdGhpcyBub2RlOiBhIHJlc2V0IGRlc2NyaWJlZCBvblxcbisgIHRoZSBQSFkgbm9kZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhhdCBub2RlJ3Mgb3duIGxpZmVjeWNsZSwgd2hhdGV2ZXJcXG4rICB0aGUgY29yZSBpcyBkb2luZy5cXG4rXFxuKyAgQSBib2FyZCB0aGF0IGhhcyBmaXJtd2FyZSBpbiBoYW5kIHdoaWxlIGl0cyBNRElPIGJ1cyBpcyBlbnVtZXJhdGVkIGNhblxcbisgIGRlc2NyaWJlIHRoZSBQSFkgb24gaXRzIG93biwgYXMgYWlyb2hhLGVuODgxMWgueWFtbCBkb2VzLCBhbmQgdGhhdCBmb3JtXFxuKyAgc3RheXMgdmFsaWQuIFRoaXMgYmluZGluZyBpcyBmb3IgdGhlIGJvYXJkcyB3aGVyZSBmaXJtd2FyZSBhcnJpdmVzXFxuKyAgbGF0ZXIsIHNvIHRoYXQgdGhlcmUgaXMgbm8gUEhZIHRvIGRlc2NyaWJlIHVudGlsIHRoZSBjb3JlIGhhcyBpdC5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgJG5vZGVuYW1lOlxcbisgICAgcGF0dGVybjogXFxcIl5tY3VAWzAtOWEtZl0rJFxcXCJcXG4rXFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGNvbnN0OiBhaXJvaGEsZW44ODExaC1tY3VcXG4rXFxuKyAgcmVnOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgcmVzZXQtZ3Bpb3M6XFxuKyAgICBtYXhJdGVtczogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFRoZSBHUElPIHBoYW5kbGUgYW5kIHNwZWNpZmllciBmb3IgdGhlIHJlc2V0IHNpZ25hbCB3aXJlZCB0byB0aGVcXG4rICAgICAgTUQzMiBjb3JlLlxcbitcXG4rICByZXNldC1hc3NlcnQtdXM6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgRGVsYXkgYWZ0ZXIgdGhlIHJlc2V0IHdhcyBhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXNcXG4rICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLlxcbitcXG4rICByZXNldC1kZWFzc2VydC11czpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBEZWxheSBhZnRlciB0aGUgcmVzZXQgd2FzIGRlYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXFxuKyAgICAgIHByb3BlcnR5IGlzIG1pc3NpbmcgdGhlIGRlbGF5IHdpbGwgYmUgc2tpcHBlZC5cXG4rXFxuKyAgbWRpbzpcXG4rICAgICRyZWY6IG1kaW8ueWFtbCNcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBUaGUgYnVzIHRoZSBQSFkgZnVuY3Rpb24gYW5zd2VycyBvbiB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLCBhdFxcbisgICAgICB0aGUgc2FtZSBhZGRyZXNzIHRoaXMgbm9kZSBvY2N1cGllcyBvbiB0aGUgcGFyZW50IGJ1cy4gT25seSB0aGF0XFxuKyAgICAgIG9uZSBhZGRyZXNzIGlzIHBhc3NlZCB0aHJvdWdoLlxcbitcXG4rICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbisgICAgICAnXmV0aGVybmV0LXBoeUBbMC05YS1mXSskJzpcXG4rICAgICAgICB0eXBlOiBvYmplY3RcXG4rICAgICAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbisgICAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcXG4rICAgICAgICAgIHJlc2V0LWFzc2VydC11czogZmFsc2VcXG4rICAgICAgICAgIHJlc2V0LWRlYXNzZXJ0LXVzOiBmYWxzZVxcbitcXG4rICAgICAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgICAgIFRoZSByZXNldCBsaW5lIGJlbG9uZ3MgdG8gdGhlIE1DVSBub2RlIGFib3ZlLiBBIHJlc2V0IGRlc2NyaWJlZFxcbisgICAgICAgICAgaGVyZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhpcyBub2RlJ3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXFxuKyAgICAgICAgICB0aGUgZmlybXdhcmUgdGhhdCBjcmVhdGVkIHRoaXMgUEhZLlxcbitcXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gcmVnXFxuKyAgLSBtZGlvXFxuK1xcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXFx1MDAzZVxcbisgICAgI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXFx1MDAzZVxcbitcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBtY3VAZCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwiYWlyb2hhLGVuODgxMWgtbWN1XFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4ZFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gXFx1MDAzY1xcdTAwMjZwaW8gMTQgR1BJT19BQ1RJVkVfTE9XXFx1MDAzZTtcXG4rICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXFx1MDAzYzEwMDAwXFx1MDAzZTtcXG4rICAgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXMgPSBcXHUwMDNjMjAwMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgbWRpbyB7XFxuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgICAgIGV0aGVybmV0LXBoeUBkIHtcXG4rICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImV0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVxcXCI7XFxuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4ZFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFxcdTAwM2NcXHUwMDI2cGlvIDE1IElSUV9UWVBFX0xFVkVMX0xPV1xcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggYjIzZmI2ZjJmNGVmNC4uM2JkODZkZjJiZTU3MSAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTc1MCw2ICs3NTAsMTQgQEAgUzpcXHRTdXBwb3J0ZWRcXG4gRjpcXHRmcy9haW8uY1xcbiBGOlxcdGluY2x1ZGUvbGludXgvKmFpbyouaFxcbiBcXG4rQUlST0hBIEVOODgxMUggTUNVIE1ESU8gRFJJVkVSXFxuK006XFx0QWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcbitMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXFxuK0Y6XFx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcbitcXG4gQUlST0hBIEVUSEVSTkVUIERSSVZFUlxcbiBNOlxcdExvcmVuem8gQmlhbmNvbmkgXFx1MDAzY2xvcmVuem9Aa2VybmVsLm9yZ1xcdTAwM2VcXG4gTDpcXHRsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcXG5pbmRleCBkNDQyNzhmMjZmYWJlLi4zM2VmYzZiYzg3NWY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcbkBAIC0yOSw2ICsyOSwxOSBAQCBjb25maWcgTURJT19BSVJPSEFcXG4gXFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE1ESU8gYnVzc2VzIGZvdW5kIGluIHRoZVxcbiBcXHQgIEFpcm9oYSBBTjc1ODMgU29DJ3MuXFxuIFxcbitjb25maWcgTURJT19BSVJPSEFfRU44ODExSFxcbitcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBPRl9NRElPXFxuK1xcdGRlcGVuZHMgb24gRldfTE9BREVSXFxuK1xcdHNlbGVjdCBBSVJfTkVUX1BIWUxJQlxcbitcXHRpbXBseSBBSVJfRU44ODExSF9QSFlcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVOODgxMUgsIHdoaWNoIGlzIGFuXFxuK1xcdCAgTUQzMiBtaWNyb2NvbnRyb2xsZXIgdW50aWwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBpbnRvIGl0IGFuZCBvbmx5XFxuK1xcdCAgYmVjb21lcyBhbiBFdGhlcm5ldCBQSFkgYWZ0ZXJ3YXJkcy4gVGhlIGRyaXZlciBkb3dubG9hZHMgdGhhdFxcbitcXHQgIGZpcm13YXJlIG9uY2UgaXQgYmVjb21lcyByZWFkYWJsZSwgb3IgYWRvcHRzIGZpcm13YXJlIGEgYm9vdGxvYWRlclxcbitcXHQgIGxlZnQgcnVubmluZy5cXG4rXFxuIGNvbmZpZyBNRElPX1NVTjRJXFxuIFxcdHRyaXN0YXRlIFxcXCJBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxcbmluZGV4IDA0ODU4Njc0NjAyNjIuLjA2ZDA5NjY3NWRhY2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcXG5AQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVxcdCs9IGZ3bm9kZV9tZGlvLm9cXG4gb2JqLSQoQ09ORklHX09GX01ESU8pXFx0XFx0Kz0gb2ZfbWRpby5vXFxuIFxcbiBvYmotJChDT05GSUdfTURJT19BSVJPSEEpXFx0XFx0Kz0gbWRpby1haXJvaGEub1xcbitvYmotJChDT05GSUdfTURJT19BSVJPSEFfRU44ODExSClcXHQrPSBtZGlvLWFpcm9oYS1lbjg4MTFoLm9cXG4gb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKVxcdFxcdCs9IG1kaW8tYXNwZWVkLm9cXG4gb2JqLSQoQ09ORklHX01ESU9fQkNNX0lQUk9DKVxcdFxcdCs9IG1kaW8tYmNtLWlwcm9jLm9cXG4gb2JqLSQoQ09ORklHX01ESU9fQkNNX1VOSU1BQylcXHRcXHQrPSBtZGlvLWJjbS11bmltYWMub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MjI0NTU4OTE0NzI3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXFxuQEAgLTAsMCArMSwzODIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXFxuKy8qXFxuKyAqIEFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIGRyaXZlclxcbisgKlxcbisgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cXG4rICogaXQsIGFuZCBvbmx5IHRoZW4gYW4gRXRoZXJuZXQgUEhZLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcG0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9GV19QT0xMX01JTl9NU1xcdDEwMDBcXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXFx0MzAwMDBcXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1dBUk5fTVNcXHQ2MDAwMFxcbitcXG4rc3RydWN0IGVuODgxMWhfbWN1IHtcXG4rXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbitcXHRzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvO1xcbitcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGZ3X3BvbGw7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuK1xcdHVuc2lnbmVkIGludCBwb2xsX21zO1xcbitcXHR1bnNpZ25lZCBpbnQgd2FpdGVkX21zO1xcbitcXHR1MzIgZndfdmVyc2lvbjtcXG4rXFx0Ym9vbCB3YXJuZWQ7XFxuK1xcdGJvb2wgZndfcnVubmluZztcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSlcXG4re1xcbitcXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChhZGRyICE9IG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcilcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXR1cm4gbWRpb2J1c19yZWFkX25lc3RlZChtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cywgYWRkciwgcmVnbnVtKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbClcXG4re1xcbitcXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChhZGRyICE9IG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcilcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXR1cm4gbWRpb2J1c193cml0ZV9uZXN0ZWQobWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VidXMsIGFkZHIsIHJlZ251bSwgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldmFkLFxcbitcXHRcXHRcXHRcXHRpbnQgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKGFkZHIgIT0gbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBtZGlvYnVzX2M0NV9yZWFkX25lc3RlZChtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cywgYWRkciwgZGV2YWQsIHJlZ251bSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW44ODExaF9tY3Vfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXFxuK1xcdFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKGFkZHIgIT0gbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VidXMsIGFkZHIsIGRldmFkLCByZWdudW0sXFxuK1xcdFxcdFxcdFxcdFxcdHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpwYXJlbnQgPSBtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cztcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJtZGlvXFxcIik7XFxuK1xcdGlmICghbnApXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0LyogTm90IGRldm06IHRoaXMgaXMgcmV0cmllZCwgYW5kIGEgZGV2bSBidXMgd291bGQgb25seSBiZSBmcmVlZCBhdFxcbitcXHQgKiBkZXRhY2guXFxuK1xcdCAqL1xcbitcXHRidXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxuK1xcdGlmICghYnVzKSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJhaXJvaGEtZW44ODExaFxcXCI7XFxuK1xcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzXFxcIiwgZGV2X25hbWUoZGV2KSk7XFxuK1xcdGJ1cy1cXHUwMDNlcHJpdiA9IG1jdTtcXG4rXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuK1xcdGlmIChwYXJlbnQtXFx1MDAzZXJlYWQpIHtcXG4rXFx0XFx0YnVzLVxcdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcXG4rXFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IGVuODgxMWhfbWN1X3dyaXRlO1xcbitcXHR9XFxuK1xcdGlmIChwYXJlbnQtXFx1MDAzZXJlYWRfYzQ1KSB7XFxuK1xcdFxcdGJ1cy1cXHUwMDNlcmVhZF9jNDUgPSBlbjg4MTFoX21jdV9yZWFkX2M0NTtcXG4rXFx0XFx0YnVzLVxcdTAwM2V3cml0ZV9jNDUgPSBlbjg4MTFoX21jdV93cml0ZV9jNDU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7XFxuK1xcdG9mX25vZGVfcHV0KG5wKTtcXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgIW1kaW9idXNfZ2V0X3BoeShidXMsIG1jdS1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcikpIHtcXG4rXFx0XFx0LyogQW4gSUQgcmVhZCB0aGF0IGZhaWxlZCBsZWF2ZXMgdGhlIGJ1cyByZWdpc3RlcmVkIGFuZCB0aGVcXG4rXFx0XFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdH1cXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRtZGlvYnVzX2ZyZWUoYnVzKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0bWN1LVxcdTAwM2VidXMgPSBidXM7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBTZXJpYWxpc2Ugd2l0aCB0aGUgUEhZIGJlbG93LCB3aGljaCByZWFjaGVzIHRoZSBzYW1lIHJlZ2lzdGVycyB1bmRlclxcbisgKiB0aGlzIGxvY2sgdGhyb3VnaCBwaHlfc2VsZWN0X3BhZ2UoKS5cXG4rICovXFxuK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZW44ODExaF9tY3VfY2hpcF9sb2NrKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtY3UtXFx1MDAzZWJ1cztcXG4rXFxuK1xcdGlmIChidXMpXFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBidXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuK3tcXG4rXFx0aWYgKGJ1cylcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2Z3X3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBlbjg4MTFoX21jdSwgZndfcG9sbCk7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtY3UtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IG1paV9idXMgKmNoaXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW1jdS1cXHUwMDNlZndfcnVubmluZykge1xcbitcXHRcXHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XFxuK1xcdFxcdHJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS1cXHUwMDNlbWRpb2RldiwgXFx1MDAyNm1jdS1cXHUwMDNlZndfdmVyc2lvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgISFjaGlwKTtcXG4rXFx0XFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJmaXJtd2FyZSAlMDh4IHJ1bm5pbmcgYWZ0ZXIgJXVtc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0bWN1LVxcdTAwM2Vmd192ZXJzaW9uLCBtY3UtXFx1MDAzZXdhaXRlZF9tcyk7XFxuK1xcdFxcdHJldCA9IGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRE0pID86XFxuK1xcdFxcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRtY3UtXFx1MDAzZWZ3X3J1bm5pbmcgPSB0cnVlO1xcbitcXHRcXHRtY3UtXFx1MDAzZXBvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TO1xcbitcXHRcXHRtY3UtXFx1MDAzZXdhaXRlZF9tcyA9IDA7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FybmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcXG4rXFx0ICogZndub2RlX21kaW8gZGVmZXJzIHdoaWxlIHRoZSBQSFkgbm9kZSdzIGludGVycnVwdCBjb250cm9sbGVyIGlzXFxuK1xcdCAqIG1pc3NpbmcsIHNvIGEgZmFpbHVyZSBpcyBub3QgbmVjZXNzYXJpbHkgcGVybWFuZW50LlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gbWN1LVxcdTAwM2VidXMgPyAwIDogZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKG1jdSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbityZXRyeTpcXG4rXFx0aWYgKCFtY3UtXFx1MDAzZXdhcm5lZCBcXHUwMDI2XFx1MDAyNiBtY3UtXFx1MDAzZXdhaXRlZF9tcyBcXHUwMDNlPSBFTjg4MTFIX0ZXX1dBUk5fTVMpIHtcXG4rXFx0XFx0aWYgKCFtY3UtXFx1MDAzZWZ3X3J1bm5pbmcpXFxuK1xcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIm5vIGZpcm13YXJlIGFmdGVyICV1bXMgb2Ygd2FpdGluZyBmb3IgJXMgYW5kICVzOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBtY3UtXFx1MDAzZXdhaXRlZF9tcywgRU44ODExSF9NRDMyX0RNLFxcbitcXHRcXHRcXHRcXHQgRU44ODExSF9NRDMyX0RTUCwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJubyBQSFkgYXQgYWRkcmVzcyAlZCwgJXVtcyBhZnRlciB0aGUgZmlybXdhcmUgc3RhcnRlZDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgbWN1LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyLCBtY3UtXFx1MDAzZXdhaXRlZF9tcyxcXG4rXFx0XFx0XFx0XFx0IEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FybmVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUGFzdCBpdHMgYnVkZ2V0LCBvbmx5IGEgZGVmZXJyYWwgd2lsbCBjaGFuZ2Ugb24gaXRzIG93bjogZXZlcnlcXG4rXFx0ICogb3RoZXIgZXJyb3IgcmVwZWF0cyBhIGJ1cyByZWdpc3RyYXRpb24sIGl0cyBtZXNzYWdlIGZyb20gdGhlIE1ESU9cXG4rXFx0ICogY29yZSBhbmQgaXRzIHVldmVudHMgZm9yIHRoZSB1cHRpbWUuIEZpcm13YXJlIGZpbGVzIGFyZSB0aGVcXG4rXFx0ICogZXhjZXB0aW9uLCBzaW5jZSB0aGV5IGNhbiBiZSBpbnN0YWxsZWQgYXQgYW55IHRpbWUuXFxuK1xcdCAqL1xcbitcXHRpZiAobWN1LVxcdTAwM2Vmd19ydW5uaW5nIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRVBST0JFX0RFRkVSIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBtY3UtXFx1MDAzZXdhaXRlZF9tcyBcXHUwMDNlPSBFTjg4MTFIX0ZXX1dBUk5fTVMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1jdS1cXHUwMDNlcG9sbF9tcyA9IG1pbihtY3UtXFx1MDAzZXBvbGxfbXMgKiAyLCBFTjg4MTFIX0ZXX1BPTExfTUFYX01TKTtcXG4rXFx0LyogQ291bnQgdGhlIHNsZWVwIGFoZWFkOiB0aGUgZmlyc3QgcnVuIHdhcyBpbW1lZGlhdGUuICovXFxuK1xcdG1jdS1cXHUwMDNld2FpdGVkX21zICs9IG1jdS1cXHUwMDNlcG9sbF9tcztcXG4rXFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwsXFxuK1xcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXMobWN1LVxcdTAwM2Vwb2xsX21zKSk7XFxuK31cXG4rXFxuKy8qIFRoZSBmaXJtd2FyZSBsaXZlcyBpbiB2b2xhdGlsZSBSQU06IG5vIHJlc2V0IHdoaWxlIHRoZSBNRDMyIHJlcG9ydHMgcmVhZHkuICovXFxuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQoc3RydWN0IGVuODgxMWhfbWN1ICptY3UsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9IG1jdS1cXHUwMDNlbWRpb2RldjtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0dTMyIGFzc2VydF91cyA9IDAsIGRlYXNzZXJ0X3VzID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGRldl9kYmcoZGV2LCBcXFwiTUQzMiBhbHJlYWR5IHJ1bm5pbmcsIGxlYXZpbmcgcmVzZXQgYWxvbmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghbWN1LVxcdTAwM2VyZXNldF9ncGlvKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBBIGZhaWxlZCByZWFkIGlzIG5vdCBhIGRvcm1hbnQgY2hpcCwgc28gZG8gbm90IHRvdWNoIGEgbGluZSB0aGF0XFxuK1xcdCAqIGlzIGFscmVhZHkgZGVhc3NlcnRlZC4gQW4gYXNzZXJ0ZWQgb25lIGlzIHdoeSB0aGUgcmVhZCBmYWlsZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVxcdTAwM2VyZXNldF9ncGlvKSBcXHUwMDNjPSAwKSB7XFxuK1xcdFxcdGRldl9kYmcoZGV2LCBcXFwiTUQzMiBzdGF0ZSB1bmtub3duICglZCksIGxlYXZpbmcgcmVzZXQgYWxvbmVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXFxcInJlc2V0LWFzc2VydC11c1xcXCIsIFxcdTAwMjZhc3NlcnRfdXMpO1xcbitcXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcXFwicmVzZXQtZGVhc3NlcnQtdXNcXFwiLCBcXHUwMDI2ZGVhc3NlcnRfdXMpO1xcbitcXG4rXFx0cmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChtY3UtXFx1MDAzZXJlc2V0X2dwaW8sIDEpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcInJlc2V0IG5vdCBhc3NlcnRlZDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChhc3NlcnRfdXMpXFxuK1xcdFxcdGZzbGVlcChhc3NlcnRfdXMpO1xcbitcXG4rXFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG1jdS1cXHUwMDNlcmVzZXRfZ3BpbywgMCk7XFxuK1xcdGlmIChkZWFzc2VydF91cylcXG4rXFx0XFx0ZnNsZWVwKGRlYXNzZXJ0X3VzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3U7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcbitcXHRtY3UgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1jdSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIW1jdSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRtY3UtXFx1MDAzZW1kaW9kZXYgPSBtZGlvZGV2O1xcbitcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIG1jdSk7XFxuK1xcbitcXHQvKiBSZWdpc3RyYXRpb24gbmVlZHMgdGhpcyBvbmx5IG9uY2UgdGhlIGZpcm13YXJlIHJ1bnMsIGJ1dCBhIERUXFxuK1xcdCAqIGhvbGUgc2hvdWxkIGZhaWwgdGhlIGJpbmQgbm93LCBub3QgYXMgYSB3b3JrLWl0ZW0gZXJyb3IgbGF0ZXIuXFxuK1xcdCAqL1xcbitcXHRucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1kaW9cXFwiKTtcXG4rXFx0aWYgKCFucClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJubyBtZGlvIG5vZGUgZGVzY3JpYmluZyB0aGUgUEhZXFxcXG5cXFwiKTtcXG4rXFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXG4rXFx0LyogVGhlIGNvcmUgY2xhaW1zIHJlc2V0LWdwaW9zIG9ubHkgZm9yIGRldmljZXMgZmxhZ2dlZCBhcyBQSFlzLiAqL1xcbitcXHRtY3UtXFx1MDAzZXJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIFxcXCJyZXNldFxcXCIsIEdQSU9EX0FTSVMpO1xcbitcXHRpZiAoSVNfRVJSKG1jdS1cXHUwMDNlcmVzZXRfZ3BpbykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihtY3UtXFx1MDAzZXJlc2V0X2dwaW8pLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gZ2V0IHJlc2V0IEdQSU9cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKG1jdS1cXHUwMDNlcmVzZXRfZ3BpbylcXG4rXFx0XFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWN1LVxcdTAwM2VyZXNldF9ncGlvLCBcXFwiRU44ODExSCByZXNldFxcXCIpO1xcbitcXG4rXFx0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsIGZhbHNlKTtcXG4rXFxuK1xcdG1jdS1cXHUwMDNlcG9sbF9tcyA9IEVOODgxMUhfRldfUE9MTF9NSU5fTVM7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3BvbGwsIGVuODgxMWhfbWN1X2Z3X3BvbGwpO1xcbitcXHQvKiBGcmVlemFibGU6IG5laXRoZXIgdGhlIGZpbGUgbG9va3VwIG5vciB0aGUgZG93bmxvYWQgbWF5IGxhbmQgb25cXG4rXFx0ICogYSBzdXNwZW5kaW5nIGJ1cy5cXG4rXFx0ICovXFxuK1xcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCBcXHUwMDI2bWN1LVxcdTAwM2Vmd19wb2xsLCAwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcXG4rXFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bWN1LVxcdTAwM2Vmd19wb2xsKTtcXG4rXFx0aWYgKG1jdS1cXHUwMDNlYnVzKSB7XFxuK1xcdFxcdG1kaW9idXNfdW5yZWdpc3RlcihtY3UtXFx1MDAzZWJ1cyk7XFxuK1xcdFxcdG1kaW9idXNfZnJlZShtY3UtXFx1MDAzZWJ1cyk7XFxuK1xcdFxcdG1jdS1cXHUwMDNlYnVzID0gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4rXFx0c3RydWN0IG1paV9idXMgKmNoaXA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBOb3RoaW5nIHRvIHJlZG86IHRoZSBwb2xsIGlzIGFybWVkIGFuZCB0aGF3cyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4gKi9cXG4rXFx0aWYgKCFtY3UtXFx1MDAzZWZ3X3J1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogTm90IG9uIHRoZSB3b3JrcXVldWU6IGEgRFNBIHBvcnQncyBQSFkgcmVzdW1lcyByaWdodCBhZnRlciB0aGlzXFxuK1xcdCAqIG9uZSBhbmQgY2FsbHMgcGh5X2luaXRfaHcoKSwgd2hpY2ggbmVlZHMgdGhlIGZpcm13YXJlIGJ5IHRoZW4uXFxuK1xcdCAqL1xcbitcXHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XFxuK1xcdGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQobWN1LCAhIWNoaXApO1xcbitcXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXFx1MDAzZW1kaW9kZXYsIFxcdTAwMjZtY3UtXFx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XFxuK1xcdGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKGNoaXApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHQvKiBUaGUgcmVsb2FkIHJlc3RvcmVzIHRoaXMgY2hpcCwgbm90IHRoZSBQSFkgYmVsb3cgaXQ6IGl0c1xcbitcXHRcXHQgKiBvd24gcmVzdW1lIGhhcyBhbHJlYWR5IGZhaWxlZCBieSB0aGVuIGFuZCBub3RoaW5nIGNhbGxzXFxuK1xcdFxcdCAqIHBoeV9pbml0X2h3KCkgdHdpY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZpcm13YXJlIG5vdCByZXN0b3JlZCwgcmVsb2FkaW5nOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdG1jdS1cXHUwMDNlZndfcnVubmluZyA9IGZhbHNlO1xcbitcXHRcXHRtY3UtXFx1MDAzZXBvbGxfbXMgPSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TO1xcbitcXHRcXHRtY3UtXFx1MDAzZXdhaXRlZF9tcyA9IDA7XFxuK1xcdFxcdG1jdS1cXHUwMDNld2FybmVkID0gZmFsc2U7XFxuK1xcdFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fZnJlZXphYmxlX3dxLCBcXHUwMDI2bWN1LVxcdTAwM2Vmd19wb2xsLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBERUZJTkVfU0lNUExFX0RFVl9QTV9PUFMoZW44ODExaF9tY3VfcG1fb3BzLCBOVUxMLCBlbjg4MTFoX21jdV9yZXN1bWUpO1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZW44ODExaF9tY3Vfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW44ODExaC1tY3VcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBlbjg4MTFoX21jdV9vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGVuODgxMWhfbWN1X2RyaXZlciA9IHtcXG4rXFx0LnByb2JlID0gZW44ODExaF9tY3VfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSBlbjg4MTFoX21jdV9yZW1vdmUsXFxuK1xcdC5tZGlvZHJ2LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiYWlyb2hhLWVuODgxMWgtbWN1XFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gZW44ODExaF9tY3Vfb2ZfbWF0Y2gsXFxuK1xcdFxcdC5wbSA9IHBtX3NsZWVwX3B0cihcXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcXG4rXFx0XFx0LyogVGVhcmluZyB0aGUgY2hpbGQgYnVzIGRvd24gdW5kZXIgYW4gYXR0YWNoZWQgUEhZIGlzIG5vdFxcbitcXHRcXHQgKiBzb21ldGhpbmcgdGhpcyBkcml2ZXIgY2FuIG1ha2Ugc2FmZSBvbiBpdHMgb3duLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxcbitcXHR9LFxcbit9O1xcbitcXG4rbWRpb19tb2R1bGVfZHJpdmVyKGVuODgxMWhfbWN1X2RyaXZlcik7XFxuK1xcbitNT0RVTEVfRklSTVdBUkUoRU44ODExSF9NRDMyX0RNKTtcXG4rTU9EVUxFX0ZJUk1XQVJFKEVOODgxMUhfTUQzMl9EU1ApO1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiQWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcXG5pbmRleCBlYzdjNDRjYTY4ZTdkLi44NjFiOGZlNDllMjRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcXG5AQCAtMjAsMjEgKzIwLDE1IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJhaXJfcGh5X2xpYi5oXFxcIlxcbiBcXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFxcdFxcdDB4MDNhMmE0MTFcXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcXHRcXHQweGMwZmYwNGEwXFxuIFxcbi0jZGVmaW5lIEVOODgxMUhfTUQzMl9ETVxcdFxcdFxcXCJhaXJvaGEvRXRoTUQzMi5kbS5iaW5cXFwiXFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFxcdFxcXCJhaXJvaGEvRXRoTUQzMi5EU1AuYmluXFxcIlxcbiAjZGVmaW5lIEFOODgxMUhCX01EMzJfRE1cXHRcXFwiYWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRNLmJpblxcXCJcXG4gI2RlZmluZSBBTjg4MTFIQl9NRDMyX0RTUFxcdFxcXCJhaXJvaGEvYW44ODExaGIvRXRoTUQzMl9DUkMuRFNQLmJpblxcXCJcXG4gXFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRE1cXHQweDAwMDAwMDAwXFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRFNQXFx0MHgwMDEwMDAwMFxcbi1cXG4gLyogTUlJIFJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIEFJUl9BVVhfQ1RSTF9TVEFUVVNcXHRcXHQweDFkXFxuICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0tcXHRHRU5NQVNLKDQsIDIpXFxuQEAgLTQ0LDggKzM4LDYgQEBcXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFxcdDB4Y1xcbiBcXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXFxuLSNkZWZpbmUgRU44ODExSF9QSFlfRldfU1RBVFVTXFx0XFx0MHg4MDA5XFxuLSNkZWZpbmUgICBFTjg4MTFIX1BIWV9SRUFEWVxcdFxcdFxcdDB4MDJcXG4gXFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcXHRcXHQweDgwMGJcXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVxcdFxcdDB4ODAwY1xcbkBAIC0xMDgsOCArMTAwLDYgQEBcXG4gI2RlZmluZSBFTjg4MTFIXzJQNUdfTFBBXFx0XFx0MHgzYjMwXFxuICNkZWZpbmUgICBFTjg4MTFIXzJQNUdfTFBBXzJQNUdcXHRcXHRcXHRCSVQoMClcXG4gXFxuLSNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OXFx0XFx0MHgzYjNjXFxuLVxcbiAjZGVmaW5lIEVOODgxMUhfUE9MQVJJVFlcXHRcXHQweGNhMGY4XFxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1RYX05PUk1BTFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lICAgRU44ODExSF9QT0xBUklUWV9SWF9SRVZFUlNFXFx0XFx0QklUKDEpXFxuQEAgLTEyMiwxMiArMTEyLDYgQEBcXG4gI2RlZmluZSBFTjg4MTFIX0NMS19DR01cXHRcXHRcXHQweGNmOTU4XFxuICNkZWZpbmUgICBFTjg4MTFIX0NMS19DR01fQ0tPXFx0XFx0XFx0QklUKDI2KVxcbiBcXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMVxcdFxcdDB4MGYwMDE4XFxuLSNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVFxcdFxcdDB4MFxcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfRklOSVNIXFx0XFx0MHgxXFxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzJcXHRcXHQweDgwMDAwMFxcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkdcXHRcXHRCSVQoMTEpXFxuLVxcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9TRVQxXFx0XFx0MHhmMDIwY1xcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04yXFx0XFx0MHhmMDIxOFxcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04zXFx0XFx0MHhmMDIxY1xcbkBAIC0yNzAsODYgKzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4gXFx0XFx0XFx0ICAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19haXJfd3JpdGVfYnVmKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBhZGRyZXNzLFxcbi1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCBvZmZzZXQ7XFxuLVxcdGludCByZXQ7XFxuLVxcdHUxNiB2YWw7XFxuLVxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcXG4tXFx0XFx0XFx0ICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcXG4tXFx0XFx0XFx0ICBsb3dlcl8xNl9iaXRzKGFkZHJlc3MpKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcXHUwMDNjIGZ3LVxcdTAwM2VzaXplOyBvZmZzZXQgKz0gNCkge1xcbi1cXHRcXHR2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYoXFx1MDAyNmZ3LVxcdTAwM2VkYXRhW29mZnNldCArIDJdKTtcXG4tXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZnctXFx1MDAzZWRhdGFbb2Zmc2V0XSk7XFxuLVxcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLCB2YWwpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcyxcXG4tXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXFxuLXtcXG4tXFx0aW50IHNhdmVkX3BhZ2U7XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXG4tXFx0aWYgKGZ3LVxcdTAwM2VzaXplICUgNCkge1xcbi1cXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcImZpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgIGZ3LVxcdTAwM2VzaXplKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4tXFxuLVxcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuLVxcbi1cXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbi1cXHRcXHRcXHRcXHQgICBhZGRyZXNzLCByZXQpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuLVxcdGludCByZXQsIHJlZ192YWx1ZTtcXG4rXFx0aW50IHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8sIGZhbHNlKTtcXG4gXFxuLVxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXFxuLVxcdFxcdFxcdFxcdFxcdCBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXFxuLVxcdHJldCA9IHBoeV9yZWFkX21tZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSxcXG4tXFx0XFx0XFx0XFx0XFx0RU44ODExSF9QSFlfRldfU1RBVFVTLCByZWdfdmFsdWUsXFxuLVxcdFxcdFxcdFxcdFxcdHJlZ192YWx1ZSA9PSBFTjg4MTFIX1BIWV9SRUFEWSxcXG4tXFx0XFx0XFx0XFx0XFx0MjAwMDAsIDc1MDAwMDAsIHRydWUpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTUNVIG5vdCByZWFkeTogMHgleFxcXFxuXFxcIiwgcmVnX3ZhbHVlKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLVxcdH1cXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTUNVIG5vdCByZWFkeTogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYW44ODExaGJfY2hlY2tfY3JjKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBzZXQxLFxcbkBAIC00MTEsNyArMzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcXG4rXFx0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBhZGRyZXNzLCBmdywgZmFsc2UpO1xcbiBcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC01MDcsNTQgKzQxOSwxMSBAQCBzdGF0aWMgaW50IGFuODgxMWhiX2xvYWRfZmlybXdhcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFxuIHN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4tXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuLVxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyO1xcbitcXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3MSwgRU44ODExSF9NRDMyX0RNLCBkZXYpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZmdzIsIEVOODgxMUhfTUQzMl9EU1AsIGRldik7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9yZWwxO1xcbi1cXG4tXFx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcXG4tXFx0XFx0XFx0XFx0XFx0IEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4tXFxuLVxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORyk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XFxuLVxcbi1cXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgQUlSX0ZXX0FERFJfRE0sICBmdzEpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RTUCwgZncyKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcXG4tXFxuLVxcdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDApO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0cmV0ID0gZW44ODExaF93YWl0X21jdV9yZWFkeShwaHlkZXYpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xcbi1cXG4tXFx0ZW44ODExaF9wcmludF9md192ZXJzaW9uKHBoeWRldik7XFxuLVxcbi1lbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0Olxcbi1cXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XFxuLVxcbi1lbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTpcXG4tXFx0cmVsZWFzZV9maXJtd2FyZShmdzEpO1xcbi1cXG4rXFx0cmV0ID0gYWlyX2VuODgxMWhfZndfZG93bmxvYWQoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgXFx1MDAyNnByaXYtXFx1MDAzZWZpcm13YXJlX3ZlcnNpb24sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGZhbHNlKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiTG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXG5AQCAtMTE1Niw4ICsxMDI1LDggQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXFxuLVxcdHByaXYtXFx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XFxuK1xcdC8qIEFkb3B0ZWQgZmlybXdhcmUgd2FzIG5ldmVyIHJlc3RhcnRlZCBoZXJlLiAqL1xcbitcXHRwcml2LVxcdTAwM2VtY3VfbmVlZHNfcmVzdGFydCA9IChyZXQgPT0gMSk7XFxuIFxcbiBcXHQvKiBNRElPX0RFVlMxLzIgZW1wdHksIHNvIHNldCBtbWRzX3ByZXNlbnQgYml0cyBoZXJlICovXFxuIFxcdHBoeWRldi1cXHUwMDNlYzQ1X2lkcy5tbWRzX3ByZXNlbnQgfD0gTURJT19ERVZTX1BNQVBNRCB8IE1ESU9fREVWU19BTjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xcbmluZGV4IDUxNDFkYjE5ZmE1ZWUuLjdmNzUzMDI3MzYwMTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xcbkBAIC04LDM3ICs4LDQyIEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlybXdhcmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd29yZHBhcnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJhaXJfcGh5X2xpYi5oXFxcIlxcbiBcXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4gXFx0XFx0XFx0XFx0ICAgdTMyIHBidXNfYWRkcmVzcywgdTMyICpwYnVzX2RhdGEpXFxuIHtcXG4gXFx0aW50IHBidXNfZGF0YV9sb3csIHBidXNfZGF0YV9oaWdoO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XFxuK1xcdHBidXNfZGF0YV9oaWdoID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XFxuIFxcdGlmIChwYnVzX2RhdGFfaGlnaCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwYnVzX2RhdGFfaGlnaDtcXG4gXFxuLVxcdHBidXNfZGF0YV9sb3cgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcXG4rXFx0cGJ1c19kYXRhX2xvdyA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XFxuIFxcdGlmIChwYnVzX2RhdGFfbG93IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBidXNfZGF0YV9sb3c7XFxuIFxcbkBAIC00Niw2NCArNTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSlcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfTU9ERSwgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9GSVhFRCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxcbi1cXHRcXHRcXHQgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxcbitcXHRcXHRcXHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YSkpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csXFxuK1xcdFxcdFxcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxcbiB7XFxuIFxcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcXG4gXFx0dTMyIHBidXNfZGF0YV9vbGQsIHBidXNfZGF0YV9uZXc7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxcbitcXHRcXHRcXHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXFxuLVxcdFxcdFxcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXFxuLVxcdFxcdFxcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcXG4rXFx0cGJ1c19kYXRhX2hpZ2ggPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcXG4gXFx0aWYgKHBidXNfZGF0YV9oaWdoIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBidXNfZGF0YV9oaWdoO1xcbiBcXG4tXFx0cGJ1c19kYXRhX2xvdyA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xcbitcXHRwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcXG4gXFx0aWYgKHBidXNfZGF0YV9sb3cgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcGJ1c19kYXRhX2xvdztcXG4gXFxuQEAgLTExMiwyMyArMTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRpZiAocGJ1c19kYXRhX25ldyA9PSBwYnVzX2RhdGFfb2xkKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcXG4tXFx0XFx0XFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcXG4rXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcXG4tXFx0XFx0XFx0ICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxcbitcXHRcXHRcXHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcXG4tXFx0XFx0XFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXFxuK1xcdFxcdFxcdCAgICAgIHVwcGVyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxcbi1cXHRcXHRcXHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxcbitcXHRcXHRcXHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC0xNDQsNyArMTUxLDggQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcXG4gXFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4gXFxuIFxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQocGh5ZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XFxuK1xcdFxcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgcGJ1c19kYXRhKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbiBcXHRcXHRcXHRcXHQgICBwYnVzX2FkZHJlc3MsIHJldCk7XFxuQEAgLTE2Myw3ICsxNzEsNyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcXG4gXFx0c2F2ZWRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcXG4gXFxuIFxcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgcGJ1c19hZGRyZXNzLFxcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgcGJ1c19kYXRhKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbkBAIC0xODMsOCArMTkxLDggQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBcXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbiBcXG4gXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KHBoeWRldiwgcGJ1c19hZGRyZXNzLCBtYXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRzZXQpO1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bWFzaywgc2V0KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXFxcblxcXCIsIF9fZnVuY19fLFxcbiBcXHRcXHRcXHRcXHQgICBwYnVzX2FkZHJlc3MsIHJldCk7XFxuQEAgLTE5NCw2ICsyMDIsMzQzIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkpO1xcbiBcXG4rc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4rXFx0XFx0XFx0ICAgY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4rXFx0aW50IHJldDtcXG4rXFx0dTE2IHZhbDtcXG4rXFxuK1xcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcXG4rXFx0XFx0XFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcXG4rXFx0XFx0XFx0ICAgICAgdXBwZXJfMTZfYml0cyhhZGRyZXNzKSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcXG4rXFx0XFx0XFx0ICAgICAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXFx1MDAzYyBsZW47IG9mZnNldCArPSA0KSB7XFxuK1xcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZGF0YVtvZmZzZXQgKyAyXSk7XFxuK1xcdFxcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcXHUwMDI2ZGF0YVtvZmZzZXRdKTtcXG4rXFx0XFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywgdmFsKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cXG4rc3RhdGljIGludCBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0aW50IHNhdmVkX3BhZ2UsIHJldDtcXG4rXFxuK1xcdHNhdmVkX3BhZ2UgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTtcXG4rXFx0aWYgKHNhdmVkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gc2F2ZWRfcGFnZTtcXG4rXFxuK1xcdGlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHtcXG4rXFx0XFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MsIHBhZ2UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHNhdmVkX3BhZ2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbitcXHRcXHRcXHRcXHQgICBpbnQgc2F2ZWRfcGFnZSwgaW50IHBhZ2UsIGludCByZXQpXFxuK3tcXG4rXFx0aW50IHJlc3RvcmU7XFxuK1xcbitcXHRpZiAoc2F2ZWRfcGFnZSAhPSBwYWdlKSB7XFxuK1xcdFxcdHJlc3RvcmUgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzYXZlZF9wYWdlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHJlc3RvcmUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXQgPSByZXN0b3JlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBOZXN0ZWQgd2hlbiB0aGUgY2FsbGVyIGFscmVhZHkgaG9sZHMgdGhlIGJ1cyB0aGlzIGNoaXAgaGFuZ3MgYmVsb3cuICovXFxuK3N0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcXG4re1xcbitcXHRpZiAobmVzdGVkKVxcbitcXHRcXHRtZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdG1kaW9kZXZfbG9jayhtZGlvZGV2KTtcXG4rfVxcbitcXG4raW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4rXFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBib29sIG5lc3RlZClcXG4re1xcbitcXHRzaXplX3QgY2h1bmssIGRvbmUgPSAwO1xcbitcXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xcbitcXG4rXFx0aWYgKGZ3LVxcdTAwM2VzaXplICUgNCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCJmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRmdy1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHR3aGlsZSAoZG9uZSBcXHUwMDNjIGZ3LVxcdTAwM2VzaXplKSB7XFxuK1xcdFxcdGNodW5rID0gbWluX3Qoc2l6ZV90LCBmdy1cXHUwMDNlc2l6ZSAtIGRvbmUsIEFJUl9GV19DSFVOS19CWVRFUyk7XFxuK1xcbitcXHRcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRcXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbitcXHRcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0cmV0ID0gc2F2ZWRfcGFnZTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0ID0gX19haXJfd3JpdGVfYnVmKG1kaW9kZXYsIGFkZHJlc3MgKyBkb25lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBmdy1cXHUwMDNlZGF0YSArIGRvbmUsIGNodW5rKTtcXG4rXFx0XFx0XFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJldCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGRvbmUgKz0gY2h1bms7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9md193cml0ZV9idWYpO1xcbitcXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIG5lc3RlZClcXG4re1xcbitcXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xcbitcXG4rXFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXG4rXFx0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbitcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc2F2ZWRfcGFnZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBib29sIG5lc3RlZClcXG4re1xcbitcXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xcbitcXG4rXFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXG4rXFx0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xcbitcXHRpZiAoc2F2ZWRfcGFnZSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc2F2ZWRfcGFnZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIHBidXNfYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBidXNfZGF0YSk7XFxuK1xcdFxcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xcbitcXHR9XFxuK1xcbitcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCBzYXZlZF9wYWdlLCByZXQ7XFxuK1xcbitcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XFxuK1xcdGlmIChzYXZlZF9wYWdlIFxcdTAwM2MgMCkge1xcbitcXHRcXHRyZXQgPSBzYXZlZF9wYWdlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIHBidXNfYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bWFzaywgc2V0KTtcXG4rXFx0XFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XFxuK1xcdH1cXG4rXFxuK1xcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBtbWRfcGh5X3JlYWQoKSBkcm9wcyB0aGUgZXJyb3JzIGZyb20gdGhlIHRocmVlIHdyaXRlcyB0aGF0IHNlbGVjdCB0aGVcXG4rICogcmVnaXN0ZXIsIHNvIGEgZmFpbGVkIHNlbGVjdGlvbiByZWFkcyBhIGRpZmZlcmVudCBvbmUgYmFjayBhcyBzdWNjZXNzLlxcbisgKi9cXG4rc3RhdGljIGludCBfX2Fpcl9tbWRfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUxNiBkZXZhZCwgdTE2IHJlZ251bSlcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsIGRldmFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgTUlJX01NRF9DVFJMLFxcbitcXHRcXHRcXHQgICAgICBkZXZhZCB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBfX21kaW9idXNfcmVhZChidXMsIGFkZHIsIE1JSV9NTURfREFUQSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWlyX21tZF9zdGF0dXNfcmVhZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcdHJldCA9IF9fYWlyX21tZF9yZWFkKG1kaW9kZXYsIE1ESU9fTU1EX1ZFTkQxLCBFTjg4MTFIX1BIWV9GV19TVEFUVVMpO1xcbitcXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGludCByZXQgPSBhaXJfbW1kX3N0YXR1c19yZWFkKG1kaW9kZXYsIG5lc3RlZCk7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiByZXQgPT0gRU44ODExSF9QSFlfUkVBRFk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcpO1xcbitcXG4raW50IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpXFxuK3tcXG4rXFx0aW50IHJldCwgcmVnX3ZhbHVlO1xcbitcXG4rXFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3dyaXRlKG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8xLFxcbitcXHRcXHRcXHRcXHRcXHQgIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIEJlY2F1c2Ugb2YgbWRpby1sb2NrLCBtYXkgaGF2ZSB0byB3YWl0IGZvciBtdWx0aXBsZSBsb2Fkcy4gQSByZWFkXFxuK1xcdCAqIGVycm9yIGVuZHMgdGhlIHBvbGwgYXQgb25jZSwgbGlrZSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KCkuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhaXJfbW1kX3N0YXR1c19yZWFkLCByZWdfdmFsdWUsXFxuK1xcdFxcdFxcdFxcdHJlZ192YWx1ZSBcXHUwMDNjIDAgfHxcXG4rXFx0XFx0XFx0XFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxcbitcXHRcXHRcXHRcXHQyMDAwMCwgNzUwMDAwMCwgdHJ1ZSwgbWRpb2RldiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJlZ192YWx1ZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZWdfdmFsdWU7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2RiZyhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBcXFwiTUNVIG5vdCByZWFkeTogMHgleFxcXFxuXFxcIiwgcmVnX3ZhbHVlKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KTtcXG4rXFxuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcXG4rXFx0XFx0XFx0ICAgIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcobWRpb2RldiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKG1kaW9kZXYsIEVOODgxMUhfRldfVkVSU0lPTixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGZ3X3ZlcnNpb24sIG5lc3RlZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiTUQzMiBhbHJlYWR5IHJ1bm5pbmcsIGZpcm13YXJlICUwOHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAqZndfdmVyc2lvbik7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNmZ3MiwgRU44ODExSF9NRDMyX0RTUCwgZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX3JlbDE7XFxuK1xcbitcXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfd3JpdGUobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgRU44ODExSF9GV19DVFJMXzFfU1RBUlQsIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KG1kaW9kZXYsIEVOODgxMUhfRldfQ1RSTF8yLFxcbitcXHRcXHRcXHRcXHRcXHQgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxcbitcXHRcXHRcXHRcXHRcXHQgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9ETSwgZncxLCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0cmV0ID0gYWlyX2Z3X3dyaXRlX2J1ZihtZGlvZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3MiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcXG4rXFxuK1xcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG5lc3RlZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XFxuK1xcbitcXHRyZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShtZGlvZGV2LCBuZXN0ZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xcbitcXG4rXFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxcbitcXHRcXHRcXHRcXHRcXHQgZndfdmVyc2lvbiwgbmVzdGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcXG4rXFxuK1xcdGRldl9pbmZvKGRldiwgXFxcIk1EMzIgZmlybXdhcmUgdmVyc2lvbjogJTA4eFxcXFxuXFxcIiwgKmZ3X3ZlcnNpb24pO1xcbitcXG4rYWlyX2Z3X2Rvd25sb2FkX291dDpcXG4rXFx0cmVsZWFzZV9maXJtd2FyZShmdzIpO1xcbitcXG4rYWlyX2Z3X2Rvd25sb2FkX3JlbDE6XFxuK1xcdHJlbGVhc2VfZmlybXdhcmUoZncxKTtcXG4rXFxuK1xcdC8qIE5vIGVycm9yIHByaW50OiBjYWxsZXJzIGxvZyBvbiB0aGVpciBvd24gdGVybXMsIGFuZCBhIHBvbGxlclxcbitcXHQgKiB3b3VsZCByZXBlYXQgaXQgb24gZXZlcnkgcmV0cnkuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKTtcXG4rXFxuIGludCBhaXJfcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHJldHVybiBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcXG5pbmRleCAwMWJiMzJlN2M3Yzk1Li41NmJhOTg3YTY4Y2M5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcXG5AQCAtMTAsMTIgKzEwLDE5IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhcXHUwMDNlXFxuK1xcbiAjZGVmaW5lIEFJUl9FWFRfUEFHRV9BQ0NFU1NcXHRcXHQweDFmXFxuIFxcbiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9TVEFOREFSRFxcdFxcdDB4MDAwMFxcbiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF8xXFx0XFx0MHgwMDAxXFxuICNkZWZpbmUgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzRcXHRcXHQweDAwMDRcXG4gXFxuKy8qIEJ5dGVzIHdyaXR0ZW4gYmV0d2VlbiBidXMgcmVsZWFzZXMsIHNvIHRoZSBvdGhlciBQSFlzIG9uIGl0IGdldCBhIHR1cm4uXFxuKyAqIEF0IGEgMi41IE1IeiBNREMgdGhpcyBzaXplIGhvbGRzIHRoZSBidXMgZm9yIGFib3V0IDMwIG1zLlxcbisgKi9cXG4rI2RlZmluZSBBSVJfRldfQ0hVTktfQllURVNcXHRcXHQyMzA0XFxuK1xcbiAvKiBNSUkgUmVnaXN0ZXJzIFBhZ2UgNCovXFxuICNkZWZpbmUgQUlSX0JQQlVTX01PREVcXHRcXHRcXHQweDEwXFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXFx0XFx0MHgwMDAwXFxuQEAgLTI5LDYgKzM2LDIwIEBAXFxuICNkZWZpbmUgQUlSX0JQQlVTX1JEX0RBVEFfSElHSFxcdFxcdDB4MTdcXG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9MT1dcXHRcXHQweDE4XFxuIFxcbisjZGVmaW5lIEFJUl9GV19BRERSX0RNXFx0XFx0XFx0MHgwMDAwMDAwMFxcbisjZGVmaW5lIEFJUl9GV19BRERSX0RTUFxcdFxcdFxcdDB4MDAxMDAwMDBcXG4rXFxuKyNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcXHRcXHQweDBmMDAxOFxcbisjZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfU1RBUlRcXHRcXHQweDBcXG4rI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSFxcdFxcdDB4MVxcbisjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXFx0XFx0MHg4MDAwMDBcXG4rI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkdcXHRcXHRCSVQoMTEpXFxuK1xcbisjZGVmaW5lIEVOODgxMUhfUEhZX0ZXX1NUQVRVU1xcdFxcdDB4ODAwOVxcbisjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcXHRcXHRcXHQweDAyXFxuK1xcbisjZGVmaW5lIEVOODgxMUhfRldfVkVSU0lPTlxcdFxcdDB4M2IzY1xcbitcXG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBcXHRcXHRcXHRcXHR1MzIgbWFzaywgdTMyIHNldCk7XFxuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXFxuQEAgLTM4LDQgKzU5LDEwIEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxcbiBpbnQgYWlyX3BoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBhaXJfcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpO1xcbiBcXG4rc3RydWN0IGZpcm13YXJlO1xcbitcXG4raW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4rXFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LCBib29sIG5lc3RlZCk7XFxuK2ludCBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKTtcXG4rXFxuICNlbmRpZiAvKiBfX0FJUl9QSFlfTElCX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaCBiL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ0OTRkYzZjMTAyMmNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxcbkBAIC0wLDAgKzEsMjUgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBaXJvaGEgVGVjaG5vbG9neSBDb3JwLlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQ29sbGFib3JhIEx0ZC5cXG4rICogICAgICAgICAgICAgICAgICAgIExvdWlzLUFsZXhpcyBFeXJhdWQgXFx1MDAzY2xvdWlzYWxleGlzLmV5cmF1ZEBjb2xsYWJvcmEuY29tXFx1MDAzZVxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXFx1MDAzY2ZAbGV4LmxhXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX19MSU5VWF9NRElPX0FJUk9IQV9FTjg4MTFIX0hcXG4rI2RlZmluZSBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgbWRpb19kZXZpY2U7XFxuK1xcbisjZGVmaW5lIEVOODgxMUhfTUQzMl9ETVxcdFxcdFxcdFxcXCJhaXJvaGEvRXRoTUQzMi5kbS5iaW5cXFwiXFxuKyNkZWZpbmUgRU44ODExSF9NRDMyX0RTUFxcdFxcdFxcXCJhaXJvaGEvRXRoTUQzMi5EU1AuYmluXFxcIlxcbitcXG4rLyogUmV0dXJucyAxIHJ1bm5pbmcsIDAgZG9ybWFudCwgbmVnYXRpdmUgb24gYSBmYWlsZWQgc3RhdHVzIHJlYWQuICovXFxuK2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKTtcXG4rLyogUmV0dXJucyAxIHdoZW4gaXQgYWRvcHRlZCBmaXJtd2FyZSB0aGF0IHdhcyBhbHJlYWR5IHJ1bm5pbmcuICovXFxuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcXG4rXFx0XFx0XFx0ICAgIGJvb2wgbmVzdGVkKTtcXG4rXFxuKyNlbmRpZiAvKiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmU3NGE4ZjVjZjVjNjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjI4NCw2ICsyMjg0LDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfdW5sb2NrX21kaW9fYnVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbit9XFxuK1xcbisvKiBGb3IgYSBidXMgcmVhY2hlZCB0aHJvdWdoIGFub3RoZXIgb25lLCBhcyBtZGlvYnVzX3JlYWRfbmVzdGVkKCkgaXMuICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X2xvY2tfbmVzdGVkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfdW5sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rfVxcbitcXG4gdm9pZCBwaHlfYXR0YWNoZWRfcHJpbnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuIFxcdF9fcHJpbnRmKDIsIDMpO1xcbiBjaGFyICpwaHlfYXR0YWNoZWRfaW5mb19pcnEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MDkuNzkyOTYxNzE4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjA0MjU0MDgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgRGV2aWNlIFRyZWUgYmluZGluZ3MsIGFuIE1ESU8gTUNVIGRyaXZlciwgYW5kIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBmb3IgdGhlIEFpcm9oYSBFTjg4MTFIIFBIWS9NQ1UgaGFyZHdhcmUuIFRoZXNlIGRyaXZlcnMgYW5kIGhlbHBlciBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIHRvIHBoeXNpY2FsIEFpcm9oYSBoYXJkd2FyZSAoYW5kIHJlcXVpcmUgRGV2aWNlIFRyZWUgTURJTyBlbnVtZXJhdGlvbikgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMjc2NWI3NzlhNDFiMmQ4M2Y0OTBiZGExZThjOTM2MTJmNTE4MWFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwMTo1MjowNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Fpcm9oYSxlbjg4MTFoLW1jdS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2JlMGFiODYyMjY2MVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbFxuQEAgLTAsMCArMSwxMTcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9haXJvaGEsZW44ODExaC1tY3UueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogQWlyb2hhIEVOODgxMUggUEhZIE1DVVxuK1xuK21haW50YWluZXJzOlxuKyAgLSBBbGVrc2VpIFN2aXJpZGtpbiBcdTAwM2NmQGxleC5sYVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBUaGUgQWlyb2hhIEVOODgxMUggMi41RyBQSFkgaXMgYnVpbHQgYXJvdW5kIGFuIE1EMzIgY29yZSB0aGF0IGV4ZWN1dGVzXG4rICBmaXJtd2FyZSBmcm9tIHZvbGF0aWxlIFJBTS4gVGhlIGNoaXAgYW5zd2VycyBhbiBNRElPIGFkZHJlc3MgZnJvbVxuKyAgcG93ZXItb24sIGJ1dCB0aGUgUEhZIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0IHVudGlsIGZpcm13YXJlIGhhcyBiZWVuXG4rICBsb2FkZWQgb3ZlciBNRElPLCBhbmQgaXQgZGlzYXBwZWFycyBhZ2FpbiBpZiB0aGF0IFJBTSBpcyBjbGVhcmVkLlxuK1xuKyAgVGhpcyBub2RlIGRlc2NyaWJlcyB0aGUgTUQzMiBjb3JlLiBUaGUgUEhZIGZ1bmN0aW9uIGFuc3dlcnMgb24gYSBjaGlsZFxuKyAgTURJTyBidXMgYmVsb3cgaXQsIGF0IHRoZSBzYW1lIGFkZHJlc3MgdGhlIGNvcmUgb2NjdXBpZXMgb24gdGhlIHBhcmVudFxuKyAgYnVzLCBhbmQgb25seSB3aGlsZSBmaXJtd2FyZSBpcyBydW5uaW5nLlxuK1xuKyAgVGhlIHJlc2V0IGxpbmUgaXMgd2lyZWQgdG8gdGhlIGNvcmUsIGFuZCBhc3NlcnRpbmcgaXQgY2xlYXJzIHRoZVxuKyAgZmlybXdhcmUgUkFNLiBJdCB0aGVyZWZvcmUgYmVsb25ncyB0byB0aGlzIG5vZGU6IGEgcmVzZXQgZGVzY3JpYmVkIG9uXG4rICB0aGUgUEhZIG5vZGUgd291bGQgYmUgcHVsc2VkIGJ5IHRoYXQgbm9kZSdzIG93biBsaWZlY3ljbGUsIHdoYXRldmVyXG4rICB0aGUgY29yZSBpcyBkb2luZy5cbitcbisgIEEgYm9hcmQgdGhhdCBoYXMgZmlybXdhcmUgaW4gaGFuZCB3aGlsZSBpdHMgTURJTyBidXMgaXMgZW51bWVyYXRlZCBjYW5cbisgIGRlc2NyaWJlIHRoZSBQSFkgb24gaXRzIG93biwgYXMgYWlyb2hhLGVuODgxMWgueWFtbCBkb2VzLCBhbmQgdGhhdCBmb3JtXG4rICBzdGF5cyB2YWxpZC4gVGhpcyBiaW5kaW5nIGlzIGZvciB0aGUgYm9hcmRzIHdoZXJlIGZpcm13YXJlIGFycml2ZXNcbisgIGxhdGVyLCBzbyB0aGF0IHRoZXJlIGlzIG5vIFBIWSB0byBkZXNjcmliZSB1bnRpbCB0aGUgY29yZSBoYXMgaXQuXG4rXG4rcHJvcGVydGllczpcbisgICRub2RlbmFtZTpcbisgICAgcGF0dGVybjogXCJebWN1QFswLTlhLWZdKyRcIlxuK1xuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IGFpcm9oYSxlbjg4MTFoLW1jdVxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgcmVzZXQtZ3Bpb3M6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFRoZSBHUElPIHBoYW5kbGUgYW5kIHNwZWNpZmllciBmb3IgdGhlIHJlc2V0IHNpZ25hbCB3aXJlZCB0byB0aGVcbisgICAgICBNRDMyIGNvcmUuXG4rXG4rICByZXNldC1hc3NlcnQtdXM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgYXNzZXJ0ZWQgaW4gbWljcm9zZWNvbmRzLiBJZiB0aGlzXG4rICAgICAgcHJvcGVydHkgaXMgbWlzc2luZyB0aGUgZGVsYXkgd2lsbCBiZSBza2lwcGVkLlxuK1xuKyAgcmVzZXQtZGVhc3NlcnQtdXM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIERlbGF5IGFmdGVyIHRoZSByZXNldCB3YXMgZGVhc3NlcnRlZCBpbiBtaWNyb3NlY29uZHMuIElmIHRoaXNcbisgICAgICBwcm9wZXJ0eSBpcyBtaXNzaW5nIHRoZSBkZWxheSB3aWxsIGJlIHNraXBwZWQuXG4rXG4rICBtZGlvOlxuKyAgICAkcmVmOiBtZGlvLnlhbWwjXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFRoZSBidXMgdGhlIFBIWSBmdW5jdGlvbiBhbnN3ZXJzIG9uIHdoaWxlIGZpcm13YXJlIGlzIHJ1bm5pbmcsIGF0XG4rICAgICAgdGhlIHNhbWUgYWRkcmVzcyB0aGlzIG5vZGUgb2NjdXBpZXMgb24gdGhlIHBhcmVudCBidXMuIE9ubHkgdGhhdFxuKyAgICAgIG9uZSBhZGRyZXNzIGlzIHBhc3NlZCB0aHJvdWdoLlxuK1xuKyAgICBwYXR0ZXJuUHJvcGVydGllczpcbisgICAgICAnXmV0aGVybmV0LXBoeUBbMC05YS1mXSskJzpcbisgICAgICAgIHR5cGU6IG9iamVjdFxuKyAgICAgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICByZXNldC1ncGlvczogZmFsc2VcbisgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzOiBmYWxzZVxuKyAgICAgICAgICByZXNldC1kZWFzc2VydC11czogZmFsc2VcbitcbisgICAgICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICBUaGUgcmVzZXQgbGluZSBiZWxvbmdzIHRvIHRoZSBNQ1Ugbm9kZSBhYm92ZS4gQSByZXNldCBkZXNjcmliZWRcbisgICAgICAgICAgaGVyZSB3b3VsZCBiZSBwdWxzZWQgYnkgdGhpcyBub2RlJ3Mgb3duIGxpZmVjeWNsZSwgYW5kIHRoYXQgZXJhc2VzXG4rICAgICAgICAgIHRoZSBmaXJtd2FyZSB0aGF0IGNyZWF0ZWQgdGhpcyBQSFkuXG4rXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gbWRpb1xuK1xuK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4rXG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgbWN1QGQge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImFpcm9oYSxlbjg4MTFoLW1jdVwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzB4ZFx1MDAzZTtcbisgICAgICAgICAgICByZXNldC1ncGlvcyA9IFx1MDAzY1x1MDAyNnBpbyAxNCBHUElPX0FDVElWRV9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgcmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMTAwMDBcdTAwM2U7XG4rICAgICAgICAgICAgcmVzZXQtZGVhc3NlcnQtdXMgPSBcdTAwM2MyMDAwMFx1MDAzZTtcbitcbisgICAgICAgICAgICBtZGlvIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIGV0aGVybmV0LXBoeUBkIHtcbisgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDAzYTIuYTQxMVwiO1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMHhkXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy1leHRlbmRlZCA9IFx1MDAzY1x1MDAyNnBpbyAxNSBJUlFfVFlQRV9MRVZFTF9MT1dcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYjIzZmI2ZjJmNGVmNC4uM2JkODZkZjJiZTU3MSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTc1MCw2ICs3NTAsMTQgQEAgUzpcdFN1cHBvcnRlZFxuIEY6XHRmcy9haW8uY1xuIEY6XHRpbmNsdWRlL2xpbnV4LyphaW8qLmhcbiBcbitBSVJPSEEgRU44ODExSCBNQ1UgTURJTyBEUklWRVJcbitNOlx0QWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbitMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuK1M6XHRNYWludGFpbmVkXG4rRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYWlyb2hhLGVuODgxMWgtbWN1LnlhbWxcbitGOlx0ZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNcbitGOlx0aW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuK1xuIEFJUk9IQSBFVEhFUk5FVCBEUklWRVJcbiBNOlx0TG9yZW56byBCaWFuY29uaSBcdTAwM2Nsb3JlbnpvQGtlcm5lbC5vcmdcdTAwM2VcbiBMOlx0bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWcgYi9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbmluZGV4IGQ0NDI3OGYyNmZhYmUuLjMzZWZjNmJjODc1ZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xuQEAgLTI5LDYgKzI5LDE5IEBAIGNvbmZpZyBNRElPX0FJUk9IQVxuIFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBmb3IgdGhlIE1ESU8gYnVzc2VzIGZvdW5kIGluIHRoZVxuIFx0ICBBaXJvaGEgQU43NTgzIFNvQydzLlxuIFxuK2NvbmZpZyBNRElPX0FJUk9IQV9FTjg4MTFIXG4rXHR0cmlzdGF0ZSBcIkFpcm9oYSBFTjg4MTFIIE1ESU8gZGV2aWNlIHN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBPRl9NRElPXG4rXHRkZXBlbmRzIG9uIEZXX0xPQURFUlxuK1x0c2VsZWN0IEFJUl9ORVRfUEhZTElCXG4rXHRpbXBseSBBSVJfRU44ODExSF9QSFlcbitcdGhlbHBcbitcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU44ODExSCwgd2hpY2ggaXMgYW5cbitcdCAgTUQzMiBtaWNyb2NvbnRyb2xsZXIgdW50aWwgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBpbnRvIGl0IGFuZCBvbmx5XG4rXHQgIGJlY29tZXMgYW4gRXRoZXJuZXQgUEhZIGFmdGVyd2FyZHMuIFRoZSBkcml2ZXIgZG93bmxvYWRzIHRoYXRcbitcdCAgZmlybXdhcmUgb25jZSBpdCBiZWNvbWVzIHJlYWRhYmxlLCBvciBhZG9wdHMgZmlybXdhcmUgYSBib290bG9hZGVyXG4rXHQgIGxlZnQgcnVubmluZy5cbitcbiBjb25maWcgTURJT19TVU40SVxuIFx0dHJpc3RhdGUgXCJBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwiXG4gXHRkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVcbmluZGV4IDA0ODU4Njc0NjAyNjIuLjA2ZDA5NjY3NWRhY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXG5AQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0Kz0gZndub2RlX21kaW8ub1xuIG9iai0kKENPTkZJR19PRl9NRElPKVx0XHQrPSBvZl9tZGlvLm9cbiBcbiBvYmotJChDT05GSUdfTURJT19BSVJPSEEpXHRcdCs9IG1kaW8tYWlyb2hhLm9cbitvYmotJChDT05GSUdfTURJT19BSVJPSEFfRU44ODExSClcdCs9IG1kaW8tYWlyb2hhLWVuODgxMWgub1xuIG9iai0kKENPTkZJR19NRElPX0FTUEVFRClcdFx0Kz0gbWRpby1hc3BlZWQub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9JUFJPQylcdFx0Kz0gbWRpby1iY20taXByb2Mub1xuIG9iai0kKENPTkZJR19NRElPX0JDTV9VTklNQUMpXHRcdCs9IG1kaW8tYmNtLXVuaW1hYy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyMjQ1NTg5MTQ3Mjdcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jXG5AQCAtMCwwICsxLDM4MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xuKy8qXG4rICogQWlyb2hhIEVOODgxMUggTURJTyBkZXZpY2UgZHJpdmVyXG4rICpcbisgKiBUaGUgRU44ODExSCBpcyBhbiBNRDMyIG1pY3JvY29udHJvbGxlciB1bnRpbCBmaXJtd2FyZSBpcyBkb3dubG9hZGVkIGludG9cbisgKiBpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdGhlcm5ldCBQSFkuXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlybXdhcmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dwaW8vY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcG0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXHUwMDNlXG4rXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUlOX01TXHQxMDAwXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1BPTExfTUFYX01TXHQzMDAwMFxuKyNkZWZpbmUgRU44ODExSF9GV19XQVJOX01TXHQ2MDAwMFxuK1xuK3N0cnVjdCBlbjg4MTFoX21jdSB7XG4rXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4rXHRzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBmd19wb2xsO1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cztcbitcdHVuc2lnbmVkIGludCBwb2xsX21zO1xuK1x0dW5zaWduZWQgaW50IHdhaXRlZF9tcztcbitcdHUzMiBmd192ZXJzaW9uO1xuK1x0Ym9vbCB3YXJuZWQ7XG4rXHRib29sIGZ3X3J1bm5pbmc7XG4rfTtcbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG4re1xuK1x0c3RydWN0IGVuODgxMWhfbWN1ICptY3UgPSBidXMtXHUwMDNlcHJpdjtcbitcbitcdGlmIChhZGRyICE9IG1jdS1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0cmV0dXJuIG1kaW9idXNfcmVhZF9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCByZWdudW0pO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBtZGlvYnVzX3dyaXRlX25lc3RlZChtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMsIGFkZHIsIHJlZ251bSwgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldmFkLFxuK1x0XHRcdFx0aW50IHJlZ251bSlcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGJ1cy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKGFkZHIgIT0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcilcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXR1cm4gbWRpb2J1c19jNDVfcmVhZF9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcbit9XG4rXG4rc3RhdGljIGludCBlbjg4MTFoX21jdV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCxcbitcdFx0XHRcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoYWRkciAhPSBtY3UtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBtZGlvYnVzX2M0NV93cml0ZV9uZXN0ZWQobWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLCBhZGRyLCBkZXZhZCwgcmVnbnVtLFxuK1x0XHRcdFx0XHR2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X2J1c19yZWdpc3RlcihzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSlcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqcGFyZW50ID0gbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCJtZGlvXCIpO1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHQvKiBOb3QgZGV2bTogdGhpcyBpcyByZXRyaWVkLCBhbmQgYSBkZXZtIGJ1cyB3b3VsZCBvbmx5IGJlIGZyZWVkIGF0XG4rXHQgKiBkZXRhY2guXG4rXHQgKi9cbitcdGJ1cyA9IG1kaW9idXNfYWxsb2MoKTtcbitcdGlmICghYnVzKSB7XG4rXHRcdG9mX25vZGVfcHV0KG5wKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRidXMtXHUwMDNlbmFtZSA9IFwiYWlyb2hhLWVuODgxMWhcIjtcbitcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcIiVzXCIsIGRldl9uYW1lKGRldikpO1xuK1x0YnVzLVx1MDAzZXByaXYgPSBtY3U7XG4rXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuK1x0aWYgKHBhcmVudC1cdTAwM2VyZWFkKSB7XG4rXHRcdGJ1cy1cdTAwM2VyZWFkID0gZW44ODExaF9tY3VfcmVhZDtcbitcdFx0YnVzLVx1MDAzZXdyaXRlID0gZW44ODExaF9tY3Vfd3JpdGU7XG4rXHR9XG4rXHRpZiAocGFyZW50LVx1MDAzZXJlYWRfYzQ1KSB7XG4rXHRcdGJ1cy1cdTAwM2VyZWFkX2M0NSA9IGVuODgxMWhfbWN1X3JlYWRfYzQ1O1xuK1x0XHRidXMtXHUwMDNld3JpdGVfYzQ1ID0gZW44ODExaF9tY3Vfd3JpdGVfYzQ1O1xuK1x0fVxuK1xuK1x0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG5wKTtcbitcdG9mX25vZGVfcHV0KG5wKTtcbitcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhbWRpb2J1c19nZXRfcGh5KGJ1cywgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcikpIHtcbitcdFx0LyogQW4gSUQgcmVhZCB0aGF0IGZhaWxlZCBsZWF2ZXMgdGhlIGJ1cyByZWdpc3RlcmVkIGFuZCB0aGVcbitcdFx0ICogUEhZIGFic2VudDsgb2ZfbWRpb2J1c19yZWdpc3RlcigpIHJldHVybnMgMCBlaXRoZXIgd2F5LlxuK1x0XHQgKi9cbitcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHR9XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1kaW9idXNfZnJlZShidXMpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0bWN1LVx1MDAzZWJ1cyA9IGJ1cztcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBTZXJpYWxpc2Ugd2l0aCB0aGUgUEhZIGJlbG93LCB3aGljaCByZWFjaGVzIHRoZSBzYW1lIHJlZ2lzdGVycyB1bmRlclxuKyAqIHRoaXMgbG9jayB0aHJvdWdoIHBoeV9zZWxlY3RfcGFnZSgpLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqZW44ODExaF9tY3VfY2hpcF9sb2NrKHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1KVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtY3UtXHUwMDNlYnVzO1xuK1xuK1x0aWYgKGJ1cylcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdHJldHVybiBidXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X2NoaXBfdW5sb2NrKHN0cnVjdCBtaWlfYnVzICpidXMpXG4re1xuK1x0aWYgKGJ1cylcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9md19wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZW44ODExaF9tY3UsIGZ3X3BvbGwpO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0c3RydWN0IG1paV9idXMgKmNoaXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFtY3UtXHUwMDNlZndfcnVubmluZykge1xuK1x0XHRjaGlwID0gZW44ODExaF9tY3VfY2hpcF9sb2NrKG1jdSk7XG4rXHRcdHJldCA9IGFpcl9lbjg4MTFoX2Z3X2Rvd25sb2FkKG1jdS1cdTAwM2VtZGlvZGV2LCBcdTAwMjZtY3UtXHUwMDNlZndfdmVyc2lvbixcbitcdFx0XHRcdFx0ICAgICAgISFjaGlwKTtcbitcdFx0ZW44ODExaF9tY3VfY2hpcF91bmxvY2soY2hpcCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0ZGV2X2RiZyhkZXYsIFwiZmlybXdhcmUgJTA4eCBydW5uaW5nIGFmdGVyICV1bXNcXG5cIixcbitcdFx0XHRtY3UtXHUwMDNlZndfdmVyc2lvbiwgbWN1LVx1MDAzZXdhaXRlZF9tcyk7XG4rXHRcdHJldCA9IGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRE0pID86XG4rXHRcdCAgICAgIGZpcm13YXJlX3JlcXVlc3RfY2FjaGUoZGV2LCBFTjg4MTFIX01EMzJfRFNQKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRkZXZfZGJnKGRldiwgXCJub3QgY2FjaGVkLCByZXN1bWUgd2lsbCB3YW50IHRoZSBmaWxlczogJXBlXFxuXCIsXG4rXHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuK1x0XHRtY3UtXHUwMDNlZndfcnVubmluZyA9IHRydWU7XG4rXHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdFx0bWN1LVx1MDAzZXdhaXRlZF9tcyA9IDA7XG4rXHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qIFJlc3VtZSByZS1ydW5zIHRoZSBkb3dubG9hZCwgc28gdGhlIGJ1cyBjYW4gYWxyZWFkeSBiZSBoZXJlLCBhbmRcbitcdCAqIGZ3bm9kZV9tZGlvIGRlZmVycyB3aGlsZSB0aGUgUEhZIG5vZGUncyBpbnRlcnJ1cHQgY29udHJvbGxlciBpc1xuK1x0ICogbWlzc2luZywgc28gYSBmYWlsdXJlIGlzIG5vdCBuZWNlc3NhcmlseSBwZXJtYW5lbnQuXG4rXHQgKi9cbitcdHJldCA9IG1jdS1cdTAwM2VidXMgPyAwIDogZW44ODExaF9tY3VfYnVzX3JlZ2lzdGVyKG1jdSk7XG4rXHRpZiAoIXJldClcbitcdFx0cmV0dXJuO1xuK1xuK3JldHJ5OlxuK1x0aWYgKCFtY3UtXHUwMDNld2FybmVkIFx1MDAyNlx1MDAyNiBtY3UtXHUwMDNld2FpdGVkX21zIFx1MDAzZT0gRU44ODExSF9GV19XQVJOX01TKSB7XG4rXHRcdGlmICghbWN1LVx1MDAzZWZ3X3J1bm5pbmcpXG4rXHRcdFx0ZGV2X3dhcm4oZGV2LCBcIm5vIGZpcm13YXJlIGFmdGVyICV1bXMgb2Ygd2FpdGluZyBmb3IgJXMgYW5kICVzOiAlcGVcXG5cIixcbitcdFx0XHRcdCBtY3UtXHUwMDNld2FpdGVkX21zLCBFTjg4MTFIX01EMzJfRE0sXG4rXHRcdFx0XHQgRU44ODExSF9NRDMyX0RTUCwgRVJSX1BUUihyZXQpKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGRldl93YXJuKGRldiwgXCJubyBQSFkgYXQgYWRkcmVzcyAlZCwgJXVtcyBhZnRlciB0aGUgZmlybXdhcmUgc3RhcnRlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHQgbWN1LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciwgbWN1LVx1MDAzZXdhaXRlZF9tcyxcbitcdFx0XHRcdCBFUlJfUFRSKHJldCkpO1xuK1x0XHRtY3UtXHUwMDNld2FybmVkID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qIFBhc3QgaXRzIGJ1ZGdldCwgb25seSBhIGRlZmVycmFsIHdpbGwgY2hhbmdlIG9uIGl0cyBvd246IGV2ZXJ5XG4rXHQgKiBvdGhlciBlcnJvciByZXBlYXRzIGEgYnVzIHJlZ2lzdHJhdGlvbiwgaXRzIG1lc3NhZ2UgZnJvbSB0aGUgTURJT1xuK1x0ICogY29yZSBhbmQgaXRzIHVldmVudHMgZm9yIHRoZSB1cHRpbWUuIEZpcm13YXJlIGZpbGVzIGFyZSB0aGVcbitcdCAqIGV4Y2VwdGlvbiwgc2luY2UgdGhleSBjYW4gYmUgaW5zdGFsbGVkIGF0IGFueSB0aW1lLlxuK1x0ICovXG4rXHRpZiAobWN1LVx1MDAzZWZ3X3J1bm5pbmcgXHUwMDI2XHUwMDI2IHJldCAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG1jdS1cdTAwM2V3YWl0ZWRfbXMgXHUwMDNlPSBFTjg4MTFIX0ZXX1dBUk5fTVMpXG4rXHRcdHJldHVybjtcbitcbitcdG1jdS1cdTAwM2Vwb2xsX21zID0gbWluKG1jdS1cdTAwM2Vwb2xsX21zICogMiwgRU44ODExSF9GV19QT0xMX01BWF9NUyk7XG4rXHQvKiBDb3VudCB0aGUgc2xlZXAgYWhlYWQ6IHRoZSBmaXJzdCBydW4gd2FzIGltbWVkaWF0ZS4gKi9cbitcdG1jdS1cdTAwM2V3YWl0ZWRfbXMgKz0gbWN1LVx1MDAzZXBvbGxfbXM7XG4rXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2ZyZWV6YWJsZV93cSwgXHUwMDI2bWN1LVx1MDAzZWZ3X3BvbGwsXG4rXHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyhtY3UtXHUwMDNlcG9sbF9tcykpO1xuK31cbitcbisvKiBUaGUgZmlybXdhcmUgbGl2ZXMgaW4gdm9sYXRpbGUgUkFNOiBubyByZXNldCB3aGlsZSB0aGUgTUQzMiByZXBvcnRzIHJlYWR5LiAqL1xuK3N0YXRpYyB2b2lkIGVuODgxMWhfbWN1X3Jlc2V0X2lmX2Rvcm1hbnQoc3RydWN0IGVuODgxMWhfbWN1ICptY3UsIGJvb2wgbmVzdGVkKVxuK3tcbitcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9IG1jdS1cdTAwM2VtZGlvZGV2O1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG4rXHR1MzIgYXNzZXJ0X3VzID0gMCwgZGVhc3NlcnRfdXMgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzZSAwKSB7XG4rXHRcdGRldl9kYmcoZGV2LCBcIk1EMzIgYWxyZWFkeSBydW5uaW5nLCBsZWF2aW5nIHJlc2V0IGFsb25lXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIW1jdS1cdTAwM2VyZXNldF9ncGlvKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBBIGZhaWxlZCByZWFkIGlzIG5vdCBhIGRvcm1hbnQgY2hpcCwgc28gZG8gbm90IHRvdWNoIGEgbGluZSB0aGF0XG4rXHQgKiBpcyBhbHJlYWR5IGRlYXNzZXJ0ZWQuIEFuIGFzc2VydGVkIG9uZSBpcyB3aHkgdGhlIHJlYWQgZmFpbGVkLlxuK1x0ICovXG4rXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVx1MDAzZXJlc2V0X2dwaW8pIFx1MDAzYz0gMCkge1xuK1x0XHRkZXZfZGJnKGRldiwgXCJNRDMyIHN0YXRlIHVua25vd24gKCVkKSwgbGVhdmluZyByZXNldCBhbG9uZVxcblwiLFxuK1x0XHRcdHJldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFwicmVzZXQtYXNzZXJ0LXVzXCIsIFx1MDAyNmFzc2VydF91cyk7XG4rXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcInJlc2V0LWRlYXNzZXJ0LXVzXCIsIFx1MDAyNmRlYXNzZXJ0X3VzKTtcbitcbitcdHJldCA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQobWN1LVx1MDAzZXJlc2V0X2dwaW8sIDEpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfd2FybihkZXYsIFwicmVzZXQgbm90IGFzc2VydGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGFzc2VydF91cylcbitcdFx0ZnNsZWVwKGFzc2VydF91cyk7XG4rXG4rXHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobWN1LVx1MDAzZXJlc2V0X2dwaW8sIDApO1xuK1x0aWYgKGRlYXNzZXJ0X3VzKVxuK1x0XHRmc2xlZXAoZGVhc3NlcnRfdXMpO1xuK31cbitcbitzdGF0aWMgaW50IGVuODgxMWhfbWN1X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1O1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcbitcdG1jdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWN1KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIW1jdSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtY3UtXHUwMDNlbWRpb2RldiA9IG1kaW9kZXY7XG4rXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIG1jdSk7XG4rXG4rXHQvKiBSZWdpc3RyYXRpb24gbmVlZHMgdGhpcyBvbmx5IG9uY2UgdGhlIGZpcm13YXJlIHJ1bnMsIGJ1dCBhIERUXG4rXHQgKiBob2xlIHNob3VsZCBmYWlsIHRoZSBiaW5kIG5vdywgbm90IGFzIGEgd29yay1pdGVtIGVycm9yIGxhdGVyLlxuK1x0ICovXG4rXHRucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2VvZl9ub2RlLCBcIm1kaW9cIik7XG4rXHRpZiAoIW5wKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsXG4rXHRcdFx0XHQgICAgIFwibm8gbWRpbyBub2RlIGRlc2NyaWJpbmcgdGhlIFBIWVxcblwiKTtcbitcdG9mX25vZGVfcHV0KG5wKTtcbitcbitcdC8qIFRoZSBjb3JlIGNsYWltcyByZXNldC1ncGlvcyBvbmx5IGZvciBkZXZpY2VzIGZsYWdnZWQgYXMgUEhZcy4gKi9cbitcdG1jdS1cdTAwM2VyZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBcInJlc2V0XCIsIEdQSU9EX0FTSVMpO1xuK1x0aWYgKElTX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbykpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihtY3UtXHUwMDNlcmVzZXRfZ3BpbyksXG4rXHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCByZXNldCBHUElPXFxuXCIpO1xuK1xuK1x0aWYgKG1jdS1cdTAwM2VyZXNldF9ncGlvKVxuK1x0XHRncGlvZF9zZXRfY29uc3VtZXJfbmFtZShtY3UtXHUwMDNlcmVzZXRfZ3BpbywgXCJFTjg4MTFIIHJlc2V0XCIpO1xuK1xuK1x0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsIGZhbHNlKTtcbitcbitcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCBlbjg4MTFoX21jdV9md19wb2xsKTtcbitcdC8qIEZyZWV6YWJsZTogbmVpdGhlciB0aGUgZmlsZSBsb29rdXAgbm9yIHRoZSBkb3dubG9hZCBtYXkgbGFuZCBvblxuK1x0ICogYSBzdXNwZW5kaW5nIGJ1cy5cbitcdCAqL1xuK1x0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbjg4MTFoX21jdV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3tcbitcdHN0cnVjdCBlbjg4MTFoX21jdSAqbWN1ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbitcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZtY3UtXHUwMDNlZndfcG9sbCk7XG4rXHRpZiAobWN1LVx1MDAzZWJ1cykge1xuK1x0XHRtZGlvYnVzX3VucmVnaXN0ZXIobWN1LVx1MDAzZWJ1cyk7XG4rXHRcdG1kaW9idXNfZnJlZShtY3UtXHUwMDNlYnVzKTtcbitcdFx0bWN1LVx1MDAzZWJ1cyA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW44ODExaF9tY3VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZW44ODExaF9tY3UgKm1jdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0c3RydWN0IG1paV9idXMgKmNoaXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogTm90aGluZyB0byByZWRvOiB0aGUgcG9sbCBpcyBhcm1lZCBhbmQgdGhhd3Mgd2l0aCBldmVyeXRoaW5nIGVsc2UuICovXG4rXHRpZiAoIW1jdS1cdTAwM2Vmd19ydW5uaW5nKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIE5vdCBvbiB0aGUgd29ya3F1ZXVlOiBhIERTQSBwb3J0J3MgUEhZIHJlc3VtZXMgcmlnaHQgYWZ0ZXIgdGhpc1xuK1x0ICogb25lIGFuZCBjYWxscyBwaHlfaW5pdF9odygpLCB3aGljaCBuZWVkcyB0aGUgZmlybXdhcmUgYnkgdGhlbi5cbitcdCAqL1xuK1x0Y2hpcCA9IGVuODgxMWhfbWN1X2NoaXBfbG9jayhtY3UpO1xuK1x0ZW44ODExaF9tY3VfcmVzZXRfaWZfZG9ybWFudChtY3UsICEhY2hpcCk7XG4rXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChtY3UtXHUwMDNlbWRpb2RldiwgXHUwMDI2bWN1LVx1MDAzZWZ3X3ZlcnNpb24sICEhY2hpcCk7XG4rXHRlbjg4MTFoX21jdV9jaGlwX3VubG9jayhjaGlwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0LyogVGhlIHJlbG9hZCByZXN0b3JlcyB0aGlzIGNoaXAsIG5vdCB0aGUgUEhZIGJlbG93IGl0OiBpdHNcbitcdFx0ICogb3duIHJlc3VtZSBoYXMgYWxyZWFkeSBmYWlsZWQgYnkgdGhlbiBhbmQgbm90aGluZyBjYWxsc1xuK1x0XHQgKiBwaHlfaW5pdF9odygpIHR3aWNlLlxuK1x0XHQgKi9cbitcdFx0ZGV2X2VycihkZXYsIFwiZmlybXdhcmUgbm90IHJlc3RvcmVkLCByZWxvYWRpbmc6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdG1jdS1cdTAwM2Vmd19ydW5uaW5nID0gZmFsc2U7XG4rXHRcdG1jdS1cdTAwM2Vwb2xsX21zID0gRU44ODExSF9GV19QT0xMX01JTl9NUztcbitcdFx0bWN1LVx1MDAzZXdhaXRlZF9tcyA9IDA7XG4rXHRcdG1jdS1cdTAwM2V3YXJuZWQgPSBmYWxzZTtcbitcdFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9mcmVlemFibGVfd3EsIFx1MDAyNm1jdS1cdTAwM2Vmd19wb2xsLCAwKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX1NJTVBMRV9ERVZfUE1fT1BTKGVuODgxMWhfbWN1X3BtX29wcywgTlVMTCwgZW44ODExaF9tY3VfcmVzdW1lKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBlbjg4MTFoX21jdV9vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwiYWlyb2hhLGVuODgxMWgtbWN1XCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZW44ODExaF9tY3Vfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZW44ODExaF9tY3VfZHJpdmVyID0ge1xuK1x0LnByb2JlID0gZW44ODExaF9tY3VfcHJvYmUsXG4rXHQucmVtb3ZlID0gZW44ODExaF9tY3VfcmVtb3ZlLFxuK1x0Lm1kaW9kcnYuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwiYWlyb2hhLWVuODgxMWgtbWN1XCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IGVuODgxMWhfbWN1X29mX21hdGNoLFxuK1x0XHQucG0gPSBwbV9zbGVlcF9wdHIoXHUwMDI2ZW44ODExaF9tY3VfcG1fb3BzKSxcbitcdFx0LyogVGVhcmluZyB0aGUgY2hpbGQgYnVzIGRvd24gdW5kZXIgYW4gYXR0YWNoZWQgUEhZIGlzIG5vdFxuK1x0XHQgKiBzb21ldGhpbmcgdGhpcyBkcml2ZXIgY2FuIG1ha2Ugc2FmZSBvbiBpdHMgb3duLlxuK1x0XHQgKi9cbitcdFx0LnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLFxuK1x0fSxcbit9O1xuK1xuK21kaW9fbW9kdWxlX2RyaXZlcihlbjg4MTFoX21jdV9kcml2ZXIpO1xuK1xuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRE0pO1xuK01PRFVMRV9GSVJNV0FSRShFTjg4MTFIX01EMzJfRFNQKTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBaXJvaGEgRU44ODExSCBNRElPIGRldmljZSBkcml2ZXJcIik7XG4rTU9EVUxFX0FVVEhPUihcIkFsZWtzZWkgU3Zpcmlka2luIFx1MDAzY2ZAbGV4LmxhXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbmluZGV4IGVjN2M0NGNhNjhlN2QuLjg2MWI4ZmU0OWUyNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvYWlyX2VuODgxMWguY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNcbkBAIC0yMCwyMSArMjAsMTUgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYWlyX3BoeV9saWIuaFwiXG4gXG4gI2RlZmluZSBFTjg4MTFIX1BIWV9JRFx0XHQweDAzYTJhNDExXG4gI2RlZmluZSBBTjg4MTFIQl9QSFlfSURcdFx0MHhjMGZmMDRhMFxuIFxuLSNkZWZpbmUgRU44ODExSF9NRDMyX0RNXHRcdFwiYWlyb2hhL0V0aE1EMzIuZG0uYmluXCJcbi0jZGVmaW5lIEVOODgxMUhfTUQzMl9EU1BcdFwiYWlyb2hhL0V0aE1EMzIuRFNQLmJpblwiXG4gI2RlZmluZSBBTjg4MTFIQl9NRDMyX0RNXHRcImFpcm9oYS9hbjg4MTFoYi9FdGhNRDMyX0NSQy5ETS5iaW5cIlxuICNkZWZpbmUgQU44ODExSEJfTUQzMl9EU1BcdFwiYWlyb2hhL2FuODgxMWhiL0V0aE1EMzJfQ1JDLkRTUC5iaW5cIlxuIFxuLSNkZWZpbmUgQUlSX0ZXX0FERFJfRE1cdDB4MDAwMDAwMDBcbi0jZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0MHgwMDEwMDAwMFxuLVxuIC8qIE1JSSBSZWdpc3RlcnMgKi9cbiAjZGVmaW5lIEFJUl9BVVhfQ1RSTF9TVEFUVVNcdFx0MHgxZFxuICNkZWZpbmUgICBBSVJfQVVYX0NUUkxfU1RBVFVTX1NQRUVEX01BU0tcdEdFTk1BU0soNCwgMilcbkBAIC00NCw4ICszOCw2IEBAXG4gI2RlZmluZSAgIEFJUl9BVVhfQ1RSTF9TVEFUVVNfU1BFRURfMjUwMFx0MHhjXG4gXG4gLyogUmVnaXN0ZXJzIG9uIE1ESU9fTU1EX1ZFTkQxICovXG4tI2RlZmluZSBFTjg4MTFIX1BIWV9GV19TVEFUVVNcdFx0MHg4MDA5XG4tI2RlZmluZSAgIEVOODgxMUhfUEhZX1JFQURZXHRcdFx0MHgwMlxuIFxuICNkZWZpbmUgQUlSX1BIWV9NQ1VfQ01EXzBcdFx0MHg4MDBiXG4gI2RlZmluZSBBSVJfUEhZX01DVV9DTURfMVx0XHQweDgwMGNcbkBAIC0xMDgsOCArMTAwLDYgQEBcbiAjZGVmaW5lIEVOODgxMUhfMlA1R19MUEFcdFx0MHgzYjMwXG4gI2RlZmluZSAgIEVOODgxMUhfMlA1R19MUEFfMlA1R1x0XHRcdEJJVCgwKVxuIFxuLSNkZWZpbmUgRU44ODExSF9GV19WRVJTSU9OXHRcdDB4M2IzY1xuLVxuICNkZWZpbmUgRU44ODExSF9QT0xBUklUWVx0XHQweGNhMGY4XG4gI2RlZmluZSAgIEVOODgxMUhfUE9MQVJJVFlfVFhfTk9STUFMXHRcdEJJVCgwKVxuICNkZWZpbmUgICBFTjg4MTFIX1BPTEFSSVRZX1JYX1JFVkVSU0VcdFx0QklUKDEpXG5AQCAtMTIyLDEyICsxMTIsNiBAQFxuICNkZWZpbmUgRU44ODExSF9DTEtfQ0dNXHRcdFx0MHhjZjk1OFxuICNkZWZpbmUgICBFTjg4MTFIX0NMS19DR01fQ0tPXHRcdFx0QklUKDI2KVxuIFxuLSNkZWZpbmUgRU44ODExSF9GV19DVFJMXzFcdFx0MHgwZjAwMThcbi0jZGVmaW5lICAgRU44ODExSF9GV19DVFJMXzFfU1RBUlRcdFx0MHgwXG4tI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSFx0XHQweDFcbi0jZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8yXHRcdDB4ODAwMDAwXG4tI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbi1cbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9TRVQxXHRcdDB4ZjAyMGNcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04yXHRcdDB4ZjAyMThcbiAjZGVmaW5lIEFOODgxMUhCX0NSQ19QTV9NT04zXHRcdDB4ZjAyMWNcbkBAIC0yNzAsODYgKzI1NCwxNCBAQCBzdGF0aWMgaW50IF9fYWlyX3BidXNfcmVnX3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGFkZHJlc3MsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuLVx0aW50IHJldDtcbi1cdHUxNiB2YWw7XG4tXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0lOQ1IpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMoYWRkcmVzcykpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhhZGRyZXNzKSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCArPSA0KSB7XG4tXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldCArIDJdKTtcbi1cdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILCB2YWwpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXG4tXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZmdy1cdTAwM2VkYXRhW29mZnNldF0pO1xuLVx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVywgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYWlyX3dyaXRlX2J1ZihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgYWRkcmVzcyxcbi1cdFx0XHQgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbi17XG4tXHRpbnQgc2F2ZWRfcGFnZTtcbi1cdGludCByZXQgPSAwO1xuLVxuLVx0aWYgKGZ3LVx1MDAzZXNpemUgJSA0KSB7XG4tXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImZpcm13YXJlIHNpemUgJXp1IGlzIG5vdCBhIG11bHRpcGxlIG9mIDRcXG5cIixcbi1cdFx0XHQgICBmdy1cdTAwM2VzaXplKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuLVxuLVx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihwaHlkZXYsIGFkZHJlc3MsIGZ3KTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgIGFkZHJlc3MsIHJldCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIHNhdmVkX3BhZ2UsIHJldCk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQsIHJlZ192YWx1ZTtcbitcdGludCByZXQgPSBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZmFsc2UpO1xuIFxuLVx0cmV0ID0gYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbi1cdFx0XHRcdFx0IEVOODgxMUhfRldfQ1RSTF8xX0ZJTklTSCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzICovXG4tXHRyZXQgPSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTURJT19NTURfVkVORDEsXG4tXHRcdFx0XHRcdEVOODgxMUhfUEhZX0ZXX1NUQVRVUywgcmVnX3ZhbHVlLFxuLVx0XHRcdFx0XHRyZWdfdmFsdWUgPT0gRU44ODExSF9QSFlfUkVBRFksXG4tXHRcdFx0XHRcdDIwMDAwLCA3NTAwMDAwLCB0cnVlKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiTUNVIG5vdCByZWFkeTogMHgleFxcblwiLCByZWdfdmFsdWUpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIk1DVSBub3QgcmVhZHk6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IGFuODgxMWhiX2NoZWNrX2NyYyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgc2V0MSxcbkBAIC00MTEsNyArMzIzLDcgQEAgc3RhdGljIGludCBhbjg4MTFoYl9sb2FkX2ZpbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBhaXJfd3JpdGVfYnVmKHBoeWRldiwgYWRkcmVzcywgIGZ3KTtcbitcdHJldCA9IGFpcl9md193cml0ZV9idWYoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGFkZHJlc3MsIGZ3LCBmYWxzZSk7XG4gXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTUwNyw1NCArNDE5LDExIEBAIHN0YXRpYyBpbnQgYW44ODExaGJfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFxuIHN0YXRpYyBpbnQgZW44ODExaF9sb2FkX2Zpcm13YXJlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuLVx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuLVx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4rXHRzdHJ1Y3QgZW44ODExaF9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfcmVsMTtcbi1cbi1cdHJldCA9IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgRU44ODExSF9GV19DVFJMXzEsXG4tXHRcdFx0XHRcdCBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLFxuLVx0XHRcdFx0XHQgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlbjg4MTFoX2xvYWRfZmlybXdhcmVfb3V0O1xuLVxuLVx0cmV0ID0gYWlyX3dyaXRlX2J1ZihwaHlkZXYsIEFJUl9GV19BRERSX0RNLCAgZncxKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGFpcl93cml0ZV9idWYocGh5ZGV2LCBBSVJfRldfQUREUl9EU1AsIGZ3Mik7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ7XG4tXG4tXHRyZXQgPSBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkocGh5ZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbi1cdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HLCAwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdHJldCA9IGVuODgxMWhfd2FpdF9tY3VfcmVhZHkocGh5ZGV2KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZW44ODExaF9sb2FkX2Zpcm13YXJlX291dDtcbi1cbi1cdGVuODgxMWhfcHJpbnRfZndfdmVyc2lvbihwaHlkZXYpO1xuLVxuLWVuODgxMWhfbG9hZF9maXJtd2FyZV9vdXQ6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3Mik7XG4tXG4tZW44ODExaF9sb2FkX2Zpcm13YXJlX3JlbDE6XG4tXHRyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7XG4tXG4rXHRyZXQgPSBhaXJfZW44ODExaF9md19kb3dubG9hZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgXHUwMDI2cHJpdi1cdTAwM2VmaXJtd2FyZV92ZXJzaW9uLFxuK1x0XHRcdFx0ICAgICAgZmFsc2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiTG9hZCBmaXJtd2FyZSBmYWlsZWQ6ICVkXFxuXCIsIHJldCk7XG4gXG5AQCAtMTE1Niw4ICsxMDI1LDggQEAgc3RhdGljIGludCBlbjg4MTFoX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0LyogbWN1IGhhcyBqdXN0IHJlc3RhcnRlZCBhZnRlciBmaXJtd2FyZSBsb2FkICovXG4tXHRwcml2LVx1MDAzZW1jdV9uZWVkc19yZXN0YXJ0ID0gZmFsc2U7XG4rXHQvKiBBZG9wdGVkIGZpcm13YXJlIHdhcyBuZXZlciByZXN0YXJ0ZWQgaGVyZS4gKi9cbitcdHByaXYtXHUwMDNlbWN1X25lZWRzX3Jlc3RhcnQgPSAocmV0ID09IDEpO1xuIFxuIFx0LyogTURJT19ERVZTMS8yIGVtcHR5LCBzbyBzZXQgbW1kc19wcmVzZW50IGJpdHMgaGVyZSAqL1xuIFx0cGh5ZGV2LVx1MDAzZWM0NV9pZHMubW1kc19wcmVzZW50IHw9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuaW5kZXggNTE0MWRiMTlmYTVlZS4uN2Y3NTMwMjczNjAxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuY1xuQEAgLTgsMzcgKzgsNDIgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImFpcl9waHlfbGliLmhcIlxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3JlYWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitzdGF0aWMgaW50IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRcdCAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhKVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19NT0RFLCBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfTU9ERSxcbitcdFx0XHQgICAgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9BRERSX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19SRF9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cGJ1c19kYXRhX2hpZ2ggPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4rXHRwYnVzX2RhdGFfaGlnaCA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9CUEJVU19SRF9EQVRBX0hJR0gpO1xuIFx0aWYgKHBidXNfZGF0YV9oaWdoIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2hpZ2g7XG4gXG4tXHRwYnVzX2RhdGFfbG93ID0gX19waHlfcmVhZChwaHlkZXYsIEFJUl9CUEJVU19SRF9EQVRBX0xPVyk7XG4rXHRwYnVzX2RhdGFfbG93ID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcbiBcdGlmIChwYnVzX2RhdGFfbG93IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcGJ1c19kYXRhX2xvdztcbiBcbkBAIC00Niw2NCArNTEsNjYgQEAgc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rc3RhdGljIGludCBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBwYnVzX2RhdGEpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuK1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfQUREUl9MT1csXG4rXHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YSkpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGEpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK3N0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHQgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbiBcdGludCBwYnVzX2RhdGFfbG93LCBwYnVzX2RhdGFfaGlnaDtcbiBcdHUzMiBwYnVzX2RhdGFfb2xkLCBwYnVzX2RhdGFfbmV3O1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX01PREUsIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19NT0RFLFxuK1x0XHRcdCAgICAgIEFJUl9CUEJVU19NT0RFX0FERFJfRklYRUQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbi1cdFx0XHQgIHVwcGVyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1JEX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUlSX0JQQlVTX1JEX0FERFJfTE9XLFxuLVx0XHRcdCAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbitcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfUkRfQUREUl9MT1csXG4rXHRcdFx0ICAgICAgbG93ZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRwYnVzX2RhdGFfaGlnaCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9ISUdIKTtcbitcdHBidXNfZGF0YV9oaWdoID0gX19tZGlvZGV2X3JlYWQobWRpb2RldiwgQUlSX0JQQlVTX1JEX0RBVEFfSElHSCk7XG4gXHRpZiAocGJ1c19kYXRhX2hpZ2ggXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfaGlnaDtcbiBcbi1cdHBidXNfZGF0YV9sb3cgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUlSX0JQQlVTX1JEX0RBVEFfTE9XKTtcbitcdHBidXNfZGF0YV9sb3cgPSBfX21kaW9kZXZfcmVhZChtZGlvZGV2LCBBSVJfQlBCVVNfUkRfREFUQV9MT1cpO1xuIFx0aWYgKHBidXNfZGF0YV9sb3cgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwYnVzX2RhdGFfbG93O1xuIFxuQEAgLTExMiwyMyArMTE5LDIzIEBAIHN0YXRpYyBpbnQgX19haXJfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKHBidXNfZGF0YV9uZXcgPT0gcGJ1c19kYXRhX29sZClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4tXHRcdFx0ICB1cHBlcl8xNl9iaXRzKHBidXNfYWRkcmVzcykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9BRERSX0hJR0gsXG4rXHRcdFx0ICAgICAgdXBwZXJfMTZfYml0cyhwYnVzX2FkZHJlc3MpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9BRERSX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMocGJ1c19hZGRyZXNzKSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9ISUdILFxuLVx0XHRcdCAgdXBwZXJfMTZfYml0cyhwYnVzX2RhdGFfbmV3KSk7XG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0RBVEFfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbi1cdFx0XHQgIGxvd2VyXzE2X2JpdHMocGJ1c19kYXRhX25ldykpO1xuK1x0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0xPVyxcbitcdFx0XHQgICAgICBsb3dlcl8xNl9iaXRzKHBidXNfZGF0YV9uZXcpKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMTQ0LDcgKzE1MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gXHRzYXZlZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuIFxuIFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNlPSAwKSB7XG4tXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ19yZWFkKHBoeWRldiwgcGJ1c19hZGRyZXNzLCBwYnVzX2RhdGEpO1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgcGJ1c19hZGRyZXNzLFxuK1x0XHRcdFx0XHQgICAgICBwYnVzX2RhdGEpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIiVzIDB4JTA4eCBmYWlsZWQ6ICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRcdFx0ICAgcGJ1c19hZGRyZXNzLCByZXQpO1xuQEAgLTE2Myw3ICsxNzEsNyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX3dyaXRlKHBoeWRldiwgcGJ1c19hZGRyZXNzLFxuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfd3JpdGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIHBidXNfYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHBidXNfZGF0YSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiJXMgMHglMDh4IGZhaWxlZDogJWRcXG5cIiwgX19mdW5jX18sXG5AQCAtMTgzLDggKzE5MSw4IEBAIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19tb2RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHBidXNfYWRkcmVzcyxcbiBcdHNhdmVkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4gXG4gXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2U9IDApIHtcbi1cdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShwaHlkZXYsIHBidXNfYWRkcmVzcywgbWFzayxcbi1cdFx0XHRcdFx0XHRzZXQpO1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfbW9kaWZ5KFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdFx0bWFzaywgc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCIlcyAweCUwOHggZmFpbGVkOiAlZFxcblwiLCBfX2Z1bmNfXyxcbiBcdFx0XHRcdCAgIHBidXNfYWRkcmVzcywgcmV0KTtcbkBAIC0xOTQsNiArMjAyLDM0MyBAQCBpbnQgYWlyX3BoeV9idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeSk7XG4gXG4rc3RhdGljIGludCBfX2Fpcl93cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcbitcdFx0XHQgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcbit7XG4rXHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuK1x0aW50IHJldDtcbitcdHUxNiB2YWw7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX01PREUsXG4rXHRcdFx0ICAgICAgQUlSX0JQQlVTX01PREVfQUREUl9JTkNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfSElHSCxcbitcdFx0XHQgICAgICB1cHBlcl8xNl9iaXRzKGFkZHJlc3MpKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0JQQlVTX1dSX0FERFJfTE9XLFxuK1x0XHRcdCAgICAgIGxvd2VyXzE2X2JpdHMoYWRkcmVzcykpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IFx1MDAzYyBsZW47IG9mZnNldCArPSA0KSB7XG4rXHRcdHZhbCA9IGdldF91bmFsaWduZWRfbGUxNihcdTAwMjZkYXRhW29mZnNldCArIDJdKTtcbitcdFx0cmV0ID0gX19tZGlvZGV2X3dyaXRlKG1kaW9kZXYsIEFJUl9CUEJVU19XUl9EQVRBX0hJR0gsIHZhbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0dmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KFx1MDAyNmRhdGFbb2Zmc2V0XSk7XG4rXHRcdHJldCA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfQlBCVVNfV1JfREFUQV9MT1csIHZhbCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBwaHlfc2VsZWN0X3BhZ2UoKSBuZWVkcyBhIHBoeV9kZXZpY2UsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldC4gKi9cbitzdGF0aWMgaW50IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuK1xuK1x0c2F2ZWRfcGFnZSA9IF9fbWRpb2Rldl9yZWFkKG1kaW9kZXYsIEFJUl9FWFRfUEFHRV9BQ0NFU1MpO1xuK1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdHJldHVybiBzYXZlZF9wYWdlO1xuK1xuK1x0aWYgKHNhdmVkX3BhZ2UgIT0gcGFnZSkge1xuK1x0XHRyZXQgPSBfX21kaW9kZXZfd3JpdGUobWRpb2RldiwgQUlSX0VYVF9QQUdFX0FDQ0VTUywgcGFnZSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiBzYXZlZF9wYWdlO1xuK31cbitcbitzdGF0aWMgaW50IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdCAgIGludCBzYXZlZF9wYWdlLCBpbnQgcGFnZSwgaW50IHJldClcbit7XG4rXHRpbnQgcmVzdG9yZTtcbitcbitcdGlmIChzYXZlZF9wYWdlICE9IHBhZ2UpIHtcbitcdFx0cmVzdG9yZSA9IF9fbWRpb2Rldl93cml0ZShtZGlvZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTLFxuK1x0XHRcdFx0XHQgIHNhdmVkX3BhZ2UpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgcmVzdG9yZSBcdTAwM2MgMClcbitcdFx0XHRyZXQgPSByZXN0b3JlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogTmVzdGVkIHdoZW4gdGhlIGNhbGxlciBhbHJlYWR5IGhvbGRzIHRoZSBidXMgdGhpcyBjaGlwIGhhbmdzIGJlbG93LiAqL1xuK3N0YXRpYyB2b2lkIGFpcl9tZGlvZGV2X2xvY2soc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbit7XG4rXHRpZiAobmVzdGVkKVxuK1x0XHRtZGlvZGV2X2xvY2tfbmVzdGVkKG1kaW9kZXYpO1xuK1x0ZWxzZVxuK1x0XHRtZGlvZGV2X2xvY2sobWRpb2Rldik7XG4rfVxuK1xuK2ludCBhaXJfZndfd3JpdGVfYnVmKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGFkZHJlc3MsXG4rXHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgYm9vbCBuZXN0ZWQpXG4re1xuK1x0c2l6ZV90IGNodW5rLCBkb25lID0gMDtcbitcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4rXG4rXHRpZiAoZnctXHUwMDNlc2l6ZSAlIDQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgXCJmaXJtd2FyZSBzaXplICV6dSBpcyBub3QgYSBtdWx0aXBsZSBvZiA0XFxuXCIsXG4rXHRcdFx0ZnctXHUwMDNlc2l6ZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGZ3LVx1MDAzZXNpemUpIHtcbitcdFx0Y2h1bmsgPSBtaW5fdChzaXplX3QsIGZ3LVx1MDAzZXNpemUgLSBkb25lLCBBSVJfRldfQ0hVTktfQllURVMpO1xuK1xuK1x0XHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsXG4rXHRcdFx0XHRcdFx0ICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbitcdFx0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbitcdFx0XHRyZXQgPSBzYXZlZF9wYWdlO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldCA9IF9fYWlyX3dyaXRlX2J1ZihtZGlvZGV2LCBhZGRyZXNzICsgZG9uZSxcbitcdFx0XHRcdFx0ICAgICAgZnctXHUwMDNlZGF0YSArIGRvbmUsIGNodW5rKTtcbitcdFx0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuK1x0XHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LFxuK1x0XHRcdFx0XHRcdCAgICAgIHJldCk7XG4rXHRcdH1cbitcbitcdFx0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0ZG9uZSArPSBjaHVuaztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZndfd3JpdGVfYnVmKTtcbitcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdCAgICAgIHUzMiBwYnVzX2FkZHJlc3MsIHUzMiAqcGJ1c19kYXRhLFxuK1x0XHRcdFx0ICAgICAgYm9vbCBuZXN0ZWQpXG4re1xuK1x0aW50IHNhdmVkX3BhZ2UsIHJldDtcbitcbitcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcbitcbitcdHNhdmVkX3BhZ2UgPSBfX2Fpcl9tZGlvX3NlbGVjdF9wYWdlKG1kaW9kZXYsIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80KTtcbitcdGlmIChzYXZlZF9wYWdlIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHNhdmVkX3BhZ2U7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBfX2Fpcl9idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBwYnVzX2FkZHJlc3MsIHBidXNfZGF0YSk7XG4rXHRcdHJldCA9IF9fYWlyX21kaW9fcmVzdG9yZV9wYWdlKG1kaW9kZXYsIHNhdmVkX3BhZ2UsXG4rXHRcdFx0XHRcdCAgICAgIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80LCByZXQpO1xuK1x0fVxuK1xuK1x0bWRpb2Rldl91bmxvY2sobWRpb2Rldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4rXHRcdFx0XHQgICAgICAgdTMyIHBidXNfYWRkcmVzcywgdTMyIHBidXNfZGF0YSxcbitcdFx0XHRcdCAgICAgICBib29sIG5lc3RlZClcbit7XG4rXHRpbnQgc2F2ZWRfcGFnZSwgcmV0O1xuK1xuK1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuK1xuK1x0c2F2ZWRfcGFnZSA9IF9fYWlyX21kaW9fc2VsZWN0X3BhZ2UobWRpb2RldiwgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQpO1xuK1x0aWYgKHNhdmVkX3BhZ2UgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc2F2ZWRfcGFnZTtcbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IF9fYWlyX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdCAgICAgICBwYnVzX2RhdGEpO1xuK1x0XHRyZXQgPSBfX2Fpcl9tZGlvX3Jlc3RvcmVfcGFnZShtZGlvZGV2LCBzYXZlZF9wYWdlLFxuK1x0XHRcdFx0XHQgICAgICBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCwgcmV0KTtcbitcdH1cbitcbitcdG1kaW9kZXZfdW5sb2NrKG1kaW9kZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbitcdFx0XHRcdFx0dTMyIHBidXNfYWRkcmVzcywgdTMyIG1hc2ssIHUzMiBzZXQsXG4rXHRcdFx0XHRcdGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCBzYXZlZF9wYWdlLCByZXQ7XG4rXG4rXHRhaXJfbWRpb2Rldl9sb2NrKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRzYXZlZF9wYWdlID0gX19haXJfbWRpb19zZWxlY3RfcGFnZShtZGlvZGV2LCBBSVJfUEhZX1BBR0VfRVhURU5ERURfNCk7XG4rXHRpZiAoc2F2ZWRfcGFnZSBcdTAwM2MgMCkge1xuK1x0XHRyZXQgPSBzYXZlZF9wYWdlO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0gX19haXJfYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBwYnVzX2FkZHJlc3MsXG4rXHRcdFx0XHRcdFx0bWFzaywgc2V0KTtcbitcdFx0cmV0ID0gX19haXJfbWRpb19yZXN0b3JlX3BhZ2UobWRpb2Rldiwgc2F2ZWRfcGFnZSxcbitcdFx0XHRcdFx0ICAgICAgQUlSX1BIWV9QQUdFX0VYVEVOREVEXzQsIHJldCk7XG4rXHR9XG4rXG4rXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qIG1tZF9waHlfcmVhZCgpIGRyb3BzIHRoZSBlcnJvcnMgZnJvbSB0aGUgdGhyZWUgd3JpdGVzIHRoYXQgc2VsZWN0IHRoZVxuKyAqIHJlZ2lzdGVyLCBzbyBhIGZhaWxlZCBzZWxlY3Rpb24gcmVhZHMgYSBkaWZmZXJlbnQgb25lIGJhY2sgYXMgc3VjY2Vzcy5cbisgKi9cbitzdGF0aWMgaW50IF9fYWlyX21tZF9yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTE2IGRldmFkLCB1MTYgcmVnbnVtKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBhZGRyID0gbWRpb2Rldi1cdTAwM2VhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfQ1RSTCwgZGV2YWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIGFkZHIsIE1JSV9NTURfREFUQSwgcmVnbnVtKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBhZGRyLCBNSUlfTU1EX0NUUkwsXG4rXHRcdFx0ICAgICAgZGV2YWQgfCBNSUlfTU1EX0NUUkxfTk9JTkNSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gX19tZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCBNSUlfTU1EX0RBVEEpO1xuK31cbitcbitzdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xuK1x0cmV0ID0gX19haXJfbW1kX3JlYWQobWRpb2RldiwgTURJT19NTURfVkVORDEsIEVOODgxMUhfUEhZX0ZXX1NUQVRVUyk7XG4rXHRtZGlvZGV2X3VubG9jayhtZGlvZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCBhaXJfZW44ODExaF9tY3VfcnVubmluZyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCByZXQgPSBhaXJfbW1kX3N0YXR1c19yZWFkKG1kaW9kZXYsIG5lc3RlZCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHJldCA9PSBFTjg4MTFIX1BIWV9SRUFEWTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfbWN1X3J1bm5pbmcpO1xuK1xuK2ludCBhaXJfZW44ODExaF93YWl0X21jdV9yZWFkeShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxuK3tcbitcdGludCByZXQsIHJlZ192YWx1ZTtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbitcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0gsIG5lc3RlZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogQmVjYXVzZSBvZiBtZGlvLWxvY2ssIG1heSBoYXZlIHRvIHdhaXQgZm9yIG11bHRpcGxlIGxvYWRzLiBBIHJlYWRcbitcdCAqIGVycm9yIGVuZHMgdGhlIHBvbGwgYXQgb25jZSwgbGlrZSBwaHlfcmVhZF9tbWRfcG9sbF90aW1lb3V0KCkuXG4rXHQgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcl9tbWRfc3RhdHVzX3JlYWQsIHJlZ192YWx1ZSxcbitcdFx0XHRcdHJlZ192YWx1ZSBcdTAwM2MgMCB8fFxuK1x0XHRcdFx0cmVnX3ZhbHVlID09IEVOODgxMUhfUEhZX1JFQURZLFxuK1x0XHRcdFx0MjAwMDAsIDc1MDAwMDAsIHRydWUsIG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmVnX3ZhbHVlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmVnX3ZhbHVlO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZGJnKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBcIk1DVSBub3QgcmVhZHk6IDB4JXhcXG5cIiwgcmVnX3ZhbHVlKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkpO1xuK1xuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbitcdFx0XHQgICAgYm9vbCBuZXN0ZWQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsICpmdzI7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhaXJfZW44ODExaF9tY3VfcnVubmluZyhtZGlvZGV2LCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChyZXQpIHtcbitcdFx0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX3JlYWQobWRpb2RldiwgRU44ODExSF9GV19WRVJTSU9OLFxuK1x0XHRcdFx0XHRcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGRldl9pbmZvKGRldiwgXCJNRDMyIGFscmVhZHkgcnVubmluZywgZmlybXdhcmUgJTA4eFxcblwiLFxuK1x0XHRcdCAqZndfdmVyc2lvbik7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncxLCBFTjg4MTFIX01EMzJfRE0sIGRldik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2ZncyLCBFTjg4MTFIX01EMzJfRFNQLCBkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfcmVsMTtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMSxcbitcdFx0XHRcdFx0ICBFTjg4MTFIX0ZXX0NUUkxfMV9TVEFSVCwgbmVzdGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbitcbitcdHJldCA9IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19tb2RpZnkobWRpb2RldiwgRU44ODExSF9GV19DVFJMXzIsXG4rXHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsXG4rXHRcdFx0XHRcdCAgIEVOODgxMUhfRldfQ1RSTF8yX0xPQURJTkcsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RNLCBmdzEsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfZndfd3JpdGVfYnVmKG1kaW9kZXYsIEFJUl9GV19BRERSX0RTUCwgZncyLCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuK1xuK1x0cmV0ID0gYWlyX21kaW9fYnVja3BidXNfcmVnX21vZGlmeShtZGlvZGV2LCBFTjg4MTFIX0ZXX0NUUkxfMixcbitcdFx0XHRcdFx0ICAgRU44ODExSF9GV19DVFJMXzJfTE9BRElORywgMCxcbitcdFx0XHRcdFx0ICAgbmVzdGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gYWlyX2Z3X2Rvd25sb2FkX291dDtcbitcbitcdHJldCA9IGFpcl9lbjg4MTFoX3dhaXRfbWN1X3JlYWR5KG1kaW9kZXYsIG5lc3RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGFpcl9md19kb3dubG9hZF9vdXQ7XG4rXG4rXHRyZXQgPSBhaXJfbWRpb19idWNrcGJ1c19yZWdfcmVhZChtZGlvZGV2LCBFTjg4MTFIX0ZXX1ZFUlNJT04sXG4rXHRcdFx0XHRcdCBmd192ZXJzaW9uLCBuZXN0ZWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBhaXJfZndfZG93bmxvYWRfb3V0O1xuK1xuK1x0ZGV2X2luZm8oZGV2LCBcIk1EMzIgZmlybXdhcmUgdmVyc2lvbjogJTA4eFxcblwiLCAqZndfdmVyc2lvbik7XG4rXG4rYWlyX2Z3X2Rvd25sb2FkX291dDpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncyKTtcbitcbithaXJfZndfZG93bmxvYWRfcmVsMTpcbitcdHJlbGVhc2VfZmlybXdhcmUoZncxKTtcbitcbitcdC8qIE5vIGVycm9yIHByaW50OiBjYWxsZXJzIGxvZyBvbiB0aGVpciBvd24gdGVybXMsIGFuZCBhIHBvbGxlclxuK1x0ICogd291bGQgcmVwZWF0IGl0IG9uIGV2ZXJ5IHJldHJ5LlxuK1x0ICovXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChhaXJfZW44ODExaF9md19kb3dubG9hZCk7XG4rXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBBSVJfRVhUX1BBR0VfQUNDRVNTKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuaCBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG5pbmRleCAwMWJiMzJlN2M3Yzk1Li41NmJhOTg3YTY4Y2M5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5oXG5AQCAtMTAsMTIgKzEwLDE5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFx1MDAzZVxuK1xuICNkZWZpbmUgQUlSX0VYVF9QQUdFX0FDQ0VTU1x0XHQweDFmXG4gXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfU1RBTkRBUkRcdFx0MHgwMDAwXG4gI2RlZmluZSBBSVJfUEhZX1BBR0VfRVhURU5ERURfMVx0XHQweDAwMDFcbiAjZGVmaW5lIEFJUl9QSFlfUEFHRV9FWFRFTkRFRF80XHRcdDB4MDAwNFxuIFxuKy8qIEJ5dGVzIHdyaXR0ZW4gYmV0d2VlbiBidXMgcmVsZWFzZXMsIHNvIHRoZSBvdGhlciBQSFlzIG9uIGl0IGdldCBhIHR1cm4uXG4rICogQXQgYSAyLjUgTUh6IE1EQyB0aGlzIHNpemUgaG9sZHMgdGhlIGJ1cyBmb3IgYWJvdXQgMzAgbXMuXG4rICovXG4rI2RlZmluZSBBSVJfRldfQ0hVTktfQllURVNcdFx0MjMwNFxuK1xuIC8qIE1JSSBSZWdpc3RlcnMgUGFnZSA0Ki9cbiAjZGVmaW5lIEFJUl9CUEJVU19NT0RFXHRcdFx0MHgxMFxuICNkZWZpbmUgICBBSVJfQlBCVVNfTU9ERV9BRERSX0ZJWEVEXHRcdDB4MDAwMFxuQEAgLTI5LDYgKzM2LDIwIEBAXG4gI2RlZmluZSBBSVJfQlBCVVNfUkRfREFUQV9ISUdIXHRcdDB4MTdcbiAjZGVmaW5lIEFJUl9CUEJVU19SRF9EQVRBX0xPV1x0XHQweDE4XG4gXG4rI2RlZmluZSBBSVJfRldfQUREUl9ETVx0XHRcdDB4MDAwMDAwMDBcbisjZGVmaW5lIEFJUl9GV19BRERSX0RTUFx0XHRcdDB4MDAxMDAwMDBcbitcbisjZGVmaW5lIEVOODgxMUhfRldfQ1RSTF8xXHRcdDB4MGYwMDE4XG4rI2RlZmluZSAgIEVOODgxMUhfRldfQ1RSTF8xX1NUQVJUXHRcdDB4MFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMV9GSU5JU0hcdFx0MHgxXG4rI2RlZmluZSBFTjg4MTFIX0ZXX0NUUkxfMlx0XHQweDgwMDAwMFxuKyNkZWZpbmUgICBFTjg4MTFIX0ZXX0NUUkxfMl9MT0FESU5HXHRcdEJJVCgxMSlcbitcbisjZGVmaW5lIEVOODgxMUhfUEhZX0ZXX1NUQVRVU1x0XHQweDgwMDlcbisjZGVmaW5lICAgRU44ODExSF9QSFlfUkVBRFlcdFx0XHQweDAyXG4rXG4rI2RlZmluZSBFTjg4MTFIX0ZXX1ZFUlNJT05cdFx0MHgzYjNjXG4rXG4gaW50IGFpcl9waHlfYnVja3BidXNfcmVnX21vZGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcGJ1c19hZGRyZXNzLFxuIFx0XHRcdFx0dTMyIG1hc2ssIHUzMiBzZXQpO1xuIGludCBhaXJfcGh5X2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG5AQCAtMzgsNCArNTksMTAgQEAgaW50IGFpcl9waHlfYnVja3BidXNfcmVnX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiBwYnVzX2FkZHJlc3MsXG4gaW50IGFpcl9waHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBhaXJfcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpO1xuIFxuK3N0cnVjdCBmaXJtd2FyZTtcbitcbitpbnQgYWlyX2Z3X3dyaXRlX2J1ZihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBhZGRyZXNzLFxuK1x0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIGJvb2wgbmVzdGVkKTtcbitpbnQgYWlyX2VuODgxMWhfd2FpdF9tY3VfcmVhZHkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZCk7XG4rXG4gI2VuZGlmIC8qIF9fQUlSX1BIWV9MSUJfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmggYi9pbmNsdWRlL2xpbnV4L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNDQ5NGRjNmMxMDIyY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9tZGlvL21kaW8tYWlyb2hhLWVuODgxMWguaFxuQEAgLTAsMCArMSwyNSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFpcm9oYSBUZWNobm9sb2d5IENvcnAuXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IENvbGxhYm9yYSBMdGQuXG4rICogICAgICAgICAgICAgICAgICAgIExvdWlzLUFsZXhpcyBFeXJhdWQgXHUwMDNjbG91aXNhbGV4aXMuZXlyYXVkQGNvbGxhYm9yYS5jb21cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWxla3NlaSBTdmlyaWRraW4gXHUwMDNjZkBsZXgubGFcdTAwM2VcbisgKi9cbitcbisjaWZuZGVmIF9fTElOVVhfTURJT19BSVJPSEFfRU44ODExSF9IXG4rI2RlZmluZSBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgbWRpb19kZXZpY2U7XG4rXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRE1cdFx0XHRcImFpcm9oYS9FdGhNRDMyLmRtLmJpblwiXG4rI2RlZmluZSBFTjg4MTFIX01EMzJfRFNQXHRcdFwiYWlyb2hhL0V0aE1EMzIuRFNQLmJpblwiXG4rXG4rLyogUmV0dXJucyAxIHJ1bm5pbmcsIDAgZG9ybWFudCwgbmVnYXRpdmUgb24gYSBmYWlsZWQgc3RhdHVzIHJlYWQuICovXG4raW50IGFpcl9lbjg4MTFoX21jdV9ydW5uaW5nKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBuZXN0ZWQpO1xuKy8qIFJldHVybnMgMSB3aGVuIGl0IGFkb3B0ZWQgZmlybXdhcmUgdGhhdCB3YXMgYWxyZWFkeSBydW5uaW5nLiAqL1xuK2ludCBhaXJfZW44ODExaF9md19kb3dubG9hZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiAqZndfdmVyc2lvbixcbitcdFx0XHQgICAgYm9vbCBuZXN0ZWQpO1xuK1xuKyNlbmRpZiAvKiBfX0xJTlVYX01ESU9fQUlST0hBX0VOODgxMUhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5lNzRhOGY1Y2Y1YzY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIyODQsNiArMjI4NCwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rfVxuK1xuKy8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrX25lc3RlZChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvZGV2X3VubG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rfVxuK1xuIHZvaWQgcGh5X2F0dGFjaGVkX3ByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuIFx0X19wcmludGYoMiwgMyk7XG4gY2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjowOS43OTI5NjI5MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjY2ODczOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMgaXMgaW50cm9kdWNpbmcgYSBmYWlybHkgc2lnbmlmaWNhbnQgY2h1bmsgb2YgbmV3IGNvZGUgcmVsYXRlZCB0byBBaXJvaGEgbmV0d29yayBkZXZpY2VzLiBJIHNlZSBhIG5ldyBkZXZpY2UgdHJlZSBiaW5kaW5nLCBhbiB1cGRhdGUgdG8gdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSwgYW5kIGEgY2x1c3RlciBvZiBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGNlbnRlcmVkIGFyb3VuZCBNRElPIGFuZCBQSFkgaW1wbGVtZW50YXRpb25zLiBUaGUga2V5IGZpbGVzIGFwcGVhciB0byBiZSBgZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCB3aGljaCBpcyBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBgZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmNgLCB3aGljaCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyB0aGUgZmlybXdhcmUgbG9hZGluZyBmb3IgYW4gQWlyb2hhIFBIWS4gVGhlcmUgYXJlIGFsc28gYXNzb2NpYXRlZCBsaWJyYXJ5IGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMuIE5vdGFibHksIHRoZXJlIGFyZSBzb21lIGhlbHBlciBmdW5jdGlvbnMgYWRkZWQgdG8gYGluY2x1ZGUvbGludXgvcGh5LmhgIHRoYXQgZGVhbCB3aXRoIGxvY2tpbmcuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHJlYWNoYWJpbGl0eSwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSB0aG9zZSB1c2VkIHdpdGggc3l6a2FsbGVyLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgZHJpdmVycywgcGFydGljdWxhcmx5IHRoZSBNRElPIGFuZCBQSFkgaW1wbGVtZW50YXRpb25zLCBhcmUgaW5oZXJlbnRseSByZWxpYW50IG9uIHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIG9yIGRldmljZSB0cmVlcyB0aGF0IG1pZ2h0IG1ha2UgdGhlbSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlP1xuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuYXR1cmUgb2YgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYCBtb3JlIGRlZXBseS4gSSdsbCBuZWVkIHRvIHJlc2VhcmNoIE1ESU8gYW5kIFBIWSBkZXZpY2VzIGdlbmVyYWxseSwgdG8gc2VlIGlmIHRoZXkncmUgdHlwaWNhbGx5IHRpZWQgdG8gcGFydGljdWxhciBhcmNoaXRlY3R1cmVzIChBUk0sIE1JUFMsIGV0Yy4pIG9yIHJlcXVpcmUgYSBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBzZXR1cCBvciBhIGRldmljZSB0cmVlIGNvbmZpZ3VyZWQgaW4gYSBjZXJ0YWluIHdheSB0byBiZSBhY2Nlc3NpYmxlLlxuXG5JJ2xsIHN0YXJ0IHdpdGggc29tZSBxdWljayBjaGVja3MsIHByb2JhYmx5IHVzaW5nIGBncmVwcGVyYCBvciBieSBzY3J1dGluaXppbmcgdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgYW55IG9idmlvdXMgaGludHMgYWJvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIG5lZWQgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCByb2FkYmxvY2tzIHRvIGZ1enppbmcgdGhpcyBjb2RlIGVmZmVjdGl2ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjE0LjA1OTgzODQ5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzM1NDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBSVJfRU44ODExSF9QSFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTMyPWNvbmZpZyBNRElPX0FJUk9IQV9FTjg4MTFIXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzYtXFx0c2VsZWN0IEFJUl9ORVRfUEhZTElCXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjM3OlxcdGltcGx5IEFJUl9FTjg4MTFIX1BIWVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zOC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz05Mz1jb25maWcgQUlSX0FOODgwMV9QSFlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTk4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjk5OmNvbmZpZyBBSVJfRU44ODExSF9QSFlcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xMDAtXFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBFTjg4MTFIIDIuNSBHaWdhYml0IFBIWVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0zMz1vYmotJChDT05GSUdfQUlSX0FOODgwMV9QSFkpXFx0Kz0gYWlyX2FuODgwMS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjM0Om9iai0kKENPTkZJR19BSVJfRU44ODExSF9QSFkpICAgKz0gYWlyX2VuODgxMWgub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQUlSX05FVF9QSFlMSUIpXFx0Kz0gYWlyX3BoeV9saWIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwMTo1MjoxNC4xODMxOTY5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMTQxNDgyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgQWlyb2hhIEVOODgxMUggRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBBaXJvaGEgRU44ODExSCBkcml2ZXJzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEtZW44ODExaC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGRyaXZlcnMgZ2V0IHByb2JlZCBhbmQgaW5zdGFudGlhdGVkLiBMb29raW5nIGF0IGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgLCBJIHNlZSBgZW44ODExaF9tY3Vfb2ZfbWF0Y2hbXWAgYW5kIGBtZGlvX21vZHVsZV9kcml2ZXIoZW44ODExaF9tY3VfZHJpdmVyKWAuIFJpZ2h0LCB0aGlzIGlzIE9wZW4gRmlybXdhcmUvRGV2aWNlIFRyZWUgYmFzZWQsIGJvdW5kIHRvIGFuIE1ESU8gYnVzIHVzaW5nIGBzdHJ1Y3QgbWRpb19kcml2ZXJgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVuIGBhaXJfZW44ODExaC5jYCBpcyBjbGVhcmx5IGEgUEhZIGRyaXZlciAoYHBoeV9kcml2ZXJgKS5cblxuTm93IHRoZSByZWFsIHF1ZXN0aW9uOiBDYW4gSSBhY3R1YWxseSBnZXQgdGhlc2UgTURJTyBkZXZpY2VzIG9yIFBIWSBkcml2ZXJzIHRvICpkbyBhbnl0aGluZyogaW4gYSBzdGFuZGFyZCBRRU1VL0dDRSBhbWQ2NCBlbnZpcm9ubWVudCwgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBvciBzcGVjaWZpYywgZGV0YWlsZWQgZW11bGF0aW9uIG9mIHRoZSBoYXJkd2FyZT8gSSdtIGRvdWJ0ZnVsLCBidXQgbGV0J3Mgc2VlLlxuXG5XYWl0LCBob3cgZG9lcyBTeXprYWxsZXIgZXZlbiBkZWFsIHdpdGggUEhZIGRyaXZlcnMgYW5kIE1ESU8gZGV2aWNlcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdHMgdGVzdCBjb3ZlcmFnZSBpcyBvbiB0aGlzIGZyb250LiBBcmUgdGhlcmUgYW55IG1vY2sgTURJTyBidXNlcywgdmlydHVhbCBNRElPIGRldmljZXMsIG9yIG5ldGxpbmsgUEhZIGludGVyZmFjZXMgdGhhdCBJIGNhbiBsZXZlcmFnZT8gTXkgZmluYWwgdGhvdWdodCBpcyBjYW4gSSBldmVuIGNyZWF0ZSBwaHkgZGV2aWNlcyBvciBtZGlvIGRldmljZXMgZnJvbSB1c2Vyc3BhY2U/IEknbSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWUgZGVlcGVyIGRpZ2dpbmcgdG8gZ2V0IHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjE3LjQ5NzM0NjgyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk0NzA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZHJpdmVyX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM4OTE9c3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzkxOS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM5MjA6ICogcGh5X2RyaXZlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgcGh5X2RyaXZlciB3aXRoIHRoZSBQSFkgbGF5ZXJcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5MjEtICogQG5ld19kcml2ZXI6IG5ldyBwaHlfZHJpdmVyIHRvIHJlZ2lzdGVyXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5MjMtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozOTI0OnN0YXRpYyBpbnQgcGh5X2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlcixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5MjUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zOTc0PWludCBwaHlfZHJpdmVyc19yZWdpc3RlcihzdHJ1Y3QgcGh5X2RyaXZlciAqbmV3X2RyaXZlciwgaW50IG4sXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5NzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG47IGkrKykge1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzk4MDpcXHRcXHRyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKG5ld19kcml2ZXIgKyBpLCBvd25lcik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zOTgxLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9NDAzOD1zdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDYwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6NDA2MTpcXHRyYyA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyLCBUSElTX01PRFVMRSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDYyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtNDA2NC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjQwNjU6XFx0cmMgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZnZW5waHlfZHJpdmVyLCBUSElTX01PRFVMRSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy00MDY2LVxcdGlmIChyYylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDE6NTI6MTcuNTQ0Mjk2ODY4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzNTg0Nzc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ2QgbmVlZCB0byBleGFtaW5lOlxuXG4qKkFuYWx5emluZyB0aGUgRU44ODExSCBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuUmlnaHQsIHNvIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBgZW44ODExaF9kcml2ZXJgIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLCBJIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc3RhcnQgd2l0aCBgYWlyX2VuODgxMWguY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBiZWdpbiwgY29uc2lkZXJpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSBkcml2ZXIncyByZWdpc3RyYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZnVuY3Rpb24gb3IgbWFjcm8gcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBkcml2ZXIgd2l0aCB0aGUga2VybmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBtb2R1bGVfaW5pdCgpYCwgb3IgcGVyaGFwcyBhIGN1c3RvbSByZWdpc3RyYXRpb24gZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlLiBPbmNlIEkgZmluZCBpdCwgSSdsbCBleGFtaW5lIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCB3aGF0IHJlc291cmNlcyBpdCByZXF1ZXN0cywgYW5kIHdoYXQncyBpdHMgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBLbm93aW5nIGV4YWN0bHkgKmhvdyogYW5kICp3aGVuKiB0aGlzIGRyaXZlciBpcyBiZWluZyBpbml0aWFsaXplZCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIG9mIHVuZGVyc3RhbmRpbmcgZm9yIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEwMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjE5Ljg4MDE0NjM5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU3NjA3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGh5X2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2FkaW4uYz0xMDEwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0xMDU4LVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluLmM6MTA1OTptb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4uYy0xMDYwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmM9MzIzPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQyLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTEwMC5jOjM0Mzptb2R1bGVfcGh5X2RyaXZlcihhZGluX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTAwLmMtMzQ0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FkaW4xMTQwLXBoeS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhZGluMTE0MF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYy02MC19O1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYzo2MTptb2R1bGVfcGh5X2RyaXZlcihhZGluMTE0MF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9hZGluMTE0MC1waHkuYy02Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfYW44ODAxLmM9MTEyMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWlyb2hhX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTQ1LX0gfTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX2FuODgwMS5jOjExNDY6bW9kdWxlX3BoeV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9hbjg4MDEuYy0xMTQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM9MTM4Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZW44ODExaF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfZW44ODExaC5jLTE0MzAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmM6MTQzMTptb2R1bGVfcGh5X2RyaXZlcihlbjg4MTFoX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9lbjg4MTFoLmMtMTQzMi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYz05MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYW03OWNfZHJpdmVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FtZC5jLTExMS1cXG5kcml2ZXJzL25ldC9waHkvYW1kLmM6MTEyOm1vZHVsZV9waHlfZHJpdmVyKGFtNzljX2RyaXZlcnMpO1xcbmRyaXZlcnMvbmV0L3BoeS9hbWQuYy0xMTMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jPTExODE9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFxcl9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9hcXVhbnRpYS9hcXVhbnRpYV9tYWluLmMtMTU2NC1cXG5kcml2ZXJzL25ldC9waHkvYXF1YW50aWEvYXF1YW50aWFfbWFpbi5jOjE1NjU6bW9kdWxlX3BoeV9kcml2ZXIoYXFyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2FxdWFudGlhL2FxdWFudGlhX21haW4uYy0xNTY2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYz05NDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFzMjF4eHhfZHJpdmVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDc3LX07XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYzoxMDc4Om1vZHVsZV9waHlfZHJpdmVyKGFzMjF4eHhfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L2FzMjF4eHguYy0xMDc5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM9OTc9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFzaXhfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmIuYy0xMjAtXFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiLmM6MTIxOm1vZHVsZV9waHlfZHJpdmVyKGFzaXhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmIuYy0xMjItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmJfcnVzdC5ycy0xMi1cXG5kcml2ZXJzL25ldC9waHkvYXg4ODc5NmJfcnVzdC5yczoxMzprZXJuZWw6Om1vZHVsZV9waHlfZHJpdmVyISB7XFxuZHJpdmVycy9uZXQvcGh5L2F4ODg3OTZiX3J1c3QucnMtMTQtICAgIGRyaXZlcnM6IFtQaHlBWDg4NzcyQSwgUGh5QVg4ODc3MkMsIFBoeUFYODg3OTZCXSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmM9Mjg2PU1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYmNtX2N5Z251c19waHlfdGJsKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jLTI4Ny1cXG5kcml2ZXJzL25ldC9waHkvYmNtLWN5Z251cy5jOjI4ODptb2R1bGVfcGh5X2RyaXZlcihiY21fY3lnbnVzX3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9iY20tY3lnbnVzLmMtMjg5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmM9ODY1PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDE0MF9kcml2ZXJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYy04ODQtfTtcXG5kcml2ZXJzL25ldC9waHkvYmNtNTQxNDAuYzo4ODU6bW9kdWxlX3BoeV9kcml2ZXIoYmNtNTQxNDBfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTU0MTQwLmMtODg2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYz03Mj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNjN4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY202M3h4LmMtOTMtXFxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYzo5NDptb2R1bGVfcGh5X2RyaXZlcihiY202M3h4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2JjbTYzeHguYy05NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM9OTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYmNtN3h4eF90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmMtOTY5LVxcbmRyaXZlcnMvbmV0L3BoeS9iY203eHh4LmM6OTcwOm1vZHVsZV9waHlfZHJpdmVyKGJjbTd4eHhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtN3h4eC5jLTk3MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jPTQxOT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODQ4ODFfZHJpdmVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2JjbTg0ODgxLmMtNDYxLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jOjQ2Mjptb2R1bGVfcGh5X2RyaXZlcihiY204NDg4MV9kcml2ZXJzKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODQ4ODEuYy00NjMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jPTE5ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODd4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmMtMjE4LVxcbmRyaXZlcnMvbmV0L3BoeS9iY204N3h4LmM6MjE5Om1vZHVsZV9waHlfZHJpdmVyKGJjbTg3eHhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvYmNtODd4eC5jLTIyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jPTE0NjY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJyb2FkY29tX2RyaXZlcnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jLTE3NTMtXFxuZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmM6MTc1NDptb2R1bGVfcGh5X2RyaXZlcihicm9hZGNvbV9kcml2ZXJzKTtcXG5kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYy0xNzU1LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jPTEyNz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgY2lzODIweF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9jaWNhZGEuYy0xNDUtXFxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jOjE0Njptb2R1bGVfcGh5X2RyaXZlcihjaXM4MjB4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2NpY2FkYS5jLTE0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmM9NzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGNvcnRpbmFfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvY29ydGluYS5jLTg3LVxcbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmM6ODg6bW9kdWxlX3BoeV9kcml2ZXIoY29ydGluYV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9jb3J0aW5hLmMtODktXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZGFwODIxMXIuYz0xOTY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRhcDgyMTFyX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMjA4LX07XFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmM6MjA5Om1vZHVsZV9waHlfZHJpdmVyKGRhcDgyMTFyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2RhcDgyMTFyLmMtMjEwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Rhdmljb20uYz0xNzM9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRtOTF4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMtMjA5LVxcbmRyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmM6MjEwOm1vZHVsZV9waHlfZHJpdmVyKGRtOTF4eF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9kYXZpY29tLmMtMjExLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYz0xNDU2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzNjQwX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYy0xNDcwLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmM6MTQ3MTptb2R1bGVfcGh5X2RyaXZlcihkcDgzNjQwX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYy0xNDcyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYz0xMjM2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODIyX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYy0xMjQ0LX07XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4MjIuYzoxMjQ1Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4MjJfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4MzgyMi5jLTEyNDYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg0OC5jPTE1Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4Mzg0OF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODQ4LmMtMTY2LX07XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NDguYzoxNjc6bW9kdWxlX3BoeV9kcml2ZXIoZHA4Mzg0OF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODQ4LmMtMTY4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYz0xMTgwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY3X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYy0xMjE4LX07XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYzoxMjE5Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4NjdfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jLTEyMjAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZHA4Mzg2OS5jPTkzND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4Mzg2OV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY5LmMtOTM4LX07XFxuZHJpdmVycy9uZXQvcGh5L2RwODM4NjkuYzo5Mzk6bW9kdWxlX3BoeV9kcml2ZXIoZHA4Mzg2OV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9kcDgzODY5LmMtOTQwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0YzgxMS5jPTM4Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4MzgxMV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9kcDgzdGM4MTEuYy00MDQtfTtcXG5kcml2ZXJzL25ldC9waHkvZHA4M3RjODExLmM6NDA1Om1vZHVsZV9waHlfZHJpdmVyKGRwODM4MTFfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4M3RjODExLmMtNDA2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jPTkzNj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4M3RkNTEwX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jLTk2Ni19IH07XFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZDUxMC5jOjk2Nzptb2R1bGVfcGh5X2RyaXZlcihkcDgzdGQ1MTBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4M3RkNTEwLmMtOTY4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jPTY0ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZHA4M3RnNzIwX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jLTY2Ny19IH07XFxuZHJpdmVycy9uZXQvcGh5L2RwODN0ZzcyMC5jOjY2ODptb2R1bGVfcGh5X2RyaXZlcihkcDgzdGc3MjBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZHA4M3RnNzIwLmMtNjY5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2V0MTAxMWMuYz04Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZXQxMDExY19kcml2ZXJbXSA9IHsge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2V0MTAxMWMuYy05NC1cXG5kcml2ZXJzL25ldC9waHkvZXQxMDExYy5jOjk1Om1vZHVsZV9waHlfZHJpdmVyKGV0MTAxMWNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvZXQxMDExYy5jLTk2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jPTU3NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgaWNwbHVzX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ljcGx1cy5jLTYyNS1cXG5kcml2ZXJzL25ldC9waHkvaWNwbHVzLmM6NjI2Om1vZHVsZV9waHlfZHJpdmVyKGljcGx1c19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9pY3BsdXMuYy02MjctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvaW50ZWwteHdheS5jPTU4ND1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgeHdheV9ncGh5W10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvaW50ZWwteHdheS5jLTc3MC19O1xcbmRyaXZlcnMvbmV0L3BoeS9pbnRlbC14d2F5LmM6NzcxOm1vZHVsZV9waHlfZHJpdmVyKHh3YXlfZ3BoeSk7XFxuZHJpdmVycy9uZXQvcGh5L2ludGVsLXh3YXkuYy03NzItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbHh0LmM9MzA4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBseHQ5N3hfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbHh0LmMtMzQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9seHQuYzozNDk6bW9kdWxlX3BoeV9kcml2ZXIobHh0OTd4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L2x4dC5jLTM1MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4cTJ4eHguYz0xMTAyPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdjg4cTJ4eHhfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHEyeHh4LmMtMTE0My1cXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHEyeHh4LmM6MTE0NDptb2R1bGVfcGh5X2RyaXZlcihtdjg4cTJ4eHhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHEyeHh4LmMtMTE0NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLTg4eDIyMjIuYz01Nzg9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG12MjIyMl9kcml2ZXJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC04OHgyMjIyLmMtNTk0LX07XFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODh4MjIyMi5jOjU5NTptb2R1bGVfcGh5X2RyaXZlcihtdjIyMjJfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwtODh4MjIyMi5jLTU5Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmM9MzY2Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWFydmVsbF9kcml2ZXJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jLTQxNzYtXFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYzo0MTc3Om1vZHVsZV9waHlfZHJpdmVyKG1hcnZlbGxfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYy00MTc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYz0xMzg4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdjMzMTBfZHJpdmVyc1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYy0xNDc2LVxcbmRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmM6MTQ3Nzptb2R1bGVfcGh5X2RyaXZlcihtdjMzMTBfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYy0xNDc4LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jPTM3OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrXzJwNWdlcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay0ycDVnZS5jLTQwMC1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLTJwNWdlLmM6NDAxOm1vZHVsZV9waHlfZHJpdmVyKG10a18ycDVnZXBoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstMnA1Z2UuYy00MDItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWZlLXNvYy5jPTMwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdGtfc29jX2ZlX3BoeV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmMtNDEtXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1mZS1zb2MuYzo0Mjptb2R1bGVfcGh5X2RyaXZlcihtdGtfc29jX2ZlX3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZmUtc29jLmMtNDMtc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtdGtfc29jX2ZlX3BoeV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmM9MTQ5NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX3NvY3BoeV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTU2OC1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLXNvYy5jOjE1Njk6bW9kdWxlX3BoeV9kcml2ZXIobXRrX3NvY3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2Utc29jLmMtMTU3MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYz05OT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbXRrX2dlcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrL210ay1nZS5jLTEyOS1cXG5kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWsvbXRrLWdlLmM6MTMwOm1vZHVsZV9waHlfZHJpdmVyKG10a19nZXBoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZWRpYXRlay9tdGstZ2UuYy0xMzEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWVzb24tZ3hsLmM9MjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbWVzb25fZ3hsX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21lc29uLWd4bC5jLTIyOS1cXG5kcml2ZXJzL25ldC9waHkvbWVzb24tZ3hsLmM6MjMwOm1vZHVsZV9waHlfZHJpdmVyKG1lc29uX2d4bF9waHkpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZXNvbi1neGwuYy0yMzEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmM9Njc4MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIga3NwaHlfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmMtNzEwOC1cXG5kcml2ZXJzL25ldC9waHkvbWljcmVsLmM6NzEwOTptb2R1bGVfcGh5X2RyaXZlcihrc3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9taWNyZWwuYy03MTEwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jPTU0Nj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWljcm9jaGlwX3BoeV9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXAuYy01ODgtXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jOjU4OTptb2R1bGVfcGh5X2RyaXZlcihtaWNyb2NoaXBfcGh5X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcC5jLTU5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDEuYz0yMTA0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtaWNyb2NoaXBfdDFfcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MS5jLTIxNjItXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MS5jOjIxNjM6bW9kdWxlX3BoeV9kcml2ZXIobWljcm9jaGlwX3QxX3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDEuYy0yMTY0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYz01MDk9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1pY3JvY2hpcF90MXNfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jLTU2Ni1cXG5kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jOjU2Nzptb2R1bGVfcGh5X2RyaXZlcihtaWNyb2NoaXBfdDFzX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYy01NjgtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MzA3NT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzE2Mi1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzE2Mzptb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTY0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmM9MjU0OD1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdnNjODV4eF9kcml2ZXJbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tc2NjL21zY2NfbWFpbi5jLTI5ODgtXFxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmM6Mjk4OTptb2R1bGVfcGh5X2RyaXZlcih2c2M4NXh4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L21zY2MvbXNjY19tYWluLmMtMjk5MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9teGwtODYxMTAuYz05MzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG14bF9waHlfZHJ2c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L214bC04NjExMC5jLTk2OC1cXG5kcml2ZXJzL25ldC9waHkvbXhsLTg2MTEwLmM6OTY5Om1vZHVsZV9waHlfZHJpdmVyKG14bF9waHlfZHJ2cyk7XFxuZHJpdmVycy9uZXQvcGh5L214bC04NjExMC5jLTk3MC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmM9MTEwMj1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ3B5X2RyaXZlcnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmMtMTQ3OC19O1xcbmRyaXZlcnMvbmV0L3BoeS9teGwtZ3B5LmM6MTQ3OTptb2R1bGVfcGh5X2RyaXZlcihncHlfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L214bC1ncHkuYy0xNDgwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmM9MTYwPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY1X2RyaXZlcltdID0geyB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYy0xNjktXFxuZHJpdmVycy9uZXQvcGh5L25hdGlvbmFsLmM6MTcwOm1vZHVsZV9waHlfZHJpdmVyKGRwODM4NjVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvbmF0aW9uYWwuYy0xNzEtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuYz0xNDM9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG5jbjI2MDAwX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmMtMTU5LVxcbmRyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jOjE2MDptb2R1bGVfcGh5X2RyaXZlcihuY24yNjAwMF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jLTE2MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtYzQ1LXRqYTExeHguYz0yMDczPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBueHBfYzQ1X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC1jNDUtdGphMTF4eC5jLTIxNzctXFxuZHJpdmVycy9uZXQvcGh5L254cC1jNDUtdGphMTF4eC5jOjIxNzg6bW9kdWxlX3BoeV9kcml2ZXIobnhwX2M0NV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9ueHAtYzQ1LXRqYTExeHguYy0yMTc5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC1jYnR4LmM9MTk3PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBjYnR4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC1jYnR4LmMtMjE1LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtY2J0eC5jOjIxNjptb2R1bGVfcGh5X2RyaXZlcihjYnR4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L254cC1jYnR4LmMtMjE3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9ODE4PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB0amExMXh4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtOTI3LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjkyODptb2R1bGVfcGh5X2RyaXZlcih0amExMXh4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtOTI5LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vYXQ4MDN4LmM9MTExMz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYXQ4MDN4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vYXQ4MDN4LmMtMTIzNS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9hdDgwM3guYzoxMjM2Om1vZHVsZV9waHlfZHJpdmVyKGF0ODAzeF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL2F0ODAzeC5jLTEyMzctXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM9NzkxPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxY2E4MDd4X2RyaXZlcnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYy04NDMtfTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmM6ODQ0Om1vZHVsZV9waHlfZHJpdmVyKHFjYTgwN3hfZHJpdmVycyk7XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTg0NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYz02NDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHFjYTgwOHhfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDh4LmMtNjc4LVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYzo2Nzk6bW9kdWxlX3BoeV9kcml2ZXIocWNhODA4eF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwOHguYy02ODAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmM9MjEzPXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxY2E4M3h4X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODN4eC5jLTI1OS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmM6MjYwOm1vZHVsZV9waHlfZHJpdmVyKHFjYTgzeHhfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4M3h4LmMtMjYxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3FzZW1pLmM9MTQ2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBxczY2MTJfZHJpdmVyW10gPSB7IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xc2VtaS5jLTE1NS1cXG5kcml2ZXJzL25ldC9waHkvcXNlbWkuYzoxNTY6bW9kdWxlX3BoeV9kcml2ZXIocXM2NjEyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L3FzZW1pLmMtMTU3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3F0MjAyNS5ycy0yMy1cXG5kcml2ZXJzL25ldC9waHkvcXQyMDI1LnJzOjI0Omtlcm5lbDo6bW9kdWxlX3BoeV9kcml2ZXIhIHtcXG5kcml2ZXJzL25ldC9waHkvcXQyMDI1LnJzLTI1LSAgICBkcml2ZXJzOiBbUGh5UVQyMDI1XSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jPTMwNDY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMzM2NC1cXG5kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYzozMzY1Om1vZHVsZV9waHlfZHJpdmVyKHJlYWx0ZWtfZHJ2cyk7XFxuZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMtMzM2Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9yb2NrY2hpcC5jPTE3Mz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcm9ja2NoaXBfcGh5X2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3JvY2tjaGlwLmMtMTg4LVxcbmRyaXZlcnMvbmV0L3BoeS9yb2NrY2hpcC5jOjE4OTptb2R1bGVfcGh5X2RyaXZlcihyb2NrY2hpcF9waHlfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvcm9ja2NoaXAuYy0xOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc21zYy5jPTY4Nz1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgc21zY19waHlfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc21zYy5jLTg4Mi1cXG5kcml2ZXJzL25ldC9waHkvc21zYy5jOjg4Mzptb2R1bGVfcGh5X2RyaXZlcihzbXNjX3BoeV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9zbXNjLmMtODg0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYz0xMDI9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHN0ZTEweHBfcGRyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYy0xMjQtXFxuZHJpdmVycy9uZXQvcGh5L3N0ZTEwWHAuYzoxMjU6bW9kdWxlX3BoeV9kcml2ZXIoc3RlMTB4cF9wZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvc3RlMTBYcC5jLTEyNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS90ZXJhbmV0aWNzLmM9NzY9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHRlcmFuZXRpY3NfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvdGVyYW5ldGljcy5jLTg4LVxcbmRyaXZlcnMvbmV0L3BoeS90ZXJhbmV0aWNzLmM6ODk6bW9kdWxlX3BoeV9kcml2ZXIodGVyYW5ldGljc19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS90ZXJhbmV0aWNzLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYz04MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgdXBkNjA2MjBfZHJpdmVyWzFdID0geyB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYy05MC1cXG5kcml2ZXJzL25ldC9waHkvdVBENjA2MjAuYzo5MTptb2R1bGVfcGh5X2RyaXZlcih1cGQ2MDYyMF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS91UEQ2MDYyMC5jLTkyLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYz02MDE9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHZzYzgyeHhfZHJpdmVyW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jLTcxNS1cXG5kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jOjcxNjptb2R1bGVfcGh5X2RyaXZlcih2c2M4Mnh4X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYy03MTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjE5LjkyNTcyNjc1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MTYwMDYxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIE1ESU8gRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGFuIE1ESU8gTUNVIGRyaXZlciwgYG1kaW8tYWlyb2hhLWVuODgxMWguY2AsIGZvciB0aGUgQWlyb2hhIEVOODgxMUggMi41RyBQSFkgbWljcm9jb250cm9sbGVyLCBhbG9uZyB3aXRoIHJlZmFjdG9yaW5nIHdpdGhpbiB0aGUgYGFpcl9lbjg4MTFoLmNgIGFuZCBgYWlyX3BoeV9saWIuY2AgZHJpdmVycy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYG1kaW8tYWlyb2hhLWVuODgxMWguY2AgYW5kIGBhaXJfZW44ODExaC5jYCBhcmUgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBleGlzdGVuY2Ugb2YgYW4gTURJTyBidXMsIGFuZCBzcGVjaWZpY2FsbHksIHRvIGEgZGV2aWNlIHRyZWUgbm9kZSBtYXRjaGluZyBgXCJhaXJvaGEsZW44ODExaC1tY3VcImAgb3IgUEhZIElEcyBgMHgwM2EyYTQxMSAvIDB4YzBmZjA0YTBgLlxuXG5UaGUgTURJTyBkcml2ZXIgKGBtZGlvLWFpcm9oYS1lbjg4MTFoLmNgKSByZWxpZXMgb24gYE9GX01ESU9gLCBtYWtpbmcgaXQgY2xlYXIgdGhhdCBEZXZpY2UgVHJlZSBpcyBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIGluc3RhbnRpYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGVzZSBhcmUgc3BlY2lmaWMgdG8gQWlyb2hhIGhhcmR3YXJlLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gdGhpcyBoYXJkd2FyZSBldmVuICpiZSogcmVhY2hlZCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb24gYW4geDg2XzY0IHN5c3RlbT8gIEJhc2VkIG9uIHdoYXQgSSBrbm93IGFib3V0IHZpcnR1YWxpemF0aW9uIGFuZCB0aGUgbmF0dXJlIG9mIE1ESU8sIHRoZSBhbnN3ZXIgaXMgZGVmaW5pdGl2ZWx5IG5vLiBUaGVyZSdzIG5vIGVtdWxhdGlvbiBvZiB0aGlzIEFpcm9oYS1zcGVjaWZpYyBNRElPIGRldmljZSBvciB0aGUgRU44ODExSCBQSFkgaW4gUUVNVS4gIFRoaXMgcmVxdWlyZXMgcGh5c2ljYWwgQWlyb2hhIEVOODgxMUggaGFyZHdhcmUsIGNvbm5lY3RlZCB2aWEgYW4gTURJTyBidXMsIHNvbWV0aGluZyBjb21tb24gb24gQVJNIG9yIE1JUFMgcm91dGVyL2JvYXJkIGFyY2hpdGVjdHVyZXMsIG5vdCB4ODYuXG5cblRvIGNvbmZpcm0gdGhpcywgSSd2ZSByZXZpZXdlZCB0aGUgZ3VpZGVsaW5lcyBhYm91dCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFRoaXMgcGF0Y2ggZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgY2F0ZWdvcnkgb2YgXCJWZW5kb3Itc3BlY2lmaWMgWy4uLl0gZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgWy4uLl0gY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi5cblxuVG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCwgSSBhbHNvIHJldmlld2VkIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gV2hpbGUgdGhlIGtlcm5lbCBoZWFkZXJzIHN1Y2ggYXMgYGluY2x1ZGUvbGludXgvcGh5LmhgIHdlcmUgdG91Y2hlZCwgdGhhdCdzIGZpbmUuIFRoZSBrZXkgaXMgaW4gdGhlIHNwZWNpZmljcyBvZiB0aGUgYWRkZWQgY29kZTogYG1kaW8tYWlyb2hhLWVuODgxMWguY2AsIGBhaXJfZW44ODExaC5jYCwgYGFpcl9waHlfbGliLmNgIGFuZCB0aGUgc3VwcG9ydGluZyBkZXZpY2UgdHJlZSBiaW5kaW5nIGFuZCBjb25maWcgZmlsZXMuICBUaGUgaGVscGVyIGZ1bmN0aW9ucyBhZGRlZCB0byBgcGh5LmhgLCB3aGlsZSBnZW5lcmljIGluIG5hbWUsIGFyZSB1c2VkICpleGNsdXNpdmVseSogaW4gdGhlIEFpcm9oYS1zcGVjaWZpYyBkcml2ZXJzLiAgSSB3aWxsIHF1aWNrbHkgY2hlY2ssIGhvd2V2ZXIsIHRoYXQgdGhlIG5ldyBgbWRpb2Rldl9sb2NrKmAgaGVscGVyIGZ1bmN0aW9ucyBhcmUgbm90IGNhbGxlZCBhbnl3aGVyZSBlbHNlIG91dHNpZGUgb2YgQWlyb2hhIGNvZGUgaW4gdGhlIGtlcm5lbCwgYW5kIGlmIHNvLCBpdCBmdXJ0aGVyIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyB1bnJlYWNoYWJsZSBjb2RlLlxuXG5JbiBzaG9ydCwgdGhlcmUncyBubyBwYXRoIGZvciB0aGlzIGNvZGUgdG8gYmUgZXhlY3V0ZWQgaW4gYSBzdGFuZGFyZCB4ODZfNjQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuIFRoZSBjb2RlIGlzIGFyY2hpdGVjdHVyYWxseSBpc29sYXRlZCB0byBoYXJkd2FyZSB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gc3VjaCBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMDUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjI2LjM0MTczNjA5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjUxMjU5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvZGV2X2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM9MjYwPXN0YXRpYyBpbnQgX19haXJfbWRpb19yZXN0b3JlX3BhZ2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc1LS8qIE5lc3RlZCB3aGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBob2xkcyB0aGUgYnVzIHRoaXMgY2hpcCBoYW5ncyBiZWxvdy4gKi9cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyNzY6c3RhdGljIHZvaWQgYWlyX21kaW9kZXZfbG9jayhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgbmVzdGVkKVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI3Ny17XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjc4LVxcdGlmIChuZXN0ZWQpXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6Mjc5OlxcdFxcdG1kaW9kZXZfbG9ja19uZXN0ZWQobWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmMtMjgwLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyODE6XFx0XFx0bWRpb2Rldl9sb2NrKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI4Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0yODQ9aW50IGFpcl9md193cml0ZV9idWYoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCB1MzIgYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTI5OC1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzoyOTk6XFx0XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMwMC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTMyND1zdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ19yZWFkKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMyOS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozMzA6XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTMzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTM0NT1zdGF0aWMgaW50IGFpcl9tZGlvX2J1Y2twYnVzX3JlZ193cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTAtXFxuZHJpdmVycy9uZXQvcGh5L2Fpcl9waHlfbGliLmM6MzUxOlxcdGFpcl9tZGlvZGV2X2xvY2sobWRpb2RldiwgbmVzdGVkKTtcXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYy0zNTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYz0zNjc9c3RhdGljIGludCBhaXJfbWRpb19idWNrcGJ1c19yZWdfbW9kaWZ5KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM3Mi1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzozNzM6XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTM3NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jPTQxND1zdGF0aWMgaW50IGFpcl9tbWRfc3RhdHVzX3JlYWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIG5lc3RlZClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTQxNy1cXG5kcml2ZXJzL25ldC9waHkvYWlyX3BoeV9saWIuYzo0MTg6XFx0YWlyX21kaW9kZXZfbG9jayhtZGlvZGV2LCBuZXN0ZWQpO1xcbmRyaXZlcnMvbmV0L3BoeS9haXJfcGh5X2xpYi5jLTQxOS1cXHRyZXQgPSBfX2Fpcl9tbWRfcmVhZChtZGlvZGV2LCBNRElPX01NRF9WRU5EMSwgRU44ODExSF9QSFlfRldfU1RBVFVTKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MjI4Mj1zdGF0aWMgaW5saW5lIHZvaWQgcGh5X3VubG9ja19tZGlvX2J1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMjg2LVxcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjI4NzpzdGF0aWMgaW5saW5lIHZvaWQgbWRpb2Rldl9sb2NrKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIyODgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMjkyLS8qIEZvciBhIGJ1cyByZWFjaGVkIHRocm91Z2ggYW5vdGhlciBvbmUsIGFzIG1kaW9idXNfcmVhZF9uZXN0ZWQoKSBpcy4gKi9cXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIyOTM6c3RhdGljIGlubGluZSB2b2lkIG1kaW9kZXZfbG9ja19uZXN0ZWQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmluY2x1ZGUvbGludXgvcGh5LmgtMjI5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjI4LjAwNDI1NTA1MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODMxMjE2NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFpcm9oYSBFTjg4MTFIIE1ESU8gTUNVL1BIWSBQYXRjaCoqXG5cbk9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRoaXMgY29kZSBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhlIGBtZGlvZGV2X2xvY2sqYCB2YXJpYWJsZXMgYXJlIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIGBhaXJfcGh5X2xpYi5jYC4gVGhhdCdzIGEgcHJldHR5IGNsZWFyIHNpZ25hbCB0aGF0IHRoaXMgd2hvbGUgbW9kaWZpY2F0aW9uIGlzIGNvbmZpbmVkIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIGZvciB0aGUgQWlyb2hhIEVOODgxMUggTURJTyBNQ1UgYW5kIFBIWS4gVGhpcyBpbW1lZGlhdGVseSByYWlzZXMgYSByZWQgZmxhZyBpbiB0ZXJtcyBvZiBmdXp6aW5nIGFwcGxpY2FiaWxpdHksIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIGNvbmZpcm1lZC5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIEFpcm9oYSBoYXJkd2FyZSBpcyBub3Qgc29tZXRoaW5nIHdlIGNhbiBlbXVsYXRlIHdpdGggc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gc2V0dXBzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb24gYW1kNjQuIFRoZSBmdW5jdGlvbmFsaXR5IHJldm9sdmVzIGFyb3VuZCBsb2FkaW5nIE1EMzIgY29yZSBmaXJtd2FyZSwgd2hpY2gsIHdpdGhvdXQgYWNjZXNzIHRvIHRoZSBhY3R1YWwgQWlyb2hhIGhhcmR3YXJlIGFuZCBpdHMgRGV2aWNlIFRyZWUgcmVwcmVzZW50YXRpb24sIGlzIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlLlxuXG5MZXQncyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluOlxuKiAgIGBXb3J0aEZ1enppbmdgOiBGYWxzZSDigJMgeWVwLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkLlxuKiAgIGBFbmFibGVDb25maWdzYDogRW1wdHkgYXJyYXkg4oCTIGNvcnJlY3QuIE5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgb3IgcmVsZXZhbnQgaGVyZS5cbiogICBgRm9jdXNTeW1ib2xzYDogQWxzbyBlbXB0eSDigJMgbWFrZXMgc2Vuc2UuIE5vIHNwZWNpZmljIHN5bWJvbHMgYXJlIGhpZ2hsaWdodGVkIGZvciBmdXp6aW5nLlxuKiAgIFRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGUsIGFuZCB0aGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLCB0aGUgTURJTyBNQ1UsIGFuZCBQSFkuXG5cbkFsbCBjcml0ZXJpYSBwb2ludCBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uIEl0J3Mgc2FmZSB0byBzYXkgdGhlc2UgY2hhbmdlcyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1cmluZyBhbnkgZnV6emluZyBhY3Rpdml0aWVzIHdlJ2QgcnVuIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gRXhjZWxsZW50LCBJJ20gc2F0aXNmaWVkLiBUaW1lIHRvIG1hcmsgdGhpcyBvbmUgYXBwcm9wcmlhdGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4ODQsIk91dHB1dFRva2VucyI6MTE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjMxLjgzNTQ3NDQwM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIERldmljZSBUcmVlIGJpbmRpbmdzLCBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkvTUNVIGhhcmR3YXJlLiBUaGVzZSBkcml2ZXJzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBBaXJvaGEgaGFyZHdhcmUgKGFuZCByZXF1aXJlIERldmljZSBUcmVlIE1ESU8gZW51bWVyYXRpb24pIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIERldmljZSBUcmVlIGJpbmRpbmdzLCBhbiBNRElPIE1DVSBkcml2ZXIsIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgZm9yIHRoZSBBaXJvaGEgRU44ODExSCBQSFkvTUNVIGhhcmR3YXJlLiBUaGVzZSBkcml2ZXJzIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGFyZSBzcGVjaWZpYyB0byBwaHlzaWNhbCBBaXJvaGEgaGFyZHdhcmUgKGFuZCByZXF1aXJlIERldmljZSBUcmVlIE1ESU8gZW51bWVyYXRpb24pIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDAxOjUyOjMxLjgzNTUwNDc5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow7b4tr[1] Phase: Running StartedAt: 2026-09-07 01:52:42 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7b4tr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 01:52:42 +0000 UTC FinishedAt: 2026-09-07 01:52:47 +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,}