Name: series-workflow8qzgt Phase: Failed StartedAt: 2026-08-22 00:27:45 +0000 UTC FinishedAt: 2026-08-22 01:10:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8qzgt[0] Phase: Succeeded StartedAt: 2026-08-22 00:27:45 +0000 UTC FinishedAt: 2026-08-22 01:10:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8qzgt[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 00:27:45 +0000 UTC FinishedAt: 2026-08-22 01:10:18 +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+CgkJCTx0ZD4yMDI2LzA4LzIyIDAxOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgUFRQIHRpbWVzdGFtcGluZyBhbmQgUEhZIG9mZnNldCBjYWxpYnJhdGlvbikgYXJlIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEwNmIwMDRkY2QwMzQ2YmFlNTdiYjc0ODhjN2U0NzExMTM4MDJmOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwMTowOTozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG5pbmRleCAyZGMzNjI5ZDZkMGY2Li5kMTY0M2JmOGExYjU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG5AQCAtNjYsMTggJiM0Mzs2NiwxNyBAQCBzdGF0aWMgc3RydWN0IGljZV9hZGFwdGVyICppY2VfYWRhcHRlcl9uZXcoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcmVmY291bnQsIDEpO1xuIFxuLVx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cyk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QpO1xuIFxuIFx0cmV0dXJuIGFkYXB0ZXI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGljZV9hZGFwdGVyX2ZyZWUoc3RydWN0IGljZV9hZGFwdGVyICphZGFwdGVyKVxuIHtcbi1cdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cykpO1xuJiM0MztcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0KSk7XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9jayk7IGkmIzQzOyYjNDM7KVxuIFx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdGtmcmVlKGFkYXB0ZXIpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5pbmRleCA0ZjY5NWYzMmRhM2Q4Li4zOTkyM2RlZGQ1MzRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5AQCAtMTksMTMgJiM0MzsxOSwxMyBAQCBzdHJ1Y3QgaWNlX3BmO1xuICAqXG4gICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgZGF0YSB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBhZGFwdGVyIHBvcnRzXG4gICpcbi0gKiBAcG9ydHM6IGxpc3Qgb2YgcG9ydHNcbiYjNDM7ICogQGxpc3Q6IGxpc3Qgb2YgcG9ydHNcbiAgKiBAbG9jazogcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIHBvcnRzIGxpc3RcbiAgKi9cbiBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdC8qIFRvIHN5bmNocm9uaXplIHRoZSBwb3J0cyBsaXN0IG9wZXJhdGlvbnMgKi9cbi1cdHN0cnVjdCBtdXRleCBsb2NrO1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbmluZGV4IGQ4ODgzNTQ4MmQzYWEuLmM4NGQ2M2I4ZDI2MWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbkBAIC0zMjQ4LDcgJiM0MzszMjQ4LDcgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHJfdGhyZWFkX2ZuKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuIFx0aWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7XG4gXHRpY2VfZmx1c2goaHcpO1xuIFxuLVx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkge1xuJiM0MztcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcbiBcdFx0LyogSWYgYW55IG5ldyBUeCB0aW1lc3RhbXBzIGhhcHBlbmVkIHdoaWxlIGluIGludGVycnVwdCxcbiBcdFx0ICogcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBpdCBhZ2Fpbi5cbiBcdFx0ICovXG5AQCAtNjc0NSw3ICYjNDM7Njc0NSw2IEBAIHN0YXRpYyBpbnQgaWNlX3VwX2NvbXBsZXRlKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRcdGljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUpO1xuIFx0XHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29uKHZzaS1cdTAwM2VuZXRkZXYpO1xuLVx0XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCB0cnVlKTtcbiBcdH1cbiBcbiBcdC8qIFBlcmZvcm0gYW4gaW5pdGlhbCByZWFkIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyBub3cgdG9cbkBAIC03MjczLDcgJiM0Mzs3MjcyLDYgQEAgaW50IGljZV9kb3duKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXG4gXHRpZiAodnNpLVx1MDAzZW5ldGRldikge1xuIFx0XHR2bGFuX2VyciA9IGljZV92c2lfZGVsX3ZsYW5femVybyh2c2kpO1xuLVx0XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHZzaS1cdTAwM2ViYWNrLCBmYWxzZSk7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRpZl90eF9kaXNhYmxlKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0fVxuQEAgLTc3OTQsNiAmIzQzOzc3OTIsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIFxuIFx0aWNlX3VwZGF0ZV9wZl9uZXRkZXZfbGluayhwZik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlaHcucG9ydF9pbmZvKSB7XG4mIzQzO1x0XHRib29sIGxpbmtfdXA7XG4mIzQzO1xuJiM0MztcdFx0bGlua191cCA9ICEhKHBmLVx1MDAzZWh3LnBvcnRfaW5mby1cdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBJQ0VfQVFfTElOS19VUCk7XG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlcHRwLnBvcnQubGlua191cCAhPSBsaW5rX3VwKVxuJiM0MztcdFx0XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXG4gXHRlcnIgPSBpY2Vfc2VuZF92ZXJzaW9uKHBmKTtcbiBcdGlmIChlcnIpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uMGU0NGVkNmIwYWU4ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0xLDYgJiM0MzsxLDggQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoQykgMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aWNlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfbGliLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfdHJhY2UuaFwmIzM0O1xuQEAgLTM2Miw5ICYjNDM7MzY0LDEyIEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxuIHN0YXRpYyBib29sXG4gaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiB7XG4mIzQzO1x0c3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XG4mIzQzO1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHJldHVybiB0eC1cdTAwM2Vpbml0IFx1MDAyNlx1MDAyNiAhdHgtXHUwMDNlY2FsaWJyYXRpbmc7XG4mIzQzO1x0cmV0dXJuIHR4LVx1MDAzZWluaXQgXHUwMDI2XHUwMDI2ICF0eC1cdTAwM2VjYWxpYnJhdGluZyBcdTAwMjZcdTAwMjYgcHRwX3BvcnQtXHUwMDNlbGlua191cDtcbiB9XG4gXG4gLyoqXG5AQCAtNTYxLDcgJiM0Mzs1NjYsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHR1NjQgdHN0YW1wX3JlYWR5O1xuLVx0Ym9vbCBsaW5rX3VwO1xuIFx0aW50IGVycjtcbiBcdHU4IGlkeDtcbiBcbkBAIC01NjksNyAmIzQzOzU3Myw3IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0cGYgPSBwdHBfcG9ydF90b19wZihwdHBfcG9ydCk7XG4gXHRodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFxuLVx0aWYgKCF0eC1cdTAwM2Vpbml0KVxuJiM0MztcdGlmICghdHgtXHUwMDNlaW5pdCB8fCBiaXRtYXBfZW1wdHkodHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBSZWFkIHRoZSBUeCByZWFkeSBzdGF0dXMgZmlyc3QgKi9cbkBAIC01NzksMTQgJiM0Mzs1ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0LyogRHJvcCBwYWNrZXRzIGlmIHRoZSBsaW5rIHdlbnQgZG93biAqL1xuLVx0bGlua191cCA9IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4tXG4gXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pIHtcbiBcdFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4gXHRcdHU4IHBoeV9pZHggPSBpZHggJiM0MzsgdHgtXHUwMDNlb2Zmc2V0O1xuIFx0XHR1NjQgcmF3X3RzdGFtcCA9IDAsIHRzdGFtcDtcbi1cdFx0Ym9vbCBkcm9wX3RzID0gIWxpbmtfdXA7XG4mIzQzO1x0XHRib29sIGRyb3BfdHMgPSBmYWxzZTtcbiBcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdFx0LyogRHJvcCBwYWNrZXRzIHdoaWNoIGhhdmUgd2FpdGVkIGZvciBtb3JlIHRoYW4gMiBzZWNvbmRzICovXG5AQCAtNjE5LDYgJiM0Mzs2MjAsMjIgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFkcm9wX3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0LyogdmVyaWZ5IHJlYWR5IGJpdCBjbGVhcmVkICovXG4mIzQzO1x0XHRpZiAodHgtXHUwMDNlaGFzX3JlYWR5X2JpdG1hcCkge1xuJiM0MztcdFx0XHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHRzdGFtcF9yZWFkeSBcdTAwMjYgQklUX1VMTChwaHlfaWR4KSkge1xuJiM0MztcdFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCB0eC1cdTAwM2VzdGFsZSkpXG4mIzQzO1x0XHRcdFx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtQSFkgcG9ydCAldSBmYWlsZWQgdG8gY2xlYXIgcmVhZHkgYml0IGZvciBpZHggJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdHB0cF9wb3J0LVx1MDAzZXBvcnRfbnVtLCBwaHlfaWR4KTtcbiYjNDM7XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC1cdTAwM2V0c3RhbXBzW2lkeF0uc2tiLCBpZHgpO1xuIFxuIFx0XHQvKiBGb3IgUEhZcyB3aGljaCBkb24mIzM5O3QgaW1wbGVtZW50IGEgcHJvcGVyIHRpbWVzdGFtcCByZWFkeVxuQEAgLTY3MywyMCAmIzQzOzY5MCwzMyBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHBmLVx1MDAzZXB0cC50eF9od3RzdGFtcF9nb29kICYjNDM7PSB0c3RhbXBfZ29vZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdShzdHJ1Y3Qga3JlZiAqcmVmKVxuJiM0Mzt7XG4mIzQzO1x0d2FrZV91cF92YXIocmVmKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3R4X3RzdGFtcF9vd25lcihzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzLCBsaXN0X25vZGUpIHtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiBcdFx0c3RydWN0IGljZV9wdHBfdHggKnR4ID0gXHUwMDI2cG9ydC1cdTAwM2V0eDtcbiBcbi1cdFx0aWYgKCF0eCB8fCAhdHgtXHUwMDNlaW5pdClcbiYjNDM7XHRcdGlmICghdHgtXHUwMDNlaW5pdClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAodHgpO1xuJiM0MztcbiYjNDM7XHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTcyNSw2ICYjNDM7NzU1LDM3IEBAIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO2ljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcygxMCk7XG4mIzQzO1x0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiYjNDM7XHR1NjQgdHN0YW1wX3JlYWR5O1xuJiM0MztcdGJvb2wgcGVuZGluZztcbiYjNDM7XHR1OCBpZHg7XG4mIzQzO1xuJiM0MztcdGlmIChody1cdTAwM2VyZXNldF9vbmdvaW5nKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRpZiAoaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cdTAwM2VibG9jaywgXHUwMDI2dHN0YW1wX3JlYWR5KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHBlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdGZvcl9lYWNoX3NldF9iaXQoaWR4LCB0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbikge1xuJiM0MztcdFx0XHRpZiAoISh0c3RhbXBfcmVhZHkgXHUwMDI2IEJJVF9VTEwoaWR4ICYjNDM7IHR4LVx1MDAzZW9mZnNldCkpKVxuJiM0MztcdFx0XHRcdHBlbmRpbmcgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFwZW5kaW5nKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7XG4mIzQzO1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIGluLWZsaWdodCBUeCB0aW1lc3RhbXBzIG9uIGJsb2NrICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0dHgtXHUwMDNlYmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlciAtIEZsdXNoIGFueSByZW1haW5pbmcgdGltZXN0YW1wcyBmcm9tIHRoZSB0cmFja2VyXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuQEAgLTc0MSw2ICYjNDM7ODAyLDggQEAgaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRpbnQgZXJyO1xuIFx0dTggaWR4O1xuIFxuJiM0MztcdGljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihwZiwgdHgpO1xuJiM0MztcbiBcdGVyciA9IGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtXHUwMDNlYmxvY2ssIFx1MDAyNnRzdGFtcF9yZWFkeSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O0ZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcXG5cJiMzNDssXG5AQCAtNzc5LDEyICYjNDM7ODQyLDEwIEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxuICAqIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlIC0gTWFyayB1bmZpbmlzaGVkIHRpbWVzdGFtcHMgYXMgc3RhbGVcbiAgKiBAdHg6IHRoZSB0cmFja2VyIHRvIG1hcmtcbiAgKlxuLSAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgc2VuZGluZ1xuLSAqIHRoZWlyIHRpbWVzdGFtcCB2YWx1ZSB0byB0aGUgc3RhY2suIFRoaXMgaXMgcmVxdWlyZWQgdG8gcHJldmVudCBleHRlbmRpbmdcbi0gKiB0aGUgNDBiaXQgaGFyZHdhcmUgdGltZXN0YW1wIGluY29ycmVjdGx5LlxuLSAqXG4tICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIFBUUCBjbG9jayBpcyBtb2RpZmllZCBzdWNoIGFzIGFmdGVyIGEgc2V0XG4tICogdGltZSByZXF1ZXN0LlxuJiM0MzsgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXJcbiYjNDM7ICogZnJvbSByZXBvcnRpbmcgdGhlIHRpbWVzdGFtcCB0byB0aGUgc3RhY2suIFRoaXMgaXMgY2FsbGVkIHRvIGluZm9ybSB0aGVcbiYjNDM7ICogZHJpdmVyIHRoYXQgYSB0aW1lc3RhbXAgaXMgZXhwZWN0ZWQgdG8gZmFpbCBpZiBpdCB3YXMgaW5pdGlhdGVkIGFzIHRoZSBsaW5rXG4mIzQzOyAqIHdlbnQgZG93bi5cbiAgKi9cbiBzdGF0aWMgdm9pZFxuIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbkBAIC04MDgsOCAmIzQzOzg2OSwxNiBAQCBpY2VfcHRwX2ZsdXNoX2FsbF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMsIGxpc3Rfbm9kZSlcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocHRwX3BvcnRfdG9fcGYocG9ydCksIFx1MDAyNnBvcnQtXHUwMDNldHgpO1xuJiM0MztcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC05OTQsMTMgJiM0MzsxMDYzLDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9jYWNoZWRfcGhjdGltZShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXHUwMDNlcHRwLmt3b3JrZXIsIFx1MDAyNnBmLVx1MDAzZXB0cC53b3JrLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwKSk7XG4gXHR9XG4tXG4tXHQvKiBNYXJrIGFueSBvdXRzdGFuZGluZyB0aW1lc3RhbXBzIGFzIHN0YWxlLCBzaW5jZSB0aGV5IG1pZ2h0IGhhdmVcbi1cdCAqIGJlZW4gY2FwdHVyZWQgaW4gaGFyZHdhcmUgYmVmb3JlIHRoZSB0aW1lIHVwZGF0ZS4gVGhpcyBjb3VsZCBsZWFkXG4tXHQgKiB0byB1cyBleHRlbmRpbmcgdGhlbSB3aXRoIHRoZSB3cm9uZyBjYWNoZWQgdmFsdWUgcmVzdWx0aW5nIGluXG4tXHQgKiBpbmNvcnJlY3QgdGltZXN0YW1wIHZhbHVlcy5cbi1cdCAqL1xuLVx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgpO1xuIH1cbiBcbiAvKipcbkBAIC0xMTMzLDYgJiM0MzsxMTk1LDcgQEAgc3RhdGljIGludCBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8oc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZjtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3O1xuIFx0aW50IHR4X2VycjtcbkBAIC0xMTU1LDEyICYjNDM7MTIxOCwyOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiBcdFx0dHhfZXJyID0gaWNlX3BoeV9jZmdfdHhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtXHUwMDNlcG9ydF9udW0pO1xuIFx0cnhfZXJyID0gaWNlX3BoeV9jZmdfcnhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtXHUwMDNlcG9ydF9udW0pO1xuIFx0aWYgKHR4X2VyciB8fCByeF9lcnIpIHtcbi1cdFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlciAqL1xuJiM0MztcdFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci5cbiYjNDM7XHRcdCAqIFRoaXMgaXMgZXhwZWN0ZWQgZHVyaW5nIG5vcm1hbCBsaW5rLXVwOiB0aGUgdmVybmllciBvZmZzZXRcbiYjNDM7XHRcdCAqIGNhbGlicmF0aW9uIGNhbm5vdCBjb21wbGV0ZSB1bnRpbCBhdCBsZWFzdCBvbmUgcGFja2V0IGhhc1xuJiM0MztcdFx0ICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSxcbiYjNDM7XHRcdFx0XCYjMzQ7UFRQIG9mZnNldCBub3QgeWV0IHZhbGlkIGZvciBwb3J0ICV1ICh0eF9lcnI9JWQgcnhfZXJyPSVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydC1cdTAwM2Vwb3J0X251bSwgdHhfZXJyLCByeF9lcnIpO1xuIFx0XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cdTAwM2VwdHAua3dvcmtlcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2cG9ydC1cdTAwM2Vvdl93b3JrLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qIFR4IGFuZCBSeCBvZmZzZXRzIGFyZSBub3cgY29uZmlndXJlZCwgZW5hYmxlIFR4IHRpbWVzdGFtcHMgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRwb3J0LVx1MDAzZXR4LmNhbGlicmF0aW5nID0gZmFsc2U7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSxcbiYjNDM7XHRcdFwmIzM0O1BUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxcblwmIzM0OyxcbiYjNDM7XHRcdHBvcnQtXHUwMDNlcG9ydF9udW0pO1xuIH1cbiBcbiAvKipcbkBAIC0xMjQzLDEzICYjNDM7MTMyMiwyMCBAQCBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXG4gXG4gXHRcdC8qIFN0YXJ0IHRoZSBQSFkgdGltZXIgaW4gVmVybmllciBtb2RlICovXG4gXHRcdGVyciA9IGljZV9zdGFydF9waHlfdGltZXJfZTgyeChodywgcG9ydCk7XG4tXHRcdGlmIChlcnIpXG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0cHRwX3BvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdHBfcG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdC8qIEVuYWJsZSBUeCB0aW1lc3RhbXBzIHJpZ2h0IGF3YXkgKi9cbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgubG9jaywgZmxhZ3MpO1xuLVx0XHRwdHBfcG9ydC1cdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdC8qIERvIG5vdCBjbGVhciBjYWxpYnJhdGluZyBmbGFnIGhlcmUuIFR4IHRpbWVzdGFtcHMgcmVtYWluXG4mIzQzO1x0XHQgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWRcbiYjNDM7XHRcdCAqIHRoYXQgdGhlIFR4IGFuZCBSeCBvZmZzZXQgY2FsaWJyYXRpb24gaGFzIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqIENsZWFyaW5nIGl0IGhlcmUgd291bGQgYWxsb3cgVHggdGltZXN0YW1wcyB0byBiZSByZXBvcnRlZFxuJiM0MztcdFx0ICogYmVmb3JlIHRoZSBQSFkgb2Zmc2V0IHJlZ2lzdGVycyBhcmUgY29uZmlndXJlZCwgbGVhZGluZ1xuJiM0MztcdFx0ICogdG8gaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4mIzQzO1x0XHQgKi9cbiBcbiBcdFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXHUwMDNlcHRwLmt3b3JrZXIsIFx1MDAyNnB0cF9wb3J0LVx1MDAzZW92X3dvcmssXG4gXHRcdFx0XHRcdCAgIDApO1xuQEAgLTEyODAsMTggJiM0MzsxMzY2LDIxIEBAIHZvaWQgaWNlX3B0cF9saW5rX2NoYW5nZShzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBsaW5rdXApXG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXG4tXHRpZiAocGYtXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpXG4tXHRcdHJldHVybjtcbi1cbiBcdHB0cF9wb3J0ID0gXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQ7XG4gXG4gXHQvKiBVcGRhdGUgY2FjaGVkIGxpbmsgc3RhdHVzIGZvciB0aGlzIHBvcnQgaW1tZWRpYXRlbHkgKi9cbiBcdHB0cF9wb3J0LVx1MDAzZWxpbmtfdXAgPSBsaW5rdXA7XG4gXG4mIzQzO1x0aWYgKHBmLVx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovXG4gXHRpZiAocGYtXHUwMDNlaHcucmVzZXRfb25nb2luZylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghbGlua3VwKVxuJiM0MztcdFx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgpO1xuJiM0MztcbiBcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncykpIHtcbiBcdFx0aW50IHBpbiwgZXJyO1xuQEAgLTE0MjQsMTYgJiM0MzsxNTEzLDIxIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfcGh5X3RpbWVzdGFtcGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbiAgKi9cbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0bGlzdF9mb3JfZWFjaChlbnRyeSwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cykge1xuLVx0XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0ID0gbGlzdF9lbnRyeShlbnRyeSxcbi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcbi1cdFx0XHRcdFx0XHQgICAgICAgbGlzdF9ub2RlKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRpZiAocG9ydC1cdTAwM2VsaW5rX3VwKVxuIFx0XHRcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwb3J0KTtcbiYjNDM7XG4mIzQzO1x0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3OCw3NCAmIzQzOzI3NzIsNTYgQEAgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiYjNDM7c3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4LCBib29sIGluX2lycSlcbiB7XG4tXHRib29sIG1vcmVfdGltZXN0YW1wcztcbiYjNDM7XHRERUNMQVJFX0JJVE1BUCh0c3RhbXBzLCBJTkRFWF9QRVJfUE9SVF9NQVgpID0ge307XG4gXG4gXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2dHgtXHUwMDNlbG9jaykge1xuIFx0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRtb3JlX3RpbWVzdGFtcHMgPSAhYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKTtcbi1cdH1cbiYjNDM7XHRcdGlmIChpbl9pcnEpIHtcbiYjNDM7XHRcdFx0aWYgKCFpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAodHgpKVxuJiM0MztcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBtb3JlX3RpbWVzdGFtcHM7XG4mIzQzO1x0XHRcdHJldHVybiBiaXRtYXBfYW5kbm90KHRzdGFtcHMsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlc3RhbGUsIHR4LVx1MDAzZWxlbik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXR1cm4gIWJpdG1hcF9lbXB0eSh0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIH1cbiBcbi1zdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3N0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXG4ge1xuJiM0MztcdGJvb2wgaGF2ZV90c3RhbXBzID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spIHtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzLFxuLVx0XHRcdFx0ICAgIGxpc3Rfbm9kZSkge1xuLVx0XHRcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFx1MDAyNnBvcnQtXHUwMDNldHg7XG4tXG4tXHRcdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHR4KSlcbi1cdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuJiM0MztcdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBvcnQtXHUwMDNldHgsIGluX2lycSkpIHtcbiYjNDM7XHRcdFx0aGF2ZV90c3RhbXBzID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gaGF2ZV90c3RhbXBzO1xuIH1cbiBcbi1ib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0Mztib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcbiB7XG4tXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuLVx0aW50IHJldDtcbi1cbi1cdC8qIENoZWNrIHNvZnR3YXJlIGluZGljYXRvciAqL1xuIFx0c3dpdGNoIChwZi1cdTAwM2VwdHAudHhfaW50ZXJydXB0X21vZGUpIHtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfTk9ORTpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9TRUxGOlxuLVx0XHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRicmVhaztcbiYjNDM7XHRcdHJldHVybiBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcdTAwMjZwZi1cdTAwM2VwdHAucG9ydC50eCwgaW5faXJxKTtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfQUxMOlxuLVx0XHRpZiAoaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0YnJlYWs7XG4mIzQzO1x0XHRyZXR1cm4gaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmLCBpbl9pcnEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O1VuZXhwZWN0ZWQgVHggdGltZXN0YW1wIGludGVycnVwdCBtb2RlICV1XFxuXCYjMzQ7LFxuIFx0XHRcdCAgcGYtXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHQvKiBDaGVjayBoYXJkd2FyZSBpbmRpY2F0b3IgKi9cbi1cdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7VW5hYmxlIHRvIHJlYWQgUEhZIFR4IHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRyZXQpO1xuLVx0XHQvKiBTdG9wIHRyaWdnZXJpbmcgSVJRcyBpZiB3ZSYjMzk7cmUgdW5hYmxlIHRvIHJlYWQgUEhZICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cbi1cdC8qIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KCkgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB0aW1lc3RhbXBzXG4tXHQgKiBhdmFpbGFibGUsIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRpbmcgdGltZXN0YW1wcywgYW5kIGEgbmVnYXRpdmVcbi1cdCAqIHZhbHVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAod2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUpLlxuLVx0ICovXG4tXHRyZXR1cm4gcmV0IFx1MDAzZSAwO1xuIH1cbiBcbiAvKipcbkBAIC0yNzk5LDcgJiM0MzsyODc1LDcgQEAgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdC8qIEU4MzAgY2FuIHJlYWQgdGltZXN0YW1wcyBpbiB0aGUgdG9wIGhhbGYgdXNpbmcgcmQzMigpICovXG4gXHRcdGljZV9wdHBfcHJvY2Vzc190cyhwZik7XG4gXG4tXHRcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcbiYjNDM7XHRcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcbiBcdFx0XHQvKiBQcm9jZXNzIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMuIElmIHRoZXJlXG4gXHRcdFx0ICogaXMgbW9yZSB3b3JrLCByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGFnYWluLlxuIFx0XHRcdCAqL1xuQEAgLTI4MjksNyAmIzQzOzI5MDUsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX21heWJlX3RyaWdnZXJfdHhfaW50ZXJydXB0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpO1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2Vodztcbi1cdGludCByZXQ7XG4gXG4gXHRpZiAoIXBmLVx1MDAzZXB0cC5wb3J0LnR4Lmhhc19yZWFkeV9iaXRtYXApXG4gXHRcdHJldHVybjtcbkBAIC0yODM3LDExICYjNDM7MjkxMiw4IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoIWljZV9wZl9zcmNfdG1yX293bmVkKHBmKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cmV0ID0gaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoaHcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7UFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRyZXQpO1xuLVx0fSBlbHNlIGlmIChyZXQpIHtcbiYjNDM7XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIGZhbHNlKSB8fFxuJiM0MztcdCAgICBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodykpIHtcbiBcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1BUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cXG5cJiMzNDspO1xuIFxuIFx0XHR3cjMyKGh3LCBQRklOVF9PSUNSLCBQRklOVF9PSUNSX1RTWU5fVFhfTSk7XG5AQCAtMjg5MCwxNCAmIzQzOzI5NjIsMTYgQEAgdm9pZCBpY2VfcHRwX3F1ZXVlX3dvcmsoc3RydWN0IGljZV9wZiAqcGYpXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsXG4gXHRcdFx0XHRcdGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIHtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuJiM0MztcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSB7XG4tXHRcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxuLVx0XHRcdFx0XHRcdCAgICAgICBsaXN0X25vZGUpO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgaWNlX3BmICpwZWVyX3BmID0gcHRwX3BvcnRfdG9fcGYocG9ydCk7XG4gXG4mIzQzO1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnBvcnQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdGlmICghaWNlX2lzX3ByaW1hcnkoXHUwMDI2cGVlcl9wZi1cdTAwM2VodykpIHtcbiBcdFx0XHRpZiAocmVidWlsZCkge1xuIFx0XHRcdFx0LyogVE9ETzogV2hlbiBpbXBsZW1lbnRpbmcgcmVidWlsZD10cnVlOlxuQEAgLTI5MDksNyAmIzQzOzI5ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsXG4gXHRcdFx0XHRpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBlZXJfcGYsIHJlc2V0X3R5cGUpO1xuIFx0XHRcdH1cbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0yOTM2LDYgJiM0MzszMDE0LDE0IEBAIHZvaWQgaWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXHRpZiAocmVzZXRfdHlwZSA9PSBJQ0VfUkVTRVRfUEZSKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGVcbiYjNDM7XHQgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWVcbiYjNDM7XHQgKiBzaWRlYmFuZCBxdWV1ZSBjb21tYW5kcyB0aGF0IHdpbGwgZmFpbCBvciB0aW1lb3V0LCBhbmQgbWF5XG4mIzQzO1x0ICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpXG4mIzQzO1x0XHRrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwdHAtXHUwMDNlcG9ydC5vdl93b3JrKTtcbiYjNDM7XG4gXHRpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpIFx1MDAyNlx1MDAyNiBody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbiBcdFx0aWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHBmLCBmYWxzZSwgcmVzZXRfdHlwZSk7XG4gXG5AQCAtMzA4NiwxMSAmIzQzOzMxNzIsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnJlZik7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsXG4tXHRcdCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdGxpc3RfYWRkX3JjdShcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdC8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LlxuIFx0ICogT25seSBtZWFuaW5nZnVsIG9uIEU4MjUgKG90aGVyIE1BQyB0eXBlcyBkb24mIzM5O3QgZXhwb3NlIHR4LWNsa1xuQEAgLTMxMTMsMTIgJiM0MzszMTk5LDMyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2NsZWFudXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFx1MDAyNnBmLVx1MDAzZXB0cDtcbiYjNDM7XHRzdHJ1Y3Qga3JlZiAqcmVmO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlICE9IElDRV9NQUNfVU5LTk9XTikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0fVxuJiM0MztcdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmdcbiYjNDM7XHQgKiBvdXRzdGFuZGluZyByZWZlcmVuY2VzIHRvIHRoZSBQVFAgcG9ydC4gVG8gbWFrZSBzdXJlIHRoaXMgaXMgdHJ1ZSxcbiYjNDM7XHQgKiBmaXJzdCByZW1vdmUgdGhlIHBvcnQgZnJvbSB0aGUgbGlzdCwgdGhlbiBkcm9wIHRoZSBwcmltYXJ5XG4mIzQzO1x0ICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGxcbiYjNDM7XHQgKiBleGlzdGluZyByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBGaW5hbGx5LCBzeW5jaHJvbml6ZV9yY3UoKSB0b1xuJiM0MztcdCAqIGVuc3VyZSB0aGF0IGFsbCBSQ1UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBtaWdodCBhdHRlbXB0IHRvXG4mIzQzO1x0ICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbF9yY3UoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcbiYjNDM7XHRyZWYgPSBcdTAwMjZwdHAtXHUwMDNlcG9ydC5yZWY7XG4mIzQzO1x0a3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcbiYjNDM7XHRkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0ICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLFxuJiM0MztcdFx0ICAgICAgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIHBvcnQgcmVmZXJlbmNlcyB0byByZWxlYXNlLiBDb250aW51aW5nIHRvIHVubG9hZCBhbnl3YXlzLlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuIH1cbiBcbiAvKipcbkBAIC0zMjEwLDkgJiM0MzszMzE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgUFRQIHdvcmsgdGhyZWFkc1xuJiM0MzsgKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgdGhlIFBUUCBrd29ya2VyXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuICAqIEBwdHA6IFBGIFBUUCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZVxuJiM0MzsgKiBwZXJpb2RpYyB3b3JrIGlzIG5vdCBxdWV1ZWQgaGVyZTsgdGhlIGNhbGxlciBzdGFydHMgaXQgb25jZSB0aGUgUFRQXG4mIzQzOyAqIHN0YXRlIGlzIElDRV9QVFBfUkVBRFkuXG4gICovXG4gc3RhdGljIGludCBpY2VfcHRwX2luaXRfd29yayhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHAgKnB0cClcbiB7XG5AQCAtMzIzMSw5ICYjNDM7MzM0MSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXG4gXG4gXHRwdHAtXHUwMDNla3dvcmtlciA9IGt3b3JrZXI7XG4gXG4tXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIGdvaW5nICovXG4tXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXHUwMDNla3dvcmtlciwgXHUwMDI2cHRwLVx1MDAzZXdvcmssIDApO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMzNTUsNiAmIzQzOzM0NjIsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jbGVhbl9wZjtcbiBcbiYjNDM7XHQvKiBTZWVkIGxpbmtfdXAgZnJvbSBjdXJyZW50IFBIWSBzdGF0dXMsIHNpbmNlIGxpbmsgbWF5IGFscmVhZHkgYmUgdXBcbiYjNDM7XHQgKiAoZS5nLiBhZnRlciBQWEUgYm9vdCkgd2l0aCBubyBsaW5rLWNoYW5nZSBlZGdlIHRvIGNhdGNoIGl0IGxhdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZi1cdTAwM2Vody5wb3J0X2luZm8pXG4mIzQzO1x0XHRwdHAtXHUwMDNlcG9ydC5saW5rX3VwID1cbiYjNDM7XHRcdFx0ISEocGYtXHUwMDNlaHcucG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFx1MDAyNlxuJiM0MztcdFx0XHRJQ0VfQVFfTElOS19VUCk7XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSB0aGUga3dvcmtlciBiZWZvcmUgcmVzdGFydGluZyB0aGUgUEhZLCB3aGljaCBxdWV1ZXMgd29yayBvblxuJiM0MztcdCAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzXG4mIzQzO1x0ICogZnJvbSByZWFjaGluZyBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoKSB3aGlsZSBrd29ya2VyIGlzIHN0aWxsIE5VTExcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZXhpdDtcbiYjNDM7XG4gXHQvKiBTdGFydCB0aGUgUEhZIHRpbWVzdGFtcGluZyBibG9jayAqL1xuIFx0aWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHBmKTtcbiBcbkBAIC0zMzYzLDkgJiM0MzszNDg2LDEwIEBAIHZvaWQgaWNlX3B0cF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFxuIFx0cHRwLVx1MDAzZXN0YXRlID0gSUNFX1BUUF9SRUFEWTtcbiBcbi1cdGVyciA9IGljZV9wdHBfaW5pdF93b3JrKHBmLCBwdHApO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfZXhpdDtcbiYjNDM7XHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIG9ubHkgYWZ0ZXIgdGhlIHN0YXRlIGlzIFJFQURZOyB0aGUgd29ya2VyXG4mIzQzO1x0ICogcmV0dXJucyB3aXRob3V0IHJlc2NoZWR1bGluZyB3aGlsZSB0aGUgc3RhdGUgaXMgbm90IFJFQURZLlxuJiM0MztcdCAqL1xuJiM0MztcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC1cdTAwM2Vrd29ya2VyLCBcdTAwMjZwdHAtXHUwMDNld29yaywgMCk7XG4gXG4gXHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7UFRQIGluaXQgc3VjY2Vzc2Z1bFxcblwmIzM0Oyk7XG4gXHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmhcbmluZGV4IGM0YjBkYTdjZTIwZWQuLjEzMTU4YTkzMTlmYjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG5AQCAtNSw2ICYjNDM7NSw4IEBAXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3JlZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aWNlX3B0cF9ody5oXCYjMzQ7XG5AQCAtMTMwLDYgJiM0MzsxMzIsOSBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gI2RlZmluZSBJTkRFWF9QRVJfUE9SVF9FODJYXHRcdDE2XG4gI2RlZmluZSBJTkRFWF9QRVJfUE9SVFx0XHRcdDY0XG4gXG4mIzQzOy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzdGFtcCBpbmRleGVzIGFjcm9zcyBhbGwgZGV2aWNlcyAqL1xuJiM0MzsjZGVmaW5lIElOREVYX1BFUl9QT1JUX01BWCAgICAgICAgICAgICAgSU5ERVhfUEVSX1BPUlRcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IGljZV9wdHBfcG9ydCAtIGRhdGEgdXNlZCB0byBpbml0aWFsaXplIGFuIGV4dGVybmFsIHBvcnQgZm9yIFBUUFxuICAqXG5AQCAtMTM4LDYgJiM0MzsxNDMsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0JiMzOTtzIFBIWSBvZmZzZXQgaXMgdmFsaWQuXG4gICpcbiAgKiBAbGlzdF9ub2RlOiBsaXN0IG1lbWJlciBzdHJ1Y3R1cmVcbiYjNDM7ICogQHJlZjogcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHVzZSB3aXRoIGFkYXB0ZXIgcG9ydHMgbGlzdFxuICAqIEB0eDogVHggdGltZXN0YW1wIHRyYWNraW5nIGZvciB0aGlzIHBvcnRcbiAgKiBAb3Zfd29yazogZGVsYXllZCB3b3JrIHRhc2sgZm9yIHRyYWNraW5nIHdoZW4gUEhZIG9mZnNldCBpcyB2YWxpZFxuICAqIEBwc19sb2NrOiBtdXRleCB1c2VkIHRvIHByb3RlY3QgdGhlIG92ZXJhbGwgUFRQIFBIWSBzdGFydCBwcm9jZWR1cmVcbkBAIC0xNDksNiAmIzQzOzE1NSw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcbiAgKi9cbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlO1xuJiM0MztcdHN0cnVjdCBrcmVmIHJlZjtcbiBcdHN0cnVjdCBpY2VfcHRwX3R4IHR4O1xuIFx0c3RydWN0IGt0aHJlYWRfZGVsYXllZF93b3JrIG92X3dvcms7XG4gXHRzdHJ1Y3QgbXV0ZXggcHNfbG9jazsgLyogcHJvdGVjdHMgb3ZlcmFsbCBQVFAgUEhZIHN0YXJ0IHByb2NlZHVyZSAqL1xuQEAgLTMxMiw3ICYjNDM7MzE5LDcgQEAgdm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KTtcbiB2b2lkIGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpO1xuIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3RzKHN0cnVjdCBpY2VfcGYgKnBmKTtcbiBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZik7XG4tYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4mIzQzO2Jvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKTtcbiB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuIFxuQEAgLTM2MCw3ICYjNDM7MzY3LDggQEAgc3RhdGljIGlubGluZSBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7aWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbmluZGV4IDNhNDFjNzExZTc1MWIuLjEwZTk3Mzg3NjYwOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5AQCAtNzM3LDI0ICYjNDM7NzM3LDYgQEAgc3RhdGljIGludCBpY2VfcmVhZF9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsXG4gXHRyZXR1cm4gaWNlX3JlYWRfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApO1xuIH1cbiBcbi0vKipcbi0gKiBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnIC0gV3JpdGUgYSBQSFkgcG9ydCBtZW1vcnkgbG9jYXRpb25cbi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBiZSByZWFkXG4tICogQG9mZnNldDogT2Zmc2V0IGZyb20gUEhZIHBvcnQgcmVnaXN0ZXIgYmFzZVxuLSAqIEB2YWw6IFBvaW50ZXIgdG8gdGhlIHZhbHVlIHRvIHJlYWQgKG91dCBwYXJhbSlcbi0gKlxuLSAqIFJldHVybjpcbi0gKiAqICUwICAgICAgLSBzdWNjZXNzXG4tICogKiAlRUlOVkFMIC0gaW52YWxpZCBwb3J0IG51bWJlciBvciByZXNvdXJjZSB0eXBlXG4tICogKiAlb3RoZXIgIC0gZmFpbGVkIHRvIHdyaXRlIHRvIFBIWVxuLSAqL1xuLXN0YXRpYyBpbnQgaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcbi1cdFx0XHRcdCAgICAgdTMyIHZhbClcbi17XG4tXHRyZXR1cm4gaWNlX3dyaXRlX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcbi19XG4tXG4gLyoqXG4gICogaWNlX3dyaXRlX3F1YWRfcHRwX3JlZ19ldGg1NmcgLSBXcml0ZSBhIFBIWSBxdWFkIHJlZ2lzdGVyXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbkBAIC0xMTM5LDggJiM0MzsxMTIxLDggQEAgc3RhdGljIGludCBpY2VfcmVhZF9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4LFxuICAqIGludGVybmFsIFBIWXMgb2YgdGhlIDU2RyBkZXZpY2VzLlxuICAqXG4gICogVG8gZGlyZWN0bHkgY2xlYXIgdGhlIGNvbnRlbnRzIG9mIHRoZSB0aW1lc3RhbXAgYmxvY2sgZW50aXJlbHksIGRpc2NhcmRpbmdcbi0gKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgdXNlXG4tICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfcXVhZF9ldGg1NmcoKS5cbiYjNDM7ICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHBlcmZvcm0gYSBQSFkgc29mdFxuJiM0MzsgKiByZXNldCB2aWEgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKS5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGFuIGlkeCB3aG9zZSBiaXQgaXMgc2V0IGFjY29yZGluZyB0b1xuICAqIGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeSgpLlxuQEAgLTExNTIsMTEgJiM0MzsxMTM0LDExIEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCxcbiBzdGF0aWMgaW50IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4KVxuIHtcbiBcdHU2NCB1bnVzZWRfdHN0YW1wO1xuLVx0dTE2IGxvX2FkZHI7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogUmVhZCB0aGUgdGltZXN0YW1wIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wIHN0YXR1cyBiaXQgaXNcbi1cdCAqIGNsZWFyZWQuXG4mIzQzO1x0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XG4mIzQzO1x0ICogY2xlYXJzIHRoZSBlbnRyeSYjMzk7cyB2YWxpZCBiaXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIChyZWFkLW9ubHkpXG4mIzQzO1x0ICogdHNfbWVtb3J5X3N0YXR1cyBiaXQuXG4gXHQgKi9cbiBcdGVyciA9IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgsIFx1MDAyNnVudXNlZF90c3RhbXApO1xuIFx0aWYgKGVycikge1xuQEAgLTExNjQsMzIgJiM0MzsxMTQ2LDQwIEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpXG4gXHRcdFx0ICBwb3J0LCBpZHgsIGVycik7XG4gXHR9XG4gXG4tXHRsb19hZGRyID0gKHUxNilQSFlfVFNUQU1QX0woaWR4KTtcbi1cbi1cdGVyciA9IGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcoaHcsIHBvcnQsIGxvX2FkZHIsIDApO1xuLVx0aWYgKGVycikge1xuLVx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gY2xlYXIgbG93IFBUUCB0aW1lc3RhbXAgcmVnaXN0ZXIgZm9yIHBvcnQgJXUsIGlkeCAldSwgZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdCAgcG9ydCwgaWR4LCBlcnIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyAtIENsZWFyIGFsbCB0aW1lc3RhbXBzIGZyb20gdGhlIHBvcnQgYmxvY2tcbiYjNDM7ICogaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyAtIFJlc2V0IG9uZSBwb3J0JiMzOTtzIFR4IHRpbWVzdGFtcCBtZW1vcnlcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuJiM0MzsgKiBAcG9ydDogcG9ydCBudW1iZXIgdG8gY2xlYXJcbiYjNDM7ICpcbiYjNDM7ICogRnVsbHkgcmVzZXQgYSBzaW5nbGUgUEhZIHBvcnQmIzM5O3MgVHggdGltZXN0YW1wIG1lbW9yeS4gUGVyIHRoZSBQSFkgc3BlYywgdGhlXG4mIzQzOyAqIG9ubHkgd2F5IHRvIGNsZWFyIGEgdGltZXN0YW1wIHZhbGlkIGJpdCAoYW5kIGl0cyByZWFkLW9ubHkgdHNfbWVtb3J5X3N0YXR1c1xuJiM0MzsgKiBiaXQpIGlzIHRvIHJlYWQgdGhlIHRpbWVzdGFtcCBtZW1vcnkgbG9jYXRpb24sIHNvIHJlYWQgZXZlcnkgZW50cnkgZm9yIHRoZVxuJiM0MzsgKiBwb3J0ICh0d28gMzItYml0IHJlYWRzIGVhY2gpLiBUaGlzIGRpc2NhcmRzIGFsbCB0aW1lc3RhbXAgZGF0YSBvbiB0aGUgcG9ydCxcbiYjNDM7ICogc28gaXQgbXVzdCBvbmx5IGJlIHVzZWQgZm9yIGEgZnVsbCByZXNldDsgY2FsbGVycyB0aGF0IG11c3QgcHJlc2VydmVcbiYjNDM7ICogaW4tZmxpZ2h0IHRpbWVzdGFtcHMgY2xlYXIgaW5kaXZpZHVhbCBpbmRpY2VzIHZpYSBpY2VfY2xlYXJfcGh5X3RzdGFtcCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBEdWUgdG8gaW50ZXJhY3Rpb25zIHdpdGggYW4gaW50ZXJuYWwgSFcgY291bnRlciBmb3IgdGhlIG51bWJlciBvZlxuJiM0MzsgKiBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzLCB0aGlzICptdXN0KiBvbmx5IGJlIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZVxuJiM0MzsgKiBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpIHByb2NlZHVyZS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJuYWwgY291bnRlclxuJiM0MzsgKiBtYXkgYmVjb21lIG91dCBvZiBzeW5jIGFuZCBwcmV2ZW50IG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0cy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byByZWFkIHRoZSBQSFkuXG4gICovXG4tc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3KVxuJiM0MztzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4ge1xuLVx0dW5zaWduZWQgaW50IHBvcnQ7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1x0dTggaWR4O1xuIFxuLVx0Zm9yIChwb3J0ID0gMDsgcG9ydCBcdTAwM2MgaHctXHUwMDNlcHRwLm51bV9scG9ydHM7IHBvcnQmIzQzOyYjNDM7KSB7XG4tXHRcdGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX0wsXG4tXHRcdFx0XHRcdCAwKTtcbi1cdFx0aWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVNfVSxcbi1cdFx0XHRcdFx0IDApO1xuJiM0MztcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBJTkRFWF9QRVJfUE9SVDsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTIxMTUsMTAgJiM0MzsyMTA1LDYgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX09GRlNFVF9SRUFEWSwgMCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuIFx0ZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1JYX09GRlNFVF9SRUFEWSwgMCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIxMzMsOSAmIzQzOzIxMTksMTEgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldClcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuICAqIEBwb3J0OiB0aGUgUEhZIHBvcnQgdG8gc3RhcnRcbiAgKlxuLSAqIFN0YXJ0IHRoZSBjbG9jayBvZiBhIFBIWSBwb3J0LiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvXG4tICogcmUtY2FsaWJyYXRlIFR4IGFuZCBSeCB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpc1xuLSAqIGluaXRpYWxpemVkIG9yIHdoZW4gbGluayBzcGVlZCBjaGFuZ2VzLlxuJiM0MzsgKiBQZXJmb3JtIGEgUEhZIHNvZnQgcmVzZXQgYW5kIHRoZW4gc3RhcnQgdGhlIGNsb2NrIGZvciB0aGUgUEhZIHBvcnQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8gcmUtY2FsaWJyYXRlIFR4IGFuZCBSeFxuJiM0MzsgKiB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpcyBpbml0aWFsaXplZCBvciB3aGVuIGxpbmtcbiYjNDM7ICogc3BlZWQgY2hhbmdlcy5cbiAgKlxuICAqIFJldHVybjpcbiAgKiAqICUwICAgICAtIHN1Y2Nlc3NcbkBAIC0yMTUxLDYgJiM0MzsyMTM5LDEwIEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydClcbiBcbiBcdHRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpO1xuIFxuJiM0MztcdGVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4gXHRlcnIgPSBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKGh3LCBwb3J0LCBmYWxzZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIyOTQsNiAmIzQzOzIyODYsNyBAQCBpbnQgaWNlX3B0cF9yZWFkX3R4X2h3dHN0YW1wX3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHUzMiAqdHNfc3RhdHVzKVxuICAqXG4gICogVHJpZ2dlciBhIHNvZnQgcmVzZXQgb2YgdGhlIEVUSDU2RyBQSFkgYnkgdG9nZ2xpbmcgdGhlIHNvZnQgcmVzZXRcbiAgKiBiaXQgaW4gdGhlIFBIWSBnbG9iYWwgcmVnaXN0ZXIuIFRoZSByZXNldCBzZXF1ZW5jZSBjb25zaXN0cyBvZjpcbiYjNDM7ICogICAwLiBSZWFkaW5nIGV2ZXJ5IHRpbWVzdGFtcCBtZW1vcnkgcmVnaXN0ZXIgdG8gY2xlYXIgaXRzIHZhbGlkIGJpdFxuICAqICAgMS4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0XG4gICogICAyLiBBc3NlcnRpbmcgdGhlIHNvZnQgcmVzZXQgYml0XG4gICogICAzLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQgYWdhaW5cbkBAIC0yMzAyLDYgJiM0MzsyMjk1LDEyIEBAIGludCBpY2VfcHRwX3JlYWRfdHhfaHd0c3RhbXBfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyICp0c19zdGF0dXMpXG4gICogdG8gc2V0dGxlLiBUaGlzIHByb3ZpZGVzIGEgY29udHJvbGxlZCB3YXkgdG8gcmVpbml0aWFsaXplIHRoZSBQSFlcbiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LlxuICAqXG4mIzQzOyAqIFRvIGVuc3VyZSB0aGF0IHRoZSBpbnRlcm5hbCBjb3VudGVyIG1hdGNoZXMgdGhlIGNvbnRlbnRzIG9mIHRoZVxuJiM0MzsgKiBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMsIHJlYWQgZXZlcnkgdGltZXN0YW1wIGluZGV4IHByaW9yIHRvIHBlcmZvcm1pbmdcbiYjNDM7ICogdGhlIHNvZnQgcmVzZXQuIFRoZSBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMgcmVhZHMgZW5zdXJlIHRoYXQgdGhlIHJlZ2lvblxuJiM0MzsgKiBpcyBjbGVhcmVkLCB3aGlsZSB0aGUgc29mdCByZXNldCBwcm9jZWR1cmUgZW5zdXJlcyB0aGF0IHRoZSB0aW1zZXRhbXBcbiYjNDM7ICogY291bnRlciBpcyByZXNldCB0byB6ZXJvLlxuJiM0MzsgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB3aGVuXG4gICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci5cbiAgKi9cbkBAIC0yMzEwLDYgJiM0MzsyMzA5LDEzIEBAIGludCBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydClcbiBcdHUzMiBnbG9iYWxfdmFsO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRlcnIgPSBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKGh3LCBwb3J0KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgcG9ydCwgZXJyKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGVyciA9IGljZV9yZWFkX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX0dMT0JBTCwgXHUwMDI2Z2xvYmFsX3ZhbCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwmIzM0O0ZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcXG5cJiMzNDssXG5AQCAtNTgwMSw4ICYjNDM7NTgwNyw5IEBAIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnkoc3RydWN0IGljZV9odyAqaHcpXG4gXHRcdGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2U4MngoaHcpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX01BQ19HRU5FUklDXzNLX0U4MjU6XG4tXHRcdGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2Zyhodyk7XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0LyogRTgyNSBoYXJkd2FyZSBtdXN0IG9ubHkgcmVzZXQgdGltZXN0YW1wIG1lbW9yeSBhcyBwYXJ0IG9mXG4mIzQzO1x0XHQgKiB0aGUgc29mdCByZXNldCBwcm9jZWR1cmUuXG4mIzQzO1x0XHQgKi9cbiBcdGNhc2UgSUNFX01BQ19FODEwOlxuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAxOjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBQVFAgdGltZXN0YW1waW5nIGFuZCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTA2YjAwNGRjZDAzNDZiYWU1N2JiNzQ4OGM3ZTQ3MTExMzgwMmY5MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDAxOjA5OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYwppbmRleCAyZGMzNjI5ZDZkMGY2Li5kMTY0M2JmOGExYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYwpAQCAtNjYsMTggJiM0Mzs2NiwxNyBAQCBzdGF0aWMgc3RydWN0IGljZV9hZGFwdGVyICppY2VfYWRhcHRlcl9uZXcoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCW11dGV4X2luaXQoJmFtcDthZGFwdGVyLSZndDtjcGlfcGh5X2xvY2tbaV0pOwogCXJlZmNvdW50X3NldCgmYW1wO2FkYXB0ZXItJmd0O3JlZmNvdW50LCAxKTsKIAotCW11dGV4X2luaXQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5saXN0KTsKIAogCXJldHVybiBhZGFwdGVyOwogfQogCiBzdGF0aWMgdm9pZCBpY2VfYWRhcHRlcl9mcmVlKHN0cnVjdCBpY2VfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMpKTsKJiM0MzsJV0FSTl9PTighbGlzdF9lbXB0eSgmYW1wO2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QpKTsKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoYWRhcHRlci0mZ3Q7Y3BpX3BoeV9sb2NrKTsgaSYjNDM7JiM0MzspCiAJCW11dGV4X2Rlc3Ryb3koJmFtcDthZGFwdGVyLSZndDtjcGlfcGh5X2xvY2tbaV0pOwotCW11dGV4X2Rlc3Ryb3koJmFtcDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKIAogCWtmcmVlKGFkYXB0ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaAppbmRleCA0ZjY5NWYzMmRhM2Q4Li4zOTkyM2RlZGQ1MzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaApAQCAtMTksMTMgJiM0MzsxOSwxMyBAQCBzdHJ1Y3QgaWNlX3BmOwogICoKICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGRhdGEgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYWRhcHRlciBwb3J0cwogICoKLSAqIEBwb3J0czogbGlzdCBvZiBwb3J0cwomIzQzOyAqIEBsaXN0OiBsaXN0IG9mIHBvcnRzCiAgKiBAbG9jazogcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIHBvcnRzIGxpc3QKICAqLwogc3RydWN0IGljZV9wb3J0X2xpc3QgewotCXN0cnVjdCBsaXN0X2hlYWQgcG9ydHM7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAkvKiBUbyBzeW5jaHJvbml6ZSB0aGUgcG9ydHMgbGlzdCBvcGVyYXRpb25zICovCi0Jc3RydWN0IG11dGV4IGxvY2s7CiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwppbmRleCBkODg4MzU0ODJkM2FhLi5jODRkNjNiOGQyNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwpAQCAtMzI0OCw3ICYjNDM7MzI0OCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbWlzY19pbnRyX3RocmVhZF9mbihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSkKIAlpY2VfaXJxX2R5bmFtaWNfZW5hKGh3LCBOVUxMLCBOVUxMKTsKIAlpY2VfZmx1c2goaHcpOwogCi0JaWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkgewomIzQzOwlpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7CiAJCS8qIElmIGFueSBuZXcgVHggdGltZXN0YW1wcyBoYXBwZW5lZCB3aGlsZSBpbiBpbnRlcnJ1cHQsCiAJCSAqIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgaXQgYWdhaW4uCiAJCSAqLwpAQCAtNjc0NSw3ICYjNDM7Njc0NSw2IEBAIHN0YXRpYyBpbnQgaWNlX3VwX2NvbXBsZXRlKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJCWljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUpOwogCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHZzaS0mZ3Q7bmV0ZGV2KTsKIAkJbmV0aWZfY2Fycmllcl9vbih2c2ktJmd0O25ldGRldik7Ci0JCWljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpOwogCX0KIAogCS8qIFBlcmZvcm0gYW4gaW5pdGlhbCByZWFkIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyBub3cgdG8KQEAgLTcyNzMsNyAmIzQzOzcyNzIsNiBAQCBpbnQgaWNlX2Rvd24oc3RydWN0IGljZV92c2kgKnZzaSkKIAogCWlmICh2c2ktJmd0O25ldGRldikgewogCQl2bGFuX2VyciA9IGljZV92c2lfZGVsX3ZsYW5femVybyh2c2kpOwotCQlpY2VfcHRwX2xpbmtfY2hhbmdlKHZzaS0mZ3Q7YmFjaywgZmFsc2UpOwogCQluZXRpZl9jYXJyaWVyX29mZih2c2ktJmd0O25ldGRldik7CiAJCW5ldGlmX3R4X2Rpc2FibGUodnNpLSZndDtuZXRkZXYpOwogCX0KQEAgLTc3OTQsNiAmIzQzOzc3OTIsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKQogCiAJaWNlX3VwZGF0ZV9wZl9uZXRkZXZfbGluayhwZik7CiAKJiM0MzsJaWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLSZndDtmbGFncykgJmFtcDsmYW1wOyBwZi0mZ3Q7aHcucG9ydF9pbmZvKSB7CiYjNDM7CQlib29sIGxpbmtfdXA7CiYjNDM7CiYjNDM7CQlsaW5rX3VwID0gISEocGYtJmd0O2h3LnBvcnRfaW5mby0mZ3Q7cGh5LmxpbmtfaW5mby5saW5rX2luZm8gJmFtcDsKJiM0MzsJCQkgICAgIElDRV9BUV9MSU5LX1VQKTsKJiM0MzsJCWlmIChwZi0mZ3Q7cHRwLnBvcnQubGlua191cCAhPSBsaW5rX3VwKQomIzQzOwkJCWljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApOwomIzQzOwl9CiYjNDM7CiAJLyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovCiAJZXJyID0gaWNlX3NlbmRfdmVyc2lvbihwZik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMKaW5kZXggZWFlYzM2YWI2YWUzZi4uMGU0NGVkNmIwYWU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCkBAIC0xLDYgJiM0MzsxLDggQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd2FpdF9iaXQuaCZndDsKICNpbmNsdWRlICYjMzQ7aWNlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpY2VfbGliLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpY2VfdHJhY2UuaCYjMzQ7CkBAIC0zNjIsOSAmIzQzOzM2NCwxMiBAQCBzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTY0IGluX3RzdGFtcCkKIHN0YXRpYyBib29sCiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KQogewomIzQzOwlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9CiYjNDM7CQljb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTsKJiM0MzsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dHgtJmd0O2xvY2spOwogCi0JcmV0dXJuIHR4LSZndDtpbml0ICZhbXA7JmFtcDsgIXR4LSZndDtjYWxpYnJhdGluZzsKJiM0MzsJcmV0dXJuIHR4LSZndDtpbml0ICZhbXA7JmFtcDsgIXR4LSZndDtjYWxpYnJhdGluZyAmYW1wOyZhbXA7IHB0cF9wb3J0LSZndDtsaW5rX3VwOwogfQogCiAvKioKQEAgLTU2MSw3ICYjNDM7NTY2LDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJc3RydWN0IGljZV9wZiAqcGY7CiAJc3RydWN0IGljZV9odyAqaHc7CiAJdTY0IHRzdGFtcF9yZWFkeTsKLQlib29sIGxpbmtfdXA7CiAJaW50IGVycjsKIAl1OCBpZHg7CiAKQEAgLTU2OSw3ICYjNDM7NTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJcGYgPSBwdHBfcG9ydF90b19wZihwdHBfcG9ydCk7CiAJaHcgPSAmYW1wO3BmLSZndDtodzsKIAotCWlmICghdHgtJmd0O2luaXQpCiYjNDM7CWlmICghdHgtJmd0O2luaXQgfHwgYml0bWFwX2VtcHR5KHR4LSZndDtpbl91c2UsIHR4LSZndDtsZW4pKQogCQlyZXR1cm47CiAKIAkvKiBSZWFkIHRoZSBUeCByZWFkeSBzdGF0dXMgZmlyc3QgKi8KQEAgLTU3OSwxNCAmIzQzOzU4MywxMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAkJCXJldHVybjsKIAl9CiAKLQkvKiBEcm9wIHBhY2tldHMgaWYgdGhlIGxpbmsgd2VudCBkb3duICovCi0JbGlua191cCA9IHB0cF9wb3J0LSZndDtsaW5rX3VwOwotCiAJZm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LSZndDtpbl91c2UsIHR4LSZndDtsZW4pIHsKIAkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307CiAJCXU4IHBoeV9pZHggPSBpZHggJiM0MzsgdHgtJmd0O29mZnNldDsKIAkJdTY0IHJhd190c3RhbXAgPSAwLCB0c3RhbXA7Ci0JCWJvb2wgZHJvcF90cyA9ICFsaW5rX3VwOwomIzQzOwkJYm9vbCBkcm9wX3RzID0gZmFsc2U7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkJLyogRHJvcCBwYWNrZXRzIHdoaWNoIGhhdmUgd2FpdGVkIGZvciBtb3JlIHRoYW4gMiBzZWNvbmRzICovCkBAIC02MTksNiAmIzQzOzYyMCwyMiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAkJaWYgKGVyciAmYW1wOyZhbXA7ICFkcm9wX3RzKQogCQkJY29udGludWU7CiAKJiM0MzsJCS8qIHZlcmlmeSByZWFkeSBiaXQgY2xlYXJlZCAqLwomIzQzOwkJaWYgKHR4LSZndDtoYXNfcmVhZHlfYml0bWFwKSB7CiYjNDM7CQkJZXJyID0gaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC0mZ3Q7YmxvY2ssICZhbXA7dHN0YW1wX3JlYWR5KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAodHN0YW1wX3JlYWR5ICZhbXA7IEJJVF9VTEwocGh5X2lkeCkpIHsKJiM0MzsJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCB0eC0mZ3Q7c3RhbGUpKQomIzQzOwkJCQkJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtQSFkgcG9ydCAldSBmYWlsZWQgdG8gY2xlYXIgcmVhZHkgYml0IGZvciBpZHggJXVcbiYjMzQ7LAomIzQzOwkJCQkJCXB0cF9wb3J0LSZndDtwb3J0X251bSwgcGh5X2lkeCk7CiYjNDM7CQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiAJCWljZV90cmFjZSh0eF90c3RhbXBfZndfZG9uZSwgdHgtJmd0O3RzdGFtcHNbaWR4XS5za2IsIGlkeCk7CiAKIAkJLyogRm9yIFBIWXMgd2hpY2ggZG9uJiMzOTt0IGltcGxlbWVudCBhIHByb3BlciB0aW1lc3RhbXAgcmVhZHkKQEAgLTY3MywyMCAmIzQzOzY5MCwzMyBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAlwZi0mZ3Q7cHRwLnR4X2h3dHN0YW1wX2dvb2QgJiM0Mzs9IHRzdGFtcF9nb29kOwogfQogCiYjNDM7c3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpCiYjNDM7ewomIzQzOwl3YWtlX3VwX3ZhcihyZWYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGljZV9wdHBfdHhfdHN0YW1wX293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKQogewogCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7CiAKLQltdXRleF9sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMsIGxpc3Rfbm9kZSkgewomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QsIGxpc3Rfbm9kZSkgewogCQlzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSAmYW1wO3BvcnQtJmd0O3R4OwogCi0JCWlmICghdHggfHwgIXR4LSZndDtpbml0KQomIzQzOwkJaWYgKCF0eC0mZ3Q7aW5pdCkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7cG9ydC0mZ3Q7cmVmKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCQlpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHR4KTsKJiM0MzsKJiM0MzsJCWtyZWZfcHV0KCZhbXA7cG9ydC0mZ3Q7cmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTcyNSw2ICYjNDM7NzU1LDM3IEBAIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZAomIzQzO2ljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcygxMCk7CiYjNDM7CXN0cnVjdCBpY2VfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiYjNDM7CXU2NCB0c3RhbXBfcmVhZHk7CiYjNDM7CWJvb2wgcGVuZGluZzsKJiM0MzsJdTggaWR4OwomIzQzOwomIzQzOwlpZiAoaHctJmd0O3Jlc2V0X29uZ29pbmcpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWlmIChpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LSZndDtibG9jaywgJmFtcDt0c3RhbXBfcmVhZHkpKQomIzQzOwkJCXJldHVybjsKJiM0MzsKJiM0MzsJCXBlbmRpbmcgPSBmYWxzZTsKJiM0MzsJCWZvcl9lYWNoX3NldF9iaXQoaWR4LCB0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKSB7CiYjNDM7CQkJaWYgKCEodHN0YW1wX3JlYWR5ICZhbXA7IEJJVF9VTEwoaWR4ICYjNDM7IHR4LSZndDtvZmZzZXQpKSkKJiM0MzsJCQkJcGVuZGluZyA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoIXBlbmRpbmcpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7CiYjNDM7CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7CiYjNDM7CiYjNDM7CWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIGluLWZsaWdodCBUeCB0aW1lc3RhbXBzIG9uIGJsb2NrICV1XG4mIzM0OywKJiM0MzsJCXR4LSZndDtibG9jayk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlcgogICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQpAQCAtNzQxLDYgJiM0Mzs4MDIsOCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAlpbnQgZXJyOwogCXU4IGlkeDsKIAomIzQzOwlpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4ocGYsIHR4KTsKJiM0MzsKIAllcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LSZndDtibG9jaywgJmFtcDt0c3RhbXBfcmVhZHkpOwogCWlmIChlcnIpIHsKIAkJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtGYWlsZWQgdG8gZ2V0IHRoZSBUeCB0c3RhbXAgcmVhZHkgYml0bWFwIGZvciBibG9jayAldSwgZXJyICVkXG4mIzM0OywKQEAgLTc3OSwxMiAmIzQzOzg0MiwxMCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKICAqIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlIC0gTWFyayB1bmZpbmlzaGVkIHRpbWVzdGFtcHMgYXMgc3RhbGUKICAqIEB0eDogdGhlIHRyYWNrZXIgdG8gbWFyawogICoKLSAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgc2VuZGluZwotICogdGhlaXIgdGltZXN0YW1wIHZhbHVlIHRvIHRoZSBzdGFjay4gVGhpcyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IGV4dGVuZGluZwotICogdGhlIDQwYml0IGhhcmR3YXJlIHRpbWVzdGFtcCBpbmNvcnJlY3RseS4KLSAqCi0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgUFRQIGNsb2NrIGlzIG1vZGlmaWVkIHN1Y2ggYXMgYWZ0ZXIgYSBzZXQKLSAqIHRpbWUgcmVxdWVzdC4KJiM0MzsgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXIKJiM0MzsgKiBmcm9tIHJlcG9ydGluZyB0aGUgdGltZXN0YW1wIHRvIHRoZSBzdGFjay4gVGhpcyBpcyBjYWxsZWQgdG8gaW5mb3JtIHRoZQomIzQzOyAqIGRyaXZlciB0aGF0IGEgdGltZXN0YW1wIGlzIGV4cGVjdGVkIHRvIGZhaWwgaWYgaXQgd2FzIGluaXRpYXRlZCBhcyB0aGUgbGluawomIzQzOyAqIHdlbnQgZG93bi4KICAqLwogc3RhdGljIHZvaWQKIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKQEAgLTgwOCw4ICYjNDM7ODY5LDE2IEBAIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpCiB7CiAJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMsIGxpc3Rfbm9kZSkKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihwdHBfcG9ydF90b19wZihwb3J0KSwgJmFtcDtwb3J0LSZndDt0eCk7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3BvcnQtJmd0O3JlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyoqCkBAIC05OTQsMTMgJiM0MzsxMDYzLDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9jYWNoZWRfcGhjdGltZShzdHJ1Y3QgaWNlX3BmICpwZikKIAkJa3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtJmd0O3B0cC5rd29ya2VyLCAmYW1wO3BmLSZndDtwdHAud29yaywKIAkJCQkJICAgbXNlY3NfdG9famlmZmllcygxMCkpOwogCX0KLQotCS8qIE1hcmsgYW55IG91dHN0YW5kaW5nIHRpbWVzdGFtcHMgYXMgc3RhbGUsIHNpbmNlIHRoZXkgbWlnaHQgaGF2ZQotCSAqIGJlZW4gY2FwdHVyZWQgaW4gaGFyZHdhcmUgYmVmb3JlIHRoZSB0aW1lIHVwZGF0ZS4gVGhpcyBjb3VsZCBsZWFkCi0JICogdG8gdXMgZXh0ZW5kaW5nIHRoZW0gd2l0aCB0aGUgd3JvbmcgY2FjaGVkIHZhbHVlIHJlc3VsdGluZyBpbgotCSAqIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLgotCSAqLwotCWljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKCZhbXA7cGYtJmd0O3B0cC5wb3J0LnR4KTsKIH0KIAogLyoqCkBAIC0xMTMzLDYgJiM0MzsxMTk1LDcgQEAgc3RhdGljIGludCBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8oc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCkKIHN0YXRpYyB2b2lkIGljZV9wdHBfd2FpdF9mb3Jfb2Zmc2V0cyhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKQogewogCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGljZV9wZiAqcGY7CiAJc3RydWN0IGljZV9odyAqaHc7CiAJaW50IHR4X2VycjsKQEAgLTExNTUsMTIgJiM0MzsxMjE4LDI4IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfd2FpdF9mb3Jfb2Zmc2V0cyhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKQogCQl0eF9lcnIgPSBpY2VfcGh5X2NmZ190eF9vZmZzZXRfZTgyeChodywgcG9ydC0mZ3Q7cG9ydF9udW0pOwogCXJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LSZndDtwb3J0X251bSk7CiAJaWYgKHR4X2VyciB8fCByeF9lcnIpIHsKLQkJLyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlciAqLwomIzQzOwkJLyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci4KJiM0MzsJCSAqIFRoaXMgaXMgZXhwZWN0ZWQgZHVyaW5nIG5vcm1hbCBsaW5rLXVwOiB0aGUgdmVybmllciBvZmZzZXQKJiM0MzsJCSAqIGNhbGlicmF0aW9uIGNhbm5vdCBjb21wbGV0ZSB1bnRpbCBhdCBsZWFzdCBvbmUgcGFja2V0IGhhcwomIzQzOwkJICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwKJiM0MzsJCQkmIzM0O1BUUCBvZmZzZXQgbm90IHlldCB2YWxpZCBmb3IgcG9ydCAldSAodHhfZXJyPSVkIHJ4X2Vycj0lZClcbiYjMzQ7LAomIzQzOwkJCXBvcnQtJmd0O3BvcnRfbnVtLCB0eF9lcnIsIHJ4X2Vycik7CiAJCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLSZndDtwdHAua3dvcmtlciwKIAkJCQkJICAgJmFtcDtwb3J0LSZndDtvdl93b3JrLAogCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwogCQlyZXR1cm47CiAJfQomIzQzOwomIzQzOwkvKiBUeCBhbmQgUnggb2Zmc2V0cyBhcmUgbm93IGNvbmZpZ3VyZWQsIGVuYWJsZSBUeCB0aW1lc3RhbXBzICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cG9ydC0mZ3Q7dHgubG9jaywgZmxhZ3MpOwomIzQzOwlwb3J0LSZndDt0eC5jYWxpYnJhdGluZyA9IGZhbHNlOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cG9ydC0mZ3Q7dHgubG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJJiMzNDtQVFAgb2Zmc2V0IHZhbGlkIGZvciBwb3J0ICV1LCBUeCB0aW1lc3RhbXBzIGVuYWJsZWRcbiYjMzQ7LAomIzQzOwkJcG9ydC0mZ3Q7cG9ydF9udW0pOwogfQogCiAvKioKQEAgLTEyNDMsMTMgJiM0MzsxMzIyLDIwIEBAIGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCkKIAogCQkvKiBTdGFydCB0aGUgUEhZIHRpbWVyIGluIFZlcm5pZXIgbW9kZSAqLwogCQllcnIgPSBpY2Vfc3RhcnRfcGh5X3RpbWVyX2U4MngoaHcsIHBvcnQpOwotCQlpZiAoZXJyKQomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHRwX3BvcnQtJmd0O3R4LmxvY2ssIGZsYWdzKTsKJiM0MzsJCQlwdHBfcG9ydC0mZ3Q7dHguY2FsaWJyYXRpbmcgPSBmYWxzZTsKJiM0MzsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHRwX3BvcnQtJmd0O3R4LmxvY2ssIGZsYWdzKTsKIAkJCWJyZWFrOwomIzQzOwkJfQogCi0JCS8qIEVuYWJsZSBUeCB0aW1lc3RhbXBzIHJpZ2h0IGF3YXkgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwdHBfcG9ydC0mZ3Q7dHgubG9jaywgZmxhZ3MpOwotCQlwdHBfcG9ydC0mZ3Q7dHguY2FsaWJyYXRpbmcgPSBmYWxzZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0cF9wb3J0LSZndDt0eC5sb2NrLCBmbGFncyk7CiYjNDM7CQkvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpbgomIzQzOwkJICogZGlzYWJsZWQgdW50aWwgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKCkgaGFzIHZlcmlmaWVkCiYjNDM7CQkgKiB0aGF0IHRoZSBUeCBhbmQgUnggb2Zmc2V0IGNhbGlicmF0aW9uIGhhcyBjb21wbGV0ZWQuCiYjNDM7CQkgKiBDbGVhcmluZyBpdCBoZXJlIHdvdWxkIGFsbG93IFR4IHRpbWVzdGFtcHMgdG8gYmUgcmVwb3J0ZWQKJiM0MzsJCSAqIGJlZm9yZSB0aGUgUEhZIG9mZnNldCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGxlYWRpbmcKJiM0MzsJCSAqIHRvIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLgomIzQzOwkJICovCiAKIAkJa3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtJmd0O3B0cC5rd29ya2VyLCAmYW1wO3B0cF9wb3J0LSZndDtvdl93b3JrLAogCQkJCQkgICAwKTsKQEAgLTEyODAsMTggJiM0MzsxMzY2LDIxIEBAIHZvaWQgaWNlX3B0cF9saW5rX2NoYW5nZShzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBsaW5rdXApCiAJc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQ7CiAJc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKIAotCWlmIChwZi0mZ3Q7cHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpCi0JCXJldHVybjsKLQogCXB0cF9wb3J0ID0gJmFtcDtwZi0mZ3Q7cHRwLnBvcnQ7CiAKIAkvKiBVcGRhdGUgY2FjaGVkIGxpbmsgc3RhdHVzIGZvciB0aGlzIHBvcnQgaW1tZWRpYXRlbHkgKi8KIAlwdHBfcG9ydC0mZ3Q7bGlua191cCA9IGxpbmt1cDsKIAomIzQzOwlpZiAocGYtJmd0O3B0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovCiAJaWYgKHBmLSZndDtody5yZXNldF9vbmdvaW5nKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCFsaW5rdXApCiYjNDM7CQlpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSgmYW1wO3B0cF9wb3J0LSZndDt0eCk7CiYjNDM7CiAJaWYgKGh3LSZndDttYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSAmYW1wOyZhbXA7CiAJICAgIHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLSZndDtmbGFncykpIHsKIAkJaW50IHBpbiwgZXJyOwpAQCAtMTQyNCwxNiAmIzQzOzE1MTMsMjEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHN0cnVjdCBpY2VfcGYgKnBmKQogICovCiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKJiM0MzsJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCWxpc3RfZm9yX2VhY2goZW50cnksICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKSB7Ci0JCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LAotCQkJCQkJICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsCi0JCQkJCQkgICAgICAgbGlzdF9ub2RlKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKHBvcnQtJmd0O2xpbmtfdXApCiAJCQlpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQocG9ydCk7CiYjNDM7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3BvcnQtJmd0O3JlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTI2NzgsNzQgJiM0MzsyNzcyLDU2IEBAIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3RzKHN0cnVjdCBpY2VfcGYgKnBmKQogCX0KIH0KIAotc3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4KQomIzQzO3N0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgYm9vbCBpbl9pcnEpCiB7Ci0JYm9vbCBtb3JlX3RpbWVzdGFtcHM7CiYjNDM7CURFQ0xBUkVfQklUTUFQKHRzdGFtcHMsIElOREVYX1BFUl9QT1JUX01BWCkgPSB7fTsKIAogCXNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCAmYW1wO3R4LSZndDtsb2NrKSB7CiAJCWlmICghdHgtJmd0O2luaXQpCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJbW9yZV90aW1lc3RhbXBzID0gIWJpdG1hcF9lbXB0eSh0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKTsKLQl9CiYjNDM7CQlpZiAoaW5faXJxKSB7CiYjNDM7CQkJaWYgKCFpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAodHgpKQomIzQzOwkJCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gbW9yZV90aW1lc3RhbXBzOwomIzQzOwkJCXJldHVybiBiaXRtYXBfYW5kbm90KHRzdGFtcHMsIHR4LSZndDtpbl91c2UsIHR4LSZndDtzdGFsZSwgdHgtJmd0O2xlbik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldHVybiAhYml0bWFwX2VtcHR5KHR4LSZndDtpbl91c2UsIHR4LSZndDtsZW4pOwomIzQzOwkJfQomIzQzOwl9CiB9CiAKLXN0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZikKJiM0MztzdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKQogewomIzQzOwlib29sIGhhdmVfdHN0YW1wcyA9IGZhbHNlOwogCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cywKLQkJCQkgICAgbGlzdF9ub2RlKSB7Ci0JCQlzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSAmYW1wO3BvcnQtJmd0O3R4OwotCi0JCQlpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHModHgpKQotCQkJCXJldHVybiB0cnVlOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QsIGxpc3Rfbm9kZSkgewomIzQzOwkJaWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKCZhbXA7cG9ydC0mZ3Q7dHgsIGluX2lycSkpIHsKJiM0MzsJCQloYXZlX3RzdGFtcHMgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwogCQl9CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIGhhdmVfdHN0YW1wczsKIH0KIAotYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZikKJiM0Mztib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSkKIHsKLQlzdHJ1Y3QgaWNlX2h3ICpodyA9ICZhbXA7cGYtJmd0O2h3OwotCWludCByZXQ7Ci0KLQkvKiBDaGVjayBzb2Z0d2FyZSBpbmRpY2F0b3IgKi8KIAlzd2l0Y2ggKHBmLSZndDtwdHAudHhfaW50ZXJydXB0X21vZGUpIHsKIAljYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX05PTkU6CiAJCXJldHVybiBmYWxzZTsKIAljYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX1NFTEY6Ci0JCWlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcygmYW1wO3BmLSZndDtwdHAucG9ydC50eCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJYnJlYWs7CiYjNDM7CQlyZXR1cm4gaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoJmFtcDtwZi0mZ3Q7cHRwLnBvcnQudHgsIGluX2lycSk7CiAJY2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9BTEw6Ci0JCWlmIChpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhwZiwgaW5faXJxKTsKIAlkZWZhdWx0OgogCQlXQVJOX09OQ0UoMSwgJiMzNDtVbmV4cGVjdGVkIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbW9kZSAldVxuJiMzNDssCiAJCQkgIHBmLSZndDtwdHAudHhfaW50ZXJydXB0X21vZGUpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBDaGVjayBoYXJkd2FyZSBpbmRpY2F0b3IgKi8KLQlyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7Ci0JaWYgKHJldCAmbHQ7IDApIHsKLQkJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtVbmFibGUgdG8gcmVhZCBQSFkgVHggdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXG4mIzM0OywKLQkJCXJldCk7Ci0JCS8qIFN0b3AgdHJpZ2dlcmluZyBJUlFzIGlmIHdlJiMzOTtyZSB1bmFibGUgdG8gcmVhZCBQSFkgKi8KIAkJcmV0dXJuIGZhbHNlOwogCX0KLQotCS8qIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KCkgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB0aW1lc3RhbXBzCi0JICogYXZhaWxhYmxlLCAwIGlmIHRoZXJlIGFyZSBubyB3YWl0aW5nIHRpbWVzdGFtcHMsIGFuZCBhIG5lZ2F0aXZlCi0JICogdmFsdWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yICh3aGljaCB3ZSBjaGVja2VkIGZvciBhYm92ZSkuCi0JICovCi0JcmV0dXJuIHJldCAmZ3Q7IDA7CiB9CiAKIC8qKgpAQCAtMjc5OSw3ICYjNDM7Mjg3NSw3IEBAIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKQogCQkvKiBFODMwIGNhbiByZWFkIHRpbWVzdGFtcHMgaW4gdGhlIHRvcCBoYWxmIHVzaW5nIHJkMzIoKSAqLwogCQlpY2VfcHRwX3Byb2Nlc3NfdHMocGYpOwogCi0JCWlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHsKJiM0MzsJCWlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHsKIAkJCS8qIFByb2Nlc3Mgb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcy4gSWYgdGhlcmUKIAkJCSAqIGlzIG1vcmUgd29yaywgcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBhZ2Fpbi4KIAkJCSAqLwpAQCAtMjgyOSw3ICYjNDM7MjkwNSw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7CiAJc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKLQlpbnQgcmV0OwogCiAJaWYgKCFwZi0mZ3Q7cHRwLnBvcnQudHguaGFzX3JlYWR5X2JpdG1hcCkKIAkJcmV0dXJuOwpAQCAtMjgzNywxMSAmIzQzOzI5MTIsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX21heWJlX3RyaWdnZXJfdHhfaW50ZXJydXB0KHN0cnVjdCBpY2VfcGYgKnBmKQogCWlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKQogCQlyZXR1cm47CiAKLQlyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7Ci0JaWYgKHJldCAmbHQ7IDApIHsKLQkJZGV2X2RiZyhkZXYsICYjMzQ7UFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxuJiMzNDssCi0JCQlyZXQpOwotCX0gZWxzZSBpZiAocmV0KSB7CiYjNDM7CWlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgZmFsc2UpIHx8CiYjNDM7CSAgICBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodykpIHsKIAkJZGV2X2RiZyhkZXYsICYjMzQ7UFRQIHBlcmlvZGljIHRhc2sgZGV0ZWN0ZWQgd2FpdGluZyB0aW1lc3RhbXBzLiBUcmlnZ2VyaW5nIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbm93LlxuJiMzNDspOwogCiAJCXdyMzIoaHcsIFBGSU5UX09JQ1IsIFBGSU5UX09JQ1JfVFNZTl9UWF9NKTsKQEAgLTI4OTAsMTQgJiM0MzsyOTYyLDE2IEBAIHZvaWQgaWNlX3B0cF9xdWV1ZV93b3JrKHN0cnVjdCBpY2VfcGYgKnBmKQogc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsCiAJCQkJCWVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwomIzQzOwlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0OwogCi0JbGlzdF9mb3JfZWFjaChlbnRyeSwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMpIHsKLQkJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCA9IGxpc3RfZW50cnkoZW50cnksCi0JCQkJCQkgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCwKLQkJCQkJCSAgICAgICBsaXN0X25vZGUpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QsIGxpc3Rfbm9kZSkgewogCQlzdHJ1Y3QgaWNlX3BmICpwZWVyX3BmID0gcHRwX3BvcnRfdG9fcGYocG9ydCk7CiAKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiAJCWlmICghaWNlX2lzX3ByaW1hcnkoJmFtcDtwZWVyX3BmLSZndDtodykpIHsKIAkJCWlmIChyZWJ1aWxkKSB7CiAJCQkJLyogVE9ETzogV2hlbiBpbXBsZW1lbnRpbmcgcmVidWlsZD10cnVlOgpAQCAtMjkwOSw3ICYjNDM7Mjk4MywxMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCwKIAkJCQlpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBlZXJfcGYsIHJlc2V0X3R5cGUpOwogCQkJfQogCQl9CiYjNDM7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3BvcnQtJmd0O3JlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTI5MzYsNiAmIzQzOzMwMTQsMTQgQEAgdm9pZCBpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSkKIAlpZiAocmVzZXRfdHlwZSA9PSBJQ0VfUkVTRVRfUEZSKQogCQlyZXR1cm47CiAKJiM0MzsJLyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGUKJiM0MzsJICogVHggdHJhY2tlci4gSWYgb3Zfd29yayBpcyBydW5uaW5nIGR1cmluZyByZXNldCwgaXQgbWF5IGlzc3VlCiYjNDM7CSAqIHNpZGViYW5kIHF1ZXVlIGNvbW1hbmRzIHRoYXQgd2lsbCBmYWlsIG9yIHRpbWVvdXQsIGFuZCBtYXkKJiM0MzsJICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLgomIzQzOwkgKi8KJiM0MzsJaWYgKGh3LSZndDttYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpCiYjNDM7CQlrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3B0cC0mZ3Q7cG9ydC5vdl93b3JrKTsKJiM0MzsKIAlpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpICZhbXA7JmFtcDsgaHctJmd0O21hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KQogCQlpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMocGYsIGZhbHNlLCByZXNldF90eXBlKTsKIApAQCAtMzA4NiwxMSAmIzQzOzMxNzIsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7cHRwLSZndDtwb3J0Lmxpc3Rfbm9kZSk7Ci0JbXV0ZXhfbG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKJiM0MzsJa3JlZl9pbml0KCZhbXA7cHRwLSZndDtwb3J0LnJlZik7CiAKLQlsaXN0X2FkZCgmYW1wO3B0cC0mZ3Q7cG9ydC5saXN0X25vZGUsCi0JCSAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cyk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CWxpc3RfYWRkX3JjdSgmYW1wO3B0cC0mZ3Q7cG9ydC5saXN0X25vZGUsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKIAogCS8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LgogCSAqIE9ubHkgbWVhbmluZ2Z1bCBvbiBFODI1IChvdGhlciBNQUMgdHlwZXMgZG9uJiMzOTt0IGV4cG9zZSB0eC1jbGsKQEAgLTMxMTMsMTIgJiM0MzszMTk5LDMyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHN0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKIAlzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gJmFtcDtwZi0mZ3Q7cHRwOwomIzQzOwlzdHJ1Y3Qga3JlZiAqcmVmOwogCi0JaWYgKHBmLSZndDtody5tYWNfdHlwZSAhPSBJQ0VfTUFDX1VOS05PV04pIHsKLQkJbXV0ZXhfbG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKLQkJbGlzdF9kZWwoJmFtcDtwdHAtJmd0O3BvcnQubGlzdF9ub2RlKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwotCX0KJiM0MzsJaWYgKHBmLSZndDtody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmcKJiM0MzsJICogb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byB0aGUgUFRQIHBvcnQuIFRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsCiYjNDM7CSAqIGZpcnN0IHJlbW92ZSB0aGUgcG9ydCBmcm9tIHRoZSBsaXN0LCB0aGVuIGRyb3AgdGhlIHByaW1hcnkKJiM0MzsJICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGwKJiM0MzsJICogZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gRmluYWxseSwgc3luY2hyb25pemVfcmN1KCkgdG8KJiM0MzsJICogZW5zdXJlIHRoYXQgYWxsIFJDVSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IG1pZ2h0IGF0dGVtcHQgdG8KJiM0MzsJICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwomIzQzOwlsaXN0X2RlbF9yY3UoJmFtcDtwdHAtJmd0O3BvcnQubGlzdF9ub2RlKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CiYjNDM7CXJlZiA9ICZhbXA7cHRwLSZndDtwb3J0LnJlZjsKJiM0MzsJa3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpOwomIzQzOwomIzQzOwlkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLAomIzQzOwkJICAgICAgJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgcG9ydCByZWZlcmVuY2VzIHRvIHJlbGVhc2UuIENvbnRpbnVpbmcgdG8gdW5sb2FkIGFueXdheXMuJiMzNDspOwomIzQzOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogLyoqCkBAIC0zMjEwLDkgJiM0MzszMzE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKQogfQogCiAvKioKLSAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayB0aHJlYWRzCiYjNDM7ICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIHRoZSBQVFAga3dvcmtlcgogICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHB0cDogUEYgUFRQIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZQomIzQzOyAqIHBlcmlvZGljIHdvcmsgaXMgbm90IHF1ZXVlZCBoZXJlOyB0aGUgY2FsbGVyIHN0YXJ0cyBpdCBvbmNlIHRoZSBQVFAKJiM0MzsgKiBzdGF0ZSBpcyBJQ0VfUFRQX1JFQURZLgogICovCiBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKQogewpAQCAtMzIzMSw5ICYjNDM7MzM0MSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApCiAKIAlwdHAtJmd0O2t3b3JrZXIgPSBrd29ya2VyOwogCi0JLyogU3RhcnQgcGVyaW9kaWMgd29yayBnb2luZyAqLwotCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC0mZ3Q7a3dvcmtlciwgJmFtcDtwdHAtJmd0O3dvcmssIDApOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNTUsNiAmIzQzOzM0NjIsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpCiAJaWYgKGVycikKIAkJZ290byBlcnJfY2xlYW5fcGY7CiAKJiM0MzsJLyogU2VlZCBsaW5rX3VwIGZyb20gY3VycmVudCBQSFkgc3RhdHVzLCBzaW5jZSBsaW5rIG1heSBhbHJlYWR5IGJlIHVwCiYjNDM7CSAqIChlLmcuIGFmdGVyIFBYRSBib290KSB3aXRoIG5vIGxpbmstY2hhbmdlIGVkZ2UgdG8gY2F0Y2ggaXQgbGF0ZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocGYtJmd0O2h3LnBvcnRfaW5mbykKJiM0MzsJCXB0cC0mZ3Q7cG9ydC5saW5rX3VwID0KJiM0MzsJCQkhIShwZi0mZ3Q7aHcucG9ydF9pbmZvLSZndDtwaHkubGlua19pbmZvLmxpbmtfaW5mbyAmYW1wOwomIzQzOwkJCUlDRV9BUV9MSU5LX1VQKTsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBrd29ya2VyIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBQSFksIHdoaWNoIHF1ZXVlcyB3b3JrIG9uCiYjNDM7CSAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzCiYjNDM7CSAqIGZyb20gcmVhY2hpbmcgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KCkgd2hpbGUga3dvcmtlciBpcyBzdGlsbCBOVUxMCiYjNDM7CSAqLwomIzQzOwllcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2V4aXQ7CiYjNDM7CiAJLyogU3RhcnQgdGhlIFBIWSB0aW1lc3RhbXBpbmcgYmxvY2sgKi8KIAlpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpOwogCkBAIC0zMzYzLDkgJiM0MzszNDg2LDEwIEBAIHZvaWQgaWNlX3B0cF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKQogCiAJcHRwLSZndDtzdGF0ZSA9IElDRV9QVFBfUkVBRFk7CiAKLQllcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9leGl0OwomIzQzOwkvKiBTdGFydCBwZXJpb2RpYyB3b3JrIG9ubHkgYWZ0ZXIgdGhlIHN0YXRlIGlzIFJFQURZOyB0aGUgd29ya2VyCiYjNDM7CSAqIHJldHVybnMgd2l0aG91dCByZXNjaGVkdWxpbmcgd2hpbGUgdGhlIHN0YXRlIGlzIG5vdCBSRUFEWS4KJiM0MzsJICovCiYjNDM7CWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC0mZ3Q7a3dvcmtlciwgJmFtcDtwdHAtJmd0O3dvcmssIDApOwogCiAJZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksICYjMzQ7UFRQIGluaXQgc3VjY2Vzc2Z1bFxuJiMzNDspOwogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oCmluZGV4IGM0YjBkYTdjZTIwZWQuLjEzMTU4YTkzMTlmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaApAQCAtNSw2ICYjNDM7NSw4IEBACiAjZGVmaW5lIF9JQ0VfUFRQX0hfCiAKICNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3JlZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t0aHJlYWQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpY2VfcHRwX2h3LmgmIzM0OwpAQCAtMTMwLDYgJiM0MzsxMzIsOSBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7CiAjZGVmaW5lIElOREVYX1BFUl9QT1JUX0U4MlgJCTE2CiAjZGVmaW5lIElOREVYX1BFUl9QT1JUCQkJNjQKIAomIzQzOy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzdGFtcCBpbmRleGVzIGFjcm9zcyBhbGwgZGV2aWNlcyAqLwomIzQzOyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVAomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IC0gZGF0YSB1c2VkIHRvIGluaXRpYWxpemUgYW4gZXh0ZXJuYWwgcG9ydCBmb3IgUFRQCiAgKgpAQCAtMTM4LDYgJiM0MzsxNDMsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7CiAgKiBhbmQgZGV0ZXJtaW5lIHdoZW4gdGhlIHBvcnQmIzM5O3MgUEhZIG9mZnNldCBpcyB2YWxpZC4KICAqCiAgKiBAbGlzdF9ub2RlOiBsaXN0IG1lbWJlciBzdHJ1Y3R1cmUKJiM0MzsgKiBAcmVmOiByZWZlcmVuY2UgY291bnRlciBmb3IgdXNlIHdpdGggYWRhcHRlciBwb3J0cyBsaXN0CiAgKiBAdHg6IFR4IHRpbWVzdGFtcCB0cmFja2luZyBmb3IgdGhpcyBwb3J0CiAgKiBAb3Zfd29yazogZGVsYXllZCB3b3JrIHRhc2sgZm9yIHRyYWNraW5nIHdoZW4gUEhZIG9mZnNldCBpcyB2YWxpZAogICogQHBzX2xvY2s6IG11dGV4IHVzZWQgdG8gcHJvdGVjdCB0aGUgb3ZlcmFsbCBQVFAgUEhZIHN0YXJ0IHByb2NlZHVyZQpAQCAtMTQ5LDYgJiM0MzsxNTUsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7CiAgKi8KIHN0cnVjdCBpY2VfcHRwX3BvcnQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOwomIzQzOwlzdHJ1Y3Qga3JlZiByZWY7CiAJc3RydWN0IGljZV9wdHBfdHggdHg7CiAJc3RydWN0IGt0aHJlYWRfZGVsYXllZF93b3JrIG92X3dvcms7CiAJc3RydWN0IG11dGV4IHBzX2xvY2s7IC8qIHByb3RlY3RzIG92ZXJhbGwgUFRQIFBIWSBzdGFydCBwcm9jZWR1cmUgKi8KQEAgLTMxMiw3ICYjNDM7MzE5LDcgQEAgdm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KTsKIHZvaWQgaWNlX3B0cF9jb21wbGV0ZV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCk7CiB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZik7CiBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZik7Ci1ib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKTsKJiM0Mztib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSk7CiB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLAogCQkJICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiAKQEAgLTM2MCw3ICYjNDM7MzY3LDggQEAgc3RhdGljIGlubGluZSBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZikKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0MztpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKaW5kZXggM2E0MWM3MTFlNzUxYi4uMTBlOTczODc2NjA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCkBAIC03MzcsMjQgJiM0Mzs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCwKIAlyZXR1cm4gaWNlX3JlYWRfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApOwogfQogCi0vKioKLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvbgotICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3QKLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBiZSByZWFkCi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlCi0gKiBAdmFsOiBQb2ludGVyIHRvIHRoZSB2YWx1ZSB0byByZWFkIChvdXQgcGFyYW0pCi0gKgotICogUmV0dXJuOgotICogKiAlMCAgICAgIC0gc3VjY2VzcwotICogKiAlRUlOVkFMIC0gaW52YWxpZCBwb3J0IG51bWJlciBvciByZXNvdXJjZSB0eXBlCi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZCi0gKi8KLXN0YXRpYyBpbnQgaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCwKLQkJCQkgICAgIHUzMiB2YWwpCi17Ci0JcmV0dXJuIGljZV93cml0ZV9wb3J0X2V0aDU2ZyhodywgcG9ydCwgb2Zmc2V0LCB2YWwsIEVUSDU2R19QSFlfTUVNX1BUUCk7Ci19Ci0KIC8qKgogICogaWNlX3dyaXRlX3F1YWRfcHRwX3JlZ19ldGg1NmcgLSBXcml0ZSBhIFBIWSBxdWFkIHJlZ2lzdGVyCiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdApAQCAtMTEzOSw4ICYjNDM7MTEyMSw4IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCwKICAqIGludGVybmFsIFBIWXMgb2YgdGhlIDU2RyBkZXZpY2VzLgogICoKICAqIFRvIGRpcmVjdGx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgdGltZXN0YW1wIGJsb2NrIGVudGlyZWx5LCBkaXNjYXJkaW5nCi0gKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgdXNlCi0gKiBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9xdWFkX2V0aDU2ZygpLgomIzQzOyAqIGFsbCB0aW1lc3RhbXAgZGF0YSBhdCBvbmNlLCBzb2Z0d2FyZSBzaG91bGQgaW5zdGVhZCBwZXJmb3JtIGEgUEhZIHNvZnQKJiM0MzsgKiByZXNldCB2aWEgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhbiBpZHggd2hvc2UgYml0IGlzIHNldCBhY2NvcmRpbmcgdG8KICAqIGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeSgpLgpAQCAtMTE1MiwxMSAmIzQzOzExMzQsMTEgQEAgc3RhdGljIGludCBpY2VfcmVhZF9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4LAogc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCkKIHsKIAl1NjQgdW51c2VkX3RzdGFtcDsKLQl1MTYgbG9fYWRkcjsKIAlpbnQgZXJyOwogCi0JLyogUmVhZCB0aGUgdGltZXN0YW1wIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wIHN0YXR1cyBiaXQgaXMKLQkgKiBjbGVhcmVkLgomIzQzOwkvKiBQZXIgdGhlIFBIWSBzcGVjLCByZWFkaW5nIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uIGlzIHdoYXQKJiM0MzsJICogY2xlYXJzIHRoZSBlbnRyeSYjMzk7cyB2YWxpZCBiaXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIChyZWFkLW9ubHkpCiYjNDM7CSAqIHRzX21lbW9yeV9zdGF0dXMgYml0LgogCSAqLwogCWVyciA9IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgsICZhbXA7dW51c2VkX3RzdGFtcCk7CiAJaWYgKGVycikgewpAQCAtMTE2NCwzMiAmIzQzOzExNDYsNDAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCkKIAkJCSAgcG9ydCwgaWR4LCBlcnIpOwogCX0KIAotCWxvX2FkZHIgPSAodTE2KVBIWV9UU1RBTVBfTChpZHgpOwotCi0JZXJyID0gaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhodywgcG9ydCwgbG9fYWRkciwgMCk7Ci0JaWYgKGVycikgewotCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byBjbGVhciBsb3cgUFRQIHRpbWVzdGFtcCByZWdpc3RlciBmb3IgcG9ydCAldSwgaWR4ICV1LCBlcnIgJWRcbiYjMzQ7LAotCQkJICBwb3J0LCBpZHgsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnIC0gQ2xlYXIgYWxsIHRpbWVzdGFtcHMgZnJvbSB0aGUgcG9ydCBibG9jawomIzQzOyAqIGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1NmcgLSBSZXNldCBvbmUgcG9ydCYjMzk7cyBUeCB0aW1lc3RhbXAgbWVtb3J5CiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdAomIzQzOyAqIEBwb3J0OiBwb3J0IG51bWJlciB0byBjbGVhcgomIzQzOyAqCiYjNDM7ICogRnVsbHkgcmVzZXQgYSBzaW5nbGUgUEhZIHBvcnQmIzM5O3MgVHggdGltZXN0YW1wIG1lbW9yeS4gUGVyIHRoZSBQSFkgc3BlYywgdGhlCiYjNDM7ICogb25seSB3YXkgdG8gY2xlYXIgYSB0aW1lc3RhbXAgdmFsaWQgYml0IChhbmQgaXRzIHJlYWQtb25seSB0c19tZW1vcnlfc3RhdHVzCiYjNDM7ICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGUKJiM0MzsgKiBwb3J0ICh0d28gMzItYml0IHJlYWRzIGVhY2gpLiBUaGlzIGRpc2NhcmRzIGFsbCB0aW1lc3RhbXAgZGF0YSBvbiB0aGUgcG9ydCwKJiM0MzsgKiBzbyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBmb3IgYSBmdWxsIHJlc2V0OyBjYWxsZXJzIHRoYXQgbXVzdCBwcmVzZXJ2ZQomIzQzOyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS4KJiM0MzsgKgomIzQzOyAqIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCBhbiBpbnRlcm5hbCBIVyBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mCiYjNDM7ICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGUKJiM0MzsgKiBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpIHByb2NlZHVyZS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJuYWwgY291bnRlcgomIzQzOyAqIG1heSBiZWNvbWUgb3V0IG9mIHN5bmMgYW5kIHByZXZlbnQgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byByZWFkIHRoZSBQSFkuCiAgKi8KLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodykKJiM0MztzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpCiB7Ci0JdW5zaWduZWQgaW50IHBvcnQ7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwl1OCBpZHg7CiAKLQlmb3IgKHBvcnQgPSAwOyBwb3J0ICZsdDsgaHctJmd0O3B0cC5udW1fbHBvcnRzOyBwb3J0JiM0MzsmIzQzOykgewotCQlpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19MLAotCQkJCQkgMCk7Ci0JCWljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX1UsCi0JCQkJCSAwKTsKJiM0MzsJZm9yIChpZHggPSAwOyBpZHggJmx0OyBJTkRFWF9QRVJfUE9SVDsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjExNSwxMCAmIzQzOzIxMDUsNiBAQCBpbnQgaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgYm9vbCBzb2Z0X3Jlc2V0KQogewogCWludCBlcnI7CiAKLQllcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfT0ZGU0VUX1JFQURZLCAwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1JYX09GRlNFVF9SRUFEWSwgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTIxMzMsOSAmIzQzOzIxMTksMTEgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldCkKICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0CiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0CiAgKgotICogU3RhcnQgdGhlIGNsb2NrIG9mIGEgUEhZIHBvcnQuIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8KLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXMKLSAqIGluaXRpYWxpemVkIG9yIHdoZW4gbGluayBzcGVlZCBjaGFuZ2VzLgomIzQzOyAqIFBlcmZvcm0gYSBQSFkgc29mdCByZXNldCBhbmQgdGhlbiBzdGFydCB0aGUgY2xvY2sgZm9yIHRoZSBQSFkgcG9ydC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8gcmUtY2FsaWJyYXRlIFR4IGFuZCBSeAomIzQzOyAqIHRpbWVzdGFtcGluZyBvZmZzZXRzIHdoZW5ldmVyIHRoZSBjbG9jayB0aW1lIGlzIGluaXRpYWxpemVkIG9yIHdoZW4gbGluawomIzQzOyAqIHNwZWVkIGNoYW5nZXMuCiAgKgogICogUmV0dXJuOgogICogKiAlMCAgICAgLSBzdWNjZXNzCkBAIC0yMTUxLDYgJiM0MzsyMTM5LDEwIEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCkKIAogCXRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpOwogCiYjNDM7CWVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJZXJyID0gaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhodywgcG9ydCwgZmFsc2UpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMjk0LDYgJiM0MzsyMjg2LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cykKICAqCiAgKiBUcmlnZ2VyIGEgc29mdCByZXNldCBvZiB0aGUgRVRINTZHIFBIWSBieSB0b2dnbGluZyB0aGUgc29mdCByZXNldAogICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6CiYjNDM7ICogICAwLiBSZWFkaW5nIGV2ZXJ5IHRpbWVzdGFtcCBtZW1vcnkgcmVnaXN0ZXIgdG8gY2xlYXIgaXRzIHZhbGlkIGJpdAogICogICAxLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQKICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdAogICogICAzLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQgYWdhaW4KQEAgLTIzMDIsNiAmIzQzOzIyOTUsMTIgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cykKICAqIHRvIHNldHRsZS4gVGhpcyBwcm92aWRlcyBhIGNvbnRyb2xsZWQgd2F5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgUEhZCiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LgogICoKJiM0MzsgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUKJiM0MzsgKiBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMsIHJlYWQgZXZlcnkgdGltZXN0YW1wIGluZGV4IHByaW9yIHRvIHBlcmZvcm1pbmcKJiM0MzsgKiB0aGUgc29mdCByZXNldC4gVGhlIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyByZWFkcyBlbnN1cmUgdGhhdCB0aGUgcmVnaW9uCiYjNDM7ICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltc2V0YW1wCiYjNDM7ICogY291bnRlciBpcyByZXNldCB0byB6ZXJvLgomIzQzOyAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgd2hlbgogICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci4KICAqLwpAQCAtMjMxMCw2ICYjNDM7MjMwOSwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpCiAJdTMyIGdsb2JhbF92YWw7CiAJaW50IGVycjsKIAomIzQzOwllcnIgPSBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKGh3LCBwb3J0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgJiMzNDtGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCSAgcG9ydCwgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsICZhbXA7Z2xvYmFsX3ZhbCk7CiAJaWYgKGVycikgewogCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcbiYjMzQ7LApAQCAtNTgwMSw4ICYjNDM7NTgwNyw5IEBAIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnkoc3RydWN0IGljZV9odyAqaHcpCiAJCWljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2U4MngoaHcpOwogCQlicmVhazsKIAljYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OgotCQlpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpOwotCQlicmVhazsKJiM0MzsJCS8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZgomIzQzOwkJICogdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlLgomIzQzOwkJICovCiAJY2FzZSBJQ0VfTUFDX0U4MTA6CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgaWNlYCBQVFAgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBgaWNlYCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgSW50ZWwmIzM5O3MgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlcnMuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIHByZXR0eSBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSByZXdvcmtpbmcgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgd2l0aGluIHRoZSBkcml2ZXIsIHNoaWZ0aW5nIGZyb20gbXV0ZXhlcyB0byBzcGlubG9ja3MgaW4gc29tZSBhcmVhcywgYW5kIG1ha2luZyBoZWF2eSB1c2Ugb2YgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggcG9ydHMsIHBhcnRpY3VsYXJseSBpbiBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIFRYIHRpbWVzdGFtcHMuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSB3YWl0IGZ1bmN0aW9uIHRvIGRyYWluIGluLWZsaWdodCB0aW1lc3RhbXBzLiBUaGVyZSYjMzk7cyBhbHNvIHNvbWUgUEhZIHJlc3RhcnQgbG9naWMgYmVpbmcgaGFuZGxlZCBoZXJlLiBUaGVyZSYjMzk7cyBzb21lIGNoYW5nZXMgdG8gdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLgoKVGhlIGNvZGUgbW9kaWZpZXMgdGhlIHRpbWVzdGFtcGluZyBsb2dpYywgbG9ja2luZyBtZWNoYW5pc21zIChtdXRleCB0byBzcGlubG9jay9SQ1UpLCBhbmQgUEhZIHJlc2V0IGxvZ2ljLgoKTXkgaW5pdGlhbCBjb25jZXJuIGlzbiYjMzk7dCBhYm91dCB0aGUgKmZ1bmN0aW9uYWxpdHkqIG9mIHRoZSBjaGFuZ2VzLCBidXQgd2hldGhlciB0aGlzIGNvbnN0aXR1dGVzIGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcHJvbXB0IHNheXMgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGF0IHRoZSBgaWNlYCBkcml2ZXIsIHdoaWNoIGlzIHNwZWNpZmljIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcywgaXMgKm5vdCogdHlwaWNhbGx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCBsaWtlIHRoZSBgZTEwMDBgLCBgZTEwMDBlYCwgb3IgYGlnYmAgZHJpdmVycywgd2hpY2ggYXJlIGNvbW1vbmx5IGVtdWxhdGVkLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGBpY2VgIGRyaXZlciBtaWdodCBiZSBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZS4KClNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlYWNoZWQgYnkgYSBmdXp6ZXIgKmV2ZW4gaWYqIGl0IGlzIG5vdCBlbXVsYXRlZC4gU3l6a2FsbGVyLCBpbiBteSBleHBlcmllbmNlLCBoYXMgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLCBpbmNsdWRpbmcgc29tZSBwc2V1ZG8tc3lzY2FsbHMgdG8gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCBQQ0kgZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgZnV6emluZyBkZXB0aCByZWFjaCBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiBQVFAgbG9naWMgd2l0aGluIHRoZSBgaWNlYCBkcml2ZXI/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIHRoZSBgaWNlYCBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX3B0cF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyNjA0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU9NDc9aWNlLSQoQ09ORklHX1BDSV9JT1YpICYjNDM7PVx0XFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNTYtXHRpY2VfdmZfbGliLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo1NzppY2UtJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0spICYjNDM7PSBpY2VfcHRwLm8gaWNlX3B0cF9ody5vIGljZV9kcGxsLm8gaWNlX3RzcGxsLm8gaWNlX2NwaS5vIGljZV90eGNsay5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNTgtaWNlLSQoQ09ORklHX0RDQikgJiM0Mzs9IGljZV9kY2IubyBpY2VfZGNiX25sLm8gaWNlX2RjYl9saWIub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaD02OTU9c3RhdGljIGlubGluZSBib29sIGljZV92ZWN0b3JfY2hfZW5hYmxlZChzdHJ1Y3QgaWNlX3FfdmVjdG9yICpxdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgtNzAwLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oOjcwMTogKiBpY2VfcHRwX3BmX2hhbmRsZXNfdHhfaW50ZXJydXB0IC0gQ2hlY2sgaWYgUEYgaGFuZGxlcyBUeCBpbnRlcnJ1cHRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC03MDItICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC03MDYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmg6NzA3OnN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfcHRwX3BmX2hhbmRsZXNfdHhfaW50ZXJydXB0KHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oLTcwOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy03LSNpbmNsdWRlIFwmIzM0O2ljZV9mbG93LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6ODojaW5jbHVkZSBcJiMzNDtpY2VfcHRwX2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWNraW5nLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5jLTUtI2luY2x1ZGUgXCYjMzQ7aWNlX2NvbW1vbi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5jOjY6I2luY2x1ZGUgXCYjMzQ7aWNlX3B0cF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5jLTctI2luY2x1ZGUgXCYjMzQ7aWNlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5oLTctI2luY2x1ZGUgXCYjMzQ7aWNlX3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jcGkuaDo4OiNpbmNsdWRlIFwmIzM0O2ljZV9wdHBfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jcGkuaC05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQ4Nzk9c3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF9lODI1KHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4ODYtXHQgKiBvdGhlcndpc2UgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIGRpdi1ieS16ZXJvIGluIGljZV90eGNsa19zZXRfY2xrKCkuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODg3Olx0ICogV2hlbiBQVFAgaXMgc3VwcG9ydGVkLCBpY2VfcHRwX2luaXQoKSBoYW5kbGVzIHRoaXMuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODg4LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODg5LVx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cdTAwM2VmbGFncykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4OTA6XHRcdGljZV9wdHBfaW5pdF9odyhcdTAwMjZwZi1cdTAwM2Vodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODkxLVx0XHRpZiAocGYtXHUwMDNlaHcubGFuZV9udW0gXHUwMDNlPSAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jPTM3NTk9aWNlX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTM3NzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYzozNzcyOlx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBpY2VfcHRwX2Nsb2NrX2luZGV4KHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTM3NzMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTM2PWljZV9wcmVwYXJlX2Zvcl9yZXNldChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNjEwLVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjYxMTpcdFx0aWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZiwgcmVzZXRfdHlwZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy02MTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MTEwMz1pY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTE1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjExNTQ6XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTExNTUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MzA2MD1zdGF0aWMgaXJxcmV0dXJuX3QgaWNlX2xsX3RzX2ludHIoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA2My1cdHUzMiBwZl9pbnRyX3N0YXJ0X29mZnNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMwNjQ6XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMDY1LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMDczLVx0aWYgKHR4LVx1MDAzZWluaXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMwNzQ6XHRcdGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcCh0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMDc1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMwNzgtXHRcdGlmIChpZHggIT0gdHgtXHUwMDNlbGVuKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MzA3OTpcdFx0XHRpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHR4LCBpZHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA4MC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz0zMDk3PXN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbWlzY19pbnRyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMxODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMTgzOlx0XHRyZXQgPSBpY2VfcHRwX3RzX2lycShwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMTg0LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMxOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMTk5Olx0XHRcdGljZV9wdHBfZXh0dHNfZXZlbnQocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzIwMC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTMyMzQ9c3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHJfdGhyZWFkX2ZuKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMyNDQtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KElDRV9NSVNDX1RIUkVBRF9UWF9UU1RBTVAsIHBmLVx1MDAzZW1pc2NfdGhyZWFkKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMyNDU6XHRcdGljZV9wdHBfcHJvY2Vzc190cyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMjQ2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMyNTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMjUxOlx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzI1Mi1cdFx0LyogSWYgYW55IG5ldyBUeCB0aW1lc3RhbXBzIGhhcHBlbmVkIHdoaWxlIGluIGludGVycnVwdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00MDY0PWludCBpY2VfdnNpX3JlY2ZnX3FzKHN0cnVjdCBpY2VfdnNpICp2c2ksIGludCBuZXdfcngsIGludCBuZXdfdHgsIGJvb2wgbG9ja2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQxMTEtXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUFRQX1NVUFBPUlRFRCwgcGYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDExMjpcdFx0aWNlX3B0cF9yZXN0b3JlX3RpbWVzdGFtcF9tb2RlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQxMTMtXHRnb3RvIGRvbmU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDcyMT1zdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzI5LVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ3MzA6XHRcdGljZV9wdHBfaW5pdChwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzMxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3NTc9c3RhdGljIHZvaWQgaWNlX2RlaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzY4LVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ3Njk6XHRcdGljZV9wdHBfcmVsZWFzZShwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzcwLVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLVx1MDAzZWZsYWdzKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz03NjQ1PXN0YXRpYyB2b2lkIGljZV9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NzUwLVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjc3NTE6XHRcdGljZV9wdHBfcmVidWlsZChwZiwgcmVzZXRfdHlwZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NzUyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc4MDAtXHRcdGlmIChwZi1cdTAwM2VwdHAucG9ydC5saW5rX3VwICE9IGxpbmtfdXApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3ODAxOlx0XHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgwMi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03ODIzLVx0LyogUmVzdG9yZSB0aW1lc3RhbXAgbW9kZSBzZXR0aW5ncyBhZnRlciBWU0kgcmVidWlsZCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NzgyNDpcdGljZV9wdHBfcmVzdG9yZV90aW1lc3RhbXBfbW9kZShwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03ODI1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgyNi1cdC8qIFN0YXJ0IFBUUCBwZXJpb2RpYyB3b3JrIGFmdGVyIFZTSSBpcyBmdWxseSByZWJ1aWx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3ODI3Olx0aWNlX3B0cF9xdWV1ZV93b3JrKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc4MjgtXHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9OTc5ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGljZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTk4MjktXHQubmRvX3hza193YWtldXAgPSBpY2VfeHNrX3dha2V1cCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjk4MzA6XHQubmRvX2h3dHN0YW1wX2dldCA9IGljZV9wdHBfaHd0c3RhbXBfZ2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6OTgzMTpcdC5uZG9faHd0c3RhbXBfc2V0ID0gaWNlX3B0cF9od3RzdGFtcF9zZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy05ODMyLX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMT1zdGF0aWMgY29uc3QgY2hhciBpY2VfcGluX25hbWVzW11bNjRdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3B0cF9waW5fZGVzYyBpY2VfcGluX2Rlc2NfZTgyeFtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMS1cdC8qIG5hbWUsICAgICAgICBncGlvLCAgICAgICBkZWxheSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3B0cF9waW5fZGVzYyBpY2VfcGluX2Rlc2NfZTgyNWNbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjctXHQvKiBuYW1lLCAgICAgICAgZ3BpbywgICAgICAgZGVsYXkgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozNjpzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2U4MTBbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzctXHQvKiBuYW1lLCAgICAgICAgZ3BpbywgICAgICAgZGVsYXkgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTQ1PXN0YXRpYyBjb25zdCBjaGFyIGljZV9waW5fbmFtZXNfZHBsbFtdWzY0XSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1MjpzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2RwbGxbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTMtXHQvKiBuYW1lLCAgIGdwaW8sICAgICAgIGRlbGF5ICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz02MD1zdGF0aWMgc3RydWN0IGljZV9wdHAgKmljZV9nZXRfY3RybF9wdHAoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02Ny0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6Njg6ICogaWNlX3B0cF9maW5kX3Bpbl9pZHggLSBGaW5kIHBpbiBpbmRleCBpbiBwdHBfcGluX2Rlc2NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjktICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjc1OnN0YXRpYyBpbnQgaWNlX3B0cF9maW5kX3Bpbl9pZHgoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gcHRwX3Bpbl9mdW5jdGlvbiBmdW5jLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03Ni1cdFx0XHRcdHVuc2lnbmVkIGludCBjaGFuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTAtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjkxOiAqIGljZV9wdHBfY2ZnX3R4X2ludGVycnVwdCAtIENvbmZpZ3VyZSBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IGZvciB0aGUgZGV2aWNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkyLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk2LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5NzpzdGF0aWMgdm9pZCBpY2VfcHRwX2NmZ190eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTEzND1zdGF0aWMgdm9pZCBpY2Vfc2V0X3J4X3RzdGFtcChzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBvbilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE1MS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTUyOiAqIGljZV9wdHBfZGlzYWJsZV90aW1lc3RhbXBfbW9kZSAtIERpc2FibGUgY3VycmVudCB0aW1lc3RhbXAgbW9kZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNTMtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTU4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxNTk6c3RhdGljIHZvaWQgaWNlX3B0cF9kaXNhYmxlX3RpbWVzdGFtcF9tb2RlKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTcxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxNzI6ICogaWNlX3B0cF9yZXN0b3JlX3RpbWVzdGFtcF9tb2RlIC0gUmVzdG9yZSB0aW1lc3RhbXAgY29uZmlndXJhdGlvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNzMtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTc3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxNzg6dm9pZCBpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE3OS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjE4MzpcdGljZV9wdHBfY2ZnX3R4X2ludGVycnVwdChwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE4NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE5NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTk2OiAqIGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyAtIFJlYWQgdGhlIHNvdXJjZSBjbG9jayByZWdpc3RlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xOTctICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjAwLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMDE6dTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjAyLVx0XHRcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI0NzogKiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMgLSBDb252ZXJ0IGEgMzJiIG5hbm9zZWNvbmRzIHRpbWVzdGFtcCB0byA2NGJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjQ4LSAqIEBjYWNoZWRfcGhjX3RpbWU6IHJlY2VudGx5IGNhY2hlZCBjb3B5IG9mIFBIQyB0aW1lXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yODMtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI4NDpzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzMyYl90cyh1NjQgY2FjaGVkX3BoY190aW1lLCB1MzIgaW5fdHN0YW1wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yODUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzEzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozMTQ6ICogaWNlX3B0cF9leHRlbmRfNDBiX3RzIC0gQ29udmVydCBhIDQwYiB0aW1lc3RhbXAgdG8gNjRiIG5hbm9zZWNvbmRzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTMxNS0gKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zMzUtICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzM2OiAqIFNlZSBpY2VfcHRwX2V4dGVuZF8zMmJfdHMgZm9yIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhlIGV4dGVuc2lvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zMzctICogYWxnb3JpdGhtLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zMzgtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjMzOTpzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTY0IGluX3RzdGFtcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzQwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzUxOlx0cmV0dXJuIGljZV9wdHBfZXh0ZW5kXzMyYl90cyhSRUFEX09OQ0UocGYtXHUwMDNlcHRwLmNhY2hlZF9waGNfdGltZSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM1Mi1cdFx0XHRcdCAgICAgKGluX3RzdGFtcCBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IG1hc2spO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzU1LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozNTY6ICogaWNlX3B0cF9pc190eF90cmFja2VyX3VwIC0gQ2hlY2sgaWYgVHggdHJhY2tlciBpcyByZWFkeSBmb3IgbmV3IHRpbWVzdGFtcHNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzU3LSAqIEB0eDogdGhlIFBUUCBUeCB0aW1lc3RhbXAgdHJhY2tlciB0byBjaGVja1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MzY0PXN0YXRpYyBib29sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM2NTppY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zNjYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozNjc6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM2ODpcdFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM2OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM3NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6Mzc2OiAqIGljZV9wdHBfcmVxX3R4X3NpbmdsZV90c3RhbXAgLSBSZXF1ZXN0IFR4IHRpbWVzdGFtcCBmb3IgYSBwb3J0IGZyb20gRldcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzc3LSAqIEB0eDogdGhlIFBUUCBUeCB0aW1lc3RhbXAgdHJhY2tlclxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzc5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozODA6dm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zODEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zODItXHRzdHJ1Y3QgaWNlX2U4MTBfcGFyYW1zICpwYXJhbXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM4MzpcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zODQtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozOTE6XHRwdHBfcG9ydCA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGljZV9wdHBfcG9ydCwgdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zOTItXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHB0cF9wb3J0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQyMy0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NDI0OiAqIGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcCAtIENvbXBsZXRlIFR4IHRpbWVzdGFtcCBmb3IgYSBwb3J0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQyNS0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDI2LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo0Mjc6dm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00Mjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDMxLVx0c3RydWN0IGljZV9lODEwX3BhcmFtcyAqcGFyYW1zO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo0MzI6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDMzLVx0dTY0IHJhd190c3RhbXAsIHRzdGFtcDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQ0My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NDQ0Olx0cHRwX3BvcnQgPSBjb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDQ1LVx0cGYgPSBwdHBfcG9ydF90b19wZihwdHBfcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00OTktXHQvKiBFeHRlbmQgdGhlIHRpbWVzdGFtcCB1c2luZyBjYWNoZWQgUEhDIHRpbWUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTAwOlx0dHN0YW1wID0gaWNlX3B0cF9leHRlbmRfNDBiX3RzKHBmLCByYXdfdHN0YW1wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTAxLVx0aWYgKHRzdGFtcCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTEzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1MTQ6ICogaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCAtIFByb2Nlc3MgVHggdGltZXN0YW1wcyBmb3IgYSBwb3J0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxNS0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTU2MC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTYxOnN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy01NjIte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1NjM6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTY0LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTU3MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTcyOlx0cHRwX3BvcnQgPSBjb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTczLVx0cGYgPSBwdHBfcG9ydF90b19wZihwdHBfcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02NzYtXHRcdC8qIEV4dGVuZCB0aGUgdGltZXN0YW1wIHVzaW5nIGNhY2hlZCBQSEMgdGltZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2Nzc6XHRcdHRzdGFtcCA9IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhwZiwgcmF3X3RzdGFtcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTY3OC1cdFx0aWYgKHRzdGFtcCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2OTM6c3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTY5NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjY5ODpzdGF0aWMgdm9pZCBpY2VfcHRwX3R4X3RzdGFtcF9vd25lcihzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjk5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzAwOlx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzAxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzAzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzA0Olx0XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcdTAwMjZwb3J0LVx1MDAzZXR4O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MDUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjcxNDpcdFx0aWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCh0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzE2Olx0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzE3LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MjItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjcyMzogKiBpY2VfcHRwX2FsbG9jX3R4X3RyYWNrZXIgLSBJbml0aWFsaXplIHRyYWNraW5nIGZvciBUeCB0aW1lc3RhbXBzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcyNC0gKiBAdHg6IFR4IHRyYWNraW5nIHN0cnVjdHVyZSB0byBpbml0aWFsaXplXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MjYtICogQXNzdW1lcyB0aGF0IHRoZSBsZW5ndGggaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4gRG8gbm90IGNhbGwgZGlyZWN0bHksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjcyNzogKiB1c2UgdGhlIGljZV9wdHBfaW5pdF90eF8qIGluc3RlYWQuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcyOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9NzI5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzMwOmljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTczMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz03NTg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzU5OmljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03NjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzg5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo3OTA6ICogaWNlX3B0cF9mbHVzaF90eF90cmFja2VyIC0gRmx1c2ggYW55IHJlbWFpbmluZyB0aW1lc3RhbXBzIGZyb20gdGhlIHRyYWNrZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzkxLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTc5Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo3OTc6aWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTc5OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04MDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjgwNTpcdGljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihwZiwgdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04MDYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NDEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg0MjogKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg0My0gKiBAdHg6IHRoZSB0cmFja2VyIHRvIG1hcmtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTg1MD1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4NTE6aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NTIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODYwLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4NjE6ICogaWNlX3B0cF9mbHVzaF9hbGxfdHhfdHJhY2tlciAtIEZsdXNoIGFsbCB0aW1lc3RhbXAgdHJhY2tlcnMgb24gdGhpcyBjbG9ja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NjItICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9ODY3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg2ODppY2VfcHRwX2ZsdXNoX2FsbF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04Njkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4NzA6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NzEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NzYtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4Nzc6XHRcdGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihwdHBfcG9ydF90b19wZihwb3J0KSwgXHUwMDI2cG9ydC1cdTAwM2V0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg3ODpcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg3OS1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODg0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4ODU6ICogaWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIgLSBSZWxlYXNlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIFR4IHRyYWNrZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODg2LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTg5MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4OTI6aWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTAzOlx0aWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHBmLCB0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkxNy0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTE4OiAqIGljZV9wdHBfaW5pdF90eF9lODJ4IC0gSW5pdGlhbGl6ZSB0cmFja2luZyBmb3IgVHggdGltZXN0YW1wc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05MTktICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTI5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5MzA6c3RhdGljIGludCBpY2VfcHRwX2luaXRfdHhfZTgyeChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05MzEtXHRcdFx0XHR1OCBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5Mzg6XHRyZXR1cm4gaWNlX3B0cF9hbGxvY190eF90cmFja2VyKHR4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTM5LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk0MS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTQyOiAqIGljZV9wdHBfaW5pdF90eCAtIEluaXRpYWxpemUgdHJhY2tpbmcgZm9yIFR4IHRpbWVzdGFtcHNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTQzLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk1MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTUyOnN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3R4KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IHBvcnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk1My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjk2NDpcdHJldHVybiBpY2VfcHRwX2FsbG9jX3R4X3RyYWNrZXIodHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjUtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTY3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5Njg6ICogaWNlX3B0cF91cGRhdGVfY2FjaGVkX3BoY3RpbWUgLSBVcGRhdGUgdGhlIGNhY2hlZCBQSEMgdGltZSB2YWx1ZXNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTY5LSAqIEBwZjogQm9hcmQgc3BlY2lmaWMgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk4My0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTg0OnN0YXRpYyBpbnQgaWNlX3B0cF91cGRhdGVfY2FjaGVkX3BoY3RpbWUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk4NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDAxLVx0LyogUmVhZCB0aGUgY3VycmVudCBQSEMgdGltZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDAyOlx0c3lzdGltZSA9IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhwZiwgTlVMTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwMDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDMyLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDMzOiAqIGljZV9wdHBfcmVzZXRfY2FjaGVkX3BoY3RpbWUgLSBSZXNldCBjYWNoZWQgUEhDIHRpbWUgYWZ0ZXIgYW4gdXBkYXRlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwMzQtICogQHBmOiBCb2FyZCBzcGVjaWZpYyBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA0NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA0NTpzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDQ2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNTItXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA1MzpcdGVyciA9IGljZV9wdHBfdXBkYXRlX2NhY2hlZF9waGN0aW1lKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA1NC1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNjgtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEwNjk6ICogaWNlX3B0cF93cml0ZV9pbml0IC0gU2V0IFBIQyB0aW1lIHRvIHByb3ZpZGVkIHZhbHVlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNzAtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA3NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA3NTpzdGF0aWMgaW50IGljZV9wdHBfd3JpdGVfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDc2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEwODA6XHRyZXR1cm4gaWNlX3B0cF9pbml0X3RpbWUoaHcsIG5zKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA4MS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDgzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDg0OiAqIGljZV9wdHBfd3JpdGVfYWRqIC0gQWRqdXN0IFBIQyBjbG9jayB0aW1lIGF0b21pY2FsbHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA4NS0gKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDkwLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDkxOnN0YXRpYyBpbnQgaWNlX3B0cF93cml0ZV9hZGooc3RydWN0IGljZV9wZiAqcGYsIHMzMiBhZGopXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwOTIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA5NTpcdHJldHVybiBpY2VfcHRwX2Fkal9jbG9jayhodywgYWRqKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA5Ni19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMTA3PXN0YXRpYyB1NjQgaWNlX2Jhc2VfaW5jdmFsKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTEyMC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTEyMTogKiBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8gLSBDaGVjayB3aGV0aGVyIFR4IEZJRk8gaXMgaW4gYW4gT0sgc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTEyMi0gKiBAcG9ydDogUFRQIHBvcnQgZm9yIHdoaWNoIFR4IEZJRk8gaXMgY2hlY2tlZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTIzLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMTI0OnN0YXRpYyBpbnQgaWNlX3B0cF9jaGVja190eF9maWZvKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExMjUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE3MS1cdFx0XHRwb3J0LVx1MDAzZXBvcnRfbnVtLCBxdWFkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE3MjpcdFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfcXVhZF9lODJ4KGh3LCBxdWFkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE3My1cdFx0cG9ydC1cdTAwM2V0eF9maWZvX2J1c3lfY250ID0gRklGT19PSztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExODAtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjExODE6ICogaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzIC0gQ2hlY2sgZm9yIHZhbGlkIFR4IGFuZCBSeCBvZmZzZXRzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExODItICogQHdvcms6IFBvaW50ZXIgdG8gdGhlIGt0aHJlYWRfd29yayBzdHJ1Y3R1cmUgZm9yIHRoaXMgdGFza1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE5NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE5NTpzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE5Ni17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjExOTc6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTk4LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyMDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEyMDQ6XHRwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpY2VfcHRwX3BvcnQsIG92X3dvcmsud29yayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyMDUtXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTIxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTIxNjpcdHR4X2VyciA9IGljZV9wdHBfY2hlY2tfdHhfZmlmbyhwb3J0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTIxNy1cdGlmICghdHhfZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTI0NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTI0NjogKiBpY2VfcHRwX3BvcnRfcGh5X3N0b3AgLSBTdG9wIHRpbWVzdGFtcGluZyBmb3IgYSBQSFkgcG9ydFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjQ3LSAqIEBwdHBfcG9ydDogUFRQIHBvcnQgdG8gc3RvcFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MTI0OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEyNTA6aWNlX3B0cF9wb3J0X3BoeV9zdG9wKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjUxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyODQtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEyODU6ICogaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0IC0gKFJlKXN0YXJ0IGFuZCBjYWxpYnJhdGUgUEhZIHRpbWVzdGFtcGluZ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjg2LSAqIEBwdHBfcG9ydDogUFRQIHBvcnQgZm9yIHdoaWNoIHRoZSBQSFkgc3RhcnQgaXMgc2V0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMjkyPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTI5MzppY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyOTQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTMwMS1cdGlmICghcHRwX3BvcnQtXHUwMDNlbGlua191cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTMwMjpcdFx0cmV0dXJuIGljZV9wdHBfcG9ydF9waHlfc3RvcChwdHBfcG9ydCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEzMDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMzMyLVx0XHQvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMzMzOlx0XHQgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTMzNC1cdFx0ICogdGhhdCB0aGUgVHggYW5kIFJ4IG9mZnNldCBjYWxpYnJhdGlvbiBoYXMgY29tcGxldGVkLlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTM1OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTM2MDogKiBpY2VfcHRwX2xpbmtfY2hhbmdlIC0gUmVjb25maWd1cmUgUFRQIGFmdGVyIGxpbmsgc3RhdHVzIGNoYW5nZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMzYxLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEzNjMtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEzNjQ6dm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cClcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTk3CgkJCQkJCQlvdXRwdXQ6IDk0CgkJCQkJCQl0aG91Z2h0czogMTM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogaWNlIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgdGFyZ2V0aW5nIHRoZSBgaWNlYCBkcml2ZXIsIHdoaWNoIEkga25vdyBpcyBmb3IgSW50ZWwmIzM5O3MgRTgwMCBzZXJpZXMgTklDcy4gVGhlIHByb2JsZW0gaXMsIFFFTVUsIHdoaWNoIGlzIG91ciBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBFODAwIHNlcmllcy4KCkkgd2FzIHRoaW5raW5nIGFib3V0IHRoZSBzeXprYWxsZXIgUENJIGZ1enplciwgd29uZGVyaW5nIGlmIGl0IGNvdWxkIHNvbWVob3cgcmVhY2ggaW50byB0aGUgYGljZWAgZHJpdmVyJiMzOTtzIFBUUCBsb2dpYy4gIEkgd2FzIGdvaW5nIHRvIHNlZSBpZiBzeXprYWxsZXIgZXZlbiBoYXMgYW55IGRlc2NyaXB0aW9ucyBmb3IgYGljZWAsIGJ1dCB0aGVuIEkgc2F3IHRoYXQgdGhlIHRvb2xzIEkgbmVlZCAoYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgKSBhcmVuJiMzOTt0IGFjdHVhbGx5IGF2YWlsYWJsZSB0byBtZSBoZXJlLiBJdCYjMzk7cyBhIGJpdCBvZiBhIHJlZCBoZXJyaW5nLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHVzZSBvdGhlciB0b29scy4KClRoZW4gSSByZS1yZWFkIHRoZSBwcm9tcHQmIzM5O3MgcnVsZXMgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCBzYXlzIHRvIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwYXRjaCBhZmZlY3RzICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgIEkgaW1tZWRpYXRlbHkgdGhvdWdodCB0aGF0IGBpY2VgIGNvdWxkIGJlIGEgU21hcnROSUMsIGJ1dCBhZnRlciBzb21lIHJlZmxlY3Rpb24gaXQmIzM5O3MgYSBzdGFuZGFyZCBOSUMgdGhhdCBqdXN0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuCgpHaXZlbiB0aGF0IGBpY2VgIGlzIGFuIEV0aGVybmV0IGRyaXZlciBmb3IgdGhlIEludGVsIEU4MDAgc2VyaWVzIGFuZCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gUUVNVSwgaXQgbmVjZXNzaXRhdGVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIFRoZSBwcm9tcHQgZ2l2ZXMgc29tZSBleGFtcGxlcyBvZiBzaW1pbGFyIGRyaXZlcnMsIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gYGljZWAgaXNuJiMzOTt0IGxpc3RlZCwgYnV0IHRoZSBsb2dpYyBzdGlsbCBhcHBsaWVzOyBgaWNlYCBpc24mIzM5O3QgZW11bGF0ZWQgYW5kIHJlcXVpcmVzIGhhcmR3YXJlLgoKSSBrbm93IHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGVtdWxhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlLiBJdCB1c2VzIGBlMTAwMGAsIGBlMTAwMGVgLCBgdmlydGlvLW5ldGAsIGV0Yy4gIFNvLCBpZiBgaWNlYCBpcyBub3QgZW11bGF0ZWQsIHRoZSBjb2RlIHBhdGhzIGFyZSBzaW1wbHkgaW5hY2Nlc3NpYmxlIGluIG91ciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBJIGNvbnNpZGVyZWQgdGhlIFBDSSBmdXp6ZXIgYWdhaW4gYnV0IHJlYWxpemVkIGl0JiMzOTtzIHVubGlrZWx5IHRvIHJlYWNoIGRlZXAgaW50byBjb21wbGV4IGRyaXZlciBsb2dpYyBsaWtlIHRoaXMsIGVzcGVjaWFsbHkgdGhlIFBUUCB0aW1lc3RhbXBpbmcsIFBIWSBvZmZzZXQgY2FsaWJyYXRpb24sIGFuZCBsaW5rIHN0YXRlIGNoYW5nZSBhc3BlY3RzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZy4KClRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdG8gcmV0dXJuIGBmYWxzZWAgaWYgdGhlIHBhdGNoIG1vZGlmaWVzICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIGBpY2VgIHJlcXVpcmVzIGEgcGh5c2ljYWwgUENJZSBjYXJkLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUuCgpJIGFsc28gY2hlY2tlZCBRRU1VJiMzOTtzIHN1cHBvcnRlZCBuZXR3b3JrIGRldmljZXMgYW5kIGNvbmZpcm1lZCB0aGVyZSYjMzk7cyBubyBgaWNlYCwgYGk0MGVgLCBvciBgaXhnYmVgIGVtdWxhdGlvbi4gQWxsIG9mIHRoZSBjaGFuZ2VzIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LgoKVGh1cywgdGhlIHBhdGNoIGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGBpY2VgIGRyaXZlciwgYSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3Qgc3VwcG9ydGVkIGJ5IHN0YW5kYXJkIFFFTVUuICBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSSYjMzk7bGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBQVFAgdGltZXN0YW1waW5nIGFuZCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBQVFAgdGltZXN0YW1waW5nIGFuZCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAxOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMTowOTozOC40NzgzMzE4NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU2OTM1MzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBkcml2ZXIgKGljZSkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIFBUUCB0aW1lc3RhbXBpbmcgYW5kIFBIWSBvZmZzZXQgY2FsaWJyYXRpb24pIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbGl6ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjA5OjM4LjQ3ODMzNzg3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTUyOTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEwNmIwMDRkY2QwMzQ2YmFlNTdiYjc0ODhjN2U0NzExMTM4MDJmOTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDE6MDk6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xcbmluZGV4IDJkYzM2MjlkNmQwZjYuLmQxNjQzYmY4YTFiNTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xcbkBAIC02NiwxOCArNjYsMTcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJlZmNvdW50LCAxKTtcXG4gXFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0KTtcXG4gXFxuIFxcdHJldHVybiBhZGFwdGVyO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpY2VfYWRhcHRlcl9mcmVlKHN0cnVjdCBpY2VfYWRhcHRlciAqYWRhcHRlcilcXG4ge1xcbi1cXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5wb3J0cykpO1xcbitcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0KSk7XFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShhZGFwdGVyLVxcdTAwM2VjcGlfcGh5X2xvY2spOyBpKyspXFxuIFxcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XFxuLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbiBcXG4gXFx0a2ZyZWUoYWRhcHRlcik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxcbmluZGV4IDRmNjk1ZjMyZGEzZDguLjM5OTIzZGVkZDUzNGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxcbkBAIC0xOSwxMyArMTksMTMgQEAgc3RydWN0IGljZV9wZjtcXG4gICpcXG4gICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgZGF0YSB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBhZGFwdGVyIHBvcnRzXFxuICAqXFxuLSAqIEBwb3J0czogbGlzdCBvZiBwb3J0c1xcbisgKiBAbGlzdDogbGlzdCBvZiBwb3J0c1xcbiAgKiBAbG9jazogcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIHBvcnRzIGxpc3RcXG4gICovXFxuIHN0cnVjdCBpY2VfcG9ydF9saXN0IHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBwb3J0cztcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHQvKiBUbyBzeW5jaHJvbml6ZSB0aGUgcG9ydHMgbGlzdCBvcGVyYXRpb25zICovXFxuLVxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbmluZGV4IGQ4ODgzNTQ4MmQzYWEuLmM4NGQ2M2I4ZDI2MWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbkBAIC0zMjQ4LDcgKzMyNDgsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21pc2NfaW50cl90aHJlYWRfZm4oaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuIFxcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xcbiBcXHRpY2VfZmx1c2goaHcpO1xcbiBcXG4tXFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkge1xcbitcXHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XFxuIFxcdFxcdC8qIElmIGFueSBuZXcgVHggdGltZXN0YW1wcyBoYXBwZW5lZCB3aGlsZSBpbiBpbnRlcnJ1cHQsXFxuIFxcdFxcdCAqIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgaXQgYWdhaW4uXFxuIFxcdFxcdCAqL1xcbkBAIC02NzQ1LDcgKzY3NDUsNiBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHRpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTtcXG4gXFx0XFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktXFx1MDAzZW5ldGRldik7XFxuIFxcdFxcdG5ldGlmX2NhcnJpZXJfb24odnNpLVxcdTAwM2VuZXRkZXYpO1xcbi1cXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCB0cnVlKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUGVyZm9ybSBhbiBpbml0aWFsIHJlYWQgb2YgdGhlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIG5vdyB0b1xcbkBAIC03MjczLDcgKzcyNzIsNiBAQCBpbnQgaWNlX2Rvd24oc3RydWN0IGljZV92c2kgKnZzaSlcXG4gXFxuIFxcdGlmICh2c2ktXFx1MDAzZW5ldGRldikge1xcbiBcXHRcXHR2bGFuX2VyciA9IGljZV92c2lfZGVsX3ZsYW5femVybyh2c2kpO1xcbi1cXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHZzaS1cXHUwMDNlYmFjaywgZmFsc2UpO1xcbiBcXHRcXHRuZXRpZl9jYXJyaWVyX29mZih2c2ktXFx1MDAzZW5ldGRldik7XFxuIFxcdFxcdG5ldGlmX3R4X2Rpc2FibGUodnNpLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHR9XFxuQEAgLTc3OTQsNiArNzc5MiwxNSBAQCBzdGF0aWMgdm9pZCBpY2VfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuIFxcbiBcXHRpY2VfdXBkYXRlX3BmX25ldGRldl9saW5rKHBmKTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2IHBmLVxcdTAwM2Vody5wb3J0X2luZm8pIHtcXG4rXFx0XFx0Ym9vbCBsaW5rX3VwO1xcbitcXG4rXFx0XFx0bGlua191cCA9ICEhKHBmLVxcdTAwM2Vody5wb3J0X2luZm8tXFx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBJQ0VfQVFfTElOS19VUCk7XFxuK1xcdFxcdGlmIChwZi1cXHUwMDNlcHRwLnBvcnQubGlua191cCAhPSBsaW5rX3VwKVxcbitcXHRcXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXFxuIFxcdGVyciA9IGljZV9zZW5kX3ZlcnNpb24ocGYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuaW5kZXggZWFlYzM2YWI2YWUzZi4uMGU0NGVkNmIwYWU4ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xcbkBAIC0xLDYgKzEsOCBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpY2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9saWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV90cmFjZS5oXFxcIlxcbkBAIC0zNjIsOSArMzY0LDEyIEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxcbiBzdGF0aWMgYm9vbFxcbiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiB7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XFxuK1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ0eC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRyZXR1cm4gdHgtXFx1MDAzZWluaXQgXFx1MDAyNlxcdTAwMjYgIXR4LVxcdTAwM2VjYWxpYnJhdGluZztcXG4rXFx0cmV0dXJuIHR4LVxcdTAwM2Vpbml0IFxcdTAwMjZcXHUwMDI2ICF0eC1cXHUwMDNlY2FsaWJyYXRpbmcgXFx1MDAyNlxcdTAwMjYgcHRwX3BvcnQtXFx1MDAzZWxpbmtfdXA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC01NjEsNyArNTY2LDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG4gXFx0dTY0IHRzdGFtcF9yZWFkeTtcXG4tXFx0Ym9vbCBsaW5rX3VwO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHR1OCBpZHg7XFxuIFxcbkBAIC01NjksNyArNTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xcbiBcXHRodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcbi1cXHRpZiAoIXR4LVxcdTAwM2Vpbml0KVxcbitcXHRpZiAoIXR4LVxcdTAwM2Vpbml0IHx8IGJpdG1hcF9lbXB0eSh0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlbGVuKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXFxuQEAgLTU3OSwxNCArNTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdC8qIERyb3AgcGFja2V0cyBpZiB0aGUgbGluayB3ZW50IGRvd24gKi9cXG4tXFx0bGlua191cCA9IHB0cF9wb3J0LVxcdTAwM2VsaW5rX3VwO1xcbi1cXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VsZW4pIHtcXG4gXFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XFxuIFxcdFxcdHU4IHBoeV9pZHggPSBpZHggKyB0eC1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHR1NjQgcmF3X3RzdGFtcCA9IDAsIHRzdGFtcDtcXG4tXFx0XFx0Ym9vbCBkcm9wX3RzID0gIWxpbmtfdXA7XFxuK1xcdFxcdGJvb2wgZHJvcF90cyA9IGZhbHNlO1xcbiBcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG4gXFx0XFx0LyogRHJvcCBwYWNrZXRzIHdoaWNoIGhhdmUgd2FpdGVkIGZvciBtb3JlIHRoYW4gMiBzZWNvbmRzICovXFxuQEAgLTYxOSw2ICs2MjAsMjIgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIWRyb3BfdHMpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0LyogdmVyaWZ5IHJlYWR5IGJpdCBjbGVhcmVkICovXFxuK1xcdFxcdGlmICh0eC1cXHUwMDNlaGFzX3JlYWR5X2JpdG1hcCkge1xcbitcXHRcXHRcXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVxcdTAwM2VibG9jaywgXFx1MDAyNnRzdGFtcF9yZWFkeSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0aWYgKHRzdGFtcF9yZWFkeSBcXHUwMDI2IEJJVF9VTEwocGh5X2lkeCkpIHtcXG4rXFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChpZHgsIHR4LVxcdTAwM2VzdGFsZSkpXFxuK1xcdFxcdFxcdFxcdFxcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFxcXCJQSFkgcG9ydCAldSBmYWlsZWQgdG8gY2xlYXIgcmVhZHkgYml0IGZvciBpZHggJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHB0cF9wb3J0LVxcdTAwM2Vwb3J0X251bSwgcGh5X2lkeCk7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGljZV90cmFjZSh0eF90c3RhbXBfZndfZG9uZSwgdHgtXFx1MDAzZXRzdGFtcHNbaWR4XS5za2IsIGlkeCk7XFxuIFxcbiBcXHRcXHQvKiBGb3IgUEhZcyB3aGljaCBkb24ndCBpbXBsZW1lbnQgYSBwcm9wZXIgdGltZXN0YW1wIHJlYWR5XFxuQEAgLTY3MywyMCArNjkwLDMzIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRwZi1cXHUwMDNlcHRwLnR4X2h3dHN0YW1wX2dvb2QgKz0gdHN0YW1wX2dvb2Q7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdShzdHJ1Y3Qga3JlZiAqcmVmKVxcbit7XFxuK1xcdHdha2VfdXBfdmFyKHJlZik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGljZV9wdHBfdHhfdHN0YW1wX293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4gXFx0XFx0c3RydWN0IGljZV9wdHBfdHggKnR4ID0gXFx1MDAyNnBvcnQtXFx1MDAzZXR4O1xcbiBcXG4tXFx0XFx0aWYgKCF0eCB8fCAhdHgtXFx1MDAzZWluaXQpXFxuK1xcdFxcdGlmICghdHgtXFx1MDAzZWluaXQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuIFxcdFxcdGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAodHgpO1xcbitcXG4rXFx0XFx0a3JlZl9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTcyNSw2ICs3NTUsMzcgQEAgaWNlX3B0cF9hbGxvY190eF90cmFja2VyKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkXFxuK2ljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCk7XFxuK1xcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4rXFx0dTY0IHRzdGFtcF9yZWFkeTtcXG4rXFx0Ym9vbCBwZW5kaW5nO1xcbitcXHR1OCBpZHg7XFxuK1xcbitcXHRpZiAoaHctXFx1MDAzZXJlc2V0X29uZ29pbmcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtXFx1MDAzZWJsb2NrLCBcXHUwMDI2dHN0YW1wX3JlYWR5KSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0cGVuZGluZyA9IGZhbHNlO1xcbitcXHRcXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXFx1MDAzZWluX3VzZSwgdHgtXFx1MDAzZWxlbikge1xcbitcXHRcXHRcXHRpZiAoISh0c3RhbXBfcmVhZHkgXFx1MDAyNiBCSVRfVUxMKGlkeCArIHR4LVxcdTAwM2VvZmZzZXQpKSlcXG4rXFx0XFx0XFx0XFx0cGVuZGluZyA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKCFwZW5kaW5nKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTtcXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcXG4rXFxuK1xcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW4tZmxpZ2h0IFR4IHRpbWVzdGFtcHMgb24gYmxvY2sgJXVcXFxcblxcXCIsXFxuK1xcdFxcdHR4LVxcdTAwM2VibG9jayk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlclxcbiAgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuQEAgLTc0MSw2ICs4MDIsOCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG4gXFx0aW50IGVycjtcXG4gXFx0dTggaWR4O1xcbiBcXG4rXFx0aWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHBmLCB0eCk7XFxuK1xcbiBcXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVxcdTAwM2VibG9jaywgXFx1MDAyNnRzdGFtcF9yZWFkeSk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIkZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcXFxcblxcXCIsXFxuQEAgLTc3OSwxMiArODQyLDEwIEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiAgKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXFxuICAqIEB0eDogdGhlIHRyYWNrZXIgdG8gbWFya1xcbiAgKlxcbi0gKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHNlbmRpbmdcXG4tICogdGhlaXIgdGltZXN0YW1wIHZhbHVlIHRvIHRoZSBzdGFjay4gVGhpcyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IGV4dGVuZGluZ1xcbi0gKiB0aGUgNDBiaXQgaGFyZHdhcmUgdGltZXN0YW1wIGluY29ycmVjdGx5Llxcbi0gKlxcbi0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgUFRQIGNsb2NrIGlzIG1vZGlmaWVkIHN1Y2ggYXMgYWZ0ZXIgYSBzZXRcXG4tICogdGltZSByZXF1ZXN0LlxcbisgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXJcXG4rICogZnJvbSByZXBvcnRpbmcgdGhlIHRpbWVzdGFtcCB0byB0aGUgc3RhY2suIFRoaXMgaXMgY2FsbGVkIHRvIGluZm9ybSB0aGVcXG4rICogZHJpdmVyIHRoYXQgYSB0aW1lc3RhbXAgaXMgZXhwZWN0ZWQgdG8gZmFpbCBpZiBpdCB3YXMgaW5pdGlhdGVkIGFzIHRoZSBsaW5rXFxuKyAqIHdlbnQgZG93bi5cXG4gICovXFxuIHN0YXRpYyB2b2lkXFxuIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG5AQCAtODA4LDggKzg2OSwxNiBAQCBpY2VfcHRwX2ZsdXNoX2FsbF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMsIGxpc3Rfbm9kZSlcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xcbitcXHRcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihwdHBfcG9ydF90b19wZihwb3J0KSwgXFx1MDAyNnBvcnQtXFx1MDAzZXR4KTtcXG4rXFx0XFx0a3JlZl9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtOTk0LDEzICsxMDYzLDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9jYWNoZWRfcGhjdGltZShzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXFx1MDAzZXB0cC5rd29ya2VyLCBcXHUwMDI2cGYtXFx1MDAzZXB0cC53b3JrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBtc2Vjc190b19qaWZmaWVzKDEwKSk7XFxuIFxcdH1cXG4tXFxuLVxcdC8qIE1hcmsgYW55IG91dHN0YW5kaW5nIHRpbWVzdGFtcHMgYXMgc3RhbGUsIHNpbmNlIHRoZXkgbWlnaHQgaGF2ZVxcbi1cXHQgKiBiZWVuIGNhcHR1cmVkIGluIGhhcmR3YXJlIGJlZm9yZSB0aGUgdGltZSB1cGRhdGUuIFRoaXMgY291bGQgbGVhZFxcbi1cXHQgKiB0byB1cyBleHRlbmRpbmcgdGhlbSB3aXRoIHRoZSB3cm9uZyBjYWNoZWQgdmFsdWUgcmVzdWx0aW5nIGluXFxuLVxcdCAqIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLlxcbi1cXHQgKi9cXG4tXFx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydC50eCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xMTMzLDYgKzExOTUsNyBAQCBzdGF0aWMgaW50IGljZV9wdHBfY2hlY2tfdHhfZmlmbyhzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0KVxcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZjtcXG4gXFx0c3RydWN0IGljZV9odyAqaHc7XFxuIFxcdGludCB0eF9lcnI7XFxuQEAgLTExNTUsMTIgKzEyMTgsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuIFxcdFxcdHR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LVxcdTAwM2Vwb3J0X251bSk7XFxuIFxcdHJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LVxcdTAwM2Vwb3J0X251bSk7XFxuIFxcdGlmICh0eF9lcnIgfHwgcnhfZXJyKSB7XFxuLVxcdFxcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIgKi9cXG4rXFx0XFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci5cXG4rXFx0XFx0ICogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgbm9ybWFsIGxpbmstdXA6IHRoZSB2ZXJuaWVyIG9mZnNldFxcbitcXHRcXHQgKiBjYWxpYnJhdGlvbiBjYW5ub3QgY29tcGxldGUgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBoYXNcXG4rXFx0XFx0ICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdFxcXCJQVFAgb2Zmc2V0IG5vdCB5ZXQgdmFsaWQgZm9yIHBvcnQgJXUgKHR4X2Vycj0lZCByeF9lcnI9JWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwb3J0LVxcdTAwM2Vwb3J0X251bSwgdHhfZXJyLCByeF9lcnIpO1xcbiBcXHRcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cXHUwMDNlcHRwLmt3b3JrZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZwb3J0LVxcdTAwM2Vvdl93b3JrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4rXFxuK1xcdC8qIFR4IGFuZCBSeCBvZmZzZXRzIGFyZSBub3cgY29uZmlndXJlZCwgZW5hYmxlIFR4IHRpbWVzdGFtcHMgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBvcnQtXFx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcXG4rXFx0cG9ydC1cXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSxcXG4rXFx0XFx0XFxcIlBUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxcXFxuXFxcIixcXG4rXFx0XFx0cG9ydC1cXHUwMDNlcG9ydF9udW0pO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTI0MywxMyArMTMyMiwyMCBAQCBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXFxuIFxcbiBcXHRcXHQvKiBTdGFydCB0aGUgUEhZIHRpbWVyIGluIFZlcm5pZXIgbW9kZSAqL1xcbiBcXHRcXHRlcnIgPSBpY2Vfc3RhcnRfcGh5X3RpbWVyX2U4MngoaHcsIHBvcnQpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRwdHBfcG9ydC1cXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRwX3BvcnQtXFx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdC8qIEVuYWJsZSBUeCB0aW1lc3RhbXBzIHJpZ2h0IGF3YXkgKi9cXG4tXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnB0cF9wb3J0LVxcdTAwM2V0eC5sb2NrLCBmbGFncyk7XFxuLVxcdFxcdHB0cF9wb3J0LVxcdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbitcXHRcXHQvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpblxcbitcXHRcXHQgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWRcXG4rXFx0XFx0ICogdGhhdCB0aGUgVHggYW5kIFJ4IG9mZnNldCBjYWxpYnJhdGlvbiBoYXMgY29tcGxldGVkLlxcbitcXHRcXHQgKiBDbGVhcmluZyBpdCBoZXJlIHdvdWxkIGFsbG93IFR4IHRpbWVzdGFtcHMgdG8gYmUgcmVwb3J0ZWRcXG4rXFx0XFx0ICogYmVmb3JlIHRoZSBQSFkgb2Zmc2V0IHJlZ2lzdGVycyBhcmUgY29uZmlndXJlZCwgbGVhZGluZ1xcbitcXHRcXHQgKiB0byBpbmNvcnJlY3QgdGltZXN0YW1wIHZhbHVlcy5cXG4rXFx0XFx0ICovXFxuIFxcbiBcXHRcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cXHUwMDNlcHRwLmt3b3JrZXIsIFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNlb3Zfd29yayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgMCk7XFxuQEAgLTEyODAsMTggKzEzNjYsMjEgQEAgdm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cClcXG4gXFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQ7XFxuIFxcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHB0cF9wb3J0ID0gXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydDtcXG4gXFxuIFxcdC8qIFVwZGF0ZSBjYWNoZWQgbGluayBzdGF0dXMgZm9yIHRoaXMgcG9ydCBpbW1lZGlhdGVseSAqL1xcbiBcXHRwdHBfcG9ydC1cXHUwMDNlbGlua191cCA9IGxpbmt1cDtcXG4gXFxuK1xcdGlmIChwZi1cXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovXFxuIFxcdGlmIChwZi1cXHUwMDNlaHcucmVzZXRfb25nb2luZylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKCFsaW5rdXApXFxuK1xcdFxcdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNldHgpO1xcbitcXG4gXFx0aWYgKGh3LVxcdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgdGVzdF9iaXQoSUNFX0ZMQUdfRFBMTCwgcGYtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRpbnQgcGluLCBlcnI7XFxuQEAgLTE0MjQsMTYgKzE1MTMsMjEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9yZXN0YXJ0X2FsbF9waHkoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKSB7XFxuLVxcdFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGxpc3Rfbm9kZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0XFx0aWYgKHBvcnQtXFx1MDAzZWxpbmtfdXApXFxuIFxcdFxcdFxcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwb3J0KTtcXG4rXFxuK1xcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI2NzgsNzQgKzI3NzIsNTYgQEAgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbitzdGF0aWMgYm9vbCBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIGJvb2wgaW5faXJxKVxcbiB7XFxuLVxcdGJvb2wgbW9yZV90aW1lc3RhbXBzO1xcbitcXHRERUNMQVJFX0JJVE1BUCh0c3RhbXBzLCBJTkRFWF9QRVJfUE9SVF9NQVgpID0ge307XFxuIFxcbiBcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNnR4LVxcdTAwM2Vsb2NrKSB7XFxuIFxcdFxcdGlmICghdHgtXFx1MDAzZWluaXQpXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdFxcdG1vcmVfdGltZXN0YW1wcyA9ICFiaXRtYXBfZW1wdHkodHgtXFx1MDAzZWluX3VzZSwgdHgtXFx1MDAzZWxlbik7XFxuLVxcdH1cXG4rXFx0XFx0aWYgKGluX2lycSkge1xcbitcXHRcXHRcXHRpZiAoIWljZV9wdHBfaXNfdHhfdHJhY2tlcl91cCh0eCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdHJldHVybiBtb3JlX3RpbWVzdGFtcHM7XFxuK1xcdFxcdFxcdHJldHVybiBiaXRtYXBfYW5kbm90KHRzdGFtcHMsIHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VzdGFsZSwgdHgtXFx1MDAzZWxlbik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldHVybiAhYml0bWFwX2VtcHR5KHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VsZW4pO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbitzdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxcbiB7XFxuK1xcdGJvb2wgaGF2ZV90c3RhbXBzID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jaykge1xcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMsXFxuLVxcdFxcdFxcdFxcdCAgICBsaXN0X25vZGUpIHtcXG4tXFx0XFx0XFx0c3RydWN0IGljZV9wdHBfdHggKnR4ID0gXFx1MDAyNnBvcnQtXFx1MDAzZXR4O1xcbi1cXG4tXFx0XFx0XFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHR4KSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4rXFx0XFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFxcdTAwMjZwb3J0LVxcdTAwM2V0eCwgaW5faXJxKSkge1xcbitcXHRcXHRcXHRoYXZlX3RzdGFtcHMgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gaGF2ZV90c3RhbXBzO1xcbiB9XFxuIFxcbi1ib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxcbitib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcXG4ge1xcbi1cXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHQvKiBDaGVjayBzb2Z0d2FyZSBpbmRpY2F0b3IgKi9cXG4gXFx0c3dpdGNoIChwZi1cXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKSB7XFxuIFxcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfTk9ORTpcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX1NFTEY6XFxuLVxcdFxcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcXHUwMDI2cGYtXFx1MDAzZXB0cC5wb3J0LnR4KSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXR1cm4gaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydC50eCwgaW5faXJxKTtcXG4gXFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9BTEw6XFxuLVxcdFxcdGlmIChpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJldHVybiBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYsIGluX2lycSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiVW5leHBlY3RlZCBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG1vZGUgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgcGYtXFx1MDAzZXB0cC50eF9pbnRlcnJ1cHRfbW9kZSk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBDaGVjayBoYXJkd2FyZSBpbmRpY2F0b3IgKi9cXG4tXFx0cmV0ID0gaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoaHcpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcXFwiVW5hYmxlIHRvIHJlYWQgUEhZIFR4IHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0cmV0KTtcXG4tXFx0XFx0LyogU3RvcCB0cmlnZ2VyaW5nIElSUXMgaWYgd2UncmUgdW5hYmxlIHRvIHJlYWQgUEhZICovXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbi1cXG4tXFx0LyogaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoKSByZXR1cm5zIDEgaWYgdGhlcmUgYXJlIHRpbWVzdGFtcHNcXG4tXFx0ICogYXZhaWxhYmxlLCAwIGlmIHRoZXJlIGFyZSBubyB3YWl0aW5nIHRpbWVzdGFtcHMsIGFuZCBhIG5lZ2F0aXZlXFxuLVxcdCAqIHZhbHVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAod2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUpLlxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuIHJldCBcXHUwMDNlIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yNzk5LDcgKzI4NzUsNyBAQCBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0LyogRTgzMCBjYW4gcmVhZCB0aW1lc3RhbXBzIGluIHRoZSB0b3AgaGFsZiB1c2luZyByZDMyKCkgKi9cXG4gXFx0XFx0aWNlX3B0cF9wcm9jZXNzX3RzKHBmKTtcXG4gXFxuLVxcdFxcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcXG4rXFx0XFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkge1xcbiBcXHRcXHRcXHQvKiBQcm9jZXNzIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMuIElmIHRoZXJlXFxuIFxcdFxcdFxcdCAqIGlzIG1vcmUgd29yaywgcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBhZ2Fpbi5cXG4gXFx0XFx0XFx0ICovXFxuQEAgLTI4MjksNyArMjkwNSw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7XFxuIFxcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghcGYtXFx1MDAzZXB0cC5wb3J0LnR4Lmhhc19yZWFkeV9iaXRtYXApXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjgzNywxMSArMjkxMiw4IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGRldl9kYmcoZGV2LCBcXFwiUFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0cmV0KTtcXG4tXFx0fSBlbHNlIGlmIChyZXQpIHtcXG4rXFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCBmYWxzZSkgfHxcXG4rXFx0ICAgIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KSkge1xcbiBcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlBUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cXFxcblxcXCIpO1xcbiBcXG4gXFx0XFx0d3IzMihodywgUEZJTlRfT0lDUiwgUEZJTlRfT0lDUl9UU1lOX1RYX00pO1xcbkBAIC0yODkwLDE0ICsyOTYyLDE2IEBAIHZvaWQgaWNlX3B0cF9xdWV1ZV93b3JrKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuIHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKSB7XFxuLVxcdFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGxpc3Rfbm9kZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4gXFx0XFx0c3RydWN0IGljZV9wZiAqcGVlcl9wZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpO1xcbiBcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0aWYgKCFpY2VfaXNfcHJpbWFyeShcXHUwMDI2cGVlcl9wZi1cXHUwMDNlaHcpKSB7XFxuIFxcdFxcdFxcdGlmIChyZWJ1aWxkKSB7XFxuIFxcdFxcdFxcdFxcdC8qIFRPRE86IFdoZW4gaW1wbGVtZW50aW5nIHJlYnVpbGQ9dHJ1ZTpcXG5AQCAtMjkwOSw3ICsyOTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLFxcbiBcXHRcXHRcXHRcXHRpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBlZXJfcGYsIHJlc2V0X3R5cGUpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI5MzYsNiArMzAxNCwxNCBAQCB2b2lkIGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxcbiBcXHRpZiAocmVzZXRfdHlwZSA9PSBJQ0VfUkVTRVRfUEZSKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHQvKiBDYW5jZWwgdGhlIG9mZnNldCB2ZXJpZmljYXRpb24gd29yayBmb3IgRTgyeCBiZWZvcmUgcmVsZWFzaW5nIHRoZVxcbitcXHQgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWVcXG4rXFx0ICogc2lkZWJhbmQgcXVldWUgY29tbWFuZHMgdGhhdCB3aWxsIGZhaWwgb3IgdGltZW91dCwgYW5kIG1heVxcbitcXHQgKiByZWZlcmVuY2Ugc3RhdGUgdGhhdCBpcyBiZWluZyB0b3JuIGRvd24uXFxuK1xcdCAqL1xcbitcXHRpZiAoaHctXFx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQylcXG4rXFx0XFx0a3RocmVhZF9jYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5vdl93b3JrKTtcXG4rXFxuIFxcdGlmIChpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikgXFx1MDAyNlxcdTAwMjYgaHctXFx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxcbiBcXHRcXHRpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMocGYsIGZhbHNlLCByZXNldF90eXBlKTtcXG4gXFxuQEAgLTMwODYsMTEgKzMxNzIsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQubGlzdF9ub2RlKTtcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRrcmVmX2luaXQoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5yZWYpO1xcbiBcXG4tXFx0bGlzdF9hZGQoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5saXN0X25vZGUsXFxuLVxcdFxcdCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5saXN0X25vZGUsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuIFxcbiBcXHQvKiBTZWVkIHRoZSBwZXItUEhZIFR4IHJlZmVyZW5jZSBjbG9jayB1c2FnZSBtYXAgZm9yIHRoaXMgcG9ydC5cXG4gXFx0ICogT25seSBtZWFuaW5nZnVsIG9uIEU4MjUgKG90aGVyIE1BQyB0eXBlcyBkb24ndCBleHBvc2UgdHgtY2xrXFxuQEAgLTMxMTMsMTIgKzMxOTksMzIgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2NsZWFudXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFxcdTAwMjZwZi1cXHUwMDNlcHRwO1xcbitcXHRzdHJ1Y3Qga3JlZiAqcmVmO1xcbiBcXG4tXFx0aWYgKHBmLVxcdTAwM2Vody5tYWNfdHlwZSAhPSBJQ0VfTUFDX1VOS05PV04pIHtcXG4tXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbi1cXHR9XFxuK1xcdGlmIChwZi1cXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19VTktOT1dOKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBUaGUgUEYgY2Fubm90IGJlIHJlbW92ZWQgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgcmVtYWluaW5nXFxuK1xcdCAqIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgdG8gdGhlIFBUUCBwb3J0LiBUbyBtYWtlIHN1cmUgdGhpcyBpcyB0cnVlLFxcbitcXHQgKiBmaXJzdCByZW1vdmUgdGhlIHBvcnQgZnJvbSB0aGUgbGlzdCwgdGhlbiBkcm9wIHRoZSBwcmltYXJ5XFxuK1xcdCAqIHJlZmVyZW5jZSB0aGlzIFBGIGhvbGRzIG9uIHRoZSBwb3J0LiBPbmNlIGRvbmUsIHdhaXQgdW50aWwgYWxsXFxuK1xcdCAqIGV4aXN0aW5nIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIEZpbmFsbHksIHN5bmNocm9uaXplX3JjdSgpIHRvXFxuK1xcdCAqIGVuc3VyZSB0aGF0IGFsbCBSQ1UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBtaWdodCBhdHRlbXB0IHRvXFxuK1xcdCAqIGRlcmVmZXJlbmNlIHRoZSBwb3J0IGFyZSBmaW5pc2hlZC5cXG4rXFx0ICovXFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4rXFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQubGlzdF9ub2RlKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4rXFxuK1xcdHJlZiA9IFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQucmVmO1xcbitcXHRrcmVmX3B1dChyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuK1xcbitcXHRkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLFxcbitcXHRcXHQgICAgICAhd2FpdF92YXJfZXZlbnRfdGltZW91dChyZWYsICFrcmVmX3JlYWQocmVmKSwgMTUgKiBIWiksXFxuK1xcdFxcdCAgICAgIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcG9ydCByZWZlcmVuY2VzIHRvIHJlbGVhc2UuIENvbnRpbnVpbmcgdG8gdW5sb2FkIGFueXdheXMuXFxcIik7XFxuK1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTMyMTAsOSArMzMxNiwxMyBAQCBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF9vd25lcihzdHJ1Y3QgaWNlX3BmICpwZilcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayB0aHJlYWRzXFxuKyAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSB0aGUgUFRQIGt3b3JrZXJcXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbiAgKiBAcHRwOiBQRiBQVFAgc3RydWN0dXJlXFxuKyAqXFxuKyAqIEFsbG9jYXRlIHRoZSBrd29ya2VyIGFuZCBpbml0aWFsaXplIHRoZSBwZXJpb2RpYyB3b3JrIGZ1bmN0aW9uLiBUaGVcXG4rICogcGVyaW9kaWMgd29yayBpcyBub3QgcXVldWVkIGhlcmU7IHRoZSBjYWxsZXIgc3RhcnRzIGl0IG9uY2UgdGhlIFBUUFxcbisgKiBzdGF0ZSBpcyBJQ0VfUFRQX1JFQURZLlxcbiAgKi9cXG4gc3RhdGljIGludCBpY2VfcHRwX2luaXRfd29yayhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHAgKnB0cClcXG4ge1xcbkBAIC0zMjMxLDkgKzMzNDEsNiBAQCBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKVxcbiBcXG4gXFx0cHRwLVxcdTAwM2Vrd29ya2VyID0ga3dvcmtlcjtcXG4gXFxuLVxcdC8qIFN0YXJ0IHBlcmlvZGljIHdvcmsgZ29pbmcgKi9cXG4tXFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocHRwLVxcdTAwM2Vrd29ya2VyLCBcXHUwMDI2cHRwLVxcdTAwM2V3b3JrLCAwKTtcXG4tXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0zMzU1LDYgKzM0NjIsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2NsZWFuX3BmO1xcbiBcXG4rXFx0LyogU2VlZCBsaW5rX3VwIGZyb20gY3VycmVudCBQSFkgc3RhdHVzLCBzaW5jZSBsaW5rIG1heSBhbHJlYWR5IGJlIHVwXFxuK1xcdCAqIChlLmcuIGFmdGVyIFBYRSBib290KSB3aXRoIG5vIGxpbmstY2hhbmdlIGVkZ2UgdG8gY2F0Y2ggaXQgbGF0ZXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocGYtXFx1MDAzZWh3LnBvcnRfaW5mbylcXG4rXFx0XFx0cHRwLVxcdTAwM2Vwb3J0LmxpbmtfdXAgPVxcbitcXHRcXHRcXHQhIShwZi1cXHUwMDNlaHcucG9ydF9pbmZvLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcXHUwMDI2XFxuK1xcdFxcdFxcdElDRV9BUV9MSU5LX1VQKTtcXG4rXFxuK1xcdC8qIENyZWF0ZSB0aGUga3dvcmtlciBiZWZvcmUgcmVzdGFydGluZyB0aGUgUEhZLCB3aGljaCBxdWV1ZXMgd29yayBvblxcbitcXHQgKiBpdCBpbiB0aGUgRTgyeCByZXN0YXJ0IHBhdGguIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBsaW5rIGV2ZW50c1xcbitcXHQgKiBmcm9tIHJlYWNoaW5nIGljZV9wdHBfcG9ydF9waHlfcmVzdGFydCgpIHdoaWxlIGt3b3JrZXIgaXMgc3RpbGwgTlVMTFxcbitcXHQgKi9cXG4rXFx0ZXJyID0gaWNlX3B0cF9pbml0X3dvcmsocGYsIHB0cCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuK1xcbiBcXHQvKiBTdGFydCB0aGUgUEhZIHRpbWVzdGFtcGluZyBibG9jayAqL1xcbiBcXHRpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpO1xcbiBcXG5AQCAtMzM2Myw5ICszNDg2LDEwIEBAIHZvaWQgaWNlX3B0cF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXG4gXFx0cHRwLVxcdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XFxuIFxcbi1cXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfZXhpdDtcXG4rXFx0LyogU3RhcnQgcGVyaW9kaWMgd29yayBvbmx5IGFmdGVyIHRoZSBzdGF0ZSBpcyBSRUFEWTsgdGhlIHdvcmtlclxcbitcXHQgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuXFxuK1xcdCAqL1xcbitcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXFx1MDAzZWt3b3JrZXIsIFxcdTAwMjZwdHAtXFx1MDAzZXdvcmssIDApO1xcbiBcXG4gXFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFxcXCJQVFAgaW5pdCBzdWNjZXNzZnVsXFxcXG5cXFwiKTtcXG4gXFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxcbmluZGV4IGM0YjBkYTdjZTIwZWQuLjEzMTU4YTkzMTlmYjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmhcXG5AQCAtNSw2ICs1LDggQEBcXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tyZWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpY2VfcHRwX2h3LmhcXFwiXFxuQEAgLTEzMCw2ICsxMzIsOSBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XFxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFxcdFxcdDE2XFxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcXHRcXHRcXHQ2NFxcbiBcXG4rLyogTWF4aW11bSBudW1iZXIgb2YgdGltZXN0YW1wIGluZGV4ZXMgYWNyb3NzIGFsbCBkZXZpY2VzICovXFxuKyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVFxcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcXG4gICpcXG5AQCAtMTM4LDYgKzE0Myw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcXG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0J3MgUEhZIG9mZnNldCBpcyB2YWxpZC5cXG4gICpcXG4gICogQGxpc3Rfbm9kZTogbGlzdCBtZW1iZXIgc3RydWN0dXJlXFxuKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcXG4gICogQHR4OiBUeCB0aW1lc3RhbXAgdHJhY2tpbmcgZm9yIHRoaXMgcG9ydFxcbiAgKiBAb3Zfd29yazogZGVsYXllZCB3b3JrIHRhc2sgZm9yIHRyYWNraW5nIHdoZW4gUEhZIG9mZnNldCBpcyB2YWxpZFxcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXFxuQEAgLTE0OSw2ICsxNTUsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XFxuICAqL1xcbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7XFxuK1xcdHN0cnVjdCBrcmVmIHJlZjtcXG4gXFx0c3RydWN0IGljZV9wdHBfdHggdHg7XFxuIFxcdHN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBvdl93b3JrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcHNfbG9jazsgLyogcHJvdGVjdHMgb3ZlcmFsbCBQVFAgUEhZIHN0YXJ0IHByb2NlZHVyZSAqL1xcbkBAIC0zMTIsNyArMzE5LDcgQEAgdm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KTtcXG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcXG4gdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpO1xcbiBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZik7XFxuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xcbitib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSk7XFxuIHU2NCBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcoc3RydWN0IGljZV9wZiAqcGYsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbiBcXG5AQCAtMzYwLDcgKzM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4raWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbmluZGV4IDNhNDFjNzExZTc1MWIuLjEwZTk3Mzg3NjYwOGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG5AQCAtNzM3LDI0ICs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcXG4gXFx0cmV0dXJuIGljZV9yZWFkX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvblxcbi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbi0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcmVhZFxcbi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlXFxuLSAqIEB2YWw6IFBvaW50ZXIgdG8gdGhlIHZhbHVlIHRvIHJlYWQgKG91dCBwYXJhbSlcXG4tICpcXG4tICogUmV0dXJuOlxcbi0gKiAqICUwICAgICAgLSBzdWNjZXNzXFxuLSAqICogJUVJTlZBTCAtIGludmFsaWQgcG9ydCBudW1iZXIgb3IgcmVzb3VyY2UgdHlwZVxcbi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZXFxuLSAqL1xcbi1zdGF0aWMgaW50IGljZV93cml0ZV9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgdTMyIHZhbClcXG4te1xcbi1cXHRyZXR1cm4gaWNlX3dyaXRlX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIGljZV93cml0ZV9xdWFkX3B0cF9yZWdfZXRoNTZnIC0gV3JpdGUgYSBQSFkgcXVhZCByZWdpc3RlclxcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbkBAIC0xMTM5LDggKzExMjEsOCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXFxuICAqIGludGVybmFsIFBIWXMgb2YgdGhlIDU2RyBkZXZpY2VzLlxcbiAgKlxcbiAgKiBUbyBkaXJlY3RseSBjbGVhciB0aGUgY29udGVudHMgb2YgdGhlIHRpbWVzdGFtcCBibG9jayBlbnRpcmVseSwgZGlzY2FyZGluZ1xcbi0gKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgdXNlXFxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXFxuKyAqIGFsbCB0aW1lc3RhbXAgZGF0YSBhdCBvbmNlLCBzb2Z0d2FyZSBzaG91bGQgaW5zdGVhZCBwZXJmb3JtIGEgUEhZIHNvZnRcXG4rICogcmVzZXQgdmlhIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkuXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGFuIGlkeCB3aG9zZSBiaXQgaXMgc2V0IGFjY29yZGluZyB0b1xcbiAgKiBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoKS5cXG5AQCAtMTE1MiwxMSArMTEzNCwxMSBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXFxuIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpXFxuIHtcXG4gXFx0dTY0IHVudXNlZF90c3RhbXA7XFxuLVxcdHUxNiBsb19hZGRyO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0LyogUmVhZCB0aGUgdGltZXN0YW1wIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wIHN0YXR1cyBiaXQgaXNcXG4tXFx0ICogY2xlYXJlZC5cXG4rXFx0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XFxuK1xcdCAqIGNsZWFycyB0aGUgZW50cnkncyB2YWxpZCBiaXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIChyZWFkLW9ubHkpXFxuK1xcdCAqIHRzX21lbW9yeV9zdGF0dXMgYml0LlxcbiBcXHQgKi9cXG4gXFx0ZXJyID0gaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1NmcoaHcsIHBvcnQsIGlkeCwgXFx1MDAyNnVudXNlZF90c3RhbXApO1xcbiBcXHRpZiAoZXJyKSB7XFxuQEAgLTExNjQsMzIgKzExNDYsNDAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcXG4gXFx0XFx0XFx0ICBwb3J0LCBpZHgsIGVycik7XFxuIFxcdH1cXG4gXFxuLVxcdGxvX2FkZHIgPSAodTE2KVBIWV9UU1RBTVBfTChpZHgpO1xcbi1cXG4tXFx0ZXJyID0gaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhodywgcG9ydCwgbG9fYWRkciwgMCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBjbGVhciBsb3cgUFRQIHRpbWVzdGFtcCByZWdpc3RlciBmb3IgcG9ydCAldSwgaWR4ICV1LCBlcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgcG9ydCwgaWR4LCBlcnIpO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyAtIENsZWFyIGFsbCB0aW1lc3RhbXBzIGZyb20gdGhlIHBvcnQgYmxvY2tcXG4rICogaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyAtIFJlc2V0IG9uZSBwb3J0J3MgVHggdGltZXN0YW1wIG1lbW9yeVxcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbisgKiBAcG9ydDogcG9ydCBudW1iZXIgdG8gY2xlYXJcXG4rICpcXG4rICogRnVsbHkgcmVzZXQgYSBzaW5nbGUgUEhZIHBvcnQncyBUeCB0aW1lc3RhbXAgbWVtb3J5LiBQZXIgdGhlIFBIWSBzcGVjLCB0aGVcXG4rICogb25seSB3YXkgdG8gY2xlYXIgYSB0aW1lc3RhbXAgdmFsaWQgYml0IChhbmQgaXRzIHJlYWQtb25seSB0c19tZW1vcnlfc3RhdHVzXFxuKyAqIGJpdCkgaXMgdG8gcmVhZCB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiwgc28gcmVhZCBldmVyeSBlbnRyeSBmb3IgdGhlXFxuKyAqIHBvcnQgKHR3byAzMi1iaXQgcmVhZHMgZWFjaCkuIFRoaXMgZGlzY2FyZHMgYWxsIHRpbWVzdGFtcCBkYXRhIG9uIHRoZSBwb3J0LFxcbisgKiBzbyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBmb3IgYSBmdWxsIHJlc2V0OyBjYWxsZXJzIHRoYXQgbXVzdCBwcmVzZXJ2ZVxcbisgKiBpbi1mbGlnaHQgdGltZXN0YW1wcyBjbGVhciBpbmRpdmlkdWFsIGluZGljZXMgdmlhIGljZV9jbGVhcl9waHlfdHN0YW1wKCkuXFxuKyAqXFxuKyAqIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCBhbiBpbnRlcm5hbCBIVyBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mXFxuKyAqIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMsIHRoaXMgKm11c3QqIG9ubHkgYmUgY2FsbGVkIGFzIHBhcnQgb2YgdGhlXFxuKyAqIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkgcHJvY2VkdXJlLiBPdGhlcndpc2UsIHRoZSBpbnRlcm5hbCBjb3VudGVyXFxuKyAqIG1heSBiZWNvbWUgb3V0IG9mIHN5bmMgYW5kIHByZXZlbnQgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHRzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIHRvIHJlYWQgdGhlIFBIWS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodylcXG4rc3RhdGljIGludCBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBwb3J0O1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTggaWR4O1xcbiBcXG4tXFx0Zm9yIChwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIGh3LVxcdTAwM2VwdHAubnVtX2xwb3J0czsgcG9ydCsrKSB7XFxuLVxcdFxcdGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX0wsXFxuLVxcdFxcdFxcdFxcdFxcdCAwKTtcXG4tXFx0XFx0aWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVNfVSxcXG4tXFx0XFx0XFx0XFx0XFx0IDApO1xcbitcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIElOREVYX1BFUl9QT1JUOyBpZHgrKykge1xcbitcXHRcXHRlcnIgPSBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1NmcoaHcsIHBvcnQsIGlkeCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjExNSwxMCArMjEwNSw2IEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9PRkZTRVRfUkVBRFksIDApO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4gXFx0ZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1JYX09GRlNFVF9SRUFEWSwgMCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTIxMzMsOSArMjExOSwxMSBAQCBpbnQgaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgYm9vbCBzb2Z0X3Jlc2V0KVxcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0XFxuICAqXFxuLSAqIFN0YXJ0IHRoZSBjbG9jayBvZiBhIFBIWSBwb3J0LiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvXFxuLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXNcXG4tICogaW5pdGlhbGl6ZWQgb3Igd2hlbiBsaW5rIHNwZWVkIGNoYW5nZXMuXFxuKyAqIFBlcmZvcm0gYSBQSFkgc29mdCByZXNldCBhbmQgdGhlbiBzdGFydCB0aGUgY2xvY2sgZm9yIHRoZSBQSFkgcG9ydC5cXG4rICpcXG4rICogVGhpcyBtdXN0IGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgZmxvdyB0byByZS1jYWxpYnJhdGUgVHggYW5kIFJ4XFxuKyAqIHRpbWVzdGFtcGluZyBvZmZzZXRzIHdoZW5ldmVyIHRoZSBjbG9jayB0aW1lIGlzIGluaXRpYWxpemVkIG9yIHdoZW4gbGlua1xcbisgKiBzcGVlZCBjaGFuZ2VzLlxcbiAgKlxcbiAgKiBSZXR1cm46XFxuICAqICogJTAgICAgIC0gc3VjY2Vzc1xcbkBAIC0yMTUxLDYgKzIxMzksMTAgQEAgaW50IGljZV9zdGFydF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxcbiBcXG4gXFx0dG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7XFxuIFxcbitcXHRlcnIgPSBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZyhodywgcG9ydCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRlcnIgPSBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKGh3LCBwb3J0LCBmYWxzZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTIyOTQsNiArMjI4Niw3IEBAIGludCBpY2VfcHRwX3JlYWRfdHhfaHd0c3RhbXBfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyICp0c19zdGF0dXMpXFxuICAqXFxuICAqIFRyaWdnZXIgYSBzb2Z0IHJlc2V0IG9mIHRoZSBFVEg1NkcgUEhZIGJ5IHRvZ2dsaW5nIHRoZSBzb2Z0IHJlc2V0XFxuICAqIGJpdCBpbiB0aGUgUEhZIGdsb2JhbCByZWdpc3Rlci4gVGhlIHJlc2V0IHNlcXVlbmNlIGNvbnNpc3RzIG9mOlxcbisgKiAgIDAuIFJlYWRpbmcgZXZlcnkgdGltZXN0YW1wIG1lbW9yeSByZWdpc3RlciB0byBjbGVhciBpdHMgdmFsaWQgYml0XFxuICAqICAgMS4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0XFxuICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxcbiAgKiAgIDMuIENsZWFyaW5nIHRoZSBzb2Z0IHJlc2V0IGJpdCBhZ2FpblxcbkBAIC0yMzAyLDYgKzIyOTUsMTIgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcXG4gICogdG8gc2V0dGxlLiBUaGlzIHByb3ZpZGVzIGEgY29udHJvbGxlZCB3YXkgdG8gcmVpbml0aWFsaXplIHRoZSBQSFlcXG4gICogd2l0aG91dCByZXF1aXJpbmcgYSBmdWxsIGRldmljZSByZXNldC5cXG4gICpcXG4rICogVG8gZW5zdXJlIHRoYXQgdGhlIGludGVybmFsIGNvdW50ZXIgbWF0Y2hlcyB0aGUgY29udGVudHMgb2YgdGhlXFxuKyAqIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUywgcmVhZCBldmVyeSB0aW1lc3RhbXAgaW5kZXggcHJpb3IgdG8gcGVyZm9ybWluZ1xcbisgKiB0aGUgc29mdCByZXNldC4gVGhlIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyByZWFkcyBlbnN1cmUgdGhhdCB0aGUgcmVnaW9uXFxuKyAqIGlzIGNsZWFyZWQsIHdoaWxlIHRoZSBzb2Z0IHJlc2V0IHByb2NlZHVyZSBlbnN1cmVzIHRoYXQgdGhlIHRpbXNldGFtcFxcbisgKiBjb3VudGVyIGlzIHJlc2V0IHRvIHplcm8uXFxuKyAqXFxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB3aGVuXFxuICAqICAgICAgICAgcmVhZGluZyBvciB3cml0aW5nIHRoZSBQSFkgcmVnaXN0ZXIuXFxuICAqL1xcbkBAIC0yMzEwLDYgKzIzMDksMTMgQEAgaW50IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxcbiBcXHR1MzIgZ2xvYmFsX3ZhbDtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGVyciA9IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1NmcoaHcsIHBvcnQpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFxcXCJGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgcG9ydCwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gaWNlX3JlYWRfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfR0xPQkFMLCBcXHUwMDI2Z2xvYmFsX3ZhbCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcXFxcblxcXCIsXFxuQEAgLTU4MDEsOCArNTgwNyw5IEBAIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnkoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcdFxcdGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2U4MngoaHcpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcXG4tXFx0XFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKGh3KTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdFxcdC8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZlxcbitcXHRcXHQgKiB0aGUgc29mdCByZXNldCBwcm9jZWR1cmUuXFxuK1xcdFxcdCAqL1xcbiBcXHRjYXNlIElDRV9NQUNfRTgxMDpcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMTowOTo0MC4xMzQ0NjY1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3OTEzMjA3MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBQVFAgdGltZXN0YW1waW5nIGFuZCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMDZiMDA0ZGNkMDM0NmJhZTU3YmI3NDg4YzdlNDcxMTEzODAyZjkwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDE6MDk6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG5pbmRleCAyZGMzNjI5ZDZkMGY2Li5kMTY0M2JmOGExYjU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG5AQCAtNjYsMTggKzY2LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmljZV9hZGFwdGVyX25ldyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2YWRhcHRlci1cdTAwM2VyZWZjb3VudCwgMSk7XG4gXG4tXHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QpO1xuIFxuIFx0cmV0dXJuIGFkYXB0ZXI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGljZV9hZGFwdGVyX2ZyZWUoc3RydWN0IGljZV9hZGFwdGVyICphZGFwdGVyKVxuIHtcbi1cdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cykpO1xuK1x0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QpKTtcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrKTsgaSsrKVxuIFx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdGtmcmVlKGFkYXB0ZXIpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5pbmRleCA0ZjY5NWYzMmRhM2Q4Li4zOTkyM2RlZGQ1MzRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5AQCAtMTksMTMgKzE5LDEzIEBAIHN0cnVjdCBpY2VfcGY7XG4gICpcbiAgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBkYXRhIHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGFkYXB0ZXIgcG9ydHNcbiAgKlxuLSAqIEBwb3J0czogbGlzdCBvZiBwb3J0c1xuKyAqIEBsaXN0OiBsaXN0IG9mIHBvcnRzXG4gICogQGxvY2s6IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb3J0cyBsaXN0XG4gICovXG4gc3RydWN0IGljZV9wb3J0X2xpc3Qge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBwb3J0cztcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdC8qIFRvIHN5bmNocm9uaXplIHRoZSBwb3J0cyBsaXN0IG9wZXJhdGlvbnMgKi9cbi1cdHN0cnVjdCBtdXRleCBsb2NrO1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZDg4ODM1NDgyZDNhYS4uYzg0ZDYzYjhkMjYxZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuQEAgLTMyNDgsNyArMzI0OCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbWlzY19pbnRyX3RocmVhZF9mbihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbiBcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcbi1cdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcbitcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcbiBcdFx0LyogSWYgYW55IG5ldyBUeCB0aW1lc3RhbXBzIGhhcHBlbmVkIHdoaWxlIGluIGludGVycnVwdCxcbiBcdFx0ICogcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBpdCBhZ2Fpbi5cbiBcdFx0ICovXG5AQCAtNjc0NSw3ICs2NzQ1LDYgQEAgc3RhdGljIGludCBpY2VfdXBfY29tcGxldGUoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSk7XG4gXHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXModnNpLVx1MDAzZW5ldGRldik7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb24odnNpLVx1MDAzZW5ldGRldik7XG4tXHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpO1xuIFx0fVxuIFxuIFx0LyogUGVyZm9ybSBhbiBpbml0aWFsIHJlYWQgb2YgdGhlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIG5vdyB0b1xuQEAgLTcyNzMsNyArNzI3Miw2IEBAIGludCBpY2VfZG93bihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFxuIFx0aWYgKHZzaS1cdTAwM2VuZXRkZXYpIHtcbiBcdFx0dmxhbl9lcnIgPSBpY2VfdnNpX2RlbF92bGFuX3plcm8odnNpKTtcbi1cdFx0aWNlX3B0cF9saW5rX2NoYW5nZSh2c2ktXHUwMDNlYmFjaywgZmFsc2UpO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29mZih2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfdHhfZGlzYWJsZSh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdH1cbkBAIC03Nzk0LDYgKzc3OTIsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIFxuIFx0aWNlX3VwZGF0ZV9wZl9uZXRkZXZfbGluayhwZik7XG4gXG4rXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUFRQX1NVUFBPUlRFRCwgcGYtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2Vody5wb3J0X2luZm8pIHtcbitcdFx0Ym9vbCBsaW5rX3VwO1xuK1xuK1x0XHRsaW5rX3VwID0gISEocGYtXHUwMDNlaHcucG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFx1MDAyNlxuK1x0XHRcdCAgICAgSUNFX0FRX0xJTktfVVApO1xuK1x0XHRpZiAocGYtXHUwMDNlcHRwLnBvcnQubGlua191cCAhPSBsaW5rX3VwKVxuK1x0XHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApO1xuK1x0fVxuK1xuIFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXG4gXHRlcnIgPSBpY2Vfc2VuZF92ZXJzaW9uKHBmKTtcbiBcdGlmIChlcnIpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uMGU0NGVkNmIwYWU4ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0xLDYgKzEsOCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpY2UuaFwiXG4gI2luY2x1ZGUgXCJpY2VfbGliLmhcIlxuICNpbmNsdWRlIFwiaWNlX3RyYWNlLmhcIlxuQEAgLTM2Miw5ICszNjQsMTIgQEAgc3RhdGljIHU2NCBpY2VfcHRwX2V4dGVuZF80MGJfdHMoc3RydWN0IGljZV9wZiAqcGYsIHU2NCBpbl90c3RhbXApXG4gc3RhdGljIGJvb2xcbiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIHtcbitcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cbitcdFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XG4rXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnR4LVx1MDAzZWxvY2spO1xuIFxuLVx0cmV0dXJuIHR4LVx1MDAzZWluaXQgXHUwMDI2XHUwMDI2ICF0eC1cdTAwM2VjYWxpYnJhdGluZztcbitcdHJldHVybiB0eC1cdTAwM2Vpbml0IFx1MDAyNlx1MDAyNiAhdHgtXHUwMDNlY2FsaWJyYXRpbmcgXHUwMDI2XHUwMDI2IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4gfVxuIFxuIC8qKlxuQEAgLTU2MSw3ICs1NjYsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHR1NjQgdHN0YW1wX3JlYWR5O1xuLVx0Ym9vbCBsaW5rX3VwO1xuIFx0aW50IGVycjtcbiBcdHU4IGlkeDtcbiBcbkBAIC01NjksNyArNTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHB0cF9wb3J0KTtcbiBcdGh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXG4tXHRpZiAoIXR4LVx1MDAzZWluaXQpXG4rXHRpZiAoIXR4LVx1MDAzZWluaXQgfHwgYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXG5AQCAtNTc5LDE0ICs1ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0LyogRHJvcCBwYWNrZXRzIGlmIHRoZSBsaW5rIHdlbnQgZG93biAqL1xuLVx0bGlua191cCA9IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4tXG4gXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pIHtcbiBcdFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4gXHRcdHU4IHBoeV9pZHggPSBpZHggKyB0eC1cdTAwM2VvZmZzZXQ7XG4gXHRcdHU2NCByYXdfdHN0YW1wID0gMCwgdHN0YW1wO1xuLVx0XHRib29sIGRyb3BfdHMgPSAhbGlua191cDtcbitcdFx0Ym9vbCBkcm9wX3RzID0gZmFsc2U7XG4gXHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRcdC8qIERyb3AgcGFja2V0cyB3aGljaCBoYXZlIHdhaXRlZCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcyAqL1xuQEAgLTYxOSw2ICs2MjAsMjIgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFkcm9wX3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKiB2ZXJpZnkgcmVhZHkgYml0IGNsZWFyZWQgKi9cbitcdFx0aWYgKHR4LVx1MDAzZWhhc19yZWFkeV9iaXRtYXApIHtcbitcdFx0XHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRpZiAodHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKHBoeV9pZHgpKSB7XG4rXHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCB0eC1cdTAwM2VzdGFsZSkpXG4rXHRcdFx0XHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwiUEhZIHBvcnQgJXUgZmFpbGVkIHRvIGNsZWFyIHJlYWR5IGJpdCBmb3IgaWR4ICV1XFxuXCIsXG4rXHRcdFx0XHRcdFx0cHRwX3BvcnQtXHUwMDNlcG9ydF9udW0sIHBoeV9pZHgpO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbiBcdFx0aWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC1cdTAwM2V0c3RhbXBzW2lkeF0uc2tiLCBpZHgpO1xuIFxuIFx0XHQvKiBGb3IgUEhZcyB3aGljaCBkb24ndCBpbXBsZW1lbnQgYSBwcm9wZXIgdGltZXN0YW1wIHJlYWR5XG5AQCAtNjczLDIwICs2OTAsMzMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZi1cdTAwM2VwdHAudHhfaHd0c3RhbXBfZ29vZCArPSB0c3RhbXBfZ29vZDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXG4re1xuK1x0d2FrZV91cF92YXIocmVmKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcdTAwMjZwb3J0LVx1MDAzZXR4O1xuIFxuLVx0XHRpZiAoIXR4IHx8ICF0eC1cdTAwM2Vpbml0KVxuK1x0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbiBcdFx0aWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCh0eCk7XG4rXG4rXHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC03MjUsNiArNzU1LDM3IEBAIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWRcbitpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTApO1xuK1x0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbitcdHU2NCB0c3RhbXBfcmVhZHk7XG4rXHRib29sIHBlbmRpbmc7XG4rXHR1OCBpZHg7XG4rXG4rXHRpZiAoaHctXHUwMDNlcmVzZXRfb25nb2luZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZG8ge1xuK1x0XHRpZiAoaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cdTAwM2VibG9jaywgXHUwMDI2dHN0YW1wX3JlYWR5KSlcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdHBlbmRpbmcgPSBmYWxzZTtcbitcdFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSB7XG4rXHRcdFx0aWYgKCEodHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKGlkeCArIHR4LVx1MDAzZW9mZnNldCkpKVxuK1x0XHRcdFx0cGVuZGluZyA9IHRydWU7XG4rXHRcdH1cbitcdFx0aWYgKCFwZW5kaW5nKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0dXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7XG4rXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuK1xuK1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW4tZmxpZ2h0IFR4IHRpbWVzdGFtcHMgb24gYmxvY2sgJXVcXG5cIixcbitcdFx0dHgtXHUwMDNlYmxvY2spO1xuK31cbitcbiAvKipcbiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlclxuICAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC03NDEsNiArODAyLDggQEAgaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRpbnQgZXJyO1xuIFx0dTggaWR4O1xuIFxuK1x0aWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHBmLCB0eCk7XG4rXG4gXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcIkZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcXG5cIixcbkBAIC03NzksMTIgKzg0MiwxMCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiAgKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXG4gICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrXG4gICpcbi0gKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHNlbmRpbmdcbi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nXG4tICogdGhlIDQwYml0IGhhcmR3YXJlIHRpbWVzdGFtcCBpbmNvcnJlY3RseS5cbi0gKlxuLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldFxuLSAqIHRpbWUgcmVxdWVzdC5cbisgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXJcbisgKiBmcm9tIHJlcG9ydGluZyB0aGUgdGltZXN0YW1wIHRvIHRoZSBzdGFjay4gVGhpcyBpcyBjYWxsZWQgdG8gaW5mb3JtIHRoZVxuKyAqIGRyaXZlciB0aGF0IGEgdGltZXN0YW1wIGlzIGV4cGVjdGVkIHRvIGZhaWwgaWYgaXQgd2FzIGluaXRpYXRlZCBhcyB0aGUgbGlua1xuKyAqIHdlbnQgZG93bi5cbiAgKi9cbiBzdGF0aWMgdm9pZFxuIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbkBAIC04MDgsOCArODY5LDE2IEBAIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbitcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwb3J0LVx1MDAzZXJlZikpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocHRwX3BvcnRfdG9fcGYocG9ydCksIFx1MDAyNnBvcnQtXHUwMDNldHgpO1xuK1x0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTk5NCwxMyArMTA2Myw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfY2FjaGVkX3BoY3RpbWUoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVx1MDAzZXB0cC5rd29ya2VyLCBcdTAwMjZwZi1cdTAwM2VwdHAud29yayxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcygxMCkpO1xuIFx0fVxuLVxuLVx0LyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlXG4tXHQgKiBiZWVuIGNhcHR1cmVkIGluIGhhcmR3YXJlIGJlZm9yZSB0aGUgdGltZSB1cGRhdGUuIFRoaXMgY291bGQgbGVhZFxuLVx0ICogdG8gdXMgZXh0ZW5kaW5nIHRoZW0gd2l0aCB0aGUgd3JvbmcgY2FjaGVkIHZhbHVlIHJlc3VsdGluZyBpblxuLVx0ICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4tXHQgKi9cbi1cdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTEzMyw2ICsxMTk1LDcgQEAgc3RhdGljIGludCBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8oc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHRpbnQgdHhfZXJyO1xuQEAgLTExNTUsMTIgKzEyMTgsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4gXHRcdHR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdHJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdGlmICh0eF9lcnIgfHwgcnhfZXJyKSB7XG4tXHRcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIgKi9cbitcdFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci5cbitcdFx0ICogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgbm9ybWFsIGxpbmstdXA6IHRoZSB2ZXJuaWVyIG9mZnNldFxuK1x0XHQgKiBjYWxpYnJhdGlvbiBjYW5ub3QgY29tcGxldGUgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBoYXNcbitcdFx0ICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS5cbitcdFx0ICovXG4rXHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXG4rXHRcdFx0XCJQVFAgb2Zmc2V0IG5vdCB5ZXQgdmFsaWQgZm9yIHBvcnQgJXUgKHR4X2Vycj0lZCByeF9lcnI9JWQpXFxuXCIsXG4rXHRcdFx0cG9ydC1cdTAwM2Vwb3J0X251bSwgdHhfZXJyLCByeF9lcnIpO1xuIFx0XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cdTAwM2VwdHAua3dvcmtlcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2cG9ydC1cdTAwM2Vvdl93b3JrLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4rXG4rXHQvKiBUeCBhbmQgUnggb2Zmc2V0cyBhcmUgbm93IGNvbmZpZ3VyZWQsIGVuYWJsZSBUeCB0aW1lc3RhbXBzICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbitcdHBvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4rXG4rXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLFxuK1x0XHRcIlBUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxcblwiLFxuK1x0XHRwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTI0MywxMyArMTMyMiwyMCBAQCBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXG4gXG4gXHRcdC8qIFN0YXJ0IHRoZSBQSFkgdGltZXIgaW4gVmVybmllciBtb2RlICovXG4gXHRcdGVyciA9IGljZV9zdGFydF9waHlfdGltZXJfZTgyeChodywgcG9ydCk7XG4tXHRcdGlmIChlcnIpXG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdHBfcG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4rXHRcdFx0cHRwX3BvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiBcdFx0XHRicmVhaztcbitcdFx0fVxuIFxuLVx0XHQvKiBFbmFibGUgVHggdGltZXN0YW1wcyByaWdodCBhd2F5ICovXG4tXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbi1cdFx0cHRwX3BvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdHBfcG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4rXHRcdC8qIERvIG5vdCBjbGVhciBjYWxpYnJhdGluZyBmbGFnIGhlcmUuIFR4IHRpbWVzdGFtcHMgcmVtYWluXG4rXHRcdCAqIGRpc2FibGVkIHVudGlsIGljZV9wdHBfd2FpdF9mb3Jfb2Zmc2V0cygpIGhhcyB2ZXJpZmllZFxuK1x0XHQgKiB0aGF0IHRoZSBUeCBhbmQgUnggb2Zmc2V0IGNhbGlicmF0aW9uIGhhcyBjb21wbGV0ZWQuXG4rXHRcdCAqIENsZWFyaW5nIGl0IGhlcmUgd291bGQgYWxsb3cgVHggdGltZXN0YW1wcyB0byBiZSByZXBvcnRlZFxuK1x0XHQgKiBiZWZvcmUgdGhlIFBIWSBvZmZzZXQgcmVnaXN0ZXJzIGFyZSBjb25maWd1cmVkLCBsZWFkaW5nXG4rXHRcdCAqIHRvIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLlxuK1x0XHQgKi9cbiBcbiBcdFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXHUwMDNlcHRwLmt3b3JrZXIsIFx1MDAyNnB0cF9wb3J0LVx1MDAzZW92X3dvcmssXG4gXHRcdFx0XHRcdCAgIDApO1xuQEAgLTEyODAsMTggKzEzNjYsMjEgQEAgdm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cClcbiBcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcbi1cdGlmIChwZi1cdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0cHRwX3BvcnQgPSBcdTAwMjZwZi1cdTAwM2VwdHAucG9ydDtcbiBcbiBcdC8qIFVwZGF0ZSBjYWNoZWQgbGluayBzdGF0dXMgZm9yIHRoaXMgcG9ydCBpbW1lZGlhdGVseSAqL1xuIFx0cHRwX3BvcnQtXHUwMDNlbGlua191cCA9IGxpbmt1cDtcbiBcbitcdGlmIChwZi1cdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogU2tpcCBIVyB3cml0ZXMgaWYgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MgKi9cbiBcdGlmIChwZi1cdTAwM2Vody5yZXNldF9vbmdvaW5nKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIWxpbmt1cClcbitcdFx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgpO1xuK1xuIFx0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1IFx1MDAyNlx1MDAyNlxuIFx0ICAgIHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRpbnQgcGluLCBlcnI7XG5AQCAtMTQyNCwxNiArMTUxMywyMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcoc3RydWN0IGljZV9wZiAqcGYpXG4gICovXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9yZXN0YXJ0X2FsbF9waHkoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuLVx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4rXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0bGlzdF9mb3JfZWFjaChlbnRyeSwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cykge1xuLVx0XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0ID0gbGlzdF9lbnRyeShlbnRyeSxcbi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcbi1cdFx0XHRcdFx0XHQgICAgICAgbGlzdF9ub2RlKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFx0aWYgKHBvcnQtXHUwMDNlbGlua191cClcbiBcdFx0XHRpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQocG9ydCk7XG4rXG4rXHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3OCw3NCArMjc3Miw1NiBAQCB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuK3N0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgYm9vbCBpbl9pcnEpXG4ge1xuLVx0Ym9vbCBtb3JlX3RpbWVzdGFtcHM7XG4rXHRERUNMQVJFX0JJVE1BUCh0c3RhbXBzLCBJTkRFWF9QRVJfUE9SVF9NQVgpID0ge307XG4gXG4gXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2dHgtXHUwMDNlbG9jaykge1xuIFx0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRtb3JlX3RpbWVzdGFtcHMgPSAhYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKTtcbi1cdH1cbitcdFx0aWYgKGluX2lycSkge1xuK1x0XHRcdGlmICghaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHR4KSlcbitcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBtb3JlX3RpbWVzdGFtcHM7XG4rXHRcdFx0cmV0dXJuIGJpdG1hcF9hbmRub3QodHN0YW1wcywgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VzdGFsZSwgdHgtXHUwMDNlbGVuKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXR1cm4gIWJpdG1hcF9lbXB0eSh0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbik7XG4rXHRcdH1cbitcdH1cbiB9XG4gXG4tc3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmKVxuK3N0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXG4ge1xuK1x0Ym9vbCBoYXZlX3RzdGFtcHMgPSBmYWxzZTtcbiBcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jaykge1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMsXG4tXHRcdFx0XHQgICAgbGlzdF9ub2RlKSB7XG4tXHRcdFx0c3RydWN0IGljZV9wdHBfdHggKnR4ID0gXHUwMDI2cG9ydC1cdTAwM2V0eDtcbi1cbi1cdFx0XHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHModHgpKVxuLVx0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuK1x0XHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXHUwMDI2cG9ydC1cdTAwM2V0eCwgaW5faXJxKSkge1xuK1x0XHRcdGhhdmVfdHN0YW1wcyA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIGhhdmVfdHN0YW1wcztcbiB9XG4gXG4tYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbitib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcbiB7XG4tXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuLVx0aW50IHJldDtcbi1cbi1cdC8qIENoZWNrIHNvZnR3YXJlIGluZGljYXRvciAqL1xuIFx0c3dpdGNoIChwZi1cdTAwM2VwdHAudHhfaW50ZXJydXB0X21vZGUpIHtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfTk9ORTpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9TRUxGOlxuLVx0XHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRicmVhaztcbitcdFx0cmV0dXJuIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4LCBpbl9pcnEpO1xuIFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9BTEw6XG4tXHRcdGlmIChpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRicmVhaztcbitcdFx0cmV0dXJuIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhwZiwgaW5faXJxKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdFdBUk5fT05DRSgxLCBcIlVuZXhwZWN0ZWQgVHggdGltZXN0YW1wIGludGVycnVwdCBtb2RlICV1XFxuXCIsXG4gXHRcdFx0ICBwZi1cdTAwM2VwdHAudHhfaW50ZXJydXB0X21vZGUpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdC8qIENoZWNrIGhhcmR3YXJlIGluZGljYXRvciAqL1xuLVx0cmV0ID0gaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoaHcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcIlVuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJWRcXG5cIixcbi1cdFx0XHRyZXQpO1xuLVx0XHQvKiBTdG9wIHRyaWdnZXJpbmcgSVJRcyBpZiB3ZSdyZSB1bmFibGUgdG8gcmVhZCBQSFkgKi9cbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuLVxuLVx0LyogaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoKSByZXR1cm5zIDEgaWYgdGhlcmUgYXJlIHRpbWVzdGFtcHNcbi1cdCAqIGF2YWlsYWJsZSwgMCBpZiB0aGVyZSBhcmUgbm8gd2FpdGluZyB0aW1lc3RhbXBzLCBhbmQgYSBuZWdhdGl2ZVxuLVx0ICogdmFsdWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yICh3aGljaCB3ZSBjaGVja2VkIGZvciBhYm92ZSkuXG4tXHQgKi9cbi1cdHJldHVybiByZXQgXHUwMDNlIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTI3OTksNyArMjg3NSw3IEBAIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHQvKiBFODMwIGNhbiByZWFkIHRpbWVzdGFtcHMgaW4gdGhlIHRvcCBoYWxmIHVzaW5nIHJkMzIoKSAqL1xuIFx0XHRpY2VfcHRwX3Byb2Nlc3NfdHMocGYpO1xuIFxuLVx0XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYpKSB7XG4rXHRcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcbiBcdFx0XHQvKiBQcm9jZXNzIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMuIElmIHRoZXJlXG4gXHRcdFx0ICogaXMgbW9yZSB3b3JrLCByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGFnYWluLlxuIFx0XHRcdCAqL1xuQEAgLTI4MjksNyArMjkwNSw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuLVx0aW50IHJldDtcbiBcbiBcdGlmICghcGYtXHUwMDNlcHRwLnBvcnQudHguaGFzX3JlYWR5X2JpdG1hcClcbiBcdFx0cmV0dXJuO1xuQEAgLTI4MzcsMTEgKzI5MTIsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX21heWJlX3RyaWdnZXJfdHhfaW50ZXJydXB0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWYgKCFpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2RiZyhkZXYsIFwiUFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcblwiLFxuLVx0XHRcdHJldCk7XG4tXHR9IGVsc2UgaWYgKHJldCkge1xuK1x0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCBmYWxzZSkgfHxcbitcdCAgICBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodykpIHtcbiBcdFx0ZGV2X2RiZyhkZXYsIFwiUFRQIHBlcmlvZGljIHRhc2sgZGV0ZWN0ZWQgd2FpdGluZyB0aW1lc3RhbXBzLiBUcmlnZ2VyaW5nIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbm93LlxcblwiKTtcbiBcbiBcdFx0d3IzMihodywgUEZJTlRfT0lDUiwgUEZJTlRfT0lDUl9UU1lOX1RYX00pO1xuQEAgLTI4OTAsMTQgKzI5NjIsMTYgQEAgdm9pZCBpY2VfcHRwX3F1ZXVlX3dvcmsoc3RydWN0IGljZV9wZiAqcGYpXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsXG4gXHRcdFx0XHRcdGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIHtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuK1x0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdGxpc3RfZm9yX2VhY2goZW50cnksIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpIHtcbi1cdFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCA9IGxpc3RfZW50cnkoZW50cnksXG4tXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsXG4tXHRcdFx0XHRcdFx0ICAgICAgIGxpc3Rfbm9kZSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgaWNlX3BmICpwZWVyX3BmID0gcHRwX3BvcnRfdG9fcGYocG9ydCk7XG4gXG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbiBcdFx0aWYgKCFpY2VfaXNfcHJpbWFyeShcdTAwMjZwZWVyX3BmLVx1MDAzZWh3KSkge1xuIFx0XHRcdGlmIChyZWJ1aWxkKSB7XG4gXHRcdFx0XHQvKiBUT0RPOiBXaGVuIGltcGxlbWVudGluZyByZWJ1aWxkPXRydWU6XG5AQCAtMjkwOSw3ICsyOTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLFxuIFx0XHRcdFx0aWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZWVyX3BmLCByZXNldF90eXBlKTtcbiBcdFx0XHR9XG4gXHRcdH1cbitcbitcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0yOTM2LDYgKzMwMTQsMTQgQEAgdm9pZCBpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbiBcdGlmIChyZXNldF90eXBlID09IElDRV9SRVNFVF9QRlIpXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIENhbmNlbCB0aGUgb2Zmc2V0IHZlcmlmaWNhdGlvbiB3b3JrIGZvciBFODJ4IGJlZm9yZSByZWxlYXNpbmcgdGhlXG4rXHQgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWVcbitcdCAqIHNpZGViYW5kIHF1ZXVlIGNvbW1hbmRzIHRoYXQgd2lsbCBmYWlsIG9yIHRpbWVvdXQsIGFuZCBtYXlcbitcdCAqIHJlZmVyZW5jZSBzdGF0ZSB0aGF0IGlzIGJlaW5nIHRvcm4gZG93bi5cbitcdCAqL1xuK1x0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQylcbitcdFx0a3RocmVhZF9jYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHRwLVx1MDAzZXBvcnQub3Zfd29yayk7XG4rXG4gXHRpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpIFx1MDAyNlx1MDAyNiBody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbiBcdFx0aWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHBmLCBmYWxzZSwgcmVzZXRfdHlwZSk7XG4gXG5AQCAtMzA4NiwxMSArMzE3MiwxMSBAQCBzdGF0aWMgaW50IGljZV9wdHBfc2V0dXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdGtyZWZfaW5pdChcdTAwMjZwdHAtXHUwMDNlcG9ydC5yZWYpO1xuIFxuLVx0bGlzdF9hZGQoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlLFxuLVx0XHQgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cyk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdHNwaW5fbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1x0bGlzdF9hZGRfcmN1KFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4gXG4gXHQvKiBTZWVkIHRoZSBwZXItUEhZIFR4IHJlZmVyZW5jZSBjbG9jayB1c2FnZSBtYXAgZm9yIHRoaXMgcG9ydC5cbiBcdCAqIE9ubHkgbWVhbmluZ2Z1bCBvbiBFODI1IChvdGhlciBNQUMgdHlwZXMgZG9uJ3QgZXhwb3NlIHR4LWNsa1xuQEAgLTMxMTMsMTIgKzMxOTksMzIgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHN0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gXHUwMDI2cGYtXHUwMDNlcHRwO1xuK1x0c3RydWN0IGtyZWYgKnJlZjtcbiBcbi1cdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSAhPSBJQ0VfTUFDX1VOS05PV04pIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0XHRsaXN0X2RlbChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdH1cbitcdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmdcbitcdCAqIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgdG8gdGhlIFBUUCBwb3J0LiBUbyBtYWtlIHN1cmUgdGhpcyBpcyB0cnVlLFxuK1x0ICogZmlyc3QgcmVtb3ZlIHRoZSBwb3J0IGZyb20gdGhlIGxpc3QsIHRoZW4gZHJvcCB0aGUgcHJpbWFyeVxuK1x0ICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGxcbitcdCAqIGV4aXN0aW5nIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIEZpbmFsbHksIHN5bmNocm9uaXplX3JjdSgpIHRvXG4rXHQgKiBlbnN1cmUgdGhhdCBhbGwgUkNVIGNyaXRpY2FsIHNlY3Rpb25zIHRoYXQgbWlnaHQgYXR0ZW1wdCB0b1xuK1x0ICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLlxuK1x0ICovXG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdGxpc3RfZGVsX3JjdShcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcbitcdHJlZiA9IFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnJlZjtcbitcdGtyZWZfcHV0KHJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbitcbitcdGRldl9XQVJOX09OQ0UoaWNlX3BmX3RvX2RldihwZiksXG4rXHRcdCAgICAgICF3YWl0X3Zhcl9ldmVudF90aW1lb3V0KHJlZiwgIWtyZWZfcmVhZChyZWYpLCAxNSAqIEhaKSxcbitcdFx0ICAgICAgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcG9ydCByZWZlcmVuY2VzIHRvIHJlbGVhc2UuIENvbnRpbnVpbmcgdG8gdW5sb2FkIGFueXdheXMuXCIpO1xuK1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4gfVxuIFxuIC8qKlxuQEAgLTMyMTAsOSArMzMxNiwxMyBAQCBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF9vd25lcihzdHJ1Y3QgaWNlX3BmICpwZilcbiB9XG4gXG4gLyoqXG4tICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIFBUUCB3b3JrIHRocmVhZHNcbisgKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgdGhlIFBUUCBrd29ya2VyXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuICAqIEBwdHA6IFBGIFBUUCBzdHJ1Y3R1cmVcbisgKlxuKyAqIEFsbG9jYXRlIHRoZSBrd29ya2VyIGFuZCBpbml0aWFsaXplIHRoZSBwZXJpb2RpYyB3b3JrIGZ1bmN0aW9uLiBUaGVcbisgKiBwZXJpb2RpYyB3b3JrIGlzIG5vdCBxdWV1ZWQgaGVyZTsgdGhlIGNhbGxlciBzdGFydHMgaXQgb25jZSB0aGUgUFRQXG4rICogc3RhdGUgaXMgSUNFX1BUUF9SRUFEWS5cbiAgKi9cbiBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKVxuIHtcbkBAIC0zMjMxLDkgKzMzNDEsNiBAQCBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKVxuIFxuIFx0cHRwLVx1MDAzZWt3b3JrZXIgPSBrd29ya2VyO1xuIFxuLVx0LyogU3RhcnQgcGVyaW9kaWMgd29yayBnb2luZyAqL1xuLVx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocHRwLVx1MDAzZWt3b3JrZXIsIFx1MDAyNnB0cC1cdTAwM2V3b3JrLCAwKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMzU1LDYgKzM0NjIsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jbGVhbl9wZjtcbiBcbitcdC8qIFNlZWQgbGlua191cCBmcm9tIGN1cnJlbnQgUEhZIHN0YXR1cywgc2luY2UgbGluayBtYXkgYWxyZWFkeSBiZSB1cFxuK1x0ICogKGUuZy4gYWZ0ZXIgUFhFIGJvb3QpIHdpdGggbm8gbGluay1jaGFuZ2UgZWRnZSB0byBjYXRjaCBpdCBsYXRlci5cbitcdCAqL1xuK1x0aWYgKHBmLVx1MDAzZWh3LnBvcnRfaW5mbylcbitcdFx0cHRwLVx1MDAzZXBvcnQubGlua191cCA9XG4rXHRcdFx0ISEocGYtXHUwMDNlaHcucG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFx1MDAyNlxuK1x0XHRcdElDRV9BUV9MSU5LX1VQKTtcbitcbitcdC8qIENyZWF0ZSB0aGUga3dvcmtlciBiZWZvcmUgcmVzdGFydGluZyB0aGUgUEhZLCB3aGljaCBxdWV1ZXMgd29yayBvblxuK1x0ICogaXQgaW4gdGhlIEU4MnggcmVzdGFydCBwYXRoLiBUaGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgbGluayBldmVudHNcbitcdCAqIGZyb20gcmVhY2hpbmcgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KCkgd2hpbGUga3dvcmtlciBpcyBzdGlsbCBOVUxMXG4rXHQgKi9cbitcdGVyciA9IGljZV9wdHBfaW5pdF93b3JrKHBmLCBwdHApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZXhpdDtcbitcbiBcdC8qIFN0YXJ0IHRoZSBQSFkgdGltZXN0YW1waW5nIGJsb2NrICovXG4gXHRpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpO1xuIFxuQEAgLTMzNjMsOSArMzQ4NiwxMCBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdHB0cC1cdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XG4gXG4tXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX2V4aXQ7XG4rXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIG9ubHkgYWZ0ZXIgdGhlIHN0YXRlIGlzIFJFQURZOyB0aGUgd29ya2VyXG4rXHQgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuXG4rXHQgKi9cbitcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC1cdTAwM2Vrd29ya2VyLCBcdTAwMjZwdHAtXHUwMDNld29yaywgMCk7XG4gXG4gXHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJQVFAgaW5pdCBzdWNjZXNzZnVsXFxuXCIpO1xuIFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG5pbmRleCBjNGIwZGE3Y2UyMGVkLi4xMzE1OGE5MzE5ZmI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuQEAgLTUsNiArNSw4IEBAXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaWNlX3B0cF9ody5oXCJcbkBAIC0xMzAsNiArMTMyLDkgQEAgc3RydWN0IGljZV9wdHBfdHgge1xuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFx0XHQxNlxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcdFx0XHQ2NFxuIFxuKy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzdGFtcCBpbmRleGVzIGFjcm9zcyBhbGwgZGV2aWNlcyAqL1xuKyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVFxuK1xuIC8qKlxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcbiAgKlxuQEAgLTEzOCw2ICsxNDMsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0J3MgUEhZIG9mZnNldCBpcyB2YWxpZC5cbiAgKlxuICAqIEBsaXN0X25vZGU6IGxpc3QgbWVtYmVyIHN0cnVjdHVyZVxuKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcbiAgKiBAdHg6IFR4IHRpbWVzdGFtcCB0cmFja2luZyBmb3IgdGhpcyBwb3J0XG4gICogQG92X3dvcms6IGRlbGF5ZWQgd29yayB0YXNrIGZvciB0cmFja2luZyB3aGVuIFBIWSBvZmZzZXQgaXMgdmFsaWRcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXG5AQCAtMTQ5LDYgKzE1NSw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcbiAgKi9cbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlO1xuK1x0c3RydWN0IGtyZWYgcmVmO1xuIFx0c3RydWN0IGljZV9wdHBfdHggdHg7XG4gXHRzdHJ1Y3Qga3RocmVhZF9kZWxheWVkX3dvcmsgb3Zfd29yaztcbiBcdHN0cnVjdCBtdXRleCBwc19sb2NrOyAvKiBwcm90ZWN0cyBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlICovXG5AQCAtMzEyLDcgKzMxOSw3IEBAIHZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeCk7XG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcbiB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpO1xuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xuK2Jvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKTtcbiB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuIFxuQEAgLTM2MCw3ICszNjcsOCBAQCBzdGF0aWMgaW5saW5lIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpXG4rc3RhdGljIGlubGluZSBib29sXG4raWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbmluZGV4IDNhNDFjNzExZTc1MWIuLjEwZTk3Mzg3NjYwOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5AQCAtNzM3LDI0ICs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcbiBcdHJldHVybiBpY2VfcmVhZF9wb3J0X2V0aDU2ZyhodywgcG9ydCwgb2Zmc2V0LCB2YWwsIEVUSDU2R19QSFlfTUVNX1BUUCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvblxuLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4tICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGJlIHJlYWRcbi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlXG4tICogQHZhbDogUG9pbnRlciB0byB0aGUgdmFsdWUgdG8gcmVhZCAob3V0IHBhcmFtKVxuLSAqXG4tICogUmV0dXJuOlxuLSAqICogJTAgICAgICAtIHN1Y2Nlc3Ncbi0gKiAqICVFSU5WQUwgLSBpbnZhbGlkIHBvcnQgbnVtYmVyIG9yIHJlc291cmNlIHR5cGVcbi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZXG4tICovXG4tc3RhdGljIGludCBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgb2Zmc2V0LFxuLVx0XHRcdFx0ICAgICB1MzIgdmFsKVxuLXtcbi1cdHJldHVybiBpY2Vfd3JpdGVfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApO1xuLX1cbi1cbiAvKipcbiAgKiBpY2Vfd3JpdGVfcXVhZF9wdHBfcmVnX2V0aDU2ZyAtIFdyaXRlIGEgUEhZIHF1YWQgcmVnaXN0ZXJcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuQEAgLTExMzksOCArMTEyMSw4IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCxcbiAgKiBpbnRlcm5hbCBQSFlzIG9mIHRoZSA1NkcgZGV2aWNlcy5cbiAgKlxuICAqIFRvIGRpcmVjdGx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgdGltZXN0YW1wIGJsb2NrIGVudGlyZWx5LCBkaXNjYXJkaW5nXG4tICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHVzZVxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXG4rICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHBlcmZvcm0gYSBQSFkgc29mdFxuKyAqIHJlc2V0IHZpYSBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYW4gaWR4IHdob3NlIGJpdCBpcyBzZXQgYWNjb3JkaW5nIHRvXG4gICogaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KCkuXG5AQCAtMTE1MiwxMSArMTEzNCwxMSBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXG4gc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcbiB7XG4gXHR1NjQgdW51c2VkX3RzdGFtcDtcbi1cdHUxNiBsb19hZGRyO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIFJlYWQgdGhlIHRpbWVzdGFtcCByZWdpc3RlciB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcCBzdGF0dXMgYml0IGlzXG4tXHQgKiBjbGVhcmVkLlxuK1x0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XG4rXHQgKiBjbGVhcnMgdGhlIGVudHJ5J3MgdmFsaWQgYml0IGFuZCBpdHMgY29ycmVzcG9uZGluZyAocmVhZC1vbmx5KVxuK1x0ICogdHNfbWVtb3J5X3N0YXR1cyBiaXQuXG4gXHQgKi9cbiBcdGVyciA9IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgsIFx1MDAyNnVudXNlZF90c3RhbXApO1xuIFx0aWYgKGVycikge1xuQEAgLTExNjQsMzIgKzExNDYsNDAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcbiBcdFx0XHQgIHBvcnQsIGlkeCwgZXJyKTtcbiBcdH1cbiBcbi1cdGxvX2FkZHIgPSAodTE2KVBIWV9UU1RBTVBfTChpZHgpO1xuLVxuLVx0ZXJyID0gaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhodywgcG9ydCwgbG9fYWRkciwgMCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwiRmFpbGVkIHRvIGNsZWFyIGxvdyBQVFAgdGltZXN0YW1wIHJlZ2lzdGVyIGZvciBwb3J0ICV1LCBpZHggJXUsIGVyciAlZFxcblwiLFxuLVx0XHRcdCAgcG9ydCwgaWR4LCBlcnIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyAtIENsZWFyIGFsbCB0aW1lc3RhbXBzIGZyb20gdGhlIHBvcnQgYmxvY2tcbisgKiBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnIC0gUmVzZXQgb25lIHBvcnQncyBUeCB0aW1lc3RhbXAgbWVtb3J5XG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbisgKiBAcG9ydDogcG9ydCBudW1iZXIgdG8gY2xlYXJcbisgKlxuKyAqIEZ1bGx5IHJlc2V0IGEgc2luZ2xlIFBIWSBwb3J0J3MgVHggdGltZXN0YW1wIG1lbW9yeS4gUGVyIHRoZSBQSFkgc3BlYywgdGhlXG4rICogb25seSB3YXkgdG8gY2xlYXIgYSB0aW1lc3RhbXAgdmFsaWQgYml0IChhbmQgaXRzIHJlYWQtb25seSB0c19tZW1vcnlfc3RhdHVzXG4rICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGVcbisgKiBwb3J0ICh0d28gMzItYml0IHJlYWRzIGVhY2gpLiBUaGlzIGRpc2NhcmRzIGFsbCB0aW1lc3RhbXAgZGF0YSBvbiB0aGUgcG9ydCxcbisgKiBzbyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBmb3IgYSBmdWxsIHJlc2V0OyBjYWxsZXJzIHRoYXQgbXVzdCBwcmVzZXJ2ZVxuKyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS5cbisgKlxuKyAqIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCBhbiBpbnRlcm5hbCBIVyBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mXG4rICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGVcbisgKiBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpIHByb2NlZHVyZS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJuYWwgY291bnRlclxuKyAqIG1heSBiZWNvbWUgb3V0IG9mIHN5bmMgYW5kIHByZXZlbnQgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHRzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byByZWFkIHRoZSBQSFkuXG4gICovXG4tc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3KVxuK3N0YXRpYyBpbnQgaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgcG9ydDtcbitcdGludCBlcnIgPSAwO1xuK1x0dTggaWR4O1xuIFxuLVx0Zm9yIChwb3J0ID0gMDsgcG9ydCBcdTAwM2MgaHctXHUwMDNlcHRwLm51bV9scG9ydHM7IHBvcnQrKykge1xuLVx0XHRpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19MLFxuLVx0XHRcdFx0XHQgMCk7XG4tXHRcdGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX1UsXG4tXHRcdFx0XHRcdCAwKTtcbitcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBJTkRFWF9QRVJfUE9SVDsgaWR4KyspIHtcbitcdFx0ZXJyID0gaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjExNSwxMCArMjEwNSw2IEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9PRkZTRVRfUkVBRFksIDApO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbiBcdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19SWF9PRkZTRVRfUkVBRFksIDApO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yMTMzLDkgKzIxMTksMTEgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldClcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuICAqIEBwb3J0OiB0aGUgUEhZIHBvcnQgdG8gc3RhcnRcbiAgKlxuLSAqIFN0YXJ0IHRoZSBjbG9jayBvZiBhIFBIWSBwb3J0LiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvXG4tICogcmUtY2FsaWJyYXRlIFR4IGFuZCBSeCB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpc1xuLSAqIGluaXRpYWxpemVkIG9yIHdoZW4gbGluayBzcGVlZCBjaGFuZ2VzLlxuKyAqIFBlcmZvcm0gYSBQSFkgc29mdCByZXNldCBhbmQgdGhlbiBzdGFydCB0aGUgY2xvY2sgZm9yIHRoZSBQSFkgcG9ydC5cbisgKlxuKyAqIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8gcmUtY2FsaWJyYXRlIFR4IGFuZCBSeFxuKyAqIHRpbWVzdGFtcGluZyBvZmZzZXRzIHdoZW5ldmVyIHRoZSBjbG9jayB0aW1lIGlzIGluaXRpYWxpemVkIG9yIHdoZW4gbGlua1xuKyAqIHNwZWVkIGNoYW5nZXMuXG4gICpcbiAgKiBSZXR1cm46XG4gICogKiAlMCAgICAgLSBzdWNjZXNzXG5AQCAtMjE1MSw2ICsyMTM5LDEwIEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydClcbiBcbiBcdHRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpO1xuIFxuK1x0ZXJyID0gaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoaHcsIHBvcnQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdGVyciA9IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1NmcoaHcsIHBvcnQsIGZhbHNlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMjI5NCw2ICsyMjg2LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcbiAgKlxuICAqIFRyaWdnZXIgYSBzb2Z0IHJlc2V0IG9mIHRoZSBFVEg1NkcgUEhZIGJ5IHRvZ2dsaW5nIHRoZSBzb2Z0IHJlc2V0XG4gICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6XG4rICogICAwLiBSZWFkaW5nIGV2ZXJ5IHRpbWVzdGFtcCBtZW1vcnkgcmVnaXN0ZXIgdG8gY2xlYXIgaXRzIHZhbGlkIGJpdFxuICAqICAgMS4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0XG4gICogICAyLiBBc3NlcnRpbmcgdGhlIHNvZnQgcmVzZXQgYml0XG4gICogICAzLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQgYWdhaW5cbkBAIC0yMzAyLDYgKzIyOTUsMTIgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcbiAgKiB0byBzZXR0bGUuIFRoaXMgcHJvdmlkZXMgYSBjb250cm9sbGVkIHdheSB0byByZWluaXRpYWxpemUgdGhlIFBIWVxuICAqIHdpdGhvdXQgcmVxdWlyaW5nIGEgZnVsbCBkZXZpY2UgcmVzZXQuXG4gICpcbisgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGVcbisgKiBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMsIHJlYWQgZXZlcnkgdGltZXN0YW1wIGluZGV4IHByaW9yIHRvIHBlcmZvcm1pbmdcbisgKiB0aGUgc29mdCByZXNldC4gVGhlIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyByZWFkcyBlbnN1cmUgdGhhdCB0aGUgcmVnaW9uXG4rICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltc2V0YW1wXG4rICogY291bnRlciBpcyByZXNldCB0byB6ZXJvLlxuKyAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIHdoZW5cbiAgKiAgICAgICAgIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgUEhZIHJlZ2lzdGVyLlxuICAqL1xuQEAgLTIzMTAsNiArMjMwOSwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXHR1MzIgZ2xvYmFsX3ZhbDtcbiBcdGludCBlcnI7XG4gXG4rXHRlcnIgPSBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKGh3LCBwb3J0KTtcbitcdGlmIChlcnIpIHtcbitcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcXG5cIixcbitcdFx0XHQgIHBvcnQsIGVycik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRlcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsIFx1MDAyNmdsb2JhbF92YWwpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcIkZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcXG5cIixcbkBAIC01ODAxLDggKzU4MDcsOSBAQCB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5KHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9lODJ4KGh3KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxuLVx0XHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpO1xuLVx0XHRicmVhaztcbitcdFx0LyogRTgyNSBoYXJkd2FyZSBtdXN0IG9ubHkgcmVzZXQgdGltZXN0YW1wIG1lbW9yeSBhcyBwYXJ0IG9mXG4rXHRcdCAqIHRoZSBzb2Z0IHJlc2V0IHByb2NlZHVyZS5cbitcdFx0ICovXG4gXHRjYXNlIElDRV9NQUNfRTgxMDpcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjA5OjQwLjEzNDQ2NzcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExOTIwNjk4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGljZWAgUFRQIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgYGljZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEludGVsJ3MgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlcnMuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIHByZXR0eSBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHJld29ya2luZyB0aGUgbG9ja2luZyBzdHJhdGVneSB3aXRoaW4gdGhlIGRyaXZlciwgc2hpZnRpbmcgZnJvbSBtdXRleGVzIHRvIHNwaW5sb2NrcyBpbiBzb21lIGFyZWFzLCBhbmQgbWFraW5nIGhlYXZ5IHVzZSBvZiBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBwb3J0cywgcGFydGljdWxhcmx5IGluIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggVFggdGltZXN0YW1wcy4gVGhleSd2ZSBhbHNvIGFkZGVkIGEgd2FpdCBmdW5jdGlvbiB0byBkcmFpbiBpbi1mbGlnaHQgdGltZXN0YW1wcy4gVGhlcmUncyBhbHNvIHNvbWUgUEhZIHJlc3RhcnQgbG9naWMgYmVpbmcgaGFuZGxlZCBoZXJlLiBUaGVyZSdzIHNvbWUgY2hhbmdlcyB0byB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uXG5cblRoZSBjb2RlIG1vZGlmaWVzIHRoZSB0aW1lc3RhbXBpbmcgbG9naWMsIGxvY2tpbmcgbWVjaGFuaXNtcyAobXV0ZXggdG8gc3BpbmxvY2svUkNVKSwgYW5kIFBIWSByZXNldCBsb2dpYy5cblxuTXkgaW5pdGlhbCBjb25jZXJuIGlzbid0IGFib3V0IHRoZSAqZnVuY3Rpb25hbGl0eSogb2YgdGhlIGNoYW5nZXMsIGJ1dCB3aGV0aGVyIHRoaXMgY29uc3RpdHV0ZXMgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBwcm9tcHQgc2F5cyBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbkdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBwcmV0dHkgY2VydGFpbiB0aGF0IHRoZSBgaWNlYCBkcml2ZXIsIHdoaWNoIGlzIHNwZWNpZmljIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcywgaXMgKm5vdCogdHlwaWNhbGx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCBsaWtlIHRoZSBgZTEwMDBgLCBgZTEwMDBlYCwgb3IgYGlnYmAgZHJpdmVycywgd2hpY2ggYXJlIGNvbW1vbmx5IGVtdWxhdGVkLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGBpY2VgIGRyaXZlciBtaWdodCBiZSBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZS5cblxuU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggY291bGQgcG90ZW50aWFsbHkgYmUgcmVhY2hlZCBieSBhIGZ1enplciAqZXZlbiBpZiogaXQgaXMgbm90IGVtdWxhdGVkLiBTeXprYWxsZXIsIGluIG15IGV4cGVyaWVuY2UsIGhhcyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMsIGluY2x1ZGluZyBzb21lIHBzZXVkby1zeXNjYWxscyB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIFBDSSBkZXZpY2VzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBmdXp6aW5nIGRlcHRoIHJlYWNoIGludG8gdGhlIGludHJpY2FjaWVzIG9mIFBUUCBsb2dpYyB3aXRoaW4gdGhlIGBpY2VgIGRyaXZlcj8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciB0aGUgYGljZWAgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjA5OjUxLjMyNjUzOTk2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4NTczNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3B0cF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI2MDQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZT00Nz1pY2UtJChDT05GSUdfUENJX0lPVikgKz1cXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNTYtXFx0aWNlX3ZmX2xpYi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjU3OmljZS0kKENPTkZJR19QVFBfMTU4OF9DTE9DSykgKz0gaWNlX3B0cC5vIGljZV9wdHBfaHcubyBpY2VfZHBsbC5vIGljZV90c3BsbC5vIGljZV9jcGkubyBpY2VfdHhjbGsub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZS01OC1pY2UtJChDT05GSUdfRENCKSArPSBpY2VfZGNiLm8gaWNlX2RjYl9ubC5vIGljZV9kY2JfbGliLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaD02OTU9c3RhdGljIGlubGluZSBib29sIGljZV92ZWN0b3JfY2hfZW5hYmxlZChzdHJ1Y3QgaWNlX3FfdmVjdG9yICpxdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC03MDAtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oOjcwMTogKiBpY2VfcHRwX3BmX2hhbmRsZXNfdHhfaW50ZXJydXB0IC0gQ2hlY2sgaWYgUEYgaGFuZGxlcyBUeCBpbnRlcnJ1cHRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgtNzAyLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC03MDYtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oOjcwNzpzdGF0aWMgaW5saW5lIGJvb2wgaWNlX3B0cF9wZl9oYW5kbGVzX3R4X2ludGVycnVwdChzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgtNzA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtNy0jaW5jbHVkZSBcXFwiaWNlX2Zsb3cuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjg6I2luY2x1ZGUgXFxcImljZV9wdHBfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhY2tpbmcuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY3BpLmMtNS0jaW5jbHVkZSBcXFwiaWNlX2NvbW1vbi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY3BpLmM6NjojaW5jbHVkZSBcXFwiaWNlX3B0cF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY3BpLmMtNy0jaW5jbHVkZSBcXFwiaWNlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5oLTctI2luY2x1ZGUgXFxcImljZV90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jcGkuaDo4OiNpbmNsdWRlIFxcXCJpY2VfcHRwX2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jcGkuaC05LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDg3OT1zdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MjUoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODg2LVxcdCAqIG90aGVyd2lzZSB1c2Vyc3BhY2UgY2FuIHRyaWdnZXIgZGl2LWJ5LXplcm8gaW4gaWNlX3R4Y2xrX3NldF9jbGsoKS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODg3OlxcdCAqIFdoZW4gUFRQIGlzIHN1cHBvcnRlZCwgaWNlX3B0cF9pbml0KCkgaGFuZGxlcyB0aGlzLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4ODgtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDg4OS1cXHRpZiAoIXRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVxcdTAwM2VmbGFncykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODkwOlxcdFxcdGljZV9wdHBfaW5pdF9odyhcXHUwMDI2cGYtXFx1MDAzZWh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODkxLVxcdFxcdGlmIChwZi1cXHUwMDNlaHcubGFuZV9udW0gXFx1MDAzZT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jPTM3NTk9aWNlX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMtMzc3MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYzozNzcyOlxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IGljZV9wdHBfY2xvY2tfaW5kZXgocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTM3NzMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MzY9aWNlX3ByZXBhcmVfZm9yX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTYxMC1cXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUFRQX1NVUFBPUlRFRCwgcGYtXFx1MDAzZWZsYWdzKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo2MTE6XFx0XFx0aWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZiwgcmVzZXRfdHlwZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNjEyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MTEwMz1pY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xMTUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjExNTQ6XFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgbGlua191cCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTE1NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTMwNjA9c3RhdGljIGlycXJldHVybl90IGljZV9sbF90c19pbnRyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA2My1cXHR1MzIgcGZfaW50cl9zdGFydF9vZmZzZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MzA2NDpcXHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA2NS1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA3My1cXHRpZiAodHgtXFx1MDAzZWluaXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMDc0OlxcdFxcdGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcCh0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA3NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMwNzgtXFx0XFx0aWYgKGlkeCAhPSB0eC1cXHUwMDNlbGVuKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMwNzk6XFx0XFx0XFx0aWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcCh0eCwgaWR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMDgwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTMwOTc9c3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHIoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMxODM6XFx0XFx0cmV0ID0gaWNlX3B0cF90c19pcnEocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMxODQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzE5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMTk5OlxcdFxcdFxcdGljZV9wdHBfZXh0dHNfZXZlbnQocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMyMDAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MzIzND1zdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21pc2NfaW50cl90aHJlYWRfZm4oaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMjQ0LVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUNFX01JU0NfVEhSRUFEX1RYX1RTVEFNUCwgcGYtXFx1MDAzZW1pc2NfdGhyZWFkKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMjQ1OlxcdFxcdGljZV9wdHBfcHJvY2Vzc190cyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzI0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMyNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MzI1MTpcXHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzI1Mi1cXHRcXHQvKiBJZiBhbnkgbmV3IFR4IHRpbWVzdGFtcHMgaGFwcGVuZWQgd2hpbGUgaW4gaW50ZXJydXB0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDA2ND1pbnQgaWNlX3ZzaV9yZWNmZ19xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBpbnQgbmV3X3J4LCBpbnQgbmV3X3R4LCBib29sIGxvY2tlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQxMTEtXFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDExMjpcXHRcXHRpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQxMTMtXFx0Z290byBkb25lO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDcyMT1zdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ3MjktXFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDczMDpcXHRcXHRpY2VfcHRwX2luaXQocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ3MzEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00NzU3PXN0YXRpYyB2b2lkIGljZV9kZWluaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzY4LVxcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ3Njk6XFx0XFx0aWNlX3B0cF9yZWxlYXNlKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzcwLVxcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cXHUwMDNlZmxhZ3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NzY0NT1zdGF0aWMgdm9pZCBpY2VfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NzUwLVxcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjc3NTE6XFx0XFx0aWNlX3B0cF9yZWJ1aWxkKHBmLCByZXNldF90eXBlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NzUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgwMC1cXHRcXHRpZiAocGYtXFx1MDAzZXB0cC5wb3J0LmxpbmtfdXAgIT0gbGlua191cClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3ODAxOlxcdFxcdFxcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc4MDItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgyMy1cXHQvKiBSZXN0b3JlIHRpbWVzdGFtcCBtb2RlIHNldHRpbmdzIGFmdGVyIFZTSSByZWJ1aWxkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NzgyNDpcXHRpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc4MjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgyNi1cXHQvKiBTdGFydCBQVFAgcGVyaW9kaWMgd29yayBhZnRlciBWU0kgaXMgZnVsbHkgcmVidWlsdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjc4Mjc6XFx0aWNlX3B0cF9xdWV1ZV93b3JrKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03ODI4LVxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTk3OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpY2VfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTk4MjktXFx0Lm5kb194c2tfd2FrZXVwID0gaWNlX3hza193YWtldXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6OTgzMDpcXHQubmRvX2h3dHN0YW1wX2dldCA9IGljZV9wdHBfaHd0c3RhbXBfZ2V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjk4MzE6XFx0Lm5kb19od3RzdGFtcF9zZXQgPSBpY2VfcHRwX2h3dHN0YW1wX3NldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy05ODMyLX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTExPXN0YXRpYyBjb25zdCBjaGFyIGljZV9waW5fbmFtZXNbXVs2NF0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjA6c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfcHRwX3Bpbl9kZXNjIGljZV9waW5fZGVzY19lODJ4W10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMS1cXHQvKiBuYW1lLCAgICAgICAgZ3BpbywgICAgICAgZGVsYXkgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2U4MjVjW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNy1cXHQvKiBuYW1lLCAgICAgICAgZ3BpbywgICAgICAgZGVsYXkgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozNjpzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2U4MTBbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM3LVxcdC8qIG5hbWUsICAgICAgICBncGlvLCAgICAgICBkZWxheSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz00NT1zdGF0aWMgY29uc3QgY2hhciBpY2VfcGluX25hbWVzX2RwbGxbXVs2NF0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTI6c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfcHRwX3Bpbl9kZXNjIGljZV9waW5fZGVzY19kcGxsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy01My1cXHQvKiBuYW1lLCAgIGdwaW8sICAgICAgIGRlbGF5ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTYwPXN0YXRpYyBzdHJ1Y3QgaWNlX3B0cCAqaWNlX2dldF9jdHJsX3B0cChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2ODogKiBpY2VfcHRwX2ZpbmRfcGluX2lkeCAtIEZpbmQgcGluIGluZGV4IGluIHB0cF9waW5fZGVzY1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjktICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03NC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjc1OnN0YXRpYyBpbnQgaWNlX3B0cF9maW5kX3Bpbl9pZHgoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gcHRwX3Bpbl9mdW5jdGlvbiBmdW5jLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzYtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTE6ICogaWNlX3B0cF9jZmdfdHhfaW50ZXJydXB0IC0gQ29uZmlndXJlIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgZm9yIHRoZSBkZXZpY2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkyLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTYtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5NzpzdGF0aWMgdm9pZCBpY2VfcHRwX2NmZ190eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTEzND1zdGF0aWMgdm9pZCBpY2Vfc2V0X3J4X3RzdGFtcChzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBvbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTUxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTUyOiAqIGljZV9wdHBfZGlzYWJsZV90aW1lc3RhbXBfbW9kZSAtIERpc2FibGUgY3VycmVudCB0aW1lc3RhbXAgbW9kZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTUzLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTU4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTU5OnN0YXRpYyB2b2lkIGljZV9wdHBfZGlzYWJsZV90aW1lc3RhbXBfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE3MS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjE3MjogKiBpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUgLSBSZXN0b3JlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNzMtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNzctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxNzg6dm9pZCBpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNzkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxODM6XFx0aWNlX3B0cF9jZmdfdHhfaW50ZXJydXB0KHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTk1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTk2OiAqIGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyAtIFJlYWQgdGhlIHNvdXJjZSBjbG9jayByZWdpc3RlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTk3LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjAwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjAxOnU2NCBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcoc3RydWN0IGljZV9wZiAqcGYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjQ2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjQ3OiAqIGljZV9wdHBfZXh0ZW5kXzMyYl90cyAtIENvbnZlcnQgYSAzMmIgbmFub3NlY29uZHMgdGltZXN0YW1wIHRvIDY0YlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjQ4LSAqIEBjYWNoZWRfcGhjX3RpbWU6IHJlY2VudGx5IGNhY2hlZCBjb3B5IG9mIFBIQyB0aW1lXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI4My0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI4NDpzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzMyYl90cyh1NjQgY2FjaGVkX3BoY190aW1lLCB1MzIgaW5fdHN0YW1wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzEzLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzE0OiAqIGljZV9wdHBfZXh0ZW5kXzQwYl90cyAtIENvbnZlcnQgYSA0MGIgdGltZXN0YW1wIHRvIDY0YiBuYW5vc2Vjb25kc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzE1LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzM1LSAqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozMzY6ICogU2VlIGljZV9wdHBfZXh0ZW5kXzMyYl90cyBmb3IgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiB0aGUgZXh0ZW5zaW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zMzctICogYWxnb3JpdGhtLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzM4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzM5OnN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzUwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzUxOlxcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoUkVBRF9PTkNFKHBmLVxcdTAwM2VwdHAuY2FjaGVkX3BoY190aW1lKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM1Mi1cXHRcXHRcXHRcXHQgICAgIChpbl90c3RhbXAgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiBtYXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzU1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzU2OiAqIGljZV9wdHBfaXNfdHhfdHJhY2tlcl91cCAtIENoZWNrIGlmIFR4IHRyYWNrZXIgaXMgcmVhZHkgZm9yIG5ldyB0aW1lc3RhbXBzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zNTctICogQHR4OiB0aGUgUFRQIFR4IHRpbWVzdGFtcCB0cmFja2VyIHRvIGNoZWNrXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTM2ND1zdGF0aWMgYm9vbFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzY1OmljZV9wdHBfaXNfdHhfdHJhY2tlcl91cChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zNjYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzY3OlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM2ODpcXHRcXHRjb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM2OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzc1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6Mzc2OiAqIGljZV9wdHBfcmVxX3R4X3NpbmdsZV90c3RhbXAgLSBSZXF1ZXN0IFR4IHRpbWVzdGFtcCBmb3IgYSBwb3J0IGZyb20gRldcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM3Ny0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzc5LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzgwOnZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM4MS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zODItXFx0c3RydWN0IGljZV9lODEwX3BhcmFtcyAqcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzgzOlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzg0LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM5MTpcXHRwdHBfcG9ydCA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGljZV9wdHBfcG9ydCwgdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzkyLVxcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00MjMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo0MjQ6ICogaWNlX3B0cF9jb21wbGV0ZV90eF9zaW5nbGVfdHN0YW1wIC0gQ29tcGxldGUgVHggdGltZXN0YW1wIGZvciBhIHBvcnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQyNS0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQyNi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjQyNzp2b2lkIGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00Mjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00MzEtXFx0c3RydWN0IGljZV9lODEwX3BhcmFtcyAqcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NDMyOlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDMzLVxcdHU2NCByYXdfdHN0YW1wLCB0c3RhbXA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQ0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjQ0NDpcXHRwdHBfcG9ydCA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGljZV9wdHBfcG9ydCwgdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDQ1LVxcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00OTktXFx0LyogRXh0ZW5kIHRoZSB0aW1lc3RhbXAgdXNpbmcgY2FjaGVkIFBIQyB0aW1lICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1MDA6XFx0dHN0YW1wID0gaWNlX3B0cF9leHRlbmRfNDBiX3RzKHBmLCByYXdfdHN0YW1wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUwMS1cXHRpZiAodHN0YW1wKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxMy0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjUxNDogKiBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wIC0gUHJvY2VzcyBUeCB0aW1lc3RhbXBzIGZvciBhIHBvcnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxNS0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTYwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTYxOnN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTYyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjU2MzpcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTU2NC1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy01NzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1NzI6XFx0cHRwX3BvcnQgPSBjb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTU3My1cXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHB0cF9wb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjc2LVxcdFxcdC8qIEV4dGVuZCB0aGUgdGltZXN0YW1wIHVzaW5nIGNhY2hlZCBQSEMgdGltZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6Njc3OlxcdFxcdHRzdGFtcCA9IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhwZiwgcmF3X3RzdGFtcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02NzgtXFx0XFx0aWYgKHRzdGFtcCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2OTM6c3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2OTg6c3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTkte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzAwOlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcwMy1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzA0OlxcdFxcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFxcdTAwMjZwb3J0LVxcdTAwM2V0eDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcwNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzE0OlxcdFxcdGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAodHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzE2OlxcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MTctXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MjItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo3MjM6ICogaWNlX3B0cF9hbGxvY190eF90cmFja2VyIC0gSW5pdGlhbGl6ZSB0cmFja2luZyBmb3IgVHggdGltZXN0YW1wc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzI0LSAqIEB0eDogVHggdHJhY2tpbmcgc3RydWN0dXJlIHRvIGluaXRpYWxpemVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzI2LSAqIEFzc3VtZXMgdGhhdCB0aGUgbGVuZ3RoIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuIERvIG5vdCBjYWxsIGRpcmVjdGx5LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzI3OiAqIHVzZSB0aGUgaWNlX3B0cF9pbml0X3R4XyogaW5zdGVhZC5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcyOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTcyOT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo3MzA6aWNlX3B0cF9hbGxvY190eF90cmFja2VyKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTczMS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTc1OD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzU5OmljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzg5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzkwOiAqIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlciAtIEZsdXNoIGFueSByZW1haW5pbmcgdGltZXN0YW1wcyBmcm9tIHRoZSB0cmFja2VyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03OTEtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz03OTY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjc5NzppY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTc5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTgwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjgwNTpcXHRpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4ocGYsIHR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTgwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODQxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6ODQyOiAqIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlIC0gTWFyayB1bmZpbmlzaGVkIHRpbWVzdGFtcHMgYXMgc3RhbGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg0My0gKiBAdHg6IHRoZSB0cmFja2VyIHRvIG1hcmtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9ODUwPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4NTE6aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODYwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6ODYxOiAqIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIgLSBGbHVzaCBhbGwgdGltZXN0YW1wIHRyYWNrZXJzIG9uIHRoaXMgY2xvY2tcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg2Mi0gKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTg2Nz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6ODY4OmljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04Njkte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6ODcwOlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NzEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg3Ni1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg3NzpcXHRcXHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocHRwX3BvcnRfdG9fcGYocG9ydCksIFxcdTAwMjZwb3J0LVxcdTAwM2V0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4Nzg6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg3OS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg4NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg4NTogKiBpY2VfcHRwX3JlbGVhc2VfdHhfdHJhY2tlciAtIFJlbGVhc2UgYWxsb2NhdGVkIG1lbW9yeSBmb3IgVHggdHJhY2tlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODg2LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9ODkxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4OTI6aWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg5My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjkwMzpcXHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocGYsIHR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTE3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTE4OiAqIGljZV9wdHBfaW5pdF90eF9lODJ4IC0gSW5pdGlhbGl6ZSB0cmFja2luZyBmb3IgVHggdGltZXN0YW1wc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTE5LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTI5LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTMwOnN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3R4X2U4Mngoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkzMS1cXHRcXHRcXHRcXHR1OCBwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5Mzg6XFx0cmV0dXJuIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcih0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05MzktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NDEtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5NDI6ICogaWNlX3B0cF9pbml0X3R4IC0gSW5pdGlhbGl6ZSB0cmFja2luZyBmb3IgVHggdGltZXN0YW1wc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTQzLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTUxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTUyOnN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3R4KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IHBvcnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5NjQ6XFx0cmV0dXJuIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcih0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5Njg6ICogaWNlX3B0cF91cGRhdGVfY2FjaGVkX3BoY3RpbWUgLSBVcGRhdGUgdGhlIGNhY2hlZCBQSEMgdGltZSB2YWx1ZXNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk2OS0gKiBAcGY6IEJvYXJkIHNwZWNpZmljIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk4My0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjk4NDpzdGF0aWMgaW50IGljZV9wdHBfdXBkYXRlX2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTAwMS1cXHQvKiBSZWFkIHRoZSBjdXJyZW50IFBIQyB0aW1lICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDAyOlxcdHN5c3RpbWUgPSBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcocGYsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTAwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTAzMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEwMzM6ICogaWNlX3B0cF9yZXNldF9jYWNoZWRfcGhjdGltZSAtIFJlc2V0IGNhY2hlZCBQSEMgdGltZSBhZnRlciBhbiB1cGRhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwMzQtICogQHBmOiBCb2FyZCBzcGVjaWZpYyBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDQ0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA0NTpzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA0Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNTItXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDUzOlxcdGVyciA9IGljZV9wdHBfdXBkYXRlX2NhY2hlZF9waGN0aW1lKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNTQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDY4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA2OTogKiBpY2VfcHRwX3dyaXRlX2luaXQgLSBTZXQgUEhDIHRpbWUgdG8gcHJvdmlkZWQgdmFsdWVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNzAtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDc0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA3NTpzdGF0aWMgaW50IGljZV9wdHBfd3JpdGVfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDgwOlxcdHJldHVybiBpY2VfcHRwX2luaXRfdGltZShodywgbnMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA4MS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwODMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDg0OiAqIGljZV9wdHBfd3JpdGVfYWRqIC0gQWRqdXN0IFBIQyBjbG9jayB0aW1lIGF0b21pY2FsbHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwODUtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDkwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA5MTpzdGF0aWMgaW50IGljZV9wdHBfd3JpdGVfYWRqKHN0cnVjdCBpY2VfcGYgKnBmLCBzMzIgYWRqKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDk1OlxcdHJldHVybiBpY2VfcHRwX2Fkal9jbG9jayhodywgYWRqKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwOTYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMTA3PXN0YXRpYyB1NjQgaWNlX2Jhc2VfaW5jdmFsKHN0cnVjdCBpY2VfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTIwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTEyMTogKiBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8gLSBDaGVjayB3aGV0aGVyIFR4IEZJRk8gaXMgaW4gYW4gT0sgc3RhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExMjItICogQHBvcnQ6IFBUUCBwb3J0IGZvciB3aGljaCBUeCBGSUZPIGlzIGNoZWNrZWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExMjMtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMTI0OnN0YXRpYyBpbnQgaWNlX3B0cF9jaGVja190eF9maWZvKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE3MS1cXHRcXHRcXHRwb3J0LVxcdTAwM2Vwb3J0X251bSwgcXVhZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMTcyOlxcdFxcdGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZTgyeChodywgcXVhZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTczLVxcdFxcdHBvcnQtXFx1MDAzZXR4X2ZpZm9fYnVzeV9jbnQgPSBGSUZPX09LO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTgwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE4MTogKiBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMgLSBDaGVjayBmb3IgdmFsaWQgVHggYW5kIFJ4IG9mZnNldHNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExODItICogQHdvcms6IFBvaW50ZXIgdG8gdGhlIGt0aHJlYWRfd29yayBzdHJ1Y3R1cmUgZm9yIHRoaXMgdGFza1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTk0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE5NTpzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExOTYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE5NzpcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE5OC1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjAzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTIwNDpcXHRwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpY2VfcHRwX3BvcnQsIG92X3dvcmsud29yayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjA1LVxcdHBmID0gcHRwX3BvcnRfdG9fcGYocG9ydCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyMTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMjE2OlxcdHR4X2VyciA9IGljZV9wdHBfY2hlY2tfdHhfZmlmbyhwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyMTctXFx0aWYgKCF0eF9lcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyNDUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMjQ2OiAqIGljZV9wdHBfcG9ydF9waHlfc3RvcCAtIFN0b3AgdGltZXN0YW1waW5nIGZvciBhIFBIWSBwb3J0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjQ3LSAqIEBwdHBfcG9ydDogUFRQIHBvcnQgdG8gc3RvcFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMjQ5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEyNTA6aWNlX3B0cF9wb3J0X3BoeV9zdG9wKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTI1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyODQtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMjg1OiAqIGljZV9wdHBfcG9ydF9waHlfcmVzdGFydCAtIChSZSlzdGFydCBhbmQgY2FsaWJyYXRlIFBIWSB0aW1lc3RhbXBpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyODYtICogQHB0cF9wb3J0OiBQVFAgcG9ydCBmb3Igd2hpY2ggdGhlIFBIWSBzdGFydCBpcyBzZXRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MTI5Mj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMjkzOmljZV9wdHBfcG9ydF9waHlfcmVzdGFydChzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyOTQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMzAxLVxcdGlmICghcHRwX3BvcnQtXFx1MDAzZWxpbmtfdXApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMzAyOlxcdFxcdHJldHVybiBpY2VfcHRwX3BvcnRfcGh5X3N0b3AocHRwX3BvcnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTMwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTMzMi1cXHRcXHQvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTMzMzpcXHRcXHQgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEzMzQtXFx0XFx0ICogdGhhdCB0aGUgVHggYW5kIFJ4IG9mZnNldCBjYWxpYnJhdGlvbiBoYXMgY29tcGxldGVkLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMzU5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTM2MDogKiBpY2VfcHRwX2xpbmtfY2hhbmdlIC0gUmVjb25maWd1cmUgUFRQIGFmdGVyIGxpbmsgc3RhdHVzIGNoYW5nZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTM2MS0gKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEzNjMtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMzY0OnZvaWQgaWNlX3B0cF9saW5rX2NoYW5nZShzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBsaW5rdXApXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjA5OjUxLjQzOTQwMTUxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjA4MjQ5MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBpY2UgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyB0YXJnZXRpbmcgdGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggSSBrbm93IGlzIGZvciBJbnRlbCdzIEU4MDAgc2VyaWVzIE5JQ3MuIFRoZSBwcm9ibGVtIGlzLCBRRU1VLCB3aGljaCBpcyBvdXIgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCwgZG9lc24ndCBlbXVsYXRlIHRoZSBFODAwIHNlcmllcy5cblxuSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyLCB3b25kZXJpbmcgaWYgaXQgY291bGQgc29tZWhvdyByZWFjaCBpbnRvIHRoZSBgaWNlYCBkcml2ZXIncyBQVFAgbG9naWMuICBJIHdhcyBnb2luZyB0byBzZWUgaWYgc3l6a2FsbGVyIGV2ZW4gaGFzIGFueSBkZXNjcmlwdGlvbnMgZm9yIGBpY2VgLCBidXQgdGhlbiBJIHNhdyB0aGF0IHRoZSB0b29scyBJIG5lZWQgKGByZWFkLXN5ei1zcGVjYCBhbmQgYHN5ei1ncmVwcGVyYCkgYXJlbid0IGFjdHVhbGx5IGF2YWlsYWJsZSB0byBtZSBoZXJlLiBJdCdzIGEgYml0IG9mIGEgcmVkIGhlcnJpbmcsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gdXNlIG90aGVyIHRvb2xzLlxuXG5UaGVuIEkgcmUtcmVhZCB0aGUgcHJvbXB0J3MgcnVsZXMgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCBzYXlzIHRvIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwYXRjaCBhZmZlY3RzIFwidmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgIEkgaW1tZWRpYXRlbHkgdGhvdWdodCB0aGF0IGBpY2VgIGNvdWxkIGJlIGEgU21hcnROSUMsIGJ1dCBhZnRlciBzb21lIHJlZmxlY3Rpb24gaXQncyBhIHN0YW5kYXJkIE5JQyB0aGF0IGp1c3QgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS5cblxuR2l2ZW4gdGhhdCBgaWNlYCBpcyBhbiBFdGhlcm5ldCBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBhbmQgaXNuJ3QgZW11bGF0ZWQgaW4gUUVNVSwgaXQgbmVjZXNzaXRhdGVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIFRoZSBwcm9tcHQgZ2l2ZXMgc29tZSBleGFtcGxlcyBvZiBzaW1pbGFyIGRyaXZlcnMsIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gYGljZWAgaXNuJ3QgbGlzdGVkLCBidXQgdGhlIGxvZ2ljIHN0aWxsIGFwcGxpZXM7IGBpY2VgIGlzbid0IGVtdWxhdGVkIGFuZCByZXF1aXJlcyBoYXJkd2FyZS5cblxuSSBrbm93IHN5emthbGxlciBkb2Vzbid0IGhhdmUgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgaGFyZHdhcmUuIEl0IHVzZXMgYGUxMDAwYCwgYGUxMDAwZWAsIGB2aXJ0aW8tbmV0YCwgZXRjLiAgU28sIGlmIGBpY2VgIGlzIG5vdCBlbXVsYXRlZCwgdGhlIGNvZGUgcGF0aHMgYXJlIHNpbXBseSBpbmFjY2Vzc2libGUgaW4gb3VyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIEkgY29uc2lkZXJlZCB0aGUgUENJIGZ1enplciBhZ2FpbiBidXQgcmVhbGl6ZWQgaXQncyB1bmxpa2VseSB0byByZWFjaCBkZWVwIGludG8gY29tcGxleCBkcml2ZXIgbG9naWMgbGlrZSB0aGlzLCBlc3BlY2lhbGx5IHRoZSBQVFAgdGltZXN0YW1waW5nLCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uLCBhbmQgbGluayBzdGF0ZSBjaGFuZ2UgYXNwZWN0cyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuXG5cblRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdG8gcmV0dXJuIGBmYWxzZWAgaWYgdGhlIHBhdGNoIG1vZGlmaWVzIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFNpbmNlIGBpY2VgIHJlcXVpcmVzIGEgcGh5c2ljYWwgUENJZSBjYXJkLCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZS5cblxuSSBhbHNvIGNoZWNrZWQgUUVNVSdzIHN1cHBvcnRlZCBuZXR3b3JrIGRldmljZXMgYW5kIGNvbmZpcm1lZCB0aGVyZSdzIG5vIGBpY2VgLCBgaTQwZWAsIG9yIGBpeGdiZWAgZW11bGF0aW9uLiBBbGwgb2YgdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCBkaXJlY3RvcnkuXG5cblRodXMsIHRoZSBwYXRjaCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSBgaWNlYCBkcml2ZXIsIGEgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IHN1cHBvcnRlZCBieSBzdGFuZGFyZCBRRU1VLiAgVGhlcmVmb3JlLCBJJ20gZ29pbmcgd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OTcsIk91dHB1dFRva2VucyI6OTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjEwOjA4LjA0NzY1MzE4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgUFRQIHRpbWVzdGFtcGluZyBhbmQgUEhZIG9mZnNldCBjYWxpYnJhdGlvbikgYXJlIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgUFRQIHRpbWVzdGFtcGluZyBhbmQgUEhZIG9mZnNldCBjYWxpYnJhdGlvbikgYXJlIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDE6MTA6MDguMDQ3Njc1NTY1WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8qzgt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 00:27:45 +0000 UTC FinishedAt: 2026-08-22 01:10:08 +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+CgkJCTx0ZD4yMDI2LzA4LzIyIDAxOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgUFRQIHRpbWVzdGFtcGluZyBhbmQgUEhZIG9mZnNldCBjYWxpYnJhdGlvbikgYXJlIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEwNmIwMDRkY2QwMzQ2YmFlNTdiYjc0ODhjN2U0NzExMTM4MDJmOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAwMTowOTozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG5pbmRleCAyZGMzNjI5ZDZkMGY2Li5kMTY0M2JmOGExYjU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG5AQCAtNjYsMTggJiM0Mzs2NiwxNyBAQCBzdGF0aWMgc3RydWN0IGljZV9hZGFwdGVyICppY2VfYWRhcHRlcl9uZXcoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcmVmY291bnQsIDEpO1xuIFxuLVx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cyk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QpO1xuIFxuIFx0cmV0dXJuIGFkYXB0ZXI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGljZV9hZGFwdGVyX2ZyZWUoc3RydWN0IGljZV9hZGFwdGVyICphZGFwdGVyKVxuIHtcbi1cdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cykpO1xuJiM0MztcdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0KSk7XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9jayk7IGkmIzQzOyYjNDM7KVxuIFx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdGtmcmVlKGFkYXB0ZXIpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5pbmRleCA0ZjY5NWYzMmRhM2Q4Li4zOTkyM2RlZGQ1MzRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5AQCAtMTksMTMgJiM0MzsxOSwxMyBAQCBzdHJ1Y3QgaWNlX3BmO1xuICAqXG4gICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgZGF0YSB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBhZGFwdGVyIHBvcnRzXG4gICpcbi0gKiBAcG9ydHM6IGxpc3Qgb2YgcG9ydHNcbiYjNDM7ICogQGxpc3Q6IGxpc3Qgb2YgcG9ydHNcbiAgKiBAbG9jazogcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIHBvcnRzIGxpc3RcbiAgKi9cbiBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdC8qIFRvIHN5bmNocm9uaXplIHRoZSBwb3J0cyBsaXN0IG9wZXJhdGlvbnMgKi9cbi1cdHN0cnVjdCBtdXRleCBsb2NrO1xuJiM0MztcdHNwaW5sb2NrX3QgbG9jaztcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbmluZGV4IGQ4ODgzNTQ4MmQzYWEuLmM4NGQ2M2I4ZDI2MWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbkBAIC0zMjQ4LDcgJiM0MzszMjQ4LDcgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHJfdGhyZWFkX2ZuKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuIFx0aWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7XG4gXHRpY2VfZmx1c2goaHcpO1xuIFxuLVx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkge1xuJiM0MztcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcbiBcdFx0LyogSWYgYW55IG5ldyBUeCB0aW1lc3RhbXBzIGhhcHBlbmVkIHdoaWxlIGluIGludGVycnVwdCxcbiBcdFx0ICogcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBpdCBhZ2Fpbi5cbiBcdFx0ICovXG5AQCAtNjc0NSw3ICYjNDM7Njc0NSw2IEBAIHN0YXRpYyBpbnQgaWNlX3VwX2NvbXBsZXRlKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRcdGljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUpO1xuIFx0XHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29uKHZzaS1cdTAwM2VuZXRkZXYpO1xuLVx0XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCB0cnVlKTtcbiBcdH1cbiBcbiBcdC8qIFBlcmZvcm0gYW4gaW5pdGlhbCByZWFkIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyBub3cgdG9cbkBAIC03MjczLDcgJiM0Mzs3MjcyLDYgQEAgaW50IGljZV9kb3duKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXG4gXHRpZiAodnNpLVx1MDAzZW5ldGRldikge1xuIFx0XHR2bGFuX2VyciA9IGljZV92c2lfZGVsX3ZsYW5femVybyh2c2kpO1xuLVx0XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHZzaS1cdTAwM2ViYWNrLCBmYWxzZSk7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRpZl90eF9kaXNhYmxlKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0fVxuQEAgLTc3OTQsNiAmIzQzOzc3OTIsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIFxuIFx0aWNlX3VwZGF0ZV9wZl9uZXRkZXZfbGluayhwZik7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlaHcucG9ydF9pbmZvKSB7XG4mIzQzO1x0XHRib29sIGxpbmtfdXA7XG4mIzQzO1xuJiM0MztcdFx0bGlua191cCA9ICEhKHBmLVx1MDAzZWh3LnBvcnRfaW5mby1cdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBJQ0VfQVFfTElOS19VUCk7XG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlcHRwLnBvcnQubGlua191cCAhPSBsaW5rX3VwKVxuJiM0MztcdFx0XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXG4gXHRlcnIgPSBpY2Vfc2VuZF92ZXJzaW9uKHBmKTtcbiBcdGlmIChlcnIpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uMGU0NGVkNmIwYWU4ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0xLDYgJiM0MzsxLDggQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoQykgMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aWNlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfbGliLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpY2VfdHJhY2UuaFwmIzM0O1xuQEAgLTM2Miw5ICYjNDM7MzY0LDEyIEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxuIHN0YXRpYyBib29sXG4gaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiB7XG4mIzQzO1x0c3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XG4mIzQzO1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ0eC1cdTAwM2Vsb2NrKTtcbiBcbi1cdHJldHVybiB0eC1cdTAwM2Vpbml0IFx1MDAyNlx1MDAyNiAhdHgtXHUwMDNlY2FsaWJyYXRpbmc7XG4mIzQzO1x0cmV0dXJuIHR4LVx1MDAzZWluaXQgXHUwMDI2XHUwMDI2ICF0eC1cdTAwM2VjYWxpYnJhdGluZyBcdTAwMjZcdTAwMjYgcHRwX3BvcnQtXHUwMDNlbGlua191cDtcbiB9XG4gXG4gLyoqXG5AQCAtNTYxLDcgJiM0Mzs1NjYsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHR1NjQgdHN0YW1wX3JlYWR5O1xuLVx0Ym9vbCBsaW5rX3VwO1xuIFx0aW50IGVycjtcbiBcdHU4IGlkeDtcbiBcbkBAIC01NjksNyAmIzQzOzU3Myw3IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0cGYgPSBwdHBfcG9ydF90b19wZihwdHBfcG9ydCk7XG4gXHRodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFxuLVx0aWYgKCF0eC1cdTAwM2Vpbml0KVxuJiM0MztcdGlmICghdHgtXHUwMDNlaW5pdCB8fCBiaXRtYXBfZW1wdHkodHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBSZWFkIHRoZSBUeCByZWFkeSBzdGF0dXMgZmlyc3QgKi9cbkBAIC01NzksMTQgJiM0Mzs1ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0LyogRHJvcCBwYWNrZXRzIGlmIHRoZSBsaW5rIHdlbnQgZG93biAqL1xuLVx0bGlua191cCA9IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4tXG4gXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pIHtcbiBcdFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4gXHRcdHU4IHBoeV9pZHggPSBpZHggJiM0MzsgdHgtXHUwMDNlb2Zmc2V0O1xuIFx0XHR1NjQgcmF3X3RzdGFtcCA9IDAsIHRzdGFtcDtcbi1cdFx0Ym9vbCBkcm9wX3RzID0gIWxpbmtfdXA7XG4mIzQzO1x0XHRib29sIGRyb3BfdHMgPSBmYWxzZTtcbiBcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdFx0LyogRHJvcCBwYWNrZXRzIHdoaWNoIGhhdmUgd2FpdGVkIGZvciBtb3JlIHRoYW4gMiBzZWNvbmRzICovXG5AQCAtNjE5LDYgJiM0Mzs2MjAsMjIgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFkcm9wX3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0LyogdmVyaWZ5IHJlYWR5IGJpdCBjbGVhcmVkICovXG4mIzQzO1x0XHRpZiAodHgtXHUwMDNlaGFzX3JlYWR5X2JpdG1hcCkge1xuJiM0MztcdFx0XHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHRzdGFtcF9yZWFkeSBcdTAwMjYgQklUX1VMTChwaHlfaWR4KSkge1xuJiM0MztcdFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCB0eC1cdTAwM2VzdGFsZSkpXG4mIzQzO1x0XHRcdFx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtQSFkgcG9ydCAldSBmYWlsZWQgdG8gY2xlYXIgcmVhZHkgYml0IGZvciBpZHggJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdHB0cF9wb3J0LVx1MDAzZXBvcnRfbnVtLCBwaHlfaWR4KTtcbiYjNDM7XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC1cdTAwM2V0c3RhbXBzW2lkeF0uc2tiLCBpZHgpO1xuIFxuIFx0XHQvKiBGb3IgUEhZcyB3aGljaCBkb24mIzM5O3QgaW1wbGVtZW50IGEgcHJvcGVyIHRpbWVzdGFtcCByZWFkeVxuQEAgLTY3MywyMCAmIzQzOzY5MCwzMyBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHBmLVx1MDAzZXB0cC50eF9od3RzdGFtcF9nb29kICYjNDM7PSB0c3RhbXBfZ29vZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdShzdHJ1Y3Qga3JlZiAqcmVmKVxuJiM0Mzt7XG4mIzQzO1x0d2FrZV91cF92YXIocmVmKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3R4X3RzdGFtcF9vd25lcihzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzLCBsaXN0X25vZGUpIHtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiBcdFx0c3RydWN0IGljZV9wdHBfdHggKnR4ID0gXHUwMDI2cG9ydC1cdTAwM2V0eDtcbiBcbi1cdFx0aWYgKCF0eCB8fCAhdHgtXHUwMDNlaW5pdClcbiYjNDM7XHRcdGlmICghdHgtXHUwMDNlaW5pdClcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAodHgpO1xuJiM0MztcbiYjNDM7XHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTcyNSw2ICYjNDM7NzU1LDM3IEBAIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO2ljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcygxMCk7XG4mIzQzO1x0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiYjNDM7XHR1NjQgdHN0YW1wX3JlYWR5O1xuJiM0MztcdGJvb2wgcGVuZGluZztcbiYjNDM7XHR1OCBpZHg7XG4mIzQzO1xuJiM0MztcdGlmIChody1cdTAwM2VyZXNldF9vbmdvaW5nKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRpZiAoaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cdTAwM2VibG9jaywgXHUwMDI2dHN0YW1wX3JlYWR5KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHBlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdGZvcl9lYWNoX3NldF9iaXQoaWR4LCB0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbikge1xuJiM0MztcdFx0XHRpZiAoISh0c3RhbXBfcmVhZHkgXHUwMDI2IEJJVF9VTEwoaWR4ICYjNDM7IHR4LVx1MDAzZW9mZnNldCkpKVxuJiM0MztcdFx0XHRcdHBlbmRpbmcgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFwZW5kaW5nKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7XG4mIzQzO1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIGluLWZsaWdodCBUeCB0aW1lc3RhbXBzIG9uIGJsb2NrICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0dHgtXHUwMDNlYmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlciAtIEZsdXNoIGFueSByZW1haW5pbmcgdGltZXN0YW1wcyBmcm9tIHRoZSB0cmFja2VyXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuQEAgLTc0MSw2ICYjNDM7ODAyLDggQEAgaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRpbnQgZXJyO1xuIFx0dTggaWR4O1xuIFxuJiM0MztcdGljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihwZiwgdHgpO1xuJiM0MztcbiBcdGVyciA9IGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtXHUwMDNlYmxvY2ssIFx1MDAyNnRzdGFtcF9yZWFkeSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O0ZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcXG5cJiMzNDssXG5AQCAtNzc5LDEyICYjNDM7ODQyLDEwIEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxuICAqIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlIC0gTWFyayB1bmZpbmlzaGVkIHRpbWVzdGFtcHMgYXMgc3RhbGVcbiAgKiBAdHg6IHRoZSB0cmFja2VyIHRvIG1hcmtcbiAgKlxuLSAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgc2VuZGluZ1xuLSAqIHRoZWlyIHRpbWVzdGFtcCB2YWx1ZSB0byB0aGUgc3RhY2suIFRoaXMgaXMgcmVxdWlyZWQgdG8gcHJldmVudCBleHRlbmRpbmdcbi0gKiB0aGUgNDBiaXQgaGFyZHdhcmUgdGltZXN0YW1wIGluY29ycmVjdGx5LlxuLSAqXG4tICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIFBUUCBjbG9jayBpcyBtb2RpZmllZCBzdWNoIGFzIGFmdGVyIGEgc2V0XG4tICogdGltZSByZXF1ZXN0LlxuJiM0MzsgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXJcbiYjNDM7ICogZnJvbSByZXBvcnRpbmcgdGhlIHRpbWVzdGFtcCB0byB0aGUgc3RhY2suIFRoaXMgaXMgY2FsbGVkIHRvIGluZm9ybSB0aGVcbiYjNDM7ICogZHJpdmVyIHRoYXQgYSB0aW1lc3RhbXAgaXMgZXhwZWN0ZWQgdG8gZmFpbCBpZiBpdCB3YXMgaW5pdGlhdGVkIGFzIHRoZSBsaW5rXG4mIzQzOyAqIHdlbnQgZG93bi5cbiAgKi9cbiBzdGF0aWMgdm9pZFxuIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbkBAIC04MDgsOCAmIzQzOzg2OSwxNiBAQCBpY2VfcHRwX2ZsdXNoX2FsbF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMsIGxpc3Rfbm9kZSlcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocHRwX3BvcnRfdG9fcGYocG9ydCksIFx1MDAyNnBvcnQtXHUwMDNldHgpO1xuJiM0MztcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC05OTQsMTMgJiM0MzsxMDYzLDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9jYWNoZWRfcGhjdGltZShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXHUwMDNlcHRwLmt3b3JrZXIsIFx1MDAyNnBmLVx1MDAzZXB0cC53b3JrLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwKSk7XG4gXHR9XG4tXG4tXHQvKiBNYXJrIGFueSBvdXRzdGFuZGluZyB0aW1lc3RhbXBzIGFzIHN0YWxlLCBzaW5jZSB0aGV5IG1pZ2h0IGhhdmVcbi1cdCAqIGJlZW4gY2FwdHVyZWQgaW4gaGFyZHdhcmUgYmVmb3JlIHRoZSB0aW1lIHVwZGF0ZS4gVGhpcyBjb3VsZCBsZWFkXG4tXHQgKiB0byB1cyBleHRlbmRpbmcgdGhlbSB3aXRoIHRoZSB3cm9uZyBjYWNoZWQgdmFsdWUgcmVzdWx0aW5nIGluXG4tXHQgKiBpbmNvcnJlY3QgdGltZXN0YW1wIHZhbHVlcy5cbi1cdCAqL1xuLVx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgpO1xuIH1cbiBcbiAvKipcbkBAIC0xMTMzLDYgJiM0MzsxMTk1LDcgQEAgc3RhdGljIGludCBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8oc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZjtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3O1xuIFx0aW50IHR4X2VycjtcbkBAIC0xMTU1LDEyICYjNDM7MTIxOCwyOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiBcdFx0dHhfZXJyID0gaWNlX3BoeV9jZmdfdHhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtXHUwMDNlcG9ydF9udW0pO1xuIFx0cnhfZXJyID0gaWNlX3BoeV9jZmdfcnhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtXHUwMDNlcG9ydF9udW0pO1xuIFx0aWYgKHR4X2VyciB8fCByeF9lcnIpIHtcbi1cdFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlciAqL1xuJiM0MztcdFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci5cbiYjNDM7XHRcdCAqIFRoaXMgaXMgZXhwZWN0ZWQgZHVyaW5nIG5vcm1hbCBsaW5rLXVwOiB0aGUgdmVybmllciBvZmZzZXRcbiYjNDM7XHRcdCAqIGNhbGlicmF0aW9uIGNhbm5vdCBjb21wbGV0ZSB1bnRpbCBhdCBsZWFzdCBvbmUgcGFja2V0IGhhc1xuJiM0MztcdFx0ICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSxcbiYjNDM7XHRcdFx0XCYjMzQ7UFRQIG9mZnNldCBub3QgeWV0IHZhbGlkIGZvciBwb3J0ICV1ICh0eF9lcnI9JWQgcnhfZXJyPSVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cG9ydC1cdTAwM2Vwb3J0X251bSwgdHhfZXJyLCByeF9lcnIpO1xuIFx0XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cdTAwM2VwdHAua3dvcmtlcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2cG9ydC1cdTAwM2Vvdl93b3JrLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qIFR4IGFuZCBSeCBvZmZzZXRzIGFyZSBub3cgY29uZmlndXJlZCwgZW5hYmxlIFR4IHRpbWVzdGFtcHMgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRwb3J0LVx1MDAzZXR4LmNhbGlicmF0aW5nID0gZmFsc2U7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSxcbiYjNDM7XHRcdFwmIzM0O1BUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxcblwmIzM0OyxcbiYjNDM7XHRcdHBvcnQtXHUwMDNlcG9ydF9udW0pO1xuIH1cbiBcbiAvKipcbkBAIC0xMjQzLDEzICYjNDM7MTMyMiwyMCBAQCBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXG4gXG4gXHRcdC8qIFN0YXJ0IHRoZSBQSFkgdGltZXIgaW4gVmVybmllciBtb2RlICovXG4gXHRcdGVyciA9IGljZV9zdGFydF9waHlfdGltZXJfZTgyeChodywgcG9ydCk7XG4tXHRcdGlmIChlcnIpXG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0cHRwX3BvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdHBfcG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdC8qIEVuYWJsZSBUeCB0aW1lc3RhbXBzIHJpZ2h0IGF3YXkgKi9cbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgubG9jaywgZmxhZ3MpO1xuLVx0XHRwdHBfcG9ydC1cdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdC8qIERvIG5vdCBjbGVhciBjYWxpYnJhdGluZyBmbGFnIGhlcmUuIFR4IHRpbWVzdGFtcHMgcmVtYWluXG4mIzQzO1x0XHQgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWRcbiYjNDM7XHRcdCAqIHRoYXQgdGhlIFR4IGFuZCBSeCBvZmZzZXQgY2FsaWJyYXRpb24gaGFzIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqIENsZWFyaW5nIGl0IGhlcmUgd291bGQgYWxsb3cgVHggdGltZXN0YW1wcyB0byBiZSByZXBvcnRlZFxuJiM0MztcdFx0ICogYmVmb3JlIHRoZSBQSFkgb2Zmc2V0IHJlZ2lzdGVycyBhcmUgY29uZmlndXJlZCwgbGVhZGluZ1xuJiM0MztcdFx0ICogdG8gaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4mIzQzO1x0XHQgKi9cbiBcbiBcdFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXHUwMDNlcHRwLmt3b3JrZXIsIFx1MDAyNnB0cF9wb3J0LVx1MDAzZW92X3dvcmssXG4gXHRcdFx0XHRcdCAgIDApO1xuQEAgLTEyODAsMTggJiM0MzsxMzY2LDIxIEBAIHZvaWQgaWNlX3B0cF9saW5rX2NoYW5nZShzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBsaW5rdXApXG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXG4tXHRpZiAocGYtXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpXG4tXHRcdHJldHVybjtcbi1cbiBcdHB0cF9wb3J0ID0gXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQ7XG4gXG4gXHQvKiBVcGRhdGUgY2FjaGVkIGxpbmsgc3RhdHVzIGZvciB0aGlzIHBvcnQgaW1tZWRpYXRlbHkgKi9cbiBcdHB0cF9wb3J0LVx1MDAzZWxpbmtfdXAgPSBsaW5rdXA7XG4gXG4mIzQzO1x0aWYgKHBmLVx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovXG4gXHRpZiAocGYtXHUwMDNlaHcucmVzZXRfb25nb2luZylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghbGlua3VwKVxuJiM0MztcdFx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgpO1xuJiM0MztcbiBcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncykpIHtcbiBcdFx0aW50IHBpbiwgZXJyO1xuQEAgLTE0MjQsMTYgJiM0MzsxNTEzLDIxIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfcGh5X3RpbWVzdGFtcGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbiAgKi9cbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0bGlzdF9mb3JfZWFjaChlbnRyeSwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cykge1xuLVx0XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0ID0gbGlzdF9lbnRyeShlbnRyeSxcbi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcbi1cdFx0XHRcdFx0XHQgICAgICAgbGlzdF9ub2RlKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRpZiAocG9ydC1cdTAwM2VsaW5rX3VwKVxuIFx0XHRcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwb3J0KTtcbiYjNDM7XG4mIzQzO1x0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3OCw3NCAmIzQzOzI3NzIsNTYgQEAgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiYjNDM7c3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4LCBib29sIGluX2lycSlcbiB7XG4tXHRib29sIG1vcmVfdGltZXN0YW1wcztcbiYjNDM7XHRERUNMQVJFX0JJVE1BUCh0c3RhbXBzLCBJTkRFWF9QRVJfUE9SVF9NQVgpID0ge307XG4gXG4gXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2dHgtXHUwMDNlbG9jaykge1xuIFx0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRtb3JlX3RpbWVzdGFtcHMgPSAhYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKTtcbi1cdH1cbiYjNDM7XHRcdGlmIChpbl9pcnEpIHtcbiYjNDM7XHRcdFx0aWYgKCFpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAodHgpKVxuJiM0MztcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBtb3JlX3RpbWVzdGFtcHM7XG4mIzQzO1x0XHRcdHJldHVybiBiaXRtYXBfYW5kbm90KHRzdGFtcHMsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlc3RhbGUsIHR4LVx1MDAzZWxlbik7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyZXR1cm4gIWJpdG1hcF9lbXB0eSh0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIH1cbiBcbi1zdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3N0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXG4ge1xuJiM0MztcdGJvb2wgaGF2ZV90c3RhbXBzID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spIHtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzLFxuLVx0XHRcdFx0ICAgIGxpc3Rfbm9kZSkge1xuLVx0XHRcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFx1MDAyNnBvcnQtXHUwMDNldHg7XG4tXG4tXHRcdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHR4KSlcbi1cdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuJiM0MztcdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBvcnQtXHUwMDNldHgsIGluX2lycSkpIHtcbiYjNDM7XHRcdFx0aGF2ZV90c3RhbXBzID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbi1cdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gaGF2ZV90c3RhbXBzO1xuIH1cbiBcbi1ib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0Mztib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcbiB7XG4tXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuLVx0aW50IHJldDtcbi1cbi1cdC8qIENoZWNrIHNvZnR3YXJlIGluZGljYXRvciAqL1xuIFx0c3dpdGNoIChwZi1cdTAwM2VwdHAudHhfaW50ZXJydXB0X21vZGUpIHtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfTk9ORTpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9TRUxGOlxuLVx0XHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRicmVhaztcbiYjNDM7XHRcdHJldHVybiBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcdTAwMjZwZi1cdTAwM2VwdHAucG9ydC50eCwgaW5faXJxKTtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfQUxMOlxuLVx0XHRpZiAoaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0YnJlYWs7XG4mIzQzO1x0XHRyZXR1cm4gaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmLCBpbl9pcnEpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O1VuZXhwZWN0ZWQgVHggdGltZXN0YW1wIGludGVycnVwdCBtb2RlICV1XFxuXCYjMzQ7LFxuIFx0XHRcdCAgcGYtXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHQvKiBDaGVjayBoYXJkd2FyZSBpbmRpY2F0b3IgKi9cbi1cdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7VW5hYmxlIHRvIHJlYWQgUEhZIFR4IHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRyZXQpO1xuLVx0XHQvKiBTdG9wIHRyaWdnZXJpbmcgSVJRcyBpZiB3ZSYjMzk7cmUgdW5hYmxlIHRvIHJlYWQgUEhZICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cbi1cdC8qIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KCkgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB0aW1lc3RhbXBzXG4tXHQgKiBhdmFpbGFibGUsIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRpbmcgdGltZXN0YW1wcywgYW5kIGEgbmVnYXRpdmVcbi1cdCAqIHZhbHVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAod2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUpLlxuLVx0ICovXG4tXHRyZXR1cm4gcmV0IFx1MDAzZSAwO1xuIH1cbiBcbiAvKipcbkBAIC0yNzk5LDcgJiM0MzsyODc1LDcgQEAgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdC8qIEU4MzAgY2FuIHJlYWQgdGltZXN0YW1wcyBpbiB0aGUgdG9wIGhhbGYgdXNpbmcgcmQzMigpICovXG4gXHRcdGljZV9wdHBfcHJvY2Vzc190cyhwZik7XG4gXG4tXHRcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcbiYjNDM7XHRcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcbiBcdFx0XHQvKiBQcm9jZXNzIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMuIElmIHRoZXJlXG4gXHRcdFx0ICogaXMgbW9yZSB3b3JrLCByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGFnYWluLlxuIFx0XHRcdCAqL1xuQEAgLTI4MjksNyAmIzQzOzI5MDUsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX21heWJlX3RyaWdnZXJfdHhfaW50ZXJydXB0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpO1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2Vodztcbi1cdGludCByZXQ7XG4gXG4gXHRpZiAoIXBmLVx1MDAzZXB0cC5wb3J0LnR4Lmhhc19yZWFkeV9iaXRtYXApXG4gXHRcdHJldHVybjtcbkBAIC0yODM3LDExICYjNDM7MjkxMiw4IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoIWljZV9wZl9zcmNfdG1yX293bmVkKHBmKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cmV0ID0gaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoaHcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7UFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRyZXQpO1xuLVx0fSBlbHNlIGlmIChyZXQpIHtcbiYjNDM7XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIGZhbHNlKSB8fFxuJiM0MztcdCAgICBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodykpIHtcbiBcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1BUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cXG5cJiMzNDspO1xuIFxuIFx0XHR3cjMyKGh3LCBQRklOVF9PSUNSLCBQRklOVF9PSUNSX1RTWU5fVFhfTSk7XG5AQCAtMjg5MCwxNCAmIzQzOzI5NjIsMTYgQEAgdm9pZCBpY2VfcHRwX3F1ZXVlX3dvcmsoc3RydWN0IGljZV9wZiAqcGYpXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsXG4gXHRcdFx0XHRcdGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIHtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuJiM0MztcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSB7XG4tXHRcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxuLVx0XHRcdFx0XHRcdCAgICAgICBsaXN0X25vZGUpO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgaWNlX3BmICpwZWVyX3BmID0gcHRwX3BvcnRfdG9fcGYocG9ydCk7XG4gXG4mIzQzO1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnBvcnQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdGlmICghaWNlX2lzX3ByaW1hcnkoXHUwMDI2cGVlcl9wZi1cdTAwM2VodykpIHtcbiBcdFx0XHRpZiAocmVidWlsZCkge1xuIFx0XHRcdFx0LyogVE9ETzogV2hlbiBpbXBsZW1lbnRpbmcgcmVidWlsZD10cnVlOlxuQEAgLTI5MDksNyAmIzQzOzI5ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsXG4gXHRcdFx0XHRpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBlZXJfcGYsIHJlc2V0X3R5cGUpO1xuIFx0XHRcdH1cbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0yOTM2LDYgJiM0MzszMDE0LDE0IEBAIHZvaWQgaWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXHRpZiAocmVzZXRfdHlwZSA9PSBJQ0VfUkVTRVRfUEZSKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGVcbiYjNDM7XHQgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWVcbiYjNDM7XHQgKiBzaWRlYmFuZCBxdWV1ZSBjb21tYW5kcyB0aGF0IHdpbGwgZmFpbCBvciB0aW1lb3V0LCBhbmQgbWF5XG4mIzQzO1x0ICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpXG4mIzQzO1x0XHRrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwdHAtXHUwMDNlcG9ydC5vdl93b3JrKTtcbiYjNDM7XG4gXHRpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpIFx1MDAyNlx1MDAyNiBody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbiBcdFx0aWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHBmLCBmYWxzZSwgcmVzZXRfdHlwZSk7XG4gXG5AQCAtMzA4NiwxMSAmIzQzOzMxNzIsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnJlZik7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsXG4tXHRcdCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdGxpc3RfYWRkX3JjdShcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdC8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LlxuIFx0ICogT25seSBtZWFuaW5nZnVsIG9uIEU4MjUgKG90aGVyIE1BQyB0eXBlcyBkb24mIzM5O3QgZXhwb3NlIHR4LWNsa1xuQEAgLTMxMTMsMTIgJiM0MzszMTk5LDMyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2NsZWFudXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFx1MDAyNnBmLVx1MDAzZXB0cDtcbiYjNDM7XHRzdHJ1Y3Qga3JlZiAqcmVmO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlICE9IElDRV9NQUNfVU5LTk9XTikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0fVxuJiM0MztcdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmdcbiYjNDM7XHQgKiBvdXRzdGFuZGluZyByZWZlcmVuY2VzIHRvIHRoZSBQVFAgcG9ydC4gVG8gbWFrZSBzdXJlIHRoaXMgaXMgdHJ1ZSxcbiYjNDM7XHQgKiBmaXJzdCByZW1vdmUgdGhlIHBvcnQgZnJvbSB0aGUgbGlzdCwgdGhlbiBkcm9wIHRoZSBwcmltYXJ5XG4mIzQzO1x0ICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGxcbiYjNDM7XHQgKiBleGlzdGluZyByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBGaW5hbGx5LCBzeW5jaHJvbml6ZV9yY3UoKSB0b1xuJiM0MztcdCAqIGVuc3VyZSB0aGF0IGFsbCBSQ1UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBtaWdodCBhdHRlbXB0IHRvXG4mIzQzO1x0ICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbF9yY3UoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcbiYjNDM7XHRyZWYgPSBcdTAwMjZwdHAtXHUwMDNlcG9ydC5yZWY7XG4mIzQzO1x0a3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcbiYjNDM7XHRkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0ICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLFxuJiM0MztcdFx0ICAgICAgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIHBvcnQgcmVmZXJlbmNlcyB0byByZWxlYXNlLiBDb250aW51aW5nIHRvIHVubG9hZCBhbnl3YXlzLlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuIH1cbiBcbiAvKipcbkBAIC0zMjEwLDkgJiM0MzszMzE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgUFRQIHdvcmsgdGhyZWFkc1xuJiM0MzsgKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgdGhlIFBUUCBrd29ya2VyXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuICAqIEBwdHA6IFBGIFBUUCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZVxuJiM0MzsgKiBwZXJpb2RpYyB3b3JrIGlzIG5vdCBxdWV1ZWQgaGVyZTsgdGhlIGNhbGxlciBzdGFydHMgaXQgb25jZSB0aGUgUFRQXG4mIzQzOyAqIHN0YXRlIGlzIElDRV9QVFBfUkVBRFkuXG4gICovXG4gc3RhdGljIGludCBpY2VfcHRwX2luaXRfd29yayhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHAgKnB0cClcbiB7XG5AQCAtMzIzMSw5ICYjNDM7MzM0MSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXG4gXG4gXHRwdHAtXHUwMDNla3dvcmtlciA9IGt3b3JrZXI7XG4gXG4tXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIGdvaW5nICovXG4tXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXHUwMDNla3dvcmtlciwgXHUwMDI2cHRwLVx1MDAzZXdvcmssIDApO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMzNTUsNiAmIzQzOzM0NjIsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jbGVhbl9wZjtcbiBcbiYjNDM7XHQvKiBTZWVkIGxpbmtfdXAgZnJvbSBjdXJyZW50IFBIWSBzdGF0dXMsIHNpbmNlIGxpbmsgbWF5IGFscmVhZHkgYmUgdXBcbiYjNDM7XHQgKiAoZS5nLiBhZnRlciBQWEUgYm9vdCkgd2l0aCBubyBsaW5rLWNoYW5nZSBlZGdlIHRvIGNhdGNoIGl0IGxhdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZi1cdTAwM2Vody5wb3J0X2luZm8pXG4mIzQzO1x0XHRwdHAtXHUwMDNlcG9ydC5saW5rX3VwID1cbiYjNDM7XHRcdFx0ISEocGYtXHUwMDNlaHcucG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFx1MDAyNlxuJiM0MztcdFx0XHRJQ0VfQVFfTElOS19VUCk7XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSB0aGUga3dvcmtlciBiZWZvcmUgcmVzdGFydGluZyB0aGUgUEhZLCB3aGljaCBxdWV1ZXMgd29yayBvblxuJiM0MztcdCAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzXG4mIzQzO1x0ICogZnJvbSByZWFjaGluZyBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoKSB3aGlsZSBrd29ya2VyIGlzIHN0aWxsIE5VTExcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZXhpdDtcbiYjNDM7XG4gXHQvKiBTdGFydCB0aGUgUEhZIHRpbWVzdGFtcGluZyBibG9jayAqL1xuIFx0aWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHBmKTtcbiBcbkBAIC0zMzYzLDkgJiM0MzszNDg2LDEwIEBAIHZvaWQgaWNlX3B0cF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFxuIFx0cHRwLVx1MDAzZXN0YXRlID0gSUNFX1BUUF9SRUFEWTtcbiBcbi1cdGVyciA9IGljZV9wdHBfaW5pdF93b3JrKHBmLCBwdHApO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfZXhpdDtcbiYjNDM7XHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIG9ubHkgYWZ0ZXIgdGhlIHN0YXRlIGlzIFJFQURZOyB0aGUgd29ya2VyXG4mIzQzO1x0ICogcmV0dXJucyB3aXRob3V0IHJlc2NoZWR1bGluZyB3aGlsZSB0aGUgc3RhdGUgaXMgbm90IFJFQURZLlxuJiM0MztcdCAqL1xuJiM0MztcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC1cdTAwM2Vrd29ya2VyLCBcdTAwMjZwdHAtXHUwMDNld29yaywgMCk7XG4gXG4gXHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7UFRQIGluaXQgc3VjY2Vzc2Z1bFxcblwmIzM0Oyk7XG4gXHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmhcbmluZGV4IGM0YjBkYTdjZTIwZWQuLjEzMTU4YTkzMTlmYjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG5AQCAtNSw2ICYjNDM7NSw4IEBAXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3JlZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aWNlX3B0cF9ody5oXCYjMzQ7XG5AQCAtMTMwLDYgJiM0MzsxMzIsOSBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gI2RlZmluZSBJTkRFWF9QRVJfUE9SVF9FODJYXHRcdDE2XG4gI2RlZmluZSBJTkRFWF9QRVJfUE9SVFx0XHRcdDY0XG4gXG4mIzQzOy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzdGFtcCBpbmRleGVzIGFjcm9zcyBhbGwgZGV2aWNlcyAqL1xuJiM0MzsjZGVmaW5lIElOREVYX1BFUl9QT1JUX01BWCAgICAgICAgICAgICAgSU5ERVhfUEVSX1BPUlRcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IGljZV9wdHBfcG9ydCAtIGRhdGEgdXNlZCB0byBpbml0aWFsaXplIGFuIGV4dGVybmFsIHBvcnQgZm9yIFBUUFxuICAqXG5AQCAtMTM4LDYgJiM0MzsxNDMsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0JiMzOTtzIFBIWSBvZmZzZXQgaXMgdmFsaWQuXG4gICpcbiAgKiBAbGlzdF9ub2RlOiBsaXN0IG1lbWJlciBzdHJ1Y3R1cmVcbiYjNDM7ICogQHJlZjogcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHVzZSB3aXRoIGFkYXB0ZXIgcG9ydHMgbGlzdFxuICAqIEB0eDogVHggdGltZXN0YW1wIHRyYWNraW5nIGZvciB0aGlzIHBvcnRcbiAgKiBAb3Zfd29yazogZGVsYXllZCB3b3JrIHRhc2sgZm9yIHRyYWNraW5nIHdoZW4gUEhZIG9mZnNldCBpcyB2YWxpZFxuICAqIEBwc19sb2NrOiBtdXRleCB1c2VkIHRvIHByb3RlY3QgdGhlIG92ZXJhbGwgUFRQIFBIWSBzdGFydCBwcm9jZWR1cmVcbkBAIC0xNDksNiAmIzQzOzE1NSw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcbiAgKi9cbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlO1xuJiM0MztcdHN0cnVjdCBrcmVmIHJlZjtcbiBcdHN0cnVjdCBpY2VfcHRwX3R4IHR4O1xuIFx0c3RydWN0IGt0aHJlYWRfZGVsYXllZF93b3JrIG92X3dvcms7XG4gXHRzdHJ1Y3QgbXV0ZXggcHNfbG9jazsgLyogcHJvdGVjdHMgb3ZlcmFsbCBQVFAgUEhZIHN0YXJ0IHByb2NlZHVyZSAqL1xuQEAgLTMxMiw3ICYjNDM7MzE5LDcgQEAgdm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KTtcbiB2b2lkIGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpO1xuIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3RzKHN0cnVjdCBpY2VfcGYgKnBmKTtcbiBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZik7XG4tYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4mIzQzO2Jvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKTtcbiB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuIFxuQEAgLTM2MCw3ICYjNDM7MzY3LDggQEAgc3RhdGljIGlubGluZSBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2xcbiYjNDM7aWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbmluZGV4IDNhNDFjNzExZTc1MWIuLjEwZTk3Mzg3NjYwOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5AQCAtNzM3LDI0ICYjNDM7NzM3LDYgQEAgc3RhdGljIGludCBpY2VfcmVhZF9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsXG4gXHRyZXR1cm4gaWNlX3JlYWRfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApO1xuIH1cbiBcbi0vKipcbi0gKiBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnIC0gV3JpdGUgYSBQSFkgcG9ydCBtZW1vcnkgbG9jYXRpb25cbi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBiZSByZWFkXG4tICogQG9mZnNldDogT2Zmc2V0IGZyb20gUEhZIHBvcnQgcmVnaXN0ZXIgYmFzZVxuLSAqIEB2YWw6IFBvaW50ZXIgdG8gdGhlIHZhbHVlIHRvIHJlYWQgKG91dCBwYXJhbSlcbi0gKlxuLSAqIFJldHVybjpcbi0gKiAqICUwICAgICAgLSBzdWNjZXNzXG4tICogKiAlRUlOVkFMIC0gaW52YWxpZCBwb3J0IG51bWJlciBvciByZXNvdXJjZSB0eXBlXG4tICogKiAlb3RoZXIgIC0gZmFpbGVkIHRvIHdyaXRlIHRvIFBIWVxuLSAqL1xuLXN0YXRpYyBpbnQgaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcbi1cdFx0XHRcdCAgICAgdTMyIHZhbClcbi17XG4tXHRyZXR1cm4gaWNlX3dyaXRlX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcbi19XG4tXG4gLyoqXG4gICogaWNlX3dyaXRlX3F1YWRfcHRwX3JlZ19ldGg1NmcgLSBXcml0ZSBhIFBIWSBxdWFkIHJlZ2lzdGVyXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbkBAIC0xMTM5LDggJiM0MzsxMTIxLDggQEAgc3RhdGljIGludCBpY2VfcmVhZF9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4LFxuICAqIGludGVybmFsIFBIWXMgb2YgdGhlIDU2RyBkZXZpY2VzLlxuICAqXG4gICogVG8gZGlyZWN0bHkgY2xlYXIgdGhlIGNvbnRlbnRzIG9mIHRoZSB0aW1lc3RhbXAgYmxvY2sgZW50aXJlbHksIGRpc2NhcmRpbmdcbi0gKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgdXNlXG4tICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfcXVhZF9ldGg1NmcoKS5cbiYjNDM7ICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHBlcmZvcm0gYSBQSFkgc29mdFxuJiM0MzsgKiByZXNldCB2aWEgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKS5cbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGFuIGlkeCB3aG9zZSBiaXQgaXMgc2V0IGFjY29yZGluZyB0b1xuICAqIGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeSgpLlxuQEAgLTExNTIsMTEgJiM0MzsxMTM0LDExIEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCxcbiBzdGF0aWMgaW50IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4KVxuIHtcbiBcdHU2NCB1bnVzZWRfdHN0YW1wO1xuLVx0dTE2IGxvX2FkZHI7XG4gXHRpbnQgZXJyO1xuIFxuLVx0LyogUmVhZCB0aGUgdGltZXN0YW1wIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wIHN0YXR1cyBiaXQgaXNcbi1cdCAqIGNsZWFyZWQuXG4mIzQzO1x0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XG4mIzQzO1x0ICogY2xlYXJzIHRoZSBlbnRyeSYjMzk7cyB2YWxpZCBiaXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIChyZWFkLW9ubHkpXG4mIzQzO1x0ICogdHNfbWVtb3J5X3N0YXR1cyBiaXQuXG4gXHQgKi9cbiBcdGVyciA9IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgsIFx1MDAyNnVudXNlZF90c3RhbXApO1xuIFx0aWYgKGVycikge1xuQEAgLTExNjQsMzIgJiM0MzsxMTQ2LDQwIEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpXG4gXHRcdFx0ICBwb3J0LCBpZHgsIGVycik7XG4gXHR9XG4gXG4tXHRsb19hZGRyID0gKHUxNilQSFlfVFNUQU1QX0woaWR4KTtcbi1cbi1cdGVyciA9IGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcoaHcsIHBvcnQsIGxvX2FkZHIsIDApO1xuLVx0aWYgKGVycikge1xuLVx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gY2xlYXIgbG93IFBUUCB0aW1lc3RhbXAgcmVnaXN0ZXIgZm9yIHBvcnQgJXUsIGlkeCAldSwgZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdCAgcG9ydCwgaWR4LCBlcnIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyAtIENsZWFyIGFsbCB0aW1lc3RhbXBzIGZyb20gdGhlIHBvcnQgYmxvY2tcbiYjNDM7ICogaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyAtIFJlc2V0IG9uZSBwb3J0JiMzOTtzIFR4IHRpbWVzdGFtcCBtZW1vcnlcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuJiM0MzsgKiBAcG9ydDogcG9ydCBudW1iZXIgdG8gY2xlYXJcbiYjNDM7ICpcbiYjNDM7ICogRnVsbHkgcmVzZXQgYSBzaW5nbGUgUEhZIHBvcnQmIzM5O3MgVHggdGltZXN0YW1wIG1lbW9yeS4gUGVyIHRoZSBQSFkgc3BlYywgdGhlXG4mIzQzOyAqIG9ubHkgd2F5IHRvIGNsZWFyIGEgdGltZXN0YW1wIHZhbGlkIGJpdCAoYW5kIGl0cyByZWFkLW9ubHkgdHNfbWVtb3J5X3N0YXR1c1xuJiM0MzsgKiBiaXQpIGlzIHRvIHJlYWQgdGhlIHRpbWVzdGFtcCBtZW1vcnkgbG9jYXRpb24sIHNvIHJlYWQgZXZlcnkgZW50cnkgZm9yIHRoZVxuJiM0MzsgKiBwb3J0ICh0d28gMzItYml0IHJlYWRzIGVhY2gpLiBUaGlzIGRpc2NhcmRzIGFsbCB0aW1lc3RhbXAgZGF0YSBvbiB0aGUgcG9ydCxcbiYjNDM7ICogc28gaXQgbXVzdCBvbmx5IGJlIHVzZWQgZm9yIGEgZnVsbCByZXNldDsgY2FsbGVycyB0aGF0IG11c3QgcHJlc2VydmVcbiYjNDM7ICogaW4tZmxpZ2h0IHRpbWVzdGFtcHMgY2xlYXIgaW5kaXZpZHVhbCBpbmRpY2VzIHZpYSBpY2VfY2xlYXJfcGh5X3RzdGFtcCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBEdWUgdG8gaW50ZXJhY3Rpb25zIHdpdGggYW4gaW50ZXJuYWwgSFcgY291bnRlciBmb3IgdGhlIG51bWJlciBvZlxuJiM0MzsgKiBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzLCB0aGlzICptdXN0KiBvbmx5IGJlIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZVxuJiM0MzsgKiBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpIHByb2NlZHVyZS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJuYWwgY291bnRlclxuJiM0MzsgKiBtYXkgYmVjb21lIG91dCBvZiBzeW5jIGFuZCBwcmV2ZW50IG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0cy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byByZWFkIHRoZSBQSFkuXG4gICovXG4tc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3KVxuJiM0MztzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4ge1xuLVx0dW5zaWduZWQgaW50IHBvcnQ7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1x0dTggaWR4O1xuIFxuLVx0Zm9yIChwb3J0ID0gMDsgcG9ydCBcdTAwM2MgaHctXHUwMDNlcHRwLm51bV9scG9ydHM7IHBvcnQmIzQzOyYjNDM7KSB7XG4tXHRcdGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX0wsXG4tXHRcdFx0XHRcdCAwKTtcbi1cdFx0aWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVNfVSxcbi1cdFx0XHRcdFx0IDApO1xuJiM0MztcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBJTkRFWF9QRVJfUE9SVDsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTIxMTUsMTAgJiM0MzsyMTA1LDYgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX09GRlNFVF9SRUFEWSwgMCk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuIFx0ZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1JYX09GRlNFVF9SRUFEWSwgMCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIxMzMsOSAmIzQzOzIxMTksMTEgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldClcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuICAqIEBwb3J0OiB0aGUgUEhZIHBvcnQgdG8gc3RhcnRcbiAgKlxuLSAqIFN0YXJ0IHRoZSBjbG9jayBvZiBhIFBIWSBwb3J0LiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvXG4tICogcmUtY2FsaWJyYXRlIFR4IGFuZCBSeCB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpc1xuLSAqIGluaXRpYWxpemVkIG9yIHdoZW4gbGluayBzcGVlZCBjaGFuZ2VzLlxuJiM0MzsgKiBQZXJmb3JtIGEgUEhZIHNvZnQgcmVzZXQgYW5kIHRoZW4gc3RhcnQgdGhlIGNsb2NrIGZvciB0aGUgUEhZIHBvcnQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8gcmUtY2FsaWJyYXRlIFR4IGFuZCBSeFxuJiM0MzsgKiB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpcyBpbml0aWFsaXplZCBvciB3aGVuIGxpbmtcbiYjNDM7ICogc3BlZWQgY2hhbmdlcy5cbiAgKlxuICAqIFJldHVybjpcbiAgKiAqICUwICAgICAtIHN1Y2Nlc3NcbkBAIC0yMTUxLDYgJiM0MzsyMTM5LDEwIEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydClcbiBcbiBcdHRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpO1xuIFxuJiM0MztcdGVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4gXHRlcnIgPSBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKGh3LCBwb3J0LCBmYWxzZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIyOTQsNiAmIzQzOzIyODYsNyBAQCBpbnQgaWNlX3B0cF9yZWFkX3R4X2h3dHN0YW1wX3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHUzMiAqdHNfc3RhdHVzKVxuICAqXG4gICogVHJpZ2dlciBhIHNvZnQgcmVzZXQgb2YgdGhlIEVUSDU2RyBQSFkgYnkgdG9nZ2xpbmcgdGhlIHNvZnQgcmVzZXRcbiAgKiBiaXQgaW4gdGhlIFBIWSBnbG9iYWwgcmVnaXN0ZXIuIFRoZSByZXNldCBzZXF1ZW5jZSBjb25zaXN0cyBvZjpcbiYjNDM7ICogICAwLiBSZWFkaW5nIGV2ZXJ5IHRpbWVzdGFtcCBtZW1vcnkgcmVnaXN0ZXIgdG8gY2xlYXIgaXRzIHZhbGlkIGJpdFxuICAqICAgMS4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0XG4gICogICAyLiBBc3NlcnRpbmcgdGhlIHNvZnQgcmVzZXQgYml0XG4gICogICAzLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQgYWdhaW5cbkBAIC0yMzAyLDYgJiM0MzsyMjk1LDEyIEBAIGludCBpY2VfcHRwX3JlYWRfdHhfaHd0c3RhbXBfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyICp0c19zdGF0dXMpXG4gICogdG8gc2V0dGxlLiBUaGlzIHByb3ZpZGVzIGEgY29udHJvbGxlZCB3YXkgdG8gcmVpbml0aWFsaXplIHRoZSBQSFlcbiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LlxuICAqXG4mIzQzOyAqIFRvIGVuc3VyZSB0aGF0IHRoZSBpbnRlcm5hbCBjb3VudGVyIG1hdGNoZXMgdGhlIGNvbnRlbnRzIG9mIHRoZVxuJiM0MzsgKiBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMsIHJlYWQgZXZlcnkgdGltZXN0YW1wIGluZGV4IHByaW9yIHRvIHBlcmZvcm1pbmdcbiYjNDM7ICogdGhlIHNvZnQgcmVzZXQuIFRoZSBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMgcmVhZHMgZW5zdXJlIHRoYXQgdGhlIHJlZ2lvblxuJiM0MzsgKiBpcyBjbGVhcmVkLCB3aGlsZSB0aGUgc29mdCByZXNldCBwcm9jZWR1cmUgZW5zdXJlcyB0aGF0IHRoZSB0aW1zZXRhbXBcbiYjNDM7ICogY291bnRlciBpcyByZXNldCB0byB6ZXJvLlxuJiM0MzsgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB3aGVuXG4gICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci5cbiAgKi9cbkBAIC0yMzEwLDYgJiM0MzsyMzA5LDEzIEBAIGludCBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydClcbiBcdHUzMiBnbG9iYWxfdmFsO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRlcnIgPSBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKGh3LCBwb3J0KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgcG9ydCwgZXJyKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGVyciA9IGljZV9yZWFkX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX0dMT0JBTCwgXHUwMDI2Z2xvYmFsX3ZhbCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwmIzM0O0ZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcXG5cJiMzNDssXG5AQCAtNTgwMSw4ICYjNDM7NTgwNyw5IEBAIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnkoc3RydWN0IGljZV9odyAqaHcpXG4gXHRcdGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2U4MngoaHcpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX01BQ19HRU5FUklDXzNLX0U4MjU6XG4tXHRcdGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2Zyhodyk7XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0LyogRTgyNSBoYXJkd2FyZSBtdXN0IG9ubHkgcmVzZXQgdGltZXN0YW1wIG1lbW9yeSBhcyBwYXJ0IG9mXG4mIzQzO1x0XHQgKiB0aGUgc29mdCByZXNldCBwcm9jZWR1cmUuXG4mIzQzO1x0XHQgKi9cbiBcdGNhc2UgSUNFX01BQ19FODEwOlxuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAxOjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBQVFAgdGltZXN0YW1waW5nIGFuZCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTA2YjAwNGRjZDAzNDZiYWU1N2JiNzQ4OGM3ZTQ3MTExMzgwMmY5MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDAxOjA5OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYwppbmRleCAyZGMzNjI5ZDZkMGY2Li5kMTY0M2JmOGExYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYwpAQCAtNjYsMTggJiM0Mzs2NiwxNyBAQCBzdGF0aWMgc3RydWN0IGljZV9hZGFwdGVyICppY2VfYWRhcHRlcl9uZXcoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCW11dGV4X2luaXQoJmFtcDthZGFwdGVyLSZndDtjcGlfcGh5X2xvY2tbaV0pOwogCXJlZmNvdW50X3NldCgmYW1wO2FkYXB0ZXItJmd0O3JlZmNvdW50LCAxKTsKIAotCW11dGV4X2luaXQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmYW1wO2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5saXN0KTsKIAogCXJldHVybiBhZGFwdGVyOwogfQogCiBzdGF0aWMgdm9pZCBpY2VfYWRhcHRlcl9mcmVlKHN0cnVjdCBpY2VfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMpKTsKJiM0MzsJV0FSTl9PTighbGlzdF9lbXB0eSgmYW1wO2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QpKTsKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoYWRhcHRlci0mZ3Q7Y3BpX3BoeV9sb2NrKTsgaSYjNDM7JiM0MzspCiAJCW11dGV4X2Rlc3Ryb3koJmFtcDthZGFwdGVyLSZndDtjcGlfcGh5X2xvY2tbaV0pOwotCW11dGV4X2Rlc3Ryb3koJmFtcDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKIAogCWtmcmVlKGFkYXB0ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaAppbmRleCA0ZjY5NWYzMmRhM2Q4Li4zOTkyM2RlZGQ1MzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaApAQCAtMTksMTMgJiM0MzsxOSwxMyBAQCBzdHJ1Y3QgaWNlX3BmOwogICoKICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGRhdGEgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYWRhcHRlciBwb3J0cwogICoKLSAqIEBwb3J0czogbGlzdCBvZiBwb3J0cwomIzQzOyAqIEBsaXN0OiBsaXN0IG9mIHBvcnRzCiAgKiBAbG9jazogcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIHBvcnRzIGxpc3QKICAqLwogc3RydWN0IGljZV9wb3J0X2xpc3QgewotCXN0cnVjdCBsaXN0X2hlYWQgcG9ydHM7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAkvKiBUbyBzeW5jaHJvbml6ZSB0aGUgcG9ydHMgbGlzdCBvcGVyYXRpb25zICovCi0Jc3RydWN0IG11dGV4IGxvY2s7CiYjNDM7CXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwppbmRleCBkODg4MzU0ODJkM2FhLi5jODRkNjNiOGQyNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYwpAQCAtMzI0OCw3ICYjNDM7MzI0OCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbWlzY19pbnRyX3RocmVhZF9mbihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSkKIAlpY2VfaXJxX2R5bmFtaWNfZW5hKGh3LCBOVUxMLCBOVUxMKTsKIAlpY2VfZmx1c2goaHcpOwogCi0JaWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkgewomIzQzOwlpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7CiAJCS8qIElmIGFueSBuZXcgVHggdGltZXN0YW1wcyBoYXBwZW5lZCB3aGlsZSBpbiBpbnRlcnJ1cHQsCiAJCSAqIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgaXQgYWdhaW4uCiAJCSAqLwpAQCAtNjc0NSw3ICYjNDM7Njc0NSw2IEBAIHN0YXRpYyBpbnQgaWNlX3VwX2NvbXBsZXRlKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJCWljZV9wcmludF9saW5rX21zZyh2c2ksIHRydWUpOwogCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKHZzaS0mZ3Q7bmV0ZGV2KTsKIAkJbmV0aWZfY2Fycmllcl9vbih2c2ktJmd0O25ldGRldik7Ci0JCWljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpOwogCX0KIAogCS8qIFBlcmZvcm0gYW4gaW5pdGlhbCByZWFkIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyBub3cgdG8KQEAgLTcyNzMsNyAmIzQzOzcyNzIsNiBAQCBpbnQgaWNlX2Rvd24oc3RydWN0IGljZV92c2kgKnZzaSkKIAogCWlmICh2c2ktJmd0O25ldGRldikgewogCQl2bGFuX2VyciA9IGljZV92c2lfZGVsX3ZsYW5femVybyh2c2kpOwotCQlpY2VfcHRwX2xpbmtfY2hhbmdlKHZzaS0mZ3Q7YmFjaywgZmFsc2UpOwogCQluZXRpZl9jYXJyaWVyX29mZih2c2ktJmd0O25ldGRldik7CiAJCW5ldGlmX3R4X2Rpc2FibGUodnNpLSZndDtuZXRkZXYpOwogCX0KQEAgLTc3OTQsNiAmIzQzOzc3OTIsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKQogCiAJaWNlX3VwZGF0ZV9wZl9uZXRkZXZfbGluayhwZik7CiAKJiM0MzsJaWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLSZndDtmbGFncykgJmFtcDsmYW1wOyBwZi0mZ3Q7aHcucG9ydF9pbmZvKSB7CiYjNDM7CQlib29sIGxpbmtfdXA7CiYjNDM7CiYjNDM7CQlsaW5rX3VwID0gISEocGYtJmd0O2h3LnBvcnRfaW5mby0mZ3Q7cGh5LmxpbmtfaW5mby5saW5rX2luZm8gJmFtcDsKJiM0MzsJCQkgICAgIElDRV9BUV9MSU5LX1VQKTsKJiM0MzsJCWlmIChwZi0mZ3Q7cHRwLnBvcnQubGlua191cCAhPSBsaW5rX3VwKQomIzQzOwkJCWljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApOwomIzQzOwl9CiYjNDM7CiAJLyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovCiAJZXJyID0gaWNlX3NlbmRfdmVyc2lvbihwZik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMKaW5kZXggZWFlYzM2YWI2YWUzZi4uMGU0NGVkNmIwYWU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCkBAIC0xLDYgJiM0MzsxLDggQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd2FpdF9iaXQuaCZndDsKICNpbmNsdWRlICYjMzQ7aWNlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpY2VfbGliLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpY2VfdHJhY2UuaCYjMzQ7CkBAIC0zNjIsOSAmIzQzOzM2NCwxMiBAQCBzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTY0IGluX3RzdGFtcCkKIHN0YXRpYyBib29sCiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KQogewomIzQzOwlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9CiYjNDM7CQljb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTsKJiM0MzsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dHgtJmd0O2xvY2spOwogCi0JcmV0dXJuIHR4LSZndDtpbml0ICZhbXA7JmFtcDsgIXR4LSZndDtjYWxpYnJhdGluZzsKJiM0MzsJcmV0dXJuIHR4LSZndDtpbml0ICZhbXA7JmFtcDsgIXR4LSZndDtjYWxpYnJhdGluZyAmYW1wOyZhbXA7IHB0cF9wb3J0LSZndDtsaW5rX3VwOwogfQogCiAvKioKQEAgLTU2MSw3ICYjNDM7NTY2LDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJc3RydWN0IGljZV9wZiAqcGY7CiAJc3RydWN0IGljZV9odyAqaHc7CiAJdTY0IHRzdGFtcF9yZWFkeTsKLQlib29sIGxpbmtfdXA7CiAJaW50IGVycjsKIAl1OCBpZHg7CiAKQEAgLTU2OSw3ICYjNDM7NTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJcGYgPSBwdHBfcG9ydF90b19wZihwdHBfcG9ydCk7CiAJaHcgPSAmYW1wO3BmLSZndDtodzsKIAotCWlmICghdHgtJmd0O2luaXQpCiYjNDM7CWlmICghdHgtJmd0O2luaXQgfHwgYml0bWFwX2VtcHR5KHR4LSZndDtpbl91c2UsIHR4LSZndDtsZW4pKQogCQlyZXR1cm47CiAKIAkvKiBSZWFkIHRoZSBUeCByZWFkeSBzdGF0dXMgZmlyc3QgKi8KQEAgLTU3OSwxNCAmIzQzOzU4MywxMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAkJCXJldHVybjsKIAl9CiAKLQkvKiBEcm9wIHBhY2tldHMgaWYgdGhlIGxpbmsgd2VudCBkb3duICovCi0JbGlua191cCA9IHB0cF9wb3J0LSZndDtsaW5rX3VwOwotCiAJZm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LSZndDtpbl91c2UsIHR4LSZndDtsZW4pIHsKIAkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307CiAJCXU4IHBoeV9pZHggPSBpZHggJiM0MzsgdHgtJmd0O29mZnNldDsKIAkJdTY0IHJhd190c3RhbXAgPSAwLCB0c3RhbXA7Ci0JCWJvb2wgZHJvcF90cyA9ICFsaW5rX3VwOwomIzQzOwkJYm9vbCBkcm9wX3RzID0gZmFsc2U7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkJLyogRHJvcCBwYWNrZXRzIHdoaWNoIGhhdmUgd2FpdGVkIGZvciBtb3JlIHRoYW4gMiBzZWNvbmRzICovCkBAIC02MTksNiAmIzQzOzYyMCwyMiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAkJaWYgKGVyciAmYW1wOyZhbXA7ICFkcm9wX3RzKQogCQkJY29udGludWU7CiAKJiM0MzsJCS8qIHZlcmlmeSByZWFkeSBiaXQgY2xlYXJlZCAqLwomIzQzOwkJaWYgKHR4LSZndDtoYXNfcmVhZHlfYml0bWFwKSB7CiYjNDM7CQkJZXJyID0gaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC0mZ3Q7YmxvY2ssICZhbXA7dHN0YW1wX3JlYWR5KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAodHN0YW1wX3JlYWR5ICZhbXA7IEJJVF9VTEwocGh5X2lkeCkpIHsKJiM0MzsJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCB0eC0mZ3Q7c3RhbGUpKQomIzQzOwkJCQkJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtQSFkgcG9ydCAldSBmYWlsZWQgdG8gY2xlYXIgcmVhZHkgYml0IGZvciBpZHggJXVcbiYjMzQ7LAomIzQzOwkJCQkJCXB0cF9wb3J0LSZndDtwb3J0X251bSwgcGh5X2lkeCk7CiYjNDM7CQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiAJCWljZV90cmFjZSh0eF90c3RhbXBfZndfZG9uZSwgdHgtJmd0O3RzdGFtcHNbaWR4XS5za2IsIGlkeCk7CiAKIAkJLyogRm9yIFBIWXMgd2hpY2ggZG9uJiMzOTt0IGltcGxlbWVudCBhIHByb3BlciB0aW1lc3RhbXAgcmVhZHkKQEAgLTY3MywyMCAmIzQzOzY5MCwzMyBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAlwZi0mZ3Q7cHRwLnR4X2h3dHN0YW1wX2dvb2QgJiM0Mzs9IHRzdGFtcF9nb29kOwogfQogCiYjNDM7c3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpCiYjNDM7ewomIzQzOwl3YWtlX3VwX3ZhcihyZWYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGljZV9wdHBfdHhfdHN0YW1wX293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKQogewogCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7CiAKLQltdXRleF9sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMsIGxpc3Rfbm9kZSkgewomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QsIGxpc3Rfbm9kZSkgewogCQlzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSAmYW1wO3BvcnQtJmd0O3R4OwogCi0JCWlmICghdHggfHwgIXR4LSZndDtpbml0KQomIzQzOwkJaWYgKCF0eC0mZ3Q7aW5pdCkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7cG9ydC0mZ3Q7cmVmKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCQlpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHR4KTsKJiM0MzsKJiM0MzsJCWtyZWZfcHV0KCZhbXA7cG9ydC0mZ3Q7cmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTcyNSw2ICYjNDM7NzU1LDM3IEBAIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZAomIzQzO2ljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcygxMCk7CiYjNDM7CXN0cnVjdCBpY2VfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiYjNDM7CXU2NCB0c3RhbXBfcmVhZHk7CiYjNDM7CWJvb2wgcGVuZGluZzsKJiM0MzsJdTggaWR4OwomIzQzOwomIzQzOwlpZiAoaHctJmd0O3Jlc2V0X29uZ29pbmcpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWlmIChpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LSZndDtibG9jaywgJmFtcDt0c3RhbXBfcmVhZHkpKQomIzQzOwkJCXJldHVybjsKJiM0MzsKJiM0MzsJCXBlbmRpbmcgPSBmYWxzZTsKJiM0MzsJCWZvcl9lYWNoX3NldF9iaXQoaWR4LCB0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKSB7CiYjNDM7CQkJaWYgKCEodHN0YW1wX3JlYWR5ICZhbXA7IEJJVF9VTEwoaWR4ICYjNDM7IHR4LSZndDtvZmZzZXQpKSkKJiM0MzsJCQkJcGVuZGluZyA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoIXBlbmRpbmcpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7CiYjNDM7CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7CiYjNDM7CiYjNDM7CWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIGluLWZsaWdodCBUeCB0aW1lc3RhbXBzIG9uIGJsb2NrICV1XG4mIzM0OywKJiM0MzsJCXR4LSZndDtibG9jayk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlcgogICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQpAQCAtNzQxLDYgJiM0Mzs4MDIsOCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAlpbnQgZXJyOwogCXU4IGlkeDsKIAomIzQzOwlpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4ocGYsIHR4KTsKJiM0MzsKIAllcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LSZndDtibG9jaywgJmFtcDt0c3RhbXBfcmVhZHkpOwogCWlmIChlcnIpIHsKIAkJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtGYWlsZWQgdG8gZ2V0IHRoZSBUeCB0c3RhbXAgcmVhZHkgYml0bWFwIGZvciBibG9jayAldSwgZXJyICVkXG4mIzM0OywKQEAgLTc3OSwxMiAmIzQzOzg0MiwxMCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKICAqIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlIC0gTWFyayB1bmZpbmlzaGVkIHRpbWVzdGFtcHMgYXMgc3RhbGUKICAqIEB0eDogdGhlIHRyYWNrZXIgdG8gbWFyawogICoKLSAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgc2VuZGluZwotICogdGhlaXIgdGltZXN0YW1wIHZhbHVlIHRvIHRoZSBzdGFjay4gVGhpcyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IGV4dGVuZGluZwotICogdGhlIDQwYml0IGhhcmR3YXJlIHRpbWVzdGFtcCBpbmNvcnJlY3RseS4KLSAqCi0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgUFRQIGNsb2NrIGlzIG1vZGlmaWVkIHN1Y2ggYXMgYWZ0ZXIgYSBzZXQKLSAqIHRpbWUgcmVxdWVzdC4KJiM0MzsgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXIKJiM0MzsgKiBmcm9tIHJlcG9ydGluZyB0aGUgdGltZXN0YW1wIHRvIHRoZSBzdGFjay4gVGhpcyBpcyBjYWxsZWQgdG8gaW5mb3JtIHRoZQomIzQzOyAqIGRyaXZlciB0aGF0IGEgdGltZXN0YW1wIGlzIGV4cGVjdGVkIHRvIGZhaWwgaWYgaXQgd2FzIGluaXRpYXRlZCBhcyB0aGUgbGluawomIzQzOyAqIHdlbnQgZG93bi4KICAqLwogc3RhdGljIHZvaWQKIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKQEAgLTgwOCw4ICYjNDM7ODY5LDE2IEBAIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpCiB7CiAJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMsIGxpc3Rfbm9kZSkKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihwdHBfcG9ydF90b19wZihwb3J0KSwgJmFtcDtwb3J0LSZndDt0eCk7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3BvcnQtJmd0O3JlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyoqCkBAIC05OTQsMTMgJiM0MzsxMDYzLDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9jYWNoZWRfcGhjdGltZShzdHJ1Y3QgaWNlX3BmICpwZikKIAkJa3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtJmd0O3B0cC5rd29ya2VyLCAmYW1wO3BmLSZndDtwdHAud29yaywKIAkJCQkJICAgbXNlY3NfdG9famlmZmllcygxMCkpOwogCX0KLQotCS8qIE1hcmsgYW55IG91dHN0YW5kaW5nIHRpbWVzdGFtcHMgYXMgc3RhbGUsIHNpbmNlIHRoZXkgbWlnaHQgaGF2ZQotCSAqIGJlZW4gY2FwdHVyZWQgaW4gaGFyZHdhcmUgYmVmb3JlIHRoZSB0aW1lIHVwZGF0ZS4gVGhpcyBjb3VsZCBsZWFkCi0JICogdG8gdXMgZXh0ZW5kaW5nIHRoZW0gd2l0aCB0aGUgd3JvbmcgY2FjaGVkIHZhbHVlIHJlc3VsdGluZyBpbgotCSAqIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLgotCSAqLwotCWljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKCZhbXA7cGYtJmd0O3B0cC5wb3J0LnR4KTsKIH0KIAogLyoqCkBAIC0xMTMzLDYgJiM0MzsxMTk1LDcgQEAgc3RhdGljIGludCBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8oc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCkKIHN0YXRpYyB2b2lkIGljZV9wdHBfd2FpdF9mb3Jfb2Zmc2V0cyhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKQogewogCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGljZV9wZiAqcGY7CiAJc3RydWN0IGljZV9odyAqaHc7CiAJaW50IHR4X2VycjsKQEAgLTExNTUsMTIgJiM0MzsxMjE4LDI4IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfd2FpdF9mb3Jfb2Zmc2V0cyhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKQogCQl0eF9lcnIgPSBpY2VfcGh5X2NmZ190eF9vZmZzZXRfZTgyeChodywgcG9ydC0mZ3Q7cG9ydF9udW0pOwogCXJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LSZndDtwb3J0X251bSk7CiAJaWYgKHR4X2VyciB8fCByeF9lcnIpIHsKLQkJLyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlciAqLwomIzQzOwkJLyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci4KJiM0MzsJCSAqIFRoaXMgaXMgZXhwZWN0ZWQgZHVyaW5nIG5vcm1hbCBsaW5rLXVwOiB0aGUgdmVybmllciBvZmZzZXQKJiM0MzsJCSAqIGNhbGlicmF0aW9uIGNhbm5vdCBjb21wbGV0ZSB1bnRpbCBhdCBsZWFzdCBvbmUgcGFja2V0IGhhcwomIzQzOwkJICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwKJiM0MzsJCQkmIzM0O1BUUCBvZmZzZXQgbm90IHlldCB2YWxpZCBmb3IgcG9ydCAldSAodHhfZXJyPSVkIHJ4X2Vycj0lZClcbiYjMzQ7LAomIzQzOwkJCXBvcnQtJmd0O3BvcnRfbnVtLCB0eF9lcnIsIHJ4X2Vycik7CiAJCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLSZndDtwdHAua3dvcmtlciwKIAkJCQkJICAgJmFtcDtwb3J0LSZndDtvdl93b3JrLAogCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwogCQlyZXR1cm47CiAJfQomIzQzOwomIzQzOwkvKiBUeCBhbmQgUnggb2Zmc2V0cyBhcmUgbm93IGNvbmZpZ3VyZWQsIGVuYWJsZSBUeCB0aW1lc3RhbXBzICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cG9ydC0mZ3Q7dHgubG9jaywgZmxhZ3MpOwomIzQzOwlwb3J0LSZndDt0eC5jYWxpYnJhdGluZyA9IGZhbHNlOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cG9ydC0mZ3Q7dHgubG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJJiMzNDtQVFAgb2Zmc2V0IHZhbGlkIGZvciBwb3J0ICV1LCBUeCB0aW1lc3RhbXBzIGVuYWJsZWRcbiYjMzQ7LAomIzQzOwkJcG9ydC0mZ3Q7cG9ydF9udW0pOwogfQogCiAvKioKQEAgLTEyNDMsMTMgJiM0MzsxMzIyLDIwIEBAIGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCkKIAogCQkvKiBTdGFydCB0aGUgUEhZIHRpbWVyIGluIFZlcm5pZXIgbW9kZSAqLwogCQllcnIgPSBpY2Vfc3RhcnRfcGh5X3RpbWVyX2U4MngoaHcsIHBvcnQpOwotCQlpZiAoZXJyKQomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHRwX3BvcnQtJmd0O3R4LmxvY2ssIGZsYWdzKTsKJiM0MzsJCQlwdHBfcG9ydC0mZ3Q7dHguY2FsaWJyYXRpbmcgPSBmYWxzZTsKJiM0MzsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHRwX3BvcnQtJmd0O3R4LmxvY2ssIGZsYWdzKTsKIAkJCWJyZWFrOwomIzQzOwkJfQogCi0JCS8qIEVuYWJsZSBUeCB0aW1lc3RhbXBzIHJpZ2h0IGF3YXkgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwdHBfcG9ydC0mZ3Q7dHgubG9jaywgZmxhZ3MpOwotCQlwdHBfcG9ydC0mZ3Q7dHguY2FsaWJyYXRpbmcgPSBmYWxzZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0cF9wb3J0LSZndDt0eC5sb2NrLCBmbGFncyk7CiYjNDM7CQkvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpbgomIzQzOwkJICogZGlzYWJsZWQgdW50aWwgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKCkgaGFzIHZlcmlmaWVkCiYjNDM7CQkgKiB0aGF0IHRoZSBUeCBhbmQgUnggb2Zmc2V0IGNhbGlicmF0aW9uIGhhcyBjb21wbGV0ZWQuCiYjNDM7CQkgKiBDbGVhcmluZyBpdCBoZXJlIHdvdWxkIGFsbG93IFR4IHRpbWVzdGFtcHMgdG8gYmUgcmVwb3J0ZWQKJiM0MzsJCSAqIGJlZm9yZSB0aGUgUEhZIG9mZnNldCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGxlYWRpbmcKJiM0MzsJCSAqIHRvIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLgomIzQzOwkJICovCiAKIAkJa3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtJmd0O3B0cC5rd29ya2VyLCAmYW1wO3B0cF9wb3J0LSZndDtvdl93b3JrLAogCQkJCQkgICAwKTsKQEAgLTEyODAsMTggJiM0MzsxMzY2LDIxIEBAIHZvaWQgaWNlX3B0cF9saW5rX2NoYW5nZShzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBsaW5rdXApCiAJc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQ7CiAJc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKIAotCWlmIChwZi0mZ3Q7cHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpCi0JCXJldHVybjsKLQogCXB0cF9wb3J0ID0gJmFtcDtwZi0mZ3Q7cHRwLnBvcnQ7CiAKIAkvKiBVcGRhdGUgY2FjaGVkIGxpbmsgc3RhdHVzIGZvciB0aGlzIHBvcnQgaW1tZWRpYXRlbHkgKi8KIAlwdHBfcG9ydC0mZ3Q7bGlua191cCA9IGxpbmt1cDsKIAomIzQzOwlpZiAocGYtJmd0O3B0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovCiAJaWYgKHBmLSZndDtody5yZXNldF9vbmdvaW5nKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCFsaW5rdXApCiYjNDM7CQlpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSgmYW1wO3B0cF9wb3J0LSZndDt0eCk7CiYjNDM7CiAJaWYgKGh3LSZndDttYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSAmYW1wOyZhbXA7CiAJICAgIHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLSZndDtmbGFncykpIHsKIAkJaW50IHBpbiwgZXJyOwpAQCAtMTQyNCwxNiAmIzQzOzE1MTMsMjEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHN0cnVjdCBpY2VfcGYgKnBmKQogICovCiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKJiM0MzsJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCWxpc3RfZm9yX2VhY2goZW50cnksICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKSB7Ci0JCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LAotCQkJCQkJICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsCi0JCQkJCQkgICAgICAgbGlzdF9ub2RlKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKHBvcnQtJmd0O2xpbmtfdXApCiAJCQlpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQocG9ydCk7CiYjNDM7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3BvcnQtJmd0O3JlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTI2NzgsNzQgJiM0MzsyNzcyLDU2IEBAIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3RzKHN0cnVjdCBpY2VfcGYgKnBmKQogCX0KIH0KIAotc3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4KQomIzQzO3N0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgYm9vbCBpbl9pcnEpCiB7Ci0JYm9vbCBtb3JlX3RpbWVzdGFtcHM7CiYjNDM7CURFQ0xBUkVfQklUTUFQKHRzdGFtcHMsIElOREVYX1BFUl9QT1JUX01BWCkgPSB7fTsKIAogCXNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCAmYW1wO3R4LSZndDtsb2NrKSB7CiAJCWlmICghdHgtJmd0O2luaXQpCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJbW9yZV90aW1lc3RhbXBzID0gIWJpdG1hcF9lbXB0eSh0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKTsKLQl9CiYjNDM7CQlpZiAoaW5faXJxKSB7CiYjNDM7CQkJaWYgKCFpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAodHgpKQomIzQzOwkJCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gbW9yZV90aW1lc3RhbXBzOwomIzQzOwkJCXJldHVybiBiaXRtYXBfYW5kbm90KHRzdGFtcHMsIHR4LSZndDtpbl91c2UsIHR4LSZndDtzdGFsZSwgdHgtJmd0O2xlbik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldHVybiAhYml0bWFwX2VtcHR5KHR4LSZndDtpbl91c2UsIHR4LSZndDtsZW4pOwomIzQzOwkJfQomIzQzOwl9CiB9CiAKLXN0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZikKJiM0MztzdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKQogewomIzQzOwlib29sIGhhdmVfdHN0YW1wcyA9IGZhbHNlOwogCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cywKLQkJCQkgICAgbGlzdF9ub2RlKSB7Ci0JCQlzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSAmYW1wO3BvcnQtJmd0O3R4OwotCi0JCQlpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHModHgpKQotCQkJCXJldHVybiB0cnVlOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QsIGxpc3Rfbm9kZSkgewomIzQzOwkJaWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKCZhbXA7cG9ydC0mZ3Q7dHgsIGluX2lycSkpIHsKJiM0MzsJCQloYXZlX3RzdGFtcHMgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwogCQl9CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJldHVybiBmYWxzZTsKJiM0MzsJcmV0dXJuIGhhdmVfdHN0YW1wczsKIH0KIAotYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZikKJiM0Mztib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSkKIHsKLQlzdHJ1Y3QgaWNlX2h3ICpodyA9ICZhbXA7cGYtJmd0O2h3OwotCWludCByZXQ7Ci0KLQkvKiBDaGVjayBzb2Z0d2FyZSBpbmRpY2F0b3IgKi8KIAlzd2l0Y2ggKHBmLSZndDtwdHAudHhfaW50ZXJydXB0X21vZGUpIHsKIAljYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX05PTkU6CiAJCXJldHVybiBmYWxzZTsKIAljYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX1NFTEY6Ci0JCWlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcygmYW1wO3BmLSZndDtwdHAucG9ydC50eCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJYnJlYWs7CiYjNDM7CQlyZXR1cm4gaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoJmFtcDtwZi0mZ3Q7cHRwLnBvcnQudHgsIGluX2lycSk7CiAJY2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9BTEw6Ci0JCWlmIChpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhwZiwgaW5faXJxKTsKIAlkZWZhdWx0OgogCQlXQVJOX09OQ0UoMSwgJiMzNDtVbmV4cGVjdGVkIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbW9kZSAldVxuJiMzNDssCiAJCQkgIHBmLSZndDtwdHAudHhfaW50ZXJydXB0X21vZGUpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBDaGVjayBoYXJkd2FyZSBpbmRpY2F0b3IgKi8KLQlyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7Ci0JaWYgKHJldCAmbHQ7IDApIHsKLQkJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtVbmFibGUgdG8gcmVhZCBQSFkgVHggdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXG4mIzM0OywKLQkJCXJldCk7Ci0JCS8qIFN0b3AgdHJpZ2dlcmluZyBJUlFzIGlmIHdlJiMzOTtyZSB1bmFibGUgdG8gcmVhZCBQSFkgKi8KIAkJcmV0dXJuIGZhbHNlOwogCX0KLQotCS8qIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KCkgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB0aW1lc3RhbXBzCi0JICogYXZhaWxhYmxlLCAwIGlmIHRoZXJlIGFyZSBubyB3YWl0aW5nIHRpbWVzdGFtcHMsIGFuZCBhIG5lZ2F0aXZlCi0JICogdmFsdWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yICh3aGljaCB3ZSBjaGVja2VkIGZvciBhYm92ZSkuCi0JICovCi0JcmV0dXJuIHJldCAmZ3Q7IDA7CiB9CiAKIC8qKgpAQCAtMjc5OSw3ICYjNDM7Mjg3NSw3IEBAIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKQogCQkvKiBFODMwIGNhbiByZWFkIHRpbWVzdGFtcHMgaW4gdGhlIHRvcCBoYWxmIHVzaW5nIHJkMzIoKSAqLwogCQlpY2VfcHRwX3Byb2Nlc3NfdHMocGYpOwogCi0JCWlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHsKJiM0MzsJCWlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHsKIAkJCS8qIFByb2Nlc3Mgb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcy4gSWYgdGhlcmUKIAkJCSAqIGlzIG1vcmUgd29yaywgcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBhZ2Fpbi4KIAkJCSAqLwpAQCAtMjgyOSw3ICYjNDM7MjkwNSw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7CiAJc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKLQlpbnQgcmV0OwogCiAJaWYgKCFwZi0mZ3Q7cHRwLnBvcnQudHguaGFzX3JlYWR5X2JpdG1hcCkKIAkJcmV0dXJuOwpAQCAtMjgzNywxMSAmIzQzOzI5MTIsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX21heWJlX3RyaWdnZXJfdHhfaW50ZXJydXB0KHN0cnVjdCBpY2VfcGYgKnBmKQogCWlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKQogCQlyZXR1cm47CiAKLQlyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7Ci0JaWYgKHJldCAmbHQ7IDApIHsKLQkJZGV2X2RiZyhkZXYsICYjMzQ7UFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxuJiMzNDssCi0JCQlyZXQpOwotCX0gZWxzZSBpZiAocmV0KSB7CiYjNDM7CWlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgZmFsc2UpIHx8CiYjNDM7CSAgICBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodykpIHsKIAkJZGV2X2RiZyhkZXYsICYjMzQ7UFRQIHBlcmlvZGljIHRhc2sgZGV0ZWN0ZWQgd2FpdGluZyB0aW1lc3RhbXBzLiBUcmlnZ2VyaW5nIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbm93LlxuJiMzNDspOwogCiAJCXdyMzIoaHcsIFBGSU5UX09JQ1IsIFBGSU5UX09JQ1JfVFNZTl9UWF9NKTsKQEAgLTI4OTAsMTQgJiM0MzsyOTYyLDE2IEBAIHZvaWQgaWNlX3B0cF9xdWV1ZV93b3JrKHN0cnVjdCBpY2VfcGYgKnBmKQogc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsCiAJCQkJCWVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwomIzQzOwlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0OwogCi0JbGlzdF9mb3JfZWFjaChlbnRyeSwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMpIHsKLQkJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCA9IGxpc3RfZW50cnkoZW50cnksCi0JCQkJCQkgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCwKLQkJCQkJCSAgICAgICBsaXN0X25vZGUpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QsIGxpc3Rfbm9kZSkgewogCQlzdHJ1Y3QgaWNlX3BmICpwZWVyX3BmID0gcHRwX3BvcnRfdG9fcGYocG9ydCk7CiAKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiAJCWlmICghaWNlX2lzX3ByaW1hcnkoJmFtcDtwZWVyX3BmLSZndDtodykpIHsKIAkJCWlmIChyZWJ1aWxkKSB7CiAJCQkJLyogVE9ETzogV2hlbiBpbXBsZW1lbnRpbmcgcmVidWlsZD10cnVlOgpAQCAtMjkwOSw3ICYjNDM7Mjk4MywxMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCwKIAkJCQlpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBlZXJfcGYsIHJlc2V0X3R5cGUpOwogCQkJfQogCQl9CiYjNDM7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3BvcnQtJmd0O3JlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTI5MzYsNiAmIzQzOzMwMTQsMTQgQEAgdm9pZCBpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSkKIAlpZiAocmVzZXRfdHlwZSA9PSBJQ0VfUkVTRVRfUEZSKQogCQlyZXR1cm47CiAKJiM0MzsJLyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGUKJiM0MzsJICogVHggdHJhY2tlci4gSWYgb3Zfd29yayBpcyBydW5uaW5nIGR1cmluZyByZXNldCwgaXQgbWF5IGlzc3VlCiYjNDM7CSAqIHNpZGViYW5kIHF1ZXVlIGNvbW1hbmRzIHRoYXQgd2lsbCBmYWlsIG9yIHRpbWVvdXQsIGFuZCBtYXkKJiM0MzsJICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLgomIzQzOwkgKi8KJiM0MzsJaWYgKGh3LSZndDttYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpCiYjNDM7CQlrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3B0cC0mZ3Q7cG9ydC5vdl93b3JrKTsKJiM0MzsKIAlpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpICZhbXA7JmFtcDsgaHctJmd0O21hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KQogCQlpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMocGYsIGZhbHNlLCByZXNldF90eXBlKTsKIApAQCAtMzA4NiwxMSAmIzQzOzMxNzIsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7cHRwLSZndDtwb3J0Lmxpc3Rfbm9kZSk7Ci0JbXV0ZXhfbG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKJiM0MzsJa3JlZl9pbml0KCZhbXA7cHRwLSZndDtwb3J0LnJlZik7CiAKLQlsaXN0X2FkZCgmYW1wO3B0cC0mZ3Q7cG9ydC5saXN0X25vZGUsCi0JCSAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cyk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CWxpc3RfYWRkX3JjdSgmYW1wO3B0cC0mZ3Q7cG9ydC5saXN0X25vZGUsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKIAogCS8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LgogCSAqIE9ubHkgbWVhbmluZ2Z1bCBvbiBFODI1IChvdGhlciBNQUMgdHlwZXMgZG9uJiMzOTt0IGV4cG9zZSB0eC1jbGsKQEAgLTMxMTMsMTIgJiM0MzszMTk5LDMyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHN0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKIAlzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gJmFtcDtwZi0mZ3Q7cHRwOwomIzQzOwlzdHJ1Y3Qga3JlZiAqcmVmOwogCi0JaWYgKHBmLSZndDtody5tYWNfdHlwZSAhPSBJQ0VfTUFDX1VOS05PV04pIHsKLQkJbXV0ZXhfbG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKLQkJbGlzdF9kZWwoJmFtcDtwdHAtJmd0O3BvcnQubGlzdF9ub2RlKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwotCX0KJiM0MzsJaWYgKHBmLSZndDtody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmcKJiM0MzsJICogb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byB0aGUgUFRQIHBvcnQuIFRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsCiYjNDM7CSAqIGZpcnN0IHJlbW92ZSB0aGUgcG9ydCBmcm9tIHRoZSBsaXN0LCB0aGVuIGRyb3AgdGhlIHByaW1hcnkKJiM0MzsJICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGwKJiM0MzsJICogZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gRmluYWxseSwgc3luY2hyb25pemVfcmN1KCkgdG8KJiM0MzsJICogZW5zdXJlIHRoYXQgYWxsIFJDVSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IG1pZ2h0IGF0dGVtcHQgdG8KJiM0MzsJICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwomIzQzOwlsaXN0X2RlbF9yY3UoJmFtcDtwdHAtJmd0O3BvcnQubGlzdF9ub2RlKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CiYjNDM7CXJlZiA9ICZhbXA7cHRwLSZndDtwb3J0LnJlZjsKJiM0MzsJa3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpOwomIzQzOwomIzQzOwlkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLAomIzQzOwkJICAgICAgJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgcG9ydCByZWZlcmVuY2VzIHRvIHJlbGVhc2UuIENvbnRpbnVpbmcgdG8gdW5sb2FkIGFueXdheXMuJiMzNDspOwomIzQzOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogLyoqCkBAIC0zMjEwLDkgJiM0MzszMzE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKQogfQogCiAvKioKLSAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayB0aHJlYWRzCiYjNDM7ICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIHRoZSBQVFAga3dvcmtlcgogICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHB0cDogUEYgUFRQIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZQomIzQzOyAqIHBlcmlvZGljIHdvcmsgaXMgbm90IHF1ZXVlZCBoZXJlOyB0aGUgY2FsbGVyIHN0YXJ0cyBpdCBvbmNlIHRoZSBQVFAKJiM0MzsgKiBzdGF0ZSBpcyBJQ0VfUFRQX1JFQURZLgogICovCiBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKQogewpAQCAtMzIzMSw5ICYjNDM7MzM0MSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApCiAKIAlwdHAtJmd0O2t3b3JrZXIgPSBrd29ya2VyOwogCi0JLyogU3RhcnQgcGVyaW9kaWMgd29yayBnb2luZyAqLwotCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC0mZ3Q7a3dvcmtlciwgJmFtcDtwdHAtJmd0O3dvcmssIDApOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNTUsNiAmIzQzOzM0NjIsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpCiAJaWYgKGVycikKIAkJZ290byBlcnJfY2xlYW5fcGY7CiAKJiM0MzsJLyogU2VlZCBsaW5rX3VwIGZyb20gY3VycmVudCBQSFkgc3RhdHVzLCBzaW5jZSBsaW5rIG1heSBhbHJlYWR5IGJlIHVwCiYjNDM7CSAqIChlLmcuIGFmdGVyIFBYRSBib290KSB3aXRoIG5vIGxpbmstY2hhbmdlIGVkZ2UgdG8gY2F0Y2ggaXQgbGF0ZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocGYtJmd0O2h3LnBvcnRfaW5mbykKJiM0MzsJCXB0cC0mZ3Q7cG9ydC5saW5rX3VwID0KJiM0MzsJCQkhIShwZi0mZ3Q7aHcucG9ydF9pbmZvLSZndDtwaHkubGlua19pbmZvLmxpbmtfaW5mbyAmYW1wOwomIzQzOwkJCUlDRV9BUV9MSU5LX1VQKTsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBrd29ya2VyIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBQSFksIHdoaWNoIHF1ZXVlcyB3b3JrIG9uCiYjNDM7CSAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzCiYjNDM7CSAqIGZyb20gcmVhY2hpbmcgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KCkgd2hpbGUga3dvcmtlciBpcyBzdGlsbCBOVUxMCiYjNDM7CSAqLwomIzQzOwllcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2V4aXQ7CiYjNDM7CiAJLyogU3RhcnQgdGhlIFBIWSB0aW1lc3RhbXBpbmcgYmxvY2sgKi8KIAlpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpOwogCkBAIC0zMzYzLDkgJiM0MzszNDg2LDEwIEBAIHZvaWQgaWNlX3B0cF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKQogCiAJcHRwLSZndDtzdGF0ZSA9IElDRV9QVFBfUkVBRFk7CiAKLQllcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9leGl0OwomIzQzOwkvKiBTdGFydCBwZXJpb2RpYyB3b3JrIG9ubHkgYWZ0ZXIgdGhlIHN0YXRlIGlzIFJFQURZOyB0aGUgd29ya2VyCiYjNDM7CSAqIHJldHVybnMgd2l0aG91dCByZXNjaGVkdWxpbmcgd2hpbGUgdGhlIHN0YXRlIGlzIG5vdCBSRUFEWS4KJiM0MzsJICovCiYjNDM7CWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC0mZ3Q7a3dvcmtlciwgJmFtcDtwdHAtJmd0O3dvcmssIDApOwogCiAJZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksICYjMzQ7UFRQIGluaXQgc3VjY2Vzc2Z1bFxuJiMzNDspOwogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oCmluZGV4IGM0YjBkYTdjZTIwZWQuLjEzMTU4YTkzMTlmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaApAQCAtNSw2ICYjNDM7NSw4IEBACiAjZGVmaW5lIF9JQ0VfUFRQX0hfCiAKICNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3JlZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2t0aHJlYWQuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpY2VfcHRwX2h3LmgmIzM0OwpAQCAtMTMwLDYgJiM0MzsxMzIsOSBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7CiAjZGVmaW5lIElOREVYX1BFUl9QT1JUX0U4MlgJCTE2CiAjZGVmaW5lIElOREVYX1BFUl9QT1JUCQkJNjQKIAomIzQzOy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzdGFtcCBpbmRleGVzIGFjcm9zcyBhbGwgZGV2aWNlcyAqLwomIzQzOyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVAomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IC0gZGF0YSB1c2VkIHRvIGluaXRpYWxpemUgYW4gZXh0ZXJuYWwgcG9ydCBmb3IgUFRQCiAgKgpAQCAtMTM4LDYgJiM0MzsxNDMsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7CiAgKiBhbmQgZGV0ZXJtaW5lIHdoZW4gdGhlIHBvcnQmIzM5O3MgUEhZIG9mZnNldCBpcyB2YWxpZC4KICAqCiAgKiBAbGlzdF9ub2RlOiBsaXN0IG1lbWJlciBzdHJ1Y3R1cmUKJiM0MzsgKiBAcmVmOiByZWZlcmVuY2UgY291bnRlciBmb3IgdXNlIHdpdGggYWRhcHRlciBwb3J0cyBsaXN0CiAgKiBAdHg6IFR4IHRpbWVzdGFtcCB0cmFja2luZyBmb3IgdGhpcyBwb3J0CiAgKiBAb3Zfd29yazogZGVsYXllZCB3b3JrIHRhc2sgZm9yIHRyYWNraW5nIHdoZW4gUEhZIG9mZnNldCBpcyB2YWxpZAogICogQHBzX2xvY2s6IG11dGV4IHVzZWQgdG8gcHJvdGVjdCB0aGUgb3ZlcmFsbCBQVFAgUEhZIHN0YXJ0IHByb2NlZHVyZQpAQCAtMTQ5LDYgJiM0MzsxNTUsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7CiAgKi8KIHN0cnVjdCBpY2VfcHRwX3BvcnQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOwomIzQzOwlzdHJ1Y3Qga3JlZiByZWY7CiAJc3RydWN0IGljZV9wdHBfdHggdHg7CiAJc3RydWN0IGt0aHJlYWRfZGVsYXllZF93b3JrIG92X3dvcms7CiAJc3RydWN0IG11dGV4IHBzX2xvY2s7IC8qIHByb3RlY3RzIG92ZXJhbGwgUFRQIFBIWSBzdGFydCBwcm9jZWR1cmUgKi8KQEAgLTMxMiw3ICYjNDM7MzE5LDcgQEAgdm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KTsKIHZvaWQgaWNlX3B0cF9jb21wbGV0ZV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCk7CiB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZik7CiBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZik7Ci1ib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKTsKJiM0Mztib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSk7CiB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLAogCQkJICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7CiAKQEAgLTM2MCw3ICYjNDM7MzY3LDggQEAgc3RhdGljIGlubGluZSBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZikKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0MztpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKaW5kZXggM2E0MWM3MTFlNzUxYi4uMTBlOTczODc2NjA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCkBAIC03MzcsMjQgJiM0Mzs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCwKIAlyZXR1cm4gaWNlX3JlYWRfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApOwogfQogCi0vKioKLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvbgotICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3QKLSAqIEBwb3J0OiBQb3J0IG51bWJlciB0byBiZSByZWFkCi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlCi0gKiBAdmFsOiBQb2ludGVyIHRvIHRoZSB2YWx1ZSB0byByZWFkIChvdXQgcGFyYW0pCi0gKgotICogUmV0dXJuOgotICogKiAlMCAgICAgIC0gc3VjY2VzcwotICogKiAlRUlOVkFMIC0gaW52YWxpZCBwb3J0IG51bWJlciBvciByZXNvdXJjZSB0eXBlCi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZCi0gKi8KLXN0YXRpYyBpbnQgaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCwKLQkJCQkgICAgIHUzMiB2YWwpCi17Ci0JcmV0dXJuIGljZV93cml0ZV9wb3J0X2V0aDU2ZyhodywgcG9ydCwgb2Zmc2V0LCB2YWwsIEVUSDU2R19QSFlfTUVNX1BUUCk7Ci19Ci0KIC8qKgogICogaWNlX3dyaXRlX3F1YWRfcHRwX3JlZ19ldGg1NmcgLSBXcml0ZSBhIFBIWSBxdWFkIHJlZ2lzdGVyCiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdApAQCAtMTEzOSw4ICYjNDM7MTEyMSw4IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCwKICAqIGludGVybmFsIFBIWXMgb2YgdGhlIDU2RyBkZXZpY2VzLgogICoKICAqIFRvIGRpcmVjdGx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgdGltZXN0YW1wIGJsb2NrIGVudGlyZWx5LCBkaXNjYXJkaW5nCi0gKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgdXNlCi0gKiBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9xdWFkX2V0aDU2ZygpLgomIzQzOyAqIGFsbCB0aW1lc3RhbXAgZGF0YSBhdCBvbmNlLCBzb2Z0d2FyZSBzaG91bGQgaW5zdGVhZCBwZXJmb3JtIGEgUEhZIHNvZnQKJiM0MzsgKiByZXNldCB2aWEgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhbiBpZHggd2hvc2UgYml0IGlzIHNldCBhY2NvcmRpbmcgdG8KICAqIGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeSgpLgpAQCAtMTE1MiwxMSAmIzQzOzExMzQsMTEgQEAgc3RhdGljIGludCBpY2VfcmVhZF9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4LAogc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCkKIHsKIAl1NjQgdW51c2VkX3RzdGFtcDsKLQl1MTYgbG9fYWRkcjsKIAlpbnQgZXJyOwogCi0JLyogUmVhZCB0aGUgdGltZXN0YW1wIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wIHN0YXR1cyBiaXQgaXMKLQkgKiBjbGVhcmVkLgomIzQzOwkvKiBQZXIgdGhlIFBIWSBzcGVjLCByZWFkaW5nIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uIGlzIHdoYXQKJiM0MzsJICogY2xlYXJzIHRoZSBlbnRyeSYjMzk7cyB2YWxpZCBiaXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIChyZWFkLW9ubHkpCiYjNDM7CSAqIHRzX21lbW9yeV9zdGF0dXMgYml0LgogCSAqLwogCWVyciA9IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgsICZhbXA7dW51c2VkX3RzdGFtcCk7CiAJaWYgKGVycikgewpAQCAtMTE2NCwzMiAmIzQzOzExNDYsNDAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCkKIAkJCSAgcG9ydCwgaWR4LCBlcnIpOwogCX0KIAotCWxvX2FkZHIgPSAodTE2KVBIWV9UU1RBTVBfTChpZHgpOwotCi0JZXJyID0gaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhodywgcG9ydCwgbG9fYWRkciwgMCk7Ci0JaWYgKGVycikgewotCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byBjbGVhciBsb3cgUFRQIHRpbWVzdGFtcCByZWdpc3RlciBmb3IgcG9ydCAldSwgaWR4ICV1LCBlcnIgJWRcbiYjMzQ7LAotCQkJICBwb3J0LCBpZHgsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnIC0gQ2xlYXIgYWxsIHRpbWVzdGFtcHMgZnJvbSB0aGUgcG9ydCBibG9jawomIzQzOyAqIGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1NmcgLSBSZXNldCBvbmUgcG9ydCYjMzk7cyBUeCB0aW1lc3RhbXAgbWVtb3J5CiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdAomIzQzOyAqIEBwb3J0OiBwb3J0IG51bWJlciB0byBjbGVhcgomIzQzOyAqCiYjNDM7ICogRnVsbHkgcmVzZXQgYSBzaW5nbGUgUEhZIHBvcnQmIzM5O3MgVHggdGltZXN0YW1wIG1lbW9yeS4gUGVyIHRoZSBQSFkgc3BlYywgdGhlCiYjNDM7ICogb25seSB3YXkgdG8gY2xlYXIgYSB0aW1lc3RhbXAgdmFsaWQgYml0IChhbmQgaXRzIHJlYWQtb25seSB0c19tZW1vcnlfc3RhdHVzCiYjNDM7ICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGUKJiM0MzsgKiBwb3J0ICh0d28gMzItYml0IHJlYWRzIGVhY2gpLiBUaGlzIGRpc2NhcmRzIGFsbCB0aW1lc3RhbXAgZGF0YSBvbiB0aGUgcG9ydCwKJiM0MzsgKiBzbyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBmb3IgYSBmdWxsIHJlc2V0OyBjYWxsZXJzIHRoYXQgbXVzdCBwcmVzZXJ2ZQomIzQzOyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS4KJiM0MzsgKgomIzQzOyAqIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCBhbiBpbnRlcm5hbCBIVyBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mCiYjNDM7ICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGUKJiM0MzsgKiBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpIHByb2NlZHVyZS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJuYWwgY291bnRlcgomIzQzOyAqIG1heSBiZWNvbWUgb3V0IG9mIHN5bmMgYW5kIHByZXZlbnQgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byByZWFkIHRoZSBQSFkuCiAgKi8KLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodykKJiM0MztzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpCiB7Ci0JdW5zaWduZWQgaW50IHBvcnQ7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwl1OCBpZHg7CiAKLQlmb3IgKHBvcnQgPSAwOyBwb3J0ICZsdDsgaHctJmd0O3B0cC5udW1fbHBvcnRzOyBwb3J0JiM0MzsmIzQzOykgewotCQlpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19MLAotCQkJCQkgMCk7Ci0JCWljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX1UsCi0JCQkJCSAwKTsKJiM0MzsJZm9yIChpZHggPSAwOyBpZHggJmx0OyBJTkRFWF9QRVJfUE9SVDsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjExNSwxMCAmIzQzOzIxMDUsNiBAQCBpbnQgaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgYm9vbCBzb2Z0X3Jlc2V0KQogewogCWludCBlcnI7CiAKLQllcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfT0ZGU0VUX1JFQURZLCAwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1JYX09GRlNFVF9SRUFEWSwgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTIxMzMsOSAmIzQzOzIxMTksMTEgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldCkKICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0CiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0CiAgKgotICogU3RhcnQgdGhlIGNsb2NrIG9mIGEgUEhZIHBvcnQuIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8KLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXMKLSAqIGluaXRpYWxpemVkIG9yIHdoZW4gbGluayBzcGVlZCBjaGFuZ2VzLgomIzQzOyAqIFBlcmZvcm0gYSBQSFkgc29mdCByZXNldCBhbmQgdGhlbiBzdGFydCB0aGUgY2xvY2sgZm9yIHRoZSBQSFkgcG9ydC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8gcmUtY2FsaWJyYXRlIFR4IGFuZCBSeAomIzQzOyAqIHRpbWVzdGFtcGluZyBvZmZzZXRzIHdoZW5ldmVyIHRoZSBjbG9jayB0aW1lIGlzIGluaXRpYWxpemVkIG9yIHdoZW4gbGluawomIzQzOyAqIHNwZWVkIGNoYW5nZXMuCiAgKgogICogUmV0dXJuOgogICogKiAlMCAgICAgLSBzdWNjZXNzCkBAIC0yMTUxLDYgJiM0MzsyMTM5LDEwIEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCkKIAogCXRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpOwogCiYjNDM7CWVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJZXJyID0gaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhodywgcG9ydCwgZmFsc2UpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMjk0LDYgJiM0MzsyMjg2LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cykKICAqCiAgKiBUcmlnZ2VyIGEgc29mdCByZXNldCBvZiB0aGUgRVRINTZHIFBIWSBieSB0b2dnbGluZyB0aGUgc29mdCByZXNldAogICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6CiYjNDM7ICogICAwLiBSZWFkaW5nIGV2ZXJ5IHRpbWVzdGFtcCBtZW1vcnkgcmVnaXN0ZXIgdG8gY2xlYXIgaXRzIHZhbGlkIGJpdAogICogICAxLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQKICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdAogICogICAzLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQgYWdhaW4KQEAgLTIzMDIsNiAmIzQzOzIyOTUsMTIgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cykKICAqIHRvIHNldHRsZS4gVGhpcyBwcm92aWRlcyBhIGNvbnRyb2xsZWQgd2F5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgUEhZCiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LgogICoKJiM0MzsgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUKJiM0MzsgKiBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMsIHJlYWQgZXZlcnkgdGltZXN0YW1wIGluZGV4IHByaW9yIHRvIHBlcmZvcm1pbmcKJiM0MzsgKiB0aGUgc29mdCByZXNldC4gVGhlIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyByZWFkcyBlbnN1cmUgdGhhdCB0aGUgcmVnaW9uCiYjNDM7ICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltc2V0YW1wCiYjNDM7ICogY291bnRlciBpcyByZXNldCB0byB6ZXJvLgomIzQzOyAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgd2hlbgogICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci4KICAqLwpAQCAtMjMxMCw2ICYjNDM7MjMwOSwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpCiAJdTMyIGdsb2JhbF92YWw7CiAJaW50IGVycjsKIAomIzQzOwllcnIgPSBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKGh3LCBwb3J0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgJiMzNDtGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCSAgcG9ydCwgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsICZhbXA7Z2xvYmFsX3ZhbCk7CiAJaWYgKGVycikgewogCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcbiYjMzQ7LApAQCAtNTgwMSw4ICYjNDM7NTgwNyw5IEBAIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnkoc3RydWN0IGljZV9odyAqaHcpCiAJCWljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2U4MngoaHcpOwogCQlicmVhazsKIAljYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OgotCQlpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpOwotCQlicmVhazsKJiM0MzsJCS8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZgomIzQzOwkJICogdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlLgomIzQzOwkJICovCiAJY2FzZSBJQ0VfTUFDX0U4MTA6CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAwMTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgaWNlYCBQVFAgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBgaWNlYCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgSW50ZWwmIzM5O3MgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlcnMuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIHByZXR0eSBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSByZXdvcmtpbmcgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgd2l0aGluIHRoZSBkcml2ZXIsIHNoaWZ0aW5nIGZyb20gbXV0ZXhlcyB0byBzcGlubG9ja3MgaW4gc29tZSBhcmVhcywgYW5kIG1ha2luZyBoZWF2eSB1c2Ugb2YgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggcG9ydHMsIHBhcnRpY3VsYXJseSBpbiBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIFRYIHRpbWVzdGFtcHMuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSB3YWl0IGZ1bmN0aW9uIHRvIGRyYWluIGluLWZsaWdodCB0aW1lc3RhbXBzLiBUaGVyZSYjMzk7cyBhbHNvIHNvbWUgUEhZIHJlc3RhcnQgbG9naWMgYmVpbmcgaGFuZGxlZCBoZXJlLiBUaGVyZSYjMzk7cyBzb21lIGNoYW5nZXMgdG8gdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLgoKVGhlIGNvZGUgbW9kaWZpZXMgdGhlIHRpbWVzdGFtcGluZyBsb2dpYywgbG9ja2luZyBtZWNoYW5pc21zIChtdXRleCB0byBzcGlubG9jay9SQ1UpLCBhbmQgUEhZIHJlc2V0IGxvZ2ljLgoKTXkgaW5pdGlhbCBjb25jZXJuIGlzbiYjMzk7dCBhYm91dCB0aGUgKmZ1bmN0aW9uYWxpdHkqIG9mIHRoZSBjaGFuZ2VzLCBidXQgd2hldGhlciB0aGlzIGNvbnN0aXR1dGVzIGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgcHJvbXB0IHNheXMgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGF0IHRoZSBgaWNlYCBkcml2ZXIsIHdoaWNoIGlzIHNwZWNpZmljIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcywgaXMgKm5vdCogdHlwaWNhbGx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCBsaWtlIHRoZSBgZTEwMDBgLCBgZTEwMDBlYCwgb3IgYGlnYmAgZHJpdmVycywgd2hpY2ggYXJlIGNvbW1vbmx5IGVtdWxhdGVkLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGBpY2VgIGRyaXZlciBtaWdodCBiZSBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZS4KClNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlYWNoZWQgYnkgYSBmdXp6ZXIgKmV2ZW4gaWYqIGl0IGlzIG5vdCBlbXVsYXRlZC4gU3l6a2FsbGVyLCBpbiBteSBleHBlcmllbmNlLCBoYXMgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLCBpbmNsdWRpbmcgc29tZSBwc2V1ZG8tc3lzY2FsbHMgdG8gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCBQQ0kgZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgZnV6emluZyBkZXB0aCByZWFjaCBpbnRvIHRoZSBpbnRyaWNhY2llcyBvZiBQVFAgbG9naWMgd2l0aGluIHRoZSBgaWNlYCBkcml2ZXI/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMgZm9yIHRoZSBgaWNlYCBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDE6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX3B0cF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyNjA0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGU9NDc9aWNlLSQoQ09ORklHX1BDSV9JT1YpICYjNDM7PVx0XFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNTYtXHRpY2VfdmZfbGliLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZTo1NzppY2UtJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0spICYjNDM7PSBpY2VfcHRwLm8gaWNlX3B0cF9ody5vIGljZV9kcGxsLm8gaWNlX3RzcGxsLm8gaWNlX2NwaS5vIGljZV90eGNsay5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNTgtaWNlLSQoQ09ORklHX0RDQikgJiM0Mzs9IGljZV9kY2IubyBpY2VfZGNiX25sLm8gaWNlX2RjYl9saWIub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaD02OTU9c3RhdGljIGlubGluZSBib29sIGljZV92ZWN0b3JfY2hfZW5hYmxlZChzdHJ1Y3QgaWNlX3FfdmVjdG9yICpxdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgtNzAwLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oOjcwMTogKiBpY2VfcHRwX3BmX2hhbmRsZXNfdHhfaW50ZXJydXB0IC0gQ2hlY2sgaWYgUEYgaGFuZGxlcyBUeCBpbnRlcnJ1cHRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC03MDItICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC03MDYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmg6NzA3OnN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfcHRwX3BmX2hhbmRsZXNfdHhfaW50ZXJydXB0KHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oLTcwOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy03LSNpbmNsdWRlIFwmIzM0O2ljZV9mbG93LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6ODojaW5jbHVkZSBcJiMzNDtpY2VfcHRwX2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9wYWNraW5nLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5jLTUtI2luY2x1ZGUgXCYjMzQ7aWNlX2NvbW1vbi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5jOjY6I2luY2x1ZGUgXCYjMzQ7aWNlX3B0cF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5jLTctI2luY2x1ZGUgXCYjMzQ7aWNlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5oLTctI2luY2x1ZGUgXCYjMzQ7aWNlX3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jcGkuaDo4OiNpbmNsdWRlIFwmIzM0O2ljZV9wdHBfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jcGkuaC05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQ4Nzk9c3RhdGljIHZvaWQgaWNlX2RwbGxfaW5pdF9lODI1KHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4ODYtXHQgKiBvdGhlcndpc2UgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIGRpdi1ieS16ZXJvIGluIGljZV90eGNsa19zZXRfY2xrKCkuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODg3Olx0ICogV2hlbiBQVFAgaXMgc3VwcG9ydGVkLCBpY2VfcHRwX2luaXQoKSBoYW5kbGVzIHRoaXMuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODg4LVx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODg5LVx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cdTAwM2VmbGFncykpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4OTA6XHRcdGljZV9wdHBfaW5pdF9odyhcdTAwMjZwZi1cdTAwM2Vodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODkxLVx0XHRpZiAocGYtXHUwMDNlaHcubGFuZV9udW0gXHUwMDNlPSAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jPTM3NTk9aWNlX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTM3NzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYzozNzcyOlx0aW5mby1cdTAwM2VwaGNfaW5kZXggPSBpY2VfcHRwX2Nsb2NrX2luZGV4KHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTM3NzMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTM2PWljZV9wcmVwYXJlX2Zvcl9yZXNldChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNjEwLVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjYxMTpcdFx0aWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZiwgcmVzZXRfdHlwZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy02MTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MTEwMz1pY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTE1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjExNTQ6XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTExNTUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MzA2MD1zdGF0aWMgaXJxcmV0dXJuX3QgaWNlX2xsX3RzX2ludHIoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA2My1cdHUzMiBwZl9pbnRyX3N0YXJ0X29mZnNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMwNjQ6XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHg7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMDY1LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMDczLVx0aWYgKHR4LVx1MDAzZWluaXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMwNzQ6XHRcdGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcCh0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMDc1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMwNzgtXHRcdGlmIChpZHggIT0gdHgtXHUwMDNlbGVuKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MzA3OTpcdFx0XHRpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHR4LCBpZHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA4MC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz0zMDk3PXN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbWlzY19pbnRyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMxODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMTgzOlx0XHRyZXQgPSBpY2VfcHRwX3RzX2lycShwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMTg0LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMxOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMTk5Olx0XHRcdGljZV9wdHBfZXh0dHNfZXZlbnQocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzIwMC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTMyMzQ9c3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHJfdGhyZWFkX2ZuKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMyNDQtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KElDRV9NSVNDX1RIUkVBRF9UWF9UU1RBTVAsIHBmLVx1MDAzZW1pc2NfdGhyZWFkKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMyNDU6XHRcdGljZV9wdHBfcHJvY2Vzc190cyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMjQ2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMyNTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMjUxOlx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzI1Mi1cdFx0LyogSWYgYW55IG5ldyBUeCB0aW1lc3RhbXBzIGhhcHBlbmVkIHdoaWxlIGluIGludGVycnVwdCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00MDY0PWludCBpY2VfdnNpX3JlY2ZnX3FzKHN0cnVjdCBpY2VfdnNpICp2c2ksIGludCBuZXdfcngsIGludCBuZXdfdHgsIGJvb2wgbG9ja2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQxMTEtXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUFRQX1NVUFBPUlRFRCwgcGYtXHUwMDNlZmxhZ3MpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDExMjpcdFx0aWNlX3B0cF9yZXN0b3JlX3RpbWVzdGFtcF9tb2RlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQxMTMtXHRnb3RvIGRvbmU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDcyMT1zdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzI5LVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ3MzA6XHRcdGljZV9wdHBfaW5pdChwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzMxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3NTc9c3RhdGljIHZvaWQgaWNlX2RlaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzY4LVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ3Njk6XHRcdGljZV9wdHBfcmVsZWFzZShwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzcwLVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLVx1MDAzZWZsYWdzKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz03NjQ1PXN0YXRpYyB2b2lkIGljZV9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NzUwLVx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVx1MDAzZWZsYWdzKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjc3NTE6XHRcdGljZV9wdHBfcmVidWlsZChwZiwgcmVzZXRfdHlwZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NzUyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc4MDAtXHRcdGlmIChwZi1cdTAwM2VwdHAucG9ydC5saW5rX3VwICE9IGxpbmtfdXApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3ODAxOlx0XHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgwMi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03ODIzLVx0LyogUmVzdG9yZSB0aW1lc3RhbXAgbW9kZSBzZXR0aW5ncyBhZnRlciBWU0kgcmVidWlsZCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NzgyNDpcdGljZV9wdHBfcmVzdG9yZV90aW1lc3RhbXBfbW9kZShwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03ODI1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgyNi1cdC8qIFN0YXJ0IFBUUCBwZXJpb2RpYyB3b3JrIGFmdGVyIFZTSSBpcyBmdWxseSByZWJ1aWx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3ODI3Olx0aWNlX3B0cF9xdWV1ZV93b3JrKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc4MjgtXHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9OTc5ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGljZV9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTk4MjktXHQubmRvX3hza193YWtldXAgPSBpY2VfeHNrX3dha2V1cCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjk4MzA6XHQubmRvX2h3dHN0YW1wX2dldCA9IGljZV9wdHBfaHd0c3RhbXBfZ2V0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6OTgzMTpcdC5uZG9faHd0c3RhbXBfc2V0ID0gaWNlX3B0cF9od3RzdGFtcF9zZXQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy05ODMyLX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMT1zdGF0aWMgY29uc3QgY2hhciBpY2VfcGluX25hbWVzW11bNjRdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjIwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3B0cF9waW5fZGVzYyBpY2VfcGluX2Rlc2NfZTgyeFtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMS1cdC8qIG5hbWUsICAgICAgICBncGlvLCAgICAgICBkZWxheSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX3B0cF9waW5fZGVzYyBpY2VfcGluX2Rlc2NfZTgyNWNbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjctXHQvKiBuYW1lLCAgICAgICAgZ3BpbywgICAgICAgZGVsYXkgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozNjpzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2U4MTBbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzctXHQvKiBuYW1lLCAgICAgICAgZ3BpbywgICAgICAgZGVsYXkgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTQ1PXN0YXRpYyBjb25zdCBjaGFyIGljZV9waW5fbmFtZXNfZHBsbFtdWzY0XSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1MjpzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2RwbGxbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTMtXHQvKiBuYW1lLCAgIGdwaW8sICAgICAgIGRlbGF5ICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz02MD1zdGF0aWMgc3RydWN0IGljZV9wdHAgKmljZV9nZXRfY3RybF9wdHAoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02Ny0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6Njg6ICogaWNlX3B0cF9maW5kX3Bpbl9pZHggLSBGaW5kIHBpbiBpbmRleCBpbiBwdHBfcGluX2Rlc2NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjktICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjc1OnN0YXRpYyBpbnQgaWNlX3B0cF9maW5kX3Bpbl9pZHgoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gcHRwX3Bpbl9mdW5jdGlvbiBmdW5jLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03Ni1cdFx0XHRcdHVuc2lnbmVkIGludCBjaGFuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTAtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjkxOiAqIGljZV9wdHBfY2ZnX3R4X2ludGVycnVwdCAtIENvbmZpZ3VyZSBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IGZvciB0aGUgZGV2aWNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkyLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk2LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5NzpzdGF0aWMgdm9pZCBpY2VfcHRwX2NmZ190eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTEzND1zdGF0aWMgdm9pZCBpY2Vfc2V0X3J4X3RzdGFtcChzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBvbilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE1MS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTUyOiAqIGljZV9wdHBfZGlzYWJsZV90aW1lc3RhbXBfbW9kZSAtIERpc2FibGUgY3VycmVudCB0aW1lc3RhbXAgbW9kZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNTMtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTU4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxNTk6c3RhdGljIHZvaWQgaWNlX3B0cF9kaXNhYmxlX3RpbWVzdGFtcF9tb2RlKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTcxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxNzI6ICogaWNlX3B0cF9yZXN0b3JlX3RpbWVzdGFtcF9tb2RlIC0gUmVzdG9yZSB0aW1lc3RhbXAgY29uZmlndXJhdGlvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNzMtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTc3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxNzg6dm9pZCBpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE3OS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjE4MzpcdGljZV9wdHBfY2ZnX3R4X2ludGVycnVwdChwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE4NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE5NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTk2OiAqIGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyAtIFJlYWQgdGhlIHNvdXJjZSBjbG9jayByZWdpc3RlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xOTctICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjAwLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyMDE6dTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjAyLVx0XHRcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI0NzogKiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMgLSBDb252ZXJ0IGEgMzJiIG5hbm9zZWNvbmRzIHRpbWVzdGFtcCB0byA2NGJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjQ4LSAqIEBjYWNoZWRfcGhjX3RpbWU6IHJlY2VudGx5IGNhY2hlZCBjb3B5IG9mIFBIQyB0aW1lXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yODMtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI4NDpzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzMyYl90cyh1NjQgY2FjaGVkX3BoY190aW1lLCB1MzIgaW5fdHN0YW1wKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yODUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzEzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozMTQ6ICogaWNlX3B0cF9leHRlbmRfNDBiX3RzIC0gQ29udmVydCBhIDQwYiB0aW1lc3RhbXAgdG8gNjRiIG5hbm9zZWNvbmRzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTMxNS0gKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zMzUtICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzM2OiAqIFNlZSBpY2VfcHRwX2V4dGVuZF8zMmJfdHMgZm9yIGEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhlIGV4dGVuc2lvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zMzctICogYWxnb3JpdGhtLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zMzgtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjMzOTpzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTY0IGluX3RzdGFtcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzQwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzUxOlx0cmV0dXJuIGljZV9wdHBfZXh0ZW5kXzMyYl90cyhSRUFEX09OQ0UocGYtXHUwMDNlcHRwLmNhY2hlZF9waGNfdGltZSksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM1Mi1cdFx0XHRcdCAgICAgKGluX3RzdGFtcCBcdTAwM2VcdTAwM2UgOCkgXHUwMDI2IG1hc2spO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzU1LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozNTY6ICogaWNlX3B0cF9pc190eF90cmFja2VyX3VwIC0gQ2hlY2sgaWYgVHggdHJhY2tlciBpcyByZWFkeSBmb3IgbmV3IHRpbWVzdGFtcHNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzU3LSAqIEB0eDogdGhlIFBUUCBUeCB0aW1lc3RhbXAgdHJhY2tlciB0byBjaGVja1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MzY0PXN0YXRpYyBib29sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM2NTppY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zNjYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozNjc6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydCA9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM2ODpcdFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM2OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM3NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6Mzc2OiAqIGljZV9wdHBfcmVxX3R4X3NpbmdsZV90c3RhbXAgLSBSZXF1ZXN0IFR4IHRpbWVzdGFtcCBmb3IgYSBwb3J0IGZyb20gRldcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzc3LSAqIEB0eDogdGhlIFBUUCBUeCB0aW1lc3RhbXAgdHJhY2tlclxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzc5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozODA6dm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zODEte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zODItXHRzdHJ1Y3QgaWNlX2U4MTBfcGFyYW1zICpwYXJhbXM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM4MzpcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zODQtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozOTE6XHRwdHBfcG9ydCA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGljZV9wdHBfcG9ydCwgdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zOTItXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHB0cF9wb3J0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQyMy0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NDI0OiAqIGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcCAtIENvbXBsZXRlIFR4IHRpbWVzdGFtcCBmb3IgYSBwb3J0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQyNS0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDI2LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo0Mjc6dm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00Mjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDMxLVx0c3RydWN0IGljZV9lODEwX3BhcmFtcyAqcGFyYW1zO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo0MzI6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDMzLVx0dTY0IHJhd190c3RhbXAsIHRzdGFtcDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQ0My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NDQ0Olx0cHRwX3BvcnQgPSBjb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDQ1LVx0cGYgPSBwdHBfcG9ydF90b19wZihwdHBfcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00OTktXHQvKiBFeHRlbmQgdGhlIHRpbWVzdGFtcCB1c2luZyBjYWNoZWQgUEhDIHRpbWUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTAwOlx0dHN0YW1wID0gaWNlX3B0cF9leHRlbmRfNDBiX3RzKHBmLCByYXdfdHN0YW1wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTAxLVx0aWYgKHRzdGFtcCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTEzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1MTQ6ICogaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCAtIFByb2Nlc3MgVHggdGltZXN0YW1wcyBmb3IgYSBwb3J0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxNS0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTU2MC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTYxOnN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy01NjIte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1NjM6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTY0LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTU3MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTcyOlx0cHRwX3BvcnQgPSBjb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTczLVx0cGYgPSBwdHBfcG9ydF90b19wZihwdHBfcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02NzYtXHRcdC8qIEV4dGVuZCB0aGUgdGltZXN0YW1wIHVzaW5nIGNhY2hlZCBQSEMgdGltZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2Nzc6XHRcdHRzdGFtcCA9IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhwZiwgcmF3X3RzdGFtcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTY3OC1cdFx0aWYgKHRzdGFtcCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2OTM6c3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTY5NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjY5ODpzdGF0aWMgdm9pZCBpY2VfcHRwX3R4X3RzdGFtcF9vd25lcihzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjk5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzAwOlx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzAxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzAzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzA0Olx0XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcdTAwMjZwb3J0LVx1MDAzZXR4O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MDUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjcxNDpcdFx0aWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCh0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzE2Olx0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzE3LVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MjItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjcyMzogKiBpY2VfcHRwX2FsbG9jX3R4X3RyYWNrZXIgLSBJbml0aWFsaXplIHRyYWNraW5nIGZvciBUeCB0aW1lc3RhbXBzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcyNC0gKiBAdHg6IFR4IHRyYWNraW5nIHN0cnVjdHVyZSB0byBpbml0aWFsaXplXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MjYtICogQXNzdW1lcyB0aGF0IHRoZSBsZW5ndGggaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4gRG8gbm90IGNhbGwgZGlyZWN0bHksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjcyNzogKiB1c2UgdGhlIGljZV9wdHBfaW5pdF90eF8qIGluc3RlYWQuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcyOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9NzI5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzMwOmljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTczMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz03NTg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzU5OmljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03NjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzg5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo3OTA6ICogaWNlX3B0cF9mbHVzaF90eF90cmFja2VyIC0gRmx1c2ggYW55IHJlbWFpbmluZyB0aW1lc3RhbXBzIGZyb20gdGhlIHRyYWNrZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzkxLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTc5Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo3OTc6aWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTc5OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04MDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjgwNTpcdGljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihwZiwgdHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04MDYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NDEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg0MjogKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg0My0gKiBAdHg6IHRoZSB0cmFja2VyIHRvIG1hcmtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTg1MD1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4NTE6aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NTIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODYwLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4NjE6ICogaWNlX3B0cF9mbHVzaF9hbGxfdHhfdHJhY2tlciAtIEZsdXNoIGFsbCB0aW1lc3RhbXAgdHJhY2tlcnMgb24gdGhpcyBjbG9ja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NjItICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9ODY3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg2ODppY2VfcHRwX2ZsdXNoX2FsbF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04Njkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4NzA6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NzEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NzYtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4Nzc6XHRcdGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihwdHBfcG9ydF90b19wZihwb3J0KSwgXHUwMDI2cG9ydC1cdTAwM2V0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg3ODpcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg3OS1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODg0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4ODU6ICogaWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIgLSBSZWxlYXNlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIFR4IHRyYWNrZXJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODg2LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTg5MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4OTI6aWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTAzOlx0aWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHBmLCB0eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkxNy0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTE4OiAqIGljZV9wdHBfaW5pdF90eF9lODJ4IC0gSW5pdGlhbGl6ZSB0cmFja2luZyBmb3IgVHggdGltZXN0YW1wc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05MTktICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTI5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5MzA6c3RhdGljIGludCBpY2VfcHRwX2luaXRfdHhfZTgyeChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05MzEtXHRcdFx0XHR1OCBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5Mzg6XHRyZXR1cm4gaWNlX3B0cF9hbGxvY190eF90cmFja2VyKHR4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTM5LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk0MS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTQyOiAqIGljZV9wdHBfaW5pdF90eCAtIEluaXRpYWxpemUgdHJhY2tpbmcgZm9yIFR4IHRpbWVzdGFtcHNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTQzLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk1MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTUyOnN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3R4KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IHBvcnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk1My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjk2NDpcdHJldHVybiBpY2VfcHRwX2FsbG9jX3R4X3RyYWNrZXIodHgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjUtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTY3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5Njg6ICogaWNlX3B0cF91cGRhdGVfY2FjaGVkX3BoY3RpbWUgLSBVcGRhdGUgdGhlIGNhY2hlZCBQSEMgdGltZSB2YWx1ZXNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTY5LSAqIEBwZjogQm9hcmQgc3BlY2lmaWMgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk4My0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTg0OnN0YXRpYyBpbnQgaWNlX3B0cF91cGRhdGVfY2FjaGVkX3BoY3RpbWUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk4NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDAxLVx0LyogUmVhZCB0aGUgY3VycmVudCBQSEMgdGltZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDAyOlx0c3lzdGltZSA9IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhwZiwgTlVMTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwMDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDMyLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDMzOiAqIGljZV9wdHBfcmVzZXRfY2FjaGVkX3BoY3RpbWUgLSBSZXNldCBjYWNoZWQgUEhDIHRpbWUgYWZ0ZXIgYW4gdXBkYXRlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwMzQtICogQHBmOiBCb2FyZCBzcGVjaWZpYyBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA0NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA0NTpzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDQ2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNTItXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA1MzpcdGVyciA9IGljZV9wdHBfdXBkYXRlX2NhY2hlZF9waGN0aW1lKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA1NC1cdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNjgtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEwNjk6ICogaWNlX3B0cF93cml0ZV9pbml0IC0gU2V0IFBIQyB0aW1lIHRvIHByb3ZpZGVkIHZhbHVlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNzAtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA3NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA3NTpzdGF0aWMgaW50IGljZV9wdHBfd3JpdGVfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDc2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEwODA6XHRyZXR1cm4gaWNlX3B0cF9pbml0X3RpbWUoaHcsIG5zKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA4MS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDgzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDg0OiAqIGljZV9wdHBfd3JpdGVfYWRqIC0gQWRqdXN0IFBIQyBjbG9jayB0aW1lIGF0b21pY2FsbHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA4NS0gKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDkwLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDkxOnN0YXRpYyBpbnQgaWNlX3B0cF93cml0ZV9hZGooc3RydWN0IGljZV9wZiAqcGYsIHMzMiBhZGopXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwOTIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA5NTpcdHJldHVybiBpY2VfcHRwX2Fkal9jbG9jayhodywgYWRqKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA5Ni19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMTA3PXN0YXRpYyB1NjQgaWNlX2Jhc2VfaW5jdmFsKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTEyMC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTEyMTogKiBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8gLSBDaGVjayB3aGV0aGVyIFR4IEZJRk8gaXMgaW4gYW4gT0sgc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTEyMi0gKiBAcG9ydDogUFRQIHBvcnQgZm9yIHdoaWNoIFR4IEZJRk8gaXMgY2hlY2tlZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTIzLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMTI0OnN0YXRpYyBpbnQgaWNlX3B0cF9jaGVja190eF9maWZvKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExMjUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE3MS1cdFx0XHRwb3J0LVx1MDAzZXBvcnRfbnVtLCBxdWFkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE3MjpcdFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfcXVhZF9lODJ4KGh3LCBxdWFkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE3My1cdFx0cG9ydC1cdTAwM2V0eF9maWZvX2J1c3lfY250ID0gRklGT19PSztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExODAtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjExODE6ICogaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzIC0gQ2hlY2sgZm9yIHZhbGlkIFR4IGFuZCBSeCBvZmZzZXRzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExODItICogQHdvcms6IFBvaW50ZXIgdG8gdGhlIGt0aHJlYWRfd29yayBzdHJ1Y3R1cmUgZm9yIHRoaXMgdGFza1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE5NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE5NTpzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE5Ni17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjExOTc6XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTk4LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyMDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEyMDQ6XHRwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpY2VfcHRwX3BvcnQsIG92X3dvcmsud29yayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyMDUtXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTIxNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTIxNjpcdHR4X2VyciA9IGljZV9wdHBfY2hlY2tfdHhfZmlmbyhwb3J0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTIxNy1cdGlmICghdHhfZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTI0NS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTI0NjogKiBpY2VfcHRwX3BvcnRfcGh5X3N0b3AgLSBTdG9wIHRpbWVzdGFtcGluZyBmb3IgYSBQSFkgcG9ydFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjQ3LSAqIEBwdHBfcG9ydDogUFRQIHBvcnQgdG8gc3RvcFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MTI0OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEyNTA6aWNlX3B0cF9wb3J0X3BoeV9zdG9wKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjUxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyODQtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEyODU6ICogaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0IC0gKFJlKXN0YXJ0IGFuZCBjYWxpYnJhdGUgUEhZIHRpbWVzdGFtcGluZ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjg2LSAqIEBwdHBfcG9ydDogUFRQIHBvcnQgZm9yIHdoaWNoIHRoZSBQSFkgc3RhcnQgaXMgc2V0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMjkyPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTI5MzppY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyOTQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTMwMS1cdGlmICghcHRwX3BvcnQtXHUwMDNlbGlua191cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTMwMjpcdFx0cmV0dXJuIGljZV9wdHBfcG9ydF9waHlfc3RvcChwdHBfcG9ydCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEzMDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMzMyLVx0XHQvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMzMzOlx0XHQgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTMzNC1cdFx0ICogdGhhdCB0aGUgVHggYW5kIFJ4IG9mZnNldCBjYWxpYnJhdGlvbiBoYXMgY29tcGxldGVkLlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTM1OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTM2MDogKiBpY2VfcHRwX2xpbmtfY2hhbmdlIC0gUmVjb25maWd1cmUgUFRQIGFmdGVyIGxpbmsgc3RhdHVzIGNoYW5nZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMzYxLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEzNjMtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEzNjQ6dm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cClcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTk3CgkJCQkJCQlvdXRwdXQ6IDk0CgkJCQkJCQl0aG91Z2h0czogMTM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogaWNlIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgdGFyZ2V0aW5nIHRoZSBgaWNlYCBkcml2ZXIsIHdoaWNoIEkga25vdyBpcyBmb3IgSW50ZWwmIzM5O3MgRTgwMCBzZXJpZXMgTklDcy4gVGhlIHByb2JsZW0gaXMsIFFFTVUsIHdoaWNoIGlzIG91ciBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBFODAwIHNlcmllcy4KCkkgd2FzIHRoaW5raW5nIGFib3V0IHRoZSBzeXprYWxsZXIgUENJIGZ1enplciwgd29uZGVyaW5nIGlmIGl0IGNvdWxkIHNvbWVob3cgcmVhY2ggaW50byB0aGUgYGljZWAgZHJpdmVyJiMzOTtzIFBUUCBsb2dpYy4gIEkgd2FzIGdvaW5nIHRvIHNlZSBpZiBzeXprYWxsZXIgZXZlbiBoYXMgYW55IGRlc2NyaXB0aW9ucyBmb3IgYGljZWAsIGJ1dCB0aGVuIEkgc2F3IHRoYXQgdGhlIHRvb2xzIEkgbmVlZCAoYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgKSBhcmVuJiMzOTt0IGFjdHVhbGx5IGF2YWlsYWJsZSB0byBtZSBoZXJlLiBJdCYjMzk7cyBhIGJpdCBvZiBhIHJlZCBoZXJyaW5nLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHVzZSBvdGhlciB0b29scy4KClRoZW4gSSByZS1yZWFkIHRoZSBwcm9tcHQmIzM5O3MgcnVsZXMgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCBzYXlzIHRvIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwYXRjaCBhZmZlY3RzICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsgIEkgaW1tZWRpYXRlbHkgdGhvdWdodCB0aGF0IGBpY2VgIGNvdWxkIGJlIGEgU21hcnROSUMsIGJ1dCBhZnRlciBzb21lIHJlZmxlY3Rpb24gaXQmIzM5O3MgYSBzdGFuZGFyZCBOSUMgdGhhdCBqdXN0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuCgpHaXZlbiB0aGF0IGBpY2VgIGlzIGFuIEV0aGVybmV0IGRyaXZlciBmb3IgdGhlIEludGVsIEU4MDAgc2VyaWVzIGFuZCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gUUVNVSwgaXQgbmVjZXNzaXRhdGVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIFRoZSBwcm9tcHQgZ2l2ZXMgc29tZSBleGFtcGxlcyBvZiBzaW1pbGFyIGRyaXZlcnMsIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gYGljZWAgaXNuJiMzOTt0IGxpc3RlZCwgYnV0IHRoZSBsb2dpYyBzdGlsbCBhcHBsaWVzOyBgaWNlYCBpc24mIzM5O3QgZW11bGF0ZWQgYW5kIHJlcXVpcmVzIGhhcmR3YXJlLgoKSSBrbm93IHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGVtdWxhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIGhhcmR3YXJlLiBJdCB1c2VzIGBlMTAwMGAsIGBlMTAwMGVgLCBgdmlydGlvLW5ldGAsIGV0Yy4gIFNvLCBpZiBgaWNlYCBpcyBub3QgZW11bGF0ZWQsIHRoZSBjb2RlIHBhdGhzIGFyZSBzaW1wbHkgaW5hY2Nlc3NpYmxlIGluIG91ciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuICBJIGNvbnNpZGVyZWQgdGhlIFBDSSBmdXp6ZXIgYWdhaW4gYnV0IHJlYWxpemVkIGl0JiMzOTtzIHVubGlrZWx5IHRvIHJlYWNoIGRlZXAgaW50byBjb21wbGV4IGRyaXZlciBsb2dpYyBsaWtlIHRoaXMsIGVzcGVjaWFsbHkgdGhlIFBUUCB0aW1lc3RhbXBpbmcsIFBIWSBvZmZzZXQgY2FsaWJyYXRpb24sIGFuZCBsaW5rIHN0YXRlIGNoYW5nZSBhc3BlY3RzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZy4KClRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdG8gcmV0dXJuIGBmYWxzZWAgaWYgdGhlIHBhdGNoIG1vZGlmaWVzICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIGBpY2VgIHJlcXVpcmVzIGEgcGh5c2ljYWwgUENJZSBjYXJkLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzYXlpbmcgdGhlIG1vZGlmaWVkIGNvZGUgaXMgdW5yZWFjaGFibGUuCgpJIGFsc28gY2hlY2tlZCBRRU1VJiMzOTtzIHN1cHBvcnRlZCBuZXR3b3JrIGRldmljZXMgYW5kIGNvbmZpcm1lZCB0aGVyZSYjMzk7cyBubyBgaWNlYCwgYGk0MGVgLCBvciBgaXhnYmVgIGVtdWxhdGlvbi4gQWxsIG9mIHRoZSBjaGFuZ2VzIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LgoKVGh1cywgdGhlIHBhdGNoIGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGBpY2VgIGRyaXZlciwgYSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3Qgc3VwcG9ydGVkIGJ5IHN0YW5kYXJkIFFFTVUuICBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSSYjMzk7bGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBQVFAgdGltZXN0YW1waW5nIGFuZCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBQVFAgdGltZXN0YW1waW5nIGFuZCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDAxOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMTowOTozOC40NzgzMzE4NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU2OTM1MzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBkcml2ZXIgKGljZSkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIFBUUCB0aW1lc3RhbXBpbmcgYW5kIFBIWSBvZmZzZXQgY2FsaWJyYXRpb24pIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgdmlydHVhbGl6ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjA5OjM4LjQ3ODMzNzg3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTUyOTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEwNmIwMDRkY2QwMzQ2YmFlNTdiYjc0ODhjN2U0NzExMTM4MDJmOTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDE6MDk6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xcbmluZGV4IDJkYzM2MjlkNmQwZjYuLmQxNjQzYmY4YTFiNTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xcbkBAIC02NiwxOCArNjYsMTcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xcbiBcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXJlZmNvdW50LCAxKTtcXG4gXFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0KTtcXG4gXFxuIFxcdHJldHVybiBhZGFwdGVyO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpY2VfYWRhcHRlcl9mcmVlKHN0cnVjdCBpY2VfYWRhcHRlciAqYWRhcHRlcilcXG4ge1xcbi1cXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5wb3J0cykpO1xcbitcXHRXQVJOX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0KSk7XFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShhZGFwdGVyLVxcdTAwM2VjcGlfcGh5X2xvY2spOyBpKyspXFxuIFxcdFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XFxuLVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbiBcXG4gXFx0a2ZyZWUoYWRhcHRlcik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxcbmluZGV4IDRmNjk1ZjMyZGEzZDguLjM5OTIzZGVkZDUzNGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxcbkBAIC0xOSwxMyArMTksMTMgQEAgc3RydWN0IGljZV9wZjtcXG4gICpcXG4gICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgZGF0YSB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBhZGFwdGVyIHBvcnRzXFxuICAqXFxuLSAqIEBwb3J0czogbGlzdCBvZiBwb3J0c1xcbisgKiBAbGlzdDogbGlzdCBvZiBwb3J0c1xcbiAgKiBAbG9jazogcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIHBvcnRzIGxpc3RcXG4gICovXFxuIHN0cnVjdCBpY2VfcG9ydF9saXN0IHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBwb3J0cztcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbiBcXHQvKiBUbyBzeW5jaHJvbml6ZSB0aGUgcG9ydHMgbGlzdCBvcGVyYXRpb25zICovXFxuLVxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbitcXHRzcGlubG9ja190IGxvY2s7XFxuIH07XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbmluZGV4IGQ4ODgzNTQ4MmQzYWEuLmM4NGQ2M2I4ZDI2MWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xcbkBAIC0zMjQ4LDcgKzMyNDgsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21pc2NfaW50cl90aHJlYWRfZm4oaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuIFxcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xcbiBcXHRpY2VfZmx1c2goaHcpO1xcbiBcXG4tXFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkge1xcbitcXHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XFxuIFxcdFxcdC8qIElmIGFueSBuZXcgVHggdGltZXN0YW1wcyBoYXBwZW5lZCB3aGlsZSBpbiBpbnRlcnJ1cHQsXFxuIFxcdFxcdCAqIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgaXQgYWdhaW4uXFxuIFxcdFxcdCAqL1xcbkBAIC02NzQ1LDcgKzY3NDUsNiBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHRpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTtcXG4gXFx0XFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktXFx1MDAzZW5ldGRldik7XFxuIFxcdFxcdG5ldGlmX2NhcnJpZXJfb24odnNpLVxcdTAwM2VuZXRkZXYpO1xcbi1cXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCB0cnVlKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUGVyZm9ybSBhbiBpbml0aWFsIHJlYWQgb2YgdGhlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIG5vdyB0b1xcbkBAIC03MjczLDcgKzcyNzIsNiBAQCBpbnQgaWNlX2Rvd24oc3RydWN0IGljZV92c2kgKnZzaSlcXG4gXFxuIFxcdGlmICh2c2ktXFx1MDAzZW5ldGRldikge1xcbiBcXHRcXHR2bGFuX2VyciA9IGljZV92c2lfZGVsX3ZsYW5femVybyh2c2kpO1xcbi1cXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHZzaS1cXHUwMDNlYmFjaywgZmFsc2UpO1xcbiBcXHRcXHRuZXRpZl9jYXJyaWVyX29mZih2c2ktXFx1MDAzZW5ldGRldik7XFxuIFxcdFxcdG5ldGlmX3R4X2Rpc2FibGUodnNpLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHR9XFxuQEAgLTc3OTQsNiArNzc5MiwxNSBAQCBzdGF0aWMgdm9pZCBpY2VfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuIFxcbiBcXHRpY2VfdXBkYXRlX3BmX25ldGRldl9saW5rKHBmKTtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2IHBmLVxcdTAwM2Vody5wb3J0X2luZm8pIHtcXG4rXFx0XFx0Ym9vbCBsaW5rX3VwO1xcbitcXG4rXFx0XFx0bGlua191cCA9ICEhKHBmLVxcdTAwM2Vody5wb3J0X2luZm8tXFx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBJQ0VfQVFfTElOS19VUCk7XFxuK1xcdFxcdGlmIChwZi1cXHUwMDNlcHRwLnBvcnQubGlua191cCAhPSBsaW5rX3VwKVxcbitcXHRcXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXFxuIFxcdGVyciA9IGljZV9zZW5kX3ZlcnNpb24ocGYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuaW5kZXggZWFlYzM2YWI2YWUzZi4uMGU0NGVkNmIwYWU4ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xcbkBAIC0xLDYgKzEsOCBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpY2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9saWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV90cmFjZS5oXFxcIlxcbkBAIC0zNjIsOSArMzY0LDEyIEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxcbiBzdGF0aWMgYm9vbFxcbiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiB7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XFxuK1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ0eC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRyZXR1cm4gdHgtXFx1MDAzZWluaXQgXFx1MDAyNlxcdTAwMjYgIXR4LVxcdTAwM2VjYWxpYnJhdGluZztcXG4rXFx0cmV0dXJuIHR4LVxcdTAwM2Vpbml0IFxcdTAwMjZcXHUwMDI2ICF0eC1cXHUwMDNlY2FsaWJyYXRpbmcgXFx1MDAyNlxcdTAwMjYgcHRwX3BvcnQtXFx1MDAzZWxpbmtfdXA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC01NjEsNyArNTY2LDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG4gXFx0dTY0IHRzdGFtcF9yZWFkeTtcXG4tXFx0Ym9vbCBsaW5rX3VwO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHR1OCBpZHg7XFxuIFxcbkBAIC01NjksNyArNTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xcbiBcXHRodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcbi1cXHRpZiAoIXR4LVxcdTAwM2Vpbml0KVxcbitcXHRpZiAoIXR4LVxcdTAwM2Vpbml0IHx8IGJpdG1hcF9lbXB0eSh0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlbGVuKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXFxuQEAgLTU3OSwxNCArNTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdC8qIERyb3AgcGFja2V0cyBpZiB0aGUgbGluayB3ZW50IGRvd24gKi9cXG4tXFx0bGlua191cCA9IHB0cF9wb3J0LVxcdTAwM2VsaW5rX3VwO1xcbi1cXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VsZW4pIHtcXG4gXFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XFxuIFxcdFxcdHU4IHBoeV9pZHggPSBpZHggKyB0eC1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHR1NjQgcmF3X3RzdGFtcCA9IDAsIHRzdGFtcDtcXG4tXFx0XFx0Ym9vbCBkcm9wX3RzID0gIWxpbmtfdXA7XFxuK1xcdFxcdGJvb2wgZHJvcF90cyA9IGZhbHNlO1xcbiBcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG4gXFx0XFx0LyogRHJvcCBwYWNrZXRzIHdoaWNoIGhhdmUgd2FpdGVkIGZvciBtb3JlIHRoYW4gMiBzZWNvbmRzICovXFxuQEAgLTYxOSw2ICs2MjAsMjIgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIWRyb3BfdHMpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0LyogdmVyaWZ5IHJlYWR5IGJpdCBjbGVhcmVkICovXFxuK1xcdFxcdGlmICh0eC1cXHUwMDNlaGFzX3JlYWR5X2JpdG1hcCkge1xcbitcXHRcXHRcXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVxcdTAwM2VibG9jaywgXFx1MDAyNnRzdGFtcF9yZWFkeSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0aWYgKHRzdGFtcF9yZWFkeSBcXHUwMDI2IEJJVF9VTEwocGh5X2lkeCkpIHtcXG4rXFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdGlmICghdGVzdF9hbmRfc2V0X2JpdChpZHgsIHR4LVxcdTAwM2VzdGFsZSkpXFxuK1xcdFxcdFxcdFxcdFxcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFxcXCJQSFkgcG9ydCAldSBmYWlsZWQgdG8gY2xlYXIgcmVhZHkgYml0IGZvciBpZHggJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHB0cF9wb3J0LVxcdTAwM2Vwb3J0X251bSwgcGh5X2lkeCk7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnR4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGljZV90cmFjZSh0eF90c3RhbXBfZndfZG9uZSwgdHgtXFx1MDAzZXRzdGFtcHNbaWR4XS5za2IsIGlkeCk7XFxuIFxcbiBcXHRcXHQvKiBGb3IgUEhZcyB3aGljaCBkb24ndCBpbXBsZW1lbnQgYSBwcm9wZXIgdGltZXN0YW1wIHJlYWR5XFxuQEAgLTY3MywyMCArNjkwLDMzIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRwZi1cXHUwMDNlcHRwLnR4X2h3dHN0YW1wX2dvb2QgKz0gdHN0YW1wX2dvb2Q7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdShzdHJ1Y3Qga3JlZiAqcmVmKVxcbit7XFxuK1xcdHdha2VfdXBfdmFyKHJlZik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGljZV9wdHBfdHhfdHN0YW1wX293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4gXFx0XFx0c3RydWN0IGljZV9wdHBfdHggKnR4ID0gXFx1MDAyNnBvcnQtXFx1MDAzZXR4O1xcbiBcXG4tXFx0XFx0aWYgKCF0eCB8fCAhdHgtXFx1MDAzZWluaXQpXFxuK1xcdFxcdGlmICghdHgtXFx1MDAzZWluaXQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuIFxcdFxcdGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAodHgpO1xcbitcXG4rXFx0XFx0a3JlZl9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR9XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTcyNSw2ICs3NTUsMzcgQEAgaWNlX3B0cF9hbGxvY190eF90cmFja2VyKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkXFxuK2ljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCk7XFxuK1xcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4rXFx0dTY0IHRzdGFtcF9yZWFkeTtcXG4rXFx0Ym9vbCBwZW5kaW5nO1xcbitcXHR1OCBpZHg7XFxuK1xcbitcXHRpZiAoaHctXFx1MDAzZXJlc2V0X29uZ29pbmcpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtXFx1MDAzZWJsb2NrLCBcXHUwMDI2dHN0YW1wX3JlYWR5KSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0cGVuZGluZyA9IGZhbHNlO1xcbitcXHRcXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXFx1MDAzZWluX3VzZSwgdHgtXFx1MDAzZWxlbikge1xcbitcXHRcXHRcXHRpZiAoISh0c3RhbXBfcmVhZHkgXFx1MDAyNiBCSVRfVUxMKGlkeCArIHR4LVxcdTAwM2VvZmZzZXQpKSlcXG4rXFx0XFx0XFx0XFx0cGVuZGluZyA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKCFwZW5kaW5nKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTtcXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcXG4rXFxuK1xcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW4tZmxpZ2h0IFR4IHRpbWVzdGFtcHMgb24gYmxvY2sgJXVcXFxcblxcXCIsXFxuK1xcdFxcdHR4LVxcdTAwM2VibG9jayk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlclxcbiAgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuQEAgLTc0MSw2ICs4MDIsOCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG4gXFx0aW50IGVycjtcXG4gXFx0dTggaWR4O1xcbiBcXG4rXFx0aWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHBmLCB0eCk7XFxuK1xcbiBcXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVxcdTAwM2VibG9jaywgXFx1MDAyNnRzdGFtcF9yZWFkeSk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIkZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcXFxcblxcXCIsXFxuQEAgLTc3OSwxMiArODQyLDEwIEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiAgKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXFxuICAqIEB0eDogdGhlIHRyYWNrZXIgdG8gbWFya1xcbiAgKlxcbi0gKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHNlbmRpbmdcXG4tICogdGhlaXIgdGltZXN0YW1wIHZhbHVlIHRvIHRoZSBzdGFjay4gVGhpcyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IGV4dGVuZGluZ1xcbi0gKiB0aGUgNDBiaXQgaGFyZHdhcmUgdGltZXN0YW1wIGluY29ycmVjdGx5Llxcbi0gKlxcbi0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgUFRQIGNsb2NrIGlzIG1vZGlmaWVkIHN1Y2ggYXMgYWZ0ZXIgYSBzZXRcXG4tICogdGltZSByZXF1ZXN0LlxcbisgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXJcXG4rICogZnJvbSByZXBvcnRpbmcgdGhlIHRpbWVzdGFtcCB0byB0aGUgc3RhY2suIFRoaXMgaXMgY2FsbGVkIHRvIGluZm9ybSB0aGVcXG4rICogZHJpdmVyIHRoYXQgYSB0aW1lc3RhbXAgaXMgZXhwZWN0ZWQgdG8gZmFpbCBpZiBpdCB3YXMgaW5pdGlhdGVkIGFzIHRoZSBsaW5rXFxuKyAqIHdlbnQgZG93bi5cXG4gICovXFxuIHN0YXRpYyB2b2lkXFxuIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG5AQCAtODA4LDggKzg2OSwxNiBAQCBpY2VfcHRwX2ZsdXNoX2FsbF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMsIGxpc3Rfbm9kZSlcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xcbitcXHRcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihwdHBfcG9ydF90b19wZihwb3J0KSwgXFx1MDAyNnBvcnQtXFx1MDAzZXR4KTtcXG4rXFx0XFx0a3JlZl9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtOTk0LDEzICsxMDYzLDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9jYWNoZWRfcGhjdGltZShzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXFx1MDAzZXB0cC5rd29ya2VyLCBcXHUwMDI2cGYtXFx1MDAzZXB0cC53b3JrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBtc2Vjc190b19qaWZmaWVzKDEwKSk7XFxuIFxcdH1cXG4tXFxuLVxcdC8qIE1hcmsgYW55IG91dHN0YW5kaW5nIHRpbWVzdGFtcHMgYXMgc3RhbGUsIHNpbmNlIHRoZXkgbWlnaHQgaGF2ZVxcbi1cXHQgKiBiZWVuIGNhcHR1cmVkIGluIGhhcmR3YXJlIGJlZm9yZSB0aGUgdGltZSB1cGRhdGUuIFRoaXMgY291bGQgbGVhZFxcbi1cXHQgKiB0byB1cyBleHRlbmRpbmcgdGhlbSB3aXRoIHRoZSB3cm9uZyBjYWNoZWQgdmFsdWUgcmVzdWx0aW5nIGluXFxuLVxcdCAqIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLlxcbi1cXHQgKi9cXG4tXFx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydC50eCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xMTMzLDYgKzExOTUsNyBAQCBzdGF0aWMgaW50IGljZV9wdHBfY2hlY2tfdHhfZmlmbyhzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0KVxcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZjtcXG4gXFx0c3RydWN0IGljZV9odyAqaHc7XFxuIFxcdGludCB0eF9lcnI7XFxuQEAgLTExNTUsMTIgKzEyMTgsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuIFxcdFxcdHR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LVxcdTAwM2Vwb3J0X251bSk7XFxuIFxcdHJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LVxcdTAwM2Vwb3J0X251bSk7XFxuIFxcdGlmICh0eF9lcnIgfHwgcnhfZXJyKSB7XFxuLVxcdFxcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIgKi9cXG4rXFx0XFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci5cXG4rXFx0XFx0ICogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgbm9ybWFsIGxpbmstdXA6IHRoZSB2ZXJuaWVyIG9mZnNldFxcbitcXHRcXHQgKiBjYWxpYnJhdGlvbiBjYW5ub3QgY29tcGxldGUgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBoYXNcXG4rXFx0XFx0ICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdFxcXCJQVFAgb2Zmc2V0IG5vdCB5ZXQgdmFsaWQgZm9yIHBvcnQgJXUgKHR4X2Vycj0lZCByeF9lcnI9JWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwb3J0LVxcdTAwM2Vwb3J0X251bSwgdHhfZXJyLCByeF9lcnIpO1xcbiBcXHRcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cXHUwMDNlcHRwLmt3b3JrZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZwb3J0LVxcdTAwM2Vvdl93b3JrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4rXFxuK1xcdC8qIFR4IGFuZCBSeCBvZmZzZXRzIGFyZSBub3cgY29uZmlndXJlZCwgZW5hYmxlIFR4IHRpbWVzdGFtcHMgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBvcnQtXFx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcXG4rXFx0cG9ydC1cXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSxcXG4rXFx0XFx0XFxcIlBUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxcXFxuXFxcIixcXG4rXFx0XFx0cG9ydC1cXHUwMDNlcG9ydF9udW0pO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTI0MywxMyArMTMyMiwyMCBAQCBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXFxuIFxcbiBcXHRcXHQvKiBTdGFydCB0aGUgUEhZIHRpbWVyIGluIFZlcm5pZXIgbW9kZSAqL1xcbiBcXHRcXHRlcnIgPSBpY2Vfc3RhcnRfcGh5X3RpbWVyX2U4MngoaHcsIHBvcnQpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRwdHBfcG9ydC1cXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRwX3BvcnQtXFx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdC8qIEVuYWJsZSBUeCB0aW1lc3RhbXBzIHJpZ2h0IGF3YXkgKi9cXG4tXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnB0cF9wb3J0LVxcdTAwM2V0eC5sb2NrLCBmbGFncyk7XFxuLVxcdFxcdHB0cF9wb3J0LVxcdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbitcXHRcXHQvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpblxcbitcXHRcXHQgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWRcXG4rXFx0XFx0ICogdGhhdCB0aGUgVHggYW5kIFJ4IG9mZnNldCBjYWxpYnJhdGlvbiBoYXMgY29tcGxldGVkLlxcbitcXHRcXHQgKiBDbGVhcmluZyBpdCBoZXJlIHdvdWxkIGFsbG93IFR4IHRpbWVzdGFtcHMgdG8gYmUgcmVwb3J0ZWRcXG4rXFx0XFx0ICogYmVmb3JlIHRoZSBQSFkgb2Zmc2V0IHJlZ2lzdGVycyBhcmUgY29uZmlndXJlZCwgbGVhZGluZ1xcbitcXHRcXHQgKiB0byBpbmNvcnJlY3QgdGltZXN0YW1wIHZhbHVlcy5cXG4rXFx0XFx0ICovXFxuIFxcbiBcXHRcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cXHUwMDNlcHRwLmt3b3JrZXIsIFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNlb3Zfd29yayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgMCk7XFxuQEAgLTEyODAsMTggKzEzNjYsMjEgQEAgdm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cClcXG4gXFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQ7XFxuIFxcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHB0cF9wb3J0ID0gXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydDtcXG4gXFxuIFxcdC8qIFVwZGF0ZSBjYWNoZWQgbGluayBzdGF0dXMgZm9yIHRoaXMgcG9ydCBpbW1lZGlhdGVseSAqL1xcbiBcXHRwdHBfcG9ydC1cXHUwMDNlbGlua191cCA9IGxpbmt1cDtcXG4gXFxuK1xcdGlmIChwZi1cXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovXFxuIFxcdGlmIChwZi1cXHUwMDNlaHcucmVzZXRfb25nb2luZylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKCFsaW5rdXApXFxuK1xcdFxcdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNldHgpO1xcbitcXG4gXFx0aWYgKGh3LVxcdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgdGVzdF9iaXQoSUNFX0ZMQUdfRFBMTCwgcGYtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRpbnQgcGluLCBlcnI7XFxuQEAgLTE0MjQsMTYgKzE1MTMsMjEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiAgKi9cXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9yZXN0YXJ0X2FsbF9waHkoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKSB7XFxuLVxcdFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGxpc3Rfbm9kZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0XFx0aWYgKHBvcnQtXFx1MDAzZWxpbmtfdXApXFxuIFxcdFxcdFxcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwb3J0KTtcXG4rXFxuK1xcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI2NzgsNzQgKzI3NzIsNTYgQEAgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbitzdGF0aWMgYm9vbCBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIGJvb2wgaW5faXJxKVxcbiB7XFxuLVxcdGJvb2wgbW9yZV90aW1lc3RhbXBzO1xcbitcXHRERUNMQVJFX0JJVE1BUCh0c3RhbXBzLCBJTkRFWF9QRVJfUE9SVF9NQVgpID0ge307XFxuIFxcbiBcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXFx1MDAyNnR4LVxcdTAwM2Vsb2NrKSB7XFxuIFxcdFxcdGlmICghdHgtXFx1MDAzZWluaXQpXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdFxcdG1vcmVfdGltZXN0YW1wcyA9ICFiaXRtYXBfZW1wdHkodHgtXFx1MDAzZWluX3VzZSwgdHgtXFx1MDAzZWxlbik7XFxuLVxcdH1cXG4rXFx0XFx0aWYgKGluX2lycSkge1xcbitcXHRcXHRcXHRpZiAoIWljZV9wdHBfaXNfdHhfdHJhY2tlcl91cCh0eCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdHJldHVybiBtb3JlX3RpbWVzdGFtcHM7XFxuK1xcdFxcdFxcdHJldHVybiBiaXRtYXBfYW5kbm90KHRzdGFtcHMsIHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VzdGFsZSwgdHgtXFx1MDAzZWxlbik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldHVybiAhYml0bWFwX2VtcHR5KHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VsZW4pO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbitzdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxcbiB7XFxuK1xcdGJvb2wgaGF2ZV90c3RhbXBzID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jaykge1xcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMsXFxuLVxcdFxcdFxcdFxcdCAgICBsaXN0X25vZGUpIHtcXG4tXFx0XFx0XFx0c3RydWN0IGljZV9wdHBfdHggKnR4ID0gXFx1MDAyNnBvcnQtXFx1MDAzZXR4O1xcbi1cXG4tXFx0XFx0XFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHR4KSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4rXFx0XFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFxcdTAwMjZwb3J0LVxcdTAwM2V0eCwgaW5faXJxKSkge1xcbitcXHRcXHRcXHRoYXZlX3RzdGFtcHMgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4tXFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gaGF2ZV90c3RhbXBzO1xcbiB9XFxuIFxcbi1ib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxcbitib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcXG4ge1xcbi1cXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHQvKiBDaGVjayBzb2Z0d2FyZSBpbmRpY2F0b3IgKi9cXG4gXFx0c3dpdGNoIChwZi1cXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKSB7XFxuIFxcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfTk9ORTpcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX1NFTEY6XFxuLVxcdFxcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcXHUwMDI2cGYtXFx1MDAzZXB0cC5wb3J0LnR4KSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXR1cm4gaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydC50eCwgaW5faXJxKTtcXG4gXFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9BTEw6XFxuLVxcdFxcdGlmIChpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYpKVxcbi1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJldHVybiBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYsIGluX2lycSk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiVW5leHBlY3RlZCBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG1vZGUgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgcGYtXFx1MDAzZXB0cC50eF9pbnRlcnJ1cHRfbW9kZSk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBDaGVjayBoYXJkd2FyZSBpbmRpY2F0b3IgKi9cXG4tXFx0cmV0ID0gaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoaHcpO1xcbi1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi1cXHRcXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcXFwiVW5hYmxlIHRvIHJlYWQgUEhZIFR4IHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0cmV0KTtcXG4tXFx0XFx0LyogU3RvcCB0cmlnZ2VyaW5nIElSUXMgaWYgd2UncmUgdW5hYmxlIHRvIHJlYWQgUEhZICovXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbi1cXG4tXFx0LyogaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoKSByZXR1cm5zIDEgaWYgdGhlcmUgYXJlIHRpbWVzdGFtcHNcXG4tXFx0ICogYXZhaWxhYmxlLCAwIGlmIHRoZXJlIGFyZSBubyB3YWl0aW5nIHRpbWVzdGFtcHMsIGFuZCBhIG5lZ2F0aXZlXFxuLVxcdCAqIHZhbHVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAod2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUpLlxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuIHJldCBcXHUwMDNlIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yNzk5LDcgKzI4NzUsNyBAQCBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0LyogRTgzMCBjYW4gcmVhZCB0aW1lc3RhbXBzIGluIHRoZSB0b3AgaGFsZiB1c2luZyByZDMyKCkgKi9cXG4gXFx0XFx0aWNlX3B0cF9wcm9jZXNzX3RzKHBmKTtcXG4gXFxuLVxcdFxcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcXG4rXFx0XFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkge1xcbiBcXHRcXHRcXHQvKiBQcm9jZXNzIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMuIElmIHRoZXJlXFxuIFxcdFxcdFxcdCAqIGlzIG1vcmUgd29yaywgcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBhZ2Fpbi5cXG4gXFx0XFx0XFx0ICovXFxuQEAgLTI4MjksNyArMjkwNSw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7XFxuIFxcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghcGYtXFx1MDAzZXB0cC5wb3J0LnR4Lmhhc19yZWFkeV9iaXRtYXApXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjgzNywxMSArMjkxMiw4IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGlmICghaWNlX3BmX3NyY190bXJfb3duZWQocGYpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdGRldl9kYmcoZGV2LCBcXFwiUFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0cmV0KTtcXG4tXFx0fSBlbHNlIGlmIChyZXQpIHtcXG4rXFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCBmYWxzZSkgfHxcXG4rXFx0ICAgIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KSkge1xcbiBcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlBUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cXFxcblxcXCIpO1xcbiBcXG4gXFx0XFx0d3IzMihodywgUEZJTlRfT0lDUiwgUEZJTlRfT0lDUl9UU1lOX1RYX00pO1xcbkBAIC0yODkwLDE0ICsyOTYyLDE2IEBAIHZvaWQgaWNlX3B0cF9xdWV1ZV93b3JrKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuIHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKSB7XFxuLVxcdFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGxpc3Rfbm9kZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4gXFx0XFx0c3RydWN0IGljZV9wZiAqcGVlcl9wZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpO1xcbiBcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0aWYgKCFpY2VfaXNfcHJpbWFyeShcXHUwMDI2cGVlcl9wZi1cXHUwMDNlaHcpKSB7XFxuIFxcdFxcdFxcdGlmIChyZWJ1aWxkKSB7XFxuIFxcdFxcdFxcdFxcdC8qIFRPRE86IFdoZW4gaW1wbGVtZW50aW5nIHJlYnVpbGQ9dHJ1ZTpcXG5AQCAtMjkwOSw3ICsyOTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLFxcbiBcXHRcXHRcXHRcXHRpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBlZXJfcGYsIHJlc2V0X3R5cGUpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI5MzYsNiArMzAxNCwxNCBAQCB2b2lkIGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxcbiBcXHRpZiAocmVzZXRfdHlwZSA9PSBJQ0VfUkVTRVRfUEZSKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHQvKiBDYW5jZWwgdGhlIG9mZnNldCB2ZXJpZmljYXRpb24gd29yayBmb3IgRTgyeCBiZWZvcmUgcmVsZWFzaW5nIHRoZVxcbitcXHQgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWVcXG4rXFx0ICogc2lkZWJhbmQgcXVldWUgY29tbWFuZHMgdGhhdCB3aWxsIGZhaWwgb3IgdGltZW91dCwgYW5kIG1heVxcbitcXHQgKiByZWZlcmVuY2Ugc3RhdGUgdGhhdCBpcyBiZWluZyB0b3JuIGRvd24uXFxuK1xcdCAqL1xcbitcXHRpZiAoaHctXFx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQylcXG4rXFx0XFx0a3RocmVhZF9jYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5vdl93b3JrKTtcXG4rXFxuIFxcdGlmIChpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikgXFx1MDAyNlxcdTAwMjYgaHctXFx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxcbiBcXHRcXHRpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMocGYsIGZhbHNlLCByZXNldF90eXBlKTtcXG4gXFxuQEAgLTMwODYsMTEgKzMxNzIsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQubGlzdF9ub2RlKTtcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRrcmVmX2luaXQoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5yZWYpO1xcbiBcXG4tXFx0bGlzdF9hZGQoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5saXN0X25vZGUsXFxuLVxcdFxcdCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRsaXN0X2FkZF9yY3UoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5saXN0X25vZGUsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuIFxcbiBcXHQvKiBTZWVkIHRoZSBwZXItUEhZIFR4IHJlZmVyZW5jZSBjbG9jayB1c2FnZSBtYXAgZm9yIHRoaXMgcG9ydC5cXG4gXFx0ICogT25seSBtZWFuaW5nZnVsIG9uIEU4MjUgKG90aGVyIE1BQyB0eXBlcyBkb24ndCBleHBvc2UgdHgtY2xrXFxuQEAgLTMxMTMsMTIgKzMxOTksMzIgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2NsZWFudXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFxcdTAwMjZwZi1cXHUwMDNlcHRwO1xcbitcXHRzdHJ1Y3Qga3JlZiAqcmVmO1xcbiBcXG4tXFx0aWYgKHBmLVxcdTAwM2Vody5tYWNfdHlwZSAhPSBJQ0VfTUFDX1VOS05PV04pIHtcXG4tXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbi1cXHR9XFxuK1xcdGlmIChwZi1cXHUwMDNlaHcubWFjX3R5cGUgPT0gSUNFX01BQ19VTktOT1dOKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBUaGUgUEYgY2Fubm90IGJlIHJlbW92ZWQgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgcmVtYWluaW5nXFxuK1xcdCAqIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgdG8gdGhlIFBUUCBwb3J0LiBUbyBtYWtlIHN1cmUgdGhpcyBpcyB0cnVlLFxcbitcXHQgKiBmaXJzdCByZW1vdmUgdGhlIHBvcnQgZnJvbSB0aGUgbGlzdCwgdGhlbiBkcm9wIHRoZSBwcmltYXJ5XFxuK1xcdCAqIHJlZmVyZW5jZSB0aGlzIFBGIGhvbGRzIG9uIHRoZSBwb3J0LiBPbmNlIGRvbmUsIHdhaXQgdW50aWwgYWxsXFxuK1xcdCAqIGV4aXN0aW5nIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIEZpbmFsbHksIHN5bmNocm9uaXplX3JjdSgpIHRvXFxuK1xcdCAqIGVuc3VyZSB0aGF0IGFsbCBSQ1UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBtaWdodCBhdHRlbXB0IHRvXFxuK1xcdCAqIGRlcmVmZXJlbmNlIHRoZSBwb3J0IGFyZSBmaW5pc2hlZC5cXG4rXFx0ICovXFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4rXFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQubGlzdF9ub2RlKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4rXFxuK1xcdHJlZiA9IFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQucmVmO1xcbitcXHRrcmVmX3B1dChyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuK1xcbitcXHRkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLFxcbitcXHRcXHQgICAgICAhd2FpdF92YXJfZXZlbnRfdGltZW91dChyZWYsICFrcmVmX3JlYWQocmVmKSwgMTUgKiBIWiksXFxuK1xcdFxcdCAgICAgIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcG9ydCByZWZlcmVuY2VzIHRvIHJlbGVhc2UuIENvbnRpbnVpbmcgdG8gdW5sb2FkIGFueXdheXMuXFxcIik7XFxuK1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTMyMTAsOSArMzMxNiwxMyBAQCBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF9vd25lcihzdHJ1Y3QgaWNlX3BmICpwZilcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayB0aHJlYWRzXFxuKyAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSB0aGUgUFRQIGt3b3JrZXJcXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbiAgKiBAcHRwOiBQRiBQVFAgc3RydWN0dXJlXFxuKyAqXFxuKyAqIEFsbG9jYXRlIHRoZSBrd29ya2VyIGFuZCBpbml0aWFsaXplIHRoZSBwZXJpb2RpYyB3b3JrIGZ1bmN0aW9uLiBUaGVcXG4rICogcGVyaW9kaWMgd29yayBpcyBub3QgcXVldWVkIGhlcmU7IHRoZSBjYWxsZXIgc3RhcnRzIGl0IG9uY2UgdGhlIFBUUFxcbisgKiBzdGF0ZSBpcyBJQ0VfUFRQX1JFQURZLlxcbiAgKi9cXG4gc3RhdGljIGludCBpY2VfcHRwX2luaXRfd29yayhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHAgKnB0cClcXG4ge1xcbkBAIC0zMjMxLDkgKzMzNDEsNiBAQCBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKVxcbiBcXG4gXFx0cHRwLVxcdTAwM2Vrd29ya2VyID0ga3dvcmtlcjtcXG4gXFxuLVxcdC8qIFN0YXJ0IHBlcmlvZGljIHdvcmsgZ29pbmcgKi9cXG4tXFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocHRwLVxcdTAwM2Vrd29ya2VyLCBcXHUwMDI2cHRwLVxcdTAwM2V3b3JrLCAwKTtcXG4tXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0zMzU1LDYgKzM0NjIsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2NsZWFuX3BmO1xcbiBcXG4rXFx0LyogU2VlZCBsaW5rX3VwIGZyb20gY3VycmVudCBQSFkgc3RhdHVzLCBzaW5jZSBsaW5rIG1heSBhbHJlYWR5IGJlIHVwXFxuK1xcdCAqIChlLmcuIGFmdGVyIFBYRSBib290KSB3aXRoIG5vIGxpbmstY2hhbmdlIGVkZ2UgdG8gY2F0Y2ggaXQgbGF0ZXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocGYtXFx1MDAzZWh3LnBvcnRfaW5mbylcXG4rXFx0XFx0cHRwLVxcdTAwM2Vwb3J0LmxpbmtfdXAgPVxcbitcXHRcXHRcXHQhIShwZi1cXHUwMDNlaHcucG9ydF9pbmZvLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcXHUwMDI2XFxuK1xcdFxcdFxcdElDRV9BUV9MSU5LX1VQKTtcXG4rXFxuK1xcdC8qIENyZWF0ZSB0aGUga3dvcmtlciBiZWZvcmUgcmVzdGFydGluZyB0aGUgUEhZLCB3aGljaCBxdWV1ZXMgd29yayBvblxcbitcXHQgKiBpdCBpbiB0aGUgRTgyeCByZXN0YXJ0IHBhdGguIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBsaW5rIGV2ZW50c1xcbitcXHQgKiBmcm9tIHJlYWNoaW5nIGljZV9wdHBfcG9ydF9waHlfcmVzdGFydCgpIHdoaWxlIGt3b3JrZXIgaXMgc3RpbGwgTlVMTFxcbitcXHQgKi9cXG4rXFx0ZXJyID0gaWNlX3B0cF9pbml0X3dvcmsocGYsIHB0cCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuK1xcbiBcXHQvKiBTdGFydCB0aGUgUEhZIHRpbWVzdGFtcGluZyBibG9jayAqL1xcbiBcXHRpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpO1xcbiBcXG5AQCAtMzM2Myw5ICszNDg2LDEwIEBAIHZvaWQgaWNlX3B0cF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXG4gXFx0cHRwLVxcdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XFxuIFxcbi1cXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfZXhpdDtcXG4rXFx0LyogU3RhcnQgcGVyaW9kaWMgd29yayBvbmx5IGFmdGVyIHRoZSBzdGF0ZSBpcyBSRUFEWTsgdGhlIHdvcmtlclxcbitcXHQgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuXFxuK1xcdCAqL1xcbitcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXFx1MDAzZWt3b3JrZXIsIFxcdTAwMjZwdHAtXFx1MDAzZXdvcmssIDApO1xcbiBcXG4gXFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFxcXCJQVFAgaW5pdCBzdWNjZXNzZnVsXFxcXG5cXFwiKTtcXG4gXFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxcbmluZGV4IGM0YjBkYTdjZTIwZWQuLjEzMTU4YTkzMTlmYjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmhcXG5AQCAtNSw2ICs1LDggQEBcXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tyZWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpY2VfcHRwX2h3LmhcXFwiXFxuQEAgLTEzMCw2ICsxMzIsOSBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XFxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFxcdFxcdDE2XFxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcXHRcXHRcXHQ2NFxcbiBcXG4rLyogTWF4aW11bSBudW1iZXIgb2YgdGltZXN0YW1wIGluZGV4ZXMgYWNyb3NzIGFsbCBkZXZpY2VzICovXFxuKyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVFxcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcXG4gICpcXG5AQCAtMTM4LDYgKzE0Myw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcXG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0J3MgUEhZIG9mZnNldCBpcyB2YWxpZC5cXG4gICpcXG4gICogQGxpc3Rfbm9kZTogbGlzdCBtZW1iZXIgc3RydWN0dXJlXFxuKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcXG4gICogQHR4OiBUeCB0aW1lc3RhbXAgdHJhY2tpbmcgZm9yIHRoaXMgcG9ydFxcbiAgKiBAb3Zfd29yazogZGVsYXllZCB3b3JrIHRhc2sgZm9yIHRyYWNraW5nIHdoZW4gUEhZIG9mZnNldCBpcyB2YWxpZFxcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXFxuQEAgLTE0OSw2ICsxNTUsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XFxuICAqL1xcbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7XFxuK1xcdHN0cnVjdCBrcmVmIHJlZjtcXG4gXFx0c3RydWN0IGljZV9wdHBfdHggdHg7XFxuIFxcdHN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBvdl93b3JrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcHNfbG9jazsgLyogcHJvdGVjdHMgb3ZlcmFsbCBQVFAgUEhZIHN0YXJ0IHByb2NlZHVyZSAqL1xcbkBAIC0zMTIsNyArMzE5LDcgQEAgdm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KTtcXG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcXG4gdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpO1xcbiBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZik7XFxuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xcbitib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSk7XFxuIHU2NCBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcoc3RydWN0IGljZV9wZiAqcGYsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbiBcXG5AQCAtMzYwLDcgKzM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4raWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbmluZGV4IDNhNDFjNzExZTc1MWIuLjEwZTk3Mzg3NjYwOGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG5AQCAtNzM3LDI0ICs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcXG4gXFx0cmV0dXJuIGljZV9yZWFkX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvblxcbi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbi0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcmVhZFxcbi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlXFxuLSAqIEB2YWw6IFBvaW50ZXIgdG8gdGhlIHZhbHVlIHRvIHJlYWQgKG91dCBwYXJhbSlcXG4tICpcXG4tICogUmV0dXJuOlxcbi0gKiAqICUwICAgICAgLSBzdWNjZXNzXFxuLSAqICogJUVJTlZBTCAtIGludmFsaWQgcG9ydCBudW1iZXIgb3IgcmVzb3VyY2UgdHlwZVxcbi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZXFxuLSAqL1xcbi1zdGF0aWMgaW50IGljZV93cml0ZV9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgdTMyIHZhbClcXG4te1xcbi1cXHRyZXR1cm4gaWNlX3dyaXRlX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIGljZV93cml0ZV9xdWFkX3B0cF9yZWdfZXRoNTZnIC0gV3JpdGUgYSBQSFkgcXVhZCByZWdpc3RlclxcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbkBAIC0xMTM5LDggKzExMjEsOCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXFxuICAqIGludGVybmFsIFBIWXMgb2YgdGhlIDU2RyBkZXZpY2VzLlxcbiAgKlxcbiAgKiBUbyBkaXJlY3RseSBjbGVhciB0aGUgY29udGVudHMgb2YgdGhlIHRpbWVzdGFtcCBibG9jayBlbnRpcmVseSwgZGlzY2FyZGluZ1xcbi0gKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgdXNlXFxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXFxuKyAqIGFsbCB0aW1lc3RhbXAgZGF0YSBhdCBvbmNlLCBzb2Z0d2FyZSBzaG91bGQgaW5zdGVhZCBwZXJmb3JtIGEgUEhZIHNvZnRcXG4rICogcmVzZXQgdmlhIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkuXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGFuIGlkeCB3aG9zZSBiaXQgaXMgc2V0IGFjY29yZGluZyB0b1xcbiAgKiBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoKS5cXG5AQCAtMTE1MiwxMSArMTEzNCwxMSBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXFxuIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpXFxuIHtcXG4gXFx0dTY0IHVudXNlZF90c3RhbXA7XFxuLVxcdHUxNiBsb19hZGRyO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0LyogUmVhZCB0aGUgdGltZXN0YW1wIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wIHN0YXR1cyBiaXQgaXNcXG4tXFx0ICogY2xlYXJlZC5cXG4rXFx0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XFxuK1xcdCAqIGNsZWFycyB0aGUgZW50cnkncyB2YWxpZCBiaXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIChyZWFkLW9ubHkpXFxuK1xcdCAqIHRzX21lbW9yeV9zdGF0dXMgYml0LlxcbiBcXHQgKi9cXG4gXFx0ZXJyID0gaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1NmcoaHcsIHBvcnQsIGlkeCwgXFx1MDAyNnVudXNlZF90c3RhbXApO1xcbiBcXHRpZiAoZXJyKSB7XFxuQEAgLTExNjQsMzIgKzExNDYsNDAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcXG4gXFx0XFx0XFx0ICBwb3J0LCBpZHgsIGVycik7XFxuIFxcdH1cXG4gXFxuLVxcdGxvX2FkZHIgPSAodTE2KVBIWV9UU1RBTVBfTChpZHgpO1xcbi1cXG4tXFx0ZXJyID0gaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhodywgcG9ydCwgbG9fYWRkciwgMCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBjbGVhciBsb3cgUFRQIHRpbWVzdGFtcCByZWdpc3RlciBmb3IgcG9ydCAldSwgaWR4ICV1LCBlcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgcG9ydCwgaWR4LCBlcnIpO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyAtIENsZWFyIGFsbCB0aW1lc3RhbXBzIGZyb20gdGhlIHBvcnQgYmxvY2tcXG4rICogaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyAtIFJlc2V0IG9uZSBwb3J0J3MgVHggdGltZXN0YW1wIG1lbW9yeVxcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbisgKiBAcG9ydDogcG9ydCBudW1iZXIgdG8gY2xlYXJcXG4rICpcXG4rICogRnVsbHkgcmVzZXQgYSBzaW5nbGUgUEhZIHBvcnQncyBUeCB0aW1lc3RhbXAgbWVtb3J5LiBQZXIgdGhlIFBIWSBzcGVjLCB0aGVcXG4rICogb25seSB3YXkgdG8gY2xlYXIgYSB0aW1lc3RhbXAgdmFsaWQgYml0IChhbmQgaXRzIHJlYWQtb25seSB0c19tZW1vcnlfc3RhdHVzXFxuKyAqIGJpdCkgaXMgdG8gcmVhZCB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiwgc28gcmVhZCBldmVyeSBlbnRyeSBmb3IgdGhlXFxuKyAqIHBvcnQgKHR3byAzMi1iaXQgcmVhZHMgZWFjaCkuIFRoaXMgZGlzY2FyZHMgYWxsIHRpbWVzdGFtcCBkYXRhIG9uIHRoZSBwb3J0LFxcbisgKiBzbyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBmb3IgYSBmdWxsIHJlc2V0OyBjYWxsZXJzIHRoYXQgbXVzdCBwcmVzZXJ2ZVxcbisgKiBpbi1mbGlnaHQgdGltZXN0YW1wcyBjbGVhciBpbmRpdmlkdWFsIGluZGljZXMgdmlhIGljZV9jbGVhcl9waHlfdHN0YW1wKCkuXFxuKyAqXFxuKyAqIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCBhbiBpbnRlcm5hbCBIVyBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mXFxuKyAqIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMsIHRoaXMgKm11c3QqIG9ubHkgYmUgY2FsbGVkIGFzIHBhcnQgb2YgdGhlXFxuKyAqIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkgcHJvY2VkdXJlLiBPdGhlcndpc2UsIHRoZSBpbnRlcm5hbCBjb3VudGVyXFxuKyAqIG1heSBiZWNvbWUgb3V0IG9mIHN5bmMgYW5kIHByZXZlbnQgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHRzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIHRvIHJlYWQgdGhlIFBIWS5cXG4gICovXFxuLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodylcXG4rc3RhdGljIGludCBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBwb3J0O1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTggaWR4O1xcbiBcXG4tXFx0Zm9yIChwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIGh3LVxcdTAwM2VwdHAubnVtX2xwb3J0czsgcG9ydCsrKSB7XFxuLVxcdFxcdGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX0wsXFxuLVxcdFxcdFxcdFxcdFxcdCAwKTtcXG4tXFx0XFx0aWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVNfVSxcXG4tXFx0XFx0XFx0XFx0XFx0IDApO1xcbitcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIElOREVYX1BFUl9QT1JUOyBpZHgrKykge1xcbitcXHRcXHRlcnIgPSBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1NmcoaHcsIHBvcnQsIGlkeCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjExNSwxMCArMjEwNSw2IEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9PRkZTRVRfUkVBRFksIDApO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4gXFx0ZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1JYX09GRlNFVF9SRUFEWSwgMCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTIxMzMsOSArMjExOSwxMSBAQCBpbnQgaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgYm9vbCBzb2Z0X3Jlc2V0KVxcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0XFxuICAqXFxuLSAqIFN0YXJ0IHRoZSBjbG9jayBvZiBhIFBIWSBwb3J0LiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvXFxuLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXNcXG4tICogaW5pdGlhbGl6ZWQgb3Igd2hlbiBsaW5rIHNwZWVkIGNoYW5nZXMuXFxuKyAqIFBlcmZvcm0gYSBQSFkgc29mdCByZXNldCBhbmQgdGhlbiBzdGFydCB0aGUgY2xvY2sgZm9yIHRoZSBQSFkgcG9ydC5cXG4rICpcXG4rICogVGhpcyBtdXN0IGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgZmxvdyB0byByZS1jYWxpYnJhdGUgVHggYW5kIFJ4XFxuKyAqIHRpbWVzdGFtcGluZyBvZmZzZXRzIHdoZW5ldmVyIHRoZSBjbG9jayB0aW1lIGlzIGluaXRpYWxpemVkIG9yIHdoZW4gbGlua1xcbisgKiBzcGVlZCBjaGFuZ2VzLlxcbiAgKlxcbiAgKiBSZXR1cm46XFxuICAqICogJTAgICAgIC0gc3VjY2Vzc1xcbkBAIC0yMTUxLDYgKzIxMzksMTAgQEAgaW50IGljZV9zdGFydF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxcbiBcXG4gXFx0dG1yX2lkeCA9IGljZV9nZXRfcHRwX3NyY19jbG9ja19pbmRleChodyk7XFxuIFxcbitcXHRlcnIgPSBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZyhodywgcG9ydCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRlcnIgPSBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKGh3LCBwb3J0LCBmYWxzZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTIyOTQsNiArMjI4Niw3IEBAIGludCBpY2VfcHRwX3JlYWRfdHhfaHd0c3RhbXBfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyICp0c19zdGF0dXMpXFxuICAqXFxuICAqIFRyaWdnZXIgYSBzb2Z0IHJlc2V0IG9mIHRoZSBFVEg1NkcgUEhZIGJ5IHRvZ2dsaW5nIHRoZSBzb2Z0IHJlc2V0XFxuICAqIGJpdCBpbiB0aGUgUEhZIGdsb2JhbCByZWdpc3Rlci4gVGhlIHJlc2V0IHNlcXVlbmNlIGNvbnNpc3RzIG9mOlxcbisgKiAgIDAuIFJlYWRpbmcgZXZlcnkgdGltZXN0YW1wIG1lbW9yeSByZWdpc3RlciB0byBjbGVhciBpdHMgdmFsaWQgYml0XFxuICAqICAgMS4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0XFxuICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxcbiAgKiAgIDMuIENsZWFyaW5nIHRoZSBzb2Z0IHJlc2V0IGJpdCBhZ2FpblxcbkBAIC0yMzAyLDYgKzIyOTUsMTIgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcXG4gICogdG8gc2V0dGxlLiBUaGlzIHByb3ZpZGVzIGEgY29udHJvbGxlZCB3YXkgdG8gcmVpbml0aWFsaXplIHRoZSBQSFlcXG4gICogd2l0aG91dCByZXF1aXJpbmcgYSBmdWxsIGRldmljZSByZXNldC5cXG4gICpcXG4rICogVG8gZW5zdXJlIHRoYXQgdGhlIGludGVybmFsIGNvdW50ZXIgbWF0Y2hlcyB0aGUgY29udGVudHMgb2YgdGhlXFxuKyAqIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUywgcmVhZCBldmVyeSB0aW1lc3RhbXAgaW5kZXggcHJpb3IgdG8gcGVyZm9ybWluZ1xcbisgKiB0aGUgc29mdCByZXNldC4gVGhlIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyByZWFkcyBlbnN1cmUgdGhhdCB0aGUgcmVnaW9uXFxuKyAqIGlzIGNsZWFyZWQsIHdoaWxlIHRoZSBzb2Z0IHJlc2V0IHByb2NlZHVyZSBlbnN1cmVzIHRoYXQgdGhlIHRpbXNldGFtcFxcbisgKiBjb3VudGVyIGlzIHJlc2V0IHRvIHplcm8uXFxuKyAqXFxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB3aGVuXFxuICAqICAgICAgICAgcmVhZGluZyBvciB3cml0aW5nIHRoZSBQSFkgcmVnaXN0ZXIuXFxuICAqL1xcbkBAIC0yMzEwLDYgKzIzMDksMTMgQEAgaW50IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxcbiBcXHR1MzIgZ2xvYmFsX3ZhbDtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGVyciA9IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1NmcoaHcsIHBvcnQpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFxcXCJGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgcG9ydCwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0ZXJyID0gaWNlX3JlYWRfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfR0xPQkFMLCBcXHUwMDI2Z2xvYmFsX3ZhbCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcXFxcblxcXCIsXFxuQEAgLTU4MDEsOCArNTgwNyw5IEBAIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnkoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcdFxcdGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2U4MngoaHcpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcXG4tXFx0XFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKGh3KTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdFxcdC8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZlxcbitcXHRcXHQgKiB0aGUgc29mdCByZXNldCBwcm9jZWR1cmUuXFxuK1xcdFxcdCAqL1xcbiBcXHRjYXNlIElDRV9NQUNfRTgxMDpcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwMTowOTo0MC4xMzQ0NjY1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3OTEzMjA3MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgZHJpdmVyIChpY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyBQVFAgdGltZXN0YW1waW5nIGFuZCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uKSBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIHZpcnR1YWxpemVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMDZiMDA0ZGNkMDM0NmJhZTU3YmI3NDg4YzdlNDcxMTEzODAyZjkwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDE6MDk6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG5pbmRleCAyZGMzNjI5ZDZkMGY2Li5kMTY0M2JmOGExYjU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG5AQCAtNjYsMTggKzY2LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmljZV9hZGFwdGVyX25ldyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2YWRhcHRlci1cdTAwM2VyZWZjb3VudCwgMSk7XG4gXG4tXHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QpO1xuIFxuIFx0cmV0dXJuIGFkYXB0ZXI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGljZV9hZGFwdGVyX2ZyZWUoc3RydWN0IGljZV9hZGFwdGVyICphZGFwdGVyKVxuIHtcbi1cdFdBUk5fT04oIWxpc3RfZW1wdHkoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cykpO1xuK1x0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QpKTtcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrKTsgaSsrKVxuIFx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcbi1cdG11dGV4X2Rlc3Ryb3koXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdGtmcmVlKGFkYXB0ZXIpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5pbmRleCA0ZjY5NWYzMmRhM2Q4Li4zOTkyM2RlZGQ1MzRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG5AQCAtMTksMTMgKzE5LDEzIEBAIHN0cnVjdCBpY2VfcGY7XG4gICpcbiAgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBkYXRhIHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGFkYXB0ZXIgcG9ydHNcbiAgKlxuLSAqIEBwb3J0czogbGlzdCBvZiBwb3J0c1xuKyAqIEBsaXN0OiBsaXN0IG9mIHBvcnRzXG4gICogQGxvY2s6IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb3J0cyBsaXN0XG4gICovXG4gc3RydWN0IGljZV9wb3J0X2xpc3Qge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBwb3J0cztcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdC8qIFRvIHN5bmNocm9uaXplIHRoZSBwb3J0cyBsaXN0IG9wZXJhdGlvbnMgKi9cbi1cdHN0cnVjdCBtdXRleCBsb2NrO1xuK1x0c3BpbmxvY2tfdCBsb2NrO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuaW5kZXggZDg4ODM1NDgyZDNhYS4uYzg0ZDYzYjhkMjYxZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY1xuQEAgLTMyNDgsNyArMzI0OCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbWlzY19pbnRyX3RocmVhZF9mbihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbiBcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcbi1cdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcbitcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcbiBcdFx0LyogSWYgYW55IG5ldyBUeCB0aW1lc3RhbXBzIGhhcHBlbmVkIHdoaWxlIGluIGludGVycnVwdCxcbiBcdFx0ICogcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBpdCBhZ2Fpbi5cbiBcdFx0ICovXG5AQCAtNjc0NSw3ICs2NzQ1LDYgQEAgc3RhdGljIGludCBpY2VfdXBfY29tcGxldGUoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSk7XG4gXHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXModnNpLVx1MDAzZW5ldGRldik7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb24odnNpLVx1MDAzZW5ldGRldik7XG4tXHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIHRydWUpO1xuIFx0fVxuIFxuIFx0LyogUGVyZm9ybSBhbiBpbml0aWFsIHJlYWQgb2YgdGhlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIG5vdyB0b1xuQEAgLTcyNzMsNyArNzI3Miw2IEBAIGludCBpY2VfZG93bihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFxuIFx0aWYgKHZzaS1cdTAwM2VuZXRkZXYpIHtcbiBcdFx0dmxhbl9lcnIgPSBpY2VfdnNpX2RlbF92bGFuX3plcm8odnNpKTtcbi1cdFx0aWNlX3B0cF9saW5rX2NoYW5nZSh2c2ktXHUwMDNlYmFjaywgZmFsc2UpO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29mZih2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfdHhfZGlzYWJsZSh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdH1cbkBAIC03Nzk0LDYgKzc3OTIsMTUgQEAgc3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIFxuIFx0aWNlX3VwZGF0ZV9wZl9uZXRkZXZfbGluayhwZik7XG4gXG4rXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUFRQX1NVUFBPUlRFRCwgcGYtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2Vody5wb3J0X2luZm8pIHtcbitcdFx0Ym9vbCBsaW5rX3VwO1xuK1xuK1x0XHRsaW5rX3VwID0gISEocGYtXHUwMDNlaHcucG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFx1MDAyNlxuK1x0XHRcdCAgICAgSUNFX0FRX0xJTktfVVApO1xuK1x0XHRpZiAocGYtXHUwMDNlcHRwLnBvcnQubGlua191cCAhPSBsaW5rX3VwKVxuK1x0XHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApO1xuK1x0fVxuK1xuIFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXG4gXHRlcnIgPSBpY2Vfc2VuZF92ZXJzaW9uKHBmKTtcbiBcdGlmIChlcnIpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uMGU0NGVkNmIwYWU4ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0xLDYgKzEsOCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpY2UuaFwiXG4gI2luY2x1ZGUgXCJpY2VfbGliLmhcIlxuICNpbmNsdWRlIFwiaWNlX3RyYWNlLmhcIlxuQEAgLTM2Miw5ICszNjQsMTIgQEAgc3RhdGljIHU2NCBpY2VfcHRwX2V4dGVuZF80MGJfdHMoc3RydWN0IGljZV9wZiAqcGYsIHU2NCBpbl90c3RhbXApXG4gc3RhdGljIGJvb2xcbiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIHtcbitcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cbitcdFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XG4rXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnR4LVx1MDAzZWxvY2spO1xuIFxuLVx0cmV0dXJuIHR4LVx1MDAzZWluaXQgXHUwMDI2XHUwMDI2ICF0eC1cdTAwM2VjYWxpYnJhdGluZztcbitcdHJldHVybiB0eC1cdTAwM2Vpbml0IFx1MDAyNlx1MDAyNiAhdHgtXHUwMDNlY2FsaWJyYXRpbmcgXHUwMDI2XHUwMDI2IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4gfVxuIFxuIC8qKlxuQEAgLTU2MSw3ICs1NjYsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHR1NjQgdHN0YW1wX3JlYWR5O1xuLVx0Ym9vbCBsaW5rX3VwO1xuIFx0aW50IGVycjtcbiBcdHU4IGlkeDtcbiBcbkBAIC01NjksNyArNTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHB0cF9wb3J0KTtcbiBcdGh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXG4tXHRpZiAoIXR4LVx1MDAzZWluaXQpXG4rXHRpZiAoIXR4LVx1MDAzZWluaXQgfHwgYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXG5AQCAtNTc5LDE0ICs1ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0LyogRHJvcCBwYWNrZXRzIGlmIHRoZSBsaW5rIHdlbnQgZG93biAqL1xuLVx0bGlua191cCA9IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4tXG4gXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pIHtcbiBcdFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4gXHRcdHU4IHBoeV9pZHggPSBpZHggKyB0eC1cdTAwM2VvZmZzZXQ7XG4gXHRcdHU2NCByYXdfdHN0YW1wID0gMCwgdHN0YW1wO1xuLVx0XHRib29sIGRyb3BfdHMgPSAhbGlua191cDtcbitcdFx0Ym9vbCBkcm9wX3RzID0gZmFsc2U7XG4gXHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRcdC8qIERyb3AgcGFja2V0cyB3aGljaCBoYXZlIHdhaXRlZCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcyAqL1xuQEAgLTYxOSw2ICs2MjAsMjIgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFkcm9wX3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKiB2ZXJpZnkgcmVhZHkgYml0IGNsZWFyZWQgKi9cbitcdFx0aWYgKHR4LVx1MDAzZWhhc19yZWFkeV9iaXRtYXApIHtcbitcdFx0XHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRpZiAodHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKHBoeV9pZHgpKSB7XG4rXHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCB0eC1cdTAwM2VzdGFsZSkpXG4rXHRcdFx0XHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwiUEhZIHBvcnQgJXUgZmFpbGVkIHRvIGNsZWFyIHJlYWR5IGJpdCBmb3IgaWR4ICV1XFxuXCIsXG4rXHRcdFx0XHRcdFx0cHRwX3BvcnQtXHUwMDNlcG9ydF9udW0sIHBoeV9pZHgpO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbiBcdFx0aWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC1cdTAwM2V0c3RhbXBzW2lkeF0uc2tiLCBpZHgpO1xuIFxuIFx0XHQvKiBGb3IgUEhZcyB3aGljaCBkb24ndCBpbXBsZW1lbnQgYSBwcm9wZXIgdGltZXN0YW1wIHJlYWR5XG5AQCAtNjczLDIwICs2OTAsMzMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZi1cdTAwM2VwdHAudHhfaHd0c3RhbXBfZ29vZCArPSB0c3RhbXBfZ29vZDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXG4re1xuK1x0d2FrZV91cF92YXIocmVmKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcdTAwMjZwb3J0LVx1MDAzZXR4O1xuIFxuLVx0XHRpZiAoIXR4IHx8ICF0eC1cdTAwM2Vpbml0KVxuK1x0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbiBcdFx0aWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCh0eCk7XG4rXG4rXHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC03MjUsNiArNzU1LDM3IEBAIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWRcbitpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTApO1xuK1x0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbitcdHU2NCB0c3RhbXBfcmVhZHk7XG4rXHRib29sIHBlbmRpbmc7XG4rXHR1OCBpZHg7XG4rXG4rXHRpZiAoaHctXHUwMDNlcmVzZXRfb25nb2luZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZG8ge1xuK1x0XHRpZiAoaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cdTAwM2VibG9jaywgXHUwMDI2dHN0YW1wX3JlYWR5KSlcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdHBlbmRpbmcgPSBmYWxzZTtcbitcdFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSB7XG4rXHRcdFx0aWYgKCEodHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKGlkeCArIHR4LVx1MDAzZW9mZnNldCkpKVxuK1x0XHRcdFx0cGVuZGluZyA9IHRydWU7XG4rXHRcdH1cbitcdFx0aWYgKCFwZW5kaW5nKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0dXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7XG4rXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuK1xuK1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW4tZmxpZ2h0IFR4IHRpbWVzdGFtcHMgb24gYmxvY2sgJXVcXG5cIixcbitcdFx0dHgtXHUwMDNlYmxvY2spO1xuK31cbitcbiAvKipcbiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlclxuICAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC03NDEsNiArODAyLDggQEAgaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRpbnQgZXJyO1xuIFx0dTggaWR4O1xuIFxuK1x0aWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHBmLCB0eCk7XG4rXG4gXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcIkZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcXG5cIixcbkBAIC03NzksMTIgKzg0MiwxMCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiAgKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXG4gICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrXG4gICpcbi0gKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHNlbmRpbmdcbi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nXG4tICogdGhlIDQwYml0IGhhcmR3YXJlIHRpbWVzdGFtcCBpbmNvcnJlY3RseS5cbi0gKlxuLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldFxuLSAqIHRpbWUgcmVxdWVzdC5cbisgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXJcbisgKiBmcm9tIHJlcG9ydGluZyB0aGUgdGltZXN0YW1wIHRvIHRoZSBzdGFjay4gVGhpcyBpcyBjYWxsZWQgdG8gaW5mb3JtIHRoZVxuKyAqIGRyaXZlciB0aGF0IGEgdGltZXN0YW1wIGlzIGV4cGVjdGVkIHRvIGZhaWwgaWYgaXQgd2FzIGluaXRpYXRlZCBhcyB0aGUgbGlua1xuKyAqIHdlbnQgZG93bi5cbiAgKi9cbiBzdGF0aWMgdm9pZFxuIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbkBAIC04MDgsOCArODY5LDE2IEBAIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbitcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwb3J0LVx1MDAzZXJlZikpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocHRwX3BvcnRfdG9fcGYocG9ydCksIFx1MDAyNnBvcnQtXHUwMDNldHgpO1xuK1x0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTk5NCwxMyArMTA2Myw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfY2FjaGVkX3BoY3RpbWUoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVx1MDAzZXB0cC5rd29ya2VyLCBcdTAwMjZwZi1cdTAwM2VwdHAud29yayxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcygxMCkpO1xuIFx0fVxuLVxuLVx0LyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlXG4tXHQgKiBiZWVuIGNhcHR1cmVkIGluIGhhcmR3YXJlIGJlZm9yZSB0aGUgdGltZSB1cGRhdGUuIFRoaXMgY291bGQgbGVhZFxuLVx0ICogdG8gdXMgZXh0ZW5kaW5nIHRoZW0gd2l0aCB0aGUgd3JvbmcgY2FjaGVkIHZhbHVlIHJlc3VsdGluZyBpblxuLVx0ICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4tXHQgKi9cbi1cdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTEzMyw2ICsxMTk1LDcgQEAgc3RhdGljIGludCBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8oc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHRpbnQgdHhfZXJyO1xuQEAgLTExNTUsMTIgKzEyMTgsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4gXHRcdHR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdHJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdGlmICh0eF9lcnIgfHwgcnhfZXJyKSB7XG4tXHRcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIgKi9cbitcdFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci5cbitcdFx0ICogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgbm9ybWFsIGxpbmstdXA6IHRoZSB2ZXJuaWVyIG9mZnNldFxuK1x0XHQgKiBjYWxpYnJhdGlvbiBjYW5ub3QgY29tcGxldGUgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBoYXNcbitcdFx0ICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS5cbitcdFx0ICovXG4rXHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXG4rXHRcdFx0XCJQVFAgb2Zmc2V0IG5vdCB5ZXQgdmFsaWQgZm9yIHBvcnQgJXUgKHR4X2Vycj0lZCByeF9lcnI9JWQpXFxuXCIsXG4rXHRcdFx0cG9ydC1cdTAwM2Vwb3J0X251bSwgdHhfZXJyLCByeF9lcnIpO1xuIFx0XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cdTAwM2VwdHAua3dvcmtlcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2cG9ydC1cdTAwM2Vvdl93b3JrLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4rXG4rXHQvKiBUeCBhbmQgUnggb2Zmc2V0cyBhcmUgbm93IGNvbmZpZ3VyZWQsIGVuYWJsZSBUeCB0aW1lc3RhbXBzICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbitcdHBvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4rXG4rXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLFxuK1x0XHRcIlBUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxcblwiLFxuK1x0XHRwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTI0MywxMyArMTMyMiwyMCBAQCBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXG4gXG4gXHRcdC8qIFN0YXJ0IHRoZSBQSFkgdGltZXIgaW4gVmVybmllciBtb2RlICovXG4gXHRcdGVyciA9IGljZV9zdGFydF9waHlfdGltZXJfZTgyeChodywgcG9ydCk7XG4tXHRcdGlmIChlcnIpXG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdHBfcG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4rXHRcdFx0cHRwX3BvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbiBcdFx0XHRicmVhaztcbitcdFx0fVxuIFxuLVx0XHQvKiBFbmFibGUgVHggdGltZXN0YW1wcyByaWdodCBhd2F5ICovXG4tXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbi1cdFx0cHRwX3BvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdHBfcG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4rXHRcdC8qIERvIG5vdCBjbGVhciBjYWxpYnJhdGluZyBmbGFnIGhlcmUuIFR4IHRpbWVzdGFtcHMgcmVtYWluXG4rXHRcdCAqIGRpc2FibGVkIHVudGlsIGljZV9wdHBfd2FpdF9mb3Jfb2Zmc2V0cygpIGhhcyB2ZXJpZmllZFxuK1x0XHQgKiB0aGF0IHRoZSBUeCBhbmQgUnggb2Zmc2V0IGNhbGlicmF0aW9uIGhhcyBjb21wbGV0ZWQuXG4rXHRcdCAqIENsZWFyaW5nIGl0IGhlcmUgd291bGQgYWxsb3cgVHggdGltZXN0YW1wcyB0byBiZSByZXBvcnRlZFxuK1x0XHQgKiBiZWZvcmUgdGhlIFBIWSBvZmZzZXQgcmVnaXN0ZXJzIGFyZSBjb25maWd1cmVkLCBsZWFkaW5nXG4rXHRcdCAqIHRvIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLlxuK1x0XHQgKi9cbiBcbiBcdFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXHUwMDNlcHRwLmt3b3JrZXIsIFx1MDAyNnB0cF9wb3J0LVx1MDAzZW92X3dvcmssXG4gXHRcdFx0XHRcdCAgIDApO1xuQEAgLTEyODAsMTggKzEzNjYsMjEgQEAgdm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cClcbiBcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcbi1cdGlmIChwZi1cdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0cHRwX3BvcnQgPSBcdTAwMjZwZi1cdTAwM2VwdHAucG9ydDtcbiBcbiBcdC8qIFVwZGF0ZSBjYWNoZWQgbGluayBzdGF0dXMgZm9yIHRoaXMgcG9ydCBpbW1lZGlhdGVseSAqL1xuIFx0cHRwX3BvcnQtXHUwMDNlbGlua191cCA9IGxpbmt1cDtcbiBcbitcdGlmIChwZi1cdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogU2tpcCBIVyB3cml0ZXMgaWYgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MgKi9cbiBcdGlmIChwZi1cdTAwM2Vody5yZXNldF9vbmdvaW5nKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIWxpbmt1cClcbitcdFx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgpO1xuK1xuIFx0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1IFx1MDAyNlx1MDAyNlxuIFx0ICAgIHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRpbnQgcGluLCBlcnI7XG5AQCAtMTQyNCwxNiArMTUxMywyMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcoc3RydWN0IGljZV9wZiAqcGYpXG4gICovXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9yZXN0YXJ0X2FsbF9waHkoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuLVx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4rXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0bGlzdF9mb3JfZWFjaChlbnRyeSwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cykge1xuLVx0XHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0ID0gbGlzdF9lbnRyeShlbnRyeSxcbi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcbi1cdFx0XHRcdFx0XHQgICAgICAgbGlzdF9ub2RlKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdFx0aWYgKHBvcnQtXHUwMDNlbGlua191cClcbiBcdFx0XHRpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQocG9ydCk7XG4rXG4rXHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjY3OCw3NCArMjc3Miw1NiBAQCB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuK3N0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgYm9vbCBpbl9pcnEpXG4ge1xuLVx0Ym9vbCBtb3JlX3RpbWVzdGFtcHM7XG4rXHRERUNMQVJFX0JJVE1BUCh0c3RhbXBzLCBJTkRFWF9QRVJfUE9SVF9NQVgpID0ge307XG4gXG4gXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgXHUwMDI2dHgtXHUwMDNlbG9jaykge1xuIFx0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRtb3JlX3RpbWVzdGFtcHMgPSAhYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKTtcbi1cdH1cbitcdFx0aWYgKGluX2lycSkge1xuK1x0XHRcdGlmICghaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHR4KSlcbitcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBtb3JlX3RpbWVzdGFtcHM7XG4rXHRcdFx0cmV0dXJuIGJpdG1hcF9hbmRub3QodHN0YW1wcywgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VzdGFsZSwgdHgtXHUwMDNlbGVuKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyZXR1cm4gIWJpdG1hcF9lbXB0eSh0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbik7XG4rXHRcdH1cbitcdH1cbiB9XG4gXG4tc3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmKVxuK3N0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXG4ge1xuK1x0Ym9vbCBoYXZlX3RzdGFtcHMgPSBmYWxzZTtcbiBcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jaykge1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMsXG4tXHRcdFx0XHQgICAgbGlzdF9ub2RlKSB7XG4tXHRcdFx0c3RydWN0IGljZV9wdHBfdHggKnR4ID0gXHUwMDI2cG9ydC1cdTAwM2V0eDtcbi1cbi1cdFx0XHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHModHgpKVxuLVx0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuK1x0XHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXHUwMDI2cG9ydC1cdTAwM2V0eCwgaW5faXJxKSkge1xuK1x0XHRcdGhhdmVfdHN0YW1wcyA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIGhhdmVfdHN0YW1wcztcbiB9XG4gXG4tYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbitib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcbiB7XG4tXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuLVx0aW50IHJldDtcbi1cbi1cdC8qIENoZWNrIHNvZnR3YXJlIGluZGljYXRvciAqL1xuIFx0c3dpdGNoIChwZi1cdTAwM2VwdHAudHhfaW50ZXJydXB0X21vZGUpIHtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfTk9ORTpcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9TRUxGOlxuLVx0XHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRicmVhaztcbitcdFx0cmV0dXJuIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4LCBpbl9pcnEpO1xuIFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9BTEw6XG4tXHRcdGlmIChpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYpKVxuLVx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRicmVhaztcbitcdFx0cmV0dXJuIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhwZiwgaW5faXJxKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdFdBUk5fT05DRSgxLCBcIlVuZXhwZWN0ZWQgVHggdGltZXN0YW1wIGludGVycnVwdCBtb2RlICV1XFxuXCIsXG4gXHRcdFx0ICBwZi1cdTAwM2VwdHAudHhfaW50ZXJydXB0X21vZGUpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdC8qIENoZWNrIGhhcmR3YXJlIGluZGljYXRvciAqL1xuLVx0cmV0ID0gaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoaHcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcIlVuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJWRcXG5cIixcbi1cdFx0XHRyZXQpO1xuLVx0XHQvKiBTdG9wIHRyaWdnZXJpbmcgSVJRcyBpZiB3ZSdyZSB1bmFibGUgdG8gcmVhZCBQSFkgKi9cbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuLVxuLVx0LyogaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoKSByZXR1cm5zIDEgaWYgdGhlcmUgYXJlIHRpbWVzdGFtcHNcbi1cdCAqIGF2YWlsYWJsZSwgMCBpZiB0aGVyZSBhcmUgbm8gd2FpdGluZyB0aW1lc3RhbXBzLCBhbmQgYSBuZWdhdGl2ZVxuLVx0ICogdmFsdWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yICh3aGljaCB3ZSBjaGVja2VkIGZvciBhYm92ZSkuXG4tXHQgKi9cbi1cdHJldHVybiByZXQgXHUwMDNlIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTI3OTksNyArMjg3NSw3IEBAIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHQvKiBFODMwIGNhbiByZWFkIHRpbWVzdGFtcHMgaW4gdGhlIHRvcCBoYWxmIHVzaW5nIHJkMzIoKSAqL1xuIFx0XHRpY2VfcHRwX3Byb2Nlc3NfdHMocGYpO1xuIFxuLVx0XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYpKSB7XG4rXHRcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcbiBcdFx0XHQvKiBQcm9jZXNzIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMuIElmIHRoZXJlXG4gXHRcdFx0ICogaXMgbW9yZSB3b3JrLCByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGFnYWluLlxuIFx0XHRcdCAqL1xuQEAgLTI4MjksNyArMjkwNSw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gaWNlX3BmX3RvX2RldihwZik7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuLVx0aW50IHJldDtcbiBcbiBcdGlmICghcGYtXHUwMDNlcHRwLnBvcnQudHguaGFzX3JlYWR5X2JpdG1hcClcbiBcdFx0cmV0dXJuO1xuQEAgLTI4MzcsMTEgKzI5MTIsOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX21heWJlX3RyaWdnZXJfdHhfaW50ZXJydXB0KHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0aWYgKCFpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2RiZyhkZXYsIFwiUFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcblwiLFxuLVx0XHRcdHJldCk7XG4tXHR9IGVsc2UgaWYgKHJldCkge1xuK1x0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCBmYWxzZSkgfHxcbitcdCAgICBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodykpIHtcbiBcdFx0ZGV2X2RiZyhkZXYsIFwiUFRQIHBlcmlvZGljIHRhc2sgZGV0ZWN0ZWQgd2FpdGluZyB0aW1lc3RhbXBzLiBUcmlnZ2VyaW5nIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbm93LlxcblwiKTtcbiBcbiBcdFx0d3IzMihodywgUEZJTlRfT0lDUiwgUEZJTlRfT0lDUl9UU1lOX1RYX00pO1xuQEAgLTI4OTAsMTQgKzI5NjIsMTYgQEAgdm9pZCBpY2VfcHRwX3F1ZXVlX3dvcmsoc3RydWN0IGljZV9wZiAqcGYpXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsXG4gXHRcdFx0XHRcdGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIHtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuK1x0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdGxpc3RfZm9yX2VhY2goZW50cnksIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpIHtcbi1cdFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCA9IGxpc3RfZW50cnkoZW50cnksXG4tXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsXG4tXHRcdFx0XHRcdFx0ICAgICAgIGxpc3Rfbm9kZSk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgaWNlX3BmICpwZWVyX3BmID0gcHRwX3BvcnRfdG9fcGYocG9ydCk7XG4gXG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbiBcdFx0aWYgKCFpY2VfaXNfcHJpbWFyeShcdTAwMjZwZWVyX3BmLVx1MDAzZWh3KSkge1xuIFx0XHRcdGlmIChyZWJ1aWxkKSB7XG4gXHRcdFx0XHQvKiBUT0RPOiBXaGVuIGltcGxlbWVudGluZyByZWJ1aWxkPXRydWU6XG5AQCAtMjkwOSw3ICsyOTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLFxuIFx0XHRcdFx0aWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZWVyX3BmLCByZXNldF90eXBlKTtcbiBcdFx0XHR9XG4gXHRcdH1cbitcbitcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0yOTM2LDYgKzMwMTQsMTQgQEAgdm9pZCBpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbiBcdGlmIChyZXNldF90eXBlID09IElDRV9SRVNFVF9QRlIpXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIENhbmNlbCB0aGUgb2Zmc2V0IHZlcmlmaWNhdGlvbiB3b3JrIGZvciBFODJ4IGJlZm9yZSByZWxlYXNpbmcgdGhlXG4rXHQgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWVcbitcdCAqIHNpZGViYW5kIHF1ZXVlIGNvbW1hbmRzIHRoYXQgd2lsbCBmYWlsIG9yIHRpbWVvdXQsIGFuZCBtYXlcbitcdCAqIHJlZmVyZW5jZSBzdGF0ZSB0aGF0IGlzIGJlaW5nIHRvcm4gZG93bi5cbitcdCAqL1xuK1x0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQylcbitcdFx0a3RocmVhZF9jYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHRwLVx1MDAzZXBvcnQub3Zfd29yayk7XG4rXG4gXHRpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpIFx1MDAyNlx1MDAyNiBody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbiBcdFx0aWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHBmLCBmYWxzZSwgcmVzZXRfdHlwZSk7XG4gXG5AQCAtMzA4NiwxMSArMzE3MiwxMSBAQCBzdGF0aWMgaW50IGljZV9wdHBfc2V0dXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlKTtcbi1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdGtyZWZfaW5pdChcdTAwMjZwdHAtXHUwMDNlcG9ydC5yZWYpO1xuIFxuLVx0bGlzdF9hZGQoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlLFxuLVx0XHQgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cyk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdHNwaW5fbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1x0bGlzdF9hZGRfcmN1KFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4gXG4gXHQvKiBTZWVkIHRoZSBwZXItUEhZIFR4IHJlZmVyZW5jZSBjbG9jayB1c2FnZSBtYXAgZm9yIHRoaXMgcG9ydC5cbiBcdCAqIE9ubHkgbWVhbmluZ2Z1bCBvbiBFODI1IChvdGhlciBNQUMgdHlwZXMgZG9uJ3QgZXhwb3NlIHR4LWNsa1xuQEAgLTMxMTMsMTIgKzMxOTksMzIgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHN0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gXHUwMDI2cGYtXHUwMDNlcHRwO1xuK1x0c3RydWN0IGtyZWYgKnJlZjtcbiBcbi1cdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSAhPSBJQ0VfTUFDX1VOS05PV04pIHtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0XHRsaXN0X2RlbChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdH1cbitcdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pXG4rXHRcdHJldHVybjtcbitcbitcdC8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmdcbitcdCAqIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMgdG8gdGhlIFBUUCBwb3J0LiBUbyBtYWtlIHN1cmUgdGhpcyBpcyB0cnVlLFxuK1x0ICogZmlyc3QgcmVtb3ZlIHRoZSBwb3J0IGZyb20gdGhlIGxpc3QsIHRoZW4gZHJvcCB0aGUgcHJpbWFyeVxuK1x0ICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGxcbitcdCAqIGV4aXN0aW5nIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQuIEZpbmFsbHksIHN5bmNocm9uaXplX3JjdSgpIHRvXG4rXHQgKiBlbnN1cmUgdGhhdCBhbGwgUkNVIGNyaXRpY2FsIHNlY3Rpb25zIHRoYXQgbWlnaHQgYXR0ZW1wdCB0b1xuK1x0ICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLlxuK1x0ICovXG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdGxpc3RfZGVsX3JjdShcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcbitcdHJlZiA9IFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnJlZjtcbitcdGtyZWZfcHV0KHJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbitcbitcdGRldl9XQVJOX09OQ0UoaWNlX3BmX3RvX2RldihwZiksXG4rXHRcdCAgICAgICF3YWl0X3Zhcl9ldmVudF90aW1lb3V0KHJlZiwgIWtyZWZfcmVhZChyZWYpLCAxNSAqIEhaKSxcbitcdFx0ICAgICAgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcG9ydCByZWZlcmVuY2VzIHRvIHJlbGVhc2UuIENvbnRpbnVpbmcgdG8gdW5sb2FkIGFueXdheXMuXCIpO1xuK1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4gfVxuIFxuIC8qKlxuQEAgLTMyMTAsOSArMzMxNiwxMyBAQCBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF9vd25lcihzdHJ1Y3QgaWNlX3BmICpwZilcbiB9XG4gXG4gLyoqXG4tICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIFBUUCB3b3JrIHRocmVhZHNcbisgKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgdGhlIFBUUCBrd29ya2VyXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuICAqIEBwdHA6IFBGIFBUUCBzdHJ1Y3R1cmVcbisgKlxuKyAqIEFsbG9jYXRlIHRoZSBrd29ya2VyIGFuZCBpbml0aWFsaXplIHRoZSBwZXJpb2RpYyB3b3JrIGZ1bmN0aW9uLiBUaGVcbisgKiBwZXJpb2RpYyB3b3JrIGlzIG5vdCBxdWV1ZWQgaGVyZTsgdGhlIGNhbGxlciBzdGFydHMgaXQgb25jZSB0aGUgUFRQXG4rICogc3RhdGUgaXMgSUNFX1BUUF9SRUFEWS5cbiAgKi9cbiBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKVxuIHtcbkBAIC0zMjMxLDkgKzMzNDEsNiBAQCBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKVxuIFxuIFx0cHRwLVx1MDAzZWt3b3JrZXIgPSBrd29ya2VyO1xuIFxuLVx0LyogU3RhcnQgcGVyaW9kaWMgd29yayBnb2luZyAqL1xuLVx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocHRwLVx1MDAzZWt3b3JrZXIsIFx1MDAyNnB0cC1cdTAwM2V3b3JrLCAwKTtcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMzU1LDYgKzM0NjIsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jbGVhbl9wZjtcbiBcbitcdC8qIFNlZWQgbGlua191cCBmcm9tIGN1cnJlbnQgUEhZIHN0YXR1cywgc2luY2UgbGluayBtYXkgYWxyZWFkeSBiZSB1cFxuK1x0ICogKGUuZy4gYWZ0ZXIgUFhFIGJvb3QpIHdpdGggbm8gbGluay1jaGFuZ2UgZWRnZSB0byBjYXRjaCBpdCBsYXRlci5cbitcdCAqL1xuK1x0aWYgKHBmLVx1MDAzZWh3LnBvcnRfaW5mbylcbitcdFx0cHRwLVx1MDAzZXBvcnQubGlua191cCA9XG4rXHRcdFx0ISEocGYtXHUwMDNlaHcucG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFx1MDAyNlxuK1x0XHRcdElDRV9BUV9MSU5LX1VQKTtcbitcbitcdC8qIENyZWF0ZSB0aGUga3dvcmtlciBiZWZvcmUgcmVzdGFydGluZyB0aGUgUEhZLCB3aGljaCBxdWV1ZXMgd29yayBvblxuK1x0ICogaXQgaW4gdGhlIEU4MnggcmVzdGFydCBwYXRoLiBUaGlzIHByZXZlbnRzIGNvbmN1cnJlbnQgbGluayBldmVudHNcbitcdCAqIGZyb20gcmVhY2hpbmcgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KCkgd2hpbGUga3dvcmtlciBpcyBzdGlsbCBOVUxMXG4rXHQgKi9cbitcdGVyciA9IGljZV9wdHBfaW5pdF93b3JrKHBmLCBwdHApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZXhpdDtcbitcbiBcdC8qIFN0YXJ0IHRoZSBQSFkgdGltZXN0YW1waW5nIGJsb2NrICovXG4gXHRpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpO1xuIFxuQEAgLTMzNjMsOSArMzQ4NiwxMCBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdHB0cC1cdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XG4gXG4tXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX2V4aXQ7XG4rXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIG9ubHkgYWZ0ZXIgdGhlIHN0YXRlIGlzIFJFQURZOyB0aGUgd29ya2VyXG4rXHQgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuXG4rXHQgKi9cbitcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC1cdTAwM2Vrd29ya2VyLCBcdTAwMjZwdHAtXHUwMDNld29yaywgMCk7XG4gXG4gXHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJQVFAgaW5pdCBzdWNjZXNzZnVsXFxuXCIpO1xuIFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG5pbmRleCBjNGIwZGE3Y2UyMGVkLi4xMzE1OGE5MzE5ZmI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuQEAgLTUsNiArNSw4IEBAXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaWNlX3B0cF9ody5oXCJcbkBAIC0xMzAsNiArMTMyLDkgQEAgc3RydWN0IGljZV9wdHBfdHgge1xuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFx0XHQxNlxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcdFx0XHQ2NFxuIFxuKy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzdGFtcCBpbmRleGVzIGFjcm9zcyBhbGwgZGV2aWNlcyAqL1xuKyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVFxuK1xuIC8qKlxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcbiAgKlxuQEAgLTEzOCw2ICsxNDMsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0J3MgUEhZIG9mZnNldCBpcyB2YWxpZC5cbiAgKlxuICAqIEBsaXN0X25vZGU6IGxpc3QgbWVtYmVyIHN0cnVjdHVyZVxuKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcbiAgKiBAdHg6IFR4IHRpbWVzdGFtcCB0cmFja2luZyBmb3IgdGhpcyBwb3J0XG4gICogQG92X3dvcms6IGRlbGF5ZWQgd29yayB0YXNrIGZvciB0cmFja2luZyB3aGVuIFBIWSBvZmZzZXQgaXMgdmFsaWRcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXG5AQCAtMTQ5LDYgKzE1NSw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcbiAgKi9cbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlO1xuK1x0c3RydWN0IGtyZWYgcmVmO1xuIFx0c3RydWN0IGljZV9wdHBfdHggdHg7XG4gXHRzdHJ1Y3Qga3RocmVhZF9kZWxheWVkX3dvcmsgb3Zfd29yaztcbiBcdHN0cnVjdCBtdXRleCBwc19sb2NrOyAvKiBwcm90ZWN0cyBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlICovXG5AQCAtMzEyLDcgKzMxOSw3IEBAIHZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeCk7XG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcbiB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpO1xuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xuK2Jvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKTtcbiB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuIFxuQEAgLTM2MCw3ICszNjcsOCBAQCBzdGF0aWMgaW5saW5lIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpXG4rc3RhdGljIGlubGluZSBib29sXG4raWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbmluZGV4IDNhNDFjNzExZTc1MWIuLjEwZTk3Mzg3NjYwOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5AQCAtNzM3LDI0ICs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcbiBcdHJldHVybiBpY2VfcmVhZF9wb3J0X2V0aDU2ZyhodywgcG9ydCwgb2Zmc2V0LCB2YWwsIEVUSDU2R19QSFlfTUVNX1BUUCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvblxuLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4tICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGJlIHJlYWRcbi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlXG4tICogQHZhbDogUG9pbnRlciB0byB0aGUgdmFsdWUgdG8gcmVhZCAob3V0IHBhcmFtKVxuLSAqXG4tICogUmV0dXJuOlxuLSAqICogJTAgICAgICAtIHN1Y2Nlc3Ncbi0gKiAqICVFSU5WQUwgLSBpbnZhbGlkIHBvcnQgbnVtYmVyIG9yIHJlc291cmNlIHR5cGVcbi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZXG4tICovXG4tc3RhdGljIGludCBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgb2Zmc2V0LFxuLVx0XHRcdFx0ICAgICB1MzIgdmFsKVxuLXtcbi1cdHJldHVybiBpY2Vfd3JpdGVfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApO1xuLX1cbi1cbiAvKipcbiAgKiBpY2Vfd3JpdGVfcXVhZF9wdHBfcmVnX2V0aDU2ZyAtIFdyaXRlIGEgUEhZIHF1YWQgcmVnaXN0ZXJcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuQEAgLTExMzksOCArMTEyMSw4IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCxcbiAgKiBpbnRlcm5hbCBQSFlzIG9mIHRoZSA1NkcgZGV2aWNlcy5cbiAgKlxuICAqIFRvIGRpcmVjdGx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgdGltZXN0YW1wIGJsb2NrIGVudGlyZWx5LCBkaXNjYXJkaW5nXG4tICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHVzZVxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXG4rICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHBlcmZvcm0gYSBQSFkgc29mdFxuKyAqIHJlc2V0IHZpYSBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYW4gaWR4IHdob3NlIGJpdCBpcyBzZXQgYWNjb3JkaW5nIHRvXG4gICogaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KCkuXG5AQCAtMTE1MiwxMSArMTEzNCwxMSBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXG4gc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcbiB7XG4gXHR1NjQgdW51c2VkX3RzdGFtcDtcbi1cdHUxNiBsb19hZGRyO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIFJlYWQgdGhlIHRpbWVzdGFtcCByZWdpc3RlciB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcCBzdGF0dXMgYml0IGlzXG4tXHQgKiBjbGVhcmVkLlxuK1x0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XG4rXHQgKiBjbGVhcnMgdGhlIGVudHJ5J3MgdmFsaWQgYml0IGFuZCBpdHMgY29ycmVzcG9uZGluZyAocmVhZC1vbmx5KVxuK1x0ICogdHNfbWVtb3J5X3N0YXR1cyBiaXQuXG4gXHQgKi9cbiBcdGVyciA9IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgsIFx1MDAyNnVudXNlZF90c3RhbXApO1xuIFx0aWYgKGVycikge1xuQEAgLTExNjQsMzIgKzExNDYsNDAgQEAgc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcbiBcdFx0XHQgIHBvcnQsIGlkeCwgZXJyKTtcbiBcdH1cbiBcbi1cdGxvX2FkZHIgPSAodTE2KVBIWV9UU1RBTVBfTChpZHgpO1xuLVxuLVx0ZXJyID0gaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyhodywgcG9ydCwgbG9fYWRkciwgMCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwiRmFpbGVkIHRvIGNsZWFyIGxvdyBQVFAgdGltZXN0YW1wIHJlZ2lzdGVyIGZvciBwb3J0ICV1LCBpZHggJXUsIGVyciAlZFxcblwiLFxuLVx0XHRcdCAgcG9ydCwgaWR4LCBlcnIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyAtIENsZWFyIGFsbCB0aW1lc3RhbXBzIGZyb20gdGhlIHBvcnQgYmxvY2tcbisgKiBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnIC0gUmVzZXQgb25lIHBvcnQncyBUeCB0aW1lc3RhbXAgbWVtb3J5XG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbisgKiBAcG9ydDogcG9ydCBudW1iZXIgdG8gY2xlYXJcbisgKlxuKyAqIEZ1bGx5IHJlc2V0IGEgc2luZ2xlIFBIWSBwb3J0J3MgVHggdGltZXN0YW1wIG1lbW9yeS4gUGVyIHRoZSBQSFkgc3BlYywgdGhlXG4rICogb25seSB3YXkgdG8gY2xlYXIgYSB0aW1lc3RhbXAgdmFsaWQgYml0IChhbmQgaXRzIHJlYWQtb25seSB0c19tZW1vcnlfc3RhdHVzXG4rICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGVcbisgKiBwb3J0ICh0d28gMzItYml0IHJlYWRzIGVhY2gpLiBUaGlzIGRpc2NhcmRzIGFsbCB0aW1lc3RhbXAgZGF0YSBvbiB0aGUgcG9ydCxcbisgKiBzbyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBmb3IgYSBmdWxsIHJlc2V0OyBjYWxsZXJzIHRoYXQgbXVzdCBwcmVzZXJ2ZVxuKyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS5cbisgKlxuKyAqIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCBhbiBpbnRlcm5hbCBIVyBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mXG4rICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGVcbisgKiBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpIHByb2NlZHVyZS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJuYWwgY291bnRlclxuKyAqIG1heSBiZWNvbWUgb3V0IG9mIHN5bmMgYW5kIHByZXZlbnQgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHRzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byByZWFkIHRoZSBQSFkuXG4gICovXG4tc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3KVxuK3N0YXRpYyBpbnQgaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgcG9ydDtcbitcdGludCBlcnIgPSAwO1xuK1x0dTggaWR4O1xuIFxuLVx0Zm9yIChwb3J0ID0gMDsgcG9ydCBcdTAwM2MgaHctXHUwMDNlcHRwLm51bV9scG9ydHM7IHBvcnQrKykge1xuLVx0XHRpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19MLFxuLVx0XHRcdFx0XHQgMCk7XG4tXHRcdGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX1UsXG4tXHRcdFx0XHRcdCAwKTtcbitcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBJTkRFWF9QRVJfUE9SVDsgaWR4KyspIHtcbitcdFx0ZXJyID0gaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjExNSwxMCArMjEwNSw2IEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9PRkZTRVRfUkVBRFksIDApO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbiBcdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19SWF9PRkZTRVRfUkVBRFksIDApO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yMTMzLDkgKzIxMTksMTEgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldClcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuICAqIEBwb3J0OiB0aGUgUEhZIHBvcnQgdG8gc3RhcnRcbiAgKlxuLSAqIFN0YXJ0IHRoZSBjbG9jayBvZiBhIFBIWSBwb3J0LiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvXG4tICogcmUtY2FsaWJyYXRlIFR4IGFuZCBSeCB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpc1xuLSAqIGluaXRpYWxpemVkIG9yIHdoZW4gbGluayBzcGVlZCBjaGFuZ2VzLlxuKyAqIFBlcmZvcm0gYSBQSFkgc29mdCByZXNldCBhbmQgdGhlbiBzdGFydCB0aGUgY2xvY2sgZm9yIHRoZSBQSFkgcG9ydC5cbisgKlxuKyAqIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8gcmUtY2FsaWJyYXRlIFR4IGFuZCBSeFxuKyAqIHRpbWVzdGFtcGluZyBvZmZzZXRzIHdoZW5ldmVyIHRoZSBjbG9jayB0aW1lIGlzIGluaXRpYWxpemVkIG9yIHdoZW4gbGlua1xuKyAqIHNwZWVkIGNoYW5nZXMuXG4gICpcbiAgKiBSZXR1cm46XG4gICogKiAlMCAgICAgLSBzdWNjZXNzXG5AQCAtMjE1MSw2ICsyMTM5LDEwIEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydClcbiBcbiBcdHRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpO1xuIFxuK1x0ZXJyID0gaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoaHcsIHBvcnQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdGVyciA9IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1NmcoaHcsIHBvcnQsIGZhbHNlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMjI5NCw2ICsyMjg2LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcbiAgKlxuICAqIFRyaWdnZXIgYSBzb2Z0IHJlc2V0IG9mIHRoZSBFVEg1NkcgUEhZIGJ5IHRvZ2dsaW5nIHRoZSBzb2Z0IHJlc2V0XG4gICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6XG4rICogICAwLiBSZWFkaW5nIGV2ZXJ5IHRpbWVzdGFtcCBtZW1vcnkgcmVnaXN0ZXIgdG8gY2xlYXIgaXRzIHZhbGlkIGJpdFxuICAqICAgMS4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0XG4gICogICAyLiBBc3NlcnRpbmcgdGhlIHNvZnQgcmVzZXQgYml0XG4gICogICAzLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQgYWdhaW5cbkBAIC0yMzAyLDYgKzIyOTUsMTIgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcbiAgKiB0byBzZXR0bGUuIFRoaXMgcHJvdmlkZXMgYSBjb250cm9sbGVkIHdheSB0byByZWluaXRpYWxpemUgdGhlIFBIWVxuICAqIHdpdGhvdXQgcmVxdWlyaW5nIGEgZnVsbCBkZXZpY2UgcmVzZXQuXG4gICpcbisgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGVcbisgKiBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMsIHJlYWQgZXZlcnkgdGltZXN0YW1wIGluZGV4IHByaW9yIHRvIHBlcmZvcm1pbmdcbisgKiB0aGUgc29mdCByZXNldC4gVGhlIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyByZWFkcyBlbnN1cmUgdGhhdCB0aGUgcmVnaW9uXG4rICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltc2V0YW1wXG4rICogY291bnRlciBpcyByZXNldCB0byB6ZXJvLlxuKyAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIHdoZW5cbiAgKiAgICAgICAgIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgUEhZIHJlZ2lzdGVyLlxuICAqL1xuQEAgLTIzMTAsNiArMjMwOSwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXHR1MzIgZ2xvYmFsX3ZhbDtcbiBcdGludCBlcnI7XG4gXG4rXHRlcnIgPSBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKGh3LCBwb3J0KTtcbitcdGlmIChlcnIpIHtcbitcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcXG5cIixcbitcdFx0XHQgIHBvcnQsIGVycik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRlcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsIFx1MDAyNmdsb2JhbF92YWwpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcIkZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcXG5cIixcbkBAIC01ODAxLDggKzU4MDcsOSBAQCB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5KHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9lODJ4KGh3KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxuLVx0XHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpO1xuLVx0XHRicmVhaztcbitcdFx0LyogRTgyNSBoYXJkd2FyZSBtdXN0IG9ubHkgcmVzZXQgdGltZXN0YW1wIG1lbW9yeSBhcyBwYXJ0IG9mXG4rXHRcdCAqIHRoZSBzb2Z0IHJlc2V0IHByb2NlZHVyZS5cbitcdFx0ICovXG4gXHRjYXNlIElDRV9NQUNfRTgxMDpcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjA5OjQwLjEzNDQ2NzcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExOTIwNjk4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGljZWAgUFRQIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgYGljZWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIEludGVsJ3MgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlcnMuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIHByZXR0eSBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHJld29ya2luZyB0aGUgbG9ja2luZyBzdHJhdGVneSB3aXRoaW4gdGhlIGRyaXZlciwgc2hpZnRpbmcgZnJvbSBtdXRleGVzIHRvIHNwaW5sb2NrcyBpbiBzb21lIGFyZWFzLCBhbmQgbWFraW5nIGhlYXZ5IHVzZSBvZiBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBwb3J0cywgcGFydGljdWxhcmx5IGluIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggVFggdGltZXN0YW1wcy4gVGhleSd2ZSBhbHNvIGFkZGVkIGEgd2FpdCBmdW5jdGlvbiB0byBkcmFpbiBpbi1mbGlnaHQgdGltZXN0YW1wcy4gVGhlcmUncyBhbHNvIHNvbWUgUEhZIHJlc3RhcnQgbG9naWMgYmVpbmcgaGFuZGxlZCBoZXJlLiBUaGVyZSdzIHNvbWUgY2hhbmdlcyB0byB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uXG5cblRoZSBjb2RlIG1vZGlmaWVzIHRoZSB0aW1lc3RhbXBpbmcgbG9naWMsIGxvY2tpbmcgbWVjaGFuaXNtcyAobXV0ZXggdG8gc3BpbmxvY2svUkNVKSwgYW5kIFBIWSByZXNldCBsb2dpYy5cblxuTXkgaW5pdGlhbCBjb25jZXJuIGlzbid0IGFib3V0IHRoZSAqZnVuY3Rpb25hbGl0eSogb2YgdGhlIGNoYW5nZXMsIGJ1dCB3aGV0aGVyIHRoaXMgY29uc3RpdHV0ZXMgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBwcm9tcHQgc2F5cyBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbkdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBwcmV0dHkgY2VydGFpbiB0aGF0IHRoZSBgaWNlYCBkcml2ZXIsIHdoaWNoIGlzIHNwZWNpZmljIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcywgaXMgKm5vdCogdHlwaWNhbGx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCBsaWtlIHRoZSBgZTEwMDBgLCBgZTEwMDBlYCwgb3IgYGlnYmAgZHJpdmVycywgd2hpY2ggYXJlIGNvbW1vbmx5IGVtdWxhdGVkLiBUaGlzIGxvb2tzIGxpa2UgdGhlIGBpY2VgIGRyaXZlciBtaWdodCBiZSBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZS5cblxuU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggY291bGQgcG90ZW50aWFsbHkgYmUgcmVhY2hlZCBieSBhIGZ1enplciAqZXZlbiBpZiogaXQgaXMgbm90IGVtdWxhdGVkLiBTeXprYWxsZXIsIGluIG15IGV4cGVyaWVuY2UsIGhhcyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMsIGluY2x1ZGluZyBzb21lIHBzZXVkby1zeXNjYWxscyB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIFBDSSBkZXZpY2VzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBmdXp6aW5nIGRlcHRoIHJlYWNoIGludG8gdGhlIGludHJpY2FjaWVzIG9mIFBUUCBsb2dpYyB3aXRoaW4gdGhlIGBpY2VgIGRyaXZlcj8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciB0aGUgYGljZWAgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg1NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjA5OjUxLjMyNjUzOTk2M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4NTczNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3B0cF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI2MDQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZT00Nz1pY2UtJChDT05GSUdfUENJX0lPVikgKz1cXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvTWFrZWZpbGUtNTYtXFx0aWNlX3ZmX2xpYi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL01ha2VmaWxlOjU3OmljZS0kKENPTkZJR19QVFBfMTU4OF9DTE9DSykgKz0gaWNlX3B0cC5vIGljZV9wdHBfaHcubyBpY2VfZHBsbC5vIGljZV90c3BsbC5vIGljZV9jcGkubyBpY2VfdHhjbGsub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9NYWtlZmlsZS01OC1pY2UtJChDT05GSUdfRENCKSArPSBpY2VfZGNiLm8gaWNlX2RjYl9ubC5vIGljZV9kY2JfbGliLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaD02OTU9c3RhdGljIGlubGluZSBib29sIGljZV92ZWN0b3JfY2hfZW5hYmxlZChzdHJ1Y3QgaWNlX3FfdmVjdG9yICpxdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC03MDAtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oOjcwMTogKiBpY2VfcHRwX3BmX2hhbmRsZXNfdHhfaW50ZXJydXB0IC0gQ2hlY2sgaWYgUEYgaGFuZGxlcyBUeCBpbnRlcnJ1cHRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgtNzAyLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC03MDYtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oOjcwNzpzdGF0aWMgaW5saW5lIGJvb2wgaWNlX3B0cF9wZl9oYW5kbGVzX3R4X2ludGVycnVwdChzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgtNzA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtNy0jaW5jbHVkZSBcXFwiaWNlX2Zsb3cuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjg6I2luY2x1ZGUgXFxcImljZV9wdHBfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhY2tpbmcuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY3BpLmMtNS0jaW5jbHVkZSBcXFwiaWNlX2NvbW1vbi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY3BpLmM6NjojaW5jbHVkZSBcXFwiaWNlX3B0cF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY3BpLmMtNy0jaW5jbHVkZSBcXFwiaWNlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NwaS5oLTctI2luY2x1ZGUgXFxcImljZV90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jcGkuaDo4OiNpbmNsdWRlIFxcXCJpY2VfcHRwX2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jcGkuaC05LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDg3OT1zdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MjUoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODg2LVxcdCAqIG90aGVyd2lzZSB1c2Vyc3BhY2UgY2FuIHRyaWdnZXIgZGl2LWJ5LXplcm8gaW4gaWNlX3R4Y2xrX3NldF9jbGsoKS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODg3OlxcdCAqIFdoZW4gUFRQIGlzIHN1cHBvcnRlZCwgaWNlX3B0cF9pbml0KCkgaGFuZGxlcyB0aGlzLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4ODgtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDg4OS1cXHRpZiAoIXRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVxcdTAwM2VmbGFncykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODkwOlxcdFxcdGljZV9wdHBfaW5pdF9odyhcXHUwMDI2cGYtXFx1MDAzZWh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODkxLVxcdFxcdGlmIChwZi1cXHUwMDNlaHcubGFuZV9udW0gXFx1MDAzZT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jPTM3NTk9aWNlX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMtMzc3MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYzozNzcyOlxcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IGljZV9wdHBfY2xvY2tfaW5kZXgocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTM3NzMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MzY9aWNlX3ByZXBhcmVfZm9yX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTYxMC1cXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUFRQX1NVUFBPUlRFRCwgcGYtXFx1MDAzZWZsYWdzKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo2MTE6XFx0XFx0aWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZiwgcmVzZXRfdHlwZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNjEyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MTEwMz1pY2VfbGlua19ldmVudChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGxpbmtfdXAsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xMTUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjExNTQ6XFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgbGlua191cCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTE1NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTMwNjA9c3RhdGljIGlycXJldHVybl90IGljZV9sbF90c19pbnRyKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA2My1cXHR1MzIgcGZfaW50cl9zdGFydF9vZmZzZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MzA2NDpcXHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA2NS1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA3My1cXHRpZiAodHgtXFx1MDAzZWluaXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMDc0OlxcdFxcdGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcCh0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzA3NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMwNzgtXFx0XFx0aWYgKGlkeCAhPSB0eC1cXHUwMDNlbGVuKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMwNzk6XFx0XFx0XFx0aWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcCh0eCwgaWR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMDgwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTMwOTc9c3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHIoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjMxODM6XFx0XFx0cmV0ID0gaWNlX3B0cF90c19pcnEocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMxODQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzE5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMTk5OlxcdFxcdFxcdGljZV9wdHBfZXh0dHNfZXZlbnQocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMyMDAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MzIzND1zdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21pc2NfaW50cl90aHJlYWRfZm4oaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0zMjQ0LVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUNFX01JU0NfVEhSRUFEX1RYX1RTVEFNUCwgcGYtXFx1MDAzZW1pc2NfdGhyZWFkKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzozMjQ1OlxcdFxcdGljZV9wdHBfcHJvY2Vzc190cyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzI0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTMyNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MzI1MTpcXHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMzI1Mi1cXHRcXHQvKiBJZiBhbnkgbmV3IFR4IHRpbWVzdGFtcHMgaGFwcGVuZWQgd2hpbGUgaW4gaW50ZXJydXB0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDA2ND1pbnQgaWNlX3ZzaV9yZWNmZ19xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBpbnQgbmV3X3J4LCBpbnQgbmV3X3R4LCBib29sIGxvY2tlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQxMTEtXFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDExMjpcXHRcXHRpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQxMTMtXFx0Z290byBkb25lO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDcyMT1zdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ3MjktXFx0aWYgKHRlc3RfYml0KElDRV9GTEFHX1BUUF9TVVBQT1JURUQsIHBmLVxcdTAwM2VmbGFncykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDczMDpcXHRcXHRpY2VfcHRwX2luaXQocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ3MzEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00NzU3PXN0YXRpYyB2b2lkIGljZV9kZWluaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzY4LVxcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ3Njk6XFx0XFx0aWNlX3B0cF9yZWxlYXNlKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzcwLVxcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cXHUwMDNlZmxhZ3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NzY0NT1zdGF0aWMgdm9pZCBpY2VfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NzUwLVxcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cXHUwMDNlZmxhZ3MpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjc3NTE6XFx0XFx0aWNlX3B0cF9yZWJ1aWxkKHBmLCByZXNldF90eXBlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NzUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgwMC1cXHRcXHRpZiAocGYtXFx1MDAzZXB0cC5wb3J0LmxpbmtfdXAgIT0gbGlua191cClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3ODAxOlxcdFxcdFxcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc4MDItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgyMy1cXHQvKiBSZXN0b3JlIHRpbWVzdGFtcCBtb2RlIHNldHRpbmdzIGFmdGVyIFZTSSByZWJ1aWxkICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NzgyNDpcXHRpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc4MjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzgyNi1cXHQvKiBTdGFydCBQVFAgcGVyaW9kaWMgd29yayBhZnRlciBWU0kgaXMgZnVsbHkgcmVidWlsdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjc4Mjc6XFx0aWNlX3B0cF9xdWV1ZV93b3JrKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03ODI4LVxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTk3OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpY2VfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTk4MjktXFx0Lm5kb194c2tfd2FrZXVwID0gaWNlX3hza193YWtldXAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6OTgzMDpcXHQubmRvX2h3dHN0YW1wX2dldCA9IGljZV9wdHBfaHd0c3RhbXBfZ2V0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjk4MzE6XFx0Lm5kb19od3RzdGFtcF9zZXQgPSBpY2VfcHRwX2h3dHN0YW1wX3NldCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy05ODMyLX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTExPXN0YXRpYyBjb25zdCBjaGFyIGljZV9waW5fbmFtZXNbXVs2NF0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjA6c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfcHRwX3Bpbl9kZXNjIGljZV9waW5fZGVzY19lODJ4W10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMS1cXHQvKiBuYW1lLCAgICAgICAgZ3BpbywgICAgICAgZGVsYXkgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2U4MjVjW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yNy1cXHQvKiBuYW1lLCAgICAgICAgZ3BpbywgICAgICAgZGVsYXkgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozNjpzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9wdHBfcGluX2Rlc2MgaWNlX3Bpbl9kZXNjX2U4MTBbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM3LVxcdC8qIG5hbWUsICAgICAgICBncGlvLCAgICAgICBkZWxheSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz00NT1zdGF0aWMgY29uc3QgY2hhciBpY2VfcGluX25hbWVzX2RwbGxbXVs2NF0gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTI6c3RhdGljIGNvbnN0IHN0cnVjdCBpY2VfcHRwX3Bpbl9kZXNjIGljZV9waW5fZGVzY19kcGxsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy01My1cXHQvKiBuYW1lLCAgIGdwaW8sICAgICAgIGRlbGF5ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTYwPXN0YXRpYyBzdHJ1Y3QgaWNlX3B0cCAqaWNlX2dldF9jdHJsX3B0cChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2ODogKiBpY2VfcHRwX2ZpbmRfcGluX2lkeCAtIEZpbmQgcGluIGluZGV4IGluIHB0cF9waW5fZGVzY1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjktICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03NC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjc1OnN0YXRpYyBpbnQgaWNlX3B0cF9maW5kX3Bpbl9pZHgoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gcHRwX3Bpbl9mdW5jdGlvbiBmdW5jLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzYtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGNoYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTE6ICogaWNlX3B0cF9jZmdfdHhfaW50ZXJydXB0IC0gQ29uZmlndXJlIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgZm9yIHRoZSBkZXZpY2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkyLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTYtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5NzpzdGF0aWMgdm9pZCBpY2VfcHRwX2NmZ190eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTEzND1zdGF0aWMgdm9pZCBpY2Vfc2V0X3J4X3RzdGFtcChzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBvbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTUxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTUyOiAqIGljZV9wdHBfZGlzYWJsZV90aW1lc3RhbXBfbW9kZSAtIERpc2FibGUgY3VycmVudCB0aW1lc3RhbXAgbW9kZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTUzLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTU4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTU5OnN0YXRpYyB2b2lkIGljZV9wdHBfZGlzYWJsZV90aW1lc3RhbXBfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE3MS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjE3MjogKiBpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUgLSBSZXN0b3JlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNzMtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNzctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxNzg6dm9pZCBpY2VfcHRwX3Jlc3RvcmVfdGltZXN0YW1wX21vZGUoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xNzkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxODM6XFx0aWNlX3B0cF9jZmdfdHhfaW50ZXJydXB0KHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTE4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTk1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTk2OiAqIGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyAtIFJlYWQgdGhlIHNvdXJjZSBjbG9jayByZWdpc3RlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTk3LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjAwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjAxOnU2NCBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcoc3RydWN0IGljZV9wZiAqcGYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0yMDItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjQ2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MjQ3OiAqIGljZV9wdHBfZXh0ZW5kXzMyYl90cyAtIENvbnZlcnQgYSAzMmIgbmFub3NlY29uZHMgdGltZXN0YW1wIHRvIDY0YlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjQ4LSAqIEBjYWNoZWRfcGhjX3RpbWU6IHJlY2VudGx5IGNhY2hlZCBjb3B5IG9mIFBIQyB0aW1lXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTI4My0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjI4NDpzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzMyYl90cyh1NjQgY2FjaGVkX3BoY190aW1lLCB1MzIgaW5fdHN0YW1wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMjg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzEzLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzE0OiAqIGljZV9wdHBfZXh0ZW5kXzQwYl90cyAtIENvbnZlcnQgYSA0MGIgdGltZXN0YW1wIHRvIDY0YiBuYW5vc2Vjb25kc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzE1LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzM1LSAqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzozMzY6ICogU2VlIGljZV9wdHBfZXh0ZW5kXzMyYl90cyBmb3IgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiB0aGUgZXh0ZW5zaW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zMzctICogYWxnb3JpdGhtLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzM4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzM5OnN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzUwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzUxOlxcdHJldHVybiBpY2VfcHRwX2V4dGVuZF8zMmJfdHMoUkVBRF9PTkNFKHBmLVxcdTAwM2VwdHAuY2FjaGVkX3BoY190aW1lKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM1Mi1cXHRcXHRcXHRcXHQgICAgIChpbl90c3RhbXAgXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiBtYXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzU1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzU2OiAqIGljZV9wdHBfaXNfdHhfdHJhY2tlcl91cCAtIENoZWNrIGlmIFR4IHRyYWNrZXIgaXMgcmVhZHkgZm9yIG5ldyB0aW1lc3RhbXBzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zNTctICogQHR4OiB0aGUgUFRQIFR4IHRpbWVzdGFtcCB0cmFja2VyIHRvIGNoZWNrXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTM2ND1zdGF0aWMgYm9vbFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzY1OmljZV9wdHBfaXNfdHhfdHJhY2tlcl91cChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zNjYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzY3OlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM2ODpcXHRcXHRjb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM2OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzc1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6Mzc2OiAqIGljZV9wdHBfcmVxX3R4X3NpbmdsZV90c3RhbXAgLSBSZXF1ZXN0IFR4IHRpbWVzdGFtcCBmb3IgYSBwb3J0IGZyb20gRldcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM3Ny0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzc5LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzgwOnZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM4MS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0zODItXFx0c3RydWN0IGljZV9lODEwX3BhcmFtcyAqcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MzgzOlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzg0LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTM5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjM5MTpcXHRwdHBfcG9ydCA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGljZV9wdHBfcG9ydCwgdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMzkyLVxcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00MjMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo0MjQ6ICogaWNlX3B0cF9jb21wbGV0ZV90eF9zaW5nbGVfdHN0YW1wIC0gQ29tcGxldGUgVHggdGltZXN0YW1wIGZvciBhIHBvcnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQyNS0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQyNi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjQyNzp2b2lkIGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00Mjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00MzEtXFx0c3RydWN0IGljZV9lODEwX3BhcmFtcyAqcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NDMyOlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDMzLVxcdHU2NCByYXdfdHN0YW1wLCB0c3RhbXA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTQ0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjQ0NDpcXHRwdHBfcG9ydCA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGljZV9wdHBfcG9ydCwgdHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNDQ1LVxcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy00OTktXFx0LyogRXh0ZW5kIHRoZSB0aW1lc3RhbXAgdXNpbmcgY2FjaGVkIFBIQyB0aW1lICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1MDA6XFx0dHN0YW1wID0gaWNlX3B0cF9leHRlbmRfNDBiX3RzKHBmLCByYXdfdHN0YW1wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUwMS1cXHRpZiAodHN0YW1wKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxMy0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjUxNDogKiBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wIC0gUHJvY2VzcyBUeCB0aW1lc3RhbXBzIGZvciBhIHBvcnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTUxNS0gKiBAdHg6IHRoZSBQVFAgVHggdGltZXN0YW1wIHRyYWNrZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTYwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NTYxOnN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNTYyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjU2MzpcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTU2NC1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy01NzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo1NzI6XFx0cHRwX3BvcnQgPSBjb250YWluZXJfb2YodHgsIHN0cnVjdCBpY2VfcHRwX3BvcnQsIHR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTU3My1cXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHB0cF9wb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNjc2LVxcdFxcdC8qIEV4dGVuZCB0aGUgdGltZXN0YW1wIHVzaW5nIGNhY2hlZCBQSEMgdGltZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6Njc3OlxcdFxcdHRzdGFtcCA9IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhwZiwgcmF3X3RzdGFtcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02NzgtXFx0XFx0aWYgKHRzdGFtcCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2OTM6c3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo2OTg6c3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy02OTkte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzAwOlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcwMy1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzA0OlxcdFxcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFxcdTAwMjZwb3J0LVxcdTAwM2V0eDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcwNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzE0OlxcdFxcdGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAodHgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzE2OlxcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MTctXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03MjItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo3MjM6ICogaWNlX3B0cF9hbGxvY190eF90cmFja2VyIC0gSW5pdGlhbGl6ZSB0cmFja2luZyBmb3IgVHggdGltZXN0YW1wc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzI0LSAqIEB0eDogVHggdHJhY2tpbmcgc3RydWN0dXJlIHRvIGluaXRpYWxpemVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzI2LSAqIEFzc3VtZXMgdGhhdCB0aGUgbGVuZ3RoIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuIERvIG5vdCBjYWxsIGRpcmVjdGx5LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzI3OiAqIHVzZSB0aGUgaWNlX3B0cF9pbml0X3R4XyogaW5zdGVhZC5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTcyOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTcyOT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo3MzA6aWNlX3B0cF9hbGxvY190eF90cmFja2VyKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTczMS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTc1OD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzU5OmljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtNzg5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6NzkwOiAqIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlciAtIEZsdXNoIGFueSByZW1haW5pbmcgdGltZXN0YW1wcyBmcm9tIHRoZSB0cmFja2VyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy03OTEtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz03OTY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjc5NzppY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTc5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTgwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjgwNTpcXHRpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4ocGYsIHR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTgwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODQxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6ODQyOiAqIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlIC0gTWFyayB1bmZpbmlzaGVkIHRpbWVzdGFtcHMgYXMgc3RhbGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg0My0gKiBAdHg6IHRoZSB0cmFja2VyIHRvIG1hcmtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9ODUwPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4NTE6aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODYwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6ODYxOiAqIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIgLSBGbHVzaCBhbGwgdGltZXN0YW1wIHRyYWNrZXJzIG9uIHRoaXMgY2xvY2tcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg2Mi0gKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jPTg2Nz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6ODY4OmljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04Njkte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6ODcwOlxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy04NzEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg3Ni1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg3NzpcXHRcXHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocHRwX3BvcnRfdG9fcGYocG9ydCksIFxcdTAwMjZwb3J0LVxcdTAwM2V0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4Nzg6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg3OS1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg4NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjg4NTogKiBpY2VfcHRwX3JlbGVhc2VfdHhfdHJhY2tlciAtIFJlbGVhc2UgYWxsb2NhdGVkIG1lbW9yeSBmb3IgVHggdHJhY2tlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtODg2LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9ODkxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo4OTI6aWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTg5My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjkwMzpcXHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocGYsIHR4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkwNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTE3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTE4OiAqIGljZV9wdHBfaW5pdF90eF9lODJ4IC0gSW5pdGlhbGl6ZSB0cmFja2luZyBmb3IgVHggdGltZXN0YW1wc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTE5LSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTI5LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTMwOnN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3R4X2U4Mngoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTkzMS1cXHRcXHRcXHRcXHR1OCBwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5Mzg6XFx0cmV0dXJuIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcih0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05MzktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NDEtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5NDI6ICogaWNlX3B0cF9pbml0X3R4IC0gSW5pdGlhbGl6ZSB0cmFja2luZyBmb3IgVHggdGltZXN0YW1wc1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTQzLSAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTUxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6OTUyOnN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3R4KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IHBvcnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5NjQ6XFx0cmV0dXJuIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcih0eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy05NjctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzo5Njg6ICogaWNlX3B0cF91cGRhdGVfY2FjaGVkX3BoY3RpbWUgLSBVcGRhdGUgdGhlIGNhY2hlZCBQSEMgdGltZSB2YWx1ZXNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk2OS0gKiBAcGY6IEJvYXJkIHNwZWNpZmljIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTk4My0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjk4NDpzdGF0aWMgaW50IGljZV9wdHBfdXBkYXRlX2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtOTg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTAwMS1cXHQvKiBSZWFkIHRoZSBjdXJyZW50IFBIQyB0aW1lICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDAyOlxcdHN5c3RpbWUgPSBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcocGYsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTAwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTAzMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEwMzM6ICogaWNlX3B0cF9yZXNldF9jYWNoZWRfcGhjdGltZSAtIFJlc2V0IGNhY2hlZCBQSEMgdGltZSBhZnRlciBhbiB1cGRhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwMzQtICogQHBmOiBCb2FyZCBzcGVjaWZpYyBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDQ0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA0NTpzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA0Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNTItXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDUzOlxcdGVyciA9IGljZV9wdHBfdXBkYXRlX2NhY2hlZF9waGN0aW1lKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNTQtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDY4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA2OTogKiBpY2VfcHRwX3dyaXRlX2luaXQgLSBTZXQgUEhDIHRpbWUgdG8gcHJvdmlkZWQgdmFsdWVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNzAtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDc0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA3NTpzdGF0aWMgaW50IGljZV9wdHBfd3JpdGVfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDgwOlxcdHJldHVybiBpY2VfcHRwX2luaXRfdGltZShodywgbnMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA4MS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwODMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDg0OiAqIGljZV9wdHBfd3JpdGVfYWRqIC0gQWRqdXN0IFBIQyBjbG9jayB0aW1lIGF0b21pY2FsbHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwODUtICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMDkwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTA5MTpzdGF0aWMgaW50IGljZV9wdHBfd3JpdGVfYWRqKHN0cnVjdCBpY2VfcGYgKnBmLCBzMzIgYWRqKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTA5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMDk1OlxcdHJldHVybiBpY2VfcHRwX2Fkal9jbG9jayhodywgYWRqKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEwOTYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMTA3PXN0YXRpYyB1NjQgaWNlX2Jhc2VfaW5jdmFsKHN0cnVjdCBpY2VfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTIwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTEyMTogKiBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8gLSBDaGVjayB3aGV0aGVyIFR4IEZJRk8gaXMgaW4gYW4gT0sgc3RhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExMjItICogQHBvcnQ6IFBUUCBwb3J0IGZvciB3aGljaCBUeCBGSUZPIGlzIGNoZWNrZWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExMjMtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMTI0OnN0YXRpYyBpbnQgaWNlX3B0cF9jaGVja190eF9maWZvKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE3MS1cXHRcXHRcXHRwb3J0LVxcdTAwM2Vwb3J0X251bSwgcXVhZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMTcyOlxcdFxcdGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZTgyeChodywgcXVhZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTczLVxcdFxcdHBvcnQtXFx1MDAzZXR4X2ZpZm9fYnVzeV9jbnQgPSBGSUZPX09LO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTgwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE4MTogKiBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMgLSBDaGVjayBmb3IgdmFsaWQgVHggYW5kIFJ4IG9mZnNldHNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExODItICogQHdvcms6IFBvaW50ZXIgdG8gdGhlIGt0aHJlYWRfd29yayBzdHJ1Y3R1cmUgZm9yIHRoaXMgdGFza1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMTk0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE5NTpzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTExOTYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTE5NzpcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTE5OC1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjAzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTIwNDpcXHRwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpY2VfcHRwX3BvcnQsIG92X3dvcmsud29yayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjA1LVxcdHBmID0gcHRwX3BvcnRfdG9fcGYocG9ydCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyMTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMjE2OlxcdHR4X2VyciA9IGljZV9wdHBfY2hlY2tfdHhfZmlmbyhwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyMTctXFx0aWYgKCF0eF9lcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyNDUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMjQ2OiAqIGljZV9wdHBfcG9ydF9waHlfc3RvcCAtIFN0b3AgdGltZXN0YW1waW5nIGZvciBhIFBIWSBwb3J0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMjQ3LSAqIEBwdHBfcG9ydDogUFRQIHBvcnQgdG8gc3RvcFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYz0xMjQ5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jOjEyNTA6aWNlX3B0cF9wb3J0X3BoeV9zdG9wKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTI1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyODQtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMjg1OiAqIGljZV9wdHBfcG9ydF9waHlfcmVzdGFydCAtIChSZSlzdGFydCBhbmQgY2FsaWJyYXRlIFBIWSB0aW1lc3RhbXBpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyODYtICogQHB0cF9wb3J0OiBQVFAgcG9ydCBmb3Igd2hpY2ggdGhlIFBIWSBzdGFydCBpcyBzZXRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM9MTI5Mj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMjkzOmljZV9wdHBfcG9ydF9waHlfcmVzdGFydChzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEyOTQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMzAxLVxcdGlmICghcHRwX3BvcnQtXFx1MDAzZWxpbmtfdXApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMzAyOlxcdFxcdHJldHVybiBpY2VfcHRwX3BvcnRfcGh5X3N0b3AocHRwX3BvcnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTMwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTMzMi1cXHRcXHQvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTMzMzpcXHRcXHQgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEzMzQtXFx0XFx0ICogdGhhdCB0aGUgVHggYW5kIFJ4IG9mZnNldCBjYWxpYnJhdGlvbiBoYXMgY29tcGxldGVkLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYy0xMzU5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmM6MTM2MDogKiBpY2VfcHRwX2xpbmtfY2hhbmdlIC0gUmVjb25maWd1cmUgUFRQIGFmdGVyIGxpbmsgc3RhdHVzIGNoYW5nZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMtMTM2MS0gKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jLTEzNjMtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYzoxMzY0OnZvaWQgaWNlX3B0cF9saW5rX2NoYW5nZShzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBsaW5rdXApXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjA5OjUxLjQzOTQwMTUxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjA4MjQ5MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBpY2UgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyB0YXJnZXRpbmcgdGhlIGBpY2VgIGRyaXZlciwgd2hpY2ggSSBrbm93IGlzIGZvciBJbnRlbCdzIEU4MDAgc2VyaWVzIE5JQ3MuIFRoZSBwcm9ibGVtIGlzLCBRRU1VLCB3aGljaCBpcyBvdXIgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudCwgZG9lc24ndCBlbXVsYXRlIHRoZSBFODAwIHNlcmllcy5cblxuSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyLCB3b25kZXJpbmcgaWYgaXQgY291bGQgc29tZWhvdyByZWFjaCBpbnRvIHRoZSBgaWNlYCBkcml2ZXIncyBQVFAgbG9naWMuICBJIHdhcyBnb2luZyB0byBzZWUgaWYgc3l6a2FsbGVyIGV2ZW4gaGFzIGFueSBkZXNjcmlwdGlvbnMgZm9yIGBpY2VgLCBidXQgdGhlbiBJIHNhdyB0aGF0IHRoZSB0b29scyBJIG5lZWQgKGByZWFkLXN5ei1zcGVjYCBhbmQgYHN5ei1ncmVwcGVyYCkgYXJlbid0IGFjdHVhbGx5IGF2YWlsYWJsZSB0byBtZSBoZXJlLiBJdCdzIGEgYml0IG9mIGEgcmVkIGhlcnJpbmcsIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gdXNlIG90aGVyIHRvb2xzLlxuXG5UaGVuIEkgcmUtcmVhZCB0aGUgcHJvbXB0J3MgcnVsZXMgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCBzYXlzIHRvIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwYXRjaCBhZmZlY3RzIFwidmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgIEkgaW1tZWRpYXRlbHkgdGhvdWdodCB0aGF0IGBpY2VgIGNvdWxkIGJlIGEgU21hcnROSUMsIGJ1dCBhZnRlciBzb21lIHJlZmxlY3Rpb24gaXQncyBhIHN0YW5kYXJkIE5JQyB0aGF0IGp1c3QgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS5cblxuR2l2ZW4gdGhhdCBgaWNlYCBpcyBhbiBFdGhlcm5ldCBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBhbmQgaXNuJ3QgZW11bGF0ZWQgaW4gUUVNVSwgaXQgbmVjZXNzaXRhdGVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIFRoZSBwcm9tcHQgZ2l2ZXMgc29tZSBleGFtcGxlcyBvZiBzaW1pbGFyIGRyaXZlcnMsIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gYGljZWAgaXNuJ3QgbGlzdGVkLCBidXQgdGhlIGxvZ2ljIHN0aWxsIGFwcGxpZXM7IGBpY2VgIGlzbid0IGVtdWxhdGVkIGFuZCByZXF1aXJlcyBoYXJkd2FyZS5cblxuSSBrbm93IHN5emthbGxlciBkb2Vzbid0IGhhdmUgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgaGFyZHdhcmUuIEl0IHVzZXMgYGUxMDAwYCwgYGUxMDAwZWAsIGB2aXJ0aW8tbmV0YCwgZXRjLiAgU28sIGlmIGBpY2VgIGlzIG5vdCBlbXVsYXRlZCwgdGhlIGNvZGUgcGF0aHMgYXJlIHNpbXBseSBpbmFjY2Vzc2libGUgaW4gb3VyIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIEkgY29uc2lkZXJlZCB0aGUgUENJIGZ1enplciBhZ2FpbiBidXQgcmVhbGl6ZWQgaXQncyB1bmxpa2VseSB0byByZWFjaCBkZWVwIGludG8gY29tcGxleCBkcml2ZXIgbG9naWMgbGlrZSB0aGlzLCBlc3BlY2lhbGx5IHRoZSBQVFAgdGltZXN0YW1waW5nLCBQSFkgb2Zmc2V0IGNhbGlicmF0aW9uLCBhbmQgbGluayBzdGF0ZSBjaGFuZ2UgYXNwZWN0cyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcuXG5cblRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdG8gcmV0dXJuIGBmYWxzZWAgaWYgdGhlIHBhdGNoIG1vZGlmaWVzIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFNpbmNlIGBpY2VgIHJlcXVpcmVzIGEgcGh5c2ljYWwgUENJZSBjYXJkLCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZS5cblxuSSBhbHNvIGNoZWNrZWQgUUVNVSdzIHN1cHBvcnRlZCBuZXR3b3JrIGRldmljZXMgYW5kIGNvbmZpcm1lZCB0aGVyZSdzIG5vIGBpY2VgLCBgaTQwZWAsIG9yIGBpeGdiZWAgZW11bGF0aW9uLiBBbGwgb2YgdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCBkaXJlY3RvcnkuXG5cblRodXMsIHRoZSBwYXRjaCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSBgaWNlYCBkcml2ZXIsIGEgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IHN1cHBvcnRlZCBieSBzdGFuZGFyZCBRRU1VLiAgVGhlcmVmb3JlLCBJJ20gZ29pbmcgd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OTcsIk91dHB1dFRva2VucyI6OTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDAxOjEwOjA4LjA0NzY1MzE4NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgUFRQIHRpbWVzdGFtcGluZyBhbmQgUEhZIG9mZnNldCBjYWxpYnJhdGlvbikgYXJlIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciAoaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgUFRQIHRpbWVzdGFtcGluZyBhbmQgUEhZIG9mZnNldCBjYWxpYnJhdGlvbikgYXJlIHVucmVhY2hhYmxlIGR1cmluZyB2aXJ0dWFsaXplZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDE6MTA6MDguMDQ3Njc1NTY1WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8qzgt[1] Phase: Running StartedAt: 2026-08-22 01:10:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8qzgt[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-22 01:10:18 +0000 UTC FinishedAt: 2026-08-22 01:10:23 +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,}