Name: series-workflow9m7jx Phase: Failed StartedAt: 2026-09-05 12:06:33 +0000 UTC FinishedAt: 2026-09-05 12:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9m7jx[0] Phase: Succeeded StartedAt: 2026-09-05 12:06:33 +0000 UTC FinishedAt: 2026-09-05 12:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9m7jx[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 12:06:33 +0000 UTC FinishedAt: 2026-09-05 12:23:43 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgbmV3IHNrYiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgZXhpc3Rpbmcgc2tiIGRyb3AgY2FsbHMgaW4gSVB2NC9JUHY2IHBhY2tldCBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgdG8gcmVjb3JkIHRoaXMgbmV3IHJlYXNvbi4gVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGRyb3AgcmVhc29uIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgdHJhY2Vfa2ZyZWVfc2tiIHRyYWNlcG9pbnQgd2l0aG91dCBhbHRlcmluZyBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3Iga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQzNzlkYzYzM2RlNzFlMTI5NTEzNzk4YTRhMWE3ZjE3NzQxZDVkYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDEyOjIyOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oIGIvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcbmluZGV4IDJmMzEyZDFmNjdkNjkuLmVkMmMwMjg4NGI2OGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcbkBAIC0xMjgsNiAmIzQzOzEyOCw3IEBAXG4gXHRGTihQU1BfSU5QVVQpXHRcdFx0XFxcbiBcdEZOKFBTUF9PVVRQVVQpXHRcdFx0XFxcbiBcdEZOKFJFQ1VSU0lPTl9MSU1JVClcdFx0XFxcbiYjNDM7XHRGTihJUF9UVExfRVhDRUVERUQpXHRcdFxcXG4gXHRGTmUoTUFYKVxuIFxuIC8qKlxuQEAgLTYwNiw2ICYjNDM7NjA3LDExIEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHtcbiBcdFNLQl9EUk9QX1JFQVNPTl9QU1BfT1VUUFVULFxuIFx0LyoqIEBTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlUOiBEZWFkIGxvb3Agb24gdmlydHVhbCBkZXZpY2UuICovXG4gXHRTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlULFxuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBoaXRcbiYjNDM7XHQgKiB6ZXJvIChzZWUgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpXG4mIzQzO1x0ICovXG4mIzQzO1x0U0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCxcbiBcdC8qKlxuIFx0ICogQFNLQl9EUk9QX1JFQVNPTl9NQVg6IHRoZSBtYXhpbXVtIG9mIGNvcmUgZHJvcCByZWFzb25zLCB3aGljaFxuIFx0ICogc2hvdWxkbiYjMzk7dCBiZSB1c2VkIGFzIGEgcmVhbCAmIzM5O3JlYXNvbiYjMzk7IC0gb25seSBmb3IgdHJhY2luZyBjb2RlIGdlblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuaW5kZXggOGI2NWYxMjU4M2ViNi4uYjI0MjU2MWQzN2U3MyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXG5AQCAtMTc0LDcgJiM0MzsxNzQsNyBAQCBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xuIFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XG4tXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5IRFIpO1xuJiM0MztcdFNLQl9EUl9TRVQocmVhc29uLCBJUF9UVExfRVhDRUVERUQpO1xuIGRyb3A6XG4gXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbiBcdHJldHVybiBORVRfUlhfRFJPUDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDUxOTQxYWQ2NTZhMzYuLjc0Y2FhZjg3NDZmZmMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTQ2NCw3ICYjNDM7NDY0LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiBcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXG4gXHRcdFx0XHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4tXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbkBAIC02MjMsNyAmIzQzOzYyMyw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiBcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuQEAgLTgxNSw3ICYjNDM7ODE1LDcgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCxcbiBcdFx0XHRcdCAgICAwKTtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuaW5kZXggOGZjNDc2NmM4ZGE5MC4uMGI2ZDc4YzhiNmJlNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5AQCAtNTc3LDcgJiM0Mzs1NzcsNyBAQCBpbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuIFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXG4tXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIpO1xuJiM0MztcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBuZXcgc2tiIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBleGlzdGluZyBza2IgZHJvcCBjYWxscyBpbiBJUHY0L0lQdjYgcGFja2V0IGZvcndhcmRpbmcgYW5kIGV4dGVuc2lvbiBoZWFkZXIgcHJvY2Vzc2luZyB0byByZWNvcmQgdGhpcyBuZXcgcmVhc29uLiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgZHJvcCByZWFzb24gbWV0YWRhdGEgcGFzc2VkIHRvIHRoZSB0cmFjZV9rZnJlZV9za2IgdHJhY2Vwb2ludCB3aXRob3V0IGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDM3OWRjNjMzZGU3MWUxMjk1MTM3OThhNGExYTdmMTc3NDFkNWRhNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTI6MjI6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaCBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCmluZGV4IDJmMzEyZDFmNjdkNjkuLmVkMmMwMjg4NGI2OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCkBAIC0xMjgsNiAmIzQzOzEyOCw3IEBACiAJRk4oUFNQX0lOUFVUKQkJCVwKIAlGTihQU1BfT1VUUFVUKQkJCVwKIAlGTihSRUNVUlNJT05fTElNSVQpCQlcCiYjNDM7CUZOKElQX1RUTF9FWENFRURFRCkJCVwKIAlGTmUoTUFYKQogCiAvKioKQEAgLTYwNiw2ICYjNDM7NjA3LDExIEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHsKIAlTS0JfRFJPUF9SRUFTT05fUFNQX09VVFBVVCwKIAkvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi8KIAlTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlULAomIzQzOwkvKioKJiM0MzsJICogQFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQ6IElQdjQgVFRMIG9yIElQdjYgaG9wIGxpbWl0IGhpdAomIzQzOwkgKiB6ZXJvIChzZWUgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpCiYjNDM7CSAqLwomIzQzOwlTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVELAogCS8qKgogCSAqIEBTS0JfRFJPUF9SRUFTT05fTUFYOiB0aGUgbWF4aW11bSBvZiBjb3JlIGRyb3AgcmVhc29ucywgd2hpY2gKIAkgKiBzaG91bGRuJiMzOTt0IGJlIHVzZWQgYXMgYSByZWFsICYjMzk7cmVhc29uJiMzOTsgLSBvbmx5IGZvciB0cmFjaW5nIGNvZGUgZ2VuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggOGI2NWYxMjU4M2ViNi4uYjI0MjU2MWQzN2U3MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtMTc0LDcgJiM0MzsxNzQsNyBAQCBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCS8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi8KIAlfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAlpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7Ci0JU0tCX0RSX1NFVChyZWFzb24sIElQX0lOSERSKTsKJiM0MzsJU0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7CiBkcm9wOgogCWtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pOwogCXJldHVybiBORVRfUlhfRFJPUDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA1MTk0MWFkNjU2YTM2Li43NGNhYWY4NzQ2ZmZjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC00NjQsNyAmIzQzOzQ2NCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiAJCQlfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwKIAkJCQkgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaXB2Nl9oZHIoc2tiKS0mZ3Q7aG9wX2xpbWl0LS07CkBAIC02MjMsNyAmIzQzOzYyMyw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCQkJX19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsCiAJCQkJICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApOwotCQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJa2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwpAQCAtODE1LDcgJiM0Mzs4MTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJCQlfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwKIAkJCQkgICAgMCk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaXB2Nl9oZHIoc2tiKS0mZ3Q7aG9wX2xpbWl0LS07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggOGZjNDc2NmM4ZGE5MC4uMGI2ZDc4YzhiNmJlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtNTc3LDcgJiM0Mzs1NzcsNyBAQCBpbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsIDApOwogCQlfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAKLQkJa2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUik7CiYjNDM7CQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFdlIG5lZWQgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCBpZGVudGlmeSB0aGUgbW9zdCBmcnVpdGZ1bCBhcmVhcyBmb3IgaW52ZXN0aWdhdGlvbi4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyb3AgcmVhc29uLCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGFuZCB1cGRhdGVzIHNldmVyYWwgbG9jYXRpb25zIHRvIHVzZSB0aGlzIG5ldyByZWFzb24uIFNwZWNpZmljYWxseSwgaW4gYG5ldC9pcHY0L2lwX2ZvcndhcmQuY2AsIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHdoZXJlIHBhY2tldHMgYXJlIGRyb3BwZWQsIG9yIHJhdGhlciwgKndoeSogdGhleSYjMzk7cmUgZHJvcHBlZCwgZnJvbSBgSVBfSU5IRFJgIHRvIGBJUF9UVExfRVhDRUVERURgLgoKTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8gc2VlIGlmIHRoaXMgdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUuIEFuZCBpdCBkb2VzLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGBpcF9mb3J3YXJkYCBhbmQgYGlwNl9mb3J3YXJkYCwgYWxvbmcgd2l0aCBJUHY2IHJvdXRpbmcgaGVhZGVyIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGxpa2UgYGlwdjZfc3JoX3JjdmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIG9mIGludGVyZXN0LiBIb3dldmVyLCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gSXMgdGhpcyBhICpwdXJlbHkqIGRlY29yYXRpdmUgY2hhbmdlPyBUaGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoYXQgdGhpcyB3b3VsZCBmYWxsIHVuZGVyICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZywmIzM0OyBidXQgdGhhdCYjMzk7cyBub3Qgd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdC4KCldlIGFyZSBjaGFuZ2luZyB0aGUgY2FsbCBvZiBga2ZyZWVfc2tiYCBvciBkcm9wIHJlYXNvbiBhbm5vdGF0aW9uLCBsaWtlIHRoZSBlbnVtIHZhbHVlLCB0byBhbm90aGVyIG9uZS4gV2hhdCYjMzk7cyB0aGUgZGlmZmVyZW5jZT8gVGltZSB0byBpbnZlc3RpZ2F0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBga2ZyZWVfc2tiX3JlYXNvbmAgKmFjdHVhbGx5KiBkb2VzLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZSBhbmQgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBrZnJlZV9za2JgIGFuZCBga2ZyZWVfc2tiX3JlYXNvbmAuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgaW4gZGVjaWRpbmcgaWYgdGhpcyBjcmVhdGVzIG5ldyBjb2RlIHBhdGhzIG9yIGlzIGp1c3QgJiMzNDtsb2dnaW5nJiMzNDsgb2Ygc29ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2ZyZWVfc2tiX3JlYXNvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0zNTExPXZvaWQgZGV2X2tmcmVlX3NrYl9hbnlfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbi0tXG5uZXQvY29yZS9kZXYuYy0zNTE1LVx0ZWxzZVxubmV0L2NvcmUvZGV2LmM6MzUxNjpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG5uZXQvY29yZS9kZXYuYy0zNTE3LX1cbi0tXG5uZXQvY29yZS9kZXYuYz00MjMzPXN0YXRpYyBpbmxpbmUgaW50IF9fZGV2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcSxcbi0tXG5uZXQvY29yZS9kZXYuYy00Mjg2LVx0XHRcdGlmICh1bmxpa2VseShkZWZlcl9jb3VudCBcdTAwM2UgUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnFkaXNjX21heF9idXJzdCkpKSB7XG5uZXQvY29yZS9kZXYuYzo0Mjg3Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9RRElTQ19CVVJTVF9EUk9QKTtcbm5ldC9jb3JlL2Rldi5jLTQyODgtXHRcdFx0XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbi0tXG5uZXQvY29yZS9kZXYuYz00NTEzPXNjaF9oYW5kbGVfaW5ncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKipwdF9wcmV2LCBpbnQgKnJldCxcbi0tXG5uZXQvY29yZS9kZXYuYy00NTU1LVx0Y2FzZSBUQ19BQ1RfU0hPVDpcbm5ldC9jb3JlL2Rldi5jOjQ1NTY6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvY29yZS9kZXYuYy00NTU3LVx0XHQqcmV0ID0gTkVUX1JYX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDU3Nz1zY2hfaGFuZGxlX2VncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy00NjA2LVx0Y2FzZSBUQ19BQ1RfU0hPVDpcbm5ldC9jb3JlL2Rldi5jOjQ2MDc6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvY29yZS9kZXYuYy00NjA4LVx0XHQqcmV0ID0gTkVUX1hNSVRfRFJPUDtcbi0tXG5uZXQvY29yZS9kZXYuYz00ODE5PWludCBfX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtNDgzNy1cdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jOjQ4Mzg6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtNDgzOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTQyOT1zdGF0aWMgaW50IGVucXVldWVfdG9fYmFja2xvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY3B1LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU0NzgtXHRkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhza2ItXHUwMDNlZGV2KTtcbm5ldC9jb3JlL2Rldi5jOjU0Nzk6XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbm5ldC9jb3JlL2Rldi5jLTU0ODAtXHRyZXR1cm4gTkVUX1JYX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTcxOD1pbnQgZG9feGRwX2dlbmVyaWMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZywgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU3NDgtXHRicGZfbmV0X2N0eF9jbGVhcihicGZfbmV0X2N0eCk7XG5uZXQvY29yZS9kZXYuYzo1NzQ5Olx0a2ZyZWVfc2tiX3JlYXNvbigqcHNrYiwgU0tCX0RST1BfUkVBU09OX1hEUCk7XG5uZXQvY29yZS9kZXYuYy01NzUwLVx0cmV0dXJuIFhEUF9EUk9QO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTYwMzQ9c3RhdGljIGludCBfX25ldGlmX3JlY2VpdmVfc2tiX2NvcmUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBib29sIHBmbWVtYWxsb2MsXG4tLVxubmV0L2NvcmUvZGV2LmMtNjIzNy1cbm5ldC9jb3JlL2Rldi5jOjYyMzg6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvY29yZS9kZXYuYy02MjM5LVx0XHQvKiBKYW1hbCwgbm93IHlvdSB3aWxsIG5vdCBhYmxlIHRvIGVzY2FwZSBleHBsYWluaW5nXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTIwMj1pbnQgX19uZWlnaF9ldmVudF9zZW5kKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTEyMzktXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjQwOlx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfRkFJTEVEKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNDEtXHRcdFx0cmV0dXJuIDE7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTI2MS1cdFx0XHRcdG5laWdoLVx1MDAzZWFycF9xdWV1ZV9sZW5fYnl0ZXMgLT0gYnVmZi1cdTAwM2V0cnVlc2l6ZTtcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyNjI6XHRcdFx0XHRrZnJlZV9za2JfcmVhc29uKGJ1ZmYsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9RVUVVRUZVTEwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTI2My1cdFx0XHRcdE5FSUdIX0NBQ0hFX1NUQVRfSU5DKG5laWdoLVx1MDAzZXRibCwgdW5yZXNfZGlzY2FyZHMpO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTEyODMtXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmVpZ2gtXHUwMDNlbG9jayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjg0Olx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9ERUFEKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyODUtXHR0cmFjZV9uZWlnaF9ldmVudF9zZW5kX2RlYWQobmVpZ2gsIDEpO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTE1OTY9aW50IG5laWdoX3Jlc29sdmVfb3V0cHV0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE2MjMtXHRyYyA9IC1FSU5WQUw7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjI0Olx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9ISF9GSUxMRkFJTCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI1LVx0Z290byBvdXQ7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTYzMT1pbnQgbmVpZ2hfY29ubmVjdGVkX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjQ3LVx0XHRlcnIgPSAtRUlOVkFMO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTY0ODpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9ISF9GSUxMRkFJTCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjQ5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGtmcmVlX3NrYl9yZWFzb25gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBga2ZyZWVfc2tiX3JlYXNvbmAuIElzIGl0IGRlZmluZWQgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBvciBwZXJoYXBzIGp1c3QgYSBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGA/IEkmIzM5O20gYmV0dGluZyB0aGUgbGF0dGVyLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSB0aGUgZXhhY3QgbG9jYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24g4oCTIHdoZXRoZXIgaXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLCBhIG1hY3JvIHdpdGggcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIHR1bmluZy4gS25vd2luZyB0aGUgZGV0YWlscyBvZiBpdHMgZGVmaW5pdGlvbiBkaXJlY3RseSBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgZm9yIGFuYWx5emluZyBrZXJuZWwgdHJhY2VzIGFuZCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYW55IHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3RhdGlzdGljcyBJIG1heSBiZSBsb29raW5nIGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBrZnJlZV9za2JfcmVhc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIFNLQiBEZWFsbG9jYXRpb24gUmVhc29ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgU0tCcyBhcmUgYmVpbmcgZnJlZWQsIGFuZCwgY3JpdGljYWxseSwgKndoeSouIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUga2VybmVsIHdoZXJlIGBrZnJlZV9za2JfcmVhc29uYCBpcyBiZWluZyBjYWxsZWQuIEkga25vdyB0aGUgZnVuY3Rpb24mIzM5O3MgbGlrZWx5IHJlc2lkaW5nIGluIGBuZXQvY29yZS9za2J1ZmYuY2Ag4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZ2l2ZW4gaXRzIHJvbGUgaW4gU0tCIG1hbmFnZW1lbnQuIFRoZSBjaGFsbGVuZ2UsIGFzIGFsd2F5cywgd2lsbCBiZSB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW5zIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCBlYWNoIHVzZSwgcGFydGljdWxhcmx5IGluIHRoZSBtb3JlIGNvbXBsZXggYXNwZWN0cyBvZiBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgdGhlcmUmIzM5O2xsIGJlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgY2FsbCBzdGFjayBhdCBlYWNoIGxvY2F0aW9uIHRvIGRlcml2ZSB0aGUgY29udGV4dC4gSSYjMzk7bSBob3BpbmcgdGhlcmUmIzM5O3MgdXNlZnVsIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgY29tbWVudHMgc3Vycm91bmRpbmcgdGhvc2UgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9za2JfcmVhc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTG9jYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYGtmcmVlX3NrYl9yZWFzb25gKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBrZnJlZV9za2JfcmVhc29uYC4gU2luY2UgaXQmIzM5O3MgYSBrZXJuZWwgZnVuY3Rpb24gb3IgdmFyaWFibGUsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgYWxsIHRoZSBoZWFkZXIgZmlsZXMgYXJlIHRoZXJlLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGRlY2xhcmF0aW9ucywgbWF5YmUgZXZlbiBpbmxpbmUgZGVmaW5pdGlvbnMuIElmIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGluIGBpbmNsdWRlL2AsIEkmIzM5O2xsIGV4cGFuZCB0aGUgc2VhcmNoIHRvIHRoZSBlbnRpcmUga2VybmVsIHNvdXJjZSwgbGlrZWx5IHVzaW5nIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCBpdHMgdXNhZ2UgYW5kIGRlY2xhcmF0aW9uIGFjcm9zcyB0aGUgY29kZWJhc2UuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYSBjb21tb24gZW5vdWdoIGNvbmNlcHQgcmVsYXRlZCB0byBuZXR3b3JrIGJ1ZmZlciBmcmVlaW5nLCBzbyBpdCBzaG91bGQgYmUgd2VsbC1kZWZpbmVkIHNvbWV3aGVyZSBhY2Nlc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9za2JfcmVhc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaD0yNj1ORl9EUk9QX1JFQVNPTihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24sIHUzMiBlcnIpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaC0yOS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6MzA6XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzEtXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xMzIwPXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzIxOmtmcmVlX3NrYl9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzIyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTEzMzA9c3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzMxLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTMzMjpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMzMtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzQ1OT1zdGF0aWMgaW5saW5lIHZvaWQgX19za2JfcXVldWVfcHVyZ2VfcmVhc29uKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDY0LVx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpKSAhPSBOVUxMKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDY1Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2Ni19XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtMTM2LSAqXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaDoxMzc6ICogVGhlIHJlYXNvbiBvZiBza2IgZHJvcCwgd2hpY2ggaXMgdXNlZCBpbiBrZnJlZV9za2JfcmVhc29uKCkuXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC0xMzgtICovXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oPTE1ND1zdGF0aWMgaW5saW5lIHZvaWQgaXA2dHVubmVsX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaC0xNjQtXHRcdH1cbmluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaDoxNjU6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlUKTtcbmluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaC0xNjYtXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaD02NT1pcDZmcmFnX2V4cGlyZV9mcmFnX3F1ZXVlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZyYWdfcXVldWUgKmZxKVxuLS1cbmluY2x1ZGUvbmV0L2lwdjZfZnJhZy5oLTEwOC1cdGljbXB2Nl9zZW5kKGhlYWQsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19GUkFHVElNRSwgMCk7XG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaDoxMDk6XHRrZnJlZV9za2JfcmVhc29uKGhlYWQsIFNLQl9EUk9QX1JFQVNPTl9GUkFHX1JFQVNNX1RJTUVPVVQpO1xuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtMTEwLVx0Z290byBvdXRfcmN1X3VubG9jaztcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTEyMjc9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC0xMjQyLVx0fSBlbHNlIHtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6MTI0MzpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIChlbnVtIHNrYl9kcm9wX3JlYXNvbilyZWFzb24pO1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC0xMjQ0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBrZnJlZV9za2JfcmVhc29uYCBEZXRhaWxzKioKCk9rYXksIEkgbmVlZCBhIHJlZnJlc2hlciBvbiBob3cgYGtmcmVlX3NrYl9yZWFzb25gIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gSSYjMzk7bGwgemVybyBpbiBvbiBsaW5lcyAxMzE1IHRocm91Z2ggMTM0MCwgYXMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIGtpbmRzIG9mIGRlZmluaXRpb25zIGFuZCBhc3NvY2lhdGVkIGNvbW1lbnRzIHJlc2lkZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCB0aGUgcmVhc29ucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkLCB0aGUgdmFyaW91cyBjYWxsIHNpdGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnRleHRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyAtIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBzdWJ0bGUgZGVzaWduIGNob2ljZXMsIG9yIGltcG9ydGFudCBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIGl0cyB1c2UuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBkZWJ1Z2dpbmcsIHN0YXRpc3RpY3MsIG9yIHBlcmhhcHMgZXZlbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHNvIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29tbWVudHMgYXMgd2VsbCwgdGhleSBmcmVxdWVudGx5IGhvbGQgdGhlIGtleSBpbmZvcm1hdGlvbiBmb3IgcHJvcGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxNTpcdFxuMTMxNjpcdHZvaWQgX19maXhfYWRkcmVzcyBza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuMTMxNzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEzMTg6XHRcdFx0XHRcdCAgICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7XG4xMzE5Olx0XG4xMzIwOlx0c3RhdGljIGlubGluZSB2b2lkXG4xMzIxOlx0a2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMzIyOlx0e1xuMTMyMzpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNrYiwgcmVhc29uKTtcbjEzMjQ6XHR9XG4xMzI1Olx0XG4xMzI2Olx0LyoqXG4xMzI3Olx0ICpcdGtmcmVlX3NrYiAtIGZyZWUgYW4gc2tfYnVmZiB3aXRoICYjMzk7Tk9UX1NQRUNJRklFRCYjMzk7IHJlYXNvblxuMTMyODpcdCAqXHRAc2tiOiBidWZmZXIgdG8gZnJlZVxuMTMyOTpcdCAqL1xuMTMzMDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEzMzE6XHR7XG4xMzMyOlx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xuMTMzMzpcdH1cbjEzMzQ6XHRcbjEzMzU6XHR2b2lkIHNrYl9yZWxlYXNlX2hlYWRfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4xMzM2Olx0dm9pZCBrZnJlZV9za2JfbGlzdF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNlZ3MsXG4xMzM3Olx0XHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbjEzMzg6XHR2b2lkIHNrYl9kdW1wKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZ1bGxfcGt0KTtcbjEzMzk6XHR2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNrX3NrYl9yZWFzb25fZHJvcGAqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc2tfc2tiX3JlYXNvbl9kcm9wYC4gSSYjMzk7bSBjdXJpb3VzIHdoYXQgaXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcuIEtub3dpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBvZiBwYWNrZXQgZHJvcHBpbmcgaXMgY3J1Y2lhbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2Ygc29ja2V0IGJ1ZmZlciAoc2tiKSBpc3N1ZSwgbGlrZWx5IGludm9sdmluZyByZXNvdXJjZSBsaW1pdGF0aW9ucywgcG9saWN5IHZpb2xhdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBlcnJvciBjb25kaXRpb25zLiBJIHdhbnQgdG8gc2VlIHdoYXQgc3BlY2lmaWMgY29udGV4dHMgYW5kIHNjZW5hcmlvcyBhcmUgaGFuZGxlZCB3aXRoaW4gYHNrX3NrYl9yZWFzb25fZHJvcGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgbG9naWMgYW5kIHBvdGVudGlhbGx5IHNvbWUgc3RhdGlzdGljcyB1cGRhdGVzLCBlcnJvciBsb2dnaW5nLCBvciBldmVuIG5ldHdvcmsgaW50ZXJmYWNlIGFkanVzdG1lbnRzLiBJJiMzOTttIHJlYWxseSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgJiMzOTtyZWFzb25zJiMzOTsgZm9yIGRyb3BwaW5nIHBhY2tldHMgYXQgdGhlIHNvY2tldCBsYXllci4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfc2tiX3JlYXNvbl9kcm9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL2JjbS5jPTM5OT1zdGF0aWMgdm9pZCBiY21fc2VuZF90b191c2VyKHN0cnVjdCBiY21fb3AgKm9wLCBzdHJ1Y3QgYmNtX21zZ19oZWFkICpoZWFkLFxuLS1cbm5ldC9jYW4vYmNtLmMtNDY2LVxubmV0L2Nhbi9iY20uYzo0Njc6XHRcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xubmV0L2Nhbi9iY20uYy00NjgtXHRcdC8qIGRvbiYjMzk7dCBjYXJlIGFib3V0IG92ZXJmbG93cyBpbiB0aGlzIHN0YXRpc3RpYyAqL1xuLS1cbm5ldC9jYW4vaXNvdHAuYz0zNTU9c3RhdGljIHZvaWQgaXNvdHBfcmN2X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2Nhbi9pc290cC5jLTM2Ny1cdGlmIChyZWFzb24pXG5uZXQvY2FuL2lzb3RwLmM6MzY4Olx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9jYW4vaXNvdHAuYy0zNjktfVxuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9MzExPXN0YXRpYyB2b2lkIGoxOTM5X3NrX3JlY3Zfb25lKHN0cnVjdCBqMTkzOV9zb2NrICpqc2ssIHN0cnVjdCBza19idWZmICpvc2tiKVxuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmMtMzM3LVx0aWYgKHJlYXNvbilcbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM6MzM4Olx0XHRza19za2JfcmVhc29uX2Ryb3AoXHUwMDI2anNrLVx1MDAzZXNrLCBza2IsIHJlYXNvbik7XG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jLTMzOS19XG4tLVxubmV0L2Nhbi9yYXcuYz0xMjk9c3RhdGljIHZvaWQgcmF3X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvY2FuL3Jhdy5jLTIxMS1cdGlmIChyZWFzb24pXG5uZXQvY2FuL3Jhdy5jOjIxMjpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvY2FuL3Jhdy5jLTIxMy19XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTIxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lXG5uZXQvY29yZS9za2J1ZmYuYzoxMjE3OmJvb2wgX19za19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTIxOC1cdFx0XHQgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMjM1LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6MTIzNjogKlx0c2tfc2tiX3JlYXNvbl9kcm9wIC0gZnJlZSBhbiBza19idWZmIHdpdGggc3BlY2lhbCByZWFzb25cbm5ldC9jb3JlL3NrYnVmZi5jLTEyMzctICpcdEBzazogdGhlIHNvY2tldCB0byByZWNlaXZlIEBza2IsIG9yIE5VTEwgaWYgbm90IGFwcGxpY2FibGVcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xMjQ1PXZvaWQgX19maXhfYWRkcmVzc1xubmV0L2NvcmUvc2tidWZmLmM6MTI0Njpza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTI0Ny1cdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxubmV0L2NvcmUvc2tidWZmLmMtMTI0OC17XG5uZXQvY29yZS9za2J1ZmYuYzoxMjQ5Olx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbikpXG5uZXQvY29yZS9za2J1ZmYuYy0xMjUwLVx0XHRfX2tmcmVlX3NrYihza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtMTI1MS19XG5uZXQvY29yZS9za2J1ZmYuYzoxMjUyOkVYUE9SVF9TWU1CT0woc2tfc2tiX3JlYXNvbl9kcm9wKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTEyNTMtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTI4Mj1rZnJlZV9za2JfbGlzdF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNlZ3MsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMjkwLVxubmV0L2NvcmUvc2tidWZmLmM6MTI5MTpcdFx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNlZ3MsIHJlYXNvbikpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTEyOTItXHRcdFx0c2tiX3BvaXNvbl9saXN0KHNlZ3MpO1xuLS1cbm5ldC9jb3JlL3NvY2suYz01NDQ9aW50IF9fc2tfcmVjZWl2ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NvY2suYy01OTAtZGlzY2FyZF9hbmRfcmVsc2U6XG5uZXQvY29yZS9zb2NrLmM6NTkxOlx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvY29yZS9zb2NrLmMtNTkyLVx0Z290byBvdXQ7XG4tLVxubmV0L2lwdjQvcGluZy5jPTkzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gX19waW5nX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3BpbmcuYy05MzktXHRpZiAocmVhc29uKSB7XG5uZXQvaXB2NC9waW5nLmM6OTQwOlx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9pcHY0L3BpbmcuYy05NDEtXHRcdHByX2RlYnVnKFwmIzM0O3BpbmdfcXVldWVfcmN2X3NrYiAtXHUwMDNlIGZhaWxlZFxcblwmIzM0Oyk7XG4tLVxubmV0L2lwdjQvcmF3LmM9MzAyPXN0YXRpYyBpbnQgcmF3X3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3Jhdy5jLTMxMC1cdGlmIChyZWFzb24pIHtcbm5ldC9pcHY0L3Jhdy5jOjMxMTpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2NC9yYXcuYy0zMTItXHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvaXB2NC9yYXcuYz0zMTg9aW50IHJhd19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3Jhdy5jLTMyMS1cdFx0c2tfZHJvcHNfaW5jKHNrKTtcbm5ldC9pcHY0L3Jhdy5jOjMyMjpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWSk7XG5uZXQvaXB2NC9yYXcuYy0zMjMtXHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9NDA1PXN0cnVjdCBzb2NrICpjb29raWVfdjRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy01MDktb3V0X2Ryb3A6XG5uZXQvaXB2NC9zeW5jb29raWVzLmM6NTEwOlx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNTExLVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTI5Nz10Y3BfZHJvcF9yZWFzb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTI5OS1cdHNrX2Ryb3BzX3NrYmFkZChzaywgc2tiKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjUzMDA6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTUzMDEtfVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTgzMD1pbnQgdGNwX3Y0X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODgzLWRpc2NhcmQ6XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE4ODQ6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTg4NS1cdC8qIEJlIGNhcmVmdWwgaGVyZS4gSWYgdGhpcyBmdW5jdGlvbiBnZXRzIG1vcmUgY29tcGxpY2F0ZWQgYW5kXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0yMDcwPWludCB0Y3BfdjRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMjgyLVx0LyogRGlzY2FyZCBmcmFtZS4gKi9cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjI4MzpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIyODQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2NC91ZHAuYz0xNjU3PWludCBfX3VkcF9lbnF1ZXVlX3NjaGVkdWxlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwLmMtMTc2NC1cdFx0XHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xubmV0L2lwdjQvdWRwLmM6MTc2NTpcdFx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1BST1RPX01FTSk7XG5uZXQvaXB2NC91ZHAuYy0xNzY2LVx0XHR9XG4tLVxubmV0L2lwdjQvdWRwLmM9MjMwOT1zdGF0aWMgaW50IF9fdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTIzMzUtXHRcdHRyYWNlX3VkcF9mYWlsX3F1ZXVlX3Jjdl9za2IocmMsIHNrLCBza2IpO1xubmV0L2lwdjQvdWRwLmM6MjMzNjpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9pcHY0L3VkcC5jLTIzMzctXHRcdHJldHVybiAtMTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0yMzUxPXN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNDE5LVx0dWRwX2Ryb3BzX2luYyhzayk7XG5uZXQvaXB2NC91ZHAuYzoyNDIwOlx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9pcHY0L3VkcC5jLTI0MjEtXHRyZXR1cm4gLTE7XG4tLVxubmV0L2lwdjQvdWRwLmM9MjU5Mj1pbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTI2NzItXHQgKi9cbm5ldC9pcHY0L3VkcC5jOjI2NzM6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2lwdjQvdWRwLmMtMjY3NC1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY0L3VkcC5jLTI2OTUtXHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lORVJST1JTKTtcbm5ldC9pcHY0L3VkcC5jOjI2OTY6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2lwdjQvdWRwLmMtMjY5Ny1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jPTk3PWludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmxfdW51c2VkKVxuLS1cbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jLTEwOS1cdFx0XHRzay1cdTAwM2Vza19yb3V0ZV9jYXBzID0gMDtcbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jOjExMDpcdFx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYixcbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jLTExMS1cdFx0XHRcdFx0ICAgU0tCX0RST1BfUkVBU09OX0lQX09VVE5PUk9VVEVTKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEwODk9c3RhdGljIGludCBpcDZtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMTc0LVx0aWYgKHJlYXNvbikge1xubmV0L2lwdjYvaXA2bXIuYzoxMTc1Olx0XHRza19za2JfcmVhc29uX2Ryb3AobXJvdXRlNl9zaywgc2tiLCByZWFzb24pO1xubmV0L2lwdjYvaXA2bXIuYy0xMTc2LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvaXB2Ni9yYXcuYz0zNTk9c3RhdGljIGlubGluZSBpbnQgcmF3djZfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvcmF3LmMtMzY1LVx0XHRza19kcm9wc19pbmMoc2spO1xubmV0L2lwdjYvcmF3LmM6MzY2Olx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9DU1VNKTtcbm5ldC9pcHY2L3Jhdy5jLTM2Ny1cdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9pcHY2L3Jhdy5jLTM3My1cdGlmIChyZWFzb24pIHtcbm5ldC9pcHY2L3Jhdy5jOjM3NDpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2Ni9yYXcuYy0zNzUtXHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvaXB2Ni9yYXcuYz0zODg9aW50IHJhd3Y2X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvcmF3LmMtMzk0LVx0XHRza19kcm9wc19pbmMoc2spO1xubmV0L2lwdjYvcmF3LmM6Mzk1Olx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZKTtcbm5ldC9pcHY2L3Jhdy5jLTM5Ni1cdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9pcHY2L3Jhdy5jLTQxOS1cdFx0XHRza19kcm9wc19pbmMoc2spO1xubmV0L2lwdjYvcmF3LmM6NDIwOlx0XHRcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fU0tCX0NTVU0pO1xubmV0L2lwdjYvcmF3LmMtNDIxLVx0XHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM9MTc0PXN0cnVjdCBzb2NrICpjb29raWVfdjZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yODYtb3V0X2Ryb3A6XG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6Mjg3Olx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjg4LVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz04NDc9c3RhdGljIHZvaWQgdGNwX3Y2X3NlbmRfcmVzcG9uc2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgc2VxLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTAwMS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTAwMjpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgYnVmZiwgU0tCX0RST1BfUkVBU09OX0lQX09VVE5PUk9VVEVTKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTAwMy19XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0xNTY3PWludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE2NjItXHRcdF9fa2ZyZWVfc2tiKG9wdF9za2IpO1xubmV0L2lwdjYvdGNwX2lwdjYuYzoxNjYzOlx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE2NjQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTE3MzA9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHRjcF92Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE5MzUtXHRTS0JfRFJfT1IoZHJvcF9yZWFzb24sIE5PVF9TUEVDSUZJRUQpO1xubmV0L2lwdjYvdGNwX2lwdjYuYzoxOTM2Olx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTkzNy1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTc3Mj1zdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdWRwLmMtNzk4LVx0XHR0cmFjZV91ZHBfZmFpbF9xdWV1ZV9yY3Zfc2tiKHJjLCBzaywgc2tiKTtcbm5ldC9pcHY2L3VkcC5jOjc5OTpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9pcHY2L3VkcC5jLTgwMC1cdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTgwNj1zdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni91ZHAuYy04NzItXHR1ZHBfZHJvcHNfaW5jKHNrKTtcbm5ldC9pcHY2L3VkcC5jOjg3MzpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvaXB2Ni91ZHAuYy04NzQtXHRyZXR1cm4gLTE7XG4tLVxubmV0L2lwdjYvdWRwLmM9MTA2OT1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdWRwLmMtMTE2Mi1cbm5ldC9pcHY2L3VkcC5jOjExNjM6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9pcHY2L3VkcC5jLTExNjQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xMTgyLVx0X19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpO1xubmV0L2lwdjYvdWRwLmM6MTE4MzpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xubmV0L2lwdjYvdWRwLmMtMTE4NC1cdHJldHVybiAwO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEzNj1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyNDQtZHJvcDpcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjI0NTpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyNDYtXHRyZXR1cm4gMDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxNy1kcm9wOlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTE4Olx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxOS1cdHJldHVybiAwO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUyNi1cdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTI3Olx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBjb3B5X3NrYiwgZHJvcF9yZWFzb24pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTI4LVx0Z290byBkcm9wX25fcmVzdG9yZTtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MzA9cHNwX3ZhbGlkYXRlX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0zOS1cdGlmICghZ29vZCkge1xubmV0L3BzcC9wc3Bfc29jay5jOjQwOlx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1BTUF9PVVRQVVQpO1xubmV0L3BzcC9wc3Bfc29jay5jLTQxLVx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYF9fc2tfc2tiX3JlYXNvbl9kcm9wYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF9fc2tfc2tiX3JlYXNvbl9kcm9wYC4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBTS0IgbGlmZWN5Y2xlLiBHaXZlbiBpdHMgbmFtZSwgaXQgcHJvYmFibHkgaGFuZGxlcyB0aGUgbG9nZ2luZyBvciBhY2NvdW50aW5nIGFzcGVjdHMgb2Ygd2h5IGEgcGFydGljdWxhciBTS0IgcGFja2V0IGlzIGJlaW5nIGRyb3BwZWQsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSB0dW5pbmcuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbGFyZ2VyIFNLQiAoU29ja2V0IEJ1ZmZlcikgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3aGF0IHRoZSB2YXJpb3VzICYjMzk7cmVhc29ucyYjMzk7IGl0IHRyYWNrcyBhY3R1YWxseSBzaWduaWZ5LiBJcyBpdCBqdXN0IGEgc2ltcGxlIGxvZ2dpbmcgY2FsbCwgb3IgZG9lcyBpdCBjb250cmlidXRlIG1vcmUgdG8gdGhlIGZsb3cgY29udHJvbCBwcm9jZXNzPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIGluc3RydW1lbnRhdGlvbiBtaWdodCBiZSBiZW5lZmljaWFsLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZHJvcHBlZCBwYWNrZXRzIGFyZSBoYW5kbGVkIGFuZCB3aGF0IGNvdWxkIGJlIHRoZSBjb250cmlidXRpbmcgZmFjdG9ycywgd2hpY2ggY2FuIGJlIHVzZWZ1bCB3aGVuIHRyb3VibGVzaG9vdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxMDpcdHtcbjEyMTE6XHRcdHNrYl9yZWxlYXNlX2FsbChza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcbjEyMTI6XHRcdGtmcmVlX3NrYm1lbShza2IpO1xuMTIxMzpcdH1cbjEyMTQ6XHRFWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTtcbjEyMTU6XHRcbjEyMTY6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXG4xMjE3Olx0Ym9vbCBfX3NrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4xMjE4Olx0XHRcdFx0ICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMjE5Olx0e1xuMTIyMDpcdFx0aWYgKHVubGlrZWx5KCFza2JfdW5yZWYoc2tiKSkpXG4xMjIxOlx0XHRcdHJldHVybiBmYWxzZTtcbjEyMjI6XHRcbjEyMjM6XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UocmVhc29uID09IFNLQl9OT1RfRFJPUFBFRF9ZRVQgfHxcbjEyMjQ6XHRcdFx0XHQgICAgICAgdTMyX2dldF9iaXRzKHJlYXNvbixcbjEyMjU6XHRcdFx0XHRcdFx0ICAgIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSykgXHUwMDNlPVxuMTIyNjpcdFx0XHRcdFx0U0tCX0RST1BfUkVBU09OX1NVQlNZU19OVU0pO1xuMTIyNzpcdFxuMTIyODpcdFx0aWYgKHJlYXNvbiA9PSBTS0JfQ09OU1VNRUQpXG4xMjI5Olx0XHRcdHRyYWNlX2NvbnN1bWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbjEyMzA6XHRcdGVsc2VcbjEyMzE6XHRcdFx0dHJhY2Vfa2ZyZWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCByZWFzb24sIHNrKTtcbjEyMzI6XHRcdHJldHVybiB0cnVlO1xuMTIzMzpcdH1cbjEyMzQ6XHRcbjEyMzU6XHQvKipcbjEyMzY6XHQgKlx0c2tfc2tiX3JlYXNvbl9kcm9wIC0gZnJlZSBhbiBza19idWZmIHdpdGggc3BlY2lhbCByZWFzb25cbjEyMzc6XHQgKlx0QHNrOiB0aGUgc29ja2V0IHRvIHJlY2VpdmUgQHNrYiwgb3IgTlVMTCBpZiBub3QgYXBwbGljYWJsZVxuMTIzODpcdCAqXHRAc2tiOiBidWZmZXIgdG8gZnJlZVxuMTIzOTpcdCAqXHRAcmVhc29uOiByZWFzb24gd2h5IHRoaXMgc2tiIGlzIGRyb3BwZWRcbjEyNDA6XHQgKlxuMTI0MTpcdCAqXHREcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIgYW5kIGZyZWUgaXQgaWYgdGhlIHVzYWdlIGNvdW50IGhhcyBoaXRcbjEyNDI6XHQgKlx0emVyby4gTWVhbndoaWxlLCBwYXNzIHRoZSByZWNlaXZpbmcgc29ja2V0IGFuZCBkcm9wIHJlYXNvbiB0b1xuMTI0MzpcdCAqXHQmIzM5O2tmcmVlX3NrYiYjMzk7IHRyYWNlcG9pbnQuXG4xMjQ0Olx0ICovXG4xMjQ1Olx0dm9pZCBfX2ZpeF9hZGRyZXNzXG4xMjQ2Olx0c2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEyNDc6XHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuMTI0ODpcdHtcbjEyNDk6XHRcdGlmIChfX3NrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pKVxuMTI1MDpcdFx0XHRfX2tmcmVlX3NrYihza2IpO1xuMTI1MTpcdH1cbjEyNTI6XHRFWFBPUlRfU1lNQk9MKHNrX3NrYl9yZWFzb25fZHJvcCk7XG4xMjUzOlx0XG4xMjU0Olx0I2RlZmluZSBLRlJFRV9TS0JfQlVMS19TSVpFXHQxNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDcxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29kZSBDaGFuZ2VzIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoZSBwcm9tcHQgZGVmaW5lcyB0aGUgY29uZGl0aW9ucyBmb3IgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSBjaGFuZ2VzIHF1YWxpZnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBwcmVjaXNlIGhlcmUsIHNvIEkmIzM5O2xsIHJldmlldyBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQgZm9jdXNlcyBvbiBjaGFuZ2VzIHRoYXQgYXJlIHNhZmUgdG8gaWdub3JlIGZvciBmdXp6aW5nLCBsaWtlIGRvY3VtZW50YXRpb24sIHVzZXItc3BhY2UgdG9vbHMsIGFuZCAqcHVyZWx5IGRlY29yYXRpdmUqIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHMuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBtb2RpZmljYXRpb25zLiBJdCBsb29rcyBsaWtlOgoKMS4gIEFuIGVudW0gdmFsdWUgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgIHdhcyBhZGRlZC4KMi4gIFNldmVyYWwgZnVuY3Rpb25zLCBpbiBgbmV0L2lwdjQvaXBfZm9yd2FyZC5jYCwgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGFuZCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCBhcmUgdXBkYXRpbmcgdGhlIGRyb3AgcmVhc29uIGZvciBhIGBza2JgIHdoZW4gVFRMIGlzIGV4Y2VlZGVkLiBTcGVjaWZpY2FsbHksIGNhbGxzIHRvIGBrZnJlZV9za2Ioc2tiKWAgYXJlIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8gYGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKWAuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIGNoYW5nZXMgKnB1cmVseSBkZWNvcmF0aXZlKiBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzPwoKTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBpbnRvIGBrZnJlZV9za2JfcmVhc29uYC4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGNhbGxzIGBfX3NrX3NrYl9yZWFzb25fZHJvcGAsIHdoaWNoIHRoZW4gaGFzIGEgY291cGxlIG9mIHN0ZXBzLiBJdCBjaGVja3MgaWYgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGlzIHRydWUsIGNhbGxzIGB0cmFjZV9rZnJlZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIHJlYXNvbiwgc2spO2AsIGFuZCB0aGVuIGNhbGxzIHRoZSBjb3JlIGZyZWUgZnVuY3Rpb24gYF9fa2ZyZWVfc2tiKHNrYilgLiBOb3csIHRoZSBpbXBvcnRhbnQgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IGBrZnJlZV9za2Ioc2tiKWAgaXMganVzdCBhIHdyYXBwZXIgZm9yIGBrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpYC4gSW4gc3VtbWFyeSwgdGhlIG5ldyBmdW5jdGlvbiBjYWxsIGFuZCB0aGUgY2hhbmdlcyBvbmx5IGFmZmVjdCB0aGUgYHJlYXNvbmAgcGFzc2VkIHRvIHRoZSBgdHJhY2Vfa2ZyZWVfc2tiYCB0cmFjZXBvaW50LgoKVGhlIGRlc2NyaXB0aW9uIGluIHRoZSBwcm9tcHQgc2F5cywgJiMzNDtUcmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLiYjMzQ7IEl0IHNlZW1zIHRoYXQgZHJvcCByZWFzb25zIGFyZSByZWFsbHkgb25seSB1c2VkIGJ5IGB0cmFjZV9rZnJlZV9za2JgLCBzbyB0aGlzIGNoYW5nZSBzaG91bGQgYmUgc2FmZSB0byBpZ25vcmUgZm9yIGZ1enppbmcuIFRoaXMgaXMgcHJpbWFyaWx5IGZvciB0b29scyBsaWtlIGRyb3B3YXRjaCwgcGVyZiwgb3IgYnBmdHJhY2UuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciBvdGhlciBwbGFjZXMgdGhpcyBgcmVhc29uYCBpcyB1c2VkLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYW4gdW53YXJyYW50ZWQgYXNzdW1wdGlvbi4gSSYjMzk7bGwgY2hlY2sgYGlwX2ZvcndhcmRgLCBgaXB2Nl9zcmhfcmN2YCwgYGlwdjZfcnBsX3NyaF9yY3ZgLCBgaXB2Nl9ydGhkcl9yY3ZgLCBhbmQgYGlwNl9mb3J3YXJkYCB0byBzZWUgaWYgdGhlICYjMzQ7cmVhc29uJiMzNDsgdmFyaWFibGUgaXMgdXNlZCBlbHNld2hlcmUsIHBhcnRpY3VsYXJseSB0byBtb2RpZnkgY29udHJvbCBmbG93LgpMZXQmIzM5O3MgbG9vayBhdCBgbmV0L2lwdjQvaXBfZm9yd2FyZC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9mb3J3YXJkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFxuIDE2NjpcdHNyX2ZhaWxlZDpcbiAxNjc6XHRcdC8qXG4gMTY4Olx0XHQgKlx0U3RyaWN0IHJvdXRpbmcgcGVybWl0cyBubyBnYXRld2F5aW5nXG4gMTY5Olx0XHQgKi9cbiAxNzA6XHRcdCBpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9TUl9GQUlMRUQsIDApO1xuIDE3MTpcdFx0IGdvdG8gZHJvcDtcbiAxNzI6XHRcbiAxNzM6XHR0b29fbWFueV9ob3BzOlxuIDE3NDpcdFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xuIDE3NTpcdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gMTc2Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XG4gMTc3Olx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTtcbiAxNzg6XHRkcm9wOlxuIDE3OTpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG4gMTgwOlx0XHRyZXR1cm4gTkVUX1JYX0RST1A7XG4gMTgxOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcwMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBJUHY2IGFuZCBuZXR3b3JraW5nIGludGVybmFsczoKCioqRGl2aW5nIGludG8gdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VpdmVyKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgcmlnaHQ/IFllYWgsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHNvdXJjZSByb3V0aW5nIGhlYWRlciBoYW5kbGluZyBsb2dpYyBsaXZlcy4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBleGFjdGx5IGhvdyB0aGUga2VybmVsIHByb2Nlc3NlcyB0aGVzZSBzb3VyY2Ugcm91dGluZyBoZWFkZXJzIHdoZW4gcmVjZWl2aW5nIGFuIElQdjYgcGFja2V0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyB0aGUgdmFyaW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBvdGVudGlhbCBsb29waW5nIHByb2JsZW1zLCBhbmQgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZXh0ZW5zaW9uIGhlYWRlcnMuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIHNvbGlkIG9uIHRoZSBkZXRhaWxzLCBib3RoIGZvciBteSBjdXJyZW50IHRhc2sgYW5kIGdlbmVyYWxseS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBsYXRlc3QgaW1wbGVtZW50YXRpb24gaXMgZG9pbmc7IGl0IGhhcyBwcm9iYWJseSBiZWVuIG9wdGltaXplZCBzaW5jZSB0aGUgbGFzdCB0aW1lIEkgbG9va2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA0NjM6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDQ2NDpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0NjU6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA0NjY6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA0Njc6XHRcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gNDY4Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDQ2OTpcdFx0XHR9XG4gNDcwOlx0XHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gNDcxOlx0XG4gNDcyOlx0XHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNDczOlx0XHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRkc3RfaW5wdXQoc2tiKTtcbiA0Nzc6XHRcbiA0Nzg6XHRcdHJldHVybiAtMTtcbiA0Nzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzUzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBSZWNlcHRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIHJlY2VwdGlvbiBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIFNvdXJjZSBSb3V0aW5nIEhlYWRlciAoU1JIKSBhbmQgUm91dGluZyBIZWFkZXIgKFR5cGUgMCkgcHJvY2Vzc2luZywgc28gSSYjMzk7bGwgc3RhcnQgYnkgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGlwdjZfcnBsX3NyaF9yY3ZgIGFuZCBgaXB2Nl9ydGhkcl9yY3ZgIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZXNlIGFyZSByZWNlaXZlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvIHNlY3VyaXR5LCBlZGdlIGNhc2UgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIC0gdGhlIHVzdWFsIGFyZWFzIG9mIGNvbmNlcm4sIHJlYWxseS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTU6XHRcbiA2MTY6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA2MTc6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNjE4Olx0XHRcdHJldHVybiAtMTtcbiA2MTk6XHRcdH1cbiA2MjA6XHRcbiA2MjE6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA2MjI6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDYyMzpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA2MjQ6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA2MjU6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA2MjY6XHRcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gNjI3Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDYyODpcdFx0XHR9XG4gNjI5Olx0XHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gNjMwOlx0XG4gNjMxOlx0XHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNjMyOlx0XHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gNjMzOlx0XHR9XG4gNjM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTM1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgSVB2NiByb3V0aW5nIGhlYWRlcnMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgcmV2aXNpdCBgaXB2Nl9ydGhkcl9yY3ZgIHdpdGhpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29yZSBvZiBob3cgdGhlIGtlcm5lbCBwcm9jZXNzZXMgaW5jb21pbmcgcGFja2V0cyB0aGF0IHV0aWxpemUgcm91dGluZyBoZWFkZXJzLCBzbyBpdCYjMzk7cyB0aGUgcGVyZmVjdCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgdmFyaW91cyB0eXBlcyBvZiByb3V0aW5nIGhlYWRlcnMgYW5kIHRoZWlyIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBuZWNlc3Nhcnkgc2FuaXR5IGNoZWNrcyBhbmQgcHJvY2Vzc2luZyB0byBwcmV2ZW50IHJvdXRpbmcgbG9vcHMgYW5kIGF0dGFja3MuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIG5pdHR5LWdyaXR0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxMDpcdFx0XHRyZXR1cm4gLTE7XG4gODExOlx0XHR9XG4gODEyOlx0XG4gODEzOlx0XHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XG4gODE0Olx0XHRcdGlmIChpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdCBcdTAwM2M9IDEpIHtcbiA4MTU6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gODE2Olx0XHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsXG4gODE3Olx0XHRcdFx0XHQgICAgMCk7XG4gODE4Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDgxOTpcdFx0XHRcdHJldHVybiAtMTtcbiA4MjA6XHRcdFx0fVxuIDgyMTpcdFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuIDgyMjpcdFx0XHRnb3RvIGxvb3BlZF9iYWNrO1xuIDgyMzpcdFx0fVxuIDgyNDpcdFxuIDgyNTpcdFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIDgyNjpcdFx0ZHN0X2lucHV0KHNrYik7XG4gODI3Olx0XHRyZXR1cm4gLTE7XG4gODI4Olx0XG4gODI5Olx0dW5rbm93bl9yaDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIElQdjYgRm9yd2FyZGluZyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgSVB2NiBmb3J3YXJkaW5nIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBvdXRwdXQgc2lkZSBvZiB0aGluZ3MuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbXkgaW52ZXN0aWdhdGlvbiwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBmb3IgSVB2NiBvdXRwdXQgcHJvY2Vzc2luZyBpcyBnb2luZyB0byBiZSBpbiBgbmV0L2lwdjYvaXA2X291dHB1dC5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgaXA2X2ZvcndhcmRgIGZ1bmN0aW9uIGlzIHRoZXJlLCBhbmQgdGhlbiBkaWcgaW50byBpdCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIG1ha2VzIGZvcndhcmRpbmcgZGVjaXNpb25zIGFuZCBoYW5kbGVzIHRoZSBtZWNoYW5pY3Mgb2Ygc2VuZGluZyBvdXQgSVB2NiBwYWNrZXRzLiBUaW1lIHRvIG9wZW4gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGUgcGFja2V0IGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9vdXRwdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTcwOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTcxOlx0XHR9XG4gNTcyOlx0XG4gNTczOlx0XHQvKlxuIDU3NDpcdFx0ICpcdGNoZWNrIGFuZCBkZWNyZW1lbnQgdHRsXG4gNTc1Olx0XHQgKi9cbiA1NzY6XHRcdGlmIChoZHItXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDU3NzpcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4gNTc4Olx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA1Nzk6XHRcbiA1ODA6XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDU4MTpcdFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiA1ODI6XHRcdH1cbiA1ODM6XHRcbiA1ODQ6XHRcdC8qIFhYWDogaWRldi1cdTAwM2VjbmYucHJveHlfbmRwPyAqL1xuIDU4NTpcdFx0aWYgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2Vwcm94eV9uZHApIFx1MDAyNlx1MDAyNlxuIDU4NjpcdFx0ICAgIHBuZWlnaF9sb29rdXAoXHUwMDI2bmRfdGJsLCBuZXQsIFx1MDAyNmhkci1cdTAwM2VkYWRkciwgc2tiLVx1MDAzZWRldikpIHtcbiA1ODc6XHRcdFx0aW50IHByb3hpZWQgPSBpcDZfZm9yd2FyZF9wcm94eV9jaGVjayhza2IpO1xuIDU4ODpcdFxuIDU4OTpcdFx0XHRoZHIgPSBpcHY2X2hkcihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA4MgoJCQkJCQkJb3V0cHV0OiAxMTQKCQkJCQkJCXRob3VnaHRzOiA2MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgc29sZWx5IG9uIGltcHJvdmluZyB0aGUgZ3JhbnVsYXJpdHkgb2Ygb3VyIFNLQiBkcm9wIHJlYXNvbiB0cmFja2luZy4gVGhlIGNvcmUgb2YgaXQsIGFzIEkgc2VlIGl0LCBib2lscyBkb3duIHRvIHRoZXNlIGtleSBjaGFuZ2VzOgoKMS4gIFdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIG5ldyBkcm9wIHJlYXNvbiwgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLCBpbiBgZHJvcHJlYXNvbi1jb3JlLmhgLiBUaGF0JiMzOTtzIGp1c3QgYW4gZW51bSB2YWx1ZSwgYSBuZXcgY2xhc3NpZmljYXRpb24uCjIuICBXZSYjMzk7cmUgdXBkYXRpbmcgYGlwX2ZvcndhcmQoKWAgYW5kIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBpcHY2X3NyaF9yY3YoKWAsIGBpcHY2X3JwbF9zcmhfcmN2KClgLCBhbmQgYGlwdjZfcnRoZHJfcmN2KClgIHRvIHVzZSB0aGlzIG5ldyByZWFzb24gd2hlbiBmcmVlaW5nIFNLQnMgdGhhdCBoYXZlIGhhZCB0aGVpciBUVEwgZXhwaXJlLgozLiAgVGhlIGNoYW5nZSBhbHNvIGludm9sdmVzIGNoYW5naW5nIGBpcDZfZm9yd2FyZCgpYCB0byBhbHNvIHVzZSB0aGUgbmV3bHkgZGVmaW5lZCBkcm9wIHJlYXNvbiB2YWx1ZS4KCkVzc2VudGlhbGx5LCBhbGwgb2YgdGhpcyBpcyBhYm91dCBwcm92aWRpbmcgbW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB0aGUgYHRyYWNlX2tmcmVlX3NrYmAgdHJhY2Vwb2ludCwgd2hpY2ggaXMga2V5IGZvciBuZXR3b3JrIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBpbmRpY2F0ZXMgdGhhdCB0aGlzIHBhdGNoIHBhc3NlcyB0aGUgZHJvcCByZWFzb24gdG8gYGtmcmVlX3NrYl9yZWFzb24oKWAgKG9yIGBTS0JfRFJfU0VUYCkgZnVuY3Rpb24sIHdoaWNoIGluIHR1cm4gcGFzc2VzIGl0IGRpcmVjdGx5IHRvIGB0cmFjZV9rZnJlZV9za2JgLiBDcnVjaWFsbHksIHRoaXMgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBjb250cm9sIGZsb3csIGxvZ2ljLCBlcnJvciBoYW5kbGluZywgc3RhdGUsIG9yIGRhdGEgc3RydWN0dXJlcy4gSXQmIzM5O3MgcHVyZWx5IGFib3V0IHByb3ZpZGluZyAqbWV0YWRhdGEqIHRvIGFuIGV4aXN0aW5nIHRyYWNlcG9pbnQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IGlzIG1lbnRpb25lZCB1bmRlciAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMmIzM0OyBpbiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuCgpHaXZlbiB0aGUgZW1wdHkgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBmaWVsZHMsIGFuZCBjb25zaWRlcmluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3RoaW5nIG1vcmUgdGhhbiBjaGFuZ2UgdGhlIGNsYXNzaWZpY2F0aW9uIG9mIGV4aXN0aW5nIHRyYWNlcG9pbnQgZGF0YSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRvIG1lIHRoYXQgdGhpcyBjaGFuZ2UgaXMgKm5vdCogd29ydGggZnV6emluZy4gSSBjYW4gY29uZmlkZW50bHkgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgcHVyZWx5IGFib3V0IHRoZSB0cmFjZXBvaW50LCBzbyBpdCBzaG91bGRuJiMzOTt0IGFmZmVjdCBmdXp6aW5nIGVmZm9ydHMuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgbmV3IHNrYiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgZXhpc3Rpbmcgc2tiIGRyb3AgY2FsbHMgaW4gSVB2NC9JUHY2IHBhY2tldCBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgdG8gcmVjb3JkIHRoaXMgbmV3IHJlYXNvbi4gVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGRyb3AgcmVhc29uIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgdHJhY2Vfa2ZyZWVfc2tiIHRyYWNlcG9pbnQgd2l0aG91dCBhbHRlcmluZyBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3Iga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgbmV3IHNrYiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgZXhpc3Rpbmcgc2tiIGRyb3AgY2FsbHMgaW4gSVB2NC9JUHY2IHBhY2tldCBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgdG8gcmVjb3JkIHRoaXMgbmV3IHJlYXNvbi4gVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGRyb3AgcmVhc29uIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgdHJhY2Vfa2ZyZWVfc2tiIHRyYWNlcG9pbnQgd2l0aG91dCBhbHRlcmluZyBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3Iga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIyOjUzLjQ5MTY1MDIxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTcyMjQ5NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgbmV3IHNrYiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgZXhpc3Rpbmcgc2tiIGRyb3AgY2FsbHMgaW4gSVB2NC9JUHY2IHBhY2tldCBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgdG8gcmVjb3JkIHRoaXMgbmV3IHJlYXNvbi4gVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGRyb3AgcmVhc29uIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgdHJhY2Vfa2ZyZWVfc2tiIHRyYWNlcG9pbnQgd2l0aG91dCBhbHRlcmluZyBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3Iga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjI6NTMuNDkxNjU1OTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA3MTcwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Mzc5ZGM2MzNkZTcxZTEyOTUxMzc5OGE0YTFhN2YxNzc0MWQ1ZGE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTI6MjI6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmggYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxcbmluZGV4IDJmMzEyZDFmNjdkNjkuLmVkMmMwMjg4NGI2OGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxcbkBAIC0xMjgsNiArMTI4LDcgQEBcXG4gXFx0Rk4oUFNQX0lOUFVUKVxcdFxcdFxcdFxcXFxcXG4gXFx0Rk4oUFNQX09VVFBVVClcXHRcXHRcXHRcXFxcXFxuIFxcdEZOKFJFQ1VSU0lPTl9MSU1JVClcXHRcXHRcXFxcXFxuK1xcdEZOKElQX1RUTF9FWENFRURFRClcXHRcXHRcXFxcXFxuIFxcdEZOZShNQVgpXFxuIFxcbiAvKipcXG5AQCAtNjA2LDYgKzYwNywxMSBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbiB7XFxuIFxcdFNLQl9EUk9QX1JFQVNPTl9QU1BfT1VUUFVULFxcbiBcXHQvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi9cXG4gXFx0U0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVCxcXG4rXFx0LyoqXFxuK1xcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBoaXRcXG4rXFx0ICogemVybyAoc2VlIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKVxcbitcXHQgKi9cXG4rXFx0U0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCxcXG4gXFx0LyoqXFxuIFxcdCAqIEBTS0JfRFJPUF9SRUFTT05fTUFYOiB0aGUgbWF4aW11bSBvZiBjb3JlIGRyb3AgcmVhc29ucywgd2hpY2hcXG4gXFx0ICogc2hvdWxkbid0IGJlIHVzZWQgYXMgYSByZWFsICdyZWFzb24nIC0gb25seSBmb3IgdHJhY2luZyBjb2RlIGdlblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmNcXG5pbmRleCA4YjY1ZjEyNTgzZWI2Li5iMjQyNTYxZDM3ZTczIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xcbisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xcbkBAIC0xNzQsNyArMTc0LDcgQEAgaW50IGlwX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xcbiBcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xcbi1cXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5IRFIpO1xcbitcXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTtcXG4gZHJvcDpcXG4gXFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XFxuIFxcdHJldHVybiBORVRfUlhfRFJPUDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXFxuaW5kZXggNTE5NDFhZDY1NmEzNi4uNzRjYWFmODc0NmZmYyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcXG5AQCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIFxcdFxcdFxcdFxcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbkBAIC02MjMsNyArNjIzLDcgQEAgc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIFxcdFxcdFxcdFxcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbkBAIC04MTUsNyArODE1LDcgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIFxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULFxcbiBcXHRcXHRcXHRcXHQgICAgMCk7XFxuLVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXFxuaW5kZXggOGZjNDc2NmM4ZGE5MC4uMGI2ZDc4YzhiNmJlNCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG5AQCAtNTc3LDcgKzU3Nyw3IEBAIGludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XFxuIFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFxuLVxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIpO1xcbitcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XFxuIFxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMjo1My45MzMzNDIwNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4NzMwNTQyMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBuZXcgc2tiIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBleGlzdGluZyBza2IgZHJvcCBjYWxscyBpbiBJUHY0L0lQdjYgcGFja2V0IGZvcndhcmRpbmcgYW5kIGV4dGVuc2lvbiBoZWFkZXIgcHJvY2Vzc2luZyB0byByZWNvcmQgdGhpcyBuZXcgcmVhc29uLiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgZHJvcCByZWFzb24gbWV0YWRhdGEgcGFzc2VkIHRvIHRoZSB0cmFjZV9rZnJlZV9za2IgdHJhY2Vwb2ludCB3aXRob3V0IGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQzNzlkYzYzM2RlNzFlMTI5NTEzNzk4YTRhMWE3ZjE3NzQxZDVkYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDEyOjIyOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmggYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuaW5kZXggMmYzMTJkMWY2N2Q2OS4uZWQyYzAyODg0YjY4ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oXG4rKysgYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuQEAgLTEyOCw2ICsxMjgsNyBAQFxuIFx0Rk4oUFNQX0lOUFVUKVx0XHRcdFxcXG4gXHRGTihQU1BfT1VUUFVUKVx0XHRcdFxcXG4gXHRGTihSRUNVUlNJT05fTElNSVQpXHRcdFxcXG4rXHRGTihJUF9UVExfRVhDRUVERUQpXHRcdFxcXG4gXHRGTmUoTUFYKVxuIFxuIC8qKlxuQEAgLTYwNiw2ICs2MDcsMTEgQEAgZW51bSBza2JfZHJvcF9yZWFzb24ge1xuIFx0U0tCX0RST1BfUkVBU09OX1BTUF9PVVRQVVQsXG4gXHQvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi9cbiBcdFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQsXG4rXHQvKipcbitcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBoaXRcbitcdCAqIHplcm8gKHNlZSBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUylcbitcdCAqL1xuK1x0U0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCxcbiBcdC8qKlxuIFx0ICogQFNLQl9EUk9QX1JFQVNPTl9NQVg6IHRoZSBtYXhpbXVtIG9mIGNvcmUgZHJvcCByZWFzb25zLCB3aGljaFxuIFx0ICogc2hvdWxkbid0IGJlIHVzZWQgYXMgYSByZWFsICdyZWFzb24nIC0gb25seSBmb3IgdHJhY2luZyBjb2RlIGdlblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuaW5kZXggOGI2NWYxMjU4M2ViNi4uYjI0MjU2MWQzN2U3MyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuKysrIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXG5AQCAtMTc0LDcgKzE3NCw3IEBAIGludCBpcF9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4gXHQvKiBUZWxsIHRoZSBzZW5kZXIgaXRzIHBhY2tldCBkaWVkLi4uICovXG4gXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdGljbXBfc2VuZChza2IsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfVFRMLCAwKTtcbi1cdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkhEUik7XG4rXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTtcbiBkcm9wOlxuIFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG4gXHRyZXR1cm4gTkVUX1JYX0RST1A7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5pbmRleCA1MTk0MWFkNjU2YTM2Li43NGNhYWY4NzQ2ZmZjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbkBAIC00NjQsNyArNDY0LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiBcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXG4gXHRcdFx0XHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4tXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuQEAgLTYyMyw3ICs2MjMsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiBcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXG4gXHRcdFx0XHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4tXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuQEAgLTgxNSw3ICs4MTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULFxuIFx0XHRcdFx0ICAgIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbmluZGV4IDhmYzQ3NjZjOGRhOTAuLjBiNmQ3OGM4YjZiZTQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuQEAgLTU3Nyw3ICs1NzcsNyBAQCBpbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuIFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXG4tXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIpO1xuK1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjI6NTMuOTMzMzQ0MjEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk4NjY0MjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIGlkZW50aWZ5IHRoZSBtb3N0IGZydWl0ZnVsIGFyZWFzIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcm9wIHJlYXNvbiwgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGxvY2F0aW9ucyB0byB1c2UgdGhpcyBuZXcgcmVhc29uLiBTcGVjaWZpY2FsbHksIGluIGBuZXQvaXB2NC9pcF9mb3J3YXJkLmNgLCBgbmV0L2lwdjYvZXh0aGRycy5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGNoYW5naW5nIHdoZXJlIHBhY2tldHMgYXJlIGRyb3BwZWQsIG9yIHJhdGhlciwgKndoeSogdGhleSdyZSBkcm9wcGVkLCBmcm9tIGBJUF9JTkhEUmAgdG8gYElQX1RUTF9FWENFRURFRGAuXG5cbk15IGZpcnN0IGluY2xpbmF0aW9uIGlzIHRvIHNlZSBpZiB0aGlzIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlLiBBbmQgaXQgZG9lcy4gV2UncmUgbW9kaWZ5aW5nIGBpcF9mb3J3YXJkYCBhbmQgYGlwNl9mb3J3YXJkYCwgYWxvbmcgd2l0aCBJUHY2IHJvdXRpbmcgaGVhZGVyIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGxpa2UgYGlwdjZfc3JoX3JjdmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIG9mIGludGVyZXN0LiBIb3dldmVyLCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gSXMgdGhpcyBhICpwdXJlbHkqIGRlY29yYXRpdmUgY2hhbmdlPyBUaGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoYXQgdGhpcyB3b3VsZCBmYWxsIHVuZGVyIFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyxcIiBidXQgdGhhdCdzIG5vdCB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQuXG5cbldlIGFyZSBjaGFuZ2luZyB0aGUgY2FsbCBvZiBga2ZyZWVfc2tiYCBvciBkcm9wIHJlYXNvbiBhbm5vdGF0aW9uLCBsaWtlIHRoZSBlbnVtIHZhbHVlLCB0byBhbm90aGVyIG9uZS4gV2hhdCdzIHRoZSBkaWZmZXJlbmNlPyBUaW1lIHRvIGludmVzdGlnYXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBrZnJlZV9za2JfcmVhc29uYCAqYWN0dWFsbHkqIGRvZXMuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBga2ZyZWVfc2tiYCBhbmQgYGtmcmVlX3NrYl9yZWFzb25gLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGluIGRlY2lkaW5nIGlmIHRoaXMgY3JlYXRlcyBuZXcgY29kZSBwYXRocyBvciBpcyBqdXN0IFwibG9nZ2luZ1wiIG9mIHNvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjI6NTcuOTE5OTg5ODYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTMxNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTM1MTE9dm9pZCBkZXZfa2ZyZWVfc2tiX2FueV9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMzUxNS1cXHRlbHNlXFxubmV0L2NvcmUvZGV2LmM6MzUxNjpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy0zNTE3LX1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQyMzM9c3RhdGljIGlubGluZSBpbnQgX19kZXZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDI4Ni1cXHRcXHRcXHRpZiAodW5saWtlbHkoZGVmZXJfY291bnQgXFx1MDAzZSBSRUFEX09OQ0UobmV0X2hvdGRhdGEucWRpc2NfbWF4X2J1cnN0KSkpIHtcXG5uZXQvY29yZS9kZXYuYzo0Mjg3OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fUURJU0NfQlVSU1RfRFJPUCk7XFxubmV0L2NvcmUvZGV2LmMtNDI4OC1cXHRcXHRcXHRcXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ1MTM9c2NoX2hhbmRsZV9pbmdyZXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwYWNrZXRfdHlwZSAqKnB0X3ByZXYsIGludCAqcmV0LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDU1NS1cXHRjYXNlIFRDX0FDVF9TSE9UOlxcbm5ldC9jb3JlL2Rldi5jOjQ1NTY6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy00NTU3LVxcdFxcdCpyZXQgPSBORVRfUlhfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ1Nzc9c2NoX2hhbmRsZV9lZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00NjA2LVxcdGNhc2UgVENfQUNUX1NIT1Q6XFxubmV0L2NvcmUvZGV2LmM6NDYwNzpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTQ2MDgtXFx0XFx0KnJldCA9IE5FVF9YTUlUX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz00ODE5PWludCBfX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00ODM3LVxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxubmV0L2NvcmUvZGV2LmM6NDgzODpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy00ODM5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTQyOT1zdGF0aWMgaW50IGVucXVldWVfdG9fYmFja2xvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY3B1LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTQ3OC1cXHRkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhza2ItXFx1MDAzZWRldik7XFxubmV0L2NvcmUvZGV2LmM6NTQ3OTpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy01NDgwLVxcdHJldHVybiBORVRfUlhfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU3MTg9aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU3NDgtXFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbm5ldC9jb3JlL2Rldi5jOjU3NDk6XFx0a2ZyZWVfc2tiX3JlYXNvbigqcHNrYiwgU0tCX0RST1BfUkVBU09OX1hEUCk7XFxubmV0L2NvcmUvZGV2LmMtNTc1MC1cXHRyZXR1cm4gWERQX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02MDM0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjIzNy1cXG5uZXQvY29yZS9kZXYuYzo2MjM4OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2NvcmUvZGV2LmMtNjIzOS1cXHRcXHQvKiBKYW1hbCwgbm93IHlvdSB3aWxsIG5vdCBhYmxlIHRvIGVzY2FwZSBleHBsYWluaW5nXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xMjAyPWludCBfX25laWdoX2V2ZW50X3NlbmQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjM5LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyNDA6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9GQUlMRUQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNDEtXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjYxLVxcdFxcdFxcdFxcdG5laWdoLVxcdTAwM2VhcnBfcXVldWVfbGVuX2J5dGVzIC09IGJ1ZmYtXFx1MDAzZXRydWVzaXplO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyNjI6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihidWZmLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfUVVFVUVGVUxMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjYzLVxcdFxcdFxcdFxcdE5FSUdIX0NBQ0hFX1NUQVRfSU5DKG5laWdoLVxcdTAwM2V0YmwsIHVucmVzX2Rpc2NhcmRzKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyODMtXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZWlnaC1cXHUwMDNlbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI4NDpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0RFQUQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyODUtXFx0dHJhY2VfbmVpZ2hfZXZlbnRfc2VuZF9kZWFkKG5laWdoLCAxKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTE1OTY9aW50IG5laWdoX3Jlc29sdmVfb3V0cHV0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTYyMy1cXHRyYyA9IC1FSU5WQUw7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTYyNDpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0hIX0ZJTExGQUlMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI1LVxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTYzMT1pbnQgbmVpZ2hfY29ubmVjdGVkX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2NDctXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjQ4OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2NDktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMjo1Ny45NzMxMzAzNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI1NzU4NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGtmcmVlX3NrYl9yZWFzb25gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYGtmcmVlX3NrYl9yZWFzb25gLiBJcyBpdCBkZWZpbmVkIGluIGBuZXQvY29yZS9za2J1ZmYuY2Agb3IgcGVyaGFwcyBqdXN0IGEgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgPyBJJ20gYmV0dGluZyB0aGUgbGF0dGVyLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRoZSBleGFjdCBsb2NhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiDigJMgd2hldGhlciBpdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgYSBtYWNybyB3aXRoIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXguIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIHR1bmluZy4gS25vd2luZyB0aGUgZGV0YWlscyBvZiBpdHMgZGVmaW5pdGlvbiBkaXJlY3RseSBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgZm9yIGFuYWx5emluZyBrZXJuZWwgdHJhY2VzIGFuZCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYW55IHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3RhdGlzdGljcyBJIG1heSBiZSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjI6NTkuODk4ODkyOTEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjYwNDY2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMjo1OS45NDc1NjI2ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODc1OTcwNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgU0tCIERlYWxsb2NhdGlvbiBSZWFzb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgU0tCcyBhcmUgYmVpbmcgZnJlZWQsIGFuZCwgY3JpdGljYWxseSwgKndoeSouIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUga2VybmVsIHdoZXJlIGBrZnJlZV9za2JfcmVhc29uYCBpcyBiZWluZyBjYWxsZWQuIEkga25vdyB0aGUgZnVuY3Rpb24ncyBsaWtlbHkgcmVzaWRpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGdpdmVuIGl0cyByb2xlIGluIFNLQiBtYW5hZ2VtZW50LiBUaGUgY2hhbGxlbmdlLCBhcyBhbHdheXMsIHdpbGwgYmUgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWlucyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhcm91bmQgZWFjaCB1c2UsIHBhcnRpY3VsYXJseSBpbiB0aGUgbW9yZSBjb21wbGV4IGFzcGVjdHMgb2YgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlJ2xsIGJlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGFuZCBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBjYWxsIHN0YWNrIGF0IGVhY2ggbG9jYXRpb24gdG8gZGVyaXZlIHRoZSBjb250ZXh0LiBJJ20gaG9waW5nIHRoZXJlJ3MgdXNlZnVsIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgY29tbWVudHMgc3Vycm91bmRpbmcgdGhvc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzowMi44MjM1Mzc0NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwMjMwODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjAyLjg3OTU2OTgxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTMyNDY2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipMb2NhdGluZyB0aGUgRGVmaW5pdGlvbiBvZiBga2ZyZWVfc2tiX3JlYXNvbmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBga2ZyZWVfc2tiX3JlYXNvbmAuIFNpbmNlIGl0J3MgYSBrZXJuZWwgZnVuY3Rpb24gb3IgdmFyaWFibGUsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBhbGwgdGhlIGhlYWRlciBmaWxlcyBhcmUgdGhlcmUsIGFuZCB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGRlY2xhcmF0aW9ucywgbWF5YmUgZXZlbiBpbmxpbmUgZGVmaW5pdGlvbnMuIElmIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgaW4gYGluY2x1ZGUvYCwgSSdsbCBleHBhbmQgdGhlIHNlYXJjaCB0byB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UsIGxpa2VseSB1c2luZyBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gcGlucG9pbnQgaXRzIHVzYWdlIGFuZCBkZWNsYXJhdGlvbiBhY3Jvc3MgdGhlIGNvZGViYXNlLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBhIGNvbW1vbiBlbm91Z2ggY29uY2VwdCByZWxhdGVkIHRvIG5ldHdvcmsgYnVmZmVyIGZyZWVpbmcsIHNvIGl0IHNob3VsZCBiZSB3ZWxsLWRlZmluZWQgc29tZXdoZXJlIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzowNC44OTI4MTk4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTM5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaD0yNj1ORl9EUk9QX1JFQVNPTihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24sIHUzMiBlcnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTI5LVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6MzA6XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaC0zMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMyMD1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMjE6a2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzIyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMzMD1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzMxLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzI6XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMzMtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDU5PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2NC1cXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDY1OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2Ni19XFxuLS1cXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC0xMzYtICpcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaDoxMzc6ICogVGhlIHJlYXNvbiBvZiBza2IgZHJvcCwgd2hpY2ggaXMgdXNlZCBpbiBrZnJlZV9za2JfcmVhc29uKCkuXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtMTM4LSAqL1xcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oPTE1ND1zdGF0aWMgaW5saW5lIHZvaWQgaXA2dHVubmVsX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oLTE2NC1cXHRcXHR9XFxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oOjE2NTpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVCk7XFxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oLTE2Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaD02NT1pcDZmcmFnX2V4cGlyZV9mcmFnX3F1ZXVlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZyYWdfcXVldWUgKmZxKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtMTA4LVxcdGljbXB2Nl9zZW5kKGhlYWQsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19GUkFHVElNRSwgMCk7XFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmg6MTA5OlxcdGtmcmVlX3NrYl9yZWFzb24oaGVhZCwgU0tCX0RST1BfUkVBU09OX0ZSQUdfUkVBU01fVElNRU9VVCk7XFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtMTEwLVxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTEyMjc9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTEyNDItXFx0fSBlbHNlIHtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjEyNDM6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIChlbnVtIHNrYl9kcm9wX3JlYXNvbilyZWFzb24pO1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTI0NC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjA1LjAyMjk2NjQzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA1ODIyMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGtmcmVlX3NrYl9yZWFzb25gIERldGFpbHMqKlxuXG5Pa2F5LCBJIG5lZWQgYSByZWZyZXNoZXIgb24gaG93IGBrZnJlZV9za2JfcmVhc29uYCBmdW5jdGlvbnMuIExldCdzIGhlYWQgb3ZlciB0byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gSSdsbCB6ZXJvIGluIG9uIGxpbmVzIDEzMTUgdGhyb3VnaCAxMzQwLCBhcyB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBraW5kcyBvZiBkZWZpbml0aW9ucyBhbmQgYXNzb2NpYXRlZCBjb21tZW50cyByZXNpZGUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcywgdGhlIHJlYXNvbnMgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkLCB0aGUgdmFyaW91cyBjYWxsIHNpdGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnRleHRzLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIC0gYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIHN1YnRsZSBkZXNpZ24gY2hvaWNlcywgb3IgaW1wb3J0YW50IGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gaXRzIHVzZS4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGRlYnVnZ2luZywgc3RhdGlzdGljcywgb3IgcGVyaGFwcyBldmVuIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbW1lbnRzIGFzIHdlbGwsIHRoZXkgZnJlcXVlbnRseSBob2xkIHRoZSBrZXkgaW5mb3JtYXRpb24gZm9yIHByb3BlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MDcuMDI4NzkxMTY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMTU6XFx0XFxuMTMxNjpcXHR2b2lkIF9fZml4X2FkZHJlc3Mgc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4xMzE3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuMTMxODpcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xcbjEzMTk6XFx0XFxuMTMyMDpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4xMzIxOlxcdGtmcmVlX3NrYl9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEzMjI6XFx0e1xcbjEzMjM6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNrYiwgcmVhc29uKTtcXG4xMzI0OlxcdH1cXG4xMzI1OlxcdFxcbjEzMjY6XFx0LyoqXFxuMTMyNzpcXHQgKlxcdGtmcmVlX3NrYiAtIGZyZWUgYW4gc2tfYnVmZiB3aXRoICdOT1RfU1BFQ0lGSUVEJyByZWFzb25cXG4xMzI4OlxcdCAqXFx0QHNrYjogYnVmZmVyIHRvIGZyZWVcXG4xMzI5OlxcdCAqL1xcbjEzMzA6XFx0c3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEzMzE6XFx0e1xcbjEzMzI6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcXG4xMzMzOlxcdH1cXG4xMzM0OlxcdFxcbjEzMzU6XFx0dm9pZCBza2JfcmVsZWFzZV9oZWFkX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpO1xcbjEzMzY6XFx0dm9pZCBrZnJlZV9za2JfbGlzdF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNlZ3MsXFxuMTMzNzpcXHRcXHRcXHRcXHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xcbjEzMzg6XFx0dm9pZCBza2JfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBmdWxsX3BrdCk7XFxuMTMzOTpcXHR2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MDcuMDI5MDEwNzQ2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDY2MTI5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHNrX3NrYl9yZWFzb25fZHJvcGAqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNrX3NrYl9yZWFzb25fZHJvcGAuIEknbSBjdXJpb3VzIHdoYXQgaXQncyBhY3R1YWxseSBkb2luZy4gS25vd2luZyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIG9mIHBhY2tldCBkcm9wcGluZyBpcyBjcnVjaWFsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiBzb2NrZXQgYnVmZmVyIChza2IpIGlzc3VlLCBsaWtlbHkgaW52b2x2aW5nIHJlc291cmNlIGxpbWl0YXRpb25zLCBwb2xpY3kgdmlvbGF0aW9ucywgb3IgcGVyaGFwcyBldmVuIGVycm9yIGNvbmRpdGlvbnMuIEkgd2FudCB0byBzZWUgd2hhdCBzcGVjaWZpYyBjb250ZXh0cyBhbmQgc2NlbmFyaW9zIGFyZSBoYW5kbGVkIHdpdGhpbiBgc2tfc2tiX3JlYXNvbl9kcm9wYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBwb3RlbnRpYWxseSBzb21lIHN0YXRpc3RpY3MgdXBkYXRlcywgZXJyb3IgbG9nZ2luZywgb3IgZXZlbiBuZXR3b3JrIGludGVyZmFjZSBhZGp1c3RtZW50cy4gSSdtIHJlYWxseSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgJ3JlYXNvbnMnIGZvciBkcm9wcGluZyBwYWNrZXRzIGF0IHRoZSBzb2NrZXQgbGF5ZXIuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTA0MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MDkuNzM1NjI2MjQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg3OTIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19za2JfcmVhc29uX2Ryb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL2JjbS5jPTM5OT1zdGF0aWMgdm9pZCBiY21fc2VuZF90b191c2VyKHN0cnVjdCBiY21fb3AgKm9wLCBzdHJ1Y3QgYmNtX21zZ19oZWFkICpoZWFkLFxcbi0tXFxubmV0L2Nhbi9iY20uYy00NjYtXFxubmV0L2Nhbi9iY20uYzo0Njc6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxubmV0L2Nhbi9iY20uYy00NjgtXFx0XFx0LyogZG9uJ3QgY2FyZSBhYm91dCBvdmVyZmxvd3MgaW4gdGhpcyBzdGF0aXN0aWMgKi9cXG4tLVxcbm5ldC9jYW4vaXNvdHAuYz0zNTU9c3RhdGljIHZvaWQgaXNvdHBfcmN2X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMzY3LVxcdGlmIChyZWFzb24pXFxubmV0L2Nhbi9pc290cC5jOjM2ODpcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvY2FuL2lzb3RwLmMtMzY5LX1cXG4tLVxcbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9MzExPXN0YXRpYyB2b2lkIGoxOTM5X3NrX3JlY3Zfb25lKHN0cnVjdCBqMTkzOV9zb2NrICpqc2ssIHN0cnVjdCBza19idWZmICpvc2tiKVxcbi0tXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy0zMzctXFx0aWYgKHJlYXNvbilcXG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jOjMzODpcXHRcXHRza19za2JfcmVhc29uX2Ryb3AoXFx1MDAyNmpzay1cXHUwMDNlc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jLTMzOS19XFxuLS1cXG5uZXQvY2FuL3Jhdy5jPTEyOT1zdGF0aWMgdm9pZCByYXdfcmN2KHN0cnVjdCBza19idWZmICpvc2tiLCB2b2lkICpkYXRhKVxcbi0tXFxubmV0L2Nhbi9yYXcuYy0yMTEtXFx0aWYgKHJlYXNvbilcXG5uZXQvY2FuL3Jhdy5jOjIxMjpcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvY2FuL3Jhdy5jLTIxMy19XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xMjE2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjE3OmJvb2wgX19za19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMTgtXFx0XFx0XFx0ICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMjM1LS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjEyMzY6ICpcXHRza19za2JfcmVhc29uX2Ryb3AgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCBzcGVjaWFsIHJlYXNvblxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMzctICpcXHRAc2s6IHRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBAc2tiLCBvciBOVUxMIGlmIG5vdCBhcHBsaWNhYmxlXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xMjQ1PXZvaWQgX19maXhfYWRkcmVzc1xcbm5ldC9jb3JlL3NrYnVmZi5jOjEyNDY6c2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjQ3LVxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjQ4LXtcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjQ5OlxcdGlmIChfX3NrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyNTAtXFx0XFx0X19rZnJlZV9za2Ioc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjUxLX1cXG5uZXQvY29yZS9za2J1ZmYuYzoxMjUyOkVYUE9SVF9TWU1CT0woc2tfc2tiX3JlYXNvbl9kcm9wKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjUzLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTI4Mj1rZnJlZV9za2JfbGlzdF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNlZ3MsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyOTAtXFxubmV0L2NvcmUvc2tidWZmLmM6MTI5MTpcXHRcXHRpZiAoX19za19za2JfcmVhc29uX2Ryb3AoTlVMTCwgc2VncywgcmVhc29uKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTEyOTItXFx0XFx0XFx0c2tiX3BvaXNvbl9saXN0KHNlZ3MpO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTU0ND1pbnQgX19za19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtNTkwLWRpc2NhcmRfYW5kX3JlbHNlOlxcbm5ldC9jb3JlL3NvY2suYzo1OTE6XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxubmV0L2NvcmUvc29jay5jLTU5Mi1cXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYz05MzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIF9fcGluZ19xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYy05MzktXFx0aWYgKHJlYXNvbikge1xcbm5ldC9pcHY0L3BpbmcuYzo5NDA6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxubmV0L2lwdjQvcGluZy5jLTk0MS1cXHRcXHRwcl9kZWJ1ZyhcXFwicGluZ19xdWV1ZV9yY3Zfc2tiIC1cXHUwMDNlIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvaXB2NC9yYXcuYz0zMDI9c3RhdGljIGludCByYXdfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9yYXcuYy0zMTAtXFx0aWYgKHJlYXNvbikge1xcbm5ldC9pcHY0L3Jhdy5jOjMxMTpcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2NC9yYXcuYy0zMTItXFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9MzE4PWludCByYXdfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTMyMS1cXHRcXHRza19kcm9wc19pbmMoc2spO1xcbm5ldC9pcHY0L3Jhdy5jOjMyMjpcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZKTtcXG5uZXQvaXB2NC9yYXcuYy0zMjMtXFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy01MDktb3V0X2Ryb3A6XFxubmV0L2lwdjQvc3luY29va2llcy5jOjUxMDpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNTExLVxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTI5Nz10Y3BfZHJvcF9yZWFzb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01Mjk5LVxcdHNrX2Ryb3BzX3NrYmFkZChzaywgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1MzAwOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTUzMDEtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0xODMwPWludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTg4My1kaXNjYXJkOlxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTg4NDpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE4ODUtXFx0LyogQmUgY2FyZWZ1bCBoZXJlLiBJZiB0aGlzIGZ1bmN0aW9uIGdldHMgbW9yZSBjb21wbGljYXRlZCBhbmRcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjA3MD1pbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMjgyLVxcdC8qIERpc2NhcmQgZnJhbWUuICovXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMjgzOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMjg0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MTY1Nz1pbnQgX191ZHBfZW5xdWV1ZV9zY2hlZHVsZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTc2NC1cXHRcXHRcXHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xcbm5ldC9pcHY0L3VkcC5jOjE3NjU6XFx0XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9QUk9UT19NRU0pO1xcbm5ldC9pcHY0L3VkcC5jLTE3NjYtXFx0XFx0fVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjMwOT1zdGF0aWMgaW50IF9fdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjMzNS1cXHRcXHR0cmFjZV91ZHBfZmFpbF9xdWV1ZV9yY3Zfc2tiKHJjLCBzaywgc2tiKTtcXG5uZXQvaXB2NC91ZHAuYzoyMzM2OlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2lwdjQvdWRwLmMtMjMzNy1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yMzUxPXN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI0MTktXFx0dWRwX2Ryb3BzX2luYyhzayk7XFxubmV0L2lwdjQvdWRwLmM6MjQyMDpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9pcHY0L3VkcC5jLTI0MjEtXFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjU5Mj1pbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjY3Mi1cXHQgKi9cXG5uZXQvaXB2NC91ZHAuYzoyNjczOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2lwdjQvdWRwLmMtMjY3NC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI2OTUtXFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjQvdWRwLmM6MjY5NjpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9pcHY0L3VkcC5jLTI2OTctXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYz05Nz1pbnQgaW5ldDZfY3NrX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsX3VudXNlZClcXG4tLVxcbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jLTEwOS1cXHRcXHRcXHRzay1cXHUwMDNlc2tfcm91dGVfY2FwcyA9IDA7XFxubmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmM6MTEwOlxcdFxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLFxcbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jLTExMS1cXHRcXHRcXHRcXHRcXHQgICBTS0JfRFJPUF9SRUFTT05fSVBfT1VUTk9ST1VURVMpO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMDg5PXN0YXRpYyBpbnQgaXA2bXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMTc0LVxcdGlmIChyZWFzb24pIHtcXG5uZXQvaXB2Ni9pcDZtci5jOjExNzU6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKG1yb3V0ZTZfc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTExNzYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYz0zNTk9c3RhdGljIGlubGluZSBpbnQgcmF3djZfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0zNjUtXFx0XFx0c2tfZHJvcHNfaW5jKHNrKTtcXG5uZXQvaXB2Ni9yYXcuYzozNjY6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9TS0JfQ1NVTSk7XFxubmV0L2lwdjYvcmF3LmMtMzY3LVxcdFxcdHJldHVybiBORVRfUlhfRFJPUDtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTM3My1cXHRpZiAocmVhc29uKSB7XFxubmV0L2lwdjYvcmF3LmM6Mzc0OlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xcbm5ldC9pcHY2L3Jhdy5jLTM3NS1cXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYz0zODg9aW50IHJhd3Y2X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0zOTQtXFx0XFx0c2tfZHJvcHNfaW5jKHNrKTtcXG5uZXQvaXB2Ni9yYXcuYzozOTU6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWSk7XFxubmV0L2lwdjYvcmF3LmMtMzk2LVxcdFxcdHJldHVybiBORVRfUlhfRFJPUDtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTQxOS1cXHRcXHRcXHRza19kcm9wc19pbmMoc2spO1xcbm5ldC9pcHY2L3Jhdy5jOjQyMDpcXHRcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9DU1VNKTtcXG5uZXQvaXB2Ni9yYXcuYy00MjEtXFx0XFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jPTE3ND1zdHJ1Y3Qgc29jayAqY29va2llX3Y2X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yODYtb3V0X2Ryb3A6XFxubmV0L2lwdjYvc3luY29va2llcy5jOjI4NzpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjg4LVxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz04NDc9c3RhdGljIHZvaWQgdGNwX3Y2X3NlbmRfcmVzcG9uc2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgc2VxLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMDAxLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTAwMjpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIGJ1ZmYsIFNLQl9EUk9QX1JFQVNPTl9JUF9PVVROT1JPVVRFUyk7XFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMDAzLX1cXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTU2Nz1pbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE2NjItXFx0XFx0X19rZnJlZV9za2Iob3B0X3NrYik7XFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxNjYzOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTY2NC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTczMD1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xOTM1LVxcdFNLQl9EUl9PUihkcm9wX3JlYXNvbiwgTk9UX1NQRUNJRklFRCk7XFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxOTM2OlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xOTM3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9NzcyPXN0YXRpYyBpbnQgX191ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTc5OC1cXHRcXHR0cmFjZV91ZHBfZmFpbF9xdWV1ZV9yY3Zfc2tiKHJjLCBzaywgc2tiKTtcXG5uZXQvaXB2Ni91ZHAuYzo3OTk6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcXG5uZXQvaXB2Ni91ZHAuYy04MDAtXFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9ODA2PXN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtODcyLVxcdHVkcF9kcm9wc19pbmMoc2spO1xcbm5ldC9pcHY2L3VkcC5jOjg3MzpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9pcHY2L3VkcC5jLTg3NC1cXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz0xMDY5PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTExNjItXFxubmV0L2lwdjYvdWRwLmM6MTE2MzpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2Ni91ZHAuYy0xMTY0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTE4Mi1cXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjYvdWRwLmM6MTE4MzpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2Ni91ZHAuYy0xMTg0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTM2PXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjQ0LWRyb3A6XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMjQ1OlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjQ2LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxNy1kcm9wOlxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUxODpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxOS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUyNi1cXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTI3OlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgY29weV9za2IsIGRyb3BfcmVhc29uKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1MjgtXFx0Z290byBkcm9wX25fcmVzdG9yZTtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0zMD1wc3BfdmFsaWRhdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMzktXFx0aWYgKCFnb29kKSB7XFxubmV0L3BzcC9wc3Bfc29jay5jOjQwOlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fUFNQX09VVFBVVCk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTQxLVxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzowOS44MjA1MTI2NTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2NTYzNjc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBfX3NrX3NrYl9yZWFzb25fZHJvcGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgX19za19za2JfcmVhc29uX2Ryb3BgLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3Mgcm9sZSBpbiB0aGUgU0tCIGxpZmVjeWNsZS4gR2l2ZW4gaXRzIG5hbWUsIGl0IHByb2JhYmx5IGhhbmRsZXMgdGhlIGxvZ2dpbmcgb3IgYWNjb3VudGluZyBhc3BlY3RzIG9mIHdoeSBhIHBhcnRpY3VsYXIgU0tCIHBhY2tldCBpcyBiZWluZyBkcm9wcGVkLCB3aGljaCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbGFyZ2VyIFNLQiAoU29ja2V0IEJ1ZmZlcikgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3aGF0IHRoZSB2YXJpb3VzICdyZWFzb25zJyBpdCB0cmFja3MgYWN0dWFsbHkgc2lnbmlmeS4gSXMgaXQganVzdCBhIHNpbXBsZSBsb2dnaW5nIGNhbGwsIG9yIGRvZXMgaXQgY29udHJpYnV0ZSBtb3JlIHRvIHRoZSBmbG93IGNvbnRyb2wgcHJvY2Vzcz8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIGluc3RydW1lbnRhdGlvbiBtaWdodCBiZSBiZW5lZmljaWFsLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZHJvcHBlZCBwYWNrZXRzIGFyZSBoYW5kbGVkIGFuZCB3aGF0IGNvdWxkIGJlIHRoZSBjb250cmlidXRpbmcgZmFjdG9ycywgd2hpY2ggY2FuIGJlIHVzZWZ1bCB3aGVuIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoxMS45ODYxNTMyMDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTA6XFx0e1xcbjEyMTE6XFx0XFx0c2tiX3JlbGVhc2VfYWxsKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xcbjEyMTI6XFx0XFx0a2ZyZWVfc2tibWVtKHNrYik7XFxuMTIxMzpcXHR9XFxuMTIxNDpcXHRFWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTtcXG4xMjE1OlxcdFxcbjEyMTY6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbjEyMTc6XFx0Ym9vbCBfX3NrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuMTIxODpcXHRcXHRcXHRcXHQgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4xMjE5OlxcdHtcXG4xMjIwOlxcdFxcdGlmICh1bmxpa2VseSghc2tiX3VucmVmKHNrYikpKVxcbjEyMjE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEyMjI6XFx0XFxuMTIyMzpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHJlYXNvbiA9PSBTS0JfTk9UX0RST1BQRURfWUVUIHx8XFxuMTIyNDpcXHRcXHRcXHRcXHQgICAgICAgdTMyX2dldF9iaXRzKHJlYXNvbixcXG4xMjI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX01BU0spIFxcdTAwM2U9XFxuMTIyNjpcXHRcXHRcXHRcXHRcXHRTS0JfRFJPUF9SRUFTT05fU1VCU1lTX05VTSk7XFxuMTIyNzpcXHRcXG4xMjI4OlxcdFxcdGlmIChyZWFzb24gPT0gU0tCX0NPTlNVTUVEKVxcbjEyMjk6XFx0XFx0XFx0dHJhY2VfY29uc3VtZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbjEyMzA6XFx0XFx0ZWxzZVxcbjEyMzE6XFx0XFx0XFx0dHJhY2Vfa2ZyZWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCByZWFzb24sIHNrKTtcXG4xMjMyOlxcdFxcdHJldHVybiB0cnVlO1xcbjEyMzM6XFx0fVxcbjEyMzQ6XFx0XFxuMTIzNTpcXHQvKipcXG4xMjM2OlxcdCAqXFx0c2tfc2tiX3JlYXNvbl9kcm9wIC0gZnJlZSBhbiBza19idWZmIHdpdGggc3BlY2lhbCByZWFzb25cXG4xMjM3OlxcdCAqXFx0QHNrOiB0aGUgc29ja2V0IHRvIHJlY2VpdmUgQHNrYiwgb3IgTlVMTCBpZiBub3QgYXBwbGljYWJsZVxcbjEyMzg6XFx0ICpcXHRAc2tiOiBidWZmZXIgdG8gZnJlZVxcbjEyMzk6XFx0ICpcXHRAcmVhc29uOiByZWFzb24gd2h5IHRoaXMgc2tiIGlzIGRyb3BwZWRcXG4xMjQwOlxcdCAqXFxuMTI0MTpcXHQgKlxcdERyb3AgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlciBhbmQgZnJlZSBpdCBpZiB0aGUgdXNhZ2UgY291bnQgaGFzIGhpdFxcbjEyNDI6XFx0ICpcXHR6ZXJvLiBNZWFud2hpbGUsIHBhc3MgdGhlIHJlY2VpdmluZyBzb2NrZXQgYW5kIGRyb3AgcmVhc29uIHRvXFxuMTI0MzpcXHQgKlxcdCdrZnJlZV9za2InIHRyYWNlcG9pbnQuXFxuMTI0NDpcXHQgKi9cXG4xMjQ1OlxcdHZvaWQgX19maXhfYWRkcmVzc1xcbjEyNDY6XFx0c2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMjQ3OlxcdFxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4xMjQ4OlxcdHtcXG4xMjQ5OlxcdFxcdGlmIChfX3NrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pKVxcbjEyNTA6XFx0XFx0XFx0X19rZnJlZV9za2Ioc2tiKTtcXG4xMjUxOlxcdH1cXG4xMjUyOlxcdEVYUE9SVF9TWU1CT0woc2tfc2tiX3JlYXNvbl9kcm9wKTtcXG4xMjUzOlxcdFxcbjEyNTQ6XFx0I2RlZmluZSBLRlJFRV9TS0JfQlVMS19TSVpFXFx0MTZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MTEuOTg2NTMyNTM3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDUzMTA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvZGUgQ2hhbmdlcyBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIHByb21wdCBkZWZpbmVzIHRoZSBjb25kaXRpb25zIGZvciByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgcXVhbGlmeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gcHJlY2lzZSBoZXJlLCBzbyBJJ2xsIHJldmlldyBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQgZm9jdXNlcyBvbiBjaGFuZ2VzIHRoYXQgYXJlIHNhZmUgdG8gaWdub3JlIGZvciBmdXp6aW5nLCBsaWtlIGRvY3VtZW50YXRpb24sIHVzZXItc3BhY2UgdG9vbHMsIGFuZCAqcHVyZWx5IGRlY29yYXRpdmUqIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgbW9kaWZpY2F0aW9ucy4gSXQgbG9va3MgbGlrZTpcblxuMS4gIEFuIGVudW0gdmFsdWUgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgIHdhcyBhZGRlZC5cbjIuICBTZXZlcmFsIGZ1bmN0aW9ucywgaW4gYG5ldC9pcHY0L2lwX2ZvcndhcmQuY2AsIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AgYXJlIHVwZGF0aW5nIHRoZSBkcm9wIHJlYXNvbiBmb3IgYSBgc2tiYCB3aGVuIFRUTCBpcyBleGNlZWRlZC4gU3BlY2lmaWNhbGx5LCBjYWxscyB0byBga2ZyZWVfc2tiKHNrYilgIGFyZSByZXBsYWNlZCB3aXRoIGNhbGxzIHRvIGBrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRClgLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIGNoYW5nZXMgKnB1cmVseSBkZWNvcmF0aXZlKiBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzP1xuXG5MZXQncyBkZWx2ZSBkZWVwZXIgaW50byBga2ZyZWVfc2tiX3JlYXNvbmAuIEl0IGxvb2tzIGxpa2UgdGhpcyBmdW5jdGlvbiBjYWxscyBgX19za19za2JfcmVhc29uX2Ryb3BgLCB3aGljaCB0aGVuIGhhcyBhIGNvdXBsZSBvZiBzdGVwcy4gSXQgY2hlY2tzIGlmIGBERUJVR19ORVRfV0FSTl9PTl9PTkNFYCBpcyB0cnVlLCBjYWxscyBgdHJhY2Vfa2ZyZWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCByZWFzb24sIHNrKTtgLCBhbmQgdGhlbiBjYWxscyB0aGUgY29yZSBmcmVlIGZ1bmN0aW9uIGBfX2tmcmVlX3NrYihza2IpYC4gTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIHRvIG5vdGUgaXMgdGhhdCBga2ZyZWVfc2tiKHNrYilgIGlzIGp1c3QgYSB3cmFwcGVyIGZvciBga2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKWAuIEluIHN1bW1hcnksIHRoZSBuZXcgZnVuY3Rpb24gY2FsbCBhbmQgdGhlIGNoYW5nZXMgb25seSBhZmZlY3QgdGhlIGByZWFzb25gIHBhc3NlZCB0byB0aGUgYHRyYWNlX2tmcmVlX3NrYmAgdHJhY2Vwb2ludC5cblxuVGhlIGRlc2NyaXB0aW9uIGluIHRoZSBwcm9tcHQgc2F5cywgXCJUcmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIEl0IHNlZW1zIHRoYXQgZHJvcCByZWFzb25zIGFyZSByZWFsbHkgb25seSB1c2VkIGJ5IGB0cmFjZV9rZnJlZV9za2JgLCBzbyB0aGlzIGNoYW5nZSBzaG91bGQgYmUgc2FmZSB0byBpZ25vcmUgZm9yIGZ1enppbmcuIFRoaXMgaXMgcHJpbWFyaWx5IGZvciB0b29scyBsaWtlIGRyb3B3YXRjaCwgcGVyZiwgb3IgYnBmdHJhY2UuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3Igb3RoZXIgcGxhY2VzIHRoaXMgYHJlYXNvbmAgaXMgdXNlZC4gSSBkb24ndCB3YW50IHRvIG1ha2UgYW4gdW53YXJyYW50ZWQgYXNzdW1wdGlvbi4gSSdsbCBjaGVjayBgaXBfZm9yd2FyZGAsIGBpcHY2X3NyaF9yY3ZgLCBgaXB2Nl9ycGxfc3JoX3JjdmAsIGBpcHY2X3J0aGRyX3JjdmAsIGFuZCBgaXA2X2ZvcndhcmRgIHRvIHNlZSBpZiB0aGUgXCJyZWFzb25cIiB2YXJpYWJsZSBpcyB1c2VkIGVsc2V3aGVyZSwgcGFydGljdWxhcmx5IHRvIG1vZGlmeSBjb250cm9sIGZsb3cuXG5MZXQncyBsb29rIGF0IGBuZXQvaXB2NC9pcF9mb3J3YXJkLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjE3LjE5MTg0NjMzN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9mb3J3YXJkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcbiAxNjY6XFx0c3JfZmFpbGVkOlxcbiAxNjc6XFx0XFx0LypcXG4gMTY4OlxcdFxcdCAqXFx0U3RyaWN0IHJvdXRpbmcgcGVybWl0cyBubyBnYXRld2F5aW5nXFxuIDE2OTpcXHRcXHQgKi9cXG4gMTcwOlxcdFxcdCBpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9TUl9GQUlMRUQsIDApO1xcbiAxNzE6XFx0XFx0IGdvdG8gZHJvcDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0dG9vX21hbnlfaG9wczpcXG4gMTc0OlxcdFxcdC8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi9cXG4gMTc1OlxcdFxcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiAxNzY6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xcbiAxNzc6XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7XFxuIDE3ODpcXHRkcm9wOlxcbiAxNzk6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XFxuIDE4MDpcXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuIDE4MTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjE3LjE5MTkyNTAyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTY0OTk2NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggSVB2NiBhbmQgbmV0d29ya2luZyBpbnRlcm5hbHM6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VpdmVyKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24uIFRoYXQncyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgcmlnaHQ/IFllYWgsIHRoYXQncyB3aGVyZSB0aGUgc291cmNlIHJvdXRpbmcgaGVhZGVyIGhhbmRsaW5nIGxvZ2ljIGxpdmVzLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGV4YWN0bHkgaG93IHRoZSBrZXJuZWwgcHJvY2Vzc2VzIHRoZXNlIHNvdXJjZSByb3V0aW5nIGhlYWRlcnMgd2hlbiByZWNlaXZpbmcgYW4gSVB2NiBwYWNrZXQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIHZhcmlvdXMgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgbG9vcGluZyBwcm9ibGVtcywgYW5kIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGV4dGVuc2lvbiBoZWFkZXJzLiBHb3R0YSBtYWtlIHN1cmUgSSdtIHNvbGlkIG9uIHRoZSBkZXRhaWxzLCBib3RoIGZvciBteSBjdXJyZW50IHRhc2sgYW5kIGdlbmVyYWxseS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGxhdGVzdCBpbXBsZW1lbnRhdGlvbiBpcyBkb2luZzsgaXQgaGFzIHByb2JhYmx5IGJlZW4gb3B0aW1pemVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBsb29rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoxOS4zNTY5MjU1NzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTU6XFx0XFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdGlmIChza2JfZHN0KHNrYiktXFx1MDAzZWVycm9yKSB7XFxuIDQ1ODpcXHRcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNDU5OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDYwOlxcdFxcdH1cXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0aWYgKHNrYl9kc3RfZGV2KHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XFxuIDQ2MzpcXHRcXHRcXHRpZiAoaXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0IFxcdTAwM2M9IDEpIHtcXG4gNDY0OlxcdFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNDY1OlxcdFxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxcbiA0NjY6XFx0XFx0XFx0XFx0XFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xcbiA0Njc6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiA0Njg6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0Njk6XFx0XFx0XFx0fVxcbiA0NzA6XFx0XFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0LS07XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIDQ3MzpcXHRcXHRcXHRnb3RvIGxvb3BlZF9iYWNrO1xcbiA0NzQ6XFx0XFx0fVxcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNDc3OlxcdFxcbiA0Nzg6XFx0XFx0cmV0dXJuIC0xO1xcbiA0Nzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoxOS4zNTcwMjk5NDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5Mjg0MzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBSZWNlcHRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcmVjZXB0aW9uIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgU291cmNlIFJvdXRpbmcgSGVhZGVyIChTUkgpIGFuZCBSb3V0aW5nIEhlYWRlciAoVHlwZSAwKSBwcm9jZXNzaW5nLCBzbyBJJ2xsIHN0YXJ0IGJ5IHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBpcHY2X3JwbF9zcmhfcmN2YCBhbmQgYGlwdjZfcnRoZHJfcmN2YCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGVzZSBhcmUgcmVjZWl2ZWQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0byBzZWN1cml0eSwgZWRnZSBjYXNlIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyAtIHRoZSB1c3VhbCBhcmVhcyBvZiBjb25jZXJuLCByZWFsbHkuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzUzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoyMS4zNDk4NzgxNjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTU6XFx0XFxuIDYxNjpcXHRcXHRpZiAoc2tiX2RzdChza2IpLVxcdTAwM2VlcnJvcikge1xcbiA2MTc6XFx0XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDYxODpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDYxOTpcXHRcXHR9XFxuIDYyMDpcXHRcXG4gNjIxOlxcdFxcdGlmIChza2JfZHN0X2Rldihza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSykge1xcbiA2MjI6XFx0XFx0XFx0aWYgKGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdCBcXHUwMDNjPSAxKSB7XFxuIDYyMzpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDYyNDpcXHRcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcXG4gNjI1OlxcdFxcdFxcdFxcdFxcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4gNjI2OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gNjI3OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNjI4OlxcdFxcdFxcdH1cXG4gNjI5OlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA2MzA6XFx0XFxuIDYzMTpcXHRcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbiA2MzI6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gNjMzOlxcdFxcdH1cXG4gNjM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoyMS4zNDk5ODU0OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA2NzAzMjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElQdjYgcm91dGluZyBoZWFkZXJzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHJldmlzaXQgYGlwdjZfcnRoZHJfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBrZXJuZWwgcHJvY2Vzc2VzIGluY29taW5nIHBhY2tldHMgdGhhdCB1dGlsaXplIHJvdXRpbmcgaGVhZGVycywgc28gaXQncyB0aGUgcGVyZmVjdCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHJvdXRpbmcgaGVhZGVycyBhbmQgdGhlaXIgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIG5lY2Vzc2FyeSBzYW5pdHkgY2hlY2tzIGFuZCBwcm9jZXNzaW5nIHRvIHByZXZlbnQgcm91dGluZyBsb29wcyBhbmQgYXR0YWNrcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoyNS40MTcwMjAzMDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTczNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxMDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDgxMTpcXHRcXHR9XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdGlmIChza2JfZHN0X2Rldihza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSykge1xcbiA4MTQ6XFx0XFx0XFx0aWYgKGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdCBcXHUwMDNjPSAxKSB7XFxuIDgxNTpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDgxNjpcXHRcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCxcXG4gODE3OlxcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4gODE4OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gODE5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gODIwOlxcdFxcdFxcdH1cXG4gODIxOlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA4MjI6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbiA4MjY6XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDgyNzpcXHRcXHRyZXR1cm4gLTE7XFxuIDgyODpcXHRcXG4gODI5OlxcdHVua25vd25fcmg6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjI1LjQxNzExOTQxNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzgxMjk2MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgRm9yd2FyZGluZyoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCBJUHY2IGZvcndhcmRpbmcgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgb3V0cHV0IHNpZGUgb2YgdGhpbmdzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG15IGludmVzdGlnYXRpb24sIEknbSBwcmV0dHkgc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBmb3IgSVB2NiBvdXRwdXQgcHJvY2Vzc2luZyBpcyBnb2luZyB0byBiZSBpbiBgbmV0L2lwdjYvaXA2X291dHB1dC5jYC4gTGV0J3MgY29uZmlybSB0aGF0IGBpcDZfZm9yd2FyZGAgZnVuY3Rpb24gaXMgdGhlcmUsIGFuZCB0aGVuIGRpZyBpbnRvIGl0IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgbWFrZXMgZm9yd2FyZGluZyBkZWNpc2lvbnMgYW5kIGhhbmRsZXMgdGhlIG1lY2hhbmljcyBvZiBzZW5kaW5nIG91dCBJUHY2IHBhY2tldHMuIFRpbWUgdG8gb3BlbiB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgYXQgdGhlIHBhY2tldCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjI3LjE5ODQxOTA1OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTcxOlxcdFxcdH1cXG4gNTcyOlxcdFxcbiA1NzM6XFx0XFx0LypcXG4gNTc0OlxcdFxcdCAqXFx0Y2hlY2sgYW5kIGRlY3JlbWVudCB0dGxcXG4gNTc1OlxcdFxcdCAqL1xcbiA1NzY6XFx0XFx0aWYgKGhkci1cXHUwMDNlaG9wX2xpbWl0IFxcdTAwM2M9IDEpIHtcXG4gNTc3OlxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4gNTc4OlxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiA1ODE6XFx0XFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuIDU4MjpcXHRcXHR9XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdC8qIFhYWDogaWRldi1cXHUwMDNlY25mLnByb3h5X25kcD8gKi9cXG4gNTg1OlxcdFxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2Vwcm94eV9uZHApIFxcdTAwMjZcXHUwMDI2XFxuIDU4NjpcXHRcXHQgICAgcG5laWdoX2xvb2t1cChcXHUwMDI2bmRfdGJsLCBuZXQsIFxcdTAwMjZoZHItXFx1MDAzZWRhZGRyLCBza2ItXFx1MDAzZWRldikpIHtcXG4gNTg3OlxcdFxcdFxcdGludCBwcm94aWVkID0gaXA2X2ZvcndhcmRfcHJveHlfY2hlY2soc2tiKTtcXG4gNTg4OlxcdFxcbiA1ODk6XFx0XFx0XFx0aGRyID0gaXB2Nl9oZHIoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MjcuMTk4NTM5MDg4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NjUzMDU4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIHNvbGVseSBvbiBpbXByb3ZpbmcgdGhlIGdyYW51bGFyaXR5IG9mIG91ciBTS0IgZHJvcCByZWFzb24gdHJhY2tpbmcuIFRoZSBjb3JlIG9mIGl0LCBhcyBJIHNlZSBpdCwgYm9pbHMgZG93biB0byB0aGVzZSBrZXkgY2hhbmdlczpcblxuMS4gIFdlJ3JlIGludHJvZHVjaW5nIGEgbmV3IGRyb3AgcmVhc29uLCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGluIGBkcm9wcmVhc29uLWNvcmUuaGAuIFRoYXQncyBqdXN0IGFuIGVudW0gdmFsdWUsIGEgbmV3IGNsYXNzaWZpY2F0aW9uLlxuMi4gIFdlJ3JlIHVwZGF0aW5nIGBpcF9mb3J3YXJkKClgIGFuZCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgaXB2Nl9zcmhfcmN2KClgLCBgaXB2Nl9ycGxfc3JoX3JjdigpYCwgYW5kIGBpcHY2X3J0aGRyX3JjdigpYCB0byB1c2UgdGhpcyBuZXcgcmVhc29uIHdoZW4gZnJlZWluZyBTS0JzIHRoYXQgaGF2ZSBoYWQgdGhlaXIgVFRMIGV4cGlyZS5cbjMuICBUaGUgY2hhbmdlIGFsc28gaW52b2x2ZXMgY2hhbmdpbmcgYGlwNl9mb3J3YXJkKClgIHRvIGFsc28gdXNlIHRoZSBuZXdseSBkZWZpbmVkIGRyb3AgcmVhc29uIHZhbHVlLlxuXG5Fc3NlbnRpYWxseSwgYWxsIG9mIHRoaXMgaXMgYWJvdXQgcHJvdmlkaW5nIG1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdGhlIGB0cmFjZV9rZnJlZV9za2JgIHRyYWNlcG9pbnQsIHdoaWNoIGlzIGtleSBmb3IgbmV0d29yayBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGluZGljYXRlcyB0aGF0IHRoaXMgcGF0Y2ggcGFzc2VzIHRoZSBkcm9wIHJlYXNvbiB0byBga2ZyZWVfc2tiX3JlYXNvbigpYCAob3IgYFNLQl9EUl9TRVRgKSBmdW5jdGlvbiwgd2hpY2ggaW4gdHVybiBwYXNzZXMgaXQgZGlyZWN0bHkgdG8gYHRyYWNlX2tmcmVlX3NrYmAuIENydWNpYWxseSwgdGhpcyBkb2Vzbid0IG1vZGlmeSBhbnkgY29udHJvbCBmbG93LCBsb2dpYywgZXJyb3IgaGFuZGxpbmcsIHN0YXRlLCBvciBkYXRhIHN0cnVjdHVyZXMuIEl0J3MgcHVyZWx5IGFib3V0IHByb3ZpZGluZyAqbWV0YWRhdGEqIHRvIGFuIGV4aXN0aW5nIHRyYWNlcG9pbnQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IGlzIG1lbnRpb25lZCB1bmRlciBcIlB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXNcIiBpbiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuXG5cbkdpdmVuIHRoZSBlbXB0eSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGZpZWxkcywgYW5kIGNvbnNpZGVyaW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdGhpbmcgbW9yZSB0aGFuIGNoYW5nZSB0aGUgY2xhc3NpZmljYXRpb24gb2YgZXhpc3RpbmcgdHJhY2Vwb2ludCBkYXRhLCBpdCdzIHByZXR0eSBjbGVhciB0byBtZSB0aGF0IHRoaXMgY2hhbmdlIGlzICpub3QqIHdvcnRoIGZ1enppbmcuIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGlzIHB1cmVseSBhYm91dCB0aGUgdHJhY2Vwb2ludCwgc28gaXQgc2hvdWxkbid0IGFmZmVjdCBmdXp6aW5nIGVmZm9ydHMuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDgyLCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjMyLjY2Mzg0ODU0MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhIG5ldyBza2IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIGV4aXN0aW5nIHNrYiBkcm9wIGNhbGxzIGluIElQdjQvSVB2NiBwYWNrZXQgZm9yd2FyZGluZyBhbmQgZXh0ZW5zaW9uIGhlYWRlciBwcm9jZXNzaW5nIHRvIHJlY29yZCB0aGlzIG5ldyByZWFzb24uIFRoaXMgb25seSBhZmZlY3RzIHRoZSBkcm9wIHJlYXNvbiBtZXRhZGF0YSBwYXNzZWQgdG8gdGhlIHRyYWNlX2tmcmVlX3NrYiB0cmFjZXBvaW50IHdpdGhvdXQgYWx0ZXJpbmcgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhIG5ldyBza2IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIGV4aXN0aW5nIHNrYiBkcm9wIGNhbGxzIGluIElQdjQvSVB2NiBwYWNrZXQgZm9yd2FyZGluZyBhbmQgZXh0ZW5zaW9uIGhlYWRlciBwcm9jZXNzaW5nIHRvIHJlY29yZCB0aGlzIG5ldyByZWFzb24uIFRoaXMgb25seSBhZmZlY3RzIHRoZSBkcm9wIHJlYXNvbiBtZXRhZGF0YSBwYXNzZWQgdG8gdGhlIHRyYWNlX2tmcmVlX3NrYiB0cmFjZXBvaW50IHdpdGhvdXQgYWx0ZXJpbmcgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjMyLjY2Mzg4NjcyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9m7jx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 12:06:33 +0000 UTC FinishedAt: 2026-09-05 12:23:34 +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+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgbmV3IHNrYiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgZXhpc3Rpbmcgc2tiIGRyb3AgY2FsbHMgaW4gSVB2NC9JUHY2IHBhY2tldCBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgdG8gcmVjb3JkIHRoaXMgbmV3IHJlYXNvbi4gVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGRyb3AgcmVhc29uIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgdHJhY2Vfa2ZyZWVfc2tiIHRyYWNlcG9pbnQgd2l0aG91dCBhbHRlcmluZyBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3Iga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQzNzlkYzYzM2RlNzFlMTI5NTEzNzk4YTRhMWE3ZjE3NzQxZDVkYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDEyOjIyOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oIGIvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcbmluZGV4IDJmMzEyZDFmNjdkNjkuLmVkMmMwMjg4NGI2OGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcbkBAIC0xMjgsNiAmIzQzOzEyOCw3IEBAXG4gXHRGTihQU1BfSU5QVVQpXHRcdFx0XFxcbiBcdEZOKFBTUF9PVVRQVVQpXHRcdFx0XFxcbiBcdEZOKFJFQ1VSU0lPTl9MSU1JVClcdFx0XFxcbiYjNDM7XHRGTihJUF9UVExfRVhDRUVERUQpXHRcdFxcXG4gXHRGTmUoTUFYKVxuIFxuIC8qKlxuQEAgLTYwNiw2ICYjNDM7NjA3LDExIEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHtcbiBcdFNLQl9EUk9QX1JFQVNPTl9QU1BfT1VUUFVULFxuIFx0LyoqIEBTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlUOiBEZWFkIGxvb3Agb24gdmlydHVhbCBkZXZpY2UuICovXG4gXHRTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlULFxuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBoaXRcbiYjNDM7XHQgKiB6ZXJvIChzZWUgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpXG4mIzQzO1x0ICovXG4mIzQzO1x0U0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCxcbiBcdC8qKlxuIFx0ICogQFNLQl9EUk9QX1JFQVNPTl9NQVg6IHRoZSBtYXhpbXVtIG9mIGNvcmUgZHJvcCByZWFzb25zLCB3aGljaFxuIFx0ICogc2hvdWxkbiYjMzk7dCBiZSB1c2VkIGFzIGEgcmVhbCAmIzM5O3JlYXNvbiYjMzk7IC0gb25seSBmb3IgdHJhY2luZyBjb2RlIGdlblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuaW5kZXggOGI2NWYxMjU4M2ViNi4uYjI0MjU2MWQzN2U3MyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXG5AQCAtMTc0LDcgJiM0MzsxNzQsNyBAQCBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xuIFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XG4tXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5IRFIpO1xuJiM0MztcdFNLQl9EUl9TRVQocmVhc29uLCBJUF9UVExfRVhDRUVERUQpO1xuIGRyb3A6XG4gXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbiBcdHJldHVybiBORVRfUlhfRFJPUDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDUxOTQxYWQ2NTZhMzYuLjc0Y2FhZjg3NDZmZmMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTQ2NCw3ICYjNDM7NDY0LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiBcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXG4gXHRcdFx0XHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4tXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbkBAIC02MjMsNyAmIzQzOzYyMyw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiBcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuQEAgLTgxNSw3ICYjNDM7ODE1LDcgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCxcbiBcdFx0XHRcdCAgICAwKTtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuaW5kZXggOGZjNDc2NmM4ZGE5MC4uMGI2ZDc4YzhiNmJlNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5AQCAtNTc3LDcgJiM0Mzs1NzcsNyBAQCBpbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuIFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXG4tXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIpO1xuJiM0MztcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBuZXcgc2tiIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBleGlzdGluZyBza2IgZHJvcCBjYWxscyBpbiBJUHY0L0lQdjYgcGFja2V0IGZvcndhcmRpbmcgYW5kIGV4dGVuc2lvbiBoZWFkZXIgcHJvY2Vzc2luZyB0byByZWNvcmQgdGhpcyBuZXcgcmVhc29uLiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgZHJvcCByZWFzb24gbWV0YWRhdGEgcGFzc2VkIHRvIHRoZSB0cmFjZV9rZnJlZV9za2IgdHJhY2Vwb2ludCB3aXRob3V0IGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDM3OWRjNjMzZGU3MWUxMjk1MTM3OThhNGExYTdmMTc3NDFkNWRhNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTI6MjI6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaCBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCmluZGV4IDJmMzEyZDFmNjdkNjkuLmVkMmMwMjg4NGI2OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oCkBAIC0xMjgsNiAmIzQzOzEyOCw3IEBACiAJRk4oUFNQX0lOUFVUKQkJCVwKIAlGTihQU1BfT1VUUFVUKQkJCVwKIAlGTihSRUNVUlNJT05fTElNSVQpCQlcCiYjNDM7CUZOKElQX1RUTF9FWENFRURFRCkJCVwKIAlGTmUoTUFYKQogCiAvKioKQEAgLTYwNiw2ICYjNDM7NjA3LDExIEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uIHsKIAlTS0JfRFJPUF9SRUFTT05fUFNQX09VVFBVVCwKIAkvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi8KIAlTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlULAomIzQzOwkvKioKJiM0MzsJICogQFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQ6IElQdjQgVFRMIG9yIElQdjYgaG9wIGxpbWl0IGhpdAomIzQzOwkgKiB6ZXJvIChzZWUgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpCiYjNDM7CSAqLwomIzQzOwlTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVELAogCS8qKgogCSAqIEBTS0JfRFJPUF9SRUFTT05fTUFYOiB0aGUgbWF4aW11bSBvZiBjb3JlIGRyb3AgcmVhc29ucywgd2hpY2gKIAkgKiBzaG91bGRuJiMzOTt0IGJlIHVzZWQgYXMgYSByZWFsICYjMzk7cmVhc29uJiMzOTsgLSBvbmx5IGZvciB0cmFjaW5nIGNvZGUgZ2VuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggOGI2NWYxMjU4M2ViNi4uYjI0MjU2MWQzN2U3MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtMTc0LDcgJiM0MzsxNzQsNyBAQCBpbnQgaXBfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCS8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi8KIAlfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAlpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7Ci0JU0tCX0RSX1NFVChyZWFzb24sIElQX0lOSERSKTsKJiM0MzsJU0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7CiBkcm9wOgogCWtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pOwogCXJldHVybiBORVRfUlhfRFJPUDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA1MTk0MWFkNjU2YTM2Li43NGNhYWY4NzQ2ZmZjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC00NjQsNyAmIzQzOzQ2NCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiAJCQlfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwKIAkJCQkgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaXB2Nl9oZHIoc2tiKS0mZ3Q7aG9wX2xpbWl0LS07CkBAIC02MjMsNyAmIzQzOzYyMyw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogCQkJX19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsCiAJCQkJICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApOwotCQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJa2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlwdjZfaGRyKHNrYiktJmd0O2hvcF9saW1pdC0tOwpAQCAtODE1LDcgJiM0Mzs4MTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJCQlfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwKIAkJCQkgICAgMCk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJaXB2Nl9oZHIoc2tiKS0mZ3Q7aG9wX2xpbWl0LS07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggOGZjNDc2NmM4ZGE5MC4uMGI2ZDc4YzhiNmJlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtNTc3LDcgJiM0Mzs1NzcsNyBAQCBpbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsIDApOwogCQlfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAKLQkJa2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9JTkhEUik7CiYjNDM7CQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcuIFdlIG5lZWQgdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCBpZGVudGlmeSB0aGUgbW9zdCBmcnVpdGZ1bCBhcmVhcyBmb3IgaW52ZXN0aWdhdGlvbi4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyb3AgcmVhc29uLCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGFuZCB1cGRhdGVzIHNldmVyYWwgbG9jYXRpb25zIHRvIHVzZSB0aGlzIG5ldyByZWFzb24uIFNwZWNpZmljYWxseSwgaW4gYG5ldC9pcHY0L2lwX2ZvcndhcmQuY2AsIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHdoZXJlIHBhY2tldHMgYXJlIGRyb3BwZWQsIG9yIHJhdGhlciwgKndoeSogdGhleSYjMzk7cmUgZHJvcHBlZCwgZnJvbSBgSVBfSU5IRFJgIHRvIGBJUF9UVExfRVhDRUVERURgLgoKTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8gc2VlIGlmIHRoaXMgdG91Y2hlcyBleGVjdXRhYmxlIGNvZGUuIEFuZCBpdCBkb2VzLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGBpcF9mb3J3YXJkYCBhbmQgYGlwNl9mb3J3YXJkYCwgYWxvbmcgd2l0aCBJUHY2IHJvdXRpbmcgaGVhZGVyIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGxpa2UgYGlwdjZfc3JoX3JjdmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIG9mIGludGVyZXN0LiBIb3dldmVyLCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gSXMgdGhpcyBhICpwdXJlbHkqIGRlY29yYXRpdmUgY2hhbmdlPyBUaGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoYXQgdGhpcyB3b3VsZCBmYWxsIHVuZGVyICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZywmIzM0OyBidXQgdGhhdCYjMzk7cyBub3Qgd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdC4KCldlIGFyZSBjaGFuZ2luZyB0aGUgY2FsbCBvZiBga2ZyZWVfc2tiYCBvciBkcm9wIHJlYXNvbiBhbm5vdGF0aW9uLCBsaWtlIHRoZSBlbnVtIHZhbHVlLCB0byBhbm90aGVyIG9uZS4gV2hhdCYjMzk7cyB0aGUgZGlmZmVyZW5jZT8gVGltZSB0byBpbnZlc3RpZ2F0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBga2ZyZWVfc2tiX3JlYXNvbmAgKmFjdHVhbGx5KiBkb2VzLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZSBhbmQgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBrZnJlZV9za2JgIGFuZCBga2ZyZWVfc2tiX3JlYXNvbmAuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNydWNpYWwgaW4gZGVjaWRpbmcgaWYgdGhpcyBjcmVhdGVzIG5ldyBjb2RlIHBhdGhzIG9yIGlzIGp1c3QgJiMzNDtsb2dnaW5nJiMzNDsgb2Ygc29ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2ZyZWVfc2tiX3JlYXNvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0zNTExPXZvaWQgZGV2X2tmcmVlX3NrYl9hbnlfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbi0tXG5uZXQvY29yZS9kZXYuYy0zNTE1LVx0ZWxzZVxubmV0L2NvcmUvZGV2LmM6MzUxNjpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG5uZXQvY29yZS9kZXYuYy0zNTE3LX1cbi0tXG5uZXQvY29yZS9kZXYuYz00MjMzPXN0YXRpYyBpbmxpbmUgaW50IF9fZGV2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqcSxcbi0tXG5uZXQvY29yZS9kZXYuYy00Mjg2LVx0XHRcdGlmICh1bmxpa2VseShkZWZlcl9jb3VudCBcdTAwM2UgUkVBRF9PTkNFKG5ldF9ob3RkYXRhLnFkaXNjX21heF9idXJzdCkpKSB7XG5uZXQvY29yZS9kZXYuYzo0Mjg3Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9RRElTQ19CVVJTVF9EUk9QKTtcbm5ldC9jb3JlL2Rldi5jLTQyODgtXHRcdFx0XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbi0tXG5uZXQvY29yZS9kZXYuYz00NTEzPXNjaF9oYW5kbGVfaW5ncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKipwdF9wcmV2LCBpbnQgKnJldCxcbi0tXG5uZXQvY29yZS9kZXYuYy00NTU1LVx0Y2FzZSBUQ19BQ1RfU0hPVDpcbm5ldC9jb3JlL2Rldi5jOjQ1NTY6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvY29yZS9kZXYuYy00NTU3LVx0XHQqcmV0ID0gTkVUX1JYX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NDU3Nz1zY2hfaGFuZGxlX2VncmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy00NjA2LVx0Y2FzZSBUQ19BQ1RfU0hPVDpcbm5ldC9jb3JlL2Rldi5jOjQ2MDc6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvY29yZS9kZXYuYy00NjA4LVx0XHQqcmV0ID0gTkVUX1hNSVRfRFJPUDtcbi0tXG5uZXQvY29yZS9kZXYuYz00ODE5PWludCBfX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtNDgzNy1cdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jOjQ4Mzg6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xubmV0L2NvcmUvZGV2LmMtNDgzOS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTQyOT1zdGF0aWMgaW50IGVucXVldWVfdG9fYmFja2xvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY3B1LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU0NzgtXHRkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhza2ItXHUwMDNlZGV2KTtcbm5ldC9jb3JlL2Rldi5jOjU0Nzk6XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbm5ldC9jb3JlL2Rldi5jLTU0ODAtXHRyZXR1cm4gTkVUX1JYX0RST1A7XG4tLVxubmV0L2NvcmUvZGV2LmM9NTcxOD1pbnQgZG9feGRwX2dlbmVyaWMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZywgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTU3NDgtXHRicGZfbmV0X2N0eF9jbGVhcihicGZfbmV0X2N0eCk7XG5uZXQvY29yZS9kZXYuYzo1NzQ5Olx0a2ZyZWVfc2tiX3JlYXNvbigqcHNrYiwgU0tCX0RST1BfUkVBU09OX1hEUCk7XG5uZXQvY29yZS9kZXYuYy01NzUwLVx0cmV0dXJuIFhEUF9EUk9QO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTYwMzQ9c3RhdGljIGludCBfX25ldGlmX3JlY2VpdmVfc2tiX2NvcmUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBib29sIHBmbWVtYWxsb2MsXG4tLVxubmV0L2NvcmUvZGV2LmMtNjIzNy1cbm5ldC9jb3JlL2Rldi5jOjYyMzg6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvY29yZS9kZXYuYy02MjM5LVx0XHQvKiBKYW1hbCwgbm93IHlvdSB3aWxsIG5vdCBhYmxlIHRvIGVzY2FwZSBleHBsYWluaW5nXG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTIwMj1pbnQgX19uZWlnaF9ldmVudF9zZW5kKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTEyMzktXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjQwOlx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfRkFJTEVEKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNDEtXHRcdFx0cmV0dXJuIDE7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTI2MS1cdFx0XHRcdG5laWdoLVx1MDAzZWFycF9xdWV1ZV9sZW5fYnl0ZXMgLT0gYnVmZi1cdTAwM2V0cnVlc2l6ZTtcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyNjI6XHRcdFx0XHRrZnJlZV9za2JfcmVhc29uKGJ1ZmYsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9RVUVVRUZVTEwpO1xubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTI2My1cdFx0XHRcdE5FSUdIX0NBQ0hFX1NUQVRfSU5DKG5laWdoLVx1MDAzZXRibCwgdW5yZXNfZGlzY2FyZHMpO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTEyODMtXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bmVpZ2gtXHUwMDNlbG9jayk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxMjg0Olx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9ERUFEKTtcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyODUtXHR0cmFjZV9uZWlnaF9ldmVudF9zZW5kX2RlYWQobmVpZ2gsIDEpO1xuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jPTE1OTY9aW50IG5laWdoX3Jlc29sdmVfb3V0cHV0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL25laWdoYm91ci5jLTE2MjMtXHRyYyA9IC1FSU5WQUw7XG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjI0Olx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9ISF9GSUxMRkFJTCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI1LVx0Z290byBvdXQ7XG4tLVxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTYzMT1pbnQgbmVpZ2hfY29ubmVjdGVkX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjQ3LVx0XHRlcnIgPSAtRUlOVkFMO1xubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTY0ODpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9ISF9GSUxMRkFJTCk7XG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjQ5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGtmcmVlX3NrYl9yZWFzb25gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBga2ZyZWVfc2tiX3JlYXNvbmAuIElzIGl0IGRlZmluZWQgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBvciBwZXJoYXBzIGp1c3QgYSBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGA/IEkmIzM5O20gYmV0dGluZyB0aGUgbGF0dGVyLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSB0aGUgZXhhY3QgbG9jYXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24g4oCTIHdoZXRoZXIgaXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLCBhIG1hY3JvIHdpdGggcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIHR1bmluZy4gS25vd2luZyB0aGUgZGV0YWlscyBvZiBpdHMgZGVmaW5pdGlvbiBkaXJlY3RseSBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgZm9yIGFuYWx5emluZyBrZXJuZWwgdHJhY2VzIGFuZCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYW55IHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3RhdGlzdGljcyBJIG1heSBiZSBsb29raW5nIGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBrZnJlZV9za2JfcmVhc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIFNLQiBEZWFsbG9jYXRpb24gUmVhc29ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgU0tCcyBhcmUgYmVpbmcgZnJlZWQsIGFuZCwgY3JpdGljYWxseSwgKndoeSouIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUga2VybmVsIHdoZXJlIGBrZnJlZV9za2JfcmVhc29uYCBpcyBiZWluZyBjYWxsZWQuIEkga25vdyB0aGUgZnVuY3Rpb24mIzM5O3MgbGlrZWx5IHJlc2lkaW5nIGluIGBuZXQvY29yZS9za2J1ZmYuY2Ag4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZ2l2ZW4gaXRzIHJvbGUgaW4gU0tCIG1hbmFnZW1lbnQuIFRoZSBjaGFsbGVuZ2UsIGFzIGFsd2F5cywgd2lsbCBiZSB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW5zIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFyb3VuZCBlYWNoIHVzZSwgcGFydGljdWxhcmx5IGluIHRoZSBtb3JlIGNvbXBsZXggYXNwZWN0cyBvZiBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgdGhlcmUmIzM5O2xsIGJlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgY2FsbCBzdGFjayBhdCBlYWNoIGxvY2F0aW9uIHRvIGRlcml2ZSB0aGUgY29udGV4dC4gSSYjMzk7bSBob3BpbmcgdGhlcmUmIzM5O3MgdXNlZnVsIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgY29tbWVudHMgc3Vycm91bmRpbmcgdGhvc2UgY2FsbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9za2JfcmVhc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTG9jYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYGtmcmVlX3NrYl9yZWFzb25gKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBrZnJlZV9za2JfcmVhc29uYC4gU2luY2UgaXQmIzM5O3MgYSBrZXJuZWwgZnVuY3Rpb24gb3IgdmFyaWFibGUsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgYWxsIHRoZSBoZWFkZXIgZmlsZXMgYXJlIHRoZXJlLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIGRlY2xhcmF0aW9ucywgbWF5YmUgZXZlbiBpbmxpbmUgZGVmaW5pdGlvbnMuIElmIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIGluIGBpbmNsdWRlL2AsIEkmIzM5O2xsIGV4cGFuZCB0aGUgc2VhcmNoIHRvIHRoZSBlbnRpcmUga2VybmVsIHNvdXJjZSwgbGlrZWx5IHVzaW5nIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCBpdHMgdXNhZ2UgYW5kIGRlY2xhcmF0aW9uIGFjcm9zcyB0aGUgY29kZWJhc2UuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYSBjb21tb24gZW5vdWdoIGNvbmNlcHQgcmVsYXRlZCB0byBuZXR3b3JrIGJ1ZmZlciBmcmVlaW5nLCBzbyBpdCBzaG91bGQgYmUgd2VsbC1kZWZpbmVkIHNvbWV3aGVyZSBhY2Nlc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZV9za2JfcmVhc29uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaD0yNj1ORl9EUk9QX1JFQVNPTihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24sIHUzMiBlcnIpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaC0yOS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6MzA6XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgtMzEtXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0xMzIwPXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzIxOmtmcmVlX3NrYl9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzIyLXtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTEzMzA9c3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzMxLXtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6MTMzMjpcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMzMtfVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MzQ1OT1zdGF0aWMgaW5saW5lIHZvaWQgX19za2JfcXVldWVfcHVyZ2VfcmVhc29uKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0zNDY0LVx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpKSAhPSBOVUxMKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDY1Olx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2Ni19XG4tLVxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtMTM2LSAqXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaDoxMzc6ICogVGhlIHJlYXNvbiBvZiBza2IgZHJvcCwgd2hpY2ggaXMgdXNlZCBpbiBrZnJlZV9za2JfcmVhc29uKCkuXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC0xMzgtICovXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oPTE1ND1zdGF0aWMgaW5saW5lIHZvaWQgaXA2dHVubmVsX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaC0xNjQtXHRcdH1cbmluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaDoxNjU6XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fUkVDVVJTSU9OX0xJTUlUKTtcbmluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaC0xNjYtXHRcdHJldHVybjtcbi0tXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaD02NT1pcDZmcmFnX2V4cGlyZV9mcmFnX3F1ZXVlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZyYWdfcXVldWUgKmZxKVxuLS1cbmluY2x1ZGUvbmV0L2lwdjZfZnJhZy5oLTEwOC1cdGljbXB2Nl9zZW5kKGhlYWQsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19GUkFHVElNRSwgMCk7XG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaDoxMDk6XHRrZnJlZV9za2JfcmVhc29uKGhlYWQsIFNLQl9EUk9QX1JFQVNPTl9GUkFHX1JFQVNNX1RJTUVPVVQpO1xuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtMTEwLVx0Z290byBvdXRfcmN1X3VubG9jaztcbi0tXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTEyMjc9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC0xMjQyLVx0fSBlbHNlIHtcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmg6MTI0MzpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIChlbnVtIHNrYl9kcm9wX3JlYXNvbilyZWFzb24pO1xuaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaC0xMjQ0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBrZnJlZV9za2JfcmVhc29uYCBEZXRhaWxzKioKCk9rYXksIEkgbmVlZCBhIHJlZnJlc2hlciBvbiBob3cgYGtmcmVlX3NrYl9yZWFzb25gIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gSSYjMzk7bGwgemVybyBpbiBvbiBsaW5lcyAxMzE1IHRocm91Z2ggMTM0MCwgYXMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIGtpbmRzIG9mIGRlZmluaXRpb25zIGFuZCBhc3NvY2lhdGVkIGNvbW1lbnRzIHJlc2lkZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCB0aGUgcmVhc29ucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkLCB0aGUgdmFyaW91cyBjYWxsIHNpdGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnRleHRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyAtIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBzdWJ0bGUgZGVzaWduIGNob2ljZXMsIG9yIGltcG9ydGFudCBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIGl0cyB1c2UuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBkZWJ1Z2dpbmcsIHN0YXRpc3RpY3MsIG9yIHBlcmhhcHMgZXZlbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHNvIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29tbWVudHMgYXMgd2VsbCwgdGhleSBmcmVxdWVudGx5IGhvbGQgdGhlIGtleSBpbmZvcm1hdGlvbiBmb3IgcHJvcGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxNTpcdFxuMTMxNjpcdHZvaWQgX19maXhfYWRkcmVzcyBza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuMTMxNzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEzMTg6XHRcdFx0XHRcdCAgICAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbik7XG4xMzE5Olx0XG4xMzIwOlx0c3RhdGljIGlubGluZSB2b2lkXG4xMzIxOlx0a2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMzIyOlx0e1xuMTMyMzpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNrYiwgcmVhc29uKTtcbjEzMjQ6XHR9XG4xMzI1Olx0XG4xMzI2Olx0LyoqXG4xMzI3Olx0ICpcdGtmcmVlX3NrYiAtIGZyZWUgYW4gc2tfYnVmZiB3aXRoICYjMzk7Tk9UX1NQRUNJRklFRCYjMzk7IHJlYXNvblxuMTMyODpcdCAqXHRAc2tiOiBidWZmZXIgdG8gZnJlZVxuMTMyOTpcdCAqL1xuMTMzMDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEzMzE6XHR7XG4xMzMyOlx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xuMTMzMzpcdH1cbjEzMzQ6XHRcbjEzMzU6XHR2b2lkIHNrYl9yZWxlYXNlX2hlYWRfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4xMzM2Olx0dm9pZCBrZnJlZV9za2JfbGlzdF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNlZ3MsXG4xMzM3Olx0XHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKTtcbjEzMzg6XHR2b2lkIHNrYl9kdW1wKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGZ1bGxfcGt0KTtcbjEzMzk6XHR2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNrX3NrYl9yZWFzb25fZHJvcGAqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc2tfc2tiX3JlYXNvbl9kcm9wYC4gSSYjMzk7bSBjdXJpb3VzIHdoYXQgaXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcuIEtub3dpbmcgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBvZiBwYWNrZXQgZHJvcHBpbmcgaXMgY3J1Y2lhbCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBzb21lIHNvcnQgb2Ygc29ja2V0IGJ1ZmZlciAoc2tiKSBpc3N1ZSwgbGlrZWx5IGludm9sdmluZyByZXNvdXJjZSBsaW1pdGF0aW9ucywgcG9saWN5IHZpb2xhdGlvbnMsIG9yIHBlcmhhcHMgZXZlbiBlcnJvciBjb25kaXRpb25zLiBJIHdhbnQgdG8gc2VlIHdoYXQgc3BlY2lmaWMgY29udGV4dHMgYW5kIHNjZW5hcmlvcyBhcmUgaGFuZGxlZCB3aXRoaW4gYHNrX3NrYl9yZWFzb25fZHJvcGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgbG9naWMgYW5kIHBvdGVudGlhbGx5IHNvbWUgc3RhdGlzdGljcyB1cGRhdGVzLCBlcnJvciBsb2dnaW5nLCBvciBldmVuIG5ldHdvcmsgaW50ZXJmYWNlIGFkanVzdG1lbnRzLiBJJiMzOTttIHJlYWxseSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgJiMzOTtyZWFzb25zJiMzOTsgZm9yIGRyb3BwaW5nIHBhY2tldHMgYXQgdGhlIHNvY2tldCBsYXllci4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfc2tiX3JlYXNvbl9kcm9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL2JjbS5jPTM5OT1zdGF0aWMgdm9pZCBiY21fc2VuZF90b191c2VyKHN0cnVjdCBiY21fb3AgKm9wLCBzdHJ1Y3QgYmNtX21zZ19oZWFkICpoZWFkLFxuLS1cbm5ldC9jYW4vYmNtLmMtNDY2LVxubmV0L2Nhbi9iY20uYzo0Njc6XHRcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xubmV0L2Nhbi9iY20uYy00NjgtXHRcdC8qIGRvbiYjMzk7dCBjYXJlIGFib3V0IG92ZXJmbG93cyBpbiB0aGlzIHN0YXRpc3RpYyAqL1xuLS1cbm5ldC9jYW4vaXNvdHAuYz0zNTU9c3RhdGljIHZvaWQgaXNvdHBfcmN2X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2Nhbi9pc290cC5jLTM2Ny1cdGlmIChyZWFzb24pXG5uZXQvY2FuL2lzb3RwLmM6MzY4Olx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9jYW4vaXNvdHAuYy0zNjktfVxuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9MzExPXN0YXRpYyB2b2lkIGoxOTM5X3NrX3JlY3Zfb25lKHN0cnVjdCBqMTkzOV9zb2NrICpqc2ssIHN0cnVjdCBza19idWZmICpvc2tiKVxuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmMtMzM3LVx0aWYgKHJlYXNvbilcbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM6MzM4Olx0XHRza19za2JfcmVhc29uX2Ryb3AoXHUwMDI2anNrLVx1MDAzZXNrLCBza2IsIHJlYXNvbik7XG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jLTMzOS19XG4tLVxubmV0L2Nhbi9yYXcuYz0xMjk9c3RhdGljIHZvaWQgcmF3X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqb3NrYiwgdm9pZCAqZGF0YSlcbi0tXG5uZXQvY2FuL3Jhdy5jLTIxMS1cdGlmIChyZWFzb24pXG5uZXQvY2FuL3Jhdy5jOjIxMjpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvY2FuL3Jhdy5jLTIxMy19XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTIxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lXG5uZXQvY29yZS9za2J1ZmYuYzoxMjE3OmJvb2wgX19za19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTIxOC1cdFx0XHQgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMjM1LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6MTIzNjogKlx0c2tfc2tiX3JlYXNvbl9kcm9wIC0gZnJlZSBhbiBza19idWZmIHdpdGggc3BlY2lhbCByZWFzb25cbm5ldC9jb3JlL3NrYnVmZi5jLTEyMzctICpcdEBzazogdGhlIHNvY2tldCB0byByZWNlaXZlIEBza2IsIG9yIE5VTEwgaWYgbm90IGFwcGxpY2FibGVcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0xMjQ1PXZvaWQgX19maXhfYWRkcmVzc1xubmV0L2NvcmUvc2tidWZmLmM6MTI0Njpza19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTI0Ny1cdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxubmV0L2NvcmUvc2tidWZmLmMtMTI0OC17XG5uZXQvY29yZS9za2J1ZmYuYzoxMjQ5Olx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbikpXG5uZXQvY29yZS9za2J1ZmYuYy0xMjUwLVx0XHRfX2tmcmVlX3NrYihza2IpO1xubmV0L2NvcmUvc2tidWZmLmMtMTI1MS19XG5uZXQvY29yZS9za2J1ZmYuYzoxMjUyOkVYUE9SVF9TWU1CT0woc2tfc2tiX3JlYXNvbl9kcm9wKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTEyNTMtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTI4Mj1rZnJlZV9za2JfbGlzdF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNlZ3MsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMjkwLVxubmV0L2NvcmUvc2tidWZmLmM6MTI5MTpcdFx0aWYgKF9fc2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNlZ3MsIHJlYXNvbikpIHtcbm5ldC9jb3JlL3NrYnVmZi5jLTEyOTItXHRcdFx0c2tiX3BvaXNvbl9saXN0KHNlZ3MpO1xuLS1cbm5ldC9jb3JlL3NvY2suYz01NDQ9aW50IF9fc2tfcmVjZWl2ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NvY2suYy01OTAtZGlzY2FyZF9hbmRfcmVsc2U6XG5uZXQvY29yZS9zb2NrLmM6NTkxOlx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvY29yZS9zb2NrLmMtNTkyLVx0Z290byBvdXQ7XG4tLVxubmV0L2lwdjQvcGluZy5jPTkzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gX19waW5nX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3BpbmcuYy05MzktXHRpZiAocmVhc29uKSB7XG5uZXQvaXB2NC9waW5nLmM6OTQwOlx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9pcHY0L3BpbmcuYy05NDEtXHRcdHByX2RlYnVnKFwmIzM0O3BpbmdfcXVldWVfcmN2X3NrYiAtXHUwMDNlIGZhaWxlZFxcblwmIzM0Oyk7XG4tLVxubmV0L2lwdjQvcmF3LmM9MzAyPXN0YXRpYyBpbnQgcmF3X3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3Jhdy5jLTMxMC1cdGlmIChyZWFzb24pIHtcbm5ldC9pcHY0L3Jhdy5jOjMxMTpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2NC9yYXcuYy0zMTItXHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvaXB2NC9yYXcuYz0zMTg9aW50IHJhd19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3Jhdy5jLTMyMS1cdFx0c2tfZHJvcHNfaW5jKHNrKTtcbm5ldC9pcHY0L3Jhdy5jOjMyMjpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWSk7XG5uZXQvaXB2NC9yYXcuYy0zMjMtXHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9NDA1PXN0cnVjdCBzb2NrICpjb29raWVfdjRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy01MDktb3V0X2Ryb3A6XG5uZXQvaXB2NC9zeW5jb29raWVzLmM6NTEwOlx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNTExLVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTI5Nz10Y3BfZHJvcF9yZWFzb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTI5OS1cdHNrX2Ryb3BzX3NrYmFkZChzaywgc2tiKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjUzMDA6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTUzMDEtfVxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTgzMD1pbnQgdGNwX3Y0X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODgzLWRpc2NhcmQ6XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE4ODQ6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTg4NS1cdC8qIEJlIGNhcmVmdWwgaGVyZS4gSWYgdGhpcyBmdW5jdGlvbiBnZXRzIG1vcmUgY29tcGxpY2F0ZWQgYW5kXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0yMDcwPWludCB0Y3BfdjRfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMjgyLVx0LyogRGlzY2FyZCBmcmFtZS4gKi9cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjI4MzpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIyODQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2NC91ZHAuYz0xNjU3PWludCBfX3VkcF9lbnF1ZXVlX3NjaGVkdWxlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdWRwLmMtMTc2NC1cdFx0XHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xubmV0L2lwdjQvdWRwLmM6MTc2NTpcdFx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1BST1RPX01FTSk7XG5uZXQvaXB2NC91ZHAuYy0xNzY2LVx0XHR9XG4tLVxubmV0L2lwdjQvdWRwLmM9MjMwOT1zdGF0aWMgaW50IF9fdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTIzMzUtXHRcdHRyYWNlX3VkcF9mYWlsX3F1ZXVlX3Jjdl9za2IocmMsIHNrLCBza2IpO1xubmV0L2lwdjQvdWRwLmM6MjMzNjpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9pcHY0L3VkcC5jLTIzMzctXHRcdHJldHVybiAtMTtcbi0tXG5uZXQvaXB2NC91ZHAuYz0yMzUxPXN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yNDE5LVx0dWRwX2Ryb3BzX2luYyhzayk7XG5uZXQvaXB2NC91ZHAuYzoyNDIwOlx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9pcHY0L3VkcC5jLTI0MjEtXHRyZXR1cm4gLTE7XG4tLVxubmV0L2lwdjQvdWRwLmM9MjU5Mj1pbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTI2NzItXHQgKi9cbm5ldC9pcHY0L3VkcC5jOjI2NzM6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2lwdjQvdWRwLmMtMjY3NC1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY0L3VkcC5jLTI2OTUtXHRfX1VEUF9JTkNfU1RBVFMobmV0LCBVRFBfTUlCX0lORVJST1JTKTtcbm5ldC9pcHY0L3VkcC5jOjI2OTY6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xubmV0L2lwdjQvdWRwLmMtMjY5Ny1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jPTk3PWludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmxfdW51c2VkKVxuLS1cbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jLTEwOS1cdFx0XHRzay1cdTAwM2Vza19yb3V0ZV9jYXBzID0gMDtcbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jOjExMDpcdFx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYixcbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jLTExMS1cdFx0XHRcdFx0ICAgU0tCX0RST1BfUkVBU09OX0lQX09VVE5PUk9VVEVTKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEwODk9c3RhdGljIGludCBpcDZtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMTc0LVx0aWYgKHJlYXNvbikge1xubmV0L2lwdjYvaXA2bXIuYzoxMTc1Olx0XHRza19za2JfcmVhc29uX2Ryb3AobXJvdXRlNl9zaywgc2tiLCByZWFzb24pO1xubmV0L2lwdjYvaXA2bXIuYy0xMTc2LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvaXB2Ni9yYXcuYz0zNTk9c3RhdGljIGlubGluZSBpbnQgcmF3djZfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvcmF3LmMtMzY1LVx0XHRza19kcm9wc19pbmMoc2spO1xubmV0L2lwdjYvcmF3LmM6MzY2Olx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9DU1VNKTtcbm5ldC9pcHY2L3Jhdy5jLTM2Ny1cdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9pcHY2L3Jhdy5jLTM3My1cdGlmIChyZWFzb24pIHtcbm5ldC9pcHY2L3Jhdy5jOjM3NDpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2Ni9yYXcuYy0zNzUtXHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvaXB2Ni9yYXcuYz0zODg9aW50IHJhd3Y2X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvcmF3LmMtMzk0LVx0XHRza19kcm9wc19pbmMoc2spO1xubmV0L2lwdjYvcmF3LmM6Mzk1Olx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZKTtcbm5ldC9pcHY2L3Jhdy5jLTM5Ni1cdFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xuLS1cbm5ldC9pcHY2L3Jhdy5jLTQxOS1cdFx0XHRza19kcm9wc19pbmMoc2spO1xubmV0L2lwdjYvcmF3LmM6NDIwOlx0XHRcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fU0tCX0NTVU0pO1xubmV0L2lwdjYvcmF3LmMtNDIxLVx0XHRcdHJldHVybiBORVRfUlhfRFJPUDtcbi0tXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM9MTc0PXN0cnVjdCBzb2NrICpjb29raWVfdjZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yODYtb3V0X2Ryb3A6XG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6Mjg3Olx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjg4LVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz04NDc9c3RhdGljIHZvaWQgdGNwX3Y2X3NlbmRfcmVzcG9uc2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgc2VxLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTAwMS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTAwMjpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgYnVmZiwgU0tCX0RST1BfUkVBU09OX0lQX09VVE5PUk9VVEVTKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTAwMy19XG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0xNTY3PWludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE2NjItXHRcdF9fa2ZyZWVfc2tiKG9wdF9za2IpO1xubmV0L2lwdjYvdGNwX2lwdjYuYzoxNjYzOlx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE2NjQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTE3MzA9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHRjcF92Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE5MzUtXHRTS0JfRFJfT1IoZHJvcF9yZWFzb24sIE5PVF9TUEVDSUZJRUQpO1xubmV0L2lwdjYvdGNwX2lwdjYuYzoxOTM2Olx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTkzNy1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTc3Mj1zdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdWRwLmMtNzk4LVx0XHR0cmFjZV91ZHBfZmFpbF9xdWV1ZV9yY3Zfc2tiKHJjLCBzaywgc2tiKTtcbm5ldC9pcHY2L3VkcC5jOjc5OTpcdFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9pcHY2L3VkcC5jLTgwMC1cdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTgwNj1zdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni91ZHAuYy04NzItXHR1ZHBfZHJvcHNfaW5jKHNrKTtcbm5ldC9pcHY2L3VkcC5jOjg3MzpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvaXB2Ni91ZHAuYy04NzQtXHRyZXR1cm4gLTE7XG4tLVxubmV0L2lwdjYvdWRwLmM9MTA2OT1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdWRwLmMtMTE2Mi1cbm5ldC9pcHY2L3VkcC5jOjExNjM6XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcbm5ldC9pcHY2L3VkcC5jLTExNjQtXHRyZXR1cm4gMDtcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xMTgyLVx0X19VRFA2X0lOQ19TVEFUUyhuZXQsIFVEUF9NSUJfSU5FUlJPUlMpO1xubmV0L2lwdjYvdWRwLmM6MTE4MzpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xubmV0L2lwdjYvdWRwLmMtMTE4NC1cdHJldHVybiAwO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM9MjEzNj1zdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyNDQtZHJvcDpcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjI0NTpcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTIyNDYtXHRyZXR1cm4gMDtcbi0tXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jPTIyNDk9c3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxNy1kcm9wOlxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTE4Olx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxOS1cdHJldHVybiAwO1xuLS1cbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUyNi1cdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTI3Olx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBjb3B5X3NrYiwgZHJvcF9yZWFzb24pO1xubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yNTI4LVx0Z290byBkcm9wX25fcmVzdG9yZTtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MzA9cHNwX3ZhbGlkYXRlX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0zOS1cdGlmICghZ29vZCkge1xubmV0L3BzcC9wc3Bfc29jay5jOjQwOlx0XHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1BTUF9PVVRQVVQpO1xubmV0L3BzcC9wc3Bfc29jay5jLTQxLVx0XHRyZXR1cm4gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYF9fc2tfc2tiX3JlYXNvbl9kcm9wYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF9fc2tfc2tiX3JlYXNvbl9kcm9wYC4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBTS0IgbGlmZWN5Y2xlLiBHaXZlbiBpdHMgbmFtZSwgaXQgcHJvYmFibHkgaGFuZGxlcyB0aGUgbG9nZ2luZyBvciBhY2NvdW50aW5nIGFzcGVjdHMgb2Ygd2h5IGEgcGFydGljdWxhciBTS0IgcGFja2V0IGlzIGJlaW5nIGRyb3BwZWQsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSB0dW5pbmcuIEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aCB0aGUgbGFyZ2VyIFNLQiAoU29ja2V0IEJ1ZmZlcikgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3aGF0IHRoZSB2YXJpb3VzICYjMzk7cmVhc29ucyYjMzk7IGl0IHRyYWNrcyBhY3R1YWxseSBzaWduaWZ5LiBJcyBpdCBqdXN0IGEgc2ltcGxlIGxvZ2dpbmcgY2FsbCwgb3IgZG9lcyBpdCBjb250cmlidXRlIG1vcmUgdG8gdGhlIGZsb3cgY29udHJvbCBwcm9jZXNzPyBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIGluc3RydW1lbnRhdGlvbiBtaWdodCBiZSBiZW5lZmljaWFsLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZHJvcHBlZCBwYWNrZXRzIGFyZSBoYW5kbGVkIGFuZCB3aGF0IGNvdWxkIGJlIHRoZSBjb250cmlidXRpbmcgZmFjdG9ycywgd2hpY2ggY2FuIGJlIHVzZWZ1bCB3aGVuIHRyb3VibGVzaG9vdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxMDpcdHtcbjEyMTE6XHRcdHNrYl9yZWxlYXNlX2FsbChza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcbjEyMTI6XHRcdGtmcmVlX3NrYm1lbShza2IpO1xuMTIxMzpcdH1cbjEyMTQ6XHRFWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTtcbjEyMTU6XHRcbjEyMTY6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lXG4xMjE3Olx0Ym9vbCBfX3NrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4xMjE4Olx0XHRcdFx0ICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXG4xMjE5Olx0e1xuMTIyMDpcdFx0aWYgKHVubGlrZWx5KCFza2JfdW5yZWYoc2tiKSkpXG4xMjIxOlx0XHRcdHJldHVybiBmYWxzZTtcbjEyMjI6XHRcbjEyMjM6XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UocmVhc29uID09IFNLQl9OT1RfRFJPUFBFRF9ZRVQgfHxcbjEyMjQ6XHRcdFx0XHQgICAgICAgdTMyX2dldF9iaXRzKHJlYXNvbixcbjEyMjU6XHRcdFx0XHRcdFx0ICAgIFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfTUFTSykgXHUwMDNlPVxuMTIyNjpcdFx0XHRcdFx0U0tCX0RST1BfUkVBU09OX1NVQlNZU19OVU0pO1xuMTIyNzpcdFxuMTIyODpcdFx0aWYgKHJlYXNvbiA9PSBTS0JfQ09OU1VNRUQpXG4xMjI5Olx0XHRcdHRyYWNlX2NvbnN1bWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbjEyMzA6XHRcdGVsc2VcbjEyMzE6XHRcdFx0dHJhY2Vfa2ZyZWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCByZWFzb24sIHNrKTtcbjEyMzI6XHRcdHJldHVybiB0cnVlO1xuMTIzMzpcdH1cbjEyMzQ6XHRcbjEyMzU6XHQvKipcbjEyMzY6XHQgKlx0c2tfc2tiX3JlYXNvbl9kcm9wIC0gZnJlZSBhbiBza19idWZmIHdpdGggc3BlY2lhbCByZWFzb25cbjEyMzc6XHQgKlx0QHNrOiB0aGUgc29ja2V0IHRvIHJlY2VpdmUgQHNrYiwgb3IgTlVMTCBpZiBub3QgYXBwbGljYWJsZVxuMTIzODpcdCAqXHRAc2tiOiBidWZmZXIgdG8gZnJlZVxuMTIzOTpcdCAqXHRAcmVhc29uOiByZWFzb24gd2h5IHRoaXMgc2tiIGlzIGRyb3BwZWRcbjEyNDA6XHQgKlxuMTI0MTpcdCAqXHREcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIgYW5kIGZyZWUgaXQgaWYgdGhlIHVzYWdlIGNvdW50IGhhcyBoaXRcbjEyNDI6XHQgKlx0emVyby4gTWVhbndoaWxlLCBwYXNzIHRoZSByZWNlaXZpbmcgc29ja2V0IGFuZCBkcm9wIHJlYXNvbiB0b1xuMTI0MzpcdCAqXHQmIzM5O2tmcmVlX3NrYiYjMzk7IHRyYWNlcG9pbnQuXG4xMjQ0Olx0ICovXG4xMjQ1Olx0dm9pZCBfX2ZpeF9hZGRyZXNzXG4xMjQ2Olx0c2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjEyNDc6XHRcdFx0ICAgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxuMTI0ODpcdHtcbjEyNDk6XHRcdGlmIChfX3NrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pKVxuMTI1MDpcdFx0XHRfX2tmcmVlX3NrYihza2IpO1xuMTI1MTpcdH1cbjEyNTI6XHRFWFBPUlRfU1lNQk9MKHNrX3NrYl9yZWFzb25fZHJvcCk7XG4xMjUzOlx0XG4xMjU0Olx0I2RlZmluZSBLRlJFRV9TS0JfQlVMS19TSVpFXHQxNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDcxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29kZSBDaGFuZ2VzIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoZSBwcm9tcHQgZGVmaW5lcyB0aGUgY29uZGl0aW9ucyBmb3IgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVzZSBjaGFuZ2VzIHF1YWxpZnkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBwcmVjaXNlIGhlcmUsIHNvIEkmIzM5O2xsIHJldmlldyBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQgZm9jdXNlcyBvbiBjaGFuZ2VzIHRoYXQgYXJlIHNhZmUgdG8gaWdub3JlIGZvciBmdXp6aW5nLCBsaWtlIGRvY3VtZW50YXRpb24sIHVzZXItc3BhY2UgdG9vbHMsIGFuZCAqcHVyZWx5IGRlY29yYXRpdmUqIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHMuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZSBtb2RpZmljYXRpb25zLiBJdCBsb29rcyBsaWtlOgoKMS4gIEFuIGVudW0gdmFsdWUgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgIHdhcyBhZGRlZC4KMi4gIFNldmVyYWwgZnVuY3Rpb25zLCBpbiBgbmV0L2lwdjQvaXBfZm9yd2FyZC5jYCwgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGFuZCBgbmV0L2lwdjYvaXA2X291dHB1dC5jYCBhcmUgdXBkYXRpbmcgdGhlIGRyb3AgcmVhc29uIGZvciBhIGBza2JgIHdoZW4gVFRMIGlzIGV4Y2VlZGVkLiBTcGVjaWZpY2FsbHksIGNhbGxzIHRvIGBrZnJlZV9za2Ioc2tiKWAgYXJlIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8gYGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKWAuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIGNoYW5nZXMgKnB1cmVseSBkZWNvcmF0aXZlKiBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzPwoKTGV0JiMzOTtzIGRlbHZlIGRlZXBlciBpbnRvIGBrZnJlZV9za2JfcmVhc29uYC4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGNhbGxzIGBfX3NrX3NrYl9yZWFzb25fZHJvcGAsIHdoaWNoIHRoZW4gaGFzIGEgY291cGxlIG9mIHN0ZXBzLiBJdCBjaGVja3MgaWYgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGlzIHRydWUsIGNhbGxzIGB0cmFjZV9rZnJlZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIHJlYXNvbiwgc2spO2AsIGFuZCB0aGVuIGNhbGxzIHRoZSBjb3JlIGZyZWUgZnVuY3Rpb24gYF9fa2ZyZWVfc2tiKHNrYilgLiBOb3csIHRoZSBpbXBvcnRhbnQgdGhpbmcgdG8gbm90ZSBpcyB0aGF0IGBrZnJlZV9za2Ioc2tiKWAgaXMganVzdCBhIHdyYXBwZXIgZm9yIGBrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpYC4gSW4gc3VtbWFyeSwgdGhlIG5ldyBmdW5jdGlvbiBjYWxsIGFuZCB0aGUgY2hhbmdlcyBvbmx5IGFmZmVjdCB0aGUgYHJlYXNvbmAgcGFzc2VkIHRvIHRoZSBgdHJhY2Vfa2ZyZWVfc2tiYCB0cmFjZXBvaW50LgoKVGhlIGRlc2NyaXB0aW9uIGluIHRoZSBwcm9tcHQgc2F5cywgJiMzNDtUcmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLiYjMzQ7IEl0IHNlZW1zIHRoYXQgZHJvcCByZWFzb25zIGFyZSByZWFsbHkgb25seSB1c2VkIGJ5IGB0cmFjZV9rZnJlZV9za2JgLCBzbyB0aGlzIGNoYW5nZSBzaG91bGQgYmUgc2FmZSB0byBpZ25vcmUgZm9yIGZ1enppbmcuIFRoaXMgaXMgcHJpbWFyaWx5IGZvciB0b29scyBsaWtlIGRyb3B3YXRjaCwgcGVyZiwgb3IgYnBmdHJhY2UuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciBvdGhlciBwbGFjZXMgdGhpcyBgcmVhc29uYCBpcyB1c2VkLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYW4gdW53YXJyYW50ZWQgYXNzdW1wdGlvbi4gSSYjMzk7bGwgY2hlY2sgYGlwX2ZvcndhcmRgLCBgaXB2Nl9zcmhfcmN2YCwgYGlwdjZfcnBsX3NyaF9yY3ZgLCBgaXB2Nl9ydGhkcl9yY3ZgLCBhbmQgYGlwNl9mb3J3YXJkYCB0byBzZWUgaWYgdGhlICYjMzQ7cmVhc29uJiMzNDsgdmFyaWFibGUgaXMgdXNlZCBlbHNld2hlcmUsIHBhcnRpY3VsYXJseSB0byBtb2RpZnkgY29udHJvbCBmbG93LgpMZXQmIzM5O3MgbG9vayBhdCBgbmV0L2lwdjQvaXBfZm9yd2FyZC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9mb3J3YXJkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NTpcdFxuIDE2NjpcdHNyX2ZhaWxlZDpcbiAxNjc6XHRcdC8qXG4gMTY4Olx0XHQgKlx0U3RyaWN0IHJvdXRpbmcgcGVybWl0cyBubyBnYXRld2F5aW5nXG4gMTY5Olx0XHQgKi9cbiAxNzA6XHRcdCBpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9TUl9GQUlMRUQsIDApO1xuIDE3MTpcdFx0IGdvdG8gZHJvcDtcbiAxNzI6XHRcbiAxNzM6XHR0b29fbWFueV9ob3BzOlxuIDE3NDpcdFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xuIDE3NTpcdFx0X19JUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gMTc2Olx0XHRpY21wX3NlbmQoc2tiLCBJQ01QX1RJTUVfRVhDRUVERUQsIElDTVBfRVhDX1RUTCwgMCk7XG4gMTc3Olx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTtcbiAxNzg6XHRkcm9wOlxuIDE3OTpcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG4gMTgwOlx0XHRyZXR1cm4gTkVUX1JYX0RST1A7XG4gMTgxOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcwMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBJUHY2IGFuZCBuZXR3b3JraW5nIGludGVybmFsczoKCioqRGl2aW5nIGludG8gdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VpdmVyKioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgcmlnaHQ/IFllYWgsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHNvdXJjZSByb3V0aW5nIGhlYWRlciBoYW5kbGluZyBsb2dpYyBsaXZlcy4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBleGFjdGx5IGhvdyB0aGUga2VybmVsIHByb2Nlc3NlcyB0aGVzZSBzb3VyY2Ugcm91dGluZyBoZWFkZXJzIHdoZW4gcmVjZWl2aW5nIGFuIElQdjYgcGFja2V0LiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyB0aGUgdmFyaW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBvdGVudGlhbCBsb29waW5nIHByb2JsZW1zLCBhbmQgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZXh0ZW5zaW9uIGhlYWRlcnMuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIHNvbGlkIG9uIHRoZSBkZXRhaWxzLCBib3RoIGZvciBteSBjdXJyZW50IHRhc2sgYW5kIGdlbmVyYWxseS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBsYXRlc3QgaW1wbGVtZW50YXRpb24gaXMgZG9pbmc7IGl0IGhhcyBwcm9iYWJseSBiZWVuIG9wdGltaXplZCBzaW5jZSB0aGUgbGFzdCB0aW1lIEkgbG9va2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA0NjM6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDQ2NDpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0NjU6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA0NjY6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA0Njc6XHRcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gNDY4Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDQ2OTpcdFx0XHR9XG4gNDcwOlx0XHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gNDcxOlx0XG4gNDcyOlx0XHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNDczOlx0XHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRkc3RfaW5wdXQoc2tiKTtcbiA0Nzc6XHRcbiA0Nzg6XHRcdHJldHVybiAtMTtcbiA0Nzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzUzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBSZWNlcHRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIHJlY2VwdGlvbiBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mIFNvdXJjZSBSb3V0aW5nIEhlYWRlciAoU1JIKSBhbmQgUm91dGluZyBIZWFkZXIgKFR5cGUgMCkgcHJvY2Vzc2luZywgc28gSSYjMzk7bGwgc3RhcnQgYnkgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYGlwdjZfcnBsX3NyaF9yY3ZgIGFuZCBgaXB2Nl9ydGhkcl9yY3ZgIGZ1bmN0aW9ucyB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZXNlIGFyZSByZWNlaXZlZCBhbmQgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGggYW4gZXllIHRvIHNlY3VyaXR5LCBlZGdlIGNhc2UgaGFuZGxpbmcsIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIC0gdGhlIHVzdWFsIGFyZWFzIG9mIGNvbmNlcm4sIHJlYWxseS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTU6XHRcbiA2MTY6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA2MTc6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNjE4Olx0XHRcdHJldHVybiAtMTtcbiA2MTk6XHRcdH1cbiA2MjA6XHRcbiA2MjE6XHRcdGlmIChza2JfZHN0X2Rldihza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spIHtcbiA2MjI6XHRcdFx0aWYgKGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDYyMzpcdFx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA2MjQ6XHRcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcbiA2MjU6XHRcdFx0XHRcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcbiA2MjY6XHRcdFx0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gNjI3Olx0XHRcdFx0cmV0dXJuIC0xO1xuIDYyODpcdFx0XHR9XG4gNjI5Olx0XHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gNjMwOlx0XG4gNjMxOlx0XHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNjMyOlx0XHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gNjMzOlx0XHR9XG4gNjM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTM1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgSVB2NiByb3V0aW5nIGhlYWRlcnMgYXJlIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgcmV2aXNpdCBgaXB2Nl9ydGhkcl9yY3ZgIHdpdGhpbiBgbmV0L2lwdjYvZXh0aGRycy5jYC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgY29yZSBvZiBob3cgdGhlIGtlcm5lbCBwcm9jZXNzZXMgaW5jb21pbmcgcGFja2V0cyB0aGF0IHV0aWxpemUgcm91dGluZyBoZWFkZXJzLCBzbyBpdCYjMzk7cyB0aGUgcGVyZmVjdCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgdmFyaW91cyB0eXBlcyBvZiByb3V0aW5nIGhlYWRlcnMgYW5kIHRoZWlyIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBuZWNlc3Nhcnkgc2FuaXR5IGNoZWNrcyBhbmQgcHJvY2Vzc2luZyB0byBwcmV2ZW50IHJvdXRpbmcgbG9vcHMgYW5kIGF0dGFja3MuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIG5pdHR5LWdyaXR0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxMDpcdFx0XHRyZXR1cm4gLTE7XG4gODExOlx0XHR9XG4gODEyOlx0XG4gODEzOlx0XHRpZiAoc2tiX2RzdF9kZXYoc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XG4gODE0Olx0XHRcdGlmIChpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdCBcdTAwM2M9IDEpIHtcbiA4MTU6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gODE2Olx0XHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsXG4gODE3Olx0XHRcdFx0XHQgICAgMCk7XG4gODE4Olx0XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDgxOTpcdFx0XHRcdHJldHVybiAtMTtcbiA4MjA6XHRcdFx0fVxuIDgyMTpcdFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuIDgyMjpcdFx0XHRnb3RvIGxvb3BlZF9iYWNrO1xuIDgyMzpcdFx0fVxuIDgyNDpcdFxuIDgyNTpcdFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIDgyNjpcdFx0ZHN0X2lucHV0KHNrYik7XG4gODI3Olx0XHRyZXR1cm4gLTE7XG4gODI4Olx0XG4gODI5Olx0dW5rbm93bl9yaDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIElQdjYgRm9yd2FyZGluZyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgSVB2NiBmb3J3YXJkaW5nIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBvdXRwdXQgc2lkZSBvZiB0aGluZ3MuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbXkgaW52ZXN0aWdhdGlvbiwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBmb3IgSVB2NiBvdXRwdXQgcHJvY2Vzc2luZyBpcyBnb2luZyB0byBiZSBpbiBgbmV0L2lwdjYvaXA2X291dHB1dC5jYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgaXA2X2ZvcndhcmRgIGZ1bmN0aW9uIGlzIHRoZXJlLCBhbmQgdGhlbiBkaWcgaW50byBpdCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIG1ha2VzIGZvcndhcmRpbmcgZGVjaXNpb25zIGFuZCBoYW5kbGVzIHRoZSBtZWNoYW5pY3Mgb2Ygc2VuZGluZyBvdXQgSVB2NiBwYWNrZXRzLiBUaW1lIHRvIG9wZW4gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGUgcGFja2V0IGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9vdXRwdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTcwOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTcxOlx0XHR9XG4gNTcyOlx0XG4gNTczOlx0XHQvKlxuIDU3NDpcdFx0ICpcdGNoZWNrIGFuZCBkZWNyZW1lbnQgdHRsXG4gNTc1Olx0XHQgKi9cbiA1NzY6XHRcdGlmIChoZHItXHUwMDNlaG9wX2xpbWl0IFx1MDAzYz0gMSkge1xuIDU3NzpcdFx0XHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4gNTc4Olx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA1Nzk6XHRcbiA1ODA6XHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIDU4MTpcdFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiA1ODI6XHRcdH1cbiA1ODM6XHRcbiA1ODQ6XHRcdC8qIFhYWDogaWRldi1cdTAwM2VjbmYucHJveHlfbmRwPyAqL1xuIDU4NTpcdFx0aWYgKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2Vwcm94eV9uZHApIFx1MDAyNlx1MDAyNlxuIDU4NjpcdFx0ICAgIHBuZWlnaF9sb29rdXAoXHUwMDI2bmRfdGJsLCBuZXQsIFx1MDAyNmhkci1cdTAwM2VkYWRkciwgc2tiLVx1MDAzZWRldikpIHtcbiA1ODc6XHRcdFx0aW50IHByb3hpZWQgPSBpcDZfZm9yd2FyZF9wcm94eV9jaGVjayhza2IpO1xuIDU4ODpcdFxuIDU4OTpcdFx0XHRoZHIgPSBpcHY2X2hkcihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA4MgoJCQkJCQkJb3V0cHV0OiAxMTQKCQkJCQkJCXRob3VnaHRzOiA2MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgc29sZWx5IG9uIGltcHJvdmluZyB0aGUgZ3JhbnVsYXJpdHkgb2Ygb3VyIFNLQiBkcm9wIHJlYXNvbiB0cmFja2luZy4gVGhlIGNvcmUgb2YgaXQsIGFzIEkgc2VlIGl0LCBib2lscyBkb3duIHRvIHRoZXNlIGtleSBjaGFuZ2VzOgoKMS4gIFdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIG5ldyBkcm9wIHJlYXNvbiwgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLCBpbiBgZHJvcHJlYXNvbi1jb3JlLmhgLiBUaGF0JiMzOTtzIGp1c3QgYW4gZW51bSB2YWx1ZSwgYSBuZXcgY2xhc3NpZmljYXRpb24uCjIuICBXZSYjMzk7cmUgdXBkYXRpbmcgYGlwX2ZvcndhcmQoKWAgYW5kIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBpcHY2X3NyaF9yY3YoKWAsIGBpcHY2X3JwbF9zcmhfcmN2KClgLCBhbmQgYGlwdjZfcnRoZHJfcmN2KClgIHRvIHVzZSB0aGlzIG5ldyByZWFzb24gd2hlbiBmcmVlaW5nIFNLQnMgdGhhdCBoYXZlIGhhZCB0aGVpciBUVEwgZXhwaXJlLgozLiAgVGhlIGNoYW5nZSBhbHNvIGludm9sdmVzIGNoYW5naW5nIGBpcDZfZm9yd2FyZCgpYCB0byBhbHNvIHVzZSB0aGUgbmV3bHkgZGVmaW5lZCBkcm9wIHJlYXNvbiB2YWx1ZS4KCkVzc2VudGlhbGx5LCBhbGwgb2YgdGhpcyBpcyBhYm91dCBwcm92aWRpbmcgbW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB0aGUgYHRyYWNlX2tmcmVlX3NrYmAgdHJhY2Vwb2ludCwgd2hpY2ggaXMga2V5IGZvciBuZXR3b3JrIGRlYnVnZ2luZyBhbmQgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFRoZSBwYXRjaCBkZXNjcmlwdGlvbiBpbmRpY2F0ZXMgdGhhdCB0aGlzIHBhdGNoIHBhc3NlcyB0aGUgZHJvcCByZWFzb24gdG8gYGtmcmVlX3NrYl9yZWFzb24oKWAgKG9yIGBTS0JfRFJfU0VUYCkgZnVuY3Rpb24sIHdoaWNoIGluIHR1cm4gcGFzc2VzIGl0IGRpcmVjdGx5IHRvIGB0cmFjZV9rZnJlZV9za2JgLiBDcnVjaWFsbHksIHRoaXMgZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBjb250cm9sIGZsb3csIGxvZ2ljLCBlcnJvciBoYW5kbGluZywgc3RhdGUsIG9yIGRhdGEgc3RydWN0dXJlcy4gSXQmIzM5O3MgcHVyZWx5IGFib3V0IHByb3ZpZGluZyAqbWV0YWRhdGEqIHRvIGFuIGV4aXN0aW5nIHRyYWNlcG9pbnQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IGlzIG1lbnRpb25lZCB1bmRlciAmIzM0O1B1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMmIzM0OyBpbiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuCgpHaXZlbiB0aGUgZW1wdHkgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBmaWVsZHMsIGFuZCBjb25zaWRlcmluZyB0aGF0IHRoaXMgcGF0Y2ggZG9lcyBub3RoaW5nIG1vcmUgdGhhbiBjaGFuZ2UgdGhlIGNsYXNzaWZpY2F0aW9uIG9mIGV4aXN0aW5nIHRyYWNlcG9pbnQgZGF0YSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRvIG1lIHRoYXQgdGhpcyBjaGFuZ2UgaXMgKm5vdCogd29ydGggZnV6emluZy4gSSBjYW4gY29uZmlkZW50bHkgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgcHVyZWx5IGFib3V0IHRoZSB0cmFjZXBvaW50LCBzbyBpdCBzaG91bGRuJiMzOTt0IGFmZmVjdCBmdXp6aW5nIGVmZm9ydHMuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgbmV3IHNrYiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgZXhpc3Rpbmcgc2tiIGRyb3AgY2FsbHMgaW4gSVB2NC9JUHY2IHBhY2tldCBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgdG8gcmVjb3JkIHRoaXMgbmV3IHJlYXNvbi4gVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGRyb3AgcmVhc29uIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgdHJhY2Vfa2ZyZWVfc2tiIHRyYWNlcG9pbnQgd2l0aG91dCBhbHRlcmluZyBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3Iga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgbmV3IHNrYiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgZXhpc3Rpbmcgc2tiIGRyb3AgY2FsbHMgaW4gSVB2NC9JUHY2IHBhY2tldCBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgdG8gcmVjb3JkIHRoaXMgbmV3IHJlYXNvbi4gVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGRyb3AgcmVhc29uIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgdHJhY2Vfa2ZyZWVfc2tiIHRyYWNlcG9pbnQgd2l0aG91dCBhbHRlcmluZyBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3Iga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTI6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIyOjUzLjQ5MTY1MDIxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTcyMjQ5NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBpbnRyb2R1Y2VzIGEgbmV3IHNrYiBkcm9wIHJlYXNvbiAoU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCkgYW5kIHVwZGF0ZXMgZXhpc3Rpbmcgc2tiIGRyb3AgY2FsbHMgaW4gSVB2NC9JUHY2IHBhY2tldCBmb3J3YXJkaW5nIGFuZCBleHRlbnNpb24gaGVhZGVyIHByb2Nlc3NpbmcgdG8gcmVjb3JkIHRoaXMgbmV3IHJlYXNvbi4gVGhpcyBvbmx5IGFmZmVjdHMgdGhlIGRyb3AgcmVhc29uIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgdHJhY2Vfa2ZyZWVfc2tiIHRyYWNlcG9pbnQgd2l0aG91dCBhbHRlcmluZyBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3Iga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjI6NTMuNDkxNjU1OTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA3MTcwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Mzc5ZGM2MzNkZTcxZTEyOTUxMzc5OGE0YTFhN2YxNzc0MWQ1ZGE2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTI6MjI6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmggYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxcbmluZGV4IDJmMzEyZDFmNjdkNjkuLmVkMmMwMjg4NGI2OGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxcbkBAIC0xMjgsNiArMTI4LDcgQEBcXG4gXFx0Rk4oUFNQX0lOUFVUKVxcdFxcdFxcdFxcXFxcXG4gXFx0Rk4oUFNQX09VVFBVVClcXHRcXHRcXHRcXFxcXFxuIFxcdEZOKFJFQ1VSU0lPTl9MSU1JVClcXHRcXHRcXFxcXFxuK1xcdEZOKElQX1RUTF9FWENFRURFRClcXHRcXHRcXFxcXFxuIFxcdEZOZShNQVgpXFxuIFxcbiAvKipcXG5AQCAtNjA2LDYgKzYwNywxMSBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbiB7XFxuIFxcdFNLQl9EUk9QX1JFQVNPTl9QU1BfT1VUUFVULFxcbiBcXHQvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi9cXG4gXFx0U0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVCxcXG4rXFx0LyoqXFxuK1xcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBoaXRcXG4rXFx0ICogemVybyAoc2VlIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKVxcbitcXHQgKi9cXG4rXFx0U0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCxcXG4gXFx0LyoqXFxuIFxcdCAqIEBTS0JfRFJPUF9SRUFTT05fTUFYOiB0aGUgbWF4aW11bSBvZiBjb3JlIGRyb3AgcmVhc29ucywgd2hpY2hcXG4gXFx0ICogc2hvdWxkbid0IGJlIHVzZWQgYXMgYSByZWFsICdyZWFzb24nIC0gb25seSBmb3IgdHJhY2luZyBjb2RlIGdlblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmNcXG5pbmRleCA4YjY1ZjEyNTgzZWI2Li5iMjQyNTYxZDM3ZTczIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xcbisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xcbkBAIC0xNzQsNyArMTc0LDcgQEAgaW50IGlwX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0LyogVGVsbCB0aGUgc2VuZGVyIGl0cyBwYWNrZXQgZGllZC4uLiAqL1xcbiBcXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xcbi1cXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfSU5IRFIpO1xcbitcXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTtcXG4gZHJvcDpcXG4gXFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XFxuIFxcdHJldHVybiBORVRfUlhfRFJPUDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXFxuaW5kZXggNTE5NDFhZDY1NmEzNi4uNzRjYWFmODc0NmZmYyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcXG5AQCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIFxcdFxcdFxcdFxcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbkBAIC02MjMsNyArNjIzLDcgQEAgc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFx0XFx0XFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXFxuIFxcdFxcdFxcdFxcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbkBAIC04MTUsNyArODE1LDcgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIFxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULFxcbiBcXHRcXHRcXHRcXHQgICAgMCk7XFxuLVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXFxuaW5kZXggOGZjNDc2NmM4ZGE5MC4uMGI2ZDc4YzhiNmJlNCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG5AQCAtNTc3LDcgKzU3Nyw3IEBAIGludCBpcDZfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XFxuIFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gXFxuLVxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIpO1xcbitcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XFxuIFxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMjo1My45MzMzNDIwNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM4NzMwNTQyMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGludHJvZHVjZXMgYSBuZXcgc2tiIGRyb3AgcmVhc29uIChTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKSBhbmQgdXBkYXRlcyBleGlzdGluZyBza2IgZHJvcCBjYWxscyBpbiBJUHY0L0lQdjYgcGFja2V0IGZvcndhcmRpbmcgYW5kIGV4dGVuc2lvbiBoZWFkZXIgcHJvY2Vzc2luZyB0byByZWNvcmQgdGhpcyBuZXcgcmVhc29uLiBUaGlzIG9ubHkgYWZmZWN0cyB0aGUgZHJvcCByZWFzb24gbWV0YWRhdGEgcGFzc2VkIHRvIHRoZSB0cmFjZV9rZnJlZV9za2IgdHJhY2Vwb2ludCB3aXRob3V0IGFsdGVyaW5nIGNvbnRyb2wgZmxvdywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQzNzlkYzYzM2RlNzFlMTI5NTEzNzk4YTRhMWE3ZjE3NzQxZDVkYTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDEyOjIyOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmggYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuaW5kZXggMmYzMTJkMWY2N2Q2OS4uZWQyYzAyODg0YjY4ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2Ryb3ByZWFzb24tY29yZS5oXG4rKysgYi9pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaFxuQEAgLTEyOCw2ICsxMjgsNyBAQFxuIFx0Rk4oUFNQX0lOUFVUKVx0XHRcdFxcXG4gXHRGTihQU1BfT1VUUFVUKVx0XHRcdFxcXG4gXHRGTihSRUNVUlNJT05fTElNSVQpXHRcdFxcXG4rXHRGTihJUF9UVExfRVhDRUVERUQpXHRcdFxcXG4gXHRGTmUoTUFYKVxuIFxuIC8qKlxuQEAgLTYwNiw2ICs2MDcsMTEgQEAgZW51bSBza2JfZHJvcF9yZWFzb24ge1xuIFx0U0tCX0RST1BfUkVBU09OX1BTUF9PVVRQVVQsXG4gXHQvKiogQFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQ6IERlYWQgbG9vcCBvbiB2aXJ0dWFsIGRldmljZS4gKi9cbiBcdFNLQl9EUk9QX1JFQVNPTl9SRUNVUlNJT05fTElNSVQsXG4rXHQvKipcbitcdCAqIEBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEOiBJUHY0IFRUTCBvciBJUHY2IGhvcCBsaW1pdCBoaXRcbitcdCAqIHplcm8gKHNlZSBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUylcbitcdCAqL1xuK1x0U0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCxcbiBcdC8qKlxuIFx0ICogQFNLQl9EUk9QX1JFQVNPTl9NQVg6IHRoZSBtYXhpbXVtIG9mIGNvcmUgZHJvcCByZWFzb25zLCB3aGljaFxuIFx0ICogc2hvdWxkbid0IGJlIHVzZWQgYXMgYSByZWFsICdyZWFzb24nIC0gb25seSBmb3IgdHJhY2luZyBjb2RlIGdlblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZvcndhcmQuYyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuaW5kZXggOGI2NWYxMjU4M2ViNi4uYjI0MjU2MWQzN2U3MyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX2ZvcndhcmQuY1xuKysrIGIvbmV0L2lwdjQvaXBfZm9yd2FyZC5jXG5AQCAtMTc0LDcgKzE3NCw3IEBAIGludCBpcF9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpXG4gXHQvKiBUZWxsIHRoZSBzZW5kZXIgaXRzIHBhY2tldCBkaWVkLi4uICovXG4gXHRfX0lQX0lOQ19TVEFUUyhuZXQsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiBcdGljbXBfc2VuZChza2IsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfVFRMLCAwKTtcbi1cdFNLQl9EUl9TRVQocmVhc29uLCBJUF9JTkhEUik7XG4rXHRTS0JfRFJfU0VUKHJlYXNvbiwgSVBfVFRMX0VYQ0VFREVEKTtcbiBkcm9wOlxuIFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XG4gXHRyZXR1cm4gTkVUX1JYX0RST1A7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5pbmRleCA1MTk0MWFkNjU2YTM2Li43NGNhYWY4NzQ2ZmZjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbkBAIC00NjQsNyArNDY0LDcgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiBcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXG4gXHRcdFx0XHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4tXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuQEAgLTYyMyw3ICs2MjMsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiBcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXHRcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsXG4gXHRcdFx0XHQgICAgSUNNUFY2X0VYQ19IT1BMSU1JVCwgMCk7XG4tXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xuIFx0XHRcdHJldHVybiAtMTtcbiBcdFx0fVxuIFx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWhvcF9saW1pdC0tO1xuQEAgLTgxNSw3ICs4MTUsNyBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xuIFx0XHRcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULFxuIFx0XHRcdFx0ICAgIDApO1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbiBcdFx0aXB2Nl9oZHIoc2tiKS1cdTAwM2Vob3BfbGltaXQtLTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbmluZGV4IDhmYzQ3NjZjOGRhOTAuLjBiNmQ3OGM4YjZiZTQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuQEAgLTU3Nyw3ICs1NzcsNyBAQCBpbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0aWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xuIFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XG4gXG4tXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfSU5IRFIpO1xuK1x0XHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRCk7XG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjI6NTMuOTMzMzQ0MjEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk4NjY0MjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy4gV2UgbmVlZCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIGlkZW50aWZ5IHRoZSBtb3N0IGZydWl0ZnVsIGFyZWFzIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5UaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcm9wIHJlYXNvbiwgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGxvY2F0aW9ucyB0byB1c2UgdGhpcyBuZXcgcmVhc29uLiBTcGVjaWZpY2FsbHksIGluIGBuZXQvaXB2NC9pcF9mb3J3YXJkLmNgLCBgbmV0L2lwdjYvZXh0aGRycy5jYCwgYW5kIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGNoYW5naW5nIHdoZXJlIHBhY2tldHMgYXJlIGRyb3BwZWQsIG9yIHJhdGhlciwgKndoeSogdGhleSdyZSBkcm9wcGVkLCBmcm9tIGBJUF9JTkhEUmAgdG8gYElQX1RUTF9FWENFRURFRGAuXG5cbk15IGZpcnN0IGluY2xpbmF0aW9uIGlzIHRvIHNlZSBpZiB0aGlzIHRvdWNoZXMgZXhlY3V0YWJsZSBjb2RlLiBBbmQgaXQgZG9lcy4gV2UncmUgbW9kaWZ5aW5nIGBpcF9mb3J3YXJkYCBhbmQgYGlwNl9mb3J3YXJkYCwgYWxvbmcgd2l0aCBJUHY2IHJvdXRpbmcgaGVhZGVyIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGxpa2UgYGlwdjZfc3JoX3JjdmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIG9mIGludGVyZXN0LiBIb3dldmVyLCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gSXMgdGhpcyBhICpwdXJlbHkqIGRlY29yYXRpdmUgY2hhbmdlPyBUaGUgZGVzY3JpcHRpb24gc3RhdGVzIHRoYXQgdGhpcyB3b3VsZCBmYWxsIHVuZGVyIFwicHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyxcIiBidXQgdGhhdCdzIG5vdCB3aGF0IHdlJ3JlIGxvb2tpbmcgYXQuXG5cbldlIGFyZSBjaGFuZ2luZyB0aGUgY2FsbCBvZiBga2ZyZWVfc2tiYCBvciBkcm9wIHJlYXNvbiBhbm5vdGF0aW9uLCBsaWtlIHRoZSBlbnVtIHZhbHVlLCB0byBhbm90aGVyIG9uZS4gV2hhdCdzIHRoZSBkaWZmZXJlbmNlPyBUaW1lIHRvIGludmVzdGlnYXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBrZnJlZV9za2JfcmVhc29uYCAqYWN0dWFsbHkqIGRvZXMuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBga2ZyZWVfc2tiYCBhbmQgYGtmcmVlX3NrYl9yZWFzb25gLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGluIGRlY2lkaW5nIGlmIHRoaXMgY3JlYXRlcyBuZXcgY29kZSBwYXRocyBvciBpcyBqdXN0IFwibG9nZ2luZ1wiIG9mIHNvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTY0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjI6NTcuOTE5OTg5ODYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTMxNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTM1MTE9dm9pZCBkZXZfa2ZyZWVfc2tiX2FueV9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMzUxNS1cXHRlbHNlXFxubmV0L2NvcmUvZGV2LmM6MzUxNjpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy0zNTE3LX1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQyMzM9c3RhdGljIGlubGluZSBpbnQgX19kZXZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDI4Ni1cXHRcXHRcXHRpZiAodW5saWtlbHkoZGVmZXJfY291bnQgXFx1MDAzZSBSRUFEX09OQ0UobmV0X2hvdGRhdGEucWRpc2NfbWF4X2J1cnN0KSkpIHtcXG5uZXQvY29yZS9kZXYuYzo0Mjg3OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fUURJU0NfQlVSU1RfRFJPUCk7XFxubmV0L2NvcmUvZGV2LmMtNDI4OC1cXHRcXHRcXHRcXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ1MTM9c2NoX2hhbmRsZV9pbmdyZXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwYWNrZXRfdHlwZSAqKnB0X3ByZXYsIGludCAqcmV0LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNDU1NS1cXHRjYXNlIFRDX0FDVF9TSE9UOlxcbm5ldC9jb3JlL2Rldi5jOjQ1NTY6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy00NTU3LVxcdFxcdCpyZXQgPSBORVRfUlhfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTQ1Nzc9c2NoX2hhbmRsZV9lZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00NjA2LVxcdGNhc2UgVENfQUNUX1NIT1Q6XFxubmV0L2NvcmUvZGV2LmM6NDYwNzpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9jb3JlL2Rldi5jLTQ2MDgtXFx0XFx0KnJldCA9IE5FVF9YTUlUX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz00ODE5PWludCBfX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy00ODM3LVxcdFxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxubmV0L2NvcmUvZGV2LmM6NDgzODpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy00ODM5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTQyOT1zdGF0aWMgaW50IGVucXVldWVfdG9fYmFja2xvZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY3B1LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTQ3OC1cXHRkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhza2ItXFx1MDAzZWRldik7XFxubmV0L2NvcmUvZGV2LmM6NTQ3OTpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgcmVhc29uKTtcXG5uZXQvY29yZS9kZXYuYy01NDgwLVxcdHJldHVybiBORVRfUlhfRFJPUDtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTU3MTg9aW50IGRvX3hkcF9nZW5lcmljKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqeGRwX3Byb2csIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTU3NDgtXFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbm5ldC9jb3JlL2Rldi5jOjU3NDk6XFx0a2ZyZWVfc2tiX3JlYXNvbigqcHNrYiwgU0tCX0RST1BfUkVBU09OX1hEUCk7XFxubmV0L2NvcmUvZGV2LmMtNTc1MC1cXHRyZXR1cm4gWERQX0RST1A7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz02MDM0PXN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3JlKHN0cnVjdCBza19idWZmICoqcHNrYiwgYm9vbCBwZm1lbWFsbG9jLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNjIzNy1cXG5uZXQvY29yZS9kZXYuYzo2MjM4OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2NvcmUvZGV2LmMtNjIzOS1cXHRcXHQvKiBKYW1hbCwgbm93IHlvdSB3aWxsIG5vdCBhYmxlIHRvIGVzY2FwZSBleHBsYWluaW5nXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYz0xMjAyPWludCBfX25laWdoX2V2ZW50X3NlbmQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjM5LVxcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyNDA6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9ORUlHSF9GQUlMRUQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyNDEtXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjYxLVxcdFxcdFxcdFxcdG5laWdoLVxcdTAwM2VhcnBfcXVldWVfbGVuX2J5dGVzIC09IGJ1ZmYtXFx1MDAzZXRydWVzaXplO1xcbm5ldC9jb3JlL25laWdoYm91ci5jOjEyNjI6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihidWZmLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfUVVFVUVGVUxMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xMjYzLVxcdFxcdFxcdFxcdE5FSUdIX0NBQ0hFX1NUQVRfSU5DKG5laWdoLVxcdTAwM2V0YmwsIHVucmVzX2Rpc2NhcmRzKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyODMtXFx0d3JpdGVfdW5sb2NrX2JoKFxcdTAwMjZuZWlnaC1cXHUwMDNlbG9jayk7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTI4NDpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0RFQUQpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTEyODUtXFx0dHJhY2VfbmVpZ2hfZXZlbnRfc2VuZF9kZWFkKG5laWdoLCAxKTtcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jPTE1OTY9aW50IG5laWdoX3Jlc29sdmVfb3V0cHV0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmMtMTYyMy1cXHRyYyA9IC1FSU5WQUw7XFxubmV0L2NvcmUvbmVpZ2hib3VyLmM6MTYyNDpcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX05FSUdIX0hIX0ZJTExGQUlMKTtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYy0xNjI1LVxcdGdvdG8gb3V0O1xcbi0tXFxubmV0L2NvcmUvbmVpZ2hib3VyLmM9MTYzMT1pbnQgbmVpZ2hfY29ubmVjdGVkX291dHB1dChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2NDctXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG5uZXQvY29yZS9uZWlnaGJvdXIuYzoxNjQ4OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fTkVJR0hfSEhfRklMTEZBSUwpO1xcbm5ldC9jb3JlL25laWdoYm91ci5jLTE2NDktXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMjo1Ny45NzMxMzAzNDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI1NzU4NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGtmcmVlX3NrYl9yZWFzb25gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYGtmcmVlX3NrYl9yZWFzb25gLiBJcyBpdCBkZWZpbmVkIGluIGBuZXQvY29yZS9za2J1ZmYuY2Agb3IgcGVyaGFwcyBqdXN0IGEgbWFjcm8gaW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgPyBJJ20gYmV0dGluZyB0aGUgbGF0dGVyLCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBjb25maXJtIHRoZSBleGFjdCBsb2NhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiDigJMgd2hldGhlciBpdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgYSBtYWNybyB3aXRoIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXguIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2sgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gZGVidWdnaW5nIG9yIHBlcmZvcm1hbmNlIHR1bmluZy4gS25vd2luZyB0aGUgZGV0YWlscyBvZiBpdHMgZGVmaW5pdGlvbiBkaXJlY3RseSBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgZm9yIGFuYWx5emluZyBrZXJuZWwgdHJhY2VzIGFuZCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYW55IHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3RhdGlzdGljcyBJIG1heSBiZSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjI6NTkuODk4ODkyOTEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjYwNDY2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMjo1OS45NDc1NjI2ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODc1OTcwNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIE9yaWdpbnMgb2YgU0tCIERlYWxsb2NhdGlvbiBSZWFzb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgU0tCcyBhcmUgYmVpbmcgZnJlZWQsIGFuZCwgY3JpdGljYWxseSwgKndoeSouIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUga2VybmVsIHdoZXJlIGBrZnJlZV9za2JfcmVhc29uYCBpcyBiZWluZyBjYWxsZWQuIEkga25vdyB0aGUgZnVuY3Rpb24ncyBsaWtlbHkgcmVzaWRpbmcgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGdpdmVuIGl0cyByb2xlIGluIFNLQiBtYW5hZ2VtZW50LiBUaGUgY2hhbGxlbmdlLCBhcyBhbHdheXMsIHdpbGwgYmUgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWlucyBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhcm91bmQgZWFjaCB1c2UsIHBhcnRpY3VsYXJseSBpbiB0aGUgbW9yZSBjb21wbGV4IGFzcGVjdHMgb2YgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlJ2xsIGJlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGFuZCBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBjYWxsIHN0YWNrIGF0IGVhY2ggbG9jYXRpb24gdG8gZGVyaXZlIHRoZSBjb250ZXh0LiBJJ20gaG9waW5nIHRoZXJlJ3MgdXNlZnVsIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgY29tbWVudHMgc3Vycm91bmRpbmcgdGhvc2UgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzowMi44MjM1Mzc0NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwMjMwODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjAyLjg3OTU2OTgxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMTMyNDY2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipMb2NhdGluZyB0aGUgRGVmaW5pdGlvbiBvZiBga2ZyZWVfc2tiX3JlYXNvbmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBga2ZyZWVfc2tiX3JlYXNvbmAuIFNpbmNlIGl0J3MgYSBrZXJuZWwgZnVuY3Rpb24gb3IgdmFyaWFibGUsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyBhbGwgdGhlIGhlYWRlciBmaWxlcyBhcmUgdGhlcmUsIGFuZCB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGRlY2xhcmF0aW9ucywgbWF5YmUgZXZlbiBpbmxpbmUgZGVmaW5pdGlvbnMuIElmIGl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgaW4gYGluY2x1ZGUvYCwgSSdsbCBleHBhbmQgdGhlIHNlYXJjaCB0byB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UsIGxpa2VseSB1c2luZyBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gcGlucG9pbnQgaXRzIHVzYWdlIGFuZCBkZWNsYXJhdGlvbiBhY3Jvc3MgdGhlIGNvZGViYXNlLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBhIGNvbW1vbiBlbm91Z2ggY29uY2VwdCByZWxhdGVkIHRvIG5ldHdvcmsgYnVmZmVyIGZyZWVpbmcsIHNvIGl0IHNob3VsZCBiZSB3ZWxsLWRlZmluZWQgc29tZXdoZXJlIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzowNC44OTI4MTk4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMTM5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlX3NrYl9yZWFzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaD0yNj1ORl9EUk9QX1JFQVNPTihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24sIHUzMiBlcnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oLTI5LVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmg6MzA6XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaC0zMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMyMD1zdGF0aWMgaW5saW5lIHZvaWRcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMjE6a2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzIyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg9MTMzMD1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0xMzMxLXtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzI6XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzMzMtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0zNDU5PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZV9yZWFzb24oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2NC1cXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDozNDY1OlxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCByZWFzb24pO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMzQ2Ni19XFxuLS1cXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaC0xMzYtICpcXG5pbmNsdWRlL25ldC9kcm9wcmVhc29uLWNvcmUuaDoxMzc6ICogVGhlIHJlYXNvbiBvZiBza2IgZHJvcCwgd2hpY2ggaXMgdXNlZCBpbiBrZnJlZV9za2JfcmVhc29uKCkuXFxuaW5jbHVkZS9uZXQvZHJvcHJlYXNvbi1jb3JlLmgtMTM4LSAqL1xcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oPTE1ND1zdGF0aWMgaW5saW5lIHZvaWQgaXA2dHVubmVsX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oLTE2NC1cXHRcXHR9XFxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oOjE2NTpcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1JFQ1VSU0lPTl9MSU1JVCk7XFxuaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oLTE2Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL25ldC9pcHY2X2ZyYWcuaD02NT1pcDZmcmFnX2V4cGlyZV9mcmFnX3F1ZXVlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZyYWdfcXVldWUgKmZxKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtMTA4LVxcdGljbXB2Nl9zZW5kKGhlYWQsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19GUkFHVElNRSwgMCk7XFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmg6MTA5OlxcdGtmcmVlX3NrYl9yZWFzb24oaGVhZCwgU0tCX0RST1BfUkVBU09OX0ZSQUdfUkVBU01fVElNRU9VVCk7XFxuaW5jbHVkZS9uZXQvaXB2Nl9mcmFnLmgtMTEwLVxcdGdvdG8gb3V0X3JjdV91bmxvY2s7XFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oPTEyMjc9c3RhdGljIGlubGluZSB2b2lkIHFkaXNjX2RlcXVldWVfZHJvcChzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oLTEyNDItXFx0fSBlbHNlIHtcXG5pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oOjEyNDM6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIChlbnVtIHNrYl9kcm9wX3JlYXNvbilyZWFzb24pO1xcbmluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgtMTI0NC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjA1LjAyMjk2NjQzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA1ODIyMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGtmcmVlX3NrYl9yZWFzb25gIERldGFpbHMqKlxuXG5Pa2F5LCBJIG5lZWQgYSByZWZyZXNoZXIgb24gaG93IGBrZnJlZV9za2JfcmVhc29uYCBmdW5jdGlvbnMuIExldCdzIGhlYWQgb3ZlciB0byB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gSSdsbCB6ZXJvIGluIG9uIGxpbmVzIDEzMTUgdGhyb3VnaCAxMzQwLCBhcyB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGVzZSBraW5kcyBvZiBkZWZpbml0aW9ucyBhbmQgYXNzb2NpYXRlZCBjb21tZW50cyByZXNpZGUuIEkgd2FudCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcywgdGhlIHJlYXNvbnMgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkLCB0aGUgdmFyaW91cyBjYWxsIHNpdGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnRleHRzLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIC0gYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIHN1YnRsZSBkZXNpZ24gY2hvaWNlcywgb3IgaW1wb3J0YW50IGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gaXRzIHVzZS4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGRlYnVnZ2luZywgc3RhdGlzdGljcywgb3IgcGVyaGFwcyBldmVuIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbW1lbnRzIGFzIHdlbGwsIHRoZXkgZnJlcXVlbnRseSBob2xkIHRoZSBrZXkgaW5mb3JtYXRpb24gZm9yIHByb3BlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzE0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MDcuMDI4NzkxMTY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzMTU6XFx0XFxuMTMxNjpcXHR2b2lkIF9fZml4X2FkZHJlc3Mgc2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4xMzE3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuMTMxODpcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xcbjEzMTk6XFx0XFxuMTMyMDpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4xMzIxOlxcdGtmcmVlX3NrYl9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uKVxcbjEzMjI6XFx0e1xcbjEzMjM6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKE5VTEwsIHNrYiwgcmVhc29uKTtcXG4xMzI0OlxcdH1cXG4xMzI1OlxcdFxcbjEzMjY6XFx0LyoqXFxuMTMyNzpcXHQgKlxcdGtmcmVlX3NrYiAtIGZyZWUgYW4gc2tfYnVmZiB3aXRoICdOT1RfU1BFQ0lGSUVEJyByZWFzb25cXG4xMzI4OlxcdCAqXFx0QHNrYjogYnVmZmVyIHRvIGZyZWVcXG4xMzI5OlxcdCAqL1xcbjEzMzA6XFx0c3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjEzMzE6XFx0e1xcbjEzMzI6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKTtcXG4xMzMzOlxcdH1cXG4xMzM0OlxcdFxcbjEzMzU6XFx0dm9pZCBza2JfcmVsZWFzZV9oZWFkX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IpO1xcbjEzMzY6XFx0dm9pZCBrZnJlZV9za2JfbGlzdF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNlZ3MsXFxuMTMzNzpcXHRcXHRcXHRcXHQgICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pO1xcbjEzMzg6XFx0dm9pZCBza2JfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBmdWxsX3BrdCk7XFxuMTMzOTpcXHR2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MDcuMDI5MDEwNzQ2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDY2MTI5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHNrX3NrYl9yZWFzb25fZHJvcGAqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNrX3NrYl9yZWFzb25fZHJvcGAuIEknbSBjdXJpb3VzIHdoYXQgaXQncyBhY3R1YWxseSBkb2luZy4gS25vd2luZyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIG9mIHBhY2tldCBkcm9wcGluZyBpcyBjcnVjaWFsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIGZ1bmN0aW9uLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiBzb2NrZXQgYnVmZmVyIChza2IpIGlzc3VlLCBsaWtlbHkgaW52b2x2aW5nIHJlc291cmNlIGxpbWl0YXRpb25zLCBwb2xpY3kgdmlvbGF0aW9ucywgb3IgcGVyaGFwcyBldmVuIGVycm9yIGNvbmRpdGlvbnMuIEkgd2FudCB0byBzZWUgd2hhdCBzcGVjaWZpYyBjb250ZXh0cyBhbmQgc2NlbmFyaW9zIGFyZSBoYW5kbGVkIHdpdGhpbiBgc2tfc2tiX3JlYXNvbl9kcm9wYC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBwb3RlbnRpYWxseSBzb21lIHN0YXRpc3RpY3MgdXBkYXRlcywgZXJyb3IgbG9nZ2luZywgb3IgZXZlbiBuZXR3b3JrIGludGVyZmFjZSBhZGp1c3RtZW50cy4gSSdtIHJlYWxseSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBkaWZmZXJlbnQgJ3JlYXNvbnMnIGZvciBkcm9wcGluZyBwYWNrZXRzIGF0IHRoZSBzb2NrZXQgbGF5ZXIuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTA0MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MDkuNzM1NjI2MjQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDg3OTIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19za2JfcmVhc29uX2Ryb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL2JjbS5jPTM5OT1zdGF0aWMgdm9pZCBiY21fc2VuZF90b191c2VyKHN0cnVjdCBiY21fb3AgKm9wLCBzdHJ1Y3QgYmNtX21zZ19oZWFkICpoZWFkLFxcbi0tXFxubmV0L2Nhbi9iY20uYy00NjYtXFxubmV0L2Nhbi9iY20uYzo0Njc6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxubmV0L2Nhbi9iY20uYy00NjgtXFx0XFx0LyogZG9uJ3QgY2FyZSBhYm91dCBvdmVyZmxvd3MgaW4gdGhpcyBzdGF0aXN0aWMgKi9cXG4tLVxcbm5ldC9jYW4vaXNvdHAuYz0zNTU9c3RhdGljIHZvaWQgaXNvdHBfcmN2X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMzY3LVxcdGlmIChyZWFzb24pXFxubmV0L2Nhbi9pc290cC5jOjM2ODpcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvY2FuL2lzb3RwLmMtMzY5LX1cXG4tLVxcbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9MzExPXN0YXRpYyB2b2lkIGoxOTM5X3NrX3JlY3Zfb25lKHN0cnVjdCBqMTkzOV9zb2NrICpqc2ssIHN0cnVjdCBza19idWZmICpvc2tiKVxcbi0tXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy0zMzctXFx0aWYgKHJlYXNvbilcXG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jOjMzODpcXHRcXHRza19za2JfcmVhc29uX2Ryb3AoXFx1MDAyNmpzay1cXHUwMDNlc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jLTMzOS19XFxuLS1cXG5uZXQvY2FuL3Jhdy5jPTEyOT1zdGF0aWMgdm9pZCByYXdfcmN2KHN0cnVjdCBza19idWZmICpvc2tiLCB2b2lkICpkYXRhKVxcbi0tXFxubmV0L2Nhbi9yYXcuYy0yMTEtXFx0aWYgKHJlYXNvbilcXG5uZXQvY2FuL3Jhdy5jOjIxMjpcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvY2FuL3Jhdy5jLTIxMy19XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xMjE2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjE3OmJvb2wgX19za19za2JfcmVhc29uX2Ryb3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMTgtXFx0XFx0XFx0ICBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMjM1LS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjEyMzY6ICpcXHRza19za2JfcmVhc29uX2Ryb3AgLSBmcmVlIGFuIHNrX2J1ZmYgd2l0aCBzcGVjaWFsIHJlYXNvblxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyMzctICpcXHRAc2s6IHRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBAc2tiLCBvciBOVUxMIGlmIG5vdCBhcHBsaWNhYmxlXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0xMjQ1PXZvaWQgX19maXhfYWRkcmVzc1xcbm5ldC9jb3JlL3NrYnVmZi5jOjEyNDY6c2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjQ3LVxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjQ4LXtcXG5uZXQvY29yZS9za2J1ZmYuYzoxMjQ5OlxcdGlmIChfX3NrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyNTAtXFx0XFx0X19rZnJlZV9za2Ioc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjUxLX1cXG5uZXQvY29yZS9za2J1ZmYuYzoxMjUyOkVYUE9SVF9TWU1CT0woc2tfc2tiX3JlYXNvbl9kcm9wKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMjUzLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MTI4Mj1rZnJlZV9za2JfbGlzdF9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNlZ3MsIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTEyOTAtXFxubmV0L2NvcmUvc2tidWZmLmM6MTI5MTpcXHRcXHRpZiAoX19za19za2JfcmVhc29uX2Ryb3AoTlVMTCwgc2VncywgcmVhc29uKSkge1xcbm5ldC9jb3JlL3NrYnVmZi5jLTEyOTItXFx0XFx0XFx0c2tiX3BvaXNvbl9saXN0KHNlZ3MpO1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTU0ND1pbnQgX19za19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtNTkwLWRpc2NhcmRfYW5kX3JlbHNlOlxcbm5ldC9jb3JlL3NvY2suYzo1OTE6XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxubmV0L2NvcmUvc29jay5jLTU5Mi1cXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYz05MzE9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIF9fcGluZ19xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3BpbmcuYy05MzktXFx0aWYgKHJlYXNvbikge1xcbm5ldC9pcHY0L3BpbmcuYzo5NDA6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxubmV0L2lwdjQvcGluZy5jLTk0MS1cXHRcXHRwcl9kZWJ1ZyhcXFwicGluZ19xdWV1ZV9yY3Zfc2tiIC1cXHUwMDNlIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5uZXQvaXB2NC9yYXcuYz0zMDI9c3RhdGljIGludCByYXdfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9yYXcuYy0zMTAtXFx0aWYgKHJlYXNvbikge1xcbm5ldC9pcHY0L3Jhdy5jOjMxMTpcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2NC9yYXcuYy0zMTItXFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9MzE4PWludCByYXdfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTMyMS1cXHRcXHRza19kcm9wc19pbmMoc2spO1xcbm5ldC9pcHY0L3Jhdy5jOjMyMjpcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZKTtcXG5uZXQvaXB2NC9yYXcuYy0zMjMtXFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy01MDktb3V0X2Ryb3A6XFxubmV0L2lwdjQvc3luY29va2llcy5jOjUxMDpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNTExLVxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTI5Nz10Y3BfZHJvcF9yZWFzb24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24pXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01Mjk5LVxcdHNrX2Ryb3BzX3NrYmFkZChzaywgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1MzAwOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTUzMDEtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0xODMwPWludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTg4My1kaXNjYXJkOlxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTg4NDpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE4ODUtXFx0LyogQmUgY2FyZWZ1bCBoZXJlLiBJZiB0aGlzIGZ1bmN0aW9uIGdldHMgbW9yZSBjb21wbGljYXRlZCBhbmRcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjA3MD1pbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMjgyLVxcdC8qIERpc2NhcmQgZnJhbWUuICovXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMjgzOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMjg0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MTY1Nz1pbnQgX191ZHBfZW5xdWV1ZV9zY2hlZHVsZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTc2NC1cXHRcXHRcXHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xcbm5ldC9pcHY0L3VkcC5jOjE3NjU6XFx0XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9QUk9UT19NRU0pO1xcbm5ldC9pcHY0L3VkcC5jLTE3NjYtXFx0XFx0fVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjMwOT1zdGF0aWMgaW50IF9fdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjMzNS1cXHRcXHR0cmFjZV91ZHBfZmFpbF9xdWV1ZV9yY3Zfc2tiKHJjLCBzaywgc2tiKTtcXG5uZXQvaXB2NC91ZHAuYzoyMzM2OlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2lwdjQvdWRwLmMtMjMzNy1cXHRcXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0yMzUxPXN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI0MTktXFx0dWRwX2Ryb3BzX2luYyhzayk7XFxubmV0L2lwdjQvdWRwLmM6MjQyMDpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9pcHY0L3VkcC5jLTI0MjEtXFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MjU5Mj1pbnQgdWRwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjY3Mi1cXHQgKi9cXG5uZXQvaXB2NC91ZHAuYzoyNjczOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2lwdjQvdWRwLmMtMjY3NC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI2OTUtXFx0X19VRFBfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjQvdWRwLmM6MjY5NjpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9pcHY0L3VkcC5jLTI2OTctXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYz05Nz1pbnQgaW5ldDZfY3NrX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsX3VudXNlZClcXG4tLVxcbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jLTEwOS1cXHRcXHRcXHRzay1cXHUwMDNlc2tfcm91dGVfY2FwcyA9IDA7XFxubmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmM6MTEwOlxcdFxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLFxcbm5ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jLTExMS1cXHRcXHRcXHRcXHRcXHQgICBTS0JfRFJPUF9SRUFTT05fSVBfT1VUTk9ST1VURVMpO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMDg5PXN0YXRpYyBpbnQgaXA2bXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMTc0LVxcdGlmIChyZWFzb24pIHtcXG5uZXQvaXB2Ni9pcDZtci5jOjExNzU6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKG1yb3V0ZTZfc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTExNzYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYz0zNTk9c3RhdGljIGlubGluZSBpbnQgcmF3djZfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0zNjUtXFx0XFx0c2tfZHJvcHNfaW5jKHNrKTtcXG5uZXQvaXB2Ni9yYXcuYzozNjY6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9TS0JfQ1NVTSk7XFxubmV0L2lwdjYvcmF3LmMtMzY3LVxcdFxcdHJldHVybiBORVRfUlhfRFJPUDtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTM3My1cXHRpZiAocmVhc29uKSB7XFxubmV0L2lwdjYvcmF3LmM6Mzc0OlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xcbm5ldC9pcHY2L3Jhdy5jLTM3NS1cXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYz0zODg9aW50IHJhd3Y2X3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9yYXcuYy0zOTQtXFx0XFx0c2tfZHJvcHNfaW5jKHNrKTtcXG5uZXQvaXB2Ni9yYXcuYzozOTU6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWSk7XFxubmV0L2lwdjYvcmF3LmMtMzk2LVxcdFxcdHJldHVybiBORVRfUlhfRFJPUDtcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTQxOS1cXHRcXHRcXHRza19kcm9wc19pbmMoc2spO1xcbm5ldC9pcHY2L3Jhdy5jOjQyMDpcXHRcXHRcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgU0tCX0RST1BfUkVBU09OX1NLQl9DU1VNKTtcXG5uZXQvaXB2Ni9yYXcuYy00MjEtXFx0XFx0XFx0cmV0dXJuIE5FVF9SWF9EUk9QO1xcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jPTE3ND1zdHJ1Y3Qgc29jayAqY29va2llX3Y2X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yODYtb3V0X2Ryb3A6XFxubmV0L2lwdjYvc3luY29va2llcy5jOjI4NzpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjg4LVxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz04NDc9c3RhdGljIHZvaWQgdGNwX3Y2X3NlbmRfcmVzcG9uc2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgc2VxLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMDAxLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTAwMjpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIGJ1ZmYsIFNLQl9EUk9QX1JFQVNPTl9JUF9PVVROT1JPVVRFUyk7XFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMDAzLX1cXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTU2Nz1pbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE2NjItXFx0XFx0X19rZnJlZV9za2Iob3B0X3NrYik7XFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxNjYzOlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTY2NC1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTczMD1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xOTM1LVxcdFNLQl9EUl9PUihkcm9wX3JlYXNvbiwgTk9UX1NQRUNJRklFRCk7XFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxOTM2OlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xOTM3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9NzcyPXN0YXRpYyBpbnQgX191ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTc5OC1cXHRcXHR0cmFjZV91ZHBfZmFpbF9xdWV1ZV9yY3Zfc2tiKHJjLCBzaywgc2tiKTtcXG5uZXQvaXB2Ni91ZHAuYzo3OTk6XFx0XFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIGRyb3BfcmVhc29uKTtcXG5uZXQvaXB2Ni91ZHAuYy04MDAtXFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9ODA2PXN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtODcyLVxcdHVkcF9kcm9wc19pbmMoc2spO1xcbm5ldC9pcHY2L3VkcC5jOjg3MzpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9pcHY2L3VkcC5jLTg3NC1cXHRyZXR1cm4gLTE7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz0xMDY5PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTExNjItXFxubmV0L2lwdjYvdWRwLmM6MTE2MzpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2Ni91ZHAuYy0xMTY0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTE4Mi1cXHRfX1VEUDZfSU5DX1NUQVRTKG5ldCwgVURQX01JQl9JTkVSUk9SUyk7XFxubmV0L2lwdjYvdWRwLmM6MTE4MzpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTtcXG5uZXQvaXB2Ni91ZHAuYy0xMTg0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMTM2PXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjQ0LWRyb3A6XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyMjQ1OlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBkcm9wX3JlYXNvbik7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYy0yMjQ2LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYz0yMjQ5PXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxNy1kcm9wOlxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmM6MjUxODpcXHRza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgZHJvcF9yZWFzb24pO1xcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUxOS1cXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9wYWNrZXQvYWZfcGFja2V0LmMtMjUyNi1cXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XFxubmV0L3BhY2tldC9hZl9wYWNrZXQuYzoyNTI3OlxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgY29weV9za2IsIGRyb3BfcmVhc29uKTtcXG5uZXQvcGFja2V0L2FmX3BhY2tldC5jLTI1MjgtXFx0Z290byBkcm9wX25fcmVzdG9yZTtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0zMD1wc3BfdmFsaWRhdGVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMzktXFx0aWYgKCFnb29kKSB7XFxubmV0L3BzcC9wc3Bfc29jay5jOjQwOlxcdFxcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCBTS0JfRFJPUF9SRUFTT05fUFNQX09VVFBVVCk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTQxLVxcdFxcdHJldHVybiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzowOS44MjA1MTI2NTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2NTYzNjc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBfX3NrX3NrYl9yZWFzb25fZHJvcGAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgX19za19za2JfcmVhc29uX2Ryb3BgLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3Mgcm9sZSBpbiB0aGUgU0tCIGxpZmVjeWNsZS4gR2l2ZW4gaXRzIG5hbWUsIGl0IHByb2JhYmx5IGhhbmRsZXMgdGhlIGxvZ2dpbmcgb3IgYWNjb3VudGluZyBhc3BlY3RzIG9mIHdoeSBhIHBhcnRpY3VsYXIgU0tCIHBhY2tldCBpcyBiZWluZyBkcm9wcGVkLCB3aGljaCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgbGFyZ2VyIFNLQiAoU29ja2V0IEJ1ZmZlcikgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB3aGF0IHRoZSB2YXJpb3VzICdyZWFzb25zJyBpdCB0cmFja3MgYWN0dWFsbHkgc2lnbmlmeS4gSXMgaXQganVzdCBhIHNpbXBsZSBsb2dnaW5nIGNhbGwsIG9yIGRvZXMgaXQgY29udHJpYnV0ZSBtb3JlIHRvIHRoZSBmbG93IGNvbnRyb2wgcHJvY2Vzcz8gQXJlIHRoZXJlIGFueSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHdoZXJlIGZ1cnRoZXIgb3B0aW1pemF0aW9uIG9yIGluc3RydW1lbnRhdGlvbiBtaWdodCBiZSBiZW5lZmljaWFsLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZHJvcHBlZCBwYWNrZXRzIGFyZSBoYW5kbGVkIGFuZCB3aGF0IGNvdWxkIGJlIHRoZSBjb250cmlidXRpbmcgZmFjdG9ycywgd2hpY2ggY2FuIGJlIHVzZWZ1bCB3aGVuIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoxMS45ODYxNTMyMDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMTA6XFx0e1xcbjEyMTE6XFx0XFx0c2tiX3JlbGVhc2VfYWxsKHNrYiwgU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQpO1xcbjEyMTI6XFx0XFx0a2ZyZWVfc2tibWVtKHNrYik7XFxuMTIxMzpcXHR9XFxuMTIxNDpcXHRFWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTtcXG4xMjE1OlxcdFxcbjEyMTY6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbjEyMTc6XFx0Ym9vbCBfX3NrX3NrYl9yZWFzb25fZHJvcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuMTIxODpcXHRcXHRcXHRcXHQgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4xMjE5OlxcdHtcXG4xMjIwOlxcdFxcdGlmICh1bmxpa2VseSghc2tiX3VucmVmKHNrYikpKVxcbjEyMjE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEyMjI6XFx0XFxuMTIyMzpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHJlYXNvbiA9PSBTS0JfTk9UX0RST1BQRURfWUVUIHx8XFxuMTIyNDpcXHRcXHRcXHRcXHQgICAgICAgdTMyX2dldF9iaXRzKHJlYXNvbixcXG4xMjI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX01BU0spIFxcdTAwM2U9XFxuMTIyNjpcXHRcXHRcXHRcXHRcXHRTS0JfRFJPUF9SRUFTT05fU1VCU1lTX05VTSk7XFxuMTIyNzpcXHRcXG4xMjI4OlxcdFxcdGlmIChyZWFzb24gPT0gU0tCX0NPTlNVTUVEKVxcbjEyMjk6XFx0XFx0XFx0dHJhY2VfY29uc3VtZV9za2Ioc2tiLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbjEyMzA6XFx0XFx0ZWxzZVxcbjEyMzE6XFx0XFx0XFx0dHJhY2Vfa2ZyZWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCByZWFzb24sIHNrKTtcXG4xMjMyOlxcdFxcdHJldHVybiB0cnVlO1xcbjEyMzM6XFx0fVxcbjEyMzQ6XFx0XFxuMTIzNTpcXHQvKipcXG4xMjM2OlxcdCAqXFx0c2tfc2tiX3JlYXNvbl9kcm9wIC0gZnJlZSBhbiBza19idWZmIHdpdGggc3BlY2lhbCByZWFzb25cXG4xMjM3OlxcdCAqXFx0QHNrOiB0aGUgc29ja2V0IHRvIHJlY2VpdmUgQHNrYiwgb3IgTlVMTCBpZiBub3QgYXBwbGljYWJsZVxcbjEyMzg6XFx0ICpcXHRAc2tiOiBidWZmZXIgdG8gZnJlZVxcbjEyMzk6XFx0ICpcXHRAcmVhc29uOiByZWFzb24gd2h5IHRoaXMgc2tiIGlzIGRyb3BwZWRcXG4xMjQwOlxcdCAqXFxuMTI0MTpcXHQgKlxcdERyb3AgYSByZWZlcmVuY2UgdG8gdGhlIGJ1ZmZlciBhbmQgZnJlZSBpdCBpZiB0aGUgdXNhZ2UgY291bnQgaGFzIGhpdFxcbjEyNDI6XFx0ICpcXHR6ZXJvLiBNZWFud2hpbGUsIHBhc3MgdGhlIHJlY2VpdmluZyBzb2NrZXQgYW5kIGRyb3AgcmVhc29uIHRvXFxuMTI0MzpcXHQgKlxcdCdrZnJlZV9za2InIHRyYWNlcG9pbnQuXFxuMTI0NDpcXHQgKi9cXG4xMjQ1OlxcdHZvaWQgX19maXhfYWRkcmVzc1xcbjEyNDY6XFx0c2tfc2tiX3JlYXNvbl9kcm9wKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMjQ3OlxcdFxcdFxcdCAgIGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4xMjQ4OlxcdHtcXG4xMjQ5OlxcdFxcdGlmIChfX3NrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pKVxcbjEyNTA6XFx0XFx0XFx0X19rZnJlZV9za2Ioc2tiKTtcXG4xMjUxOlxcdH1cXG4xMjUyOlxcdEVYUE9SVF9TWU1CT0woc2tfc2tiX3JlYXNvbl9kcm9wKTtcXG4xMjUzOlxcdFxcbjEyNTQ6XFx0I2RlZmluZSBLRlJFRV9TS0JfQlVMS19TSVpFXFx0MTZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MTEuOTg2NTMyNTM3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDUzMTA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvZGUgQ2hhbmdlcyBmb3IgRnV6emluZyBFbGlnaWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIHByb21wdCBkZWZpbmVzIHRoZSBjb25kaXRpb25zIGZvciByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGNoYW5nZXMgcXVhbGlmeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gcHJlY2lzZSBoZXJlLCBzbyBJJ2xsIHJldmlldyBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQgZm9jdXNlcyBvbiBjaGFuZ2VzIHRoYXQgYXJlIHNhZmUgdG8gaWdub3JlIGZvciBmdXp6aW5nLCBsaWtlIGRvY3VtZW50YXRpb24sIHVzZXItc3BhY2UgdG9vbHMsIGFuZCAqcHVyZWx5IGRlY29yYXRpdmUqIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgbW9kaWZpY2F0aW9ucy4gSXQgbG9va3MgbGlrZTpcblxuMS4gIEFuIGVudW0gdmFsdWUgYFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERURgIHdhcyBhZGRlZC5cbjIuICBTZXZlcmFsIGZ1bmN0aW9ucywgaW4gYG5ldC9pcHY0L2lwX2ZvcndhcmQuY2AsIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBhbmQgYG5ldC9pcHY2L2lwNl9vdXRwdXQuY2AgYXJlIHVwZGF0aW5nIHRoZSBkcm9wIHJlYXNvbiBmb3IgYSBgc2tiYCB3aGVuIFRUTCBpcyBleGNlZWRlZC4gU3BlY2lmaWNhbGx5LCBjYWxscyB0byBga2ZyZWVfc2tiKHNrYilgIGFyZSByZXBsYWNlZCB3aXRoIGNhbGxzIHRvIGBrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRClgLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIGNoYW5nZXMgKnB1cmVseSBkZWNvcmF0aXZlKiBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzP1xuXG5MZXQncyBkZWx2ZSBkZWVwZXIgaW50byBga2ZyZWVfc2tiX3JlYXNvbmAuIEl0IGxvb2tzIGxpa2UgdGhpcyBmdW5jdGlvbiBjYWxscyBgX19za19za2JfcmVhc29uX2Ryb3BgLCB3aGljaCB0aGVuIGhhcyBhIGNvdXBsZSBvZiBzdGVwcy4gSXQgY2hlY2tzIGlmIGBERUJVR19ORVRfV0FSTl9PTl9PTkNFYCBpcyB0cnVlLCBjYWxscyBgdHJhY2Vfa2ZyZWVfc2tiKHNrYiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCByZWFzb24sIHNrKTtgLCBhbmQgdGhlbiBjYWxscyB0aGUgY29yZSBmcmVlIGZ1bmN0aW9uIGBfX2tmcmVlX3NrYihza2IpYC4gTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIHRvIG5vdGUgaXMgdGhhdCBga2ZyZWVfc2tiKHNrYilgIGlzIGp1c3QgYSB3cmFwcGVyIGZvciBga2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEKWAuIEluIHN1bW1hcnksIHRoZSBuZXcgZnVuY3Rpb24gY2FsbCBhbmQgdGhlIGNoYW5nZXMgb25seSBhZmZlY3QgdGhlIGByZWFzb25gIHBhc3NlZCB0byB0aGUgYHRyYWNlX2tmcmVlX3NrYmAgdHJhY2Vwb2ludC5cblxuVGhlIGRlc2NyaXB0aW9uIGluIHRoZSBwcm9tcHQgc2F5cywgXCJUcmFjZXBvaW50cyB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlwiIEl0IHNlZW1zIHRoYXQgZHJvcCByZWFzb25zIGFyZSByZWFsbHkgb25seSB1c2VkIGJ5IGB0cmFjZV9rZnJlZV9za2JgLCBzbyB0aGlzIGNoYW5nZSBzaG91bGQgYmUgc2FmZSB0byBpZ25vcmUgZm9yIGZ1enppbmcuIFRoaXMgaXMgcHJpbWFyaWx5IGZvciB0b29scyBsaWtlIGRyb3B3YXRjaCwgcGVyZiwgb3IgYnBmdHJhY2UuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3Igb3RoZXIgcGxhY2VzIHRoaXMgYHJlYXNvbmAgaXMgdXNlZC4gSSBkb24ndCB3YW50IHRvIG1ha2UgYW4gdW53YXJyYW50ZWQgYXNzdW1wdGlvbi4gSSdsbCBjaGVjayBgaXBfZm9yd2FyZGAsIGBpcHY2X3NyaF9yY3ZgLCBgaXB2Nl9ycGxfc3JoX3JjdmAsIGBpcHY2X3J0aGRyX3JjdmAsIGFuZCBgaXA2X2ZvcndhcmRgIHRvIHNlZSBpZiB0aGUgXCJyZWFzb25cIiB2YXJpYWJsZSBpcyB1c2VkIGVsc2V3aGVyZSwgcGFydGljdWxhcmx5IHRvIG1vZGlmeSBjb250cm9sIGZsb3cuXG5MZXQncyBsb29rIGF0IGBuZXQvaXB2NC9pcF9mb3J3YXJkLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjE3LjE5MTg0NjMzN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9mb3J3YXJkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcbiAxNjY6XFx0c3JfZmFpbGVkOlxcbiAxNjc6XFx0XFx0LypcXG4gMTY4OlxcdFxcdCAqXFx0U3RyaWN0IHJvdXRpbmcgcGVybWl0cyBubyBnYXRld2F5aW5nXFxuIDE2OTpcXHRcXHQgKi9cXG4gMTcwOlxcdFxcdCBpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9TUl9GQUlMRUQsIDApO1xcbiAxNzE6XFx0XFx0IGdvdG8gZHJvcDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0dG9vX21hbnlfaG9wczpcXG4gMTc0OlxcdFxcdC8qIFRlbGwgdGhlIHNlbmRlciBpdHMgcGFja2V0IGRpZWQuLi4gKi9cXG4gMTc1OlxcdFxcdF9fSVBfSU5DX1NUQVRTKG5ldCwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpO1xcbiAxNzY6XFx0XFx0aWNtcF9zZW5kKHNrYiwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19UVEwsIDApO1xcbiAxNzc6XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIElQX1RUTF9FWENFRURFRCk7XFxuIDE3ODpcXHRkcm9wOlxcbiAxNzk6XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIHJlYXNvbik7XFxuIDE4MDpcXHRcXHRyZXR1cm4gTkVUX1JYX0RST1A7XFxuIDE4MTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjE3LjE5MTkyNTAyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTY0OTk2NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggSVB2NiBhbmQgbmV0d29ya2luZyBpbnRlcm5hbHM6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgU291cmNlIFJvdXRpbmcgSGVhZGVyIFJlY2VpdmVyKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB0aGUgYGlwdjZfc3JoX3JjdmAgZnVuY3Rpb24uIFRoYXQncyBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgcmlnaHQ/IFllYWgsIHRoYXQncyB3aGVyZSB0aGUgc291cmNlIHJvdXRpbmcgaGVhZGVyIGhhbmRsaW5nIGxvZ2ljIGxpdmVzLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGV4YWN0bHkgaG93IHRoZSBrZXJuZWwgcHJvY2Vzc2VzIHRoZXNlIHNvdXJjZSByb3V0aW5nIGhlYWRlcnMgd2hlbiByZWNlaXZpbmcgYW4gSVB2NiBwYWNrZXQuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIHZhcmlvdXMgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgbG9vcGluZyBwcm9ibGVtcywgYW5kIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGV4dGVuc2lvbiBoZWFkZXJzLiBHb3R0YSBtYWtlIHN1cmUgSSdtIHNvbGlkIG9uIHRoZSBkZXRhaWxzLCBib3RoIGZvciBteSBjdXJyZW50IHRhc2sgYW5kIGdlbmVyYWxseS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGxhdGVzdCBpbXBsZW1lbnRhdGlvbiBpcyBkb2luZzsgaXQgaGFzIHByb2JhYmx5IGJlZW4gb3B0aW1pemVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBsb29rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoxOS4zNTY5MjU1NzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTU6XFx0XFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdGlmIChza2JfZHN0KHNrYiktXFx1MDAzZWVycm9yKSB7XFxuIDQ1ODpcXHRcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNDU5OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDYwOlxcdFxcdH1cXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0aWYgKHNrYl9kc3RfZGV2KHNrYiktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0xPT1BCQUNLKSB7XFxuIDQ2MzpcXHRcXHRcXHRpZiAoaXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0IFxcdTAwM2M9IDEpIHtcXG4gNDY0OlxcdFxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNDY1OlxcdFxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELFxcbiA0NjY6XFx0XFx0XFx0XFx0XFx0ICAgIElDTVBWNl9FWENfSE9QTElNSVQsIDApO1xcbiA0Njc6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiA0Njg6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiA0Njk6XFx0XFx0XFx0fVxcbiA0NzA6XFx0XFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlaG9wX2xpbWl0LS07XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIDQ3MzpcXHRcXHRcXHRnb3RvIGxvb3BlZF9iYWNrO1xcbiA0NzQ6XFx0XFx0fVxcbiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNDc3OlxcdFxcbiA0Nzg6XFx0XFx0cmV0dXJuIC0xO1xcbiA0Nzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoxOS4zNTcwMjk5NDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5Mjg0MzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBSZWNlcHRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcmVjZXB0aW9uIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YgU291cmNlIFJvdXRpbmcgSGVhZGVyIChTUkgpIGFuZCBSb3V0aW5nIEhlYWRlciAoVHlwZSAwKSBwcm9jZXNzaW5nLCBzbyBJJ2xsIHN0YXJ0IGJ5IHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBpcHY2X3JwbF9zcmhfcmN2YCBhbmQgYGlwdjZfcnRoZHJfcmN2YCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGVzZSBhcmUgcmVjZWl2ZWQgYW5kIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0byBzZWN1cml0eSwgZWRnZSBjYXNlIGhhbmRsaW5nLCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyAtIHRoZSB1c3VhbCBhcmVhcyBvZiBjb25jZXJuLCByZWFsbHkuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzUzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoyMS4zNDk4NzgxNjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTU6XFx0XFxuIDYxNjpcXHRcXHRpZiAoc2tiX2RzdChza2IpLVxcdTAwM2VlcnJvcikge1xcbiA2MTc6XFx0XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDYxODpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDYxOTpcXHRcXHR9XFxuIDYyMDpcXHRcXG4gNjIxOlxcdFxcdGlmIChza2JfZHN0X2Rldihza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSykge1xcbiA2MjI6XFx0XFx0XFx0aWYgKGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdCBcXHUwMDNjPSAxKSB7XFxuIDYyMzpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDYyNDpcXHRcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCxcXG4gNjI1OlxcdFxcdFxcdFxcdFxcdCAgICBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4gNjI2OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gNjI3OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNjI4OlxcdFxcdFxcdH1cXG4gNjI5OlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA2MzA6XFx0XFxuIDYzMTpcXHRcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbiA2MzI6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gNjMzOlxcdFxcdH1cXG4gNjM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoyMS4zNDk5ODU0OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA2NzAzMjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgUm91dGluZyBIZWFkZXJzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IElQdjYgcm91dGluZyBoZWFkZXJzIGFyZSBoYW5kbGVkLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHJldmlzaXQgYGlwdjZfcnRoZHJfcmN2YCB3aXRoaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBrZXJuZWwgcHJvY2Vzc2VzIGluY29taW5nIHBhY2tldHMgdGhhdCB1dGlsaXplIHJvdXRpbmcgaGVhZGVycywgc28gaXQncyB0aGUgcGVyZmVjdCBwbGFjZSB0byBzdGFydC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHJvdXRpbmcgaGVhZGVycyBhbmQgdGhlaXIgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIG5lY2Vzc2FyeSBzYW5pdHkgY2hlY2tzIGFuZCBwcm9jZXNzaW5nIHRvIHByZXZlbnQgcm91dGluZyBsb29wcyBhbmQgYXR0YWNrcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuaXR0eS1ncml0dHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMjoyMzoyNS40MTcwMjAzMDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTczNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxMDpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDgxMTpcXHRcXHR9XFxuIDgxMjpcXHRcXG4gODEzOlxcdFxcdGlmIChza2JfZHN0X2Rldihza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSykge1xcbiA4MTQ6XFx0XFx0XFx0aWYgKGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdCBcXHUwMDNjPSAxKSB7XFxuIDgxNTpcXHRcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDgxNjpcXHRcXHRcXHRcXHRpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCxcXG4gODE3OlxcdFxcdFxcdFxcdFxcdCAgICAwKTtcXG4gODE4OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBfVFRMX0VYQ0VFREVEKTtcXG4gODE5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gODIwOlxcdFxcdFxcdH1cXG4gODIxOlxcdFxcdFxcdGlwdjZfaGRyKHNrYiktXFx1MDAzZWhvcF9saW1pdC0tO1xcbiA4MjI6XFx0XFx0XFx0Z290byBsb29wZWRfYmFjaztcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0c2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xcbiA4MjY6XFx0XFx0ZHN0X2lucHV0KHNrYik7XFxuIDgyNzpcXHRcXHRyZXR1cm4gLTE7XFxuIDgyODpcXHRcXG4gODI5OlxcdHVua25vd25fcmg6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjI1LjQxNzExOTQxNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzgxMjk2MTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgRm9yd2FyZGluZyoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCBJUHY2IGZvcndhcmRpbmcgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgb3V0cHV0IHNpZGUgb2YgdGhpbmdzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG15IGludmVzdGlnYXRpb24sIEknbSBwcmV0dHkgc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBmb3IgSVB2NiBvdXRwdXQgcHJvY2Vzc2luZyBpcyBnb2luZyB0byBiZSBpbiBgbmV0L2lwdjYvaXA2X291dHB1dC5jYC4gTGV0J3MgY29uZmlybSB0aGF0IGBpcDZfZm9yd2FyZGAgZnVuY3Rpb24gaXMgdGhlcmUsIGFuZCB0aGVuIGRpZyBpbnRvIGl0IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgbWFrZXMgZm9yd2FyZGluZyBkZWNpc2lvbnMgYW5kIGhhbmRsZXMgdGhlIG1lY2hhbmljcyBvZiBzZW5kaW5nIG91dCBJUHY2IHBhY2tldHMuIFRpbWUgdG8gb3BlbiB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgYXQgdGhlIHBhY2tldCBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjI3LjE5ODQxOTA1OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2X291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTcxOlxcdFxcdH1cXG4gNTcyOlxcdFxcbiA1NzM6XFx0XFx0LypcXG4gNTc0OlxcdFxcdCAqXFx0Y2hlY2sgYW5kIGRlY3JlbWVudCB0dGxcXG4gNTc1OlxcdFxcdCAqL1xcbiA1NzY6XFx0XFx0aWYgKGhkci1cXHUwMDNlaG9wX2xpbWl0IFxcdTAwM2M9IDEpIHtcXG4gNTc3OlxcdFxcdFxcdGljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULCAwKTtcXG4gNTc4OlxcdFxcdFxcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcXG4gNTc5OlxcdFxcbiA1ODA6XFx0XFx0XFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpO1xcbiA1ODE6XFx0XFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuIDU4MjpcXHRcXHR9XFxuIDU4MzpcXHRcXG4gNTg0OlxcdFxcdC8qIFhYWDogaWRldi1cXHUwMDNlY25mLnByb3h5X25kcD8gKi9cXG4gNTg1OlxcdFxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2Vwcm94eV9uZHApIFxcdTAwMjZcXHUwMDI2XFxuIDU4NjpcXHRcXHQgICAgcG5laWdoX2xvb2t1cChcXHUwMDI2bmRfdGJsLCBuZXQsIFxcdTAwMjZoZHItXFx1MDAzZWRhZGRyLCBza2ItXFx1MDAzZWRldikpIHtcXG4gNTg3OlxcdFxcdFxcdGludCBwcm94aWVkID0gaXA2X2ZvcndhcmRfcHJveHlfY2hlY2soc2tiKTtcXG4gNTg4OlxcdFxcbiA1ODk6XFx0XFx0XFx0aGRyID0gaXB2Nl9oZHIoc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTI6MjM6MjcuMTk4NTM5MDg4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NjUzMDU4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIHNvbGVseSBvbiBpbXByb3ZpbmcgdGhlIGdyYW51bGFyaXR5IG9mIG91ciBTS0IgZHJvcCByZWFzb24gdHJhY2tpbmcuIFRoZSBjb3JlIG9mIGl0LCBhcyBJIHNlZSBpdCwgYm9pbHMgZG93biB0byB0aGVzZSBrZXkgY2hhbmdlczpcblxuMS4gIFdlJ3JlIGludHJvZHVjaW5nIGEgbmV3IGRyb3AgcmVhc29uLCBgU0tCX0RST1BfUkVBU09OX0lQX1RUTF9FWENFRURFRGAsIGluIGBkcm9wcmVhc29uLWNvcmUuaGAuIFRoYXQncyBqdXN0IGFuIGVudW0gdmFsdWUsIGEgbmV3IGNsYXNzaWZpY2F0aW9uLlxuMi4gIFdlJ3JlIHVwZGF0aW5nIGBpcF9mb3J3YXJkKClgIGFuZCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgaXB2Nl9zcmhfcmN2KClgLCBgaXB2Nl9ycGxfc3JoX3JjdigpYCwgYW5kIGBpcHY2X3J0aGRyX3JjdigpYCB0byB1c2UgdGhpcyBuZXcgcmVhc29uIHdoZW4gZnJlZWluZyBTS0JzIHRoYXQgaGF2ZSBoYWQgdGhlaXIgVFRMIGV4cGlyZS5cbjMuICBUaGUgY2hhbmdlIGFsc28gaW52b2x2ZXMgY2hhbmdpbmcgYGlwNl9mb3J3YXJkKClgIHRvIGFsc28gdXNlIHRoZSBuZXdseSBkZWZpbmVkIGRyb3AgcmVhc29uIHZhbHVlLlxuXG5Fc3NlbnRpYWxseSwgYWxsIG9mIHRoaXMgaXMgYWJvdXQgcHJvdmlkaW5nIG1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdGhlIGB0cmFjZV9rZnJlZV9za2JgIHRyYWNlcG9pbnQsIHdoaWNoIGlzIGtleSBmb3IgbmV0d29yayBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGluZGljYXRlcyB0aGF0IHRoaXMgcGF0Y2ggcGFzc2VzIHRoZSBkcm9wIHJlYXNvbiB0byBga2ZyZWVfc2tiX3JlYXNvbigpYCAob3IgYFNLQl9EUl9TRVRgKSBmdW5jdGlvbiwgd2hpY2ggaW4gdHVybiBwYXNzZXMgaXQgZGlyZWN0bHkgdG8gYHRyYWNlX2tmcmVlX3NrYmAuIENydWNpYWxseSwgdGhpcyBkb2Vzbid0IG1vZGlmeSBhbnkgY29udHJvbCBmbG93LCBsb2dpYywgZXJyb3IgaGFuZGxpbmcsIHN0YXRlLCBvciBkYXRhIHN0cnVjdHVyZXMuIEl0J3MgcHVyZWx5IGFib3V0IHByb3ZpZGluZyAqbWV0YWRhdGEqIHRvIGFuIGV4aXN0aW5nIHRyYWNlcG9pbnQuIFRoaXMgaXMgZXhhY3RseSB3aGF0IGlzIG1lbnRpb25lZCB1bmRlciBcIlB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgLi4uIG9yIHRyYWNlcG9pbnRzIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXNcIiBpbiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuXG5cbkdpdmVuIHRoZSBlbXB0eSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIGZpZWxkcywgYW5kIGNvbnNpZGVyaW5nIHRoYXQgdGhpcyBwYXRjaCBkb2VzIG5vdGhpbmcgbW9yZSB0aGFuIGNoYW5nZSB0aGUgY2xhc3NpZmljYXRpb24gb2YgZXhpc3RpbmcgdHJhY2Vwb2ludCBkYXRhLCBpdCdzIHByZXR0eSBjbGVhciB0byBtZSB0aGF0IHRoaXMgY2hhbmdlIGlzICpub3QqIHdvcnRoIGZ1enppbmcuIEkgY2FuIGNvbmZpZGVudGx5IHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGlzIHB1cmVseSBhYm91dCB0aGUgdHJhY2Vwb2ludCwgc28gaXQgc2hvdWxkbid0IGFmZmVjdCBmdXp6aW5nIGVmZm9ydHMuIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDgyLCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjMyLjY2Mzg0ODU0MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhIG5ldyBza2IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIGV4aXN0aW5nIHNrYiBkcm9wIGNhbGxzIGluIElQdjQvSVB2NiBwYWNrZXQgZm9yd2FyZGluZyBhbmQgZXh0ZW5zaW9uIGhlYWRlciBwcm9jZXNzaW5nIHRvIHJlY29yZCB0aGlzIG5ldyByZWFzb24uIFRoaXMgb25seSBhZmZlY3RzIHRoZSBkcm9wIHJlYXNvbiBtZXRhZGF0YSBwYXNzZWQgdG8gdGhlIHRyYWNlX2tmcmVlX3NrYiB0cmFjZXBvaW50IHdpdGhvdXQgYWx0ZXJpbmcgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgaW50cm9kdWNlcyBhIG5ldyBza2IgZHJvcCByZWFzb24gKFNLQl9EUk9QX1JFQVNPTl9JUF9UVExfRVhDRUVERUQpIGFuZCB1cGRhdGVzIGV4aXN0aW5nIHNrYiBkcm9wIGNhbGxzIGluIElQdjQvSVB2NiBwYWNrZXQgZm9yd2FyZGluZyBhbmQgZXh0ZW5zaW9uIGhlYWRlciBwcm9jZXNzaW5nIHRvIHJlY29yZCB0aGlzIG5ldyByZWFzb24uIFRoaXMgb25seSBhZmZlY3RzIHRoZSBkcm9wIHJlYXNvbiBtZXRhZGF0YSBwYXNzZWQgdG8gdGhlIHRyYWNlX2tmcmVlX3NrYiB0cmFjZXBvaW50IHdpdGhvdXQgYWx0ZXJpbmcgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEyOjIzOjMyLjY2Mzg4NjcyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9m7jx[1] Phase: Running StartedAt: 2026-09-05 12:23:43 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9m7jx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-05 12:23:43 +0000 UTC FinishedAt: 2026-09-05 12:23:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}