Name: series-workflowmmhpr Phase: Failed StartedAt: 2026-09-06 03:22:50 +0000 UTC FinishedAt: 2026-09-06 03:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmhpr[0] Phase: Succeeded StartedAt: 2026-09-06 03:22:50 +0000 UTC FinishedAt: 2026-09-06 03:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmhpr[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 03:22:50 +0000 UTC FinishedAt: 2026-09-06 03:25:51 +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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIGNvbW1lbnRzLCBzY29wZXMgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UoKSB0byBzdGF0aWMsIHJlbW92ZXMgdGhlIHVudXNlZCBoZWxwZXIgZGF4X2xheW91dF9idXN5X3BhZ2UoKSwgYW5kIHJlbW92ZXMgb2Jzb2xldGUgZGVjbGFyYXRpb25zL3N0dWJzIGZyb20gaW5jbHVkZS9saW51eC9kYXguaC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gZXhlY3V0YWJsZSBjb2RlIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGNvbnRyb2wgZmxvdywgb3IgcnVudGltZSBhc3NlcnRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNkNGExYzgyOWNhOGFiYTk0MTBlNzQwYzZjZWY0NTExNDI3N2NhMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAzOjI1OjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcbmluZGV4IDZiYTUwMTQyZWViMmYuLjhlMGNkYTM4ZTVmZGEgMTAwNjQ0XG4tLS0gYS9mcy9kYXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGF4LmNcbkBAIC03NzIsMjQgJiM0Mzs3NzIsMjMgQEAgc3RhdGljIHZvaWQgKmdyYWJfbWFwcGluZ19lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbiBcbiAvKipcbiAgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSAtIGZpbmQgZmlyc3QgcGlubmVkIHBhZ2UgaW4gQG1hcHBpbmdcbi0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBhZ2Ugd2l0aCByZWYgY291bnQgXHUwMDNlIDFcbiYjNDM7ICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2UgdG8gc2NhbiBmb3IgYSBwaW5uZWQgcGFnZVxuICAqIEBzdGFydDogU3RhcnRpbmcgb2Zmc2V0LiBQYWdlIGNvbnRhaW5pbmcgJiMzOTtzdGFydCYjMzk7IGlzIGluY2x1ZGVkLlxuICAqIEBlbmQ6IEVuZCBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAmIzM5O2VuZCYjMzk7IGlzIGluY2x1ZGVkLiBJZiAmIzM5O2VuZCYjMzk7IGlzIExMT05HX01BWCxcbiAgKiAgICAgICBwYWdlcyBmcm9tICYjMzk7c3RhcnQmIzM5OyB0aWxsIHRoZSBlbmQgb2YgZmlsZSBhcmUgaW5jbHVkZWQuXG4gICpcbi0gKiBEQVggcmVxdWlyZXMgWk9ORV9ERVZJQ0UgbWFwcGVkIHBhZ2VzLiBUaGVzZSBwYWdlcyBhcmUgbmV2ZXJcbi0gKiAmIzM5O29ubGluZWQmIzM5OyB0byB0aGUgcGFnZSBhbGxvY2F0b3Igc28gdGhleSBhcmUgY29uc2lkZXJlZCBpZGxlIHdoZW5cbi0gKiBwYWdlLVx1MDAzZWNvdW50ID09IDEuIEEgZmlsZXN5c3RlbSB1c2VzIHRoaXMgaW50ZXJmYWNlIHRvIGRldGVybWluZSBpZlxuLSAqIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSwgb3Igb3RoZXJcbi0gKiBnZXRfdXNlcl9wYWdlcygpIHVzYWdlcy5cbiYjNDM7ICogREFYIHJlcXVpcmVzIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcy4gQSBwYWdlIGlzIGNvbnNpZGVyZWQgYnVzeSB3aGVuXG4mIzQzOyAqIGZvbGlvX3JlZl9jb3VudChmb2xpbykgZXhjZWVkcyBmb2xpb19tYXBjb3VudChmb2xpbykuIFRoaXMgaGVscGVyIGlzXG4mIzQzOyAqIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSxcbiYjNDM7ICogb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuXG4gICpcbiAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmaWxlc3lzdGVtIGlzIGhvbGRpbmcgbG9ja3MgdG8gYmxvY2sgdGhlXG4gICogZXN0YWJsaXNobWVudCBvZiBuZXcgbWFwcGluZ3MgaW4gdGhpcyBhZGRyZXNzX3NwYWNlLiBJLmUuIGl0IGV4cGVjdHNcbi0gKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxuJiM0MzsgKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3BhZ2VzKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxuICAqIG1hcHBpbmdfbWFwcGVkKCkgYmVjb21pbmcgdHJ1ZS5cbiAgKi9cbi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4ge1xuIFx0dm9pZCAqZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgc2Nhbm5lZCA9IDA7XG5AQCAtODQxLDEzICYjNDM7ODQwLDYgQEAgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbiBcdHJldHVybiBwYWdlO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSk7XG4tXG4tc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuLXtcbi1cdHJldHVybiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShtYXBwaW5nLCAwLCBMTE9OR19NQVgpO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChkYXhfbGF5b3V0X2J1c3lfcGFnZSk7XG4gXG4gc3RhdGljIGludCBfX2RheF9pbnZhbGlkYXRlX2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0ICBwZ29mZl90IGluZGV4LCBib29sIHRydW5jKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGF4LmggYi9pbmNsdWRlL2xpbnV4L2RheC5oXG5pbmRleCBmZTZjM2RlZDFiNTBmLi5mMmQ0Nzk3NWQ5MDVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYXguaFxuQEAgLTE1NSw4ICYjNDM7MTU1LDYgQEAgaW50IGRheF93cml0ZWJhY2tfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0c3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBpbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuLXN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7XG4tc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpO1xuIGRheF9lbnRyeV90IGRheF9sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHZvaWQgZGF4X3VubG9ja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBkYXhfZW50cnlfdCBjb29raWUpO1xuIGRheF9lbnRyeV90IGRheF9sb2NrX21hcHBpbmdfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5AQCAtMTczLDE2ICYjNDM7MTcxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgZnNfZGF4X2dldChzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgdm9pZCAqaG9sZGVyLFxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IG5yX3BhZ2VzKVxuLXtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIGNvbW1lbnRzLCBzY29wZXMgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UoKSB0byBzdGF0aWMsIHJlbW92ZXMgdGhlIHVudXNlZCBoZWxwZXIgZGF4X2xheW91dF9idXN5X3BhZ2UoKSwgYW5kIHJlbW92ZXMgb2Jzb2xldGUgZGVjbGFyYXRpb25zL3N0dWJzIGZyb20gaW5jbHVkZS9saW51eC9kYXguaC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gZXhlY3V0YWJsZSBjb2RlIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGNvbnRyb2wgZmxvdywgb3IgcnVudGltZSBhc3NlcnRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNGExYzgyOWNhOGFiYTk0MTBlNzQwYzZjZWY0NTExNDI3N2NhMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDAzOjI1OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguYwppbmRleCA2YmE1MDE0MmVlYjJmLi44ZTBjZGEzOGU1ZmRhIDEwMDY0NAotLS0gYS9mcy9kYXguYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kYXguYwpAQCAtNzcyLDI0ICYjNDM7NzcyLDIzIEBAIHN0YXRpYyB2b2lkICpncmFiX21hcHBpbmdfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsCiAKIC8qKgogICogZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UgLSBmaW5kIGZpcnN0IHBpbm5lZCBwYWdlIGluIEBtYXBwaW5nCi0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBhZ2Ugd2l0aCByZWYgY291bnQgJmd0OyAxCiYjNDM7ICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2UgdG8gc2NhbiBmb3IgYSBwaW5uZWQgcGFnZQogICogQHN0YXJ0OiBTdGFydGluZyBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAmIzM5O3N0YXJ0JiMzOTsgaXMgaW5jbHVkZWQuCiAgKiBAZW5kOiBFbmQgb2Zmc2V0LiBQYWdlIGNvbnRhaW5pbmcgJiMzOTtlbmQmIzM5OyBpcyBpbmNsdWRlZC4gSWYgJiMzOTtlbmQmIzM5OyBpcyBMTE9OR19NQVgsCiAgKiAgICAgICBwYWdlcyBmcm9tICYjMzk7c3RhcnQmIzM5OyB0aWxsIHRoZSBlbmQgb2YgZmlsZSBhcmUgaW5jbHVkZWQuCiAgKgotICogREFYIHJlcXVpcmVzIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcy4gVGhlc2UgcGFnZXMgYXJlIG5ldmVyCi0gKiAmIzM5O29ubGluZWQmIzM5OyB0byB0aGUgcGFnZSBhbGxvY2F0b3Igc28gdGhleSBhcmUgY29uc2lkZXJlZCBpZGxlIHdoZW4KLSAqIHBhZ2UtJmd0O2NvdW50ID09IDEuIEEgZmlsZXN5c3RlbSB1c2VzIHRoaXMgaW50ZXJmYWNlIHRvIGRldGVybWluZSBpZgotICogYW55IHBhZ2UgaW4gdGhlIG1hcHBpbmcgaXMgYnVzeSwgaS5lLiBmb3IgRE1BLCBvciBvdGhlcgotICogZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuCiYjNDM7ICogREFYIHJlcXVpcmVzIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcy4gQSBwYWdlIGlzIGNvbnNpZGVyZWQgYnVzeSB3aGVuCiYjNDM7ICogZm9saW9fcmVmX2NvdW50KGZvbGlvKSBleGNlZWRzIGZvbGlvX21hcGNvdW50KGZvbGlvKS4gVGhpcyBoZWxwZXIgaXMKJiM0MzsgKiB1c2VkIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZSBpbiB0aGUgbWFwcGluZyBpcyBidXN5LCBpLmUuIGZvciBETUEsCiYjNDM7ICogb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuCiAgKgogICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBob2xkaW5nIGxvY2tzIHRvIGJsb2NrIHRoZQogICogZXN0YWJsaXNobWVudCBvZiBuZXcgbWFwcGluZ3MgaW4gdGhpcyBhZGRyZXNzX3NwYWNlLiBJLmUuIGl0IGV4cGVjdHMKLSAqIHRvIGJlIGFibGUgdG8gcnVuIHVubWFwX21hcHBpbmdfcmFuZ2UoKSBhbmQgc3Vic2VxdWVudGx5IG5vdCByYWNlCiYjNDM7ICogdG8gYmUgYWJsZSB0byBydW4gdW5tYXBfbWFwcGluZ19wYWdlcygpIGFuZCBzdWJzZXF1ZW50bHkgbm90IHJhY2UKICAqIG1hcHBpbmdfbWFwcGVkKCkgYmVjb21pbmcgdHJ1ZS4KICAqLwotc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQlsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkJCSAgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiB7CiAJdm9pZCAqZW50cnk7CiAJdW5zaWduZWQgaW50IHNjYW5uZWQgPSAwOwpAQCAtODQxLDEzICYjNDM7ODQwLDYgQEAgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCXhhc191bmxvY2tfaXJxKCZhbXA7eGFzKTsKIAlyZXR1cm4gcGFnZTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTsKLQotc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQotewotCXJldHVybiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShtYXBwaW5nLCAwLCBMTE9OR19NQVgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZGF4X2xheW91dF9idXN5X3BhZ2UpOwogCiBzdGF0aWMgaW50IF9fZGF4X2ludmFsaWRhdGVfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJICBwZ29mZl90IGluZGV4LCBib29sIHRydW5jKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYXguaCBiL2luY2x1ZGUvbGludXgvZGF4LmgKaW5kZXggZmU2YzNkZWQxYjUwZi4uZjJkNDc5NzVkOTA1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYXguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RheC5oCkBAIC0xNTUsOCAmIzQzOzE1NSw2IEBAIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiBpbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwotc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpOwogZGF4X2VudHJ5X3QgZGF4X2xvY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiB2b2lkIGRheF91bmxvY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZGF4X2VudHJ5X3QgY29va2llKTsKIGRheF9lbnRyeV90IGRheF9sb2NrX21hcHBpbmdfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCkBAIC0xNzMsMTYgJiM0MzsxNzEsNiBAQCBzdGF0aWMgaW5saW5lIGludCBmc19kYXhfZ2V0KHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCB2b2lkICpob2xkZXIsCiB7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IG5yX3BhZ2VzKQotewotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBWCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgc3ltYm9scyBhcmUgYmVpbmcgbW9kaWZpZWQuCgpTbywgaGVyZSYjMzk7cyB3aGF0IHRoZSBwYXRjaCB0ZWxscyBtZToKCkZpcnN0LCBpbiBgZnMvZGF4LmNgLCB0aGUgY29tbWVudCBmb3IgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQmIzM5O3Mgbm93IGRlY2xhcmVkIGBzdGF0aWNgLiBUaGUgYEVYUE9SVF9TWU1CT0xfR1BMYCBkaXJlY3RpdmVzIGZvciAqYm90aCogYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCBhbmQgYGRheF9sYXlvdXRfYnVzeV9wYWdlYCBoYXZlIGJlZW4gcmVtb3ZlZCwgKmFuZCogdGhlIGBkYXhfbGF5b3V0X2J1c3lfcGFnZWAgZnVuY3Rpb24gaXRzZWxmIGlzIGdvbmUuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQuIFJlbW92aW5nIGBFWFBPUlRfU1lNQk9MX0dQTGAgaW1wbGllcyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBubyBsb25nZXIgaW50ZW5kZWQgdG8gYmUgYXZhaWxhYmxlIG91dHNpZGUgb2YgYGZzL2RheC5jYC4KClRoZW4sIGxvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvZGF4LmhgLCB0aGUgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbnMgYW5kIGlubGluZSBkZWZpbml0aW9ucyBvZiB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBhbHNvIGdvbmUuIFRoaXMgYWxpZ25zIHdpdGggdGhlIGNoYW5nZXMgaW4gYGZzL2RheC5jYCwgY29uZmlybWluZyB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIGJlaW5nIG1hZGUgaW50ZXJuYWwgdG8gdGhlIERBWCBzdWJzeXN0ZW0uCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSAqaW1wYWN0KiBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIHByZXZpb3VzbHkgdXNlZC4gTGV0IG1lIGNoZWNrIGFyb3VuZCBsaW5lIDc3MiBpbiBgZnMvZGF4LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCB3aXRoaW4gdGhlIGZpbGUgaXRzZWxmLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGtub3cgKndobyogb3IgKndoYXQqIHdhcyBjYWxsaW5nIHRoZW0gYmVmb3JlIHRoaXMuIEFyZSB0aGVyZSBhbnkgZXh0ZXJuYWwgbW9kdWxlcyB0aGF0IHdlcmUgcmVseWluZyBvbiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIG9yIGBkYXhfbGF5b3V0X2J1c3lfcGFnZWA/CgpBIHF1aWNrIGBncmVwYCBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UsIG9yIGEgdGFyZ2V0ZWQgcmVhZGluZyBvZiB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIHRoZWlyIGluY2x1ZGVzLCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byBzZWUgaWYgdGhpcyByZW1vdmFsIGJyZWFrcyBhbnl0aGluZy4gSWYgc28sIHdoeSBpcyBpdCBhY2NlcHRhYmxlPyBJcyB0aGVyZSBhIHJlcGxhY2VtZW50IG9yIGFsdGVybmF0aXZlIG1lY2hhbmlzbSBiZWluZyBpbXBsZW1lbnRlZD8gSSBuZWVkIHRoZSBjb250ZXh0IHRvIGZvcm0gYSBwcm9wZXIganVkZ21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2xheW91dF9idXN5X3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9Njg3PXN0YXRpYyB2b2lkICpncmFiX21hcHBpbmdfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsXG4tLVxuZnMvZGF4LmMtNzczLS8qKlxuZnMvZGF4LmM6Nzc0OiAqIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlIC0gZmluZCBmaXJzdCBwaW5uZWQgcGFnZSBpbiBAbWFwcGluZ1xuZnMvZGF4LmMtNzc1LSAqIEBtYXBwaW5nOiBhZGRyZXNzIHNwYWNlIHRvIHNjYW4gZm9yIGEgcGlubmVkIHBhZ2Vcbi0tXG5mcy9kYXguYy03ODktICovXG5mcy9kYXguYzo3OTA6c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2RheC5jLTc5MS1cdFx0XHRcdFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbi0tXG5mcy9kYXguYz05Njk9aW50IGRheF9icmVha19sYXlvdXQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLS1cbmZzL2RheC5jLTk3OC1cdGRvIHtcbmZzL2RheC5jOjk3OTpcdFx0cGFnZSA9IGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgc3RhcnQsIGVuZCk7XG5mcy9kYXguYy05ODAtXHRcdGlmICghcGFnZSlcbi0tXG5mcy9kYXguYz05OTc9dm9pZCBkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZGF4LmMtMTAwNC1cdGRvIHtcbmZzL2RheC5jOjEwMDU6XHRcdHBhZ2UgPSBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIDAsXG5mcy9kYXguYy0xMDA2LVx0XHRcdFx0XHRcdExMT05HX01BWCk7XG4tLVxuZnMvZnVzZS9kYXguYz00MzE9c3RhdGljIGludCBmdXNlX3NldHVwX25ld19kYXhfbWFwcGluZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLFxuLS1cbmZzL2Z1c2UvZGF4LmMtNDQ1LVx0ICogQ2FuJiMzOTt0IGRvIGlubGluZSByZWNsYWltIGluIGZhdWx0IHBhdGguIFdlIGNhbGxcbmZzL2Z1c2UvZGF4LmM6NDQ2Olx0ICogZGF4X2xheW91dF9idXN5X3BhZ2UoKSBiZWZvcmUgd2UgZnJlZSBhIHJhbmdlLiBBbmRcbmZzL2Z1c2UvZGF4LmMtNDQ3LVx0ICogZnVzZV93YWl0X2RheF9wYWdlKCkgZHJvcHMgbWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2sgYW5kIHJlcXVpcmVzIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHJldmlldzoKCioqRGl2aW5nIGludG8gYGZzL2RheC5jYCBmb3IgREFYIEltcGxlbWVudGF0aW9uIERldGFpbHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBEQVggaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCByZWdpb24gYXJvdW5kIGxpbmVzIDc3MC0xMDEwIGluIGBmcy9kYXguY2AuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBuZWNlc3NhcnkgY29kZSBibG9ja3MuIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGEgZ2VuZXJhbCBvdmVydmlldzsgSSYjMzk7bSBhZnRlciB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IERBWCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZXN5c3RlbS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBrZXkgYXNwZWN0cyBvZiB0aGUgREFYIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMgY29kZSBzZWN0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBkYXRhIGFjY2VzcyBtZWNoYW5pc21zLCBwZXJoYXBzIHRoZSBtYXBwaW5ncywgY2FjaGluZywgZGlyZWN0IGFjY2Vzcywgb3IgdGhlIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcgbG9naWMgZm9yIERBWCBkZXZpY2VzLCByZXNpZGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBhdG9taWNpdHkgZ3VhcmFudGVlcyBvciBhbnkgZGlyZWN0LWFjY2Vzcy1yZWxhdGVkIGFzcGVjdHMuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzcwOlx0XHRyZXR1cm4geGFfbWtfaW50ZXJuYWwoVk1fRkFVTFRfRkFMTEJBQ0spO1xuIDc3MTpcdH1cbiA3NzI6XHRcbiA3NzM6XHQvKipcbiA3NzQ6XHQgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSAtIGZpbmQgZmlyc3QgcGlubmVkIHBhZ2UgaW4gQG1hcHBpbmdcbiA3NzU6XHQgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBpbm5lZCBwYWdlXG4gNzc2Olx0ICogQHN0YXJ0OiBTdGFydGluZyBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAmIzM5O3N0YXJ0JiMzOTsgaXMgaW5jbHVkZWQuXG4gNzc3Olx0ICogQGVuZDogRW5kIG9mZnNldC4gUGFnZSBjb250YWluaW5nICYjMzk7ZW5kJiMzOTsgaXMgaW5jbHVkZWQuIElmICYjMzk7ZW5kJiMzOTsgaXMgTExPTkdfTUFYLFxuIDc3ODpcdCAqICAgICAgIHBhZ2VzIGZyb20gJiMzOTtzdGFydCYjMzk7IHRpbGwgdGhlIGVuZCBvZiBmaWxlIGFyZSBpbmNsdWRlZC5cbiA3Nzk6XHQgKlxuIDc4MDpcdCAqIERBWCByZXF1aXJlcyBaT05FX0RFVklDRSBtYXBwZWQgcGFnZXMuIEEgcGFnZSBpcyBjb25zaWRlcmVkIGJ1c3kgd2hlblxuIDc4MTpcdCAqIGZvbGlvX3JlZl9jb3VudChmb2xpbykgZXhjZWVkcyBmb2xpb19tYXBjb3VudChmb2xpbykuIFRoaXMgaGVscGVyIGlzXG4gNzgyOlx0ICogdXNlZCB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2UgaW4gdGhlIG1hcHBpbmcgaXMgYnVzeSwgaS5lLiBmb3IgRE1BLFxuIDc4MzpcdCAqIG9yIG90aGVyIGdldF91c2VyX3BhZ2VzKCkgdXNhZ2VzLlxuIDc4NDpcdCAqXG4gNzg1Olx0ICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBob2xkaW5nIGxvY2tzIHRvIGJsb2NrIHRoZVxuIDc4NjpcdCAqIGVzdGFibGlzaG1lbnQgb2YgbmV3IG1hcHBpbmdzIGluIHRoaXMgYWRkcmVzc19zcGFjZS4gSS5lLiBpdCBleHBlY3RzXG4gNzg3Olx0ICogdG8gYmUgYWJsZSB0byBydW4gdW5tYXBfbWFwcGluZ19wYWdlcygpIGFuZCBzdWJzZXF1ZW50bHkgbm90IHJhY2VcbiA3ODg6XHQgKiBtYXBwaW5nX21hcHBlZCgpIGJlY29taW5nIHRydWUuXG4gNzg5Olx0ICovXG4gNzkwOlx0c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiA3OTE6XHRcdFx0XHRcdFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiA3OTI6XHR7XG4gNzkzOlx0XHR2b2lkICplbnRyeTtcbiA3OTQ6XHRcdHVuc2lnbmVkIGludCBzY2FubmVkID0gMDtcbiA3OTU6XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiA3OTY6XHRcdHBnb2ZmX3Qgc3RhcnRfaWR4ID0gc3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNzk3Olx0XHRwZ29mZl90IGVuZF9pZHg7XG4gNzk4Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcywgc3RhcnRfaWR4KTtcbiA3OTk6XHRcbiA4MDA6XHRcdGlmICghZGF4X21hcHBpbmcobWFwcGluZykpXG4gODAxOlx0XHRcdHJldHVybiBOVUxMO1xuIDgwMjpcdFxuIDgwMzpcdFx0LyogSWYgZW5kID09IExMT05HX01BWCwgYWxsIHBhZ2VzIGZyb20gc3RhcnQgdG8gdGlsbCBlbmQgb2YgZmlsZSAqL1xuIDgwNDpcdFx0aWYgKGVuZCA9PSBMTE9OR19NQVgpXG4gODA1Olx0XHRcdGVuZF9pZHggPSBVTE9OR19NQVg7XG4gODA2Olx0XHRlbHNlXG4gODA3Olx0XHRcdGVuZF9pZHggPSBlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gODA4Olx0XHQvKlxuIDgwOTpcdFx0ICogSWYgd2UgcmFjZSBnZXRfdXNlcl9wYWdlc19mYXN0KCkgaGVyZSBlaXRoZXIgd2UmIzM5O2xsIHNlZSB0aGVcbiA4MTA6XHRcdCAqIGVsZXZhdGVkIHBhZ2UgY291bnQgaW4gdGhlIGl0ZXJhdGlvbiBhbmQgd2FpdCwgb3JcbiA4MTE6XHRcdCAqIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSB3aWxsIHNlZSB0aGF0IHRoZSBwYWdlIGl0IHRvb2sgYSByZWZlcmVuY2VcbiA4MTI6XHRcdCAqIGFnYWluc3QgaXMgbm8gbG9uZ2VyIG1hcHBlZCBpbiB0aGUgcGFnZSB0YWJsZXMgYW5kIGJhaWwgdG8gdGhlXG4gODEzOlx0XHQgKiBnZXRfdXNlcl9wYWdlcygpIHNsb3cgcGF0aC4gIFRoZSBzbG93IHBhdGggaXMgcHJvdGVjdGVkIGJ5XG4gODE0Olx0XHQgKiBwdGVfbG9jaygpIGFuZCBwbWRfbG9jaygpLiBOZXcgcmVmZXJlbmNlcyBhcmUgbm90IHRha2VuIHdpdGhvdXRcbiA4MTU6XHRcdCAqIGhvbGRpbmcgdGhvc2UgbG9ja3MsIGFuZCB1bm1hcF9tYXBwaW5nX3BhZ2VzKCkgd2lsbCBub3QgemVybyB0aGVcbiA4MTY6XHRcdCAqIHB0ZSBvciBwbWQgd2l0aG91dCBob2xkaW5nIHRoZSByZXNwZWN0aXZlIGxvY2ssIHNvIHdlIGFyZVxuIDgxNzpcdFx0ICogZ3VhcmFudGVlZCB0byBlaXRoZXIgc2VlIG5ldyByZWZlcmVuY2VzIG9yIHByZXZlbnQgbmV3XG4gODE4Olx0XHQgKiByZWZlcmVuY2VzIGZyb20gYmVpbmcgZXN0YWJsaXNoZWQuXG4gODE5Olx0XHQgKi9cbiA4MjA6XHRcdHVubWFwX21hcHBpbmdfcGFnZXMobWFwcGluZywgc3RhcnRfaWR4LCBlbmRfaWR4IC0gc3RhcnRfaWR4ICYjNDM7IDEsIDApO1xuIDgyMTpcdFxuIDgyMjpcdFx0eGFzX2xvY2tfaXJxKFx1MDAyNnhhcyk7XG4gODIzOlx0XHR4YXNfZm9yX2VhY2goXHUwMDI2eGFzLCBlbnRyeSwgZW5kX2lkeCkge1xuIDgyNDpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCF4YV9pc192YWx1ZShlbnRyeSkpKVxuIDgyNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDgyNjpcdFx0XHRlbnRyeSA9IHdhaXRfZW50cnlfdW5sb2NrZWRfZXhjbHVzaXZlKFx1MDAyNnhhcywgZW50cnkpO1xuIDgyNzpcdFx0XHRpZiAoZW50cnkpXG4gODI4Olx0XHRcdFx0cGFnZSA9IGRheF9idXN5X3BhZ2UoZW50cnkpO1xuIDgyOTpcdFx0XHRwdXRfdW5sb2NrZWRfZW50cnkoXHUwMDI2eGFzLCBlbnRyeSwgV0FLRV9ORVhUKTtcbiA4MzA6XHRcdFx0aWYgKHBhZ2UpXG4gODMxOlx0XHRcdFx0YnJlYWs7XG4gODMyOlx0XHRcdGlmICgmIzQzOyYjNDM7c2Nhbm5lZCAlIFhBX0NIRUNLX1NDSEVEKVxuIDgzMzpcdFx0XHRcdGNvbnRpbnVlO1xuIDgzNDpcdFxuIDgzNTpcdFx0XHR4YXNfcGF1c2UoXHUwMDI2eGFzKTtcbiA4MzY6XHRcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbiA4Mzc6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gODM4Olx0XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuIDgzOTpcdFx0fVxuIDg0MDpcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbiA4NDE6XHRcdHJldHVybiBwYWdlO1xuIDg0MjpcdH1cbiA4NDM6XHRcbiA4NDQ6XHRzdGF0aWMgaW50IF9fZGF4X2ludmFsaWRhdGVfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gODQ1Olx0XHRcdFx0XHQgIHBnb2ZmX3QgaW5kZXgsIGJvb2wgdHJ1bmMpXG4gODQ2Olx0e1xuIDg0NzpcdFx0WEFfU1RBVEUoeGFzLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMsIGluZGV4KTtcbiA4NDg6XHRcdGludCByZXQgPSAwO1xuIDg0OTpcdFx0dm9pZCAqZW50cnk7XG4gODUwOlx0XG4gODUxOlx0XHR4YXNfbG9ja19pcnEoXHUwMDI2eGFzKTtcbiA4NTI6XHRcdGVudHJ5ID0gZ2V0X25leHRfdW5sb2NrZWRfZW50cnkoXHUwMDI2eGFzLCAwKTtcbiA4NTM6XHRcdGlmICghZW50cnkgfHwgV0FSTl9PTl9PTkNFKCF4YV9pc192YWx1ZShlbnRyeSkpKVxuIDg1NDpcdFx0XHRnb3RvIG91dDtcbiA4NTU6XHRcdGlmICghdHJ1bmMgXHUwMDI2XHUwMDI2XG4gODU2Olx0XHQgICAgKHhhc19nZXRfbWFyayhcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfRElSVFkpIHx8XG4gODU3Olx0XHQgICAgIHhhc19nZXRfbWFyayhcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfVE9XUklURSkpKVxuIDg1ODpcdFx0XHRnb3RvIG91dDtcbiA4NTk6XHRcdGRheF9kaXNhc3NvY2lhdGVfZW50cnkoZW50cnksIG1hcHBpbmcsIHRydW5jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTYyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTQ1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBWCBMYXlvdXQgQnVzeSBQYWdlIFJlbW92YWwqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgZGF4X2xheW91dF9idXN5X3BhZ2VgIHdhcyBqdXN0IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLiBCb3RoIHdlcmUgdW5leHBvcnRlZCwgYW5kIHRoZSBmb3JtZXIgd2FzIHNpbXBseSByZW1vdmVkIGJlY2F1c2Ugbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGNhbGxlcnMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGBkYXhfYnJlYWtfbGF5b3V0YCwgYGRheF9icmVha19sYXlvdXRfZmluYWxgIG9yIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAgZGlyZWN0bHkgd2l0aGluIGBmcy9kYXguY2AuCgpOb3csIHRoZSBjcml0aWNhbCBwYXJ0OiB3aGF0IGFjdHVhbGx5IGNoYW5nZWQgaW4gdGhlICpjb2RlKj8gVGhlIGRpZmYgc2hvd3MgdGhhdCB0aGUgZnVuY3Rpb24mIzM5O3MgZG9jdW1lbnRhdGlvbiBub3cgY2xhcmlmaWVzIHRoYXQgYSAmIzM0O2J1c3kmIzM0OyBwYWdlIGlzIGNvbnNpZGVyZWQgYnVzeSB3aGVuIGBmb2xpb19yZWZfY291bnQoZm9saW8pYCBleGNlZWRzIGBmb2xpb19tYXBjb3VudChmb2xpbylgLiBQcmV2aW91c2x5LCBpdCBtZW50aW9uZWQgdGhhdCBEQVggcmVxdWlyZWQgWk9ORV9ERVZJQ0UgbWFwcGVkIHBhZ2VzLCB3aGljaCB3ZXJlIGNvbnNpZGVyZWQgaWRsZSB3aGVuIHBhZ2UtJmd0O2NvdW50ID09IDEsIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgYXMgdGhlIGNyaXRlcmlhIGZvciB3aGF0IGNvbnN0aXR1dGVzIGEgYnVzeSBwYWdlLiBUaGUgZGVzY3JpcHRpb24gb2YgaG93IHRoaXMgaGVscGVyIGlzIHVzZWQgYWxzbyBub3cgc3RhdGVzIHRoYXQgaXQgaXMgbWVhbnQgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSwgb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuIEFsc28sIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBydW4gYHVubWFwX21hcHBpbmdfcGFnZXMoKWAgaW5zdGVhZCBvZiBgdW5tYXBfbWFwcGluZ19yYW5nZSgpYCwgYW5kIHRoZW4gbm90IHJhY2UgYG1hcHBpbmdfbWFwcGVkKClgIGJlY29taW5nIHRydWUuCgpJJiMzOTttIGFsc28gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBnaXQgbG9nL2RpZmYgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIHRoYXQgSSBtaWdodCBiZSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RheF9icmVha19sYXlvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9OTU1PXN0YXRpYyB2b2lkIHdhaXRfcGFnZV9pZGxlX3VuaW50ZXJydXB0aWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5mcy9kYXguYy05NjgtICovXG5mcy9kYXguYzo5Njk6aW50IGRheF9icmVha19sYXlvdXQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuZnMvZGF4LmMtOTcwLVx0XHR2b2lkIChjYikoc3RydWN0IGlub2RlICopKVxuLS1cbmZzL2RheC5jLTk5NC19XG5mcy9kYXguYzo5OTU6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dCk7XG5mcy9kYXguYy05OTYtXG5mcy9kYXguYzo5OTc6dm9pZCBkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9kYXguYy05OTgte1xuLS1cbmZzL2RheC5jLTEwMTUtfVxuZnMvZGF4LmM6MTAxNjpFWFBPUlRfU1lNQk9MX0dQTChkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKTtcbmZzL2RheC5jLTEwMTctXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz0xMTIzPXN0YXRpYyB2b2lkIGVyb2ZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0xMTI1LVx0aWYgKElTX0RBWChpbm9kZSkpXG5mcy9lcm9mcy9zdXBlci5jOjExMjY6XHRcdGRheF9icmVha19sYXlvdXRfZmluYWwoaW5vZGUpO1xuZnMvZXJvZnMvc3VwZXIuYy0xMTI3LVx0ZXJvZnNfaXNoYXJlX2ZyZWVfaW5vZGUoaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE4Mi1cbmZzL2V4dDQvaW5vZGUuYzoxODM6XHRkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy0xODQtXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQ0Mzk9aW50IGV4dDRfYnJlYWtfbGF5b3V0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00NDQzLVxuZnMvZXh0NC9pbm9kZS5jOjQ0NDQ6XHRyZXR1cm4gZGF4X2JyZWFrX2xheW91dF9pbm9kZShpbm9kZSwgZXh0NF93YWl0X2RheF9wYWdlKTtcbmZzL2V4dDQvaW5vZGUuYy00NDQ1LX1cbi0tXG5mcy9mdXNlL2RheC5jPTY2Mz1zdGF0aWMgdm9pZCBmdXNlX3dhaXRfZGF4X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9mdXNlL2RheC5jLTY3MC0vKiBTaG91bGQgYmUgY2FsbGVkIHdpdGggbWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2sgaGVsZCBleGNsdXNpdmVseS4gKi9cbmZzL2Z1c2UvZGF4LmM6NjcxOmludCBmdXNlX2RheF9icmVha19sYXlvdXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBkbWFwX3N0YXJ0LFxuZnMvZnVzZS9kYXguYy02NzItXHRcdFx0XHQgIHU2NCBkbWFwX2VuZClcbmZzL2Z1c2UvZGF4LmMtNjczLXtcbmZzL2Z1c2UvZGF4LmM6Njc0Olx0cmV0dXJuIGRheF9icmVha19sYXlvdXQoaW5vZGUsIGRtYXBfc3RhcnQsIGRtYXBfZW5kLFxuZnMvZnVzZS9kYXguYy02NzUtXHRcdFx0XHRmdXNlX3dhaXRfZGF4X3BhZ2UpO1xuLS1cbmZzL2Z1c2UvZGF4LmM9OTE0PWlub2RlX2lubGluZV9yZWNsYWltX29uZV9kbWFwKHN0cnVjdCBmdXNlX2Nvbm5fZGF4ICpmY2QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZnVzZS9kYXguYy05NDEtXHQgKi9cbmZzL2Z1c2UvZGF4LmM6OTQyOlx0cmV0ID0gZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhpbm9kZSwgZG1hcF9zdGFydCwgZG1hcF9lbmQpO1xuZnMvZnVzZS9kYXguYy05NDMtXHRpZiAocmV0KSB7XG5mcy9mdXNlL2RheC5jOjk0NDpcdFx0cHJfZGVidWcoXCYjMzQ7ZnVzZTogZnVzZV9kYXhfYnJlYWtfbGF5b3V0cygpIGZhaWxlZC4gZXJyPSVkXFxuXCYjMzQ7LFxuZnMvZnVzZS9kYXguYy05NDUtXHRcdFx0IHJldCk7XG4tLVxuZnMvZnVzZS9kYXguYz0xMDc2PXN0YXRpYyBpbnQgbG9va3VwX2FuZF9yZWNsYWltX2RtYXAoc3RydWN0IGZ1c2VfY29ubl9kYXggKmZjZCxcbi0tXG5mcy9mdXNlL2RheC5jLTEwODYtXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuZnMvZnVzZS9kYXguYzoxMDg3Olx0cmV0ID0gZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhpbm9kZSwgZG1hcF9zdGFydCwgZG1hcF9lbmQpO1xuZnMvZnVzZS9kYXguYy0xMDg4LVx0aWYgKHJldCkge1xuZnMvZnVzZS9kYXguYzoxMDg5Olx0XHRwcl9kZWJ1ZyhcJiMzNDt2aXJ0aW9fZnM6IGZ1c2VfZGF4X2JyZWFrX2xheW91dHMoKSBmYWlsZWQuIGVycj0lZFxcblwmIzM0OyxcbmZzL2Z1c2UvZGF4LmMtMTA5MC1cdFx0XHQgcmV0KTtcbi0tXG5mcy9mdXNlL2Rpci5jPTIxNDg9aW50IGZ1c2VfZG9fc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2Z1c2UvZGlyLmMtMjE4Mi1cdFx0ZmF1bHRfYmxvY2tlZCA9IHRydWU7XG5mcy9mdXNlL2Rpci5jOjIxODM6XHRcdGVyciA9IGZ1c2VfZGF4X2JyZWFrX2xheW91dHMoaW5vZGUsIDAsIC0xKTtcbmZzL2Z1c2UvZGlyLmMtMjE4NC1cdFx0aWYgKGVycilcbi0tXG5mcy9mdXNlL2ZpbGUuYz0yNTA9c3RhdGljIGludCBmdXNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvZnVzZS9maWxlLmMtMjcyLVx0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuZnMvZnVzZS9maWxlLmM6MjczOlx0XHRlcnIgPSBmdXNlX2RheF9icmVha19sYXlvdXRzKGlub2RlLCAwLCAtMSk7XG5mcy9mdXNlL2ZpbGUuYy0yNzQtXHRcdGlmIChlcnIpXG4tLVxuZnMvZnVzZS9maWxlLmM9MjgzMz1zdGF0aWMgbG9uZyBmdXNlX2ZpbGVfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yODYxLVx0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuZnMvZnVzZS9maWxlLmM6Mjg2MjpcdFx0ZXJyID0gZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhpbm9kZSwgMCwgLTEpO1xuZnMvZnVzZS9maWxlLmMtMjg2My1cdFx0aWYgKGVycilcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oPTEyMjQ9aW50IGZ1c2VfZGF4X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbmZzL2Z1c2UvZnVzZV9pLmg6MTIyNTppbnQgZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZG1hcF9zdGFydCwgdTY0IGRtYXBfZW5kKTtcbmZzL2Z1c2UvZnVzZV9pLmgtMTIyNi1pbnQgZnVzZV9kYXhfY29ubl9hbGxvYyhzdHJ1Y3QgZnVzZV9jb25uICpmYywgZW51bSBmdXNlX2RheF9tb2RlIG1vZGUsXG4tLVxuZnMvZnVzZS9pbm9kZS5jPTE0ND1zdGF0aWMgdm9pZCBmdXNlX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTE1MS1cdGlmIChGVVNFX0lTX0RBWChpbm9kZSkpXG5mcy9mdXNlL2lub2RlLmM6MTUyOlx0XHRkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKGlub2RlKTtcbmZzL2Z1c2UvaW5vZGUuYy0xNTMtXG4tLVxuZnMveGZzL3hmc19pbm9kZS5jPTI3NDk9eGZzX21tYXBsb2NrX3R3b19pbm9kZXNfYW5kX2JyZWFrX2RheF9sYXlvdXQoXG4tLVxuZnMveGZzL3hmc19pbm9kZS5jLTI3NzYtXHQgKi9cbmZzL3hmcy94ZnNfaW5vZGUuYzoyNzc3Olx0ZXJyb3IgPSBkYXhfYnJlYWtfbGF5b3V0KFZGU19JKGlwMiksIDAsIC0xLCBOVUxMKTtcbmZzL3hmcy94ZnNfaW5vZGUuYy0yNzc4LVx0aWYgKGVycm9yKSB7XG4tLVxuZnMveGZzL3hmc19pbm9kZS5jPTMwMTg9eGZzX2JyZWFrX2RheF9sYXlvdXRzKFxuLS1cbmZzL3hmcy94ZnNfaW5vZGUuYy0zMDIyLVxuZnMveGZzL3hmc19pbm9kZS5jOjMwMjM6XHRyZXR1cm4gZGF4X2JyZWFrX2xheW91dF9pbm9kZShpbm9kZSwgeGZzX3dhaXRfZGF4X3BhZ2UpO1xuZnMveGZzL3hmc19pbm9kZS5jLTMwMjQtfVxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz04MjI9eGZzX2ZzX2V2aWN0X2lub2RlKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy04MjUtXHRpZiAoSVNfREFYKGlub2RlKSlcbmZzL3hmcy94ZnNfc3VwZXIuYzo4MjY6XHRcdGRheF9icmVha19sYXlvdXRfZmluYWwoaW5vZGUpO1xuZnMveGZzL3hmc19zdXBlci5jLTgyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgwNQoJCQkJCQkJb3V0cHV0OiAxMDEKCQkJCQkJCXRob3VnaHRzOiAxNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBEZWFkIENvZGUgUmVtb3ZhbCAmYW1wOyBTY29wZSBSZXN0cmljdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBUaGUgaW5pdGlhbCBzdGVwcyBpbnZvbHZlZCBpZGVudGlmeWluZyB0aGUgY29yZSBjaGFuZ2VzOiBhIGZ1bmN0aW9uLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCB3YXMgbWFkZSBgc3RhdGljYCBhbmQgaXRzIGV4cG9ydCBzeW1ib2wgcmVtb3ZlZC4gVGhlIHVudXNlZCB3cmFwcGVyIGBkYXhfbGF5b3V0X2J1c3lfcGFnZWAgaGFzIGJlZW4gY29tcGxldGVseSBkZWxldGVkLCBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIGV4cG9ydC4gRGVjbGFyYXRpb25zIGFuZCBpbmxpbmVzIGZyb20gYGluY2x1ZGUvbGludXgvZGF4LmhgIHdlcmUgYWxzbyByZW1vdmVkLiBGaW5hbGx5LCBzb21lIGNvbW1lbnRzIGluIGBmcy9kYXguY2Agd2VyZSB1cGRhdGVkLgoKVGhlIGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgdG91Y2ggKmV4ZWN1dGFibGUqIGNvZGUgbG9naWMuIE1ha2luZyBhIGZ1bmN0aW9uIGBzdGF0aWNgLCByZW1vdmluZyB1bnVzZWQgZXhwb3J0cywgYW5kIGdldHRpbmcgcmlkIG9mIHVudXNlZCBpbmxpbmUgZGVjbGFyYXRpb25zICpzaG91bGRuJiMzOTt0KiBhbHRlciBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgcnVudGltZSBhc3NlcnRpb25zLCBvciBmdW5kYW1lbnRhbGx5IGNoYW5nZSBob3cgdGhlIGtlcm5lbCBvcGVyYXRlcy4gQnV0LCBvZiBjb3Vyc2UsIGEgcXVpY2sgcmUtcmVhZCBvZiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgaXMgaW4gb3JkZXIuIEl0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgYnVpbGQgc3lzdGVtcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBDIGxvZ2ljLCBhbmQgdW5yZWFjaGFibGUgY29kZSwgYXJlIGFsbCBhcmVhcyB3aGVyZSBmdXp6aW5nIGNhbiBiZSBza2lwcGVkLgoKVGhlbiBhIGNoZWNrIHRvIHRoZSBwb3NpdGl2ZSBzZWN0aW9uIGVuc3VyZXMgdGhpcyBjaGFuZ2UgZG9lcyAqbm90KiBmYWxsIHVuZGVyIGNvcmUgc3Vic3lzdGVtcywgcmVmYWN0b3JpbmdzLCBydW50aW1lIGFzc2VydGlvbnMsIG9yIHJlYWNoYWJsZSBkcml2ZXJzLgoKU28sIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkaWZmcyBsaW5lIGJ5IGxpbmUuIEZvY3VzaW5nIG9uIGBmcy9kYXguY2AsIHRoZSBjaGFuZ2VzIGJvaWwgZG93biB0bzogY29tbWVudHMgdXBkYXRlZCwgYHN0YXRpY2AgYWRkZWQgdG8gYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgaXRzIGV4cG9ydCByZW1vdmVkLCBhbmQgcmVtb3ZhbCBvZiB0aGUgZGVhZCBmdW5jdGlvbiBgZGF4X2xheW91dF9idXN5X3BhZ2VgIGFuZCBpdHMgZXhwb3J0LiBOb3RoaW5nIHdpdGhpbiB0aGUgY29yZSBsb2dpYyBvZiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIG9yIGFueSBvdGhlciBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGhhcyBiZWVuIGNoYW5nZWQuIExvb2tpbmcgYXQgdGhlIGhlYWRlciwgdGhlIHByb3RvdHlwZSBhbmQgc3R1YnMgd2VyZSBhbHNvIHJlbW92ZWQuIFRoaXMgaXMgYWxsIGRlYWQgY29kZSByZW1vdmFsLCBmdW5jdGlvbiB1bmV4cG9ydGluZywgYW5kIHNjb3BpbmcuCgpUaGUgY29yZSBxdWVzdGlvbiB0aGVuIGlzOiBEb2VzIHJlbW92aW5nIGRlYWQgY29kZSwgdW5leHBvcnRpbmcgZnVuY3Rpb25zLCBvciBtYXJraW5nIHNvbWV0aGluZyBgc3RhdGljYCB3YXJyYW50IGZ1enppbmc/IFRoaW5raW5nIHRocm91Z2ggdGhlIHByb21wdCYjMzk7cyBnb2FsIG9mIGZpbmRpbmcgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIG5ldyBidWdzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVzZSBjaGFuZ2VzICpzaG91bGRuJiMzOTt0Ki4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIHJlbWFpbnMgaW50YWN0LiBUaGVyZSBhcmUgbm8gbmV3IGNvZGUgcGF0aHMsIG5vIGFsdGVyZWQgY29udHJvbCBmbG93LCBubyBuZXcgYXNzZXJ0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBjaGFuZ2VzIHRvIHVuZGVybHlpbmcgbG9naWMuCgpUbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBjaGVjayBvZiBgZnMvZGF4LmNgIHdpdGggYGdpdCBkaWZmYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyLCBzdWJ0bGUgY2hhbmdlcy4gSXQgaXMgYWxzbyBnb29kIHRvIHZlcmlmeSB0aGUgc2NvcGUgb2YgdGhlIHJlbW92ZWQgc3ltYm9scy4gSXQgaXMgY2xlYXIgdGhhdCB0aGUgZnVuY3Rpb24gYGRheF9sYXlvdXRfYnVzeV9wYWdlYCB3YXMgbmV2ZXIgdXNlZCwgYW5kIHRoZSBvdGhlciBmdW5jdGlvbiYjMzk7cyBib2R5IHdhcyBuZXZlciBtb2RpZmllZC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBzYWZlIHRvIHNheTogYFdvcnRoRnV6emluZzogZmFsc2VgLgoKVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIGNvbW1lbnQgdXBkYXRlcywgbWFraW5nIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSgpYCBzdGF0aWMsIHJlbW92aW5nIHRoZSB1bnVzZWQgd3JhcHBlciBgZGF4X2xheW91dF9idXN5X3BhZ2UoKWAsIGFuZCBkZWxldGluZyB1bnVzZWQgZGVjbGFyYXRpb25zLiBOb25lIG9mIHRoZXNlIGFmZmVjdCBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgdGhlIGludHJvZHVjdGlvbi9yZW1vdmFsIG9mIGFzc2VydGlvbnMuCgpgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGFyZSB0aGVyZWZvcmUgYm90aCBlbXB0eS4gQSBmaW5hbCBxdWljayB2ZXJpZmljYXRpb24gYW5kIHRoZSByZXN1bHQgaXMgcmVhZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIGNvbW1lbnRzLCBzY29wZXMgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UoKSB0byBzdGF0aWMsIHJlbW92ZXMgdGhlIHVudXNlZCBoZWxwZXIgZGF4X2xheW91dF9idXN5X3BhZ2UoKSwgYW5kIHJlbW92ZXMgb2Jzb2xldGUgZGVjbGFyYXRpb25zL3N0dWJzIGZyb20gaW5jbHVkZS9saW51eC9kYXguaC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gZXhlY3V0YWJsZSBjb2RlIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGNvbnRyb2wgZmxvdywgb3IgcnVudGltZSBhc3NlcnRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIGNvbW1lbnRzLCBzY29wZXMgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UoKSB0byBzdGF0aWMsIHJlbW92ZXMgdGhlIHVudXNlZCBoZWxwZXIgZGF4X2xheW91dF9idXN5X3BhZ2UoKSwgYW5kIHJlbW92ZXMgb2Jzb2xldGUgZGVjbGFyYXRpb25zL3N0dWJzIGZyb20gaW5jbHVkZS9saW51eC9kYXguaC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gZXhlY3V0YWJsZSBjb2RlIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGNvbnRyb2wgZmxvdywgb3IgcnVudGltZSBhc3NlcnRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjE2LjEzMjA3MTE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NDI5OTc4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHVwZGF0ZXMgY29tbWVudHMsIHNjb3BlcyBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSgpIHRvIHN0YXRpYywgcmVtb3ZlcyB0aGUgdW51c2VkIGhlbHBlciBkYXhfbGF5b3V0X2J1c3lfcGFnZSgpLCBhbmQgcmVtb3ZlcyBvYnNvbGV0ZSBkZWNsYXJhdGlvbnMvc3R1YnMgZnJvbSBpbmNsdWRlL2xpbnV4L2RheC5oLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBleGVjdXRhYmxlIGNvZGUgbG9naWMsIGRhdGEgc3RydWN0dXJlcywgY29udHJvbCBmbG93LCBvciBydW50aW1lIGFzc2VydGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzoyNToxNi4xMzIwODEyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MDEyODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2Q0YTFjODI5Y2E4YWJhOTQxMGU3NDBjNmNlZjQ1MTE0Mjc3Y2ExOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDAzOjI1OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcXG5pbmRleCA2YmE1MDE0MmVlYjJmLi44ZTBjZGEzOGU1ZmRhIDEwMDY0NFxcbi0tLSBhL2ZzL2RheC5jXFxuKysrIGIvZnMvZGF4LmNcXG5AQCAtNzcyLDI0ICs3NzIsMjMgQEAgc3RhdGljIHZvaWQgKmdyYWJfbWFwcGluZ19lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4gXFxuIC8qKlxcbiAgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSAtIGZpbmQgZmlyc3QgcGlubmVkIHBhZ2UgaW4gQG1hcHBpbmdcXG4tICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2UgdG8gc2NhbiBmb3IgYSBwYWdlIHdpdGggcmVmIGNvdW50IFxcdTAwM2UgMVxcbisgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBpbm5lZCBwYWdlXFxuICAqIEBzdGFydDogU3RhcnRpbmcgb2Zmc2V0LiBQYWdlIGNvbnRhaW5pbmcgJ3N0YXJ0JyBpcyBpbmNsdWRlZC5cXG4gICogQGVuZDogRW5kIG9mZnNldC4gUGFnZSBjb250YWluaW5nICdlbmQnIGlzIGluY2x1ZGVkLiBJZiAnZW5kJyBpcyBMTE9OR19NQVgsXFxuICAqICAgICAgIHBhZ2VzIGZyb20gJ3N0YXJ0JyB0aWxsIHRoZSBlbmQgb2YgZmlsZSBhcmUgaW5jbHVkZWQuXFxuICAqXFxuLSAqIERBWCByZXF1aXJlcyBaT05FX0RFVklDRSBtYXBwZWQgcGFnZXMuIFRoZXNlIHBhZ2VzIGFyZSBuZXZlclxcbi0gKiAnb25saW5lZCcgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yIHNvIHRoZXkgYXJlIGNvbnNpZGVyZWQgaWRsZSB3aGVuXFxuLSAqIHBhZ2UtXFx1MDAzZWNvdW50ID09IDEuIEEgZmlsZXN5c3RlbSB1c2VzIHRoaXMgaW50ZXJmYWNlIHRvIGRldGVybWluZSBpZlxcbi0gKiBhbnkgcGFnZSBpbiB0aGUgbWFwcGluZyBpcyBidXN5LCBpLmUuIGZvciBETUEsIG9yIG90aGVyXFxuLSAqIGdldF91c2VyX3BhZ2VzKCkgdXNhZ2VzLlxcbisgKiBEQVggcmVxdWlyZXMgWk9ORV9ERVZJQ0UgbWFwcGVkIHBhZ2VzLiBBIHBhZ2UgaXMgY29uc2lkZXJlZCBidXN5IHdoZW5cXG4rICogZm9saW9fcmVmX2NvdW50KGZvbGlvKSBleGNlZWRzIGZvbGlvX21hcGNvdW50KGZvbGlvKS4gVGhpcyBoZWxwZXIgaXNcXG4rICogdXNlZCB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2UgaW4gdGhlIG1hcHBpbmcgaXMgYnVzeSwgaS5lLiBmb3IgRE1BLFxcbisgKiBvciBvdGhlciBnZXRfdXNlcl9wYWdlcygpIHVzYWdlcy5cXG4gICpcXG4gICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBob2xkaW5nIGxvY2tzIHRvIGJsb2NrIHRoZVxcbiAgKiBlc3RhYmxpc2htZW50IG9mIG5ldyBtYXBwaW5ncyBpbiB0aGlzIGFkZHJlc3Nfc3BhY2UuIEkuZS4gaXQgZXhwZWN0c1xcbi0gKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxcbisgKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3BhZ2VzKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxcbiAgKiBtYXBwaW5nX21hcHBlZCgpIGJlY29taW5nIHRydWUuXFxuICAqL1xcbi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdFxcdGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4rc3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4ge1xcbiBcXHR2b2lkICplbnRyeTtcXG4gXFx0dW5zaWduZWQgaW50IHNjYW5uZWQgPSAwO1xcbkBAIC04NDEsMTMgKzg0MCw2IEBAIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuIFxcdHJldHVybiBwYWdlO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTtcXG4tXFxuLXN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4te1xcbi1cXHRyZXR1cm4gZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UobWFwcGluZywgMCwgTExPTkdfTUFYKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTChkYXhfbGF5b3V0X2J1c3lfcGFnZSk7XFxuIFxcbiBzdGF0aWMgaW50IF9fZGF4X2ludmFsaWRhdGVfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdCAgcGdvZmZfdCBpbmRleCwgYm9vbCB0cnVuYylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYXguaCBiL2luY2x1ZGUvbGludXgvZGF4LmhcXG5pbmRleCBmZTZjM2RlZDFiNTBmLi5mMmQ0Nzk3NWQ5MDVmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGF4LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RheC5oXFxuQEAgLTE1NSw4ICsxNTUsNiBAQCBpbnQgZGF4X3dyaXRlYmFja19tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbiBpbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4tc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTtcXG4tc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpO1xcbiBkYXhfZW50cnlfdCBkYXhfbG9ja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gdm9pZCBkYXhfdW5sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGRheF9lbnRyeV90IGNvb2tpZSk7XFxuIGRheF9lbnRyeV90IGRheF9sb2NrX21hcHBpbmdfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuQEAgLTE3MywxNiArMTcxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgZnNfZGF4X2dldChzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgdm9pZCAqaG9sZGVyLFxcbiB7XFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4te1xcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgbnJfcGFnZXMpXFxuLXtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IGRheF93cml0ZWJhY2tfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0c3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjE2LjcxOTIyMjI3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjMyNTU4MzA4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyBjb21tZW50cywgc2NvcGVzIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKCkgdG8gc3RhdGljLCByZW1vdmVzIHRoZSB1bnVzZWQgaGVscGVyIGRheF9sYXlvdXRfYnVzeV9wYWdlKCksIGFuZCByZW1vdmVzIG9ic29sZXRlIGRlY2xhcmF0aW9ucy9zdHVicyBmcm9tIGluY2x1ZGUvbGludXgvZGF4LmguIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGV4ZWN1dGFibGUgY29kZSBsb2dpYywgZGF0YSBzdHJ1Y3R1cmVzLCBjb250cm9sIGZsb3csIG9yIHJ1bnRpbWUgYXNzZXJ0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Q0YTFjODI5Y2E4YWJhOTQxMGU3NDBjNmNlZjQ1MTE0Mjc3Y2ExOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDM6MjU6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jXG5pbmRleCA2YmE1MDE0MmVlYjJmLi44ZTBjZGEzOGU1ZmRhIDEwMDY0NFxuLS0tIGEvZnMvZGF4LmNcbisrKyBiL2ZzL2RheC5jXG5AQCAtNzcyLDI0ICs3NzIsMjMgQEAgc3RhdGljIHZvaWQgKmdyYWJfbWFwcGluZ19lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbiBcbiAvKipcbiAgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSAtIGZpbmQgZmlyc3QgcGlubmVkIHBhZ2UgaW4gQG1hcHBpbmdcbi0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBhZ2Ugd2l0aCByZWYgY291bnQgXHUwMDNlIDFcbisgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBpbm5lZCBwYWdlXG4gICogQHN0YXJ0OiBTdGFydGluZyBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAnc3RhcnQnIGlzIGluY2x1ZGVkLlxuICAqIEBlbmQ6IEVuZCBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAnZW5kJyBpcyBpbmNsdWRlZC4gSWYgJ2VuZCcgaXMgTExPTkdfTUFYLFxuICAqICAgICAgIHBhZ2VzIGZyb20gJ3N0YXJ0JyB0aWxsIHRoZSBlbmQgb2YgZmlsZSBhcmUgaW5jbHVkZWQuXG4gICpcbi0gKiBEQVggcmVxdWlyZXMgWk9ORV9ERVZJQ0UgbWFwcGVkIHBhZ2VzLiBUaGVzZSBwYWdlcyBhcmUgbmV2ZXJcbi0gKiAnb25saW5lZCcgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yIHNvIHRoZXkgYXJlIGNvbnNpZGVyZWQgaWRsZSB3aGVuXG4tICogcGFnZS1cdTAwM2Vjb3VudCA9PSAxLiBBIGZpbGVzeXN0ZW0gdXNlcyB0aGlzIGludGVyZmFjZSB0byBkZXRlcm1pbmUgaWZcbi0gKiBhbnkgcGFnZSBpbiB0aGUgbWFwcGluZyBpcyBidXN5LCBpLmUuIGZvciBETUEsIG9yIG90aGVyXG4tICogZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuXG4rICogREFYIHJlcXVpcmVzIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcy4gQSBwYWdlIGlzIGNvbnNpZGVyZWQgYnVzeSB3aGVuXG4rICogZm9saW9fcmVmX2NvdW50KGZvbGlvKSBleGNlZWRzIGZvbGlvX21hcGNvdW50KGZvbGlvKS4gVGhpcyBoZWxwZXIgaXNcbisgKiB1c2VkIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZSBpbiB0aGUgbWFwcGluZyBpcyBidXN5LCBpLmUuIGZvciBETUEsXG4rICogb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuXG4gICpcbiAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmaWxlc3lzdGVtIGlzIGhvbGRpbmcgbG9ja3MgdG8gYmxvY2sgdGhlXG4gICogZXN0YWJsaXNobWVudCBvZiBuZXcgbWFwcGluZ3MgaW4gdGhpcyBhZGRyZXNzX3NwYWNlLiBJLmUuIGl0IGV4cGVjdHNcbi0gKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxuKyAqIHRvIGJlIGFibGUgdG8gcnVuIHVubWFwX21hcHBpbmdfcGFnZXMoKSBhbmQgc3Vic2VxdWVudGx5IG5vdCByYWNlXG4gICogbWFwcGluZ19tYXBwZWQoKSBiZWNvbWluZyB0cnVlLlxuICAqL1xuLXN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0bG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHRcdCAgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4ge1xuIFx0dm9pZCAqZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgc2Nhbm5lZCA9IDA7XG5AQCAtODQxLDEzICs4NDAsNiBAQCBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTtcbi1cbi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4te1xuLVx0cmV0dXJuIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKG1hcHBpbmcsIDAsIExMT05HX01BWCk7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlKTtcbiBcbiBzdGF0aWMgaW50IF9fZGF4X2ludmFsaWRhdGVfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHQgIHBnb2ZmX3QgaW5kZXgsIGJvb2wgdHJ1bmMpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYXguaCBiL2luY2x1ZGUvbGludXgvZGF4LmhcbmluZGV4IGZlNmMzZGVkMWI1MGYuLmYyZDQ3OTc1ZDkwNWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RheC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RheC5oXG5AQCAtMTU1LDggKzE1NSw2IEBAIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4gaW50IGRheF9mb2xpb19yZXNldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpO1xuLXN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKTtcbiBkYXhfZW50cnlfdCBkYXhfbG9ja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIGRheF91bmxvY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZGF4X2VudHJ5X3QgY29va2llKTtcbiBkYXhfZW50cnlfdCBkYXhfbG9ja19tYXBwaW5nX2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuQEAgLTE3MywxNiArMTcxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgZnNfZGF4X2dldChzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgdm9pZCAqaG9sZGVyLFxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IG5yX3BhZ2VzKVxuLXtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzoyNToxNi43MTkyMjQ1ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzE5OTYwOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFYIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgc3ltYm9scyBhcmUgYmVpbmcgbW9kaWZpZWQuXG5cblNvLCBoZXJlJ3Mgd2hhdCB0aGUgcGF0Y2ggdGVsbHMgbWU6XG5cbkZpcnN0LCBpbiBgZnMvZGF4LmNgLCB0aGUgY29tbWVudCBmb3IgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQncyBub3cgZGVjbGFyZWQgYHN0YXRpY2AuIFRoZSBgRVhQT1JUX1NZTUJPTF9HUExgIGRpcmVjdGl2ZXMgZm9yICpib3RoKiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIGFuZCBgZGF4X2xheW91dF9idXN5X3BhZ2VgIGhhdmUgYmVlbiByZW1vdmVkLCAqYW5kKiB0aGUgYGRheF9sYXlvdXRfYnVzeV9wYWdlYCBmdW5jdGlvbiBpdHNlbGYgaXMgZ29uZS4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IHNoaWZ0LiBSZW1vdmluZyBgRVhQT1JUX1NZTUJPTF9HUExgIGltcGxpZXMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIGludGVuZGVkIHRvIGJlIGF2YWlsYWJsZSBvdXRzaWRlIG9mIGBmcy9kYXguY2AuXG5cblRoZW4sIGxvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvZGF4LmhgLCB0aGUgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbnMgYW5kIGlubGluZSBkZWZpbml0aW9ucyBvZiB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBhbHNvIGdvbmUuIFRoaXMgYWxpZ25zIHdpdGggdGhlIGNoYW5nZXMgaW4gYGZzL2RheC5jYCwgY29uZmlybWluZyB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIGJlaW5nIG1hZGUgaW50ZXJuYWwgdG8gdGhlIERBWCBzdWJzeXN0ZW0uXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlICppbXBhY3QqIG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIHdlcmUgcHJldmlvdXNseSB1c2VkLiBMZXQgbWUgY2hlY2sgYXJvdW5kIGxpbmUgNzcyIGluIGBmcy9kYXguY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIEZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8ga25vdyAqd2hvKiBvciAqd2hhdCogd2FzIGNhbGxpbmcgdGhlbSBiZWZvcmUgdGhpcy4gQXJlIHRoZXJlIGFueSBleHRlcm5hbCBtb2R1bGVzIHRoYXQgd2VyZSByZWx5aW5nIG9uIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAgb3IgYGRheF9sYXlvdXRfYnVzeV9wYWdlYD9cblxuQSBxdWljayBgZ3JlcGAgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlLCBvciBhIHRhcmdldGVkIHJlYWRpbmcgb2YgdGhlIHJlbGV2YW50IGZpbGVzIGFuZCB0aGVpciBpbmNsdWRlcywgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgcmVtb3ZhbCBicmVha3MgYW55dGhpbmcuIElmIHNvLCB3aHkgaXMgaXQgYWNjZXB0YWJsZT8gSXMgdGhlcmUgYSByZXBsYWNlbWVudCBvciBhbHRlcm5hdGl2ZSBtZWNoYW5pc20gYmVpbmcgaW1wbGVtZW50ZWQ/IEkgbmVlZCB0aGUgY29udGV4dCB0byBmb3JtIGEgcHJvcGVyIGp1ZGdtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODcyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6MjU6MjEuMDM5MTg5MjkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTA3NzgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF4X2xheW91dF9idXN5X3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9Njg3PXN0YXRpYyB2b2lkICpncmFiX21hcHBpbmdfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsXFxuLS1cXG5mcy9kYXguYy03NzMtLyoqXFxuZnMvZGF4LmM6Nzc0OiAqIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlIC0gZmluZCBmaXJzdCBwaW5uZWQgcGFnZSBpbiBAbWFwcGluZ1xcbmZzL2RheC5jLTc3NS0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBpbm5lZCBwYWdlXFxuLS1cXG5mcy9kYXguYy03ODktICovXFxuZnMvZGF4LmM6NzkwOnN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZGF4LmMtNzkxLVxcdFxcdFxcdFxcdFxcdCAgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXFxuLS1cXG5mcy9kYXguYz05Njk9aW50IGRheF9icmVha19sYXlvdXQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxuZnMvZGF4LmMtOTc4LVxcdGRvIHtcXG5mcy9kYXguYzo5Nzk6XFx0XFx0cGFnZSA9IGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHN0YXJ0LCBlbmQpO1xcbmZzL2RheC5jLTk4MC1cXHRcXHRpZiAoIXBhZ2UpXFxuLS1cXG5mcy9kYXguYz05OTc9dm9pZCBkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9kYXguYy0xMDA0LVxcdGRvIHtcXG5mcy9kYXguYzoxMDA1OlxcdFxcdHBhZ2UgPSBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCAwLFxcbmZzL2RheC5jLTEwMDYtXFx0XFx0XFx0XFx0XFx0XFx0TExPTkdfTUFYKTtcXG4tLVxcbmZzL2Z1c2UvZGF4LmM9NDMxPXN0YXRpYyBpbnQgZnVzZV9zZXR1cF9uZXdfZGF4X21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcyxcXG4tLVxcbmZzL2Z1c2UvZGF4LmMtNDQ1LVxcdCAqIENhbid0IGRvIGlubGluZSByZWNsYWltIGluIGZhdWx0IHBhdGguIFdlIGNhbGxcXG5mcy9mdXNlL2RheC5jOjQ0NjpcXHQgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZSgpIGJlZm9yZSB3ZSBmcmVlIGEgcmFuZ2UuIEFuZFxcbmZzL2Z1c2UvZGF4LmMtNDQ3LVxcdCAqIGZ1c2Vfd2FpdF9kYXhfcGFnZSgpIGRyb3BzIG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayBhbmQgcmVxdWlyZXMgaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjIzLjk0OTk3NDEwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzA4MzkxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHJldmlldzpcblxuKipEaXZpbmcgaW50byBgZnMvZGF4LmNgIGZvciBEQVggSW1wbGVtZW50YXRpb24gRGV0YWlscyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBEQVggaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCByZWdpb24gYXJvdW5kIGxpbmVzIDc3MC0xMDEwIGluIGBmcy9kYXguY2AuIEknbSBnb2luZyB0byBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIG5lY2Vzc2FyeSBjb2RlIGJsb2Nrcy4gSSdtIG5vdCBsb29raW5nIGZvciBhIGdlbmVyYWwgb3ZlcnZpZXc7IEknbSBhZnRlciB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IERBWCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZXN5c3RlbS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBrZXkgYXNwZWN0cyBvZiB0aGUgREFYIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMgY29kZSBzZWN0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBkYXRhIGFjY2VzcyBtZWNoYW5pc21zLCBwZXJoYXBzIHRoZSBtYXBwaW5ncywgY2FjaGluZywgZGlyZWN0IGFjY2Vzcywgb3IgdGhlIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcgbG9naWMgZm9yIERBWCBkZXZpY2VzLCByZXNpZGUuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGF0b21pY2l0eSBndWFyYW50ZWVzIG9yIGFueSBkaXJlY3QtYWNjZXNzLXJlbGF0ZWQgYXNwZWN0cy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6MjU6MjYuMDgwODE2MDM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RheC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXHRyZXR1cm4geGFfbWtfaW50ZXJuYWwoVk1fRkFVTFRfRkFMTEJBQ0spO1xcbiA3NzE6XFx0fVxcbiA3NzI6XFx0XFxuIDc3MzpcXHQvKipcXG4gNzc0OlxcdCAqIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlIC0gZmluZCBmaXJzdCBwaW5uZWQgcGFnZSBpbiBAbWFwcGluZ1xcbiA3NzU6XFx0ICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2UgdG8gc2NhbiBmb3IgYSBwaW5uZWQgcGFnZVxcbiA3NzY6XFx0ICogQHN0YXJ0OiBTdGFydGluZyBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAnc3RhcnQnIGlzIGluY2x1ZGVkLlxcbiA3Nzc6XFx0ICogQGVuZDogRW5kIG9mZnNldC4gUGFnZSBjb250YWluaW5nICdlbmQnIGlzIGluY2x1ZGVkLiBJZiAnZW5kJyBpcyBMTE9OR19NQVgsXFxuIDc3ODpcXHQgKiAgICAgICBwYWdlcyBmcm9tICdzdGFydCcgdGlsbCB0aGUgZW5kIG9mIGZpbGUgYXJlIGluY2x1ZGVkLlxcbiA3Nzk6XFx0ICpcXG4gNzgwOlxcdCAqIERBWCByZXF1aXJlcyBaT05FX0RFVklDRSBtYXBwZWQgcGFnZXMuIEEgcGFnZSBpcyBjb25zaWRlcmVkIGJ1c3kgd2hlblxcbiA3ODE6XFx0ICogZm9saW9fcmVmX2NvdW50KGZvbGlvKSBleGNlZWRzIGZvbGlvX21hcGNvdW50KGZvbGlvKS4gVGhpcyBoZWxwZXIgaXNcXG4gNzgyOlxcdCAqIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSxcXG4gNzgzOlxcdCAqIG9yIG90aGVyIGdldF91c2VyX3BhZ2VzKCkgdXNhZ2VzLlxcbiA3ODQ6XFx0ICpcXG4gNzg1OlxcdCAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaXMgaG9sZGluZyBsb2NrcyB0byBibG9jayB0aGVcXG4gNzg2OlxcdCAqIGVzdGFibGlzaG1lbnQgb2YgbmV3IG1hcHBpbmdzIGluIHRoaXMgYWRkcmVzc19zcGFjZS4gSS5lLiBpdCBleHBlY3RzXFxuIDc4NzpcXHQgKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3BhZ2VzKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxcbiA3ODg6XFx0ICogbWFwcGluZ19tYXBwZWQoKSBiZWNvbWluZyB0cnVlLlxcbiA3ODk6XFx0ICovXFxuIDc5MDpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiA3OTE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4gNzkyOlxcdHtcXG4gNzkzOlxcdFxcdHZvaWQgKmVudHJ5O1xcbiA3OTQ6XFx0XFx0dW5zaWduZWQgaW50IHNjYW5uZWQgPSAwO1xcbiA3OTU6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xcbiA3OTY6XFx0XFx0cGdvZmZfdCBzdGFydF9pZHggPSBzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA3OTc6XFx0XFx0cGdvZmZfdCBlbmRfaWR4O1xcbiA3OTg6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcywgc3RhcnRfaWR4KTtcXG4gNzk5OlxcdFxcbiA4MDA6XFx0XFx0aWYgKCFkYXhfbWFwcGluZyhtYXBwaW5nKSlcXG4gODAxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4MDI6XFx0XFxuIDgwMzpcXHRcXHQvKiBJZiBlbmQgPT0gTExPTkdfTUFYLCBhbGwgcGFnZXMgZnJvbSBzdGFydCB0byB0aWxsIGVuZCBvZiBmaWxlICovXFxuIDgwNDpcXHRcXHRpZiAoZW5kID09IExMT05HX01BWClcXG4gODA1OlxcdFxcdFxcdGVuZF9pZHggPSBVTE9OR19NQVg7XFxuIDgwNjpcXHRcXHRlbHNlXFxuIDgwNzpcXHRcXHRcXHRlbmRfaWR4ID0gZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDgwODpcXHRcXHQvKlxcbiA4MDk6XFx0XFx0ICogSWYgd2UgcmFjZSBnZXRfdXNlcl9wYWdlc19mYXN0KCkgaGVyZSBlaXRoZXIgd2UnbGwgc2VlIHRoZVxcbiA4MTA6XFx0XFx0ICogZWxldmF0ZWQgcGFnZSBjb3VudCBpbiB0aGUgaXRlcmF0aW9uIGFuZCB3YWl0LCBvclxcbiA4MTE6XFx0XFx0ICogZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHdpbGwgc2VlIHRoYXQgdGhlIHBhZ2UgaXQgdG9vayBhIHJlZmVyZW5jZVxcbiA4MTI6XFx0XFx0ICogYWdhaW5zdCBpcyBubyBsb25nZXIgbWFwcGVkIGluIHRoZSBwYWdlIHRhYmxlcyBhbmQgYmFpbCB0byB0aGVcXG4gODEzOlxcdFxcdCAqIGdldF91c2VyX3BhZ2VzKCkgc2xvdyBwYXRoLiAgVGhlIHNsb3cgcGF0aCBpcyBwcm90ZWN0ZWQgYnlcXG4gODE0OlxcdFxcdCAqIHB0ZV9sb2NrKCkgYW5kIHBtZF9sb2NrKCkuIE5ldyByZWZlcmVuY2VzIGFyZSBub3QgdGFrZW4gd2l0aG91dFxcbiA4MTU6XFx0XFx0ICogaG9sZGluZyB0aG9zZSBsb2NrcywgYW5kIHVubWFwX21hcHBpbmdfcGFnZXMoKSB3aWxsIG5vdCB6ZXJvIHRoZVxcbiA4MTY6XFx0XFx0ICogcHRlIG9yIHBtZCB3aXRob3V0IGhvbGRpbmcgdGhlIHJlc3BlY3RpdmUgbG9jaywgc28gd2UgYXJlXFxuIDgxNzpcXHRcXHQgKiBndWFyYW50ZWVkIHRvIGVpdGhlciBzZWUgbmV3IHJlZmVyZW5jZXMgb3IgcHJldmVudCBuZXdcXG4gODE4OlxcdFxcdCAqIHJlZmVyZW5jZXMgZnJvbSBiZWluZyBlc3RhYmxpc2hlZC5cXG4gODE5OlxcdFxcdCAqL1xcbiA4MjA6XFx0XFx0dW5tYXBfbWFwcGluZ19wYWdlcyhtYXBwaW5nLCBzdGFydF9pZHgsIGVuZF9pZHggLSBzdGFydF9pZHggKyAxLCAwKTtcXG4gODIxOlxcdFxcbiA4MjI6XFx0XFx0eGFzX2xvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbiA4MjM6XFx0XFx0eGFzX2Zvcl9lYWNoKFxcdTAwMjZ4YXMsIGVudHJ5LCBlbmRfaWR4KSB7XFxuIDgyNDpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCF4YV9pc192YWx1ZShlbnRyeSkpKVxcbiA4MjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgyNjpcXHRcXHRcXHRlbnRyeSA9IHdhaXRfZW50cnlfdW5sb2NrZWRfZXhjbHVzaXZlKFxcdTAwMjZ4YXMsIGVudHJ5KTtcXG4gODI3OlxcdFxcdFxcdGlmIChlbnRyeSlcXG4gODI4OlxcdFxcdFxcdFxcdHBhZ2UgPSBkYXhfYnVzeV9wYWdlKGVudHJ5KTtcXG4gODI5OlxcdFxcdFxcdHB1dF91bmxvY2tlZF9lbnRyeShcXHUwMDI2eGFzLCBlbnRyeSwgV0FLRV9ORVhUKTtcXG4gODMwOlxcdFxcdFxcdGlmIChwYWdlKVxcbiA4MzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgzMjpcXHRcXHRcXHRpZiAoKytzY2FubmVkICUgWEFfQ0hFQ0tfU0NIRUQpXFxuIDgzMzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODM0OlxcdFxcbiA4MzU6XFx0XFx0XFx0eGFzX3BhdXNlKFxcdTAwMjZ4YXMpO1xcbiA4MzY6XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuIDgzNzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gODM4OlxcdFxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4gODM5OlxcdFxcdH1cXG4gODQwOlxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbiA4NDE6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuIDg0MjpcXHR9XFxuIDg0MzpcXHRcXG4gODQ0OlxcdHN0YXRpYyBpbnQgX19kYXhfaW52YWxpZGF0ZV9lbnRyeShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gODQ1OlxcdFxcdFxcdFxcdFxcdCAgcGdvZmZfdCBpbmRleCwgYm9vbCB0cnVuYylcXG4gODQ2OlxcdHtcXG4gODQ3OlxcdFxcdFhBX1NUQVRFKHhhcywgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWlfcGFnZXMsIGluZGV4KTtcXG4gODQ4OlxcdFxcdGludCByZXQgPSAwO1xcbiA4NDk6XFx0XFx0dm9pZCAqZW50cnk7XFxuIDg1MDpcXHRcXG4gODUxOlxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4gODUyOlxcdFxcdGVudHJ5ID0gZ2V0X25leHRfdW5sb2NrZWRfZW50cnkoXFx1MDAyNnhhcywgMCk7XFxuIDg1MzpcXHRcXHRpZiAoIWVudHJ5IHx8IFdBUk5fT05fT05DRSgheGFfaXNfdmFsdWUoZW50cnkpKSlcXG4gODU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA4NTU6XFx0XFx0aWYgKCF0cnVuYyBcXHUwMDI2XFx1MDAyNlxcbiA4NTY6XFx0XFx0ICAgICh4YXNfZ2V0X21hcmsoXFx1MDAyNnhhcywgUEFHRUNBQ0hFX1RBR19ESVJUWSkgfHxcXG4gODU3OlxcdFxcdCAgICAgeGFzX2dldF9tYXJrKFxcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfVE9XUklURSkpKVxcbiA4NTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDg1OTpcXHRcXHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCB0cnVuYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjI2LjA4MDkzOTEyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MTA4NzE2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQVggTGF5b3V0IEJ1c3kgUGFnZSBSZW1vdmFsKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgZGF4X2xheW91dF9idXN5X3BhZ2VgIHdhcyBqdXN0IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLiBCb3RoIHdlcmUgdW5leHBvcnRlZCwgYW5kIHRoZSBmb3JtZXIgd2FzIHNpbXBseSByZW1vdmVkIGJlY2F1c2Ugbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGNhbGxlcnMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGBkYXhfYnJlYWtfbGF5b3V0YCwgYGRheF9icmVha19sYXlvdXRfZmluYWxgIG9yIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAgZGlyZWN0bHkgd2l0aGluIGBmcy9kYXguY2AuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHBhcnQ6IHdoYXQgYWN0dWFsbHkgY2hhbmdlZCBpbiB0aGUgKmNvZGUqPyBUaGUgZGlmZiBzaG93cyB0aGF0IHRoZSBmdW5jdGlvbidzIGRvY3VtZW50YXRpb24gbm93IGNsYXJpZmllcyB0aGF0IGEgXCJidXN5XCIgcGFnZSBpcyBjb25zaWRlcmVkIGJ1c3kgd2hlbiBgZm9saW9fcmVmX2NvdW50KGZvbGlvKWAgZXhjZWVkcyBgZm9saW9fbWFwY291bnQoZm9saW8pYC4gUHJldmlvdXNseSwgaXQgbWVudGlvbmVkIHRoYXQgREFYIHJlcXVpcmVkIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcywgd2hpY2ggd2VyZSBjb25zaWRlcmVkIGlkbGUgd2hlbiBwYWdlLVx1MDAzZWNvdW50ID09IDEsIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgYXMgdGhlIGNyaXRlcmlhIGZvciB3aGF0IGNvbnN0aXR1dGVzIGEgYnVzeSBwYWdlLiBUaGUgZGVzY3JpcHRpb24gb2YgaG93IHRoaXMgaGVscGVyIGlzIHVzZWQgYWxzbyBub3cgc3RhdGVzIHRoYXQgaXQgaXMgbWVhbnQgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSwgb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuIEFsc28sIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBydW4gYHVubWFwX21hcHBpbmdfcGFnZXMoKWAgaW5zdGVhZCBvZiBgdW5tYXBfbWFwcGluZ19yYW5nZSgpYCwgYW5kIHRoZW4gbm90IHJhY2UgYG1hcHBpbmdfbWFwcGVkKClgIGJlY29taW5nIHRydWUuXG5cbkknbSBhbHNvIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgZ2l0IGxvZy9kaWZmIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIHRoYXQgSSBtaWdodCBiZSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjMxLjc5MTgxMjcyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjUzMjUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfYnJlYWtfbGF5b3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz05NTU9c3RhdGljIHZvaWQgd2FpdF9wYWdlX2lkbGVfdW5pbnRlcnJ1cHRpYmxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZnMvZGF4LmMtOTY4LSAqL1xcbmZzL2RheC5jOjk2OTppbnQgZGF4X2JyZWFrX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuZnMvZGF4LmMtOTcwLVxcdFxcdHZvaWQgKGNiKShzdHJ1Y3QgaW5vZGUgKikpXFxuLS1cXG5mcy9kYXguYy05OTQtfVxcbmZzL2RheC5jOjk5NTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfYnJlYWtfbGF5b3V0KTtcXG5mcy9kYXguYy05OTYtXFxuZnMvZGF4LmM6OTk3OnZvaWQgZGF4X2JyZWFrX2xheW91dF9maW5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2RheC5jLTk5OC17XFxuLS1cXG5mcy9kYXguYy0xMDE1LX1cXG5mcy9kYXguYzoxMDE2OkVYUE9SVF9TWU1CT0xfR1BMKGRheF9icmVha19sYXlvdXRfZmluYWwpO1xcbmZzL2RheC5jLTEwMTctXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTExMjM9c3RhdGljIHZvaWQgZXJvZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMTEyNS1cXHRpZiAoSVNfREFYKGlub2RlKSlcXG5mcy9lcm9mcy9zdXBlci5jOjExMjY6XFx0XFx0ZGF4X2JyZWFrX2xheW91dF9maW5hbChpbm9kZSk7XFxuZnMvZXJvZnMvc3VwZXIuYy0xMTI3LVxcdGVyb2ZzX2lzaGFyZV9mcmVlX2lub2RlKGlub2RlKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTgyLVxcbmZzL2V4dDQvaW5vZGUuYzoxODM6XFx0ZGF4X2JyZWFrX2xheW91dF9maW5hbChpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTE4NC1cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz00NDM5PWludCBleHQ0X2JyZWFrX2xheW91dHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00NDQzLVxcbmZzL2V4dDQvaW5vZGUuYzo0NDQ0OlxcdHJldHVybiBkYXhfYnJlYWtfbGF5b3V0X2lub2RlKGlub2RlLCBleHQ0X3dhaXRfZGF4X3BhZ2UpO1xcbmZzL2V4dDQvaW5vZGUuYy00NDQ1LX1cXG4tLVxcbmZzL2Z1c2UvZGF4LmM9NjYzPXN0YXRpYyB2b2lkIGZ1c2Vfd2FpdF9kYXhfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZnVzZS9kYXguYy02NzAtLyogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayBoZWxkIGV4Y2x1c2l2ZWx5LiAqL1xcbmZzL2Z1c2UvZGF4LmM6NjcxOmludCBmdXNlX2RheF9icmVha19sYXlvdXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBkbWFwX3N0YXJ0LFxcbmZzL2Z1c2UvZGF4LmMtNjcyLVxcdFxcdFxcdFxcdCAgdTY0IGRtYXBfZW5kKVxcbmZzL2Z1c2UvZGF4LmMtNjczLXtcXG5mcy9mdXNlL2RheC5jOjY3NDpcXHRyZXR1cm4gZGF4X2JyZWFrX2xheW91dChpbm9kZSwgZG1hcF9zdGFydCwgZG1hcF9lbmQsXFxuZnMvZnVzZS9kYXguYy02NzUtXFx0XFx0XFx0XFx0ZnVzZV93YWl0X2RheF9wYWdlKTtcXG4tLVxcbmZzL2Z1c2UvZGF4LmM9OTE0PWlub2RlX2lubGluZV9yZWNsYWltX29uZV9kbWFwKHN0cnVjdCBmdXNlX2Nvbm5fZGF4ICpmY2QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mdXNlL2RheC5jLTk0MS1cXHQgKi9cXG5mcy9mdXNlL2RheC5jOjk0MjpcXHRyZXQgPSBmdXNlX2RheF9icmVha19sYXlvdXRzKGlub2RlLCBkbWFwX3N0YXJ0LCBkbWFwX2VuZCk7XFxuZnMvZnVzZS9kYXguYy05NDMtXFx0aWYgKHJldCkge1xcbmZzL2Z1c2UvZGF4LmM6OTQ0OlxcdFxcdHByX2RlYnVnKFxcXCJmdXNlOiBmdXNlX2RheF9icmVha19sYXlvdXRzKCkgZmFpbGVkLiBlcnI9JWRcXFxcblxcXCIsXFxuZnMvZnVzZS9kYXguYy05NDUtXFx0XFx0XFx0IHJldCk7XFxuLS1cXG5mcy9mdXNlL2RheC5jPTEwNzY9c3RhdGljIGludCBsb29rdXBfYW5kX3JlY2xhaW1fZG1hcChzdHJ1Y3QgZnVzZV9jb25uX2RheCAqZmNkLFxcbi0tXFxuZnMvZnVzZS9kYXguYy0xMDg2LVxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbmZzL2Z1c2UvZGF4LmM6MTA4NzpcXHRyZXQgPSBmdXNlX2RheF9icmVha19sYXlvdXRzKGlub2RlLCBkbWFwX3N0YXJ0LCBkbWFwX2VuZCk7XFxuZnMvZnVzZS9kYXguYy0xMDg4LVxcdGlmIChyZXQpIHtcXG5mcy9mdXNlL2RheC5jOjEwODk6XFx0XFx0cHJfZGVidWcoXFxcInZpcnRpb19mczogZnVzZV9kYXhfYnJlYWtfbGF5b3V0cygpIGZhaWxlZC4gZXJyPSVkXFxcXG5cXFwiLFxcbmZzL2Z1c2UvZGF4LmMtMTA5MC1cXHRcXHRcXHQgcmV0KTtcXG4tLVxcbmZzL2Z1c2UvZGlyLmM9MjE0OD1pbnQgZnVzZV9kb19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTIxODItXFx0XFx0ZmF1bHRfYmxvY2tlZCA9IHRydWU7XFxuZnMvZnVzZS9kaXIuYzoyMTgzOlxcdFxcdGVyciA9IGZ1c2VfZGF4X2JyZWFrX2xheW91dHMoaW5vZGUsIDAsIC0xKTtcXG5mcy9mdXNlL2Rpci5jLTIxODQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTI1MD1zdGF0aWMgaW50IGZ1c2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTI3Mi1cXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG5mcy9mdXNlL2ZpbGUuYzoyNzM6XFx0XFx0ZXJyID0gZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhpbm9kZSwgMCwgLTEpO1xcbmZzL2Z1c2UvZmlsZS5jLTI3NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZnVzZS9maWxlLmM9MjgzMz1zdGF0aWMgbG9uZyBmdXNlX2ZpbGVfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTI4NjEtXFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuZnMvZnVzZS9maWxlLmM6Mjg2MjpcXHRcXHRlcnIgPSBmdXNlX2RheF9icmVha19sYXlvdXRzKGlub2RlLCAwLCAtMSk7XFxuZnMvZnVzZS9maWxlLmMtMjg2My1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZnVzZS9mdXNlX2kuaD0xMjI0PWludCBmdXNlX2RheF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuZnMvZnVzZS9mdXNlX2kuaDoxMjI1OmludCBmdXNlX2RheF9icmVha19sYXlvdXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBkbWFwX3N0YXJ0LCB1NjQgZG1hcF9lbmQpO1xcbmZzL2Z1c2UvZnVzZV9pLmgtMTIyNi1pbnQgZnVzZV9kYXhfY29ubl9hbGxvYyhzdHJ1Y3QgZnVzZV9jb25uICpmYywgZW51bSBmdXNlX2RheF9tb2RlIG1vZGUsXFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9MTQ0PXN0YXRpYyB2b2lkIGZ1c2VfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNTEtXFx0aWYgKEZVU0VfSVNfREFYKGlub2RlKSlcXG5mcy9mdXNlL2lub2RlLmM6MTUyOlxcdFxcdGRheF9icmVha19sYXlvdXRfZmluYWwoaW5vZGUpO1xcbmZzL2Z1c2UvaW5vZGUuYy0xNTMtXFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmM9Mjc0OT14ZnNfbW1hcGxvY2tfdHdvX2lub2Rlc19hbmRfYnJlYWtfZGF4X2xheW91dChcXG4tLVxcbmZzL3hmcy94ZnNfaW5vZGUuYy0yNzc2LVxcdCAqL1xcbmZzL3hmcy94ZnNfaW5vZGUuYzoyNzc3OlxcdGVycm9yID0gZGF4X2JyZWFrX2xheW91dChWRlNfSShpcDIpLCAwLCAtMSwgTlVMTCk7XFxuZnMveGZzL3hmc19pbm9kZS5jLTI3NzgtXFx0aWYgKGVycm9yKSB7XFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmM9MzAxOD14ZnNfYnJlYWtfZGF4X2xheW91dHMoXFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmMtMzAyMi1cXG5mcy94ZnMveGZzX2lub2RlLmM6MzAyMzpcXHRyZXR1cm4gZGF4X2JyZWFrX2xheW91dF9pbm9kZShpbm9kZSwgeGZzX3dhaXRfZGF4X3BhZ2UpO1xcbmZzL3hmcy94ZnNfaW5vZGUuYy0zMDI0LX1cXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYz04MjI9eGZzX2ZzX2V2aWN0X2lub2RlKFxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTgyNS1cXHRpZiAoSVNfREFYKGlub2RlKSlcXG5mcy94ZnMveGZzX3N1cGVyLmM6ODI2OlxcdFxcdGRheF9icmVha19sYXlvdXRfZmluYWwoaW5vZGUpO1xcbmZzL3hmcy94ZnNfc3VwZXIuYy04MjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjMxLjkyNDM1MTc1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNTA2NjM2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IERlYWQgQ29kZSBSZW1vdmFsIFx1MDAyNiBTY29wZSBSZXN0cmljdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gVGhlIGluaXRpYWwgc3RlcHMgaW52b2x2ZWQgaWRlbnRpZnlpbmcgdGhlIGNvcmUgY2hhbmdlczogYSBmdW5jdGlvbiwgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgd2FzIG1hZGUgYHN0YXRpY2AgYW5kIGl0cyBleHBvcnQgc3ltYm9sIHJlbW92ZWQuIFRoZSB1bnVzZWQgd3JhcHBlciBgZGF4X2xheW91dF9idXN5X3BhZ2VgIGhhcyBiZWVuIGNvbXBsZXRlbHkgZGVsZXRlZCwgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBleHBvcnQuIERlY2xhcmF0aW9ucyBhbmQgaW5saW5lcyBmcm9tIGBpbmNsdWRlL2xpbnV4L2RheC5oYCB3ZXJlIGFsc28gcmVtb3ZlZC4gRmluYWxseSwgc29tZSBjb21tZW50cyBpbiBgZnMvZGF4LmNgIHdlcmUgdXBkYXRlZC5cblxuVGhlIGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgdG91Y2ggKmV4ZWN1dGFibGUqIGNvZGUgbG9naWMuIE1ha2luZyBhIGZ1bmN0aW9uIGBzdGF0aWNgLCByZW1vdmluZyB1bnVzZWQgZXhwb3J0cywgYW5kIGdldHRpbmcgcmlkIG9mIHVudXNlZCBpbmxpbmUgZGVjbGFyYXRpb25zICpzaG91bGRuJ3QqIGFsdGVyIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBydW50aW1lIGFzc2VydGlvbnMsIG9yIGZ1bmRhbWVudGFsbHkgY2hhbmdlIGhvdyB0aGUga2VybmVsIG9wZXJhdGVzLiBCdXQsIG9mIGNvdXJzZSwgYSBxdWljayByZS1yZWFkIG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBpcyBpbiBvcmRlci4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBidWlsZCBzeXN0ZW1zIHRoYXQgZG9uJ3QgYWx0ZXIgQyBsb2dpYywgYW5kIHVucmVhY2hhYmxlIGNvZGUsIGFyZSBhbGwgYXJlYXMgd2hlcmUgZnV6emluZyBjYW4gYmUgc2tpcHBlZC5cblxuVGhlbiBhIGNoZWNrIHRvIHRoZSBwb3NpdGl2ZSBzZWN0aW9uIGVuc3VyZXMgdGhpcyBjaGFuZ2UgZG9lcyAqbm90KiBmYWxsIHVuZGVyIGNvcmUgc3Vic3lzdGVtcywgcmVmYWN0b3JpbmdzLCBydW50aW1lIGFzc2VydGlvbnMsIG9yIHJlYWNoYWJsZSBkcml2ZXJzLlxuXG5TbywgbGV0J3MgbG9vayBhdCB0aGUgZGlmZnMgbGluZSBieSBsaW5lLiBGb2N1c2luZyBvbiBgZnMvZGF4LmNgLCB0aGUgY2hhbmdlcyBib2lsIGRvd24gdG86IGNvbW1lbnRzIHVwZGF0ZWQsIGBzdGF0aWNgIGFkZGVkIHRvIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAsIGl0cyBleHBvcnQgcmVtb3ZlZCwgYW5kIHJlbW92YWwgb2YgdGhlIGRlYWQgZnVuY3Rpb24gYGRheF9sYXlvdXRfYnVzeV9wYWdlYCBhbmQgaXRzIGV4cG9ydC4gTm90aGluZyB3aXRoaW4gdGhlIGNvcmUgbG9naWMgb2YgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCBvciBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCdzIGJlaW5nICpjYWxsZWQqIGhhcyBiZWVuIGNoYW5nZWQuIExvb2tpbmcgYXQgdGhlIGhlYWRlciwgdGhlIHByb3RvdHlwZSBhbmQgc3R1YnMgd2VyZSBhbHNvIHJlbW92ZWQuIFRoaXMgaXMgYWxsIGRlYWQgY29kZSByZW1vdmFsLCBmdW5jdGlvbiB1bmV4cG9ydGluZywgYW5kIHNjb3BpbmcuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIHRoZW4gaXM6IERvZXMgcmVtb3ZpbmcgZGVhZCBjb2RlLCB1bmV4cG9ydGluZyBmdW5jdGlvbnMsIG9yIG1hcmtpbmcgc29tZXRoaW5nIGBzdGF0aWNgIHdhcnJhbnQgZnV6emluZz8gVGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvbXB0J3MgZ29hbCBvZiBmaW5kaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBuZXcgYnVncywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVzZSBjaGFuZ2VzICpzaG91bGRuJ3QqLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24ncyBsb2dpYyByZW1haW5zIGludGFjdC4gVGhlcmUgYXJlIG5vIG5ldyBjb2RlIHBhdGhzLCBubyBhbHRlcmVkIGNvbnRyb2wgZmxvdywgbm8gbmV3IGFzc2VydGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byB1bmRlcmx5aW5nIGxvZ2ljLlxuXG5UbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBjaGVjayBvZiBgZnMvZGF4LmNgIHdpdGggYGdpdCBkaWZmYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyLCBzdWJ0bGUgY2hhbmdlcy4gSXQgaXMgYWxzbyBnb29kIHRvIHZlcmlmeSB0aGUgc2NvcGUgb2YgdGhlIHJlbW92ZWQgc3ltYm9scy4gSXQgaXMgY2xlYXIgdGhhdCB0aGUgZnVuY3Rpb24gYGRheF9sYXlvdXRfYnVzeV9wYWdlYCB3YXMgbmV2ZXIgdXNlZCwgYW5kIHRoZSBvdGhlciBmdW5jdGlvbidzIGJvZHkgd2FzIG5ldmVyIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGl0J3Mgc2FmZSB0byBzYXk6IGBXb3J0aEZ1enppbmc6IGZhbHNlYC5cblxuVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCdzIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gY29tbWVudCB1cGRhdGVzLCBtYWtpbmcgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKClgIHN0YXRpYywgcmVtb3ZpbmcgdGhlIHVudXNlZCB3cmFwcGVyIGBkYXhfbGF5b3V0X2J1c3lfcGFnZSgpYCwgYW5kIGRlbGV0aW5nIHVudXNlZCBkZWNsYXJhdGlvbnMuIE5vbmUgb2YgdGhlc2UgYWZmZWN0IGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciB0aGUgaW50cm9kdWN0aW9uL3JlbW92YWwgb2YgYXNzZXJ0aW9ucy5cblxuYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlcmVmb3JlIGJvdGggZW1wdHkuIEEgZmluYWwgcXVpY2sgdmVyaWZpY2F0aW9uIGFuZCB0aGUgcmVzdWx0IGlzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwNSwiT3V0cHV0VG9rZW5zIjoxMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjM5Ljk3NTAyNDg0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyBjb21tZW50cywgc2NvcGVzIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKCkgdG8gc3RhdGljLCByZW1vdmVzIHRoZSB1bnVzZWQgaGVscGVyIGRheF9sYXlvdXRfYnVzeV9wYWdlKCksIGFuZCByZW1vdmVzIG9ic29sZXRlIGRlY2xhcmF0aW9ucy9zdHVicyBmcm9tIGluY2x1ZGUvbGludXgvZGF4LmguIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGV4ZWN1dGFibGUgY29kZSBsb2dpYywgZGF0YSBzdHJ1Y3R1cmVzLCBjb250cm9sIGZsb3csIG9yIHJ1bnRpbWUgYXNzZXJ0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyBjb21tZW50cywgc2NvcGVzIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKCkgdG8gc3RhdGljLCByZW1vdmVzIHRoZSB1bnVzZWQgaGVscGVyIGRheF9sYXlvdXRfYnVzeV9wYWdlKCksIGFuZCByZW1vdmVzIG9ic29sZXRlIGRlY2xhcmF0aW9ucy9zdHVicyBmcm9tIGluY2x1ZGUvbGludXgvZGF4LmguIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGV4ZWN1dGFibGUgY29kZSBsb2dpYywgZGF0YSBzdHJ1Y3R1cmVzLCBjb250cm9sIGZsb3csIG9yIHJ1bnRpbWUgYXNzZXJ0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjM5Ljk3NTA1NTQ4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmmhpr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 03:22:50 +0000 UTC FinishedAt: 2026-09-06 03:25:41 +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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIGNvbW1lbnRzLCBzY29wZXMgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UoKSB0byBzdGF0aWMsIHJlbW92ZXMgdGhlIHVudXNlZCBoZWxwZXIgZGF4X2xheW91dF9idXN5X3BhZ2UoKSwgYW5kIHJlbW92ZXMgb2Jzb2xldGUgZGVjbGFyYXRpb25zL3N0dWJzIGZyb20gaW5jbHVkZS9saW51eC9kYXguaC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gZXhlY3V0YWJsZSBjb2RlIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGNvbnRyb2wgZmxvdywgb3IgcnVudGltZSBhc3NlcnRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNkNGExYzgyOWNhOGFiYTk0MTBlNzQwYzZjZWY0NTExNDI3N2NhMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAzOjI1OjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcbmluZGV4IDZiYTUwMTQyZWViMmYuLjhlMGNkYTM4ZTVmZGEgMTAwNjQ0XG4tLS0gYS9mcy9kYXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGF4LmNcbkBAIC03NzIsMjQgJiM0Mzs3NzIsMjMgQEAgc3RhdGljIHZvaWQgKmdyYWJfbWFwcGluZ19lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbiBcbiAvKipcbiAgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSAtIGZpbmQgZmlyc3QgcGlubmVkIHBhZ2UgaW4gQG1hcHBpbmdcbi0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBhZ2Ugd2l0aCByZWYgY291bnQgXHUwMDNlIDFcbiYjNDM7ICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2UgdG8gc2NhbiBmb3IgYSBwaW5uZWQgcGFnZVxuICAqIEBzdGFydDogU3RhcnRpbmcgb2Zmc2V0LiBQYWdlIGNvbnRhaW5pbmcgJiMzOTtzdGFydCYjMzk7IGlzIGluY2x1ZGVkLlxuICAqIEBlbmQ6IEVuZCBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAmIzM5O2VuZCYjMzk7IGlzIGluY2x1ZGVkLiBJZiAmIzM5O2VuZCYjMzk7IGlzIExMT05HX01BWCxcbiAgKiAgICAgICBwYWdlcyBmcm9tICYjMzk7c3RhcnQmIzM5OyB0aWxsIHRoZSBlbmQgb2YgZmlsZSBhcmUgaW5jbHVkZWQuXG4gICpcbi0gKiBEQVggcmVxdWlyZXMgWk9ORV9ERVZJQ0UgbWFwcGVkIHBhZ2VzLiBUaGVzZSBwYWdlcyBhcmUgbmV2ZXJcbi0gKiAmIzM5O29ubGluZWQmIzM5OyB0byB0aGUgcGFnZSBhbGxvY2F0b3Igc28gdGhleSBhcmUgY29uc2lkZXJlZCBpZGxlIHdoZW5cbi0gKiBwYWdlLVx1MDAzZWNvdW50ID09IDEuIEEgZmlsZXN5c3RlbSB1c2VzIHRoaXMgaW50ZXJmYWNlIHRvIGRldGVybWluZSBpZlxuLSAqIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSwgb3Igb3RoZXJcbi0gKiBnZXRfdXNlcl9wYWdlcygpIHVzYWdlcy5cbiYjNDM7ICogREFYIHJlcXVpcmVzIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcy4gQSBwYWdlIGlzIGNvbnNpZGVyZWQgYnVzeSB3aGVuXG4mIzQzOyAqIGZvbGlvX3JlZl9jb3VudChmb2xpbykgZXhjZWVkcyBmb2xpb19tYXBjb3VudChmb2xpbykuIFRoaXMgaGVscGVyIGlzXG4mIzQzOyAqIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSxcbiYjNDM7ICogb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuXG4gICpcbiAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmaWxlc3lzdGVtIGlzIGhvbGRpbmcgbG9ja3MgdG8gYmxvY2sgdGhlXG4gICogZXN0YWJsaXNobWVudCBvZiBuZXcgbWFwcGluZ3MgaW4gdGhpcyBhZGRyZXNzX3NwYWNlLiBJLmUuIGl0IGV4cGVjdHNcbi0gKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxuJiM0MzsgKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3BhZ2VzKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxuICAqIG1hcHBpbmdfbWFwcGVkKCkgYmVjb21pbmcgdHJ1ZS5cbiAgKi9cbi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0XHRcdGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4ge1xuIFx0dm9pZCAqZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgc2Nhbm5lZCA9IDA7XG5AQCAtODQxLDEzICYjNDM7ODQwLDYgQEAgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbiBcdHJldHVybiBwYWdlO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSk7XG4tXG4tc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuLXtcbi1cdHJldHVybiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShtYXBwaW5nLCAwLCBMTE9OR19NQVgpO1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChkYXhfbGF5b3V0X2J1c3lfcGFnZSk7XG4gXG4gc3RhdGljIGludCBfX2RheF9pbnZhbGlkYXRlX2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdFx0ICBwZ29mZl90IGluZGV4LCBib29sIHRydW5jKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGF4LmggYi9pbmNsdWRlL2xpbnV4L2RheC5oXG5pbmRleCBmZTZjM2RlZDFiNTBmLi5mMmQ0Nzk3NWQ5MDVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYXguaFxuQEAgLTE1NSw4ICYjNDM7MTU1LDYgQEAgaW50IGRheF93cml0ZWJhY2tfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0c3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiBpbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuLXN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7XG4tc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpO1xuIGRheF9lbnRyeV90IGRheF9sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHZvaWQgZGF4X3VubG9ja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBkYXhfZW50cnlfdCBjb29raWUpO1xuIGRheF9lbnRyeV90IGRheF9sb2NrX21hcHBpbmdfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5AQCAtMTczLDE2ICYjNDM7MTcxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgZnNfZGF4X2dldChzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgdm9pZCAqaG9sZGVyLFxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IG5yX3BhZ2VzKVxuLXtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIGNvbW1lbnRzLCBzY29wZXMgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UoKSB0byBzdGF0aWMsIHJlbW92ZXMgdGhlIHVudXNlZCBoZWxwZXIgZGF4X2xheW91dF9idXN5X3BhZ2UoKSwgYW5kIHJlbW92ZXMgb2Jzb2xldGUgZGVjbGFyYXRpb25zL3N0dWJzIGZyb20gaW5jbHVkZS9saW51eC9kYXguaC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gZXhlY3V0YWJsZSBjb2RlIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGNvbnRyb2wgZmxvdywgb3IgcnVudGltZSBhc3NlcnRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNGExYzgyOWNhOGFiYTk0MTBlNzQwYzZjZWY0NTExNDI3N2NhMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDAzOjI1OjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGF4LmMgYi9mcy9kYXguYwppbmRleCA2YmE1MDE0MmVlYjJmLi44ZTBjZGEzOGU1ZmRhIDEwMDY0NAotLS0gYS9mcy9kYXguYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kYXguYwpAQCAtNzcyLDI0ICYjNDM7NzcyLDIzIEBAIHN0YXRpYyB2b2lkICpncmFiX21hcHBpbmdfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsCiAKIC8qKgogICogZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UgLSBmaW5kIGZpcnN0IHBpbm5lZCBwYWdlIGluIEBtYXBwaW5nCi0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBhZ2Ugd2l0aCByZWYgY291bnQgJmd0OyAxCiYjNDM7ICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2UgdG8gc2NhbiBmb3IgYSBwaW5uZWQgcGFnZQogICogQHN0YXJ0OiBTdGFydGluZyBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAmIzM5O3N0YXJ0JiMzOTsgaXMgaW5jbHVkZWQuCiAgKiBAZW5kOiBFbmQgb2Zmc2V0LiBQYWdlIGNvbnRhaW5pbmcgJiMzOTtlbmQmIzM5OyBpcyBpbmNsdWRlZC4gSWYgJiMzOTtlbmQmIzM5OyBpcyBMTE9OR19NQVgsCiAgKiAgICAgICBwYWdlcyBmcm9tICYjMzk7c3RhcnQmIzM5OyB0aWxsIHRoZSBlbmQgb2YgZmlsZSBhcmUgaW5jbHVkZWQuCiAgKgotICogREFYIHJlcXVpcmVzIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcy4gVGhlc2UgcGFnZXMgYXJlIG5ldmVyCi0gKiAmIzM5O29ubGluZWQmIzM5OyB0byB0aGUgcGFnZSBhbGxvY2F0b3Igc28gdGhleSBhcmUgY29uc2lkZXJlZCBpZGxlIHdoZW4KLSAqIHBhZ2UtJmd0O2NvdW50ID09IDEuIEEgZmlsZXN5c3RlbSB1c2VzIHRoaXMgaW50ZXJmYWNlIHRvIGRldGVybWluZSBpZgotICogYW55IHBhZ2UgaW4gdGhlIG1hcHBpbmcgaXMgYnVzeSwgaS5lLiBmb3IgRE1BLCBvciBvdGhlcgotICogZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuCiYjNDM7ICogREFYIHJlcXVpcmVzIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcy4gQSBwYWdlIGlzIGNvbnNpZGVyZWQgYnVzeSB3aGVuCiYjNDM7ICogZm9saW9fcmVmX2NvdW50KGZvbGlvKSBleGNlZWRzIGZvbGlvX21hcGNvdW50KGZvbGlvKS4gVGhpcyBoZWxwZXIgaXMKJiM0MzsgKiB1c2VkIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZSBpbiB0aGUgbWFwcGluZyBpcyBidXN5LCBpLmUuIGZvciBETUEsCiYjNDM7ICogb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuCiAgKgogICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBob2xkaW5nIGxvY2tzIHRvIGJsb2NrIHRoZQogICogZXN0YWJsaXNobWVudCBvZiBuZXcgbWFwcGluZ3MgaW4gdGhpcyBhZGRyZXNzX3NwYWNlLiBJLmUuIGl0IGV4cGVjdHMKLSAqIHRvIGJlIGFibGUgdG8gcnVuIHVubWFwX21hcHBpbmdfcmFuZ2UoKSBhbmQgc3Vic2VxdWVudGx5IG5vdCByYWNlCiYjNDM7ICogdG8gYmUgYWJsZSB0byBydW4gdW5tYXBfbWFwcGluZ19wYWdlcygpIGFuZCBzdWJzZXF1ZW50bHkgbm90IHJhY2UKICAqIG1hcHBpbmdfbWFwcGVkKCkgYmVjb21pbmcgdHJ1ZS4KICAqLwotc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQlsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkJCSAgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCiB7CiAJdm9pZCAqZW50cnk7CiAJdW5zaWduZWQgaW50IHNjYW5uZWQgPSAwOwpAQCAtODQxLDEzICYjNDM7ODQwLDYgQEAgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCXhhc191bmxvY2tfaXJxKCZhbXA7eGFzKTsKIAlyZXR1cm4gcGFnZTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTsKLQotc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQotewotCXJldHVybiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShtYXBwaW5nLCAwLCBMTE9OR19NQVgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZGF4X2xheW91dF9idXN5X3BhZ2UpOwogCiBzdGF0aWMgaW50IF9fZGF4X2ludmFsaWRhdGVfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJICBwZ29mZl90IGluZGV4LCBib29sIHRydW5jKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYXguaCBiL2luY2x1ZGUvbGludXgvZGF4LmgKaW5kZXggZmU2YzNkZWQxYjUwZi4uZjJkNDc5NzVkOTA1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYXguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RheC5oCkBAIC0xNTUsOCAmIzQzOzE1NSw2IEBAIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiBpbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwotc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpOwogZGF4X2VudHJ5X3QgZGF4X2xvY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiB2b2lkIGRheF91bmxvY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZGF4X2VudHJ5X3QgY29va2llKTsKIGRheF9lbnRyeV90IGRheF9sb2NrX21hcHBpbmdfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCkBAIC0xNzMsMTYgJiM0MzsxNzEsNiBAQCBzdGF0aWMgaW5saW5lIGludCBmc19kYXhfZ2V0KHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCB2b2lkICpob2xkZXIsCiB7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IG5yX3BhZ2VzKQotewotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBWCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgc3ltYm9scyBhcmUgYmVpbmcgbW9kaWZpZWQuCgpTbywgaGVyZSYjMzk7cyB3aGF0IHRoZSBwYXRjaCB0ZWxscyBtZToKCkZpcnN0LCBpbiBgZnMvZGF4LmNgLCB0aGUgY29tbWVudCBmb3IgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQmIzM5O3Mgbm93IGRlY2xhcmVkIGBzdGF0aWNgLiBUaGUgYEVYUE9SVF9TWU1CT0xfR1BMYCBkaXJlY3RpdmVzIGZvciAqYm90aCogYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCBhbmQgYGRheF9sYXlvdXRfYnVzeV9wYWdlYCBoYXZlIGJlZW4gcmVtb3ZlZCwgKmFuZCogdGhlIGBkYXhfbGF5b3V0X2J1c3lfcGFnZWAgZnVuY3Rpb24gaXRzZWxmIGlzIGdvbmUuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQuIFJlbW92aW5nIGBFWFBPUlRfU1lNQk9MX0dQTGAgaW1wbGllcyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBubyBsb25nZXIgaW50ZW5kZWQgdG8gYmUgYXZhaWxhYmxlIG91dHNpZGUgb2YgYGZzL2RheC5jYC4KClRoZW4sIGxvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvZGF4LmhgLCB0aGUgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbnMgYW5kIGlubGluZSBkZWZpbml0aW9ucyBvZiB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBhbHNvIGdvbmUuIFRoaXMgYWxpZ25zIHdpdGggdGhlIGNoYW5nZXMgaW4gYGZzL2RheC5jYCwgY29uZmlybWluZyB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIGJlaW5nIG1hZGUgaW50ZXJuYWwgdG8gdGhlIERBWCBzdWJzeXN0ZW0uCgpOb3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSAqaW1wYWN0KiBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyB3ZXJlIHByZXZpb3VzbHkgdXNlZC4gTGV0IG1lIGNoZWNrIGFyb3VuZCBsaW5lIDc3MiBpbiBgZnMvZGF4LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCB3aXRoaW4gdGhlIGZpbGUgaXRzZWxmLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGtub3cgKndobyogb3IgKndoYXQqIHdhcyBjYWxsaW5nIHRoZW0gYmVmb3JlIHRoaXMuIEFyZSB0aGVyZSBhbnkgZXh0ZXJuYWwgbW9kdWxlcyB0aGF0IHdlcmUgcmVseWluZyBvbiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIG9yIGBkYXhfbGF5b3V0X2J1c3lfcGFnZWA/CgpBIHF1aWNrIGBncmVwYCBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZWJhc2UsIG9yIGEgdGFyZ2V0ZWQgcmVhZGluZyBvZiB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIHRoZWlyIGluY2x1ZGVzLCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEkgbmVlZCB0byBzZWUgaWYgdGhpcyByZW1vdmFsIGJyZWFrcyBhbnl0aGluZy4gSWYgc28sIHdoeSBpcyBpdCBhY2NlcHRhYmxlPyBJcyB0aGVyZSBhIHJlcGxhY2VtZW50IG9yIGFsdGVybmF0aXZlIG1lY2hhbmlzbSBiZWluZyBpbXBsZW1lbnRlZD8gSSBuZWVkIHRoZSBjb250ZXh0IHRvIGZvcm0gYSBwcm9wZXIganVkZ21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGF4X2xheW91dF9idXN5X3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9Njg3PXN0YXRpYyB2b2lkICpncmFiX21hcHBpbmdfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsXG4tLVxuZnMvZGF4LmMtNzczLS8qKlxuZnMvZGF4LmM6Nzc0OiAqIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlIC0gZmluZCBmaXJzdCBwaW5uZWQgcGFnZSBpbiBAbWFwcGluZ1xuZnMvZGF4LmMtNzc1LSAqIEBtYXBwaW5nOiBhZGRyZXNzIHNwYWNlIHRvIHNjYW4gZm9yIGEgcGlubmVkIHBhZ2Vcbi0tXG5mcy9kYXguYy03ODktICovXG5mcy9kYXguYzo3OTA6c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2RheC5jLTc5MS1cdFx0XHRcdFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbi0tXG5mcy9kYXguYz05Njk9aW50IGRheF9icmVha19sYXlvdXQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLS1cbmZzL2RheC5jLTk3OC1cdGRvIHtcbmZzL2RheC5jOjk3OTpcdFx0cGFnZSA9IGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgc3RhcnQsIGVuZCk7XG5mcy9kYXguYy05ODAtXHRcdGlmICghcGFnZSlcbi0tXG5mcy9kYXguYz05OTc9dm9pZCBkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZGF4LmMtMTAwNC1cdGRvIHtcbmZzL2RheC5jOjEwMDU6XHRcdHBhZ2UgPSBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIDAsXG5mcy9kYXguYy0xMDA2LVx0XHRcdFx0XHRcdExMT05HX01BWCk7XG4tLVxuZnMvZnVzZS9kYXguYz00MzE9c3RhdGljIGludCBmdXNlX3NldHVwX25ld19kYXhfbWFwcGluZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLFxuLS1cbmZzL2Z1c2UvZGF4LmMtNDQ1LVx0ICogQ2FuJiMzOTt0IGRvIGlubGluZSByZWNsYWltIGluIGZhdWx0IHBhdGguIFdlIGNhbGxcbmZzL2Z1c2UvZGF4LmM6NDQ2Olx0ICogZGF4X2xheW91dF9idXN5X3BhZ2UoKSBiZWZvcmUgd2UgZnJlZSBhIHJhbmdlLiBBbmRcbmZzL2Z1c2UvZGF4LmMtNDQ3LVx0ICogZnVzZV93YWl0X2RheF9wYWdlKCkgZHJvcHMgbWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2sgYW5kIHJlcXVpcmVzIGl0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHJldmlldzoKCioqRGl2aW5nIGludG8gYGZzL2RheC5jYCBmb3IgREFYIEltcGxlbWVudGF0aW9uIERldGFpbHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBEQVggaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCByZWdpb24gYXJvdW5kIGxpbmVzIDc3MC0xMDEwIGluIGBmcy9kYXguY2AuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBuZWNlc3NhcnkgY29kZSBibG9ja3MuIEkmIzM5O20gbm90IGxvb2tpbmcgZm9yIGEgZ2VuZXJhbCBvdmVydmlldzsgSSYjMzk7bSBhZnRlciB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IERBWCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZXN5c3RlbS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBrZXkgYXNwZWN0cyBvZiB0aGUgREFYIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMgY29kZSBzZWN0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBkYXRhIGFjY2VzcyBtZWNoYW5pc21zLCBwZXJoYXBzIHRoZSBtYXBwaW5ncywgY2FjaGluZywgZGlyZWN0IGFjY2Vzcywgb3IgdGhlIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcgbG9naWMgZm9yIERBWCBkZXZpY2VzLCByZXNpZGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBhdG9taWNpdHkgZ3VhcmFudGVlcyBvciBhbnkgZGlyZWN0LWFjY2Vzcy1yZWxhdGVkIGFzcGVjdHMuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kYXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzcwOlx0XHRyZXR1cm4geGFfbWtfaW50ZXJuYWwoVk1fRkFVTFRfRkFMTEJBQ0spO1xuIDc3MTpcdH1cbiA3NzI6XHRcbiA3NzM6XHQvKipcbiA3NzQ6XHQgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSAtIGZpbmQgZmlyc3QgcGlubmVkIHBhZ2UgaW4gQG1hcHBpbmdcbiA3NzU6XHQgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBpbm5lZCBwYWdlXG4gNzc2Olx0ICogQHN0YXJ0OiBTdGFydGluZyBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAmIzM5O3N0YXJ0JiMzOTsgaXMgaW5jbHVkZWQuXG4gNzc3Olx0ICogQGVuZDogRW5kIG9mZnNldC4gUGFnZSBjb250YWluaW5nICYjMzk7ZW5kJiMzOTsgaXMgaW5jbHVkZWQuIElmICYjMzk7ZW5kJiMzOTsgaXMgTExPTkdfTUFYLFxuIDc3ODpcdCAqICAgICAgIHBhZ2VzIGZyb20gJiMzOTtzdGFydCYjMzk7IHRpbGwgdGhlIGVuZCBvZiBmaWxlIGFyZSBpbmNsdWRlZC5cbiA3Nzk6XHQgKlxuIDc4MDpcdCAqIERBWCByZXF1aXJlcyBaT05FX0RFVklDRSBtYXBwZWQgcGFnZXMuIEEgcGFnZSBpcyBjb25zaWRlcmVkIGJ1c3kgd2hlblxuIDc4MTpcdCAqIGZvbGlvX3JlZl9jb3VudChmb2xpbykgZXhjZWVkcyBmb2xpb19tYXBjb3VudChmb2xpbykuIFRoaXMgaGVscGVyIGlzXG4gNzgyOlx0ICogdXNlZCB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2UgaW4gdGhlIG1hcHBpbmcgaXMgYnVzeSwgaS5lLiBmb3IgRE1BLFxuIDc4MzpcdCAqIG9yIG90aGVyIGdldF91c2VyX3BhZ2VzKCkgdXNhZ2VzLlxuIDc4NDpcdCAqXG4gNzg1Olx0ICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBob2xkaW5nIGxvY2tzIHRvIGJsb2NrIHRoZVxuIDc4NjpcdCAqIGVzdGFibGlzaG1lbnQgb2YgbmV3IG1hcHBpbmdzIGluIHRoaXMgYWRkcmVzc19zcGFjZS4gSS5lLiBpdCBleHBlY3RzXG4gNzg3Olx0ICogdG8gYmUgYWJsZSB0byBydW4gdW5tYXBfbWFwcGluZ19wYWdlcygpIGFuZCBzdWJzZXF1ZW50bHkgbm90IHJhY2VcbiA3ODg6XHQgKiBtYXBwaW5nX21hcHBlZCgpIGJlY29taW5nIHRydWUuXG4gNzg5Olx0ICovXG4gNzkwOlx0c3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiA3OTE6XHRcdFx0XHRcdFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcbiA3OTI6XHR7XG4gNzkzOlx0XHR2b2lkICplbnRyeTtcbiA3OTQ6XHRcdHVuc2lnbmVkIGludCBzY2FubmVkID0gMDtcbiA3OTU6XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiA3OTY6XHRcdHBnb2ZmX3Qgc3RhcnRfaWR4ID0gc3RhcnQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gNzk3Olx0XHRwZ29mZl90IGVuZF9pZHg7XG4gNzk4Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcywgc3RhcnRfaWR4KTtcbiA3OTk6XHRcbiA4MDA6XHRcdGlmICghZGF4X21hcHBpbmcobWFwcGluZykpXG4gODAxOlx0XHRcdHJldHVybiBOVUxMO1xuIDgwMjpcdFxuIDgwMzpcdFx0LyogSWYgZW5kID09IExMT05HX01BWCwgYWxsIHBhZ2VzIGZyb20gc3RhcnQgdG8gdGlsbCBlbmQgb2YgZmlsZSAqL1xuIDgwNDpcdFx0aWYgKGVuZCA9PSBMTE9OR19NQVgpXG4gODA1Olx0XHRcdGVuZF9pZHggPSBVTE9OR19NQVg7XG4gODA2Olx0XHRlbHNlXG4gODA3Olx0XHRcdGVuZF9pZHggPSBlbmQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gODA4Olx0XHQvKlxuIDgwOTpcdFx0ICogSWYgd2UgcmFjZSBnZXRfdXNlcl9wYWdlc19mYXN0KCkgaGVyZSBlaXRoZXIgd2UmIzM5O2xsIHNlZSB0aGVcbiA4MTA6XHRcdCAqIGVsZXZhdGVkIHBhZ2UgY291bnQgaW4gdGhlIGl0ZXJhdGlvbiBhbmQgd2FpdCwgb3JcbiA4MTE6XHRcdCAqIGdldF91c2VyX3BhZ2VzX2Zhc3QoKSB3aWxsIHNlZSB0aGF0IHRoZSBwYWdlIGl0IHRvb2sgYSByZWZlcmVuY2VcbiA4MTI6XHRcdCAqIGFnYWluc3QgaXMgbm8gbG9uZ2VyIG1hcHBlZCBpbiB0aGUgcGFnZSB0YWJsZXMgYW5kIGJhaWwgdG8gdGhlXG4gODEzOlx0XHQgKiBnZXRfdXNlcl9wYWdlcygpIHNsb3cgcGF0aC4gIFRoZSBzbG93IHBhdGggaXMgcHJvdGVjdGVkIGJ5XG4gODE0Olx0XHQgKiBwdGVfbG9jaygpIGFuZCBwbWRfbG9jaygpLiBOZXcgcmVmZXJlbmNlcyBhcmUgbm90IHRha2VuIHdpdGhvdXRcbiA4MTU6XHRcdCAqIGhvbGRpbmcgdGhvc2UgbG9ja3MsIGFuZCB1bm1hcF9tYXBwaW5nX3BhZ2VzKCkgd2lsbCBub3QgemVybyB0aGVcbiA4MTY6XHRcdCAqIHB0ZSBvciBwbWQgd2l0aG91dCBob2xkaW5nIHRoZSByZXNwZWN0aXZlIGxvY2ssIHNvIHdlIGFyZVxuIDgxNzpcdFx0ICogZ3VhcmFudGVlZCB0byBlaXRoZXIgc2VlIG5ldyByZWZlcmVuY2VzIG9yIHByZXZlbnQgbmV3XG4gODE4Olx0XHQgKiByZWZlcmVuY2VzIGZyb20gYmVpbmcgZXN0YWJsaXNoZWQuXG4gODE5Olx0XHQgKi9cbiA4MjA6XHRcdHVubWFwX21hcHBpbmdfcGFnZXMobWFwcGluZywgc3RhcnRfaWR4LCBlbmRfaWR4IC0gc3RhcnRfaWR4ICYjNDM7IDEsIDApO1xuIDgyMTpcdFxuIDgyMjpcdFx0eGFzX2xvY2tfaXJxKFx1MDAyNnhhcyk7XG4gODIzOlx0XHR4YXNfZm9yX2VhY2goXHUwMDI2eGFzLCBlbnRyeSwgZW5kX2lkeCkge1xuIDgyNDpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKCF4YV9pc192YWx1ZShlbnRyeSkpKVxuIDgyNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDgyNjpcdFx0XHRlbnRyeSA9IHdhaXRfZW50cnlfdW5sb2NrZWRfZXhjbHVzaXZlKFx1MDAyNnhhcywgZW50cnkpO1xuIDgyNzpcdFx0XHRpZiAoZW50cnkpXG4gODI4Olx0XHRcdFx0cGFnZSA9IGRheF9idXN5X3BhZ2UoZW50cnkpO1xuIDgyOTpcdFx0XHRwdXRfdW5sb2NrZWRfZW50cnkoXHUwMDI2eGFzLCBlbnRyeSwgV0FLRV9ORVhUKTtcbiA4MzA6XHRcdFx0aWYgKHBhZ2UpXG4gODMxOlx0XHRcdFx0YnJlYWs7XG4gODMyOlx0XHRcdGlmICgmIzQzOyYjNDM7c2Nhbm5lZCAlIFhBX0NIRUNLX1NDSEVEKVxuIDgzMzpcdFx0XHRcdGNvbnRpbnVlO1xuIDgzNDpcdFxuIDgzNTpcdFx0XHR4YXNfcGF1c2UoXHUwMDI2eGFzKTtcbiA4MzY6XHRcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbiA4Mzc6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gODM4Olx0XHRcdHhhc19sb2NrX2lycShcdTAwMjZ4YXMpO1xuIDgzOTpcdFx0fVxuIDg0MDpcdFx0eGFzX3VubG9ja19pcnEoXHUwMDI2eGFzKTtcbiA4NDE6XHRcdHJldHVybiBwYWdlO1xuIDg0MjpcdH1cbiA4NDM6XHRcbiA4NDQ6XHRzdGF0aWMgaW50IF9fZGF4X2ludmFsaWRhdGVfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gODQ1Olx0XHRcdFx0XHQgIHBnb2ZmX3QgaW5kZXgsIGJvb2wgdHJ1bmMpXG4gODQ2Olx0e1xuIDg0NzpcdFx0WEFfU1RBVEUoeGFzLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWlfcGFnZXMsIGluZGV4KTtcbiA4NDg6XHRcdGludCByZXQgPSAwO1xuIDg0OTpcdFx0dm9pZCAqZW50cnk7XG4gODUwOlx0XG4gODUxOlx0XHR4YXNfbG9ja19pcnEoXHUwMDI2eGFzKTtcbiA4NTI6XHRcdGVudHJ5ID0gZ2V0X25leHRfdW5sb2NrZWRfZW50cnkoXHUwMDI2eGFzLCAwKTtcbiA4NTM6XHRcdGlmICghZW50cnkgfHwgV0FSTl9PTl9PTkNFKCF4YV9pc192YWx1ZShlbnRyeSkpKVxuIDg1NDpcdFx0XHRnb3RvIG91dDtcbiA4NTU6XHRcdGlmICghdHJ1bmMgXHUwMDI2XHUwMDI2XG4gODU2Olx0XHQgICAgKHhhc19nZXRfbWFyayhcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfRElSVFkpIHx8XG4gODU3Olx0XHQgICAgIHhhc19nZXRfbWFyayhcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfVE9XUklURSkpKVxuIDg1ODpcdFx0XHRnb3RvIG91dDtcbiA4NTk6XHRcdGRheF9kaXNhc3NvY2lhdGVfZW50cnkoZW50cnksIG1hcHBpbmcsIHRydW5jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTYyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTQ1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBWCBMYXlvdXQgQnVzeSBQYWdlIFJlbW92YWwqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgZGF4X2xheW91dF9idXN5X3BhZ2VgIHdhcyBqdXN0IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLiBCb3RoIHdlcmUgdW5leHBvcnRlZCwgYW5kIHRoZSBmb3JtZXIgd2FzIHNpbXBseSByZW1vdmVkIGJlY2F1c2Ugbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGNhbGxlcnMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGBkYXhfYnJlYWtfbGF5b3V0YCwgYGRheF9icmVha19sYXlvdXRfZmluYWxgIG9yIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAgZGlyZWN0bHkgd2l0aGluIGBmcy9kYXguY2AuCgpOb3csIHRoZSBjcml0aWNhbCBwYXJ0OiB3aGF0IGFjdHVhbGx5IGNoYW5nZWQgaW4gdGhlICpjb2RlKj8gVGhlIGRpZmYgc2hvd3MgdGhhdCB0aGUgZnVuY3Rpb24mIzM5O3MgZG9jdW1lbnRhdGlvbiBub3cgY2xhcmlmaWVzIHRoYXQgYSAmIzM0O2J1c3kmIzM0OyBwYWdlIGlzIGNvbnNpZGVyZWQgYnVzeSB3aGVuIGBmb2xpb19yZWZfY291bnQoZm9saW8pYCBleGNlZWRzIGBmb2xpb19tYXBjb3VudChmb2xpbylgLiBQcmV2aW91c2x5LCBpdCBtZW50aW9uZWQgdGhhdCBEQVggcmVxdWlyZWQgWk9ORV9ERVZJQ0UgbWFwcGVkIHBhZ2VzLCB3aGljaCB3ZXJlIGNvbnNpZGVyZWQgaWRsZSB3aGVuIHBhZ2UtJmd0O2NvdW50ID09IDEsIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgYXMgdGhlIGNyaXRlcmlhIGZvciB3aGF0IGNvbnN0aXR1dGVzIGEgYnVzeSBwYWdlLiBUaGUgZGVzY3JpcHRpb24gb2YgaG93IHRoaXMgaGVscGVyIGlzIHVzZWQgYWxzbyBub3cgc3RhdGVzIHRoYXQgaXQgaXMgbWVhbnQgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSwgb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuIEFsc28sIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBydW4gYHVubWFwX21hcHBpbmdfcGFnZXMoKWAgaW5zdGVhZCBvZiBgdW5tYXBfbWFwcGluZ19yYW5nZSgpYCwgYW5kIHRoZW4gbm90IHJhY2UgYG1hcHBpbmdfbWFwcGVkKClgIGJlY29taW5nIHRydWUuCgpJJiMzOTttIGFsc28gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBnaXQgbG9nL2RpZmYgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIHRoYXQgSSBtaWdodCBiZSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RheF9icmVha19sYXlvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGF4LmM9OTU1PXN0YXRpYyB2b2lkIHdhaXRfcGFnZV9pZGxlX3VuaW50ZXJydXB0aWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5mcy9kYXguYy05NjgtICovXG5mcy9kYXguYzo5Njk6aW50IGRheF9icmVha19sYXlvdXQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuZnMvZGF4LmMtOTcwLVx0XHR2b2lkIChjYikoc3RydWN0IGlub2RlICopKVxuLS1cbmZzL2RheC5jLTk5NC19XG5mcy9kYXguYzo5OTU6RVhQT1JUX1NZTUJPTF9HUEwoZGF4X2JyZWFrX2xheW91dCk7XG5mcy9kYXguYy05OTYtXG5mcy9kYXguYzo5OTc6dm9pZCBkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9kYXguYy05OTgte1xuLS1cbmZzL2RheC5jLTEwMTUtfVxuZnMvZGF4LmM6MTAxNjpFWFBPUlRfU1lNQk9MX0dQTChkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKTtcbmZzL2RheC5jLTEwMTctXG4tLVxuZnMvZXJvZnMvc3VwZXIuYz0xMTIzPXN0YXRpYyB2b2lkIGVyb2ZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy0xMTI1LVx0aWYgKElTX0RBWChpbm9kZSkpXG5mcy9lcm9mcy9zdXBlci5jOjExMjY6XHRcdGRheF9icmVha19sYXlvdXRfZmluYWwoaW5vZGUpO1xuZnMvZXJvZnMvc3VwZXIuYy0xMTI3LVx0ZXJvZnNfaXNoYXJlX2ZyZWVfaW5vZGUoaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE4Mi1cbmZzL2V4dDQvaW5vZGUuYzoxODM6XHRkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy0xODQtXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQ0Mzk9aW50IGV4dDRfYnJlYWtfbGF5b3V0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00NDQzLVxuZnMvZXh0NC9pbm9kZS5jOjQ0NDQ6XHRyZXR1cm4gZGF4X2JyZWFrX2xheW91dF9pbm9kZShpbm9kZSwgZXh0NF93YWl0X2RheF9wYWdlKTtcbmZzL2V4dDQvaW5vZGUuYy00NDQ1LX1cbi0tXG5mcy9mdXNlL2RheC5jPTY2Mz1zdGF0aWMgdm9pZCBmdXNlX3dhaXRfZGF4X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9mdXNlL2RheC5jLTY3MC0vKiBTaG91bGQgYmUgY2FsbGVkIHdpdGggbWFwcGluZy1cdTAwM2VpbnZhbGlkYXRlX2xvY2sgaGVsZCBleGNsdXNpdmVseS4gKi9cbmZzL2Z1c2UvZGF4LmM6NjcxOmludCBmdXNlX2RheF9icmVha19sYXlvdXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBkbWFwX3N0YXJ0LFxuZnMvZnVzZS9kYXguYy02NzItXHRcdFx0XHQgIHU2NCBkbWFwX2VuZClcbmZzL2Z1c2UvZGF4LmMtNjczLXtcbmZzL2Z1c2UvZGF4LmM6Njc0Olx0cmV0dXJuIGRheF9icmVha19sYXlvdXQoaW5vZGUsIGRtYXBfc3RhcnQsIGRtYXBfZW5kLFxuZnMvZnVzZS9kYXguYy02NzUtXHRcdFx0XHRmdXNlX3dhaXRfZGF4X3BhZ2UpO1xuLS1cbmZzL2Z1c2UvZGF4LmM9OTE0PWlub2RlX2lubGluZV9yZWNsYWltX29uZV9kbWFwKHN0cnVjdCBmdXNlX2Nvbm5fZGF4ICpmY2QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZnVzZS9kYXguYy05NDEtXHQgKi9cbmZzL2Z1c2UvZGF4LmM6OTQyOlx0cmV0ID0gZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhpbm9kZSwgZG1hcF9zdGFydCwgZG1hcF9lbmQpO1xuZnMvZnVzZS9kYXguYy05NDMtXHRpZiAocmV0KSB7XG5mcy9mdXNlL2RheC5jOjk0NDpcdFx0cHJfZGVidWcoXCYjMzQ7ZnVzZTogZnVzZV9kYXhfYnJlYWtfbGF5b3V0cygpIGZhaWxlZC4gZXJyPSVkXFxuXCYjMzQ7LFxuZnMvZnVzZS9kYXguYy05NDUtXHRcdFx0IHJldCk7XG4tLVxuZnMvZnVzZS9kYXguYz0xMDc2PXN0YXRpYyBpbnQgbG9va3VwX2FuZF9yZWNsYWltX2RtYXAoc3RydWN0IGZ1c2VfY29ubl9kYXggKmZjZCxcbi0tXG5mcy9mdXNlL2RheC5jLTEwODYtXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuZnMvZnVzZS9kYXguYzoxMDg3Olx0cmV0ID0gZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhpbm9kZSwgZG1hcF9zdGFydCwgZG1hcF9lbmQpO1xuZnMvZnVzZS9kYXguYy0xMDg4LVx0aWYgKHJldCkge1xuZnMvZnVzZS9kYXguYzoxMDg5Olx0XHRwcl9kZWJ1ZyhcJiMzNDt2aXJ0aW9fZnM6IGZ1c2VfZGF4X2JyZWFrX2xheW91dHMoKSBmYWlsZWQuIGVycj0lZFxcblwmIzM0OyxcbmZzL2Z1c2UvZGF4LmMtMTA5MC1cdFx0XHQgcmV0KTtcbi0tXG5mcy9mdXNlL2Rpci5jPTIxNDg9aW50IGZ1c2VfZG9fc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2Z1c2UvZGlyLmMtMjE4Mi1cdFx0ZmF1bHRfYmxvY2tlZCA9IHRydWU7XG5mcy9mdXNlL2Rpci5jOjIxODM6XHRcdGVyciA9IGZ1c2VfZGF4X2JyZWFrX2xheW91dHMoaW5vZGUsIDAsIC0xKTtcbmZzL2Z1c2UvZGlyLmMtMjE4NC1cdFx0aWYgKGVycilcbi0tXG5mcy9mdXNlL2ZpbGUuYz0yNTA9c3RhdGljIGludCBmdXNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvZnVzZS9maWxlLmMtMjcyLVx0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuZnMvZnVzZS9maWxlLmM6MjczOlx0XHRlcnIgPSBmdXNlX2RheF9icmVha19sYXlvdXRzKGlub2RlLCAwLCAtMSk7XG5mcy9mdXNlL2ZpbGUuYy0yNzQtXHRcdGlmIChlcnIpXG4tLVxuZnMvZnVzZS9maWxlLmM9MjgzMz1zdGF0aWMgbG9uZyBmdXNlX2ZpbGVfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yODYxLVx0XHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuZnMvZnVzZS9maWxlLmM6Mjg2MjpcdFx0ZXJyID0gZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhpbm9kZSwgMCwgLTEpO1xuZnMvZnVzZS9maWxlLmMtMjg2My1cdFx0aWYgKGVycilcbi0tXG5mcy9mdXNlL2Z1c2VfaS5oPTEyMjQ9aW50IGZ1c2VfZGF4X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbmZzL2Z1c2UvZnVzZV9pLmg6MTIyNTppbnQgZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZG1hcF9zdGFydCwgdTY0IGRtYXBfZW5kKTtcbmZzL2Z1c2UvZnVzZV9pLmgtMTIyNi1pbnQgZnVzZV9kYXhfY29ubl9hbGxvYyhzdHJ1Y3QgZnVzZV9jb25uICpmYywgZW51bSBmdXNlX2RheF9tb2RlIG1vZGUsXG4tLVxuZnMvZnVzZS9pbm9kZS5jPTE0ND1zdGF0aWMgdm9pZCBmdXNlX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTE1MS1cdGlmIChGVVNFX0lTX0RBWChpbm9kZSkpXG5mcy9mdXNlL2lub2RlLmM6MTUyOlx0XHRkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKGlub2RlKTtcbmZzL2Z1c2UvaW5vZGUuYy0xNTMtXG4tLVxuZnMveGZzL3hmc19pbm9kZS5jPTI3NDk9eGZzX21tYXBsb2NrX3R3b19pbm9kZXNfYW5kX2JyZWFrX2RheF9sYXlvdXQoXG4tLVxuZnMveGZzL3hmc19pbm9kZS5jLTI3NzYtXHQgKi9cbmZzL3hmcy94ZnNfaW5vZGUuYzoyNzc3Olx0ZXJyb3IgPSBkYXhfYnJlYWtfbGF5b3V0KFZGU19JKGlwMiksIDAsIC0xLCBOVUxMKTtcbmZzL3hmcy94ZnNfaW5vZGUuYy0yNzc4LVx0aWYgKGVycm9yKSB7XG4tLVxuZnMveGZzL3hmc19pbm9kZS5jPTMwMTg9eGZzX2JyZWFrX2RheF9sYXlvdXRzKFxuLS1cbmZzL3hmcy94ZnNfaW5vZGUuYy0zMDIyLVxuZnMveGZzL3hmc19pbm9kZS5jOjMwMjM6XHRyZXR1cm4gZGF4X2JyZWFrX2xheW91dF9pbm9kZShpbm9kZSwgeGZzX3dhaXRfZGF4X3BhZ2UpO1xuZnMveGZzL3hmc19pbm9kZS5jLTMwMjQtfVxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYz04MjI9eGZzX2ZzX2V2aWN0X2lub2RlKFxuLS1cbmZzL3hmcy94ZnNfc3VwZXIuYy04MjUtXHRpZiAoSVNfREFYKGlub2RlKSlcbmZzL3hmcy94ZnNfc3VwZXIuYzo4MjY6XHRcdGRheF9icmVha19sYXlvdXRfZmluYWwoaW5vZGUpO1xuZnMveGZzL3hmc19zdXBlci5jLTgyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMzoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDgwNQoJCQkJCQkJb3V0cHV0OiAxMDEKCQkJCQkJCXRob3VnaHRzOiAxNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBEZWFkIENvZGUgUmVtb3ZhbCAmYW1wOyBTY29wZSBSZXN0cmljdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBUaGUgaW5pdGlhbCBzdGVwcyBpbnZvbHZlZCBpZGVudGlmeWluZyB0aGUgY29yZSBjaGFuZ2VzOiBhIGZ1bmN0aW9uLCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLCB3YXMgbWFkZSBgc3RhdGljYCBhbmQgaXRzIGV4cG9ydCBzeW1ib2wgcmVtb3ZlZC4gVGhlIHVudXNlZCB3cmFwcGVyIGBkYXhfbGF5b3V0X2J1c3lfcGFnZWAgaGFzIGJlZW4gY29tcGxldGVseSBkZWxldGVkLCBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIGV4cG9ydC4gRGVjbGFyYXRpb25zIGFuZCBpbmxpbmVzIGZyb20gYGluY2x1ZGUvbGludXgvZGF4LmhgIHdlcmUgYWxzbyByZW1vdmVkLiBGaW5hbGx5LCBzb21lIGNvbW1lbnRzIGluIGBmcy9kYXguY2Agd2VyZSB1cGRhdGVkLgoKVGhlIGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgdG91Y2ggKmV4ZWN1dGFibGUqIGNvZGUgbG9naWMuIE1ha2luZyBhIGZ1bmN0aW9uIGBzdGF0aWNgLCByZW1vdmluZyB1bnVzZWQgZXhwb3J0cywgYW5kIGdldHRpbmcgcmlkIG9mIHVudXNlZCBpbmxpbmUgZGVjbGFyYXRpb25zICpzaG91bGRuJiMzOTt0KiBhbHRlciBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgcnVudGltZSBhc3NlcnRpb25zLCBvciBmdW5kYW1lbnRhbGx5IGNoYW5nZSBob3cgdGhlIGtlcm5lbCBvcGVyYXRlcy4gQnV0LCBvZiBjb3Vyc2UsIGEgcXVpY2sgcmUtcmVhZCBvZiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgaXMgaW4gb3JkZXIuIEl0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgYnVpbGQgc3lzdGVtcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBDIGxvZ2ljLCBhbmQgdW5yZWFjaGFibGUgY29kZSwgYXJlIGFsbCBhcmVhcyB3aGVyZSBmdXp6aW5nIGNhbiBiZSBza2lwcGVkLgoKVGhlbiBhIGNoZWNrIHRvIHRoZSBwb3NpdGl2ZSBzZWN0aW9uIGVuc3VyZXMgdGhpcyBjaGFuZ2UgZG9lcyAqbm90KiBmYWxsIHVuZGVyIGNvcmUgc3Vic3lzdGVtcywgcmVmYWN0b3JpbmdzLCBydW50aW1lIGFzc2VydGlvbnMsIG9yIHJlYWNoYWJsZSBkcml2ZXJzLgoKU28sIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkaWZmcyBsaW5lIGJ5IGxpbmUuIEZvY3VzaW5nIG9uIGBmcy9kYXguY2AsIHRoZSBjaGFuZ2VzIGJvaWwgZG93biB0bzogY29tbWVudHMgdXBkYXRlZCwgYHN0YXRpY2AgYWRkZWQgdG8gYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgaXRzIGV4cG9ydCByZW1vdmVkLCBhbmQgcmVtb3ZhbCBvZiB0aGUgZGVhZCBmdW5jdGlvbiBgZGF4X2xheW91dF9idXN5X3BhZ2VgIGFuZCBpdHMgZXhwb3J0LiBOb3RoaW5nIHdpdGhpbiB0aGUgY29yZSBsb2dpYyBvZiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIG9yIGFueSBvdGhlciBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGhhcyBiZWVuIGNoYW5nZWQuIExvb2tpbmcgYXQgdGhlIGhlYWRlciwgdGhlIHByb3RvdHlwZSBhbmQgc3R1YnMgd2VyZSBhbHNvIHJlbW92ZWQuIFRoaXMgaXMgYWxsIGRlYWQgY29kZSByZW1vdmFsLCBmdW5jdGlvbiB1bmV4cG9ydGluZywgYW5kIHNjb3BpbmcuCgpUaGUgY29yZSBxdWVzdGlvbiB0aGVuIGlzOiBEb2VzIHJlbW92aW5nIGRlYWQgY29kZSwgdW5leHBvcnRpbmcgZnVuY3Rpb25zLCBvciBtYXJraW5nIHNvbWV0aGluZyBgc3RhdGljYCB3YXJyYW50IGZ1enppbmc/IFRoaW5raW5nIHRocm91Z2ggdGhlIHByb21wdCYjMzk7cyBnb2FsIG9mIGZpbmRpbmcgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIG5ldyBidWdzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVzZSBjaGFuZ2VzICpzaG91bGRuJiMzOTt0Ki4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIHJlbWFpbnMgaW50YWN0LiBUaGVyZSBhcmUgbm8gbmV3IGNvZGUgcGF0aHMsIG5vIGFsdGVyZWQgY29udHJvbCBmbG93LCBubyBuZXcgYXNzZXJ0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBjaGFuZ2VzIHRvIHVuZGVybHlpbmcgbG9naWMuCgpUbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBjaGVjayBvZiBgZnMvZGF4LmNgIHdpdGggYGdpdCBkaWZmYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyLCBzdWJ0bGUgY2hhbmdlcy4gSXQgaXMgYWxzbyBnb29kIHRvIHZlcmlmeSB0aGUgc2NvcGUgb2YgdGhlIHJlbW92ZWQgc3ltYm9scy4gSXQgaXMgY2xlYXIgdGhhdCB0aGUgZnVuY3Rpb24gYGRheF9sYXlvdXRfYnVzeV9wYWdlYCB3YXMgbmV2ZXIgdXNlZCwgYW5kIHRoZSBvdGhlciBmdW5jdGlvbiYjMzk7cyBib2R5IHdhcyBuZXZlciBtb2RpZmllZC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBzYWZlIHRvIHNheTogYFdvcnRoRnV6emluZzogZmFsc2VgLgoKVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIGNvbW1lbnQgdXBkYXRlcywgbWFraW5nIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSgpYCBzdGF0aWMsIHJlbW92aW5nIHRoZSB1bnVzZWQgd3JhcHBlciBgZGF4X2xheW91dF9idXN5X3BhZ2UoKWAsIGFuZCBkZWxldGluZyB1bnVzZWQgZGVjbGFyYXRpb25zLiBOb25lIG9mIHRoZXNlIGFmZmVjdCBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgdGhlIGludHJvZHVjdGlvbi9yZW1vdmFsIG9mIGFzc2VydGlvbnMuCgpgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGFyZSB0aGVyZWZvcmUgYm90aCBlbXB0eS4gQSBmaW5hbCBxdWljayB2ZXJpZmljYXRpb24gYW5kIHRoZSByZXN1bHQgaXMgcmVhZHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAzOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIGNvbW1lbnRzLCBzY29wZXMgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UoKSB0byBzdGF0aWMsIHJlbW92ZXMgdGhlIHVudXNlZCBoZWxwZXIgZGF4X2xheW91dF9idXN5X3BhZ2UoKSwgYW5kIHJlbW92ZXMgb2Jzb2xldGUgZGVjbGFyYXRpb25zL3N0dWJzIGZyb20gaW5jbHVkZS9saW51eC9kYXguaC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gZXhlY3V0YWJsZSBjb2RlIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGNvbnRyb2wgZmxvdywgb3IgcnVudGltZSBhc3NlcnRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSB1cGRhdGVzIGNvbW1lbnRzLCBzY29wZXMgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UoKSB0byBzdGF0aWMsIHJlbW92ZXMgdGhlIHVudXNlZCBoZWxwZXIgZGF4X2xheW91dF9idXN5X3BhZ2UoKSwgYW5kIHJlbW92ZXMgb2Jzb2xldGUgZGVjbGFyYXRpb25zL3N0dWJzIGZyb20gaW5jbHVkZS9saW51eC9kYXguaC4gVGhlcmUgYXJlIG5vIG1vZGlmaWNhdGlvbnMgdG8gZXhlY3V0YWJsZSBjb2RlIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZXMsIGNvbnRyb2wgZmxvdywgb3IgcnVudGltZSBhc3NlcnRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDM6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjE2LjEzMjA3MTE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NDI5OTc4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IHVwZGF0ZXMgY29tbWVudHMsIHNjb3BlcyBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSgpIHRvIHN0YXRpYywgcmVtb3ZlcyB0aGUgdW51c2VkIGhlbHBlciBkYXhfbGF5b3V0X2J1c3lfcGFnZSgpLCBhbmQgcmVtb3ZlcyBvYnNvbGV0ZSBkZWNsYXJhdGlvbnMvc3R1YnMgZnJvbSBpbmNsdWRlL2xpbnV4L2RheC5oLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBleGVjdXRhYmxlIGNvZGUgbG9naWMsIGRhdGEgc3RydWN0dXJlcywgY29udHJvbCBmbG93LCBvciBydW50aW1lIGFzc2VydGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzoyNToxNi4xMzIwODEyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MDEyODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2Q0YTFjODI5Y2E4YWJhOTQxMGU3NDBjNmNlZjQ1MTE0Mjc3Y2ExOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDAzOjI1OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2RheC5jIGIvZnMvZGF4LmNcXG5pbmRleCA2YmE1MDE0MmVlYjJmLi44ZTBjZGEzOGU1ZmRhIDEwMDY0NFxcbi0tLSBhL2ZzL2RheC5jXFxuKysrIGIvZnMvZGF4LmNcXG5AQCAtNzcyLDI0ICs3NzIsMjMgQEAgc3RhdGljIHZvaWQgKmdyYWJfbWFwcGluZ19lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcXG4gXFxuIC8qKlxcbiAgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSAtIGZpbmQgZmlyc3QgcGlubmVkIHBhZ2UgaW4gQG1hcHBpbmdcXG4tICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2UgdG8gc2NhbiBmb3IgYSBwYWdlIHdpdGggcmVmIGNvdW50IFxcdTAwM2UgMVxcbisgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBpbm5lZCBwYWdlXFxuICAqIEBzdGFydDogU3RhcnRpbmcgb2Zmc2V0LiBQYWdlIGNvbnRhaW5pbmcgJ3N0YXJ0JyBpcyBpbmNsdWRlZC5cXG4gICogQGVuZDogRW5kIG9mZnNldC4gUGFnZSBjb250YWluaW5nICdlbmQnIGlzIGluY2x1ZGVkLiBJZiAnZW5kJyBpcyBMTE9OR19NQVgsXFxuICAqICAgICAgIHBhZ2VzIGZyb20gJ3N0YXJ0JyB0aWxsIHRoZSBlbmQgb2YgZmlsZSBhcmUgaW5jbHVkZWQuXFxuICAqXFxuLSAqIERBWCByZXF1aXJlcyBaT05FX0RFVklDRSBtYXBwZWQgcGFnZXMuIFRoZXNlIHBhZ2VzIGFyZSBuZXZlclxcbi0gKiAnb25saW5lZCcgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yIHNvIHRoZXkgYXJlIGNvbnNpZGVyZWQgaWRsZSB3aGVuXFxuLSAqIHBhZ2UtXFx1MDAzZWNvdW50ID09IDEuIEEgZmlsZXN5c3RlbSB1c2VzIHRoaXMgaW50ZXJmYWNlIHRvIGRldGVybWluZSBpZlxcbi0gKiBhbnkgcGFnZSBpbiB0aGUgbWFwcGluZyBpcyBidXN5LCBpLmUuIGZvciBETUEsIG9yIG90aGVyXFxuLSAqIGdldF91c2VyX3BhZ2VzKCkgdXNhZ2VzLlxcbisgKiBEQVggcmVxdWlyZXMgWk9ORV9ERVZJQ0UgbWFwcGVkIHBhZ2VzLiBBIHBhZ2UgaXMgY29uc2lkZXJlZCBidXN5IHdoZW5cXG4rICogZm9saW9fcmVmX2NvdW50KGZvbGlvKSBleGNlZWRzIGZvbGlvX21hcGNvdW50KGZvbGlvKS4gVGhpcyBoZWxwZXIgaXNcXG4rICogdXNlZCB0byBkZXRlcm1pbmUgaWYgYW55IHBhZ2UgaW4gdGhlIG1hcHBpbmcgaXMgYnVzeSwgaS5lLiBmb3IgRE1BLFxcbisgKiBvciBvdGhlciBnZXRfdXNlcl9wYWdlcygpIHVzYWdlcy5cXG4gICpcXG4gICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZmlsZXN5c3RlbSBpcyBob2xkaW5nIGxvY2tzIHRvIGJsb2NrIHRoZVxcbiAgKiBlc3RhYmxpc2htZW50IG9mIG5ldyBtYXBwaW5ncyBpbiB0aGlzIGFkZHJlc3Nfc3BhY2UuIEkuZS4gaXQgZXhwZWN0c1xcbi0gKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxcbisgKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3BhZ2VzKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxcbiAgKiBtYXBwaW5nX21hcHBlZCgpIGJlY29taW5nIHRydWUuXFxuICAqL1xcbi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLVxcdFxcdFxcdFxcdFxcdGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4rc3RhdGljIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4ge1xcbiBcXHR2b2lkICplbnRyeTtcXG4gXFx0dW5zaWduZWQgaW50IHNjYW5uZWQgPSAwO1xcbkBAIC04NDEsMTMgKzg0MCw2IEBAIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuIFxcdHJldHVybiBwYWdlO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTtcXG4tXFxuLXN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4te1xcbi1cXHRyZXR1cm4gZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2UobWFwcGluZywgMCwgTExPTkdfTUFYKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTChkYXhfbGF5b3V0X2J1c3lfcGFnZSk7XFxuIFxcbiBzdGF0aWMgaW50IF9fZGF4X2ludmFsaWRhdGVfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdFxcdFxcdCAgcGdvZmZfdCBpbmRleCwgYm9vbCB0cnVuYylcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYXguaCBiL2luY2x1ZGUvbGludXgvZGF4LmhcXG5pbmRleCBmZTZjM2RlZDFiNTBmLi5mMmQ0Nzk3NWQ5MDVmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZGF4LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RheC5oXFxuQEAgLTE1NSw4ICsxNTUsNiBAQCBpbnQgZGF4X3dyaXRlYmFja19tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpO1xcbiBpbnQgZGF4X2ZvbGlvX3Jlc2V0X29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBcXG4tc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTtcXG4tc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpO1xcbiBkYXhfZW50cnlfdCBkYXhfbG9ja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gdm9pZCBkYXhfdW5sb2NrX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGRheF9lbnRyeV90IGNvb2tpZSk7XFxuIGRheF9lbnRyeV90IGRheF9sb2NrX21hcHBpbmdfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuQEAgLTE3MywxNiArMTcxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgZnNfZGF4X2dldChzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgdm9pZCAqaG9sZGVyLFxcbiB7XFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4te1xcbi1cXHRyZXR1cm4gTlVMTDtcXG4tfVxcbi1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgbnJfcGFnZXMpXFxuLXtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IGRheF93cml0ZWJhY2tfbWFwcGluZ19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0c3RydWN0IGRheF9kZXZpY2UgKmRheF9kZXYsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjE2LjcxOTIyMjI3NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjMyNTU4MzA4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyBjb21tZW50cywgc2NvcGVzIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKCkgdG8gc3RhdGljLCByZW1vdmVzIHRoZSB1bnVzZWQgaGVscGVyIGRheF9sYXlvdXRfYnVzeV9wYWdlKCksIGFuZCByZW1vdmVzIG9ic29sZXRlIGRlY2xhcmF0aW9ucy9zdHVicyBmcm9tIGluY2x1ZGUvbGludXgvZGF4LmguIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGV4ZWN1dGFibGUgY29kZSBsb2dpYywgZGF0YSBzdHJ1Y3R1cmVzLCBjb250cm9sIGZsb3csIG9yIHJ1bnRpbWUgYXNzZXJ0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2Q0YTFjODI5Y2E4YWJhOTQxMGU3NDBjNmNlZjQ1MTE0Mjc3Y2ExOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDM6MjU6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9kYXguYyBiL2ZzL2RheC5jXG5pbmRleCA2YmE1MDE0MmVlYjJmLi44ZTBjZGEzOGU1ZmRhIDEwMDY0NFxuLS0tIGEvZnMvZGF4LmNcbisrKyBiL2ZzL2RheC5jXG5AQCAtNzcyLDI0ICs3NzIsMjMgQEAgc3RhdGljIHZvaWQgKmdyYWJfbWFwcGluZ19lbnRyeShzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbiBcbiAvKipcbiAgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZSAtIGZpbmQgZmlyc3QgcGlubmVkIHBhZ2UgaW4gQG1hcHBpbmdcbi0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBhZ2Ugd2l0aCByZWYgY291bnQgXHUwMDNlIDFcbisgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBpbm5lZCBwYWdlXG4gICogQHN0YXJ0OiBTdGFydGluZyBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAnc3RhcnQnIGlzIGluY2x1ZGVkLlxuICAqIEBlbmQ6IEVuZCBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAnZW5kJyBpcyBpbmNsdWRlZC4gSWYgJ2VuZCcgaXMgTExPTkdfTUFYLFxuICAqICAgICAgIHBhZ2VzIGZyb20gJ3N0YXJ0JyB0aWxsIHRoZSBlbmQgb2YgZmlsZSBhcmUgaW5jbHVkZWQuXG4gICpcbi0gKiBEQVggcmVxdWlyZXMgWk9ORV9ERVZJQ0UgbWFwcGVkIHBhZ2VzLiBUaGVzZSBwYWdlcyBhcmUgbmV2ZXJcbi0gKiAnb25saW5lZCcgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yIHNvIHRoZXkgYXJlIGNvbnNpZGVyZWQgaWRsZSB3aGVuXG4tICogcGFnZS1cdTAwM2Vjb3VudCA9PSAxLiBBIGZpbGVzeXN0ZW0gdXNlcyB0aGlzIGludGVyZmFjZSB0byBkZXRlcm1pbmUgaWZcbi0gKiBhbnkgcGFnZSBpbiB0aGUgbWFwcGluZyBpcyBidXN5LCBpLmUuIGZvciBETUEsIG9yIG90aGVyXG4tICogZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuXG4rICogREFYIHJlcXVpcmVzIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcy4gQSBwYWdlIGlzIGNvbnNpZGVyZWQgYnVzeSB3aGVuXG4rICogZm9saW9fcmVmX2NvdW50KGZvbGlvKSBleGNlZWRzIGZvbGlvX21hcGNvdW50KGZvbGlvKS4gVGhpcyBoZWxwZXIgaXNcbisgKiB1c2VkIHRvIGRldGVybWluZSBpZiBhbnkgcGFnZSBpbiB0aGUgbWFwcGluZyBpcyBidXN5LCBpLmUuIGZvciBETUEsXG4rICogb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuXG4gICpcbiAgKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmaWxlc3lzdGVtIGlzIGhvbGRpbmcgbG9ja3MgdG8gYmxvY2sgdGhlXG4gICogZXN0YWJsaXNobWVudCBvZiBuZXcgbWFwcGluZ3MgaW4gdGhpcyBhZGRyZXNzX3NwYWNlLiBJLmUuIGl0IGV4cGVjdHNcbi0gKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxuKyAqIHRvIGJlIGFibGUgdG8gcnVuIHVubWFwX21hcHBpbmdfcGFnZXMoKSBhbmQgc3Vic2VxdWVudGx5IG5vdCByYWNlXG4gICogbWFwcGluZ19tYXBwZWQoKSBiZWNvbWluZyB0cnVlLlxuICAqL1xuLXN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHRcdFx0bG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKVxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHRcdCAgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXG4ge1xuIFx0dm9pZCAqZW50cnk7XG4gXHR1bnNpZ25lZCBpbnQgc2Nhbm5lZCA9IDA7XG5AQCAtODQxLDEzICs4NDAsNiBAQCBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHR4YXNfdW5sb2NrX2lycShcdTAwMjZ4YXMpO1xuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKTtcbi1cbi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4te1xuLVx0cmV0dXJuIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKG1hcHBpbmcsIDAsIExMT05HX01BWCk7XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKGRheF9sYXlvdXRfYnVzeV9wYWdlKTtcbiBcbiBzdGF0aWMgaW50IF9fZGF4X2ludmFsaWRhdGVfZW50cnkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0XHQgIHBnb2ZmX3QgaW5kZXgsIGJvb2wgdHJ1bmMpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYXguaCBiL2luY2x1ZGUvbGludXgvZGF4LmhcbmluZGV4IGZlNmMzZGVkMWI1MGYuLmYyZDQ3OTc1ZDkwNWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RheC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RheC5oXG5AQCAtMTU1LDggKzE1NSw2IEBAIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XG4gaW50IGRheF9mb2xpb19yZXNldF9vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbi1zdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpO1xuLXN0cnVjdCBwYWdlICpkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kKTtcbiBkYXhfZW50cnlfdCBkYXhfbG9ja19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIGRheF91bmxvY2tfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZGF4X2VudHJ5X3QgY29va2llKTtcbiBkYXhfZW50cnlfdCBkYXhfbG9ja19tYXBwaW5nX2VudHJ5KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuQEAgLTE3MywxNiArMTcxLDYgQEAgc3RhdGljIGlubGluZSBpbnQgZnNfZGF4X2dldChzdHJ1Y3QgZGF4X2RldmljZSAqZGF4X2Rldiwgdm9pZCAqaG9sZGVyLFxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IG5yX3BhZ2VzKVxuLXtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGludCBkYXhfd3JpdGViYWNrX21hcHBpbmdfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdHN0cnVjdCBkYXhfZGV2aWNlICpkYXhfZGV2LCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMzoyNToxNi43MTkyMjQ1ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzE5OTYwOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFYIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgc3ltYm9scyBhcmUgYmVpbmcgbW9kaWZpZWQuXG5cblNvLCBoZXJlJ3Mgd2hhdCB0aGUgcGF0Y2ggdGVsbHMgbWU6XG5cbkZpcnN0LCBpbiBgZnMvZGF4LmNgLCB0aGUgY29tbWVudCBmb3IgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaXQncyBub3cgZGVjbGFyZWQgYHN0YXRpY2AuIFRoZSBgRVhQT1JUX1NZTUJPTF9HUExgIGRpcmVjdGl2ZXMgZm9yICpib3RoKiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIGFuZCBgZGF4X2xheW91dF9idXN5X3BhZ2VgIGhhdmUgYmVlbiByZW1vdmVkLCAqYW5kKiB0aGUgYGRheF9sYXlvdXRfYnVzeV9wYWdlYCBmdW5jdGlvbiBpdHNlbGYgaXMgZ29uZS4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IHNoaWZ0LiBSZW1vdmluZyBgRVhQT1JUX1NZTUJPTF9HUExgIGltcGxpZXMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgbm8gbG9uZ2VyIGludGVuZGVkIHRvIGJlIGF2YWlsYWJsZSBvdXRzaWRlIG9mIGBmcy9kYXguY2AuXG5cblRoZW4sIGxvb2tpbmcgYXQgYGluY2x1ZGUvbGludXgvZGF4LmhgLCB0aGUgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbnMgYW5kIGlubGluZSBkZWZpbml0aW9ucyBvZiB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBhbHNvIGdvbmUuIFRoaXMgYWxpZ25zIHdpdGggdGhlIGNoYW5nZXMgaW4gYGZzL2RheC5jYCwgY29uZmlybWluZyB0aGF0IHRoZXNlIHN5bWJvbHMgYXJlIGJlaW5nIG1hZGUgaW50ZXJuYWwgdG8gdGhlIERBWCBzdWJzeXN0ZW0uXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlICppbXBhY3QqIG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIHdlcmUgcHJldmlvdXNseSB1c2VkLiBMZXQgbWUgY2hlY2sgYXJvdW5kIGxpbmUgNzcyIGluIGBmcy9kYXguY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgIHdpdGhpbiB0aGUgZmlsZSBpdHNlbGYuIEZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8ga25vdyAqd2hvKiBvciAqd2hhdCogd2FzIGNhbGxpbmcgdGhlbSBiZWZvcmUgdGhpcy4gQXJlIHRoZXJlIGFueSBleHRlcm5hbCBtb2R1bGVzIHRoYXQgd2VyZSByZWx5aW5nIG9uIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAgb3IgYGRheF9sYXlvdXRfYnVzeV9wYWdlYD9cblxuQSBxdWljayBgZ3JlcGAgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlLCBvciBhIHRhcmdldGVkIHJlYWRpbmcgb2YgdGhlIHJlbGV2YW50IGZpbGVzIGFuZCB0aGVpciBpbmNsdWRlcywgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgcmVtb3ZhbCBicmVha3MgYW55dGhpbmcuIElmIHNvLCB3aHkgaXMgaXQgYWNjZXB0YWJsZT8gSXMgdGhlcmUgYSByZXBsYWNlbWVudCBvciBhbHRlcm5hdGl2ZSBtZWNoYW5pc20gYmVpbmcgaW1wbGVtZW50ZWQ/IEkgbmVlZCB0aGUgY29udGV4dCB0byBmb3JtIGEgcHJvcGVyIGp1ZGdtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODcyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6MjU6MjEuMDM5MTg5MjkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MTA3NzgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGF4X2xheW91dF9idXN5X3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGF4LmM9Njg3PXN0YXRpYyB2b2lkICpncmFiX21hcHBpbmdfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsXFxuLS1cXG5mcy9kYXguYy03NzMtLyoqXFxuZnMvZGF4LmM6Nzc0OiAqIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlIC0gZmluZCBmaXJzdCBwaW5uZWQgcGFnZSBpbiBAbWFwcGluZ1xcbmZzL2RheC5jLTc3NS0gKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSB0byBzY2FuIGZvciBhIHBpbm5lZCBwYWdlXFxuLS1cXG5mcy9kYXguYy03ODktICovXFxuZnMvZGF4LmM6NzkwOnN0YXRpYyBzdHJ1Y3QgcGFnZSAqZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZGF4LmMtNzkxLVxcdFxcdFxcdFxcdFxcdCAgICAgICBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpXFxuLS1cXG5mcy9kYXguYz05Njk9aW50IGRheF9icmVha19sYXlvdXQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxcbi0tXFxuZnMvZGF4LmMtOTc4LVxcdGRvIHtcXG5mcy9kYXguYzo5Nzk6XFx0XFx0cGFnZSA9IGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHN0YXJ0LCBlbmQpO1xcbmZzL2RheC5jLTk4MC1cXHRcXHRpZiAoIXBhZ2UpXFxuLS1cXG5mcy9kYXguYz05OTc9dm9pZCBkYXhfYnJlYWtfbGF5b3V0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9kYXguYy0xMDA0LVxcdGRvIHtcXG5mcy9kYXguYzoxMDA1OlxcdFxcdHBhZ2UgPSBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCAwLFxcbmZzL2RheC5jLTEwMDYtXFx0XFx0XFx0XFx0XFx0XFx0TExPTkdfTUFYKTtcXG4tLVxcbmZzL2Z1c2UvZGF4LmM9NDMxPXN0YXRpYyBpbnQgZnVzZV9zZXR1cF9uZXdfZGF4X21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcyxcXG4tLVxcbmZzL2Z1c2UvZGF4LmMtNDQ1LVxcdCAqIENhbid0IGRvIGlubGluZSByZWNsYWltIGluIGZhdWx0IHBhdGguIFdlIGNhbGxcXG5mcy9mdXNlL2RheC5jOjQ0NjpcXHQgKiBkYXhfbGF5b3V0X2J1c3lfcGFnZSgpIGJlZm9yZSB3ZSBmcmVlIGEgcmFuZ2UuIEFuZFxcbmZzL2Z1c2UvZGF4LmMtNDQ3LVxcdCAqIGZ1c2Vfd2FpdF9kYXhfcGFnZSgpIGRyb3BzIG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayBhbmQgcmVxdWlyZXMgaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjIzLjk0OTk3NDEwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzA4MzkxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHJldmlldzpcblxuKipEaXZpbmcgaW50byBgZnMvZGF4LmNgIGZvciBEQVggSW1wbGVtZW50YXRpb24gRGV0YWlscyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBEQVggaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCByZWdpb24gYXJvdW5kIGxpbmVzIDc3MC0xMDEwIGluIGBmcy9kYXguY2AuIEknbSBnb2luZyB0byBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIG5lY2Vzc2FyeSBjb2RlIGJsb2Nrcy4gSSdtIG5vdCBsb29raW5nIGZvciBhIGdlbmVyYWwgb3ZlcnZpZXc7IEknbSBhZnRlciB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IERBWCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZXN5c3RlbS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IHRoZSBrZXkgYXNwZWN0cyBvZiB0aGUgREFYIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMgY29kZSBzZWN0aW9uLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBkYXRhIGFjY2VzcyBtZWNoYW5pc21zLCBwZXJoYXBzIHRoZSBtYXBwaW5ncywgY2FjaGluZywgZGlyZWN0IGFjY2Vzcywgb3IgdGhlIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcgbG9naWMgZm9yIERBWCBkZXZpY2VzLCByZXNpZGUuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGF0b21pY2l0eSBndWFyYW50ZWVzIG9yIGFueSBkaXJlY3QtYWNjZXNzLXJlbGF0ZWQgYXNwZWN0cy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDM6MjU6MjYuMDgwODE2MDM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RheC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXHRyZXR1cm4geGFfbWtfaW50ZXJuYWwoVk1fRkFVTFRfRkFMTEJBQ0spO1xcbiA3NzE6XFx0fVxcbiA3NzI6XFx0XFxuIDc3MzpcXHQvKipcXG4gNzc0OlxcdCAqIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlIC0gZmluZCBmaXJzdCBwaW5uZWQgcGFnZSBpbiBAbWFwcGluZ1xcbiA3NzU6XFx0ICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2UgdG8gc2NhbiBmb3IgYSBwaW5uZWQgcGFnZVxcbiA3NzY6XFx0ICogQHN0YXJ0OiBTdGFydGluZyBvZmZzZXQuIFBhZ2UgY29udGFpbmluZyAnc3RhcnQnIGlzIGluY2x1ZGVkLlxcbiA3Nzc6XFx0ICogQGVuZDogRW5kIG9mZnNldC4gUGFnZSBjb250YWluaW5nICdlbmQnIGlzIGluY2x1ZGVkLiBJZiAnZW5kJyBpcyBMTE9OR19NQVgsXFxuIDc3ODpcXHQgKiAgICAgICBwYWdlcyBmcm9tICdzdGFydCcgdGlsbCB0aGUgZW5kIG9mIGZpbGUgYXJlIGluY2x1ZGVkLlxcbiA3Nzk6XFx0ICpcXG4gNzgwOlxcdCAqIERBWCByZXF1aXJlcyBaT05FX0RFVklDRSBtYXBwZWQgcGFnZXMuIEEgcGFnZSBpcyBjb25zaWRlcmVkIGJ1c3kgd2hlblxcbiA3ODE6XFx0ICogZm9saW9fcmVmX2NvdW50KGZvbGlvKSBleGNlZWRzIGZvbGlvX21hcGNvdW50KGZvbGlvKS4gVGhpcyBoZWxwZXIgaXNcXG4gNzgyOlxcdCAqIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSxcXG4gNzgzOlxcdCAqIG9yIG90aGVyIGdldF91c2VyX3BhZ2VzKCkgdXNhZ2VzLlxcbiA3ODQ6XFx0ICpcXG4gNzg1OlxcdCAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaXMgaG9sZGluZyBsb2NrcyB0byBibG9jayB0aGVcXG4gNzg2OlxcdCAqIGVzdGFibGlzaG1lbnQgb2YgbmV3IG1hcHBpbmdzIGluIHRoaXMgYWRkcmVzc19zcGFjZS4gSS5lLiBpdCBleHBlY3RzXFxuIDc4NzpcXHQgKiB0byBiZSBhYmxlIHRvIHJ1biB1bm1hcF9tYXBwaW5nX3BhZ2VzKCkgYW5kIHN1YnNlcXVlbnRseSBub3QgcmFjZVxcbiA3ODg6XFx0ICogbWFwcGluZ19tYXBwZWQoKSBiZWNvbWluZyB0cnVlLlxcbiA3ODk6XFx0ICovXFxuIDc5MDpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKmRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiA3OTE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZClcXG4gNzkyOlxcdHtcXG4gNzkzOlxcdFxcdHZvaWQgKmVudHJ5O1xcbiA3OTQ6XFx0XFx0dW5zaWduZWQgaW50IHNjYW5uZWQgPSAwO1xcbiA3OTU6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xcbiA3OTY6XFx0XFx0cGdvZmZfdCBzdGFydF9pZHggPSBzdGFydCBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiA3OTc6XFx0XFx0cGdvZmZfdCBlbmRfaWR4O1xcbiA3OTg6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcywgc3RhcnRfaWR4KTtcXG4gNzk5OlxcdFxcbiA4MDA6XFx0XFx0aWYgKCFkYXhfbWFwcGluZyhtYXBwaW5nKSlcXG4gODAxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA4MDI6XFx0XFxuIDgwMzpcXHRcXHQvKiBJZiBlbmQgPT0gTExPTkdfTUFYLCBhbGwgcGFnZXMgZnJvbSBzdGFydCB0byB0aWxsIGVuZCBvZiBmaWxlICovXFxuIDgwNDpcXHRcXHRpZiAoZW5kID09IExMT05HX01BWClcXG4gODA1OlxcdFxcdFxcdGVuZF9pZHggPSBVTE9OR19NQVg7XFxuIDgwNjpcXHRcXHRlbHNlXFxuIDgwNzpcXHRcXHRcXHRlbmRfaWR4ID0gZW5kIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDgwODpcXHRcXHQvKlxcbiA4MDk6XFx0XFx0ICogSWYgd2UgcmFjZSBnZXRfdXNlcl9wYWdlc19mYXN0KCkgaGVyZSBlaXRoZXIgd2UnbGwgc2VlIHRoZVxcbiA4MTA6XFx0XFx0ICogZWxldmF0ZWQgcGFnZSBjb3VudCBpbiB0aGUgaXRlcmF0aW9uIGFuZCB3YWl0LCBvclxcbiA4MTE6XFx0XFx0ICogZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHdpbGwgc2VlIHRoYXQgdGhlIHBhZ2UgaXQgdG9vayBhIHJlZmVyZW5jZVxcbiA4MTI6XFx0XFx0ICogYWdhaW5zdCBpcyBubyBsb25nZXIgbWFwcGVkIGluIHRoZSBwYWdlIHRhYmxlcyBhbmQgYmFpbCB0byB0aGVcXG4gODEzOlxcdFxcdCAqIGdldF91c2VyX3BhZ2VzKCkgc2xvdyBwYXRoLiAgVGhlIHNsb3cgcGF0aCBpcyBwcm90ZWN0ZWQgYnlcXG4gODE0OlxcdFxcdCAqIHB0ZV9sb2NrKCkgYW5kIHBtZF9sb2NrKCkuIE5ldyByZWZlcmVuY2VzIGFyZSBub3QgdGFrZW4gd2l0aG91dFxcbiA4MTU6XFx0XFx0ICogaG9sZGluZyB0aG9zZSBsb2NrcywgYW5kIHVubWFwX21hcHBpbmdfcGFnZXMoKSB3aWxsIG5vdCB6ZXJvIHRoZVxcbiA4MTY6XFx0XFx0ICogcHRlIG9yIHBtZCB3aXRob3V0IGhvbGRpbmcgdGhlIHJlc3BlY3RpdmUgbG9jaywgc28gd2UgYXJlXFxuIDgxNzpcXHRcXHQgKiBndWFyYW50ZWVkIHRvIGVpdGhlciBzZWUgbmV3IHJlZmVyZW5jZXMgb3IgcHJldmVudCBuZXdcXG4gODE4OlxcdFxcdCAqIHJlZmVyZW5jZXMgZnJvbSBiZWluZyBlc3RhYmxpc2hlZC5cXG4gODE5OlxcdFxcdCAqL1xcbiA4MjA6XFx0XFx0dW5tYXBfbWFwcGluZ19wYWdlcyhtYXBwaW5nLCBzdGFydF9pZHgsIGVuZF9pZHggLSBzdGFydF9pZHggKyAxLCAwKTtcXG4gODIxOlxcdFxcbiA4MjI6XFx0XFx0eGFzX2xvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbiA4MjM6XFx0XFx0eGFzX2Zvcl9lYWNoKFxcdTAwMjZ4YXMsIGVudHJ5LCBlbmRfaWR4KSB7XFxuIDgyNDpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCF4YV9pc192YWx1ZShlbnRyeSkpKVxcbiA4MjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgyNjpcXHRcXHRcXHRlbnRyeSA9IHdhaXRfZW50cnlfdW5sb2NrZWRfZXhjbHVzaXZlKFxcdTAwMjZ4YXMsIGVudHJ5KTtcXG4gODI3OlxcdFxcdFxcdGlmIChlbnRyeSlcXG4gODI4OlxcdFxcdFxcdFxcdHBhZ2UgPSBkYXhfYnVzeV9wYWdlKGVudHJ5KTtcXG4gODI5OlxcdFxcdFxcdHB1dF91bmxvY2tlZF9lbnRyeShcXHUwMDI2eGFzLCBlbnRyeSwgV0FLRV9ORVhUKTtcXG4gODMwOlxcdFxcdFxcdGlmIChwYWdlKVxcbiA4MzE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgzMjpcXHRcXHRcXHRpZiAoKytzY2FubmVkICUgWEFfQ0hFQ0tfU0NIRUQpXFxuIDgzMzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODM0OlxcdFxcbiA4MzU6XFx0XFx0XFx0eGFzX3BhdXNlKFxcdTAwMjZ4YXMpO1xcbiA4MzY6XFx0XFx0XFx0eGFzX3VubG9ja19pcnEoXFx1MDAyNnhhcyk7XFxuIDgzNzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gODM4OlxcdFxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4gODM5OlxcdFxcdH1cXG4gODQwOlxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbiA4NDE6XFx0XFx0cmV0dXJuIHBhZ2U7XFxuIDg0MjpcXHR9XFxuIDg0MzpcXHRcXG4gODQ0OlxcdHN0YXRpYyBpbnQgX19kYXhfaW52YWxpZGF0ZV9lbnRyeShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gODQ1OlxcdFxcdFxcdFxcdFxcdCAgcGdvZmZfdCBpbmRleCwgYm9vbCB0cnVuYylcXG4gODQ2OlxcdHtcXG4gODQ3OlxcdFxcdFhBX1NUQVRFKHhhcywgXFx1MDAyNm1hcHBpbmctXFx1MDAzZWlfcGFnZXMsIGluZGV4KTtcXG4gODQ4OlxcdFxcdGludCByZXQgPSAwO1xcbiA4NDk6XFx0XFx0dm9pZCAqZW50cnk7XFxuIDg1MDpcXHRcXG4gODUxOlxcdFxcdHhhc19sb2NrX2lycShcXHUwMDI2eGFzKTtcXG4gODUyOlxcdFxcdGVudHJ5ID0gZ2V0X25leHRfdW5sb2NrZWRfZW50cnkoXFx1MDAyNnhhcywgMCk7XFxuIDg1MzpcXHRcXHRpZiAoIWVudHJ5IHx8IFdBUk5fT05fT05DRSgheGFfaXNfdmFsdWUoZW50cnkpKSlcXG4gODU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA4NTU6XFx0XFx0aWYgKCF0cnVuYyBcXHUwMDI2XFx1MDAyNlxcbiA4NTY6XFx0XFx0ICAgICh4YXNfZ2V0X21hcmsoXFx1MDAyNnhhcywgUEFHRUNBQ0hFX1RBR19ESVJUWSkgfHxcXG4gODU3OlxcdFxcdCAgICAgeGFzX2dldF9tYXJrKFxcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfVE9XUklURSkpKVxcbiA4NTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDg1OTpcXHRcXHRkYXhfZGlzYXNzb2NpYXRlX2VudHJ5KGVudHJ5LCBtYXBwaW5nLCB0cnVuYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjI2LjA4MDkzOTEyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MTA4NzE2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQVggTGF5b3V0IEJ1c3kgUGFnZSBSZW1vdmFsKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgZGF4X2xheW91dF9idXN5X3BhZ2VgIHdhcyBqdXN0IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgZGF4X2xheW91dF9idXN5X3BhZ2VfcmFuZ2VgLiBCb3RoIHdlcmUgdW5leHBvcnRlZCwgYW5kIHRoZSBmb3JtZXIgd2FzIHNpbXBseSByZW1vdmVkIGJlY2F1c2Ugbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIGNhbGxlcnMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdXNlIGBkYXhfYnJlYWtfbGF5b3V0YCwgYGRheF9icmVha19sYXlvdXRfZmluYWxgIG9yIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAgZGlyZWN0bHkgd2l0aGluIGBmcy9kYXguY2AuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHBhcnQ6IHdoYXQgYWN0dWFsbHkgY2hhbmdlZCBpbiB0aGUgKmNvZGUqPyBUaGUgZGlmZiBzaG93cyB0aGF0IHRoZSBmdW5jdGlvbidzIGRvY3VtZW50YXRpb24gbm93IGNsYXJpZmllcyB0aGF0IGEgXCJidXN5XCIgcGFnZSBpcyBjb25zaWRlcmVkIGJ1c3kgd2hlbiBgZm9saW9fcmVmX2NvdW50KGZvbGlvKWAgZXhjZWVkcyBgZm9saW9fbWFwY291bnQoZm9saW8pYC4gUHJldmlvdXNseSwgaXQgbWVudGlvbmVkIHRoYXQgREFYIHJlcXVpcmVkIFpPTkVfREVWSUNFIG1hcHBlZCBwYWdlcywgd2hpY2ggd2VyZSBjb25zaWRlcmVkIGlkbGUgd2hlbiBwYWdlLVx1MDAzZWNvdW50ID09IDEsIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgYXMgdGhlIGNyaXRlcmlhIGZvciB3aGF0IGNvbnN0aXR1dGVzIGEgYnVzeSBwYWdlLiBUaGUgZGVzY3JpcHRpb24gb2YgaG93IHRoaXMgaGVscGVyIGlzIHVzZWQgYWxzbyBub3cgc3RhdGVzIHRoYXQgaXQgaXMgbWVhbnQgdG8gZGV0ZXJtaW5lIGlmIGFueSBwYWdlIGluIHRoZSBtYXBwaW5nIGlzIGJ1c3ksIGkuZS4gZm9yIERNQSwgb3Igb3RoZXIgZ2V0X3VzZXJfcGFnZXMoKSB1c2FnZXMuIEFsc28sIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBydW4gYHVubWFwX21hcHBpbmdfcGFnZXMoKWAgaW5zdGVhZCBvZiBgdW5tYXBfbWFwcGluZ19yYW5nZSgpYCwgYW5kIHRoZW4gbm90IHJhY2UgYG1hcHBpbmdfbWFwcGVkKClgIGJlY29taW5nIHRydWUuXG5cbkknbSBhbHNvIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgZ2l0IGxvZy9kaWZmIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIHRoYXQgSSBtaWdodCBiZSBtaXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjMxLjc5MTgxMjcyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjUzMjUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYXhfYnJlYWtfbGF5b3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz05NTU9c3RhdGljIHZvaWQgd2FpdF9wYWdlX2lkbGVfdW5pbnRlcnJ1cHRpYmxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZnMvZGF4LmMtOTY4LSAqL1xcbmZzL2RheC5jOjk2OTppbnQgZGF4X2JyZWFrX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuZnMvZGF4LmMtOTcwLVxcdFxcdHZvaWQgKGNiKShzdHJ1Y3QgaW5vZGUgKikpXFxuLS1cXG5mcy9kYXguYy05OTQtfVxcbmZzL2RheC5jOjk5NTpFWFBPUlRfU1lNQk9MX0dQTChkYXhfYnJlYWtfbGF5b3V0KTtcXG5mcy9kYXguYy05OTYtXFxuZnMvZGF4LmM6OTk3OnZvaWQgZGF4X2JyZWFrX2xheW91dF9maW5hbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2RheC5jLTk5OC17XFxuLS1cXG5mcy9kYXguYy0xMDE1LX1cXG5mcy9kYXguYzoxMDE2OkVYUE9SVF9TWU1CT0xfR1BMKGRheF9icmVha19sYXlvdXRfZmluYWwpO1xcbmZzL2RheC5jLTEwMTctXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTExMjM9c3RhdGljIHZvaWQgZXJvZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmMtMTEyNS1cXHRpZiAoSVNfREFYKGlub2RlKSlcXG5mcy9lcm9mcy9zdXBlci5jOjExMjY6XFx0XFx0ZGF4X2JyZWFrX2xheW91dF9maW5hbChpbm9kZSk7XFxuZnMvZXJvZnMvc3VwZXIuYy0xMTI3LVxcdGVyb2ZzX2lzaGFyZV9mcmVlX2lub2RlKGlub2RlKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTgyLVxcbmZzL2V4dDQvaW5vZGUuYzoxODM6XFx0ZGF4X2JyZWFrX2xheW91dF9maW5hbChpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTE4NC1cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz00NDM5PWludCBleHQ0X2JyZWFrX2xheW91dHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00NDQzLVxcbmZzL2V4dDQvaW5vZGUuYzo0NDQ0OlxcdHJldHVybiBkYXhfYnJlYWtfbGF5b3V0X2lub2RlKGlub2RlLCBleHQ0X3dhaXRfZGF4X3BhZ2UpO1xcbmZzL2V4dDQvaW5vZGUuYy00NDQ1LX1cXG4tLVxcbmZzL2Z1c2UvZGF4LmM9NjYzPXN0YXRpYyB2b2lkIGZ1c2Vfd2FpdF9kYXhfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZnVzZS9kYXguYy02NzAtLyogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIG1hcHBpbmctXFx1MDAzZWludmFsaWRhdGVfbG9jayBoZWxkIGV4Y2x1c2l2ZWx5LiAqL1xcbmZzL2Z1c2UvZGF4LmM6NjcxOmludCBmdXNlX2RheF9icmVha19sYXlvdXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBkbWFwX3N0YXJ0LFxcbmZzL2Z1c2UvZGF4LmMtNjcyLVxcdFxcdFxcdFxcdCAgdTY0IGRtYXBfZW5kKVxcbmZzL2Z1c2UvZGF4LmMtNjczLXtcXG5mcy9mdXNlL2RheC5jOjY3NDpcXHRyZXR1cm4gZGF4X2JyZWFrX2xheW91dChpbm9kZSwgZG1hcF9zdGFydCwgZG1hcF9lbmQsXFxuZnMvZnVzZS9kYXguYy02NzUtXFx0XFx0XFx0XFx0ZnVzZV93YWl0X2RheF9wYWdlKTtcXG4tLVxcbmZzL2Z1c2UvZGF4LmM9OTE0PWlub2RlX2lubGluZV9yZWNsYWltX29uZV9kbWFwKHN0cnVjdCBmdXNlX2Nvbm5fZGF4ICpmY2QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mdXNlL2RheC5jLTk0MS1cXHQgKi9cXG5mcy9mdXNlL2RheC5jOjk0MjpcXHRyZXQgPSBmdXNlX2RheF9icmVha19sYXlvdXRzKGlub2RlLCBkbWFwX3N0YXJ0LCBkbWFwX2VuZCk7XFxuZnMvZnVzZS9kYXguYy05NDMtXFx0aWYgKHJldCkge1xcbmZzL2Z1c2UvZGF4LmM6OTQ0OlxcdFxcdHByX2RlYnVnKFxcXCJmdXNlOiBmdXNlX2RheF9icmVha19sYXlvdXRzKCkgZmFpbGVkLiBlcnI9JWRcXFxcblxcXCIsXFxuZnMvZnVzZS9kYXguYy05NDUtXFx0XFx0XFx0IHJldCk7XFxuLS1cXG5mcy9mdXNlL2RheC5jPTEwNzY9c3RhdGljIGludCBsb29rdXBfYW5kX3JlY2xhaW1fZG1hcChzdHJ1Y3QgZnVzZV9jb25uX2RheCAqZmNkLFxcbi0tXFxuZnMvZnVzZS9kYXguYy0xMDg2LVxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbmZzL2Z1c2UvZGF4LmM6MTA4NzpcXHRyZXQgPSBmdXNlX2RheF9icmVha19sYXlvdXRzKGlub2RlLCBkbWFwX3N0YXJ0LCBkbWFwX2VuZCk7XFxuZnMvZnVzZS9kYXguYy0xMDg4LVxcdGlmIChyZXQpIHtcXG5mcy9mdXNlL2RheC5jOjEwODk6XFx0XFx0cHJfZGVidWcoXFxcInZpcnRpb19mczogZnVzZV9kYXhfYnJlYWtfbGF5b3V0cygpIGZhaWxlZC4gZXJyPSVkXFxcXG5cXFwiLFxcbmZzL2Z1c2UvZGF4LmMtMTA5MC1cXHRcXHRcXHQgcmV0KTtcXG4tLVxcbmZzL2Z1c2UvZGlyLmM9MjE0OD1pbnQgZnVzZV9kb19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9mdXNlL2Rpci5jLTIxODItXFx0XFx0ZmF1bHRfYmxvY2tlZCA9IHRydWU7XFxuZnMvZnVzZS9kaXIuYzoyMTgzOlxcdFxcdGVyciA9IGZ1c2VfZGF4X2JyZWFrX2xheW91dHMoaW5vZGUsIDAsIC0xKTtcXG5mcy9mdXNlL2Rpci5jLTIxODQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTI1MD1zdGF0aWMgaW50IGZ1c2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTI3Mi1cXHRcXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG5mcy9mdXNlL2ZpbGUuYzoyNzM6XFx0XFx0ZXJyID0gZnVzZV9kYXhfYnJlYWtfbGF5b3V0cyhpbm9kZSwgMCwgLTEpO1xcbmZzL2Z1c2UvZmlsZS5jLTI3NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZnVzZS9maWxlLmM9MjgzMz1zdGF0aWMgbG9uZyBmdXNlX2ZpbGVfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTI4NjEtXFx0XFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuZnMvZnVzZS9maWxlLmM6Mjg2MjpcXHRcXHRlcnIgPSBmdXNlX2RheF9icmVha19sYXlvdXRzKGlub2RlLCAwLCAtMSk7XFxuZnMvZnVzZS9maWxlLmMtMjg2My1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvZnVzZS9mdXNlX2kuaD0xMjI0PWludCBmdXNlX2RheF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuZnMvZnVzZS9mdXNlX2kuaDoxMjI1OmludCBmdXNlX2RheF9icmVha19sYXlvdXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBkbWFwX3N0YXJ0LCB1NjQgZG1hcF9lbmQpO1xcbmZzL2Z1c2UvZnVzZV9pLmgtMTIyNi1pbnQgZnVzZV9kYXhfY29ubl9hbGxvYyhzdHJ1Y3QgZnVzZV9jb25uICpmYywgZW51bSBmdXNlX2RheF9tb2RlIG1vZGUsXFxuLS1cXG5mcy9mdXNlL2lub2RlLmM9MTQ0PXN0YXRpYyB2b2lkIGZ1c2VfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xNTEtXFx0aWYgKEZVU0VfSVNfREFYKGlub2RlKSlcXG5mcy9mdXNlL2lub2RlLmM6MTUyOlxcdFxcdGRheF9icmVha19sYXlvdXRfZmluYWwoaW5vZGUpO1xcbmZzL2Z1c2UvaW5vZGUuYy0xNTMtXFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmM9Mjc0OT14ZnNfbW1hcGxvY2tfdHdvX2lub2Rlc19hbmRfYnJlYWtfZGF4X2xheW91dChcXG4tLVxcbmZzL3hmcy94ZnNfaW5vZGUuYy0yNzc2LVxcdCAqL1xcbmZzL3hmcy94ZnNfaW5vZGUuYzoyNzc3OlxcdGVycm9yID0gZGF4X2JyZWFrX2xheW91dChWRlNfSShpcDIpLCAwLCAtMSwgTlVMTCk7XFxuZnMveGZzL3hmc19pbm9kZS5jLTI3NzgtXFx0aWYgKGVycm9yKSB7XFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmM9MzAxOD14ZnNfYnJlYWtfZGF4X2xheW91dHMoXFxuLS1cXG5mcy94ZnMveGZzX2lub2RlLmMtMzAyMi1cXG5mcy94ZnMveGZzX2lub2RlLmM6MzAyMzpcXHRyZXR1cm4gZGF4X2JyZWFrX2xheW91dF9pbm9kZShpbm9kZSwgeGZzX3dhaXRfZGF4X3BhZ2UpO1xcbmZzL3hmcy94ZnNfaW5vZGUuYy0zMDI0LX1cXG4tLVxcbmZzL3hmcy94ZnNfc3VwZXIuYz04MjI9eGZzX2ZzX2V2aWN0X2lub2RlKFxcbi0tXFxuZnMveGZzL3hmc19zdXBlci5jLTgyNS1cXHRpZiAoSVNfREFYKGlub2RlKSlcXG5mcy94ZnMveGZzX3N1cGVyLmM6ODI2OlxcdFxcdGRheF9icmVha19sYXlvdXRfZmluYWwoaW5vZGUpO1xcbmZzL3hmcy94ZnNfc3VwZXIuYy04MjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjMxLjkyNDM1MTc1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNTA2NjM2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IERlYWQgQ29kZSBSZW1vdmFsIFx1MDAyNiBTY29wZSBSZXN0cmljdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gVGhlIGluaXRpYWwgc3RlcHMgaW52b2x2ZWQgaWRlbnRpZnlpbmcgdGhlIGNvcmUgY2hhbmdlczogYSBmdW5jdGlvbiwgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCwgd2FzIG1hZGUgYHN0YXRpY2AgYW5kIGl0cyBleHBvcnQgc3ltYm9sIHJlbW92ZWQuIFRoZSB1bnVzZWQgd3JhcHBlciBgZGF4X2xheW91dF9idXN5X3BhZ2VgIGhhcyBiZWVuIGNvbXBsZXRlbHkgZGVsZXRlZCwgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBleHBvcnQuIERlY2xhcmF0aW9ucyBhbmQgaW5saW5lcyBmcm9tIGBpbmNsdWRlL2xpbnV4L2RheC5oYCB3ZXJlIGFsc28gcmVtb3ZlZC4gRmluYWxseSwgc29tZSBjb21tZW50cyBpbiBgZnMvZGF4LmNgIHdlcmUgdXBkYXRlZC5cblxuVGhlIGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgdG91Y2ggKmV4ZWN1dGFibGUqIGNvZGUgbG9naWMuIE1ha2luZyBhIGZ1bmN0aW9uIGBzdGF0aWNgLCByZW1vdmluZyB1bnVzZWQgZXhwb3J0cywgYW5kIGdldHRpbmcgcmlkIG9mIHVudXNlZCBpbmxpbmUgZGVjbGFyYXRpb25zICpzaG91bGRuJ3QqIGFsdGVyIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBydW50aW1lIGFzc2VydGlvbnMsIG9yIGZ1bmRhbWVudGFsbHkgY2hhbmdlIGhvdyB0aGUga2VybmVsIG9wZXJhdGVzLiBCdXQsIG9mIGNvdXJzZSwgYSBxdWljayByZS1yZWFkIG9mIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBpcyBpbiBvcmRlci4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBidWlsZCBzeXN0ZW1zIHRoYXQgZG9uJ3QgYWx0ZXIgQyBsb2dpYywgYW5kIHVucmVhY2hhYmxlIGNvZGUsIGFyZSBhbGwgYXJlYXMgd2hlcmUgZnV6emluZyBjYW4gYmUgc2tpcHBlZC5cblxuVGhlbiBhIGNoZWNrIHRvIHRoZSBwb3NpdGl2ZSBzZWN0aW9uIGVuc3VyZXMgdGhpcyBjaGFuZ2UgZG9lcyAqbm90KiBmYWxsIHVuZGVyIGNvcmUgc3Vic3lzdGVtcywgcmVmYWN0b3JpbmdzLCBydW50aW1lIGFzc2VydGlvbnMsIG9yIHJlYWNoYWJsZSBkcml2ZXJzLlxuXG5TbywgbGV0J3MgbG9vayBhdCB0aGUgZGlmZnMgbGluZSBieSBsaW5lLiBGb2N1c2luZyBvbiBgZnMvZGF4LmNgLCB0aGUgY2hhbmdlcyBib2lsIGRvd24gdG86IGNvbW1lbnRzIHVwZGF0ZWQsIGBzdGF0aWNgIGFkZGVkIHRvIGBkYXhfbGF5b3V0X2J1c3lfcGFnZV9yYW5nZWAsIGl0cyBleHBvcnQgcmVtb3ZlZCwgYW5kIHJlbW92YWwgb2YgdGhlIGRlYWQgZnVuY3Rpb24gYGRheF9sYXlvdXRfYnVzeV9wYWdlYCBhbmQgaXRzIGV4cG9ydC4gTm90aGluZyB3aXRoaW4gdGhlIGNvcmUgbG9naWMgb2YgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlYCBvciBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCdzIGJlaW5nICpjYWxsZWQqIGhhcyBiZWVuIGNoYW5nZWQuIExvb2tpbmcgYXQgdGhlIGhlYWRlciwgdGhlIHByb3RvdHlwZSBhbmQgc3R1YnMgd2VyZSBhbHNvIHJlbW92ZWQuIFRoaXMgaXMgYWxsIGRlYWQgY29kZSByZW1vdmFsLCBmdW5jdGlvbiB1bmV4cG9ydGluZywgYW5kIHNjb3BpbmcuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIHRoZW4gaXM6IERvZXMgcmVtb3ZpbmcgZGVhZCBjb2RlLCB1bmV4cG9ydGluZyBmdW5jdGlvbnMsIG9yIG1hcmtpbmcgc29tZXRoaW5nIGBzdGF0aWNgIHdhcnJhbnQgZnV6emluZz8gVGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvbXB0J3MgZ29hbCBvZiBmaW5kaW5nIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBuZXcgYnVncywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGVzZSBjaGFuZ2VzICpzaG91bGRuJ3QqLiBUaGUgb3JpZ2luYWwgZnVuY3Rpb24ncyBsb2dpYyByZW1haW5zIGludGFjdC4gVGhlcmUgYXJlIG5vIG5ldyBjb2RlIHBhdGhzLCBubyBhbHRlcmVkIGNvbnRyb2wgZmxvdywgbm8gbmV3IGFzc2VydGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byB1bmRlcmx5aW5nIGxvZ2ljLlxuXG5UbyBiZSBleHRyYSBjZXJ0YWluLCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCBjaGVjayBvZiBgZnMvZGF4LmNgIHdpdGggYGdpdCBkaWZmYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyLCBzdWJ0bGUgY2hhbmdlcy4gSXQgaXMgYWxzbyBnb29kIHRvIHZlcmlmeSB0aGUgc2NvcGUgb2YgdGhlIHJlbW92ZWQgc3ltYm9scy4gSXQgaXMgY2xlYXIgdGhhdCB0aGUgZnVuY3Rpb24gYGRheF9sYXlvdXRfYnVzeV9wYWdlYCB3YXMgbmV2ZXIgdXNlZCwgYW5kIHRoZSBvdGhlciBmdW5jdGlvbidzIGJvZHkgd2FzIG5ldmVyIG1vZGlmaWVkLiBUaGVyZWZvcmUsIGl0J3Mgc2FmZSB0byBzYXk6IGBXb3J0aEZ1enppbmc6IGZhbHNlYC5cblxuVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IFRoZSBwYXRjaCdzIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gY29tbWVudCB1cGRhdGVzLCBtYWtpbmcgYGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKClgIHN0YXRpYywgcmVtb3ZpbmcgdGhlIHVudXNlZCB3cmFwcGVyIGBkYXhfbGF5b3V0X2J1c3lfcGFnZSgpYCwgYW5kIGRlbGV0aW5nIHVudXNlZCBkZWNsYXJhdGlvbnMuIE5vbmUgb2YgdGhlc2UgYWZmZWN0IGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciB0aGUgaW50cm9kdWN0aW9uL3JlbW92YWwgb2YgYXNzZXJ0aW9ucy5cblxuYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlcmVmb3JlIGJvdGggZW1wdHkuIEEgZmluYWwgcXVpY2sgdmVyaWZpY2F0aW9uIGFuZCB0aGUgcmVzdWx0IGlzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwNSwiT3V0cHV0VG9rZW5zIjoxMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjM5Ljk3NTAyNDg0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyBjb21tZW50cywgc2NvcGVzIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKCkgdG8gc3RhdGljLCByZW1vdmVzIHRoZSB1bnVzZWQgaGVscGVyIGRheF9sYXlvdXRfYnVzeV9wYWdlKCksIGFuZCByZW1vdmVzIG9ic29sZXRlIGRlY2xhcmF0aW9ucy9zdHVicyBmcm9tIGluY2x1ZGUvbGludXgvZGF4LmguIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGV4ZWN1dGFibGUgY29kZSBsb2dpYywgZGF0YSBzdHJ1Y3R1cmVzLCBjb250cm9sIGZsb3csIG9yIHJ1bnRpbWUgYXNzZXJ0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgdXBkYXRlcyBjb21tZW50cywgc2NvcGVzIGRheF9sYXlvdXRfYnVzeV9wYWdlX3JhbmdlKCkgdG8gc3RhdGljLCByZW1vdmVzIHRoZSB1bnVzZWQgaGVscGVyIGRheF9sYXlvdXRfYnVzeV9wYWdlKCksIGFuZCByZW1vdmVzIG9ic29sZXRlIGRlY2xhcmF0aW9ucy9zdHVicyBmcm9tIGluY2x1ZGUvbGludXgvZGF4LmguIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGV4ZWN1dGFibGUgY29kZSBsb2dpYywgZGF0YSBzdHJ1Y3R1cmVzLCBjb250cm9sIGZsb3csIG9yIHJ1bnRpbWUgYXNzZXJ0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAzOjI1OjM5Ljk3NTA1NTQ4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmmhpr[1] Phase: Running StartedAt: 2026-09-06 03:25:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmhpr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-06 03:25:51 +0000 UTC FinishedAt: 2026-09-06 03:25:54 +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,}