Name: series-workflowgdcsv Phase: Failed StartedAt: 2026-08-10 09:42:08 +0000 UTC FinishedAt: 2026-08-10 09:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgdcsv[0] Phase: Succeeded StartedAt: 2026-08-10 09:42:08 +0000 UTC FinishedAt: 2026-08-10 09:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgdcsv[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 09:42:08 +0000 UTC FinishedAt: 2026-08-10 09:45:37 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIEFzIGEgcmVzdWx0LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEwYTk4OWUwMDYyMGJjODY5NjJmMmZmOWU3ZTMzZWZiZDMzYjliMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0MzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xuaW5kZXggOGZhZTkwMTAxNjUzZi4uNzc1ZGM1YzJkN2E2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbkBAIC0zOTgsNyAmIzQzOzM5OCw2IEBAIGludCBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCB1cGRhdGVfbWV0aG9kLCBydGNfYXR0ci1cdTAwM2Vmd19nZW5fd3FlKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX2luZGV4X21vZGUsIHJ0Y19hdHRyLVx1MDAzZXVwZGF0ZV9pbmRleF9tb2RlKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgYWNjZXNzX2luZGV4X21vZGUsIHJ0Y19hdHRyLVx1MDAzZWFjY2Vzc19pbmRleF9tb2RlKTtcbi1cdE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX2hhc2hfZGVmaW5lciwgcnRjX2F0dHItXHUwMDNlbnVtX2hhc2hfZGVmaW5lcik7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19kZXB0aCwgcnRjX2F0dHItXHUwMDNlbG9nX2RlcHRoKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbG9nX2hhc2hfc2l6ZSwgcnRjX2F0dHItXHUwMDNlbG9nX3NpemUpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCB0YWJsZV90eXBlLCBydGNfYXR0ci1cdTAwM2V0YWJsZV90eXBlKTtcbkBAIC02MTEsOSAmIzQzOzYxMCwxMSBAQCBpbnQgbWx4NWh3c19jbWRfc3RjX21vZGlmeShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcbiBcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgc2l6ZW9mKG91dCkpO1xuIFx0aWYgKHJldClcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtGYWlsZWQgdG8gbW9kaWZ5IFNUQyBGVyBhY3Rpb25fdHlwZSAlZFxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICBzdGNfYXR0ci1cdTAwM2VhY3Rpb25fdHlwZSk7XG4tXG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0ZhaWxlZCB0byBtb2RpZnkgU1RDIGFjdGlvbl90eXBlICVkLCBlcnIgJWQsIHN5bmRyb21lIDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIHN0Y19hdHRyLVx1MDAzZWFjdGlvbl90eXBlLCByZXQsXG4mIzQzO1x0XHRcdCAgICAgIE1MWDVfR0VUKGdlbmVyYWxfb2JqX291dF9jbWRfaGRyLFxuJiM0MztcdFx0XHRcdCAgICAgICBvdXQsIHN5bmRyb21lKSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMTgxLDEyICYjNDM7MTE4Miw2IEBAIGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIFx0XHRcdFx0XHRcdGNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLm1lcmdlZF9lc3dpdGNoKTtcbiBcdH1cbiBcbi1cdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xcblwmIzM0Oyk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0c25wcmludGYoY2Fwcy1cdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVx1MDAzZWZ3X3ZlciksIFwmIzM0OyVkLiVkLiVkXCYjMzQ7LFxuIFx0XHQgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuaW5kZXggYWVkMDA5YWVjNGZlOC4uZjBjM2EyYmRhMGM3MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuQEAgLTM0NCw2ICYjNDM7MzQ0LDM2IEBAIGh3c19zZW5kX2VuZ2luZV91cGRhdGVfcnVsZV9yZXNpemUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3N0YXR1c190b19zdHJpbmcoZW51bSBtbHg1aHdzX3J1bGVfc3RhdHVzIHN0YXR1cylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzKSB7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HOiByZXR1cm4gXCYjMzQ7Q1JFQVRJTkdcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HOiByZXR1cm4gXCYjMzQ7VVBEQVRJTkdcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HOiByZXR1cm4gXCYjMzQ7REVMRVRJTkdcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0ZBSUxJTkc6IHJldHVybiBcJiMzNDtGQUlMSU5HXCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6IHJldHVybiBcJiMzNDtOQVwmIzM0OztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nKHU4IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChzdGF0ZSkge1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9JRExFOiByZXR1cm4gXCYjMzQ7SURMRVwmIzM0OztcbiYjNDM7XHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORzogcmV0dXJuIFwmIzM0O1dSSVRJTkdcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HOiByZXR1cm4gXCYjMzQ7REVMRVRJTkdcJiMzNDs7XG4mIzQzO1x0ZGVmYXVsdDogcmV0dXJuIFwmIzM0O1VOS05PV05cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcodTggc3luZHJvbWUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHN5bmRyb21lKSB7XG4mIzQzO1x0Y2FzZSAxOiByZXR1cm4gXCYjMzQ7U0VUX0ZMT1dfRkFJTFwmIzM0OztcbiYjNDM7XHRjYXNlIDI6IHJldHVybiBcJiMzNDtESVNBQkxFX0ZMT1dfRkFJTFwmIzM0OztcbiYjNDM7XHRkZWZhdWx0OiByZXR1cm4gXCYjMzQ7VU5LTk9XTlwmIzM0OztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG1seDVod3Nfc2VuZF9yaW5nX3ByaXYgKnByaXYsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG5AQCAtMzUyLDYgJiM0MzszODIsNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gcHJpdi1cdTAwM2VydWxlLVx1MDAzZW1hdGNoZXItXHUwMDNldGJsLVx1MDAzZWN0eDtcbiBcdHUzMiBvcGNvZGUgPSBjcWUgPyBnZXRfY3FlX29wY29kZShjcWUpIDogMDtcbiBcdHN0cnVjdCBtbHg1aHdzX3J1bGUgKnJ1bGUgPSBwcml2LVx1MDAzZXJ1bGU7XG4mIzQzO1x0dTggc3luZHJvbWU7XG4gXG4gXHQvKiBJZiBzb21ldGhpbmcgYmFkIGhhcHBlbnMgYW5kIGxvdHMgb2YgcnVsZXMgYXJlIGZhaWxpbmcsIHdlIGRvbiYjMzk7dFxuIFx0ICogd2FudCB0byBwb2xsdXRlIGRtZXNnLiBQcmludCBvbmx5IHRoZSBmaXJzdCBiYWQgY3FlIHBlciBlbmdpbmUsXG5AQCAtMzY0LDI2ICYjNDM7Mzk1LDE3IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXG4gXHRpZiAobWx4NWh3c19ydWxlX21vdmVfaW5fcHJvZ3Jlc3MocnVsZSkpXG4gXHRcdG1seDVod3NfZXJyKGN0eCxcbi1cdFx0XHQgICAgXCYjMzQ7LS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzLCB3cWVzIGxlZnQgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBcJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiBtb3ZpbmcgcnVsZTogcGhhc2UgJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORyA/IFwmIzM0O1dSSVRJTkdcJiMzNDsgOlxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfREVMRVRJTkcgPyBcJiMzNDtERUxFVElOR1wmIzM0OyA6XG4tXHRcdFx0ICAgIFwmIzM0O1VOS05PV05cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nXG4mIzQzO1x0XHRcdFx0KHJ1bGUtXHUwMDNlcmVzaXplX2luZm8tXHUwMDNlc3RhdGUpLFxuJiM0MztcdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSxcbiBcdFx0XHQgICAgcnVsZS1cdTAwM2VwZW5kaW5nX3dxZXMpO1xuIFx0ZWxzZVxuIFx0XHRtbHg1aHdzX2VycihjdHgsXG4gXHRcdFx0ICAgIFwmIzM0Oy0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uICVzICglZCksIHdxZXMgbGVmdCAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORyA/IFwmIzM0O0NSRUFUSU5HXCYjMzQ7IDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORyA/IFwmIzM0O0RFTEVUSU5HXCYjMzQ7IDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HID8gXCYjMzQ7RkFJTElOR1wmIzM0OyA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkcgPyBcJiMzNDtVUERBVElOR1wmIzM0OyA6IFwmIzM0O05BXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhydWxlLVx1MDAzZXN0YXR1cyksXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzLFxuIFx0XHRcdCAgICBydWxlLVx1MDAzZXBlbmRpbmdfd3Flcyk7XG4gXG5AQCAtNDIzLDYgJiM0Mzs0NDUsMTUgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdFx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIHN5bmRyb21lID0gMHgleFxcblwmIzM0OyxcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiBcdFx0XHQgICAgZXJyX2NxZS1cdTAwM2VzeW5kcm9tZSk7XG4mIzQzO1x0XHRtbHg1aHdzX2VycihjdHgsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0gUVBOID0gMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4mIzQzO1x0XHRcdCAgICBiZTMyX3RvX2NwdShlcnJfY3FlLVx1MDAzZXNfd3FlX29wY29kZV9xcG4pIFx1MDAyNlxuJiM0MztcdFx0XHRcdFx0MHhmZmZmZmYpO1xuJiM0MztcdFx0bWx4NWh3c19lcnIoY3R4LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIFdRRV9DTlQgPSAweCUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuJiM0MztcdFx0XHQgICAgKHUzMiliZTE2X3RvX2NwdShlcnJfY3FlLVx1MDAzZXdxZV9jb3VudGVyKSk7XG4gXHR9XG4gXG4gXHRtbHg1aHdzX2VycihjdHgsXG5AQCAtNDMzLDEzICYjNDM7NDY0LDEyIEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuIFx0XHQgICAgKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4ODAwMDAwMDApID9cbiBcdFx0ICAgIFwmIzM0O0ZBSUxVUkVcJiMzNDsgOiBcJiMzNDtTVUNDRVNTXCYjMzQ7KTtcbiYjNDM7XHQvKiBzeW5kcm9tZSBpcyBpbiB0aGUgbG93ZXIgMiBiaXRzIG9mIGJ5dGVfY250ICovXG4mIzQzO1x0c3luZHJvbWUgPSBiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAzO1xuIFx0bWx4NWh3c19lcnIoY3R4LFxuLVx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIFwmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlcyAoJXUpXFxuXCYjMzQ7LFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbi1cdFx0ICAgICgoYmUzMl90b19jcHUoY3FlLVx1MDAzZWJ5dGVfY250KSBcdTAwMjYgMHgwMDAwMDAwMykgPT0gMSkgP1xuLVx0XHQgICAgXCYjMzQ7U0VUX0ZMT1dfRkFJTFwmIzM0OyA6XG4tXHRcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4MDAwMDAwMDMpID09IDIpID9cbi1cdFx0ICAgIFwmIzM0O0RJU0FCTEVfRkxPV19GQUlMXCYjMzQ7IDogXCYjMzQ7VU5LTk9XTlwmIzM0Oyk7XG4mIzQzO1x0XHQgICAgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcoc3luZHJvbWUpLCBzeW5kcm9tZSk7XG4gXHRtbHg1aHdzX2VycihjdHgsXG4gXHRcdCAgICBcJiMzNDsgICAgcnVsZSAweCUwOGxseDogY3FlLVx1MDAzZXNvcF9kcm9wX3FwbiAgPSAweCUwOHhcXG5cJiMzNDssXG4gXHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLCBiZTMyX3RvX2NwdShjcWUtXHUwMDNlc29wX2Ryb3BfcXBuKSk7XG5AQCAtMTA5MSw4ICYjNDM7MTEyMSw2IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiBcdGlmICghbWx4NWh3c19jb250ZXh0X2J3Y19zdXBwb3J0ZWQoY3R4KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRjdHgtXHUwMDNlcXVldWVzICYjNDM7PSBid2NfcXVldWVzO1xuLVxuIFx0Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MsXG4gXHRcdFx0XHRcdFx0IGJ3Y19xdWV1ZXMpO1xuIFxuQEAgLTExMDQsNiAmIzQzOzExMzIsOCBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4gXHRpZiAoIWN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzKVxuIFx0XHRnb3RvIGVycl9sb2NrX2NsYXNzX2tleXM7XG4gXG4mIzQzO1x0Y3R4LVx1MDAzZXF1ZXVlcyAmIzQzOz0gYndjX3F1ZXVlcztcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBid2NfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7XG4gXHRcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICYjNDM7IGkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gQXMgYSByZXN1bHQsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTBhOTg5ZTAwNjIwYmM4Njk2MmYyZmY5ZTdlMzNlZmJkMzNiOWIwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDA5OjQzOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMKaW5kZXggOGZhZTkwMTAxNjUzZi4uNzc1ZGM1YzJkN2E2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jCkBAIC0zOTgsNyAmIzQzOzM5OCw2IEBAIGludCBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LAogCU1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX21ldGhvZCwgcnRjX2F0dHItJmd0O2Z3X2dlbl93cWUpOwogCU1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX2luZGV4X21vZGUsIHJ0Y19hdHRyLSZndDt1cGRhdGVfaW5kZXhfbW9kZSk7CiAJTUxYNV9TRVQocnRjLCBhdHRyLCBhY2Nlc3NfaW5kZXhfbW9kZSwgcnRjX2F0dHItJmd0O2FjY2Vzc19pbmRleF9tb2RlKTsKLQlNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLSZndDtudW1faGFzaF9kZWZpbmVyKTsKIAlNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19kZXB0aCwgcnRjX2F0dHItJmd0O2xvZ19kZXB0aCk7CiAJTUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfaGFzaF9zaXplLCBydGNfYXR0ci0mZ3Q7bG9nX3NpemUpOwogCU1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItJmd0O3RhYmxlX3R5cGUpOwpAQCAtNjExLDkgJiM0Mzs2MTAsMTEgQEAgaW50IG1seDVod3NfY21kX3N0Y19tb2RpZnkoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsCiAKIAlyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIHNpemVvZihvdXQpKTsKIAlpZiAocmV0KQotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7RmFpbGVkIHRvIG1vZGlmeSBTVEMgRlcgYWN0aW9uX3R5cGUgJWRcbiYjMzQ7LAotCQkJICAgICAgc3RjX2F0dHItJmd0O2FjdGlvbl90eXBlKTsKLQomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LAomIzQzOwkJCSAgICAgICYjMzQ7RmFpbGVkIHRvIG1vZGlmeSBTVEMgYWN0aW9uX3R5cGUgJWQsIGVyciAlZCwgc3luZHJvbWUgMHgleFxuJiMzNDssCiYjNDM7CQkJICAgICAgc3RjX2F0dHItJmd0O2FjdGlvbl90eXBlLCByZXQsCiYjNDM7CQkJICAgICAgTUxYNV9HRVQoZ2VuZXJhbF9vYmpfb3V0X2NtZF9oZHIsCiYjNDM7CQkJCSAgICAgICBvdXQsIHN5bmRyb21lKSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTE4MSwxMiAmIzQzOzExODIsNiBAQCBpbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIAkJCQkJCWNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLm1lcmdlZF9lc3dpdGNoKTsKIAl9CiAKLQlyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTsKLQlpZiAocmV0KSB7Ci0JCW1seDVfY29yZV9lcnIobWRldiwgJiMzNDtGYWlsZWQgdG8gcXVlcnkgZGV2aWNlIGF0dHJpYnV0ZXNcbiYjMzQ7KTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJc25wcmludGYoY2Fwcy0mZ3Q7ZndfdmVyLCBzaXplb2YoY2Fwcy0mZ3Q7ZndfdmVyKSwgJiMzNDslZC4lZC4lZCYjMzQ7LAogCQkgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMKaW5kZXggYWVkMDA5YWVjNGZlOC4uZjBjM2EyYmRhMGM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMKQEAgLTM0NCw2ICYjNDM7MzQ0LDM2IEBAIGh3c19zZW5kX2VuZ2luZV91cGRhdGVfcnVsZV9yZXNpemUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLAogCX0KIH0KIAomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nKGVudW0gbWx4NWh3c19ydWxlX3N0YXR1cyBzdGF0dXMpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHN0YXR1cykgewomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkc6IHJldHVybiAmIzM0O0NSRUFUSU5HJiMzNDs7CiYjNDM7CWNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORzogcmV0dXJuICYjMzQ7VVBEQVRJTkcmIzM0OzsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HOiByZXR1cm4gJiMzNDtERUxFVElORyYjMzQ7OwomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORzogcmV0dXJuICYjMzQ7RkFJTElORyYjMzQ7OwomIzQzOwlkZWZhdWx0OiByZXR1cm4gJiMzNDtOQSYjMzQ7OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nKHU4IHN0YXRlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChzdGF0ZSkgewomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfSURMRTogcmV0dXJuICYjMzQ7SURMRSYjMzQ7OwomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORzogcmV0dXJuICYjMzQ7V1JJVElORyYjMzQ7OwomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfREVMRVRJTkc6IHJldHVybiAmIzM0O0RFTEVUSU5HJiMzNDs7CiYjNDM7CWRlZmF1bHQ6IHJldHVybiAmIzM0O1VOS05PV04mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcodTggc3luZHJvbWUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHN5bmRyb21lKSB7CiYjNDM7CWNhc2UgMTogcmV0dXJuICYjMzQ7U0VUX0ZMT1dfRkFJTCYjMzQ7OwomIzQzOwljYXNlIDI6IHJldHVybiAmIzM0O0RJU0FCTEVfRkxPV19GQUlMJiMzNDs7CiYjNDM7CWRlZmF1bHQ6IHJldHVybiAmIzM0O1VOS05PV04mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsCiAJCQkJCSAgIHN0cnVjdCBtbHg1aHdzX3NlbmRfcmluZ19wcml2ICpwcml2LAogCQkJCQkgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKQpAQCAtMzUyLDYgJiM0MzszODIsNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLAogCXN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCA9IHByaXYtJmd0O3J1bGUtJmd0O21hdGNoZXItJmd0O3RibC0mZ3Q7Y3R4OwogCXUzMiBvcGNvZGUgPSBjcWUgPyBnZXRfY3FlX29wY29kZShjcWUpIDogMDsKIAlzdHJ1Y3QgbWx4NWh3c19ydWxlICpydWxlID0gcHJpdi0mZ3Q7cnVsZTsKJiM0MzsJdTggc3luZHJvbWU7CiAKIAkvKiBJZiBzb21ldGhpbmcgYmFkIGhhcHBlbnMgYW5kIGxvdHMgb2YgcnVsZXMgYXJlIGZhaWxpbmcsIHdlIGRvbiYjMzk7dAogCSAqIHdhbnQgdG8gcG9sbHV0ZSBkbWVzZy4gUHJpbnQgb25seSB0aGUgZmlyc3QgYmFkIGNxZSBwZXIgZW5naW5lLApAQCAtMzY0LDI2ICYjNDM7Mzk1LDE3IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsCiAKIAlpZiAobWx4NWh3c19ydWxlX21vdmVfaW5fcHJvZ3Jlc3MocnVsZSkpCiAJCW1seDVod3NfZXJyKGN0eCwKLQkJCSAgICAmIzM0Oy0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcywgd3FlcyBsZWZ0ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiBtb3ZpbmcgcnVsZTogcGhhc2UgJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXG4mIzM0OywKIAkJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAotCQkJICAgIHJ1bGUtJmd0O3Jlc2l6ZV9pbmZvLSZndDtzdGF0ZSA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORyA/ICYjMzQ7V1JJVElORyYjMzQ7IDoKLQkJCSAgICBydWxlLSZndDtyZXNpemVfaW5mby0mZ3Q7c3RhdGUgPT0KLQkJCSAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HID8gJiMzNDtERUxFVElORyYjMzQ7IDoKLQkJCSAgICAmIzM0O1VOS05PV04mIzM0OywKJiM0MzsJCQkgICAgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZwomIzQzOwkJCQkocnVsZS0mZ3Q7cmVzaXplX2luZm8tJmd0O3N0YXRlKSwKJiM0MzsJCQkgICAgcnVsZS0mZ3Q7cmVzaXplX2luZm8tJmd0O3N0YXRlLAogCQkJICAgIHJ1bGUtJmd0O3BlbmRpbmdfd3Flcyk7CiAJZWxzZQogCQltbHg1aHdzX2VycihjdHgsCiAJCQkgICAgJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcbiYjMzQ7LAogCQkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCi0JCQkgICAgcnVsZS0mZ3Q7c3RhdHVzID09Ci0JCQkgICAgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORyA/ICYjMzQ7Q1JFQVRJTkcmIzM0OyA6Ci0JCQkgICAgcnVsZS0mZ3Q7c3RhdHVzID09Ci0JCQkgICAgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORyA/ICYjMzQ7REVMRVRJTkcmIzM0OyA6Ci0JCQkgICAgcnVsZS0mZ3Q7c3RhdHVzID09Ci0JCQkgICAgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HID8gJiMzNDtGQUlMSU5HJiMzNDsgOgotCQkJICAgIHJ1bGUtJmd0O3N0YXR1cyA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkcgPyAmIzM0O1VQREFUSU5HJiMzNDsgOiAmIzM0O05BJiMzNDssCiYjNDM7CQkJICAgIGh3c19ydWxlX3N0YXR1c190b19zdHJpbmcocnVsZS0mZ3Q7c3RhdHVzKSwKIAkJCSAgICBydWxlLSZndDtzdGF0dXMsCiAJCQkgICAgcnVsZS0mZ3Q7cGVuZGluZ193cWVzKTsKIApAQCAtNDIzLDYgJiM0Mzs0NDUsMTUgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSwKIAkJCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBzeW5kcm9tZSA9IDB4JXhcbiYjMzQ7LAogCQkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCiAJCQkgICAgZXJyX2NxZS0mZ3Q7c3luZHJvbWUpOwomIzQzOwkJbWx4NWh3c19lcnIoY3R4LAomIzQzOwkJCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBRUE4gPSAweCV4XG4mIzM0OywKJiM0MzsJCQkgICAgSFdTX1BUUl9UT19JRChydWxlKSwKJiM0MzsJCQkgICAgYmUzMl90b19jcHUoZXJyX2NxZS0mZ3Q7c193cWVfb3Bjb2RlX3FwbikgJmFtcDsKJiM0MzsJCQkJCTB4ZmZmZmZmKTsKJiM0MzsJCW1seDVod3NfZXJyKGN0eCwKJiM0MzsJCQkgICAgJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0gV1FFX0NOVCA9IDB4JTA0eFxuJiMzNDssCiYjNDM7CQkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCiYjNDM7CQkJICAgICh1MzIpYmUxNl90b19jcHUoZXJyX2NxZS0mZ3Q7d3FlX2NvdW50ZXIpKTsKIAl9CiAKIAltbHg1aHdzX2VycihjdHgsCkBAIC00MzMsMTMgJiM0Mzs0NjQsMTIgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSwKIAkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCiAJCSAgICAoYmUzMl90b19jcHUoY3FlLSZndDtieXRlX2NudCkgJmFtcDsgMHg4MDAwMDAwMCkgPwogCQkgICAgJiMzNDtGQUlMVVJFJiMzNDsgOiAmIzM0O1NVQ0NFU1MmIzM0Oyk7CiYjNDM7CS8qIHN5bmRyb21lIGlzIGluIHRoZSBsb3dlciAyIGJpdHMgb2YgYnl0ZV9jbnQgKi8KJiM0MzsJc3luZHJvbWUgPSBiZTMyX3RvX2NwdShjcWUtJmd0O2J5dGVfY250KSAmYW1wOyAzOwogCW1seDVod3NfZXJyKGN0eCwKLQkJICAgICYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzXG4mIzM0OywKJiM0MzsJCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlcyAoJXUpXG4mIzM0OywKIAkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCi0JCSAgICAoKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7Ynl0ZV9jbnQpICZhbXA7IDB4MDAwMDAwMDMpID09IDEpID8KLQkJICAgICYjMzQ7U0VUX0ZMT1dfRkFJTCYjMzQ7IDoKLQkJICAgICgoYmUzMl90b19jcHUoY3FlLSZndDtieXRlX2NudCkgJmFtcDsgMHgwMDAwMDAwMykgPT0gMikgPwotCQkgICAgJiMzNDtESVNBQkxFX0ZMT1dfRkFJTCYjMzQ7IDogJiMzNDtVTktOT1dOJiMzNDspOwomIzQzOwkJICAgIGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHN5bmRyb21lKSwgc3luZHJvbWUpOwogCW1seDVod3NfZXJyKGN0eCwKIAkJICAgICYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6IGNxZS0mZ3Q7c29wX2Ryb3BfcXBuICA9IDB4JTA4eFxuJiMzNDssCiAJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLCBiZTMyX3RvX2NwdShjcWUtJmd0O3NvcF9kcm9wX3FwbikpOwpAQCAtMTA5MSw4ICYjNDM7MTEyMSw2IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCkKIAlpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpCiAJCXJldHVybiAwOwogCi0JY3R4LSZndDtxdWV1ZXMgJiM0Mzs9IGJ3Y19xdWV1ZXM7Ci0KIAljdHgtJmd0O2J3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtJmd0O2J3Y19zZW5kX3F1ZXVlX2xvY2tzLAogCQkJCQkJIGJ3Y19xdWV1ZXMpOwogCkBAIC0xMTA0LDYgJiM0MzsxMTMyLDggQEAgc3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KQogCWlmICghY3R4LSZndDtid2NfbG9ja19jbGFzc19rZXlzKQogCQlnb3RvIGVycl9sb2NrX2NsYXNzX2tleXM7CiAKJiM0MzsJY3R4LSZndDtxdWV1ZXMgJiM0Mzs9IGJ3Y19xdWV1ZXM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGJ3Y19xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiAJCW11dGV4X2luaXQoJmFtcDtjdHgtJmd0O2J3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTsKIAkJbG9ja2RlcF9yZWdpc3Rlcl9rZXkoY3R4LSZndDtid2NfbG9ja19jbGFzc19rZXlzICYjNDM7IGkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTAyCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBNZWxsYW5veCBtbHg1IEhXUyBDb21tYW5kIGFuZCBTZW5kIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBtbHg1YCBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBgaHdzYCAoSGFyZHdhcmUgU3RlZXJpbmcpIHN1Yi1jb21wb25lbnRzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSYjMzk7cyBhIG1peCBvZiBjbGVhbi11cCBhbmQgYnVnIGZpeGVzLCB3aGljaCBpcyB0eXBpY2FsIGZvciB0aGVzZSBraW5kcyBvZiBsb3ctbGV2ZWwgZHJpdmVyIHVwZGF0ZXMuCgpGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBjbWQuY2AgY2hhbmdlcy4gSSBzZWUgc29tZSBtb2RpZmljYXRpb25zIGluIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYCwgYnV0IEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IGNvbmNlcm5lZCwgcmVtb3ZpbmcgYE1MWDVfU0VUYCBoZXJlIGFuZCB0aGVyZSBpcyBub3QgbmV3IGFuZCB1bnVzdWFsLiBUaGVuLCBpbiBgbWx4NWh3c19jbWRfc3RjX21vZGlmeWAsIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZGluZyBtb3JlIGRldGFpbCB0byB0aGUgZXJyb3IgbG9ncyB3aGljaCBpcyBhbHdheXMgZ29vZCBmb3IgZGVidWdnaW5nLgoKVGhlIG1vc3QgaW50ZXJlc3RpbmcgY2hhbmdlLCBhbmQgdGhlIG9uZSB0aGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLCBpcyB0aGUgcmVtb3ZhbCBvZiBhIGBtbHg1X2NtZF9leGVjYCBjYWxsIGFuZCBpdHMgYXNzb2NpYXRlZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gYG1seDVod3NfY21kX3F1ZXJ5X2NhcHNgLiBUaGlzIGlzIHVuZXhwZWN0ZWQhIEl0IGltcGxpZXMgYSByZWZhY3RvcmluZyBvciBvcHRpbWl6YXRpb24gb2YgaG93IGNhcGFiaWxpdGllcyBhcmUgcXVlcmllZC4gSXQmIzM5O3Mgbm90IGEgY29tbW9uIG9jY3VycmVuY2UgdG8ganVzdCAqcmVtb3ZlKiBhIGNvbW1hbmQgZXhlY3V0aW9uLCBzbyBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBxdWVyeWluZyBjYXBzIG5vdy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGRpdmluZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy4KCk5vdywgc3dpdGNoaW5nIGdlYXJzIHRvIGBzZW5kLmNgLCB0aGluZ3MgYXJlIGEgYml0IG1vcmUgc3RyYWlnaHRmb3J3YXJkLiBXZSYjMzk7dmUgZ290IHRoZSBhZGRpdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGh3c19ydWxlX3N0YXR1c190b19zdHJpbmdgLCBgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZ2AsIGFuZCBgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmdgLiBUaGlzIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQgZm9yIGxvZ2dpbmcsIG1ha2luZyBpdCBlYXNpZXIgdG8gZGVjaXBoZXIgZXJyb3IgY29kZXMgYW5kIHN0YXRlcyBpbiB0aGUgYGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZWAgZnVuY3Rpb24uCgpJIHNlZSBhIG1vcmUgc3RhbmRhcmQgYnVnIGZpeCBhcyB3ZWxsLCBzcGVjaWZpY2FsbHkgbW92aW5nIGBjdHgtJmd0O3F1ZXVlcyAmIzQzOz0gYndjX3F1ZXVlcztgIGluIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgLiBUaGlzIGlzIGEgcG90ZW50aWFsIG51bGwtcG9pbnRlciBpc3N1ZSB0aGF0IEkmIzM5O3ZlIHNlZW4gYmVmb3JlLCBpbmNyZW1lbnRpbmcgYSBjb3VudCAqYmVmb3JlKiBhbGxvY2F0aW9uIGNhbiBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBpZiBhbGxvY2F0aW9uIGZhaWxzLgoKQmFjayB0byBgY21kLmNgIGFuZCB0aGlzIHJlbW92ZWQgYG1seDVfY21kX2V4ZWNgIGNhbGwuIExldCYjMzk7cyBzZWUuLi5JIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IGhlcmUuLi4gYWgsIG9rYXksIEkgY2FuIHNlZSB0aGUgZGlmZi4gVGhlIGNvbW1hbmQgZXhlY3V0aW9uIGlzIGNvbXBsZXRlbHkgZ29uZS4gSSYjMzk7bSBnb2luZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jYC4gSXMgdGhlcmUgYW5vdGhlciB3YXkgdG8gcXVlcnkgY2Fwcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcdFx0XHQgTUxYNV9HRVRfSENBX0NBUF9PUF9NT0RfRVNXX0ZMT1dfVEFCTEUgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xuMTE1MTpcdFxuMTE1MjpcdFx0XHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcbjExNTM6XHRcdFx0aWYgKHJldCkge1xuMTE1NDpcdFx0XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGZsb3cgdGFibGUgZXN3IGNhcHNcXG5cJiMzNDspO1xuMTE1NTpcdFx0XHRcdGdvdG8gb3V0O1xuMTE1NjpcdFx0XHR9XG4xMTU3Olx0XG4xMTU4Olx0XHRcdGNhcHMtXHUwMDNlZmRiX2Z0Lm1heF9sZXZlbCA9XG4xMTU5Olx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNjA6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUubWF4X2Z0X2xldmVsKTtcbjExNjE6XHRcbjExNjI6XHRcdFx0Y2Fwcy1cdTAwM2VmZGJfZnQucmVwYXJzZSA9XG4xMTYzOlx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNjQ6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUucmVwYXJzZSk7XG4xMTY1Olx0XG4xMTY2Olx0XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXG4xMTY3Olx0XHRcdFx0IE1MWDVfU0VUX0hDQV9DQVBfT1BfTU9EX0VTVyB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XG4xMTY4Olx0XG4xMTY5Olx0XHRcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xuMTE3MDpcdFx0XHRpZiAocmV0KSB7XG4xMTcxOlx0XHRcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtGYWlsZWQgdG8gcXVlcnkgZXN3aXRjaCBjYXBhYmlsaXRpZXNcXG5cJiMzNDspO1xuMTE3MjpcdFx0XHRcdGdvdG8gb3V0O1xuMTE3MzpcdFx0XHR9XG4xMTc0Olx0XG4xMTc1Olx0XHRcdGlmIChNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE3NjpcdFx0XHRcdCAgICAgY2FwYWJpbGl0eS5lX3N3aXRjaF9jYXAuZXN3X21hbmFnZXJfdnBvcnRfbnVtYmVyX3ZhbGlkKSlcbjExNzc6XHRcdFx0XHRjYXBzLVx1MDAzZWVzd2l0Y2hfbWFuYWdlcl92cG9ydF9udW1iZXIgPVxuMTE3ODpcdFx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNzk6XHRcdFx0XHRcdFx0IGNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLmVzd19tYW5hZ2VyX3Zwb3J0X251bWJlcik7XG4xMTgwOlx0XG4xMTgxOlx0XHRcdGNhcHMtXHUwMDNlbWVyZ2VkX2Vzd2l0Y2ggPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE4MjpcdFx0XHRcdFx0XHRcdGNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLm1lcmdlZF9lc3dpdGNoKTtcbjExODM6XHRcdH1cbjExODQ6XHRcbjExODU6XHRcdHNucHJpbnRmKGNhcHMtXHUwMDNlZndfdmVyLCBzaXplb2YoY2Fwcy1cdTAwM2Vmd192ZXIpLCBcJiMzNDslZC4lZC4lZFwmIzM0OyxcbjExODY6XHRcdFx0IGZ3X3Jldl9tYWoobWRldiksIGZ3X3Jldl9taW4obWRldiksIGZ3X3Jldl9zdWIobWRldikpO1xuMTE4NzpcdFxuMTE4ODpcdFx0Y2Fwcy1cdTAwM2Vpc19lY3BmID0gbWx4NV9jb3JlX2lzX2VjcGZfZXN3X21hbmFnZXIobWRldik7XG4xMTg5Olx0XG4xMTkwOlx0b3V0OlxuMTE5MTpcdFx0a2ZyZWUob3V0KTtcbjExOTI6XHRcdHJldHVybiByZXQ7XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdGludCBtbHg1aHdzX2NtZF9xdWVyeV9ndm1pKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCBib29sIG90aGVyX2Z1bmN0aW9uLFxuMTE5NjpcdFx0XHRcdCAgIHUxNiB2cG9ydF9udW1iZXIsIHUxNiAqZ3ZtaSlcbjExOTc6XHR7XG4xMTk4Olx0XHRpbnQgZXJyO1xuMTE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDcKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogNTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogTWVsbGFub3ggRHJpdmVyIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgdGhhdCB0aGUgYG1seDVfY21kX2V4ZWNgIGNhbGwgd2FzIHJlbW92ZWQuIEkgcmVhbGl6ZWQgaXQgd2FzIHJlZHVuZGFudCBzaW5jZSBpdCB3YXMgYWxyZWFkeSBjYWxsZWQganVzdCBhYm92ZSBmb3IgdGhlIHNhbWUgYEhDQV9DQVBfT1BNT0RfR0VUX0NVUmAgb3BlcmF0aW9uLiBCdXQgdGhhdCYjMzk7cyBub3QgdGhlIGNyaXRpY2FsIHBvaW50IGhlcmUuIFRoaXMgaXMgYSBNZWxsYW5veCBkcml2ZXIgKGBtbHg1YCksIGFuZCB0aGF0IHJhaXNlcyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LiBJdCYjMzk7cyBhIFNtYXJ0TklDIGRyaXZlciwgbWVhbmluZyBpdCBuZWVkcyAqcGh5c2ljYWwqIE1lbGxhbm94IGhhcmR3YXJlIChsaWtlIGEgQ29ubmVjdFgtNSBvciBsYXRlcikgdG8gZnVuY3Rpb24sIGFuZCBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhhdC4KClRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0byBhdm9pZCBwYXRjaGVzIHRoYXQgdG91Y2ggdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgbWVudGlvbmluZyBTbWFydE5JQyBkcml2ZXJzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gYG1seDVgIGlzIHJpZ2h0IGluIHRoYXQgY2F0ZWdvcnkuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHNvIEkgd2lsbCBkb3VibGUgY2hlY2ssIGJ1dCBRRU1VIGRlZmluaXRlbHkgZG9lcyBub3QgZW11bGF0ZSBNZWxsYW5veCBgbWx4NWAuIEl0IGhhcyBiYXNpYyBlbXVsYXRlZCBuZXR3b3JrIGNhcmRzLCBzdXJlLCBsaWtlIGUxMDAwLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCB2bXhuZXQzLCBpZ2IsIGV0Yy4gQnV0IG5vdCBgbWx4NWAuCgpBbHJpZ2h0LCBJIGNvbmZpcm0sIGl0JiMzOTtzIGEgTWVsbGFub3ggU21hcnROSUMgZHJpdmVyLCBzbyBpdCBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlICYjMzQ7c2tpcCYjMzQ7IGNyaXRlcmlhLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGNoZWNrIHRvIHNlZSB3aGF0IGVsc2UgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNgLiBCb3RoIG9mIHRoZXNlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGBtbHg1YCBkaXJlY3RvcnksIHdoaWNoIGlzIGNsZWFyIGNvbmZpcm1hdGlvbi4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgb25seSBtb2RpZnlpbmcgY29kZSB3aXRoaW4gdGhlIE1lbGxhbm94IGBtbHg1YCBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBUaGUgZnV6emVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHJlYWNoIGFueSBvZiB0aGUgbW9kaWZpZWQgY29kZSBwYXRocywgc28gaXQmIzM5O3MgYSB3YXN0ZSBvZiByZXNvdXJjZXMgdG8gc3BlbmQgYW55IHRpbWUgZnV6emluZyB0aGlzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBBcyBhIHJlc3VsdCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBBcyBhIHJlc3VsdCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQzOjIxLjExMDMyMzkxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTA0NjUyMjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBBcyBhIHJlc3VsdCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQzOjIxLjExMDMzMDI2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTg3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTBhOTg5ZTAwNjIwYmM4Njk2MmYyZmY5ZTdlMzNlZmJkMzNiOWIwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0MzoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xcbmluZGV4IDhmYWU5MDEwMTY1M2YuLjc3NWRjNWMyZDdhNmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcXG5AQCAtMzk4LDcgKzM5OCw2IEBAIGludCBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLVxcdTAwM2Vmd19nZW5fd3FlKTtcXG4gXFx0TUxYNV9TRVQocnRjLCBhdHRyLCB1cGRhdGVfaW5kZXhfbW9kZSwgcnRjX2F0dHItXFx1MDAzZXVwZGF0ZV9pbmRleF9tb2RlKTtcXG4gXFx0TUxYNV9TRVQocnRjLCBhdHRyLCBhY2Nlc3NfaW5kZXhfbW9kZSwgcnRjX2F0dHItXFx1MDAzZWFjY2Vzc19pbmRleF9tb2RlKTtcXG4tXFx0TUxYNV9TRVQocnRjLCBhdHRyLCBudW1faGFzaF9kZWZpbmVyLCBydGNfYXR0ci1cXHUwMDNlbnVtX2hhc2hfZGVmaW5lcik7XFxuIFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbG9nX2RlcHRoLCBydGNfYXR0ci1cXHUwMDNlbG9nX2RlcHRoKTtcXG4gXFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfaGFzaF9zaXplLCBydGNfYXR0ci1cXHUwMDNlbG9nX3NpemUpO1xcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIHRhYmxlX3R5cGUsIHJ0Y19hdHRyLVxcdTAwM2V0YWJsZV90eXBlKTtcXG5AQCAtNjExLDkgKzYxMCwxMSBAQCBpbnQgbWx4NWh3c19jbWRfc3RjX21vZGlmeShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcXG4gXFxuIFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgc2l6ZW9mKG91dCkpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJGYWlsZWQgdG8gbW9kaWZ5IFNUQyBGVyBhY3Rpb25fdHlwZSAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgc3RjX2F0dHItXFx1MDAzZWFjdGlvbl90eXBlKTtcXG4tXFxuK1xcdFxcdG1seDVfY29yZV9lcnIobWRldixcXG4rXFx0XFx0XFx0ICAgICAgXFxcIkZhaWxlZCB0byBtb2RpZnkgU1RDIGFjdGlvbl90eXBlICVkLCBlcnIgJWQsIHN5bmRyb21lIDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIHN0Y19hdHRyLVxcdTAwM2VhY3Rpb25fdHlwZSwgcmV0LFxcbitcXHRcXHRcXHQgICAgICBNTFg1X0dFVChnZW5lcmFsX29ial9vdXRfY21kX2hkcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG91dCwgc3luZHJvbWUpKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTE4MSwxMiArMTE4Miw2IEBAIGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRjYXBhYmlsaXR5LmVfc3dpdGNoX2NhcC5tZXJnZWRfZXN3aXRjaCk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbiBcXHRzbnByaW50ZihjYXBzLVxcdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVxcdTAwM2Vmd192ZXIpLCBcXFwiJWQuJWQuJWRcXFwiLFxcbiBcXHRcXHQgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXFxuaW5kZXggYWVkMDA5YWVjNGZlOC4uZjBjM2EyYmRhMGM3MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXFxuQEAgLTM0NCw2ICszNDQsMzYgQEAgaHdzX3NlbmRfZW5naW5lX3VwZGF0ZV9ydWxlX3Jlc2l6ZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3N0YXR1c190b19zdHJpbmcoZW51bSBtbHg1aHdzX3J1bGVfc3RhdHVzIHN0YXR1cylcXG4re1xcbitcXHRzd2l0Y2ggKHN0YXR1cykge1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkc6IHJldHVybiBcXFwiQ1JFQVRJTkdcXFwiO1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkc6IHJldHVybiBcXFwiVVBEQVRJTkdcXFwiO1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkc6IHJldHVybiBcXFwiREVMRVRJTkdcXFwiO1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORzogcmV0dXJuIFxcXCJGQUlMSU5HXFxcIjtcXG4rXFx0ZGVmYXVsdDogcmV0dXJuIFxcXCJOQVxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmcodTggc3RhdGUpXFxuK3tcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfSURMRTogcmV0dXJuIFxcXCJJRExFXFxcIjtcXG4rXFx0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkc6IHJldHVybiBcXFwiV1JJVElOR1xcXCI7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9ERUxFVElORzogcmV0dXJuIFxcXCJERUxFVElOR1xcXCI7XFxuK1xcdGRlZmF1bHQ6IHJldHVybiBcXFwiVU5LTk9XTlxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHU4IHN5bmRyb21lKVxcbit7XFxuK1xcdHN3aXRjaCAoc3luZHJvbWUpIHtcXG4rXFx0Y2FzZSAxOiByZXR1cm4gXFxcIlNFVF9GTE9XX0ZBSUxcXFwiO1xcbitcXHRjYXNlIDI6IHJldHVybiBcXFwiRElTQUJMRV9GTE9XX0ZBSUxcXFwiO1xcbitcXHRkZWZhdWx0OiByZXR1cm4gXFxcIlVOS05PV05cXFwiO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1aHdzX3NlbmRfcmluZ19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbkBAIC0zNTIsNiArMzgyLDcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gcHJpdi1cXHUwMDNlcnVsZS1cXHUwMDNlbWF0Y2hlci1cXHUwMDNldGJsLVxcdTAwM2VjdHg7XFxuIFxcdHUzMiBvcGNvZGUgPSBjcWUgPyBnZXRfY3FlX29wY29kZShjcWUpIDogMDtcXG4gXFx0c3RydWN0IG1seDVod3NfcnVsZSAqcnVsZSA9IHByaXYtXFx1MDAzZXJ1bGU7XFxuK1xcdHU4IHN5bmRyb21lO1xcbiBcXG4gXFx0LyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIGFuZCBsb3RzIG9mIHJ1bGVzIGFyZSBmYWlsaW5nLCB3ZSBkb24ndFxcbiBcXHQgKiB3YW50IHRvIHBvbGx1dGUgZG1lc2cuIFByaW50IG9ubHkgdGhlIGZpcnN0IGJhZCBjcWUgcGVyIGVuZ2luZSxcXG5AQCAtMzY0LDI2ICszOTUsMTcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFxuIFxcdGlmIChtbHg1aHdzX3J1bGVfbW92ZV9pbl9wcm9ncmVzcyhydWxlKSlcXG4gXFx0XFx0bWx4NWh3c19lcnIoY3R4LFxcbi1cXHRcXHRcXHQgICAgXFxcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcywgd3FlcyBsZWZ0ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgXFxcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbi1cXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcmVzaXplX2luZm8tXFx1MDAzZXN0YXRlID09XFxuLVxcdFxcdFxcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkcgPyBcXFwiV1JJVElOR1xcXCIgOlxcbi1cXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcmVzaXplX2luZm8tXFx1MDAzZXN0YXRlID09XFxuLVxcdFxcdFxcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HID8gXFxcIkRFTEVUSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBcXFwiVU5LTk9XTlxcXCIsXFxuK1xcdFxcdFxcdCAgICBod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nXFxuK1xcdFxcdFxcdFxcdChydWxlLVxcdTAwM2VyZXNpemVfaW5mby1cXHUwMDNlc3RhdGUpLFxcbitcXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcmVzaXplX2luZm8tXFx1MDAzZXN0YXRlLFxcbiBcXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcGVuZGluZ193cWVzKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRtbHg1aHdzX2VycihjdHgsXFxuIFxcdFxcdFxcdCAgICBcXFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4tXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXN0YXR1cyA9PVxcbi1cXHRcXHRcXHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORyA/IFxcXCJDUkVBVElOR1xcXCIgOlxcbi1cXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlc3RhdHVzID09XFxuLVxcdFxcdFxcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HID8gXFxcIkRFTEVUSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VzdGF0dXMgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORyA/IFxcXCJGQUlMSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VzdGF0dXMgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkcgPyBcXFwiVVBEQVRJTkdcXFwiIDogXFxcIk5BXFxcIixcXG4rXFx0XFx0XFx0ICAgIGh3c19ydWxlX3N0YXR1c190b19zdHJpbmcocnVsZS1cXHUwMDNlc3RhdHVzKSxcXG4gXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXN0YXR1cyxcXG4gXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXBlbmRpbmdfd3Flcyk7XFxuIFxcbkBAIC00MjMsNiArNDQ1LDE1IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXFxuIFxcdFxcdFxcdCAgICBcXFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIHN5bmRyb21lID0gMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXFxuIFxcdFxcdFxcdCAgICBlcnJfY3FlLVxcdTAwM2VzeW5kcm9tZSk7XFxuK1xcdFxcdG1seDVod3NfZXJyKGN0eCxcXG4rXFx0XFx0XFx0ICAgIFxcXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0gUVBOID0gMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXFxuK1xcdFxcdFxcdCAgICBiZTMyX3RvX2NwdShlcnJfY3FlLVxcdTAwM2VzX3dxZV9vcGNvZGVfcXBuKSBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdDB4ZmZmZmZmKTtcXG4rXFx0XFx0bWx4NWh3c19lcnIoY3R4LFxcbitcXHRcXHRcXHQgICAgXFxcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBXUUVfQ05UID0gMHglMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4rXFx0XFx0XFx0ICAgICh1MzIpYmUxNl90b19jcHUoZXJyX2NxZS1cXHUwMDNld3FlX2NvdW50ZXIpKTtcXG4gXFx0fVxcbiBcXG4gXFx0bWx4NWh3c19lcnIoY3R4LFxcbkBAIC00MzMsMTMgKzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxcbiBcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4gXFx0XFx0ICAgIChiZTMyX3RvX2NwdShjcWUtXFx1MDAzZWJ5dGVfY250KSBcXHUwMDI2IDB4ODAwMDAwMDApID9cXG4gXFx0XFx0ICAgIFxcXCJGQUlMVVJFXFxcIiA6IFxcXCJTVUNDRVNTXFxcIik7XFxuK1xcdC8qIHN5bmRyb21lIGlzIGluIHRoZSBsb3dlciAyIGJpdHMgb2YgYnl0ZV9jbnQgKi9cXG4rXFx0c3luZHJvbWUgPSBiZTMyX3RvX2NwdShjcWUtXFx1MDAzZWJ5dGVfY250KSBcXHUwMDI2IDM7XFxuIFxcdG1seDVod3NfZXJyKGN0eCxcXG4tXFx0XFx0ICAgIFxcXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICBcXFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzICgldSlcXFxcblxcXCIsXFxuIFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbi1cXHRcXHQgICAgKChiZTMyX3RvX2NwdShjcWUtXFx1MDAzZWJ5dGVfY250KSBcXHUwMDI2IDB4MDAwMDAwMDMpID09IDEpID9cXG4tXFx0XFx0ICAgIFxcXCJTRVRfRkxPV19GQUlMXFxcIiA6XFxuLVxcdFxcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlYnl0ZV9jbnQpIFxcdTAwMjYgMHgwMDAwMDAwMykgPT0gMikgP1xcbi1cXHRcXHQgICAgXFxcIkRJU0FCTEVfRkxPV19GQUlMXFxcIiA6IFxcXCJVTktOT1dOXFxcIik7XFxuK1xcdFxcdCAgICBod3NfZ3RhX3N5bmRyb21lX3RvX3N0cmluZyhzeW5kcm9tZSksIHN5bmRyb21lKTtcXG4gXFx0bWx4NWh3c19lcnIoY3R4LFxcbiBcXHRcXHQgICAgXFxcIiAgICBydWxlIDB4JTA4bGx4OiBjcWUtXFx1MDAzZXNvcF9kcm9wX3FwbiAgPSAweCUwOHhcXFxcblxcXCIsXFxuIFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLCBiZTMyX3RvX2NwdShjcWUtXFx1MDAzZXNvcF9kcm9wX3FwbikpO1xcbkBAIC0xMDkxLDggKzExMjEsNiBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuIFxcdGlmICghbWx4NWh3c19jb250ZXh0X2J3Y19zdXBwb3J0ZWQoY3R4KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRjdHgtXFx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO1xcbi1cXG4gXFx0Y3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IGJ3Y19xdWV1ZXMpO1xcbiBcXG5AQCAtMTEwNCw2ICsxMTMyLDggQEAgc3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiBcXHRpZiAoIWN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcXG4gXFx0XFx0Z290byBlcnJfbG9ja19jbGFzc19rZXlzO1xcbiBcXG4rXFx0Y3R4LVxcdTAwM2VxdWV1ZXMgKz0gYndjX3F1ZXVlcztcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBid2NfcXVldWVzOyBpKyspIHtcXG4gXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7XFxuIFxcdFxcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyArIGkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0MzoyMS41NjYxMzc2MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjQ1OTA2OTA2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBBcyBhIHJlc3VsdCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEwYTk4OWUwMDYyMGJjODY5NjJmMmZmOWU3ZTMzZWZiZDMzYjliMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0MzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXG5pbmRleCA4ZmFlOTAxMDE2NTNmLi43NzVkYzVjMmQ3YTZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xuQEAgLTM5OCw3ICszOTgsNiBAQCBpbnQgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX21ldGhvZCwgcnRjX2F0dHItXHUwMDNlZndfZ2VuX3dxZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9pbmRleF9tb2RlLCBydGNfYXR0ci1cdTAwM2V1cGRhdGVfaW5kZXhfbW9kZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGFjY2Vzc19pbmRleF9tb2RlLCBydGNfYXR0ci1cdTAwM2VhY2Nlc3NfaW5kZXhfbW9kZSk7XG4tXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVx1MDAzZW51bV9oYXNoX2RlZmluZXIpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVx1MDAzZWxvZ19kZXB0aCk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19oYXNoX3NpemUsIHJ0Y19hdHRyLVx1MDAzZWxvZ19zaXplKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXHUwMDNldGFibGVfdHlwZSk7XG5AQCAtNjExLDkgKzYxMCwxMSBAQCBpbnQgbWx4NWh3c19jbWRfc3RjX21vZGlmeShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcbiBcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgc2l6ZW9mKG91dCkpO1xuIFx0aWYgKHJldClcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcIkZhaWxlZCB0byBtb2RpZnkgU1RDIEZXIGFjdGlvbl90eXBlICVkXFxuXCIsXG4tXHRcdFx0ICAgICAgc3RjX2F0dHItXHUwMDNlYWN0aW9uX3R5cGUpO1xuLVxuK1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4rXHRcdFx0ICAgICAgXCJGYWlsZWQgdG8gbW9kaWZ5IFNUQyBhY3Rpb25fdHlwZSAlZCwgZXJyICVkLCBzeW5kcm9tZSAweCV4XFxuXCIsXG4rXHRcdFx0ICAgICAgc3RjX2F0dHItXHUwMDNlYWN0aW9uX3R5cGUsIHJldCxcbitcdFx0XHQgICAgICBNTFg1X0dFVChnZW5lcmFsX29ial9vdXRfY21kX2hkcixcbitcdFx0XHRcdCAgICAgICBvdXQsIHN5bmRyb21lKSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMTgxLDEyICsxMTgyLDYgQEAgaW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXHRcdFx0XHRcdFx0Y2FwYWJpbGl0eS5lX3N3aXRjaF9jYXAubWVyZ2VkX2Vzd2l0Y2gpO1xuIFx0fVxuIFxuLVx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJGYWlsZWQgdG8gcXVlcnkgZGV2aWNlIGF0dHJpYnV0ZXNcXG5cIik7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0c25wcmludGYoY2Fwcy1cdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVx1MDAzZWZ3X3ZlciksIFwiJWQuJWQuJWRcIixcbiBcdFx0IGZ3X3Jldl9tYWoobWRldiksIGZ3X3Jldl9taW4obWRldiksIGZ3X3Jldl9zdWIobWRldikpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcbmluZGV4IGFlZDAwOWFlYzRmZTguLmYwYzNhMmJkYTBjNzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcbkBAIC0zNDQsNiArMzQ0LDM2IEBAIGh3c19zZW5kX2VuZ2luZV91cGRhdGVfcnVsZV9yZXNpemUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhlbnVtIG1seDVod3NfcnVsZV9zdGF0dXMgc3RhdHVzKVxuK3tcbitcdHN3aXRjaCAoc3RhdHVzKSB7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkc6IHJldHVybiBcIkNSRUFUSU5HXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkc6IHJldHVybiBcIlVQREFUSU5HXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkc6IHJldHVybiBcIkRFTEVUSU5HXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORzogcmV0dXJuIFwiRkFJTElOR1wiO1xuK1x0ZGVmYXVsdDogcmV0dXJuIFwiTkFcIjtcbitcdH1cbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmcodTggc3RhdGUpXG4re1xuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0lETEU6IHJldHVybiBcIklETEVcIjtcbitcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9XUklUSU5HOiByZXR1cm4gXCJXUklUSU5HXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfREVMRVRJTkc6IHJldHVybiBcIkRFTEVUSU5HXCI7XG4rXHRkZWZhdWx0OiByZXR1cm4gXCJVTktOT1dOXCI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpod3NfZ3RhX3N5bmRyb21lX3RvX3N0cmluZyh1OCBzeW5kcm9tZSlcbit7XG4rXHRzd2l0Y2ggKHN5bmRyb21lKSB7XG4rXHRjYXNlIDE6IHJldHVybiBcIlNFVF9GTE9XX0ZBSUxcIjtcbitcdGNhc2UgMjogcmV0dXJuIFwiRElTQUJMRV9GTE9XX0ZBSUxcIjtcbitcdGRlZmF1bHQ6IHJldHVybiBcIlVOS05PV05cIjtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG1seDVod3Nfc2VuZF9yaW5nX3ByaXYgKnByaXYsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG5AQCAtMzUyLDYgKzM4Miw3IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHggPSBwcml2LVx1MDAzZXJ1bGUtXHUwMDNlbWF0Y2hlci1cdTAwM2V0YmwtXHUwMDNlY3R4O1xuIFx0dTMyIG9wY29kZSA9IGNxZSA/IGdldF9jcWVfb3Bjb2RlKGNxZSkgOiAwO1xuIFx0c3RydWN0IG1seDVod3NfcnVsZSAqcnVsZSA9IHByaXYtXHUwMDNlcnVsZTtcbitcdHU4IHN5bmRyb21lO1xuIFxuIFx0LyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIGFuZCBsb3RzIG9mIHJ1bGVzIGFyZSBmYWlsaW5nLCB3ZSBkb24ndFxuIFx0ICogd2FudCB0byBwb2xsdXRlIGRtZXNnLiBQcmludCBvbmx5IHRoZSBmaXJzdCBiYWQgY3FlIHBlciBlbmdpbmUsXG5AQCAtMzY0LDI2ICszOTUsMTcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcbiBcdGlmIChtbHg1aHdzX3J1bGVfbW92ZV9pbl9wcm9ncmVzcyhydWxlKSlcbiBcdFx0bWx4NWh3c19lcnIoY3R4LFxuLVx0XHRcdCAgICBcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcywgd3FlcyBsZWZ0ICVkXFxuXCIsXG4rXHRcdFx0ICAgIFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzICglZCksIHdxZXMgbGVmdCAlZFxcblwiLFxuIFx0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORyA/IFwiV1JJVElOR1wiIDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HID8gXCJERUxFVElOR1wiIDpcbi1cdFx0XHQgICAgXCJVTktOT1dOXCIsXG4rXHRcdFx0ICAgIGh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmdcbitcdFx0XHRcdChydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlKSxcbitcdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSxcbiBcdFx0XHQgICAgcnVsZS1cdTAwM2VwZW5kaW5nX3dxZXMpO1xuIFx0ZWxzZVxuIFx0XHRtbHg1aHdzX2VycihjdHgsXG4gXHRcdFx0ICAgIFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXFxuXCIsXG4gXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkcgPyBcIkNSRUFUSU5HXCIgOlxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HID8gXCJERUxFVElOR1wiIDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HID8gXCJGQUlMSU5HXCIgOlxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HID8gXCJVUERBVElOR1wiIDogXCJOQVwiLFxuK1x0XHRcdCAgICBod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nKHJ1bGUtXHUwMDNlc3RhdHVzKSxcbiBcdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMsXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcGVuZGluZ193cWVzKTtcbiBcbkBAIC00MjMsNiArNDQ1LDE1IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdFx0ICAgIFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIHN5bmRyb21lID0gMHgleFxcblwiLFxuIFx0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuIFx0XHRcdCAgICBlcnJfY3FlLVx1MDAzZXN5bmRyb21lKTtcbitcdFx0bWx4NWh3c19lcnIoY3R4LFxuK1x0XHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBRUE4gPSAweCV4XFxuXCIsXG4rXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4rXHRcdFx0ICAgIGJlMzJfdG9fY3B1KGVycl9jcWUtXHUwMDNlc193cWVfb3Bjb2RlX3FwbikgXHUwMDI2XG4rXHRcdFx0XHRcdDB4ZmZmZmZmKTtcbitcdFx0bWx4NWh3c19lcnIoY3R4LFxuK1x0XHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBXUUVfQ05UID0gMHglMDR4XFxuXCIsXG4rXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4rXHRcdFx0ICAgICh1MzIpYmUxNl90b19jcHUoZXJyX2NxZS1cdTAwM2V3cWVfY291bnRlcikpO1xuIFx0fVxuIFxuIFx0bWx4NWh3c19lcnIoY3R4LFxuQEAgLTQzMywxMyArNDY0LDEyIEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuIFx0XHQgICAgKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4ODAwMDAwMDApID9cbiBcdFx0ICAgIFwiRkFJTFVSRVwiIDogXCJTVUNDRVNTXCIpO1xuK1x0Lyogc3luZHJvbWUgaXMgaW4gdGhlIGxvd2VyIDIgYml0cyBvZiBieXRlX2NudCAqL1xuK1x0c3luZHJvbWUgPSBiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAzO1xuIFx0bWx4NWh3c19lcnIoY3R4LFxuLVx0XHQgICAgXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXNcXG5cIixcbitcdFx0ICAgIFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzICgldSlcXG5cIixcbiBcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4tXHRcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4MDAwMDAwMDMpID09IDEpID9cbi1cdFx0ICAgIFwiU0VUX0ZMT1dfRkFJTFwiIDpcbi1cdFx0ICAgICgoYmUzMl90b19jcHUoY3FlLVx1MDAzZWJ5dGVfY250KSBcdTAwMjYgMHgwMDAwMDAwMykgPT0gMikgP1xuLVx0XHQgICAgXCJESVNBQkxFX0ZMT1dfRkFJTFwiIDogXCJVTktOT1dOXCIpO1xuK1x0XHQgICAgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcoc3luZHJvbWUpLCBzeW5kcm9tZSk7XG4gXHRtbHg1aHdzX2VycihjdHgsXG4gXHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiBjcWUtXHUwMDNlc29wX2Ryb3BfcXBuICA9IDB4JTA4eFxcblwiLFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSwgYmUzMl90b19jcHUoY3FlLVx1MDAzZXNvcF9kcm9wX3FwbikpO1xuQEAgLTEwOTEsOCArMTEyMSw2IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiBcdGlmICghbWx4NWh3c19jb250ZXh0X2J3Y19zdXBwb3J0ZWQoY3R4KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRjdHgtXHUwMDNlcXVldWVzICs9IGJ3Y19xdWV1ZXM7XG4tXG4gXHRjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MgPSBremFsbG9jX29ianMoKmN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyxcbiBcdFx0XHRcdFx0XHQgYndjX3F1ZXVlcyk7XG4gXG5AQCAtMTEwNCw2ICsxMTMyLDggQEAgc3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuIFx0aWYgKCFjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcbiBcdFx0Z290byBlcnJfbG9ja19jbGFzc19rZXlzO1xuIFxuK1x0Y3R4LVx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYndjX3F1ZXVlczsgaSsrKSB7XG4gXHRcdG11dGV4X2luaXQoXHUwMDI2Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcbiBcdFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgKyBpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQzOjIxLjU2NjE0MDQ3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTA0MDA1MDczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogTWVsbGFub3ggbWx4NSBIV1MgQ29tbWFuZCBhbmQgU2VuZCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYG1seDVgIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBod3NgIChIYXJkd2FyZSBTdGVlcmluZykgc3ViLWNvbXBvbmVudHMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlJ3MgYSBtaXggb2YgY2xlYW4tdXAgYW5kIGJ1ZyBmaXhlcywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgdGhlc2Uga2luZHMgb2YgbG93LWxldmVsIGRyaXZlciB1cGRhdGVzLlxuXG5GaXJzdCwgbGV0J3MgbG9vayBhdCB0aGUgYGNtZC5jYCBjaGFuZ2VzLiBJIHNlZSBzb21lIG1vZGlmaWNhdGlvbnMgaW4gYG1seDVod3NfY21kX3J0Y19jcmVhdGVgLCBidXQgSSdtIG5vdCBpbW1lZGlhdGVseSBjb25jZXJuZWQsIHJlbW92aW5nIGBNTFg1X1NFVGAgaGVyZSBhbmQgdGhlcmUgaXMgbm90IG5ldyBhbmQgdW51c3VhbC4gVGhlbiwgaW4gYG1seDVod3NfY21kX3N0Y19tb2RpZnlgLCBpdCBsb29rcyBsaWtlIHdlJ3JlIGFkZGluZyBtb3JlIGRldGFpbCB0byB0aGUgZXJyb3IgbG9ncyB3aGljaCBpcyBhbHdheXMgZ29vZCBmb3IgZGVidWdnaW5nLlxuXG5UaGUgbW9zdCBpbnRlcmVzdGluZyBjaGFuZ2UsIGFuZCB0aGUgb25lIHRoYXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUsIGlzIHRoZSByZW1vdmFsIG9mIGEgYG1seDVfY21kX2V4ZWNgIGNhbGwgYW5kIGl0cyBhc3NvY2lhdGVkIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgbWx4NWh3c19jbWRfcXVlcnlfY2Fwc2AuIFRoaXMgaXMgdW5leHBlY3RlZCEgSXQgaW1wbGllcyBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBvZiBob3cgY2FwYWJpbGl0aWVzIGFyZSBxdWVyaWVkLiBJdCdzIG5vdCBhIGNvbW1vbiBvY2N1cnJlbmNlIHRvIGp1c3QgKnJlbW92ZSogYSBjb21tYW5kIGV4ZWN1dGlvbiwgc28gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBxdWVyeWluZyBjYXBzIG5vdy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGRpdmluZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy5cblxuTm93LCBzd2l0Y2hpbmcgZ2VhcnMgdG8gYHNlbmQuY2AsIHRoaW5ncyBhcmUgYSBiaXQgbW9yZSBzdHJhaWdodGZvcndhcmQuIFdlJ3ZlIGdvdCB0aGUgYWRkaXRpb24gb2YgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nYCwgYGh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmdgLCBhbmQgYGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nYC4gVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50IGZvciBsb2dnaW5nLCBtYWtpbmcgaXQgZWFzaWVyIHRvIGRlY2lwaGVyIGVycm9yIGNvZGVzIGFuZCBzdGF0ZXMgaW4gdGhlIGBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWVgIGZ1bmN0aW9uLlxuXG5JIHNlZSBhIG1vcmUgc3RhbmRhcmQgYnVnIGZpeCBhcyB3ZWxsLCBzcGVjaWZpY2FsbHkgbW92aW5nIGBjdHgtXHUwMDNlcXVldWVzICs9IGJ3Y19xdWV1ZXM7YCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YC4gVGhpcyBpcyBhIHBvdGVudGlhbCBudWxsLXBvaW50ZXIgaXNzdWUgdGhhdCBJJ3ZlIHNlZW4gYmVmb3JlLCBpbmNyZW1lbnRpbmcgYSBjb3VudCAqYmVmb3JlKiBhbGxvY2F0aW9uIGNhbiBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBpZiBhbGxvY2F0aW9uIGZhaWxzLlxuXG5CYWNrIHRvIGBjbWQuY2AgYW5kIHRoaXMgcmVtb3ZlZCBgbWx4NV9jbWRfZXhlY2AgY2FsbC4gTGV0J3Mgc2VlLi4uSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBoZXJlLi4uIGFoLCBva2F5LCBJIGNhbiBzZWUgdGhlIGRpZmYuIFRoZSBjb21tYW5kIGV4ZWN1dGlvbiBpcyBjb21wbGV0ZWx5IGdvbmUuIEknbSBnb2luZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jYC4gSXMgdGhlcmUgYW5vdGhlciB3YXkgdG8gcXVlcnkgY2Fwcz9cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwMiwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjE2LjYwNjE5NDU3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0XFx0IE1MWDVfR0VUX0hDQV9DQVBfT1BfTU9EX0VTV19GTE9XX1RBQkxFIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcXG4xMTUxOlxcdFxcbjExNTI6XFx0XFx0XFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XFxuMTE1MzpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMTE1NDpcXHRcXHRcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJGYWlsZWQgdG8gcXVlcnkgZmxvdyB0YWJsZSBlc3cgY2Fwc1xcXFxuXFxcIik7XFxuMTE1NTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTU2OlxcdFxcdFxcdH1cXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlZmRiX2Z0Lm1heF9sZXZlbCA9XFxuMTE1OTpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExNjA6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5tYXhfZnRfbGV2ZWwpO1xcbjExNjE6XFx0XFxuMTE2MjpcXHRcXHRcXHRjYXBzLVxcdTAwM2VmZGJfZnQucmVwYXJzZSA9XFxuMTE2MzpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExNjQ6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5yZXBhcnNlKTtcXG4xMTY1OlxcdFxcbjExNjY6XFx0XFx0XFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcXG4xMTY3OlxcdFxcdFxcdFxcdCBNTFg1X1NFVF9IQ0FfQ0FQX09QX01PRF9FU1cgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xcbjExNjg6XFx0XFxuMTE2OTpcXHRcXHRcXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcXG4xMTcwOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMTcxOlxcdFxcdFxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBxdWVyeSBlc3dpdGNoIGNhcGFiaWxpdGllc1xcXFxuXFxcIik7XFxuMTE3MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTczOlxcdFxcdFxcdH1cXG4xMTc0OlxcdFxcbjExNzU6XFx0XFx0XFx0aWYgKE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTE3NjpcXHRcXHRcXHRcXHQgICAgIGNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLmVzd19tYW5hZ2VyX3Zwb3J0X251bWJlcl92YWxpZCkpXFxuMTE3NzpcXHRcXHRcXHRcXHRjYXBzLVxcdTAwM2Vlc3dpdGNoX21hbmFnZXJfdnBvcnRfbnVtYmVyID1cXG4xMTc4OlxcdFxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTE3OTpcXHRcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5lX3N3aXRjaF9jYXAuZXN3X21hbmFnZXJfdnBvcnRfbnVtYmVyKTtcXG4xMTgwOlxcdFxcbjExODE6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlbWVyZ2VkX2Vzd2l0Y2ggPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2FwYWJpbGl0eS5lX3N3aXRjaF9jYXAubWVyZ2VkX2Vzd2l0Y2gpO1xcbjExODM6XFx0XFx0fVxcbjExODQ6XFx0XFxuMTE4NTpcXHRcXHRzbnByaW50ZihjYXBzLVxcdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVxcdTAwM2Vmd192ZXIpLCBcXFwiJWQuJWQuJWRcXFwiLFxcbjExODY6XFx0XFx0XFx0IGZ3X3Jldl9tYWoobWRldiksIGZ3X3Jldl9taW4obWRldiksIGZ3X3Jldl9zdWIobWRldikpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRjYXBzLVxcdTAwM2Vpc19lY3BmID0gbWx4NV9jb3JlX2lzX2VjcGZfZXN3X21hbmFnZXIobWRldik7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdG91dDpcXG4xMTkxOlxcdFxcdGtmcmVlKG91dCk7XFxuMTE5MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHRpbnQgbWx4NWh3c19jbWRfcXVlcnlfZ3ZtaShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgYm9vbCBvdGhlcl9mdW5jdGlvbixcXG4xMTk2OlxcdFxcdFxcdFxcdCAgIHUxNiB2cG9ydF9udW1iZXIsIHUxNiAqZ3ZtaSlcXG4xMTk3OlxcdHtcXG4xMTk4OlxcdFxcdGludCBlcnI7XFxuMTE5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MTYuNjA2MzEyMTgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1MDQ1NDQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IE1lbGxhbm94IERyaXZlciBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgdGhhdCB0aGUgYG1seDVfY21kX2V4ZWNgIGNhbGwgd2FzIHJlbW92ZWQuIEkgcmVhbGl6ZWQgaXQgd2FzIHJlZHVuZGFudCBzaW5jZSBpdCB3YXMgYWxyZWFkeSBjYWxsZWQganVzdCBhYm92ZSBmb3IgdGhlIHNhbWUgYEhDQV9DQVBfT1BNT0RfR0VUX0NVUmAgb3BlcmF0aW9uLiBCdXQgdGhhdCdzIG5vdCB0aGUgY3JpdGljYWwgcG9pbnQgaGVyZS4gVGhpcyBpcyBhIE1lbGxhbm94IGRyaXZlciAoYG1seDVgKSwgYW5kIHRoYXQgcmFpc2VzIGEgcmVkIGZsYWcgaW1tZWRpYXRlbHkuIEl0J3MgYSBTbWFydE5JQyBkcml2ZXIsIG1lYW5pbmcgaXQgbmVlZHMgKnBoeXNpY2FsKiBNZWxsYW5veCBoYXJkd2FyZSAobGlrZSBhIENvbm5lY3RYLTUgb3IgbGF0ZXIpIHRvIGZ1bmN0aW9uLCBhbmQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhhdC5cblxuVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHN0YXRlIHRvIGF2b2lkIHBhdGNoZXMgdGhhdCB0b3VjaCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUsIHNwZWNpZmljYWxseSBtZW50aW9uaW5nIFNtYXJ0TklDIGRyaXZlcnMgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLiBgbWx4NWAgaXMgcmlnaHQgaW4gdGhhdCBjYXRlZ29yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSwgc28gSSB3aWxsIGRvdWJsZSBjaGVjaywgYnV0IFFFTVUgZGVmaW5pdGVseSBkb2VzIG5vdCBlbXVsYXRlIE1lbGxhbm94IGBtbHg1YC4gSXQgaGFzIGJhc2ljIGVtdWxhdGVkIG5ldHdvcmsgY2FyZHMsIHN1cmUsIGxpa2UgZTEwMDAsIHJ0bDgxMzksIHZpcnRpby1uZXQsIHZteG5ldDMsIGlnYiwgZXRjLiBCdXQgbm90IGBtbHg1YC5cblxuQWxyaWdodCwgSSBjb25maXJtLCBpdCdzIGEgTWVsbGFub3ggU21hcnROSUMgZHJpdmVyLCBzbyBpdCBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIFwic2tpcFwiIGNyaXRlcmlhLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGNoZWNrIHRvIHNlZSB3aGF0IGVsc2UgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNgLiBCb3RoIG9mIHRoZXNlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGBtbHg1YCBkaXJlY3RvcnksIHdoaWNoIGlzIGNsZWFyIGNvbmZpcm1hdGlvbi5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBvbmx5IG1vZGlmeWluZyBjb2RlIHdpdGhpbiB0aGUgTWVsbGFub3ggYG1seDVgIGRyaXZlci4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gVGhlIGZ1enplciB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIGFueSBvZiB0aGUgbW9kaWZpZWQgY29kZSBwYXRocywgc28gaXQncyBhIHdhc3RlIG9mIHJlc291cmNlcyB0byBzcGVuZCBhbnkgdGltZSBmdXp6aW5nIHRoaXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA3LCJPdXRwdXRUb2tlbnMiOjEwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjI2LjE1Njc2OTk5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIEFzIGEgcmVzdWx0LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIEFzIGEgcmVzdWx0LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MjYuMTU2ODMwMzE5WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgdcsv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 09:42:08 +0000 UTC FinishedAt: 2026-08-10 09:45:27 +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+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIEFzIGEgcmVzdWx0LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEwYTk4OWUwMDYyMGJjODY5NjJmMmZmOWU3ZTMzZWZiZDMzYjliMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0MzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xuaW5kZXggOGZhZTkwMTAxNjUzZi4uNzc1ZGM1YzJkN2E2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcbkBAIC0zOTgsNyAmIzQzOzM5OCw2IEBAIGludCBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCB1cGRhdGVfbWV0aG9kLCBydGNfYXR0ci1cdTAwM2Vmd19nZW5fd3FlKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX2luZGV4X21vZGUsIHJ0Y19hdHRyLVx1MDAzZXVwZGF0ZV9pbmRleF9tb2RlKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgYWNjZXNzX2luZGV4X21vZGUsIHJ0Y19hdHRyLVx1MDAzZWFjY2Vzc19pbmRleF9tb2RlKTtcbi1cdE1MWDVfU0VUKHJ0YywgYXR0ciwgbnVtX2hhc2hfZGVmaW5lciwgcnRjX2F0dHItXHUwMDNlbnVtX2hhc2hfZGVmaW5lcik7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19kZXB0aCwgcnRjX2F0dHItXHUwMDNlbG9nX2RlcHRoKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbG9nX2hhc2hfc2l6ZSwgcnRjX2F0dHItXHUwMDNlbG9nX3NpemUpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCB0YWJsZV90eXBlLCBydGNfYXR0ci1cdTAwM2V0YWJsZV90eXBlKTtcbkBAIC02MTEsOSAmIzQzOzYxMCwxMSBAQCBpbnQgbWx4NWh3c19jbWRfc3RjX21vZGlmeShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcbiBcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgc2l6ZW9mKG91dCkpO1xuIFx0aWYgKHJldClcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtGYWlsZWQgdG8gbW9kaWZ5IFNUQyBGVyBhY3Rpb25fdHlwZSAlZFxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICBzdGNfYXR0ci1cdTAwM2VhY3Rpb25fdHlwZSk7XG4tXG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0ZhaWxlZCB0byBtb2RpZnkgU1RDIGFjdGlvbl90eXBlICVkLCBlcnIgJWQsIHN5bmRyb21lIDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIHN0Y19hdHRyLVx1MDAzZWFjdGlvbl90eXBlLCByZXQsXG4mIzQzO1x0XHRcdCAgICAgIE1MWDVfR0VUKGdlbmVyYWxfb2JqX291dF9jbWRfaGRyLFxuJiM0MztcdFx0XHRcdCAgICAgICBvdXQsIHN5bmRyb21lKSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMTgxLDEyICYjNDM7MTE4Miw2IEBAIGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIFx0XHRcdFx0XHRcdGNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLm1lcmdlZF9lc3dpdGNoKTtcbiBcdH1cbiBcbi1cdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O0ZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xcblwmIzM0Oyk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0c25wcmludGYoY2Fwcy1cdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVx1MDAzZWZ3X3ZlciksIFwmIzM0OyVkLiVkLiVkXCYjMzQ7LFxuIFx0XHQgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuaW5kZXggYWVkMDA5YWVjNGZlOC4uZjBjM2EyYmRhMGM3MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuQEAgLTM0NCw2ICYjNDM7MzQ0LDM2IEBAIGh3c19zZW5kX2VuZ2luZV91cGRhdGVfcnVsZV9yZXNpemUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3N0YXR1c190b19zdHJpbmcoZW51bSBtbHg1aHdzX3J1bGVfc3RhdHVzIHN0YXR1cylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc3RhdHVzKSB7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0NSRUFUSU5HOiByZXR1cm4gXCYjMzQ7Q1JFQVRJTkdcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HOiByZXR1cm4gXCYjMzQ7VVBEQVRJTkdcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HOiByZXR1cm4gXCYjMzQ7REVMRVRJTkdcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0ZBSUxJTkc6IHJldHVybiBcJiMzNDtGQUlMSU5HXCYjMzQ7O1xuJiM0MztcdGRlZmF1bHQ6IHJldHVybiBcJiMzNDtOQVwmIzM0OztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nKHU4IHN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChzdGF0ZSkge1xuJiM0MztcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9JRExFOiByZXR1cm4gXCYjMzQ7SURMRVwmIzM0OztcbiYjNDM7XHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORzogcmV0dXJuIFwmIzM0O1dSSVRJTkdcJiMzNDs7XG4mIzQzO1x0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HOiByZXR1cm4gXCYjMzQ7REVMRVRJTkdcJiMzNDs7XG4mIzQzO1x0ZGVmYXVsdDogcmV0dXJuIFwmIzM0O1VOS05PV05cJiMzNDs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcodTggc3luZHJvbWUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHN5bmRyb21lKSB7XG4mIzQzO1x0Y2FzZSAxOiByZXR1cm4gXCYjMzQ7U0VUX0ZMT1dfRkFJTFwmIzM0OztcbiYjNDM7XHRjYXNlIDI6IHJldHVybiBcJiMzNDtESVNBQkxFX0ZMT1dfRkFJTFwmIzM0OztcbiYjNDM7XHRkZWZhdWx0OiByZXR1cm4gXCYjMzQ7VU5LTk9XTlwmIzM0OztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG1seDVod3Nfc2VuZF9yaW5nX3ByaXYgKnByaXYsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG5AQCAtMzUyLDYgJiM0MzszODIsNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gcHJpdi1cdTAwM2VydWxlLVx1MDAzZW1hdGNoZXItXHUwMDNldGJsLVx1MDAzZWN0eDtcbiBcdHUzMiBvcGNvZGUgPSBjcWUgPyBnZXRfY3FlX29wY29kZShjcWUpIDogMDtcbiBcdHN0cnVjdCBtbHg1aHdzX3J1bGUgKnJ1bGUgPSBwcml2LVx1MDAzZXJ1bGU7XG4mIzQzO1x0dTggc3luZHJvbWU7XG4gXG4gXHQvKiBJZiBzb21ldGhpbmcgYmFkIGhhcHBlbnMgYW5kIGxvdHMgb2YgcnVsZXMgYXJlIGZhaWxpbmcsIHdlIGRvbiYjMzk7dFxuIFx0ICogd2FudCB0byBwb2xsdXRlIGRtZXNnLiBQcmludCBvbmx5IHRoZSBmaXJzdCBiYWQgY3FlIHBlciBlbmdpbmUsXG5AQCAtMzY0LDI2ICYjNDM7Mzk1LDE3IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXG4gXHRpZiAobWx4NWh3c19ydWxlX21vdmVfaW5fcHJvZ3Jlc3MocnVsZSkpXG4gXHRcdG1seDVod3NfZXJyKGN0eCxcbi1cdFx0XHQgICAgXCYjMzQ7LS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzLCB3cWVzIGxlZnQgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBcJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiBtb3ZpbmcgcnVsZTogcGhhc2UgJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORyA/IFwmIzM0O1dSSVRJTkdcJiMzNDsgOlxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfREVMRVRJTkcgPyBcJiMzNDtERUxFVElOR1wmIzM0OyA6XG4tXHRcdFx0ICAgIFwmIzM0O1VOS05PV05cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nXG4mIzQzO1x0XHRcdFx0KHJ1bGUtXHUwMDNlcmVzaXplX2luZm8tXHUwMDNlc3RhdGUpLFxuJiM0MztcdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSxcbiBcdFx0XHQgICAgcnVsZS1cdTAwM2VwZW5kaW5nX3dxZXMpO1xuIFx0ZWxzZVxuIFx0XHRtbHg1aHdzX2VycihjdHgsXG4gXHRcdFx0ICAgIFwmIzM0Oy0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uICVzICglZCksIHdxZXMgbGVmdCAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORyA/IFwmIzM0O0NSRUFUSU5HXCYjMzQ7IDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORyA/IFwmIzM0O0RFTEVUSU5HXCYjMzQ7IDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HID8gXCYjMzQ7RkFJTElOR1wmIzM0OyA6XG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkcgPyBcJiMzNDtVUERBVElOR1wmIzM0OyA6IFwmIzM0O05BXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhydWxlLVx1MDAzZXN0YXR1cyksXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzLFxuIFx0XHRcdCAgICBydWxlLVx1MDAzZXBlbmRpbmdfd3Flcyk7XG4gXG5AQCAtNDIzLDYgJiM0Mzs0NDUsMTUgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdFx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIHN5bmRyb21lID0gMHgleFxcblwmIzM0OyxcbiBcdFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbiBcdFx0XHQgICAgZXJyX2NxZS1cdTAwM2VzeW5kcm9tZSk7XG4mIzQzO1x0XHRtbHg1aHdzX2VycihjdHgsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0gUVBOID0gMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4mIzQzO1x0XHRcdCAgICBiZTMyX3RvX2NwdShlcnJfY3FlLVx1MDAzZXNfd3FlX29wY29kZV9xcG4pIFx1MDAyNlxuJiM0MztcdFx0XHRcdFx0MHhmZmZmZmYpO1xuJiM0MztcdFx0bWx4NWh3c19lcnIoY3R4LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIFdRRV9DTlQgPSAweCUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuJiM0MztcdFx0XHQgICAgKHUzMiliZTE2X3RvX2NwdShlcnJfY3FlLVx1MDAzZXdxZV9jb3VudGVyKSk7XG4gXHR9XG4gXG4gXHRtbHg1aHdzX2VycihjdHgsXG5AQCAtNDMzLDEzICYjNDM7NDY0LDEyIEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuIFx0XHQgICAgKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4ODAwMDAwMDApID9cbiBcdFx0ICAgIFwmIzM0O0ZBSUxVUkVcJiMzNDsgOiBcJiMzNDtTVUNDRVNTXCYjMzQ7KTtcbiYjNDM7XHQvKiBzeW5kcm9tZSBpcyBpbiB0aGUgbG93ZXIgMiBiaXRzIG9mIGJ5dGVfY250ICovXG4mIzQzO1x0c3luZHJvbWUgPSBiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAzO1xuIFx0bWx4NWh3c19lcnIoY3R4LFxuLVx0XHQgICAgXCYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgIFwmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlcyAoJXUpXFxuXCYjMzQ7LFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcbi1cdFx0ICAgICgoYmUzMl90b19jcHUoY3FlLVx1MDAzZWJ5dGVfY250KSBcdTAwMjYgMHgwMDAwMDAwMykgPT0gMSkgP1xuLVx0XHQgICAgXCYjMzQ7U0VUX0ZMT1dfRkFJTFwmIzM0OyA6XG4tXHRcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4MDAwMDAwMDMpID09IDIpID9cbi1cdFx0ICAgIFwmIzM0O0RJU0FCTEVfRkxPV19GQUlMXCYjMzQ7IDogXCYjMzQ7VU5LTk9XTlwmIzM0Oyk7XG4mIzQzO1x0XHQgICAgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcoc3luZHJvbWUpLCBzeW5kcm9tZSk7XG4gXHRtbHg1aHdzX2VycihjdHgsXG4gXHRcdCAgICBcJiMzNDsgICAgcnVsZSAweCUwOGxseDogY3FlLVx1MDAzZXNvcF9kcm9wX3FwbiAgPSAweCUwOHhcXG5cJiMzNDssXG4gXHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLCBiZTMyX3RvX2NwdShjcWUtXHUwMDNlc29wX2Ryb3BfcXBuKSk7XG5AQCAtMTA5MSw4ICYjNDM7MTEyMSw2IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiBcdGlmICghbWx4NWh3c19jb250ZXh0X2J3Y19zdXBwb3J0ZWQoY3R4KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRjdHgtXHUwMDNlcXVldWVzICYjNDM7PSBid2NfcXVldWVzO1xuLVxuIFx0Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MsXG4gXHRcdFx0XHRcdFx0IGJ3Y19xdWV1ZXMpO1xuIFxuQEAgLTExMDQsNiAmIzQzOzExMzIsOCBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXG4gXHRpZiAoIWN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzKVxuIFx0XHRnb3RvIGVycl9sb2NrX2NsYXNzX2tleXM7XG4gXG4mIzQzO1x0Y3R4LVx1MDAzZXF1ZXVlcyAmIzQzOz0gYndjX3F1ZXVlcztcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBid2NfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRtdXRleF9pbml0KFx1MDAyNmN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7XG4gXHRcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KGN0eC1cdTAwM2Vid2NfbG9ja19jbGFzc19rZXlzICYjNDM7IGkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTbWFydE5JQyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gQXMgYSByZXN1bHQsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTBhOTg5ZTAwNjIwYmM4Njk2MmYyZmY5ZTdlMzNlZmJkMzNiOWIwMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDA5OjQzOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMKaW5kZXggOGZhZTkwMTAxNjUzZi4uNzc1ZGM1YzJkN2E2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jCkBAIC0zOTgsNyAmIzQzOzM5OCw2IEBAIGludCBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LAogCU1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX21ldGhvZCwgcnRjX2F0dHItJmd0O2Z3X2dlbl93cWUpOwogCU1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX2luZGV4X21vZGUsIHJ0Y19hdHRyLSZndDt1cGRhdGVfaW5kZXhfbW9kZSk7CiAJTUxYNV9TRVQocnRjLCBhdHRyLCBhY2Nlc3NfaW5kZXhfbW9kZSwgcnRjX2F0dHItJmd0O2FjY2Vzc19pbmRleF9tb2RlKTsKLQlNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLSZndDtudW1faGFzaF9kZWZpbmVyKTsKIAlNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19kZXB0aCwgcnRjX2F0dHItJmd0O2xvZ19kZXB0aCk7CiAJTUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfaGFzaF9zaXplLCBydGNfYXR0ci0mZ3Q7bG9nX3NpemUpOwogCU1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItJmd0O3RhYmxlX3R5cGUpOwpAQCAtNjExLDkgJiM0Mzs2MTAsMTEgQEAgaW50IG1seDVod3NfY21kX3N0Y19tb2RpZnkoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsCiAKIAlyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIHNpemVvZihvdXQpKTsKIAlpZiAocmV0KQotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7RmFpbGVkIHRvIG1vZGlmeSBTVEMgRlcgYWN0aW9uX3R5cGUgJWRcbiYjMzQ7LAotCQkJICAgICAgc3RjX2F0dHItJmd0O2FjdGlvbl90eXBlKTsKLQomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LAomIzQzOwkJCSAgICAgICYjMzQ7RmFpbGVkIHRvIG1vZGlmeSBTVEMgYWN0aW9uX3R5cGUgJWQsIGVyciAlZCwgc3luZHJvbWUgMHgleFxuJiMzNDssCiYjNDM7CQkJICAgICAgc3RjX2F0dHItJmd0O2FjdGlvbl90eXBlLCByZXQsCiYjNDM7CQkJICAgICAgTUxYNV9HRVQoZ2VuZXJhbF9vYmpfb3V0X2NtZF9oZHIsCiYjNDM7CQkJCSAgICAgICBvdXQsIHN5bmRyb21lKSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTE4MSwxMiAmIzQzOzExODIsNiBAQCBpbnQgbWx4NWh3c19jbWRfcXVlcnlfY2FwcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIAkJCQkJCWNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLm1lcmdlZF9lc3dpdGNoKTsKIAl9CiAKLQlyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTsKLQlpZiAocmV0KSB7Ci0JCW1seDVfY29yZV9lcnIobWRldiwgJiMzNDtGYWlsZWQgdG8gcXVlcnkgZGV2aWNlIGF0dHJpYnV0ZXNcbiYjMzQ7KTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJc25wcmludGYoY2Fwcy0mZ3Q7ZndfdmVyLCBzaXplb2YoY2Fwcy0mZ3Q7ZndfdmVyKSwgJiMzNDslZC4lZC4lZCYjMzQ7LAogCQkgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMKaW5kZXggYWVkMDA5YWVjNGZlOC4uZjBjM2EyYmRhMGM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmMKQEAgLTM0NCw2ICYjNDM7MzQ0LDM2IEBAIGh3c19zZW5kX2VuZ2luZV91cGRhdGVfcnVsZV9yZXNpemUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLAogCX0KIH0KIAomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nKGVudW0gbWx4NWh3c19ydWxlX3N0YXR1cyBzdGF0dXMpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHN0YXR1cykgewomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkc6IHJldHVybiAmIzM0O0NSRUFUSU5HJiMzNDs7CiYjNDM7CWNhc2UgTUxYNUhXU19SVUxFX1NUQVRVU19VUERBVElORzogcmV0dXJuICYjMzQ7VVBEQVRJTkcmIzM0OzsKJiM0MzsJY2FzZSBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HOiByZXR1cm4gJiMzNDtERUxFVElORyYjMzQ7OwomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORzogcmV0dXJuICYjMzQ7RkFJTElORyYjMzQ7OwomIzQzOwlkZWZhdWx0OiByZXR1cm4gJiMzNDtOQSYjMzQ7OwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nKHU4IHN0YXRlKQomIzQzO3sKJiM0MzsJc3dpdGNoIChzdGF0ZSkgewomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfSURMRTogcmV0dXJuICYjMzQ7SURMRSYjMzQ7OwomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORzogcmV0dXJuICYjMzQ7V1JJVElORyYjMzQ7OwomIzQzOwljYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfREVMRVRJTkc6IHJldHVybiAmIzM0O0RFTEVUSU5HJiMzNDs7CiYjNDM7CWRlZmF1bHQ6IHJldHVybiAmIzM0O1VOS05PV04mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcodTggc3luZHJvbWUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHN5bmRyb21lKSB7CiYjNDM7CWNhc2UgMTogcmV0dXJuICYjMzQ7U0VUX0ZMT1dfRkFJTCYjMzQ7OwomIzQzOwljYXNlIDI6IHJldHVybiAmIzM0O0RJU0FCTEVfRkxPV19GQUlMJiMzNDs7CiYjNDM7CWRlZmF1bHQ6IHJldHVybiAmIzM0O1VOS05PV04mIzM0OzsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsCiAJCQkJCSAgIHN0cnVjdCBtbHg1aHdzX3NlbmRfcmluZ19wcml2ICpwcml2LAogCQkJCQkgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKQpAQCAtMzUyLDYgJiM0MzszODIsNyBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLAogCXN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCA9IHByaXYtJmd0O3J1bGUtJmd0O21hdGNoZXItJmd0O3RibC0mZ3Q7Y3R4OwogCXUzMiBvcGNvZGUgPSBjcWUgPyBnZXRfY3FlX29wY29kZShjcWUpIDogMDsKIAlzdHJ1Y3QgbWx4NWh3c19ydWxlICpydWxlID0gcHJpdi0mZ3Q7cnVsZTsKJiM0MzsJdTggc3luZHJvbWU7CiAKIAkvKiBJZiBzb21ldGhpbmcgYmFkIGhhcHBlbnMgYW5kIGxvdHMgb2YgcnVsZXMgYXJlIGZhaWxpbmcsIHdlIGRvbiYjMzk7dAogCSAqIHdhbnQgdG8gcG9sbHV0ZSBkbWVzZy4gUHJpbnQgb25seSB0aGUgZmlyc3QgYmFkIGNxZSBwZXIgZW5naW5lLApAQCAtMzY0LDI2ICYjNDM7Mzk1LDE3IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsCiAKIAlpZiAobWx4NWh3c19ydWxlX21vdmVfaW5fcHJvZ3Jlc3MocnVsZSkpCiAJCW1seDVod3NfZXJyKGN0eCwKLQkJCSAgICAmIzM0Oy0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcywgd3FlcyBsZWZ0ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiBtb3ZpbmcgcnVsZTogcGhhc2UgJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXG4mIzM0OywKIAkJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLAotCQkJICAgIHJ1bGUtJmd0O3Jlc2l6ZV9pbmZvLSZndDtzdGF0ZSA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORyA/ICYjMzQ7V1JJVElORyYjMzQ7IDoKLQkJCSAgICBydWxlLSZndDtyZXNpemVfaW5mby0mZ3Q7c3RhdGUgPT0KLQkJCSAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HID8gJiMzNDtERUxFVElORyYjMzQ7IDoKLQkJCSAgICAmIzM0O1VOS05PV04mIzM0OywKJiM0MzsJCQkgICAgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZwomIzQzOwkJCQkocnVsZS0mZ3Q7cmVzaXplX2luZm8tJmd0O3N0YXRlKSwKJiM0MzsJCQkgICAgcnVsZS0mZ3Q7cmVzaXplX2luZm8tJmd0O3N0YXRlLAogCQkJICAgIHJ1bGUtJmd0O3BlbmRpbmdfd3Flcyk7CiAJZWxzZQogCQltbHg1aHdzX2VycihjdHgsCiAJCQkgICAgJiMzNDstLS0gcnVsZSAweCUwOGxseDogZXJyb3IgY29tcGxldGlvbiAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcbiYjMzQ7LAogCQkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCi0JCQkgICAgcnVsZS0mZ3Q7c3RhdHVzID09Ci0JCQkgICAgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORyA/ICYjMzQ7Q1JFQVRJTkcmIzM0OyA6Ci0JCQkgICAgcnVsZS0mZ3Q7c3RhdHVzID09Ci0JCQkgICAgTUxYNUhXU19SVUxFX1NUQVRVU19ERUxFVElORyA/ICYjMzQ7REVMRVRJTkcmIzM0OyA6Ci0JCQkgICAgcnVsZS0mZ3Q7c3RhdHVzID09Ci0JCQkgICAgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HID8gJiMzNDtGQUlMSU5HJiMzNDsgOgotCQkJICAgIHJ1bGUtJmd0O3N0YXR1cyA9PQotCQkJICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkcgPyAmIzM0O1VQREFUSU5HJiMzNDsgOiAmIzM0O05BJiMzNDssCiYjNDM7CQkJICAgIGh3c19ydWxlX3N0YXR1c190b19zdHJpbmcocnVsZS0mZ3Q7c3RhdHVzKSwKIAkJCSAgICBydWxlLSZndDtzdGF0dXMsCiAJCQkgICAgcnVsZS0mZ3Q7cGVuZGluZ193cWVzKTsKIApAQCAtNDIzLDYgJiM0Mzs0NDUsMTUgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSwKIAkJCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBzeW5kcm9tZSA9IDB4JXhcbiYjMzQ7LAogCQkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCiAJCQkgICAgZXJyX2NxZS0mZ3Q7c3luZHJvbWUpOwomIzQzOwkJbWx4NWh3c19lcnIoY3R4LAomIzQzOwkJCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBRUE4gPSAweCV4XG4mIzM0OywKJiM0MzsJCQkgICAgSFdTX1BUUl9UT19JRChydWxlKSwKJiM0MzsJCQkgICAgYmUzMl90b19jcHUoZXJyX2NxZS0mZ3Q7c193cWVfb3Bjb2RlX3FwbikgJmFtcDsKJiM0MzsJCQkJCTB4ZmZmZmZmKTsKJiM0MzsJCW1seDVod3NfZXJyKGN0eCwKJiM0MzsJCQkgICAgJiMzNDsgICAgcnVsZSAweCUwOGxseDogIHwtLS0gV1FFX0NOVCA9IDB4JTA0eFxuJiMzNDssCiYjNDM7CQkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCiYjNDM7CQkJICAgICh1MzIpYmUxNl90b19jcHUoZXJyX2NxZS0mZ3Q7d3FlX2NvdW50ZXIpKTsKIAl9CiAKIAltbHg1aHdzX2VycihjdHgsCkBAIC00MzMsMTMgJiM0Mzs0NjQsMTIgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSwKIAkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCiAJCSAgICAoYmUzMl90b19jcHUoY3FlLSZndDtieXRlX2NudCkgJmFtcDsgMHg4MDAwMDAwMCkgPwogCQkgICAgJiMzNDtGQUlMVVJFJiMzNDsgOiAmIzM0O1NVQ0NFU1MmIzM0Oyk7CiYjNDM7CS8qIHN5bmRyb21lIGlzIGluIHRoZSBsb3dlciAyIGJpdHMgb2YgYnl0ZV9jbnQgKi8KJiM0MzsJc3luZHJvbWUgPSBiZTMyX3RvX2NwdShjcWUtJmd0O2J5dGVfY250KSAmYW1wOyAzOwogCW1seDVod3NfZXJyKGN0eCwKLQkJICAgICYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzXG4mIzM0OywKJiM0MzsJCSAgICAmIzM0OyAgICBydWxlIDB4JTA4bGx4OiAgfC0tLS0tLS0gU1lORFJPTUUgPSAlcyAoJXUpXG4mIzM0OywKIAkJICAgIEhXU19QVFJfVE9fSUQocnVsZSksCi0JCSAgICAoKGJlMzJfdG9fY3B1KGNxZS0mZ3Q7Ynl0ZV9jbnQpICZhbXA7IDB4MDAwMDAwMDMpID09IDEpID8KLQkJICAgICYjMzQ7U0VUX0ZMT1dfRkFJTCYjMzQ7IDoKLQkJICAgICgoYmUzMl90b19jcHUoY3FlLSZndDtieXRlX2NudCkgJmFtcDsgMHgwMDAwMDAwMykgPT0gMikgPwotCQkgICAgJiMzNDtESVNBQkxFX0ZMT1dfRkFJTCYjMzQ7IDogJiMzNDtVTktOT1dOJiMzNDspOwomIzQzOwkJICAgIGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHN5bmRyb21lKSwgc3luZHJvbWUpOwogCW1seDVod3NfZXJyKGN0eCwKIAkJICAgICYjMzQ7ICAgIHJ1bGUgMHglMDhsbHg6IGNxZS0mZ3Q7c29wX2Ryb3BfcXBuICA9IDB4JTA4eFxuJiMzNDssCiAJCSAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLCBiZTMyX3RvX2NwdShjcWUtJmd0O3NvcF9kcm9wX3FwbikpOwpAQCAtMTA5MSw4ICYjNDM7MTEyMSw2IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eCkKIAlpZiAoIW1seDVod3NfY29udGV4dF9id2Nfc3VwcG9ydGVkKGN0eCkpCiAJCXJldHVybiAwOwogCi0JY3R4LSZndDtxdWV1ZXMgJiM0Mzs9IGJ3Y19xdWV1ZXM7Ci0KIAljdHgtJmd0O2J3Y19zZW5kX3F1ZXVlX2xvY2tzID0ga3phbGxvY19vYmpzKCpjdHgtJmd0O2J3Y19zZW5kX3F1ZXVlX2xvY2tzLAogCQkJCQkJIGJ3Y19xdWV1ZXMpOwogCkBAIC0xMTA0LDYgJiM0MzsxMTMyLDggQEAgc3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KQogCWlmICghY3R4LSZndDtid2NfbG9ja19jbGFzc19rZXlzKQogCQlnb3RvIGVycl9sb2NrX2NsYXNzX2tleXM7CiAKJiM0MzsJY3R4LSZndDtxdWV1ZXMgJiM0Mzs9IGJ3Y19xdWV1ZXM7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGJ3Y19xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiAJCW11dGV4X2luaXQoJmFtcDtjdHgtJmd0O2J3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTsKIAkJbG9ja2RlcF9yZWdpc3Rlcl9rZXkoY3R4LSZndDtid2NfbG9ja19jbGFzc19rZXlzICYjNDM7IGkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTAyCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBNZWxsYW5veCBtbHg1IEhXUyBDb21tYW5kIGFuZCBTZW5kIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBtbHg1YCBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBgaHdzYCAoSGFyZHdhcmUgU3RlZXJpbmcpIHN1Yi1jb21wb25lbnRzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSYjMzk7cyBhIG1peCBvZiBjbGVhbi11cCBhbmQgYnVnIGZpeGVzLCB3aGljaCBpcyB0eXBpY2FsIGZvciB0aGVzZSBraW5kcyBvZiBsb3ctbGV2ZWwgZHJpdmVyIHVwZGF0ZXMuCgpGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBjbWQuY2AgY2hhbmdlcy4gSSBzZWUgc29tZSBtb2RpZmljYXRpb25zIGluIGBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlYCwgYnV0IEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IGNvbmNlcm5lZCwgcmVtb3ZpbmcgYE1MWDVfU0VUYCBoZXJlIGFuZCB0aGVyZSBpcyBub3QgbmV3IGFuZCB1bnVzdWFsLiBUaGVuLCBpbiBgbWx4NWh3c19jbWRfc3RjX21vZGlmeWAsIGl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZGluZyBtb3JlIGRldGFpbCB0byB0aGUgZXJyb3IgbG9ncyB3aGljaCBpcyBhbHdheXMgZ29vZCBmb3IgZGVidWdnaW5nLgoKVGhlIG1vc3QgaW50ZXJlc3RpbmcgY2hhbmdlLCBhbmQgdGhlIG9uZSB0aGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLCBpcyB0aGUgcmVtb3ZhbCBvZiBhIGBtbHg1X2NtZF9leGVjYCBjYWxsIGFuZCBpdHMgYXNzb2NpYXRlZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gYG1seDVod3NfY21kX3F1ZXJ5X2NhcHNgLiBUaGlzIGlzIHVuZXhwZWN0ZWQhIEl0IGltcGxpZXMgYSByZWZhY3RvcmluZyBvciBvcHRpbWl6YXRpb24gb2YgaG93IGNhcGFiaWxpdGllcyBhcmUgcXVlcmllZC4gSXQmIzM5O3Mgbm90IGEgY29tbW9uIG9jY3VycmVuY2UgdG8ganVzdCAqcmVtb3ZlKiBhIGNvbW1hbmQgZXhlY3V0aW9uLCBzbyBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBxdWVyeWluZyBjYXBzIG5vdy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGRpdmluZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy4KCk5vdywgc3dpdGNoaW5nIGdlYXJzIHRvIGBzZW5kLmNgLCB0aGluZ3MgYXJlIGEgYml0IG1vcmUgc3RyYWlnaHRmb3J3YXJkLiBXZSYjMzk7dmUgZ290IHRoZSBhZGRpdGlvbiBvZiBoZWxwZXIgZnVuY3Rpb25zIGxpa2UgYGh3c19ydWxlX3N0YXR1c190b19zdHJpbmdgLCBgaHdzX3J1bGVfcmVzaXplX3N0YXRlX3RvX3N0cmluZ2AsIGFuZCBgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmdgLiBUaGlzIGlzIGEgY2xlYXIgaW1wcm92ZW1lbnQgZm9yIGxvZ2dpbmcsIG1ha2luZyBpdCBlYXNpZXIgdG8gZGVjaXBoZXIgZXJyb3IgY29kZXMgYW5kIHN0YXRlcyBpbiB0aGUgYGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZWAgZnVuY3Rpb24uCgpJIHNlZSBhIG1vcmUgc3RhbmRhcmQgYnVnIGZpeCBhcyB3ZWxsLCBzcGVjaWZpY2FsbHkgbW92aW5nIGBjdHgtJmd0O3F1ZXVlcyAmIzQzOz0gYndjX3F1ZXVlcztgIGluIGBod3NfYndjX3NlbmRfcXVldWVzX2luaXRgLiBUaGlzIGlzIGEgcG90ZW50aWFsIG51bGwtcG9pbnRlciBpc3N1ZSB0aGF0IEkmIzM5O3ZlIHNlZW4gYmVmb3JlLCBpbmNyZW1lbnRpbmcgYSBjb3VudCAqYmVmb3JlKiBhbGxvY2F0aW9uIGNhbiBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBpZiBhbGxvY2F0aW9uIGZhaWxzLgoKQmFjayB0byBgY21kLmNgIGFuZCB0aGlzIHJlbW92ZWQgYG1seDVfY21kX2V4ZWNgIGNhbGwuIExldCYjMzk7cyBzZWUuLi5JIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IGhlcmUuLi4gYWgsIG9rYXksIEkgY2FuIHNlZSB0aGUgZGlmZi4gVGhlIGNvbW1hbmQgZXhlY3V0aW9uIGlzIGNvbXBsZXRlbHkgZ29uZS4gSSYjMzk7bSBnb2luZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jYC4gSXMgdGhlcmUgYW5vdGhlciB3YXkgdG8gcXVlcnkgY2Fwcz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTA6XHRcdFx0XHQgTUxYNV9HRVRfSENBX0NBUF9PUF9NT0RfRVNXX0ZMT1dfVEFCTEUgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xuMTE1MTpcdFxuMTE1MjpcdFx0XHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcbjExNTM6XHRcdFx0aWYgKHJldCkge1xuMTE1NDpcdFx0XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGZsb3cgdGFibGUgZXN3IGNhcHNcXG5cJiMzNDspO1xuMTE1NTpcdFx0XHRcdGdvdG8gb3V0O1xuMTE1NjpcdFx0XHR9XG4xMTU3Olx0XG4xMTU4Olx0XHRcdGNhcHMtXHUwMDNlZmRiX2Z0Lm1heF9sZXZlbCA9XG4xMTU5Olx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNjA6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUubWF4X2Z0X2xldmVsKTtcbjExNjE6XHRcbjExNjI6XHRcdFx0Y2Fwcy1cdTAwM2VmZGJfZnQucmVwYXJzZSA9XG4xMTYzOlx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNjQ6XHRcdFx0XHRcdCBjYXBhYmlsaXR5LmZsb3dfdGFibGVfbmljX2NhcC5mbG93X3RhYmxlX3Byb3BlcnRpZXNfbmljX3JlY2VpdmUucmVwYXJzZSk7XG4xMTY1Olx0XG4xMTY2Olx0XHRcdE1MWDVfU0VUKHF1ZXJ5X2hjYV9jYXBfaW4sIGluLCBvcF9tb2QsXG4xMTY3Olx0XHRcdFx0IE1MWDVfU0VUX0hDQV9DQVBfT1BfTU9EX0VTVyB8IEhDQV9DQVBfT1BNT0RfR0VUX0NVUik7XG4xMTY4Olx0XG4xMTY5Olx0XHRcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xuMTE3MDpcdFx0XHRpZiAocmV0KSB7XG4xMTcxOlx0XHRcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtGYWlsZWQgdG8gcXVlcnkgZXN3aXRjaCBjYXBhYmlsaXRpZXNcXG5cJiMzNDspO1xuMTE3MjpcdFx0XHRcdGdvdG8gb3V0O1xuMTE3MzpcdFx0XHR9XG4xMTc0Olx0XG4xMTc1Olx0XHRcdGlmIChNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE3NjpcdFx0XHRcdCAgICAgY2FwYWJpbGl0eS5lX3N3aXRjaF9jYXAuZXN3X21hbmFnZXJfdnBvcnRfbnVtYmVyX3ZhbGlkKSlcbjExNzc6XHRcdFx0XHRjYXBzLVx1MDAzZWVzd2l0Y2hfbWFuYWdlcl92cG9ydF9udW1iZXIgPVxuMTE3ODpcdFx0XHRcdFx0TUxYNV9HRVQocXVlcnlfaGNhX2NhcF9vdXQsIG91dCxcbjExNzk6XHRcdFx0XHRcdFx0IGNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLmVzd19tYW5hZ2VyX3Zwb3J0X251bWJlcik7XG4xMTgwOlx0XG4xMTgxOlx0XHRcdGNhcHMtXHUwMDNlbWVyZ2VkX2Vzd2l0Y2ggPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxuMTE4MjpcdFx0XHRcdFx0XHRcdGNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLm1lcmdlZF9lc3dpdGNoKTtcbjExODM6XHRcdH1cbjExODQ6XHRcbjExODU6XHRcdHNucHJpbnRmKGNhcHMtXHUwMDNlZndfdmVyLCBzaXplb2YoY2Fwcy1cdTAwM2Vmd192ZXIpLCBcJiMzNDslZC4lZC4lZFwmIzM0OyxcbjExODY6XHRcdFx0IGZ3X3Jldl9tYWoobWRldiksIGZ3X3Jldl9taW4obWRldiksIGZ3X3Jldl9zdWIobWRldikpO1xuMTE4NzpcdFxuMTE4ODpcdFx0Y2Fwcy1cdTAwM2Vpc19lY3BmID0gbWx4NV9jb3JlX2lzX2VjcGZfZXN3X21hbmFnZXIobWRldik7XG4xMTg5Olx0XG4xMTkwOlx0b3V0OlxuMTE5MTpcdFx0a2ZyZWUob3V0KTtcbjExOTI6XHRcdHJldHVybiByZXQ7XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdGludCBtbHg1aHdzX2NtZF9xdWVyeV9ndm1pKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCBib29sIG90aGVyX2Z1bmN0aW9uLFxuMTE5NjpcdFx0XHRcdCAgIHUxNiB2cG9ydF9udW1iZXIsIHUxNiAqZ3ZtaSlcbjExOTc6XHR7XG4xMTk4Olx0XHRpbnQgZXJyO1xuMTE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDcKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogNTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1mYWxzZTogTWVsbGFub3ggRHJpdmVyIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgdGhhdCB0aGUgYG1seDVfY21kX2V4ZWNgIGNhbGwgd2FzIHJlbW92ZWQuIEkgcmVhbGl6ZWQgaXQgd2FzIHJlZHVuZGFudCBzaW5jZSBpdCB3YXMgYWxyZWFkeSBjYWxsZWQganVzdCBhYm92ZSBmb3IgdGhlIHNhbWUgYEhDQV9DQVBfT1BNT0RfR0VUX0NVUmAgb3BlcmF0aW9uLiBCdXQgdGhhdCYjMzk7cyBub3QgdGhlIGNyaXRpY2FsIHBvaW50IGhlcmUuIFRoaXMgaXMgYSBNZWxsYW5veCBkcml2ZXIgKGBtbHg1YCksIGFuZCB0aGF0IHJhaXNlcyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LiBJdCYjMzk7cyBhIFNtYXJ0TklDIGRyaXZlciwgbWVhbmluZyBpdCBuZWVkcyAqcGh5c2ljYWwqIE1lbGxhbm94IGhhcmR3YXJlIChsaWtlIGEgQ29ubmVjdFgtNSBvciBsYXRlcikgdG8gZnVuY3Rpb24sIGFuZCBzdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhhdC4KClRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0byBhdm9pZCBwYXRjaGVzIHRoYXQgdG91Y2ggdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgbWVudGlvbmluZyBTbWFydE5JQyBkcml2ZXJzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gYG1seDVgIGlzIHJpZ2h0IGluIHRoYXQgY2F0ZWdvcnkuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHNvIEkgd2lsbCBkb3VibGUgY2hlY2ssIGJ1dCBRRU1VIGRlZmluaXRlbHkgZG9lcyBub3QgZW11bGF0ZSBNZWxsYW5veCBgbWx4NWAuIEl0IGhhcyBiYXNpYyBlbXVsYXRlZCBuZXR3b3JrIGNhcmRzLCBzdXJlLCBsaWtlIGUxMDAwLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCB2bXhuZXQzLCBpZ2IsIGV0Yy4gQnV0IG5vdCBgbWx4NWAuCgpBbHJpZ2h0LCBJIGNvbmZpcm0sIGl0JiMzOTtzIGEgTWVsbGFub3ggU21hcnROSUMgZHJpdmVyLCBzbyBpdCBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlICYjMzQ7c2tpcCYjMzQ7IGNyaXRlcmlhLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGNoZWNrIHRvIHNlZSB3aGF0IGVsc2UgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNgLiBCb3RoIG9mIHRoZXNlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGBtbHg1YCBkaXJlY3RvcnksIHdoaWNoIGlzIGNsZWFyIGNvbmZpcm1hdGlvbi4KCkluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgb25seSBtb2RpZnlpbmcgY29kZSB3aXRoaW4gdGhlIE1lbGxhbm94IGBtbHg1YCBkcml2ZXIuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBUaGUgZnV6emVyIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHJlYWNoIGFueSBvZiB0aGUgbW9kaWZpZWQgY29kZSBwYXRocywgc28gaXQmIzM5O3MgYSB3YXN0ZSBvZiByZXNvdXJjZXMgdG8gc3BlbmQgYW55IHRpbWUgZnV6emluZyB0aGlzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBBcyBhIHJlc3VsdCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBBcyBhIHJlc3VsdCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQzOjIxLjExMDMyMzkxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTA0NjUyMjQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBBcyBhIHJlc3VsdCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQzOjIxLjExMDMzMDI2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTg3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTBhOTg5ZTAwNjIwYmM4Njk2MmYyZmY5ZTdlMzNlZmJkMzNiOWIwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0MzoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xcbmluZGV4IDhmYWU5MDEwMTY1M2YuLjc3NWRjNWMyZDdhNmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNcXG5AQCAtMzk4LDcgKzM5OCw2IEBAIGludCBtbHg1aHdzX2NtZF9ydGNfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9tZXRob2QsIHJ0Y19hdHRyLVxcdTAwM2Vmd19nZW5fd3FlKTtcXG4gXFx0TUxYNV9TRVQocnRjLCBhdHRyLCB1cGRhdGVfaW5kZXhfbW9kZSwgcnRjX2F0dHItXFx1MDAzZXVwZGF0ZV9pbmRleF9tb2RlKTtcXG4gXFx0TUxYNV9TRVQocnRjLCBhdHRyLCBhY2Nlc3NfaW5kZXhfbW9kZSwgcnRjX2F0dHItXFx1MDAzZWFjY2Vzc19pbmRleF9tb2RlKTtcXG4tXFx0TUxYNV9TRVQocnRjLCBhdHRyLCBudW1faGFzaF9kZWZpbmVyLCBydGNfYXR0ci1cXHUwMDNlbnVtX2hhc2hfZGVmaW5lcik7XFxuIFxcdE1MWDVfU0VUKHJ0YywgYXR0ciwgbG9nX2RlcHRoLCBydGNfYXR0ci1cXHUwMDNlbG9nX2RlcHRoKTtcXG4gXFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfaGFzaF9zaXplLCBydGNfYXR0ci1cXHUwMDNlbG9nX3NpemUpO1xcbiBcXHRNTFg1X1NFVChydGMsIGF0dHIsIHRhYmxlX3R5cGUsIHJ0Y19hdHRyLVxcdTAwM2V0YWJsZV90eXBlKTtcXG5AQCAtNjExLDkgKzYxMCwxMSBAQCBpbnQgbWx4NWh3c19jbWRfc3RjX21vZGlmeShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcXG4gXFxuIFxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgc2l6ZW9mKG91dCkpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJGYWlsZWQgdG8gbW9kaWZ5IFNUQyBGVyBhY3Rpb25fdHlwZSAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgc3RjX2F0dHItXFx1MDAzZWFjdGlvbl90eXBlKTtcXG4tXFxuK1xcdFxcdG1seDVfY29yZV9lcnIobWRldixcXG4rXFx0XFx0XFx0ICAgICAgXFxcIkZhaWxlZCB0byBtb2RpZnkgU1RDIGFjdGlvbl90eXBlICVkLCBlcnIgJWQsIHN5bmRyb21lIDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIHN0Y19hdHRyLVxcdTAwM2VhY3Rpb25fdHlwZSwgcmV0LFxcbitcXHRcXHRcXHQgICAgICBNTFg1X0dFVChnZW5lcmFsX29ial9vdXRfY21kX2hkcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG91dCwgc3luZHJvbWUpKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTE4MSwxMiArMTE4Miw2IEBAIGludCBtbHg1aHdzX2NtZF9xdWVyeV9jYXBzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRjYXBhYmlsaXR5LmVfc3dpdGNoX2NhcC5tZXJnZWRfZXN3aXRjaCk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgb3V0X3NpemUpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBxdWVyeSBkZXZpY2UgYXR0cmlidXRlc1xcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbiBcXHRzbnByaW50ZihjYXBzLVxcdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVxcdTAwM2Vmd192ZXIpLCBcXFwiJWQuJWQuJWRcXFwiLFxcbiBcXHRcXHQgZndfcmV2X21haihtZGV2KSwgZndfcmV2X21pbihtZGV2KSwgZndfcmV2X3N1YihtZGV2KSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXFxuaW5kZXggYWVkMDA5YWVjNGZlOC4uZjBjM2EyYmRhMGM3MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jXFxuQEAgLTM0NCw2ICszNDQsMzYgQEAgaHdzX3NlbmRfZW5naW5lX3VwZGF0ZV9ydWxlX3Jlc2l6ZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3N0YXR1c190b19zdHJpbmcoZW51bSBtbHg1aHdzX3J1bGVfc3RhdHVzIHN0YXR1cylcXG4re1xcbitcXHRzd2l0Y2ggKHN0YXR1cykge1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkc6IHJldHVybiBcXFwiQ1JFQVRJTkdcXFwiO1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkc6IHJldHVybiBcXFwiVVBEQVRJTkdcXFwiO1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkc6IHJldHVybiBcXFwiREVMRVRJTkdcXFwiO1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORzogcmV0dXJuIFxcXCJGQUlMSU5HXFxcIjtcXG4rXFx0ZGVmYXVsdDogcmV0dXJuIFxcXCJOQVxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmcodTggc3RhdGUpXFxuK3tcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfSURMRTogcmV0dXJuIFxcXCJJRExFXFxcIjtcXG4rXFx0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkc6IHJldHVybiBcXFwiV1JJVElOR1xcXCI7XFxuK1xcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9ERUxFVElORzogcmV0dXJuIFxcXCJERUxFVElOR1xcXCI7XFxuK1xcdGRlZmF1bHQ6IHJldHVybiBcXFwiVU5LTk9XTlxcXCI7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nKHU4IHN5bmRyb21lKVxcbit7XFxuK1xcdHN3aXRjaCAoc3luZHJvbWUpIHtcXG4rXFx0Y2FzZSAxOiByZXR1cm4gXFxcIlNFVF9GTE9XX0ZBSUxcXFwiO1xcbitcXHRjYXNlIDI6IHJldHVybiBcXFwiRElTQUJMRV9GTE9XX0ZBSUxcXFwiO1xcbitcXHRkZWZhdWx0OiByZXR1cm4gXFxcIlVOS05PV05cXFwiO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1aHdzX3NlbmRfcmluZ19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbkBAIC0zNTIsNiArMzgyLDcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFx0c3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4ID0gcHJpdi1cXHUwMDNlcnVsZS1cXHUwMDNlbWF0Y2hlci1cXHUwMDNldGJsLVxcdTAwM2VjdHg7XFxuIFxcdHUzMiBvcGNvZGUgPSBjcWUgPyBnZXRfY3FlX29wY29kZShjcWUpIDogMDtcXG4gXFx0c3RydWN0IG1seDVod3NfcnVsZSAqcnVsZSA9IHByaXYtXFx1MDAzZXJ1bGU7XFxuK1xcdHU4IHN5bmRyb21lO1xcbiBcXG4gXFx0LyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIGFuZCBsb3RzIG9mIHJ1bGVzIGFyZSBmYWlsaW5nLCB3ZSBkb24ndFxcbiBcXHQgKiB3YW50IHRvIHBvbGx1dGUgZG1lc2cuIFByaW50IG9ubHkgdGhlIGZpcnN0IGJhZCBjcWUgcGVyIGVuZ2luZSxcXG5AQCAtMzY0LDI2ICszOTUsMTcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcXG4gXFxuIFxcdGlmIChtbHg1aHdzX3J1bGVfbW92ZV9pbl9wcm9ncmVzcyhydWxlKSlcXG4gXFx0XFx0bWx4NWh3c19lcnIoY3R4LFxcbi1cXHRcXHRcXHQgICAgXFxcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcywgd3FlcyBsZWZ0ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgXFxcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcyAoJWQpLCB3cWVzIGxlZnQgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbi1cXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcmVzaXplX2luZm8tXFx1MDAzZXN0YXRlID09XFxuLVxcdFxcdFxcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX1dSSVRJTkcgPyBcXFwiV1JJVElOR1xcXCIgOlxcbi1cXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcmVzaXplX2luZm8tXFx1MDAzZXN0YXRlID09XFxuLVxcdFxcdFxcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HID8gXFxcIkRFTEVUSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBcXFwiVU5LTk9XTlxcXCIsXFxuK1xcdFxcdFxcdCAgICBod3NfcnVsZV9yZXNpemVfc3RhdGVfdG9fc3RyaW5nXFxuK1xcdFxcdFxcdFxcdChydWxlLVxcdTAwM2VyZXNpemVfaW5mby1cXHUwMDNlc3RhdGUpLFxcbitcXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcmVzaXplX2luZm8tXFx1MDAzZXN0YXRlLFxcbiBcXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlcGVuZGluZ193cWVzKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRtbHg1aHdzX2VycihjdHgsXFxuIFxcdFxcdFxcdCAgICBcXFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4tXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXN0YXR1cyA9PVxcbi1cXHRcXHRcXHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19DUkVBVElORyA/IFxcXCJDUkVBVElOR1xcXCIgOlxcbi1cXHRcXHRcXHQgICAgcnVsZS1cXHUwMDNlc3RhdHVzID09XFxuLVxcdFxcdFxcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HID8gXFxcIkRFTEVUSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VzdGF0dXMgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORyA/IFxcXCJGQUlMSU5HXFxcIiA6XFxuLVxcdFxcdFxcdCAgICBydWxlLVxcdTAwM2VzdGF0dXMgPT1cXG4tXFx0XFx0XFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkcgPyBcXFwiVVBEQVRJTkdcXFwiIDogXFxcIk5BXFxcIixcXG4rXFx0XFx0XFx0ICAgIGh3c19ydWxlX3N0YXR1c190b19zdHJpbmcocnVsZS1cXHUwMDNlc3RhdHVzKSxcXG4gXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXN0YXR1cyxcXG4gXFx0XFx0XFx0ICAgIHJ1bGUtXFx1MDAzZXBlbmRpbmdfd3Flcyk7XFxuIFxcbkBAIC00MjMsNiArNDQ1LDE1IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXFxuIFxcdFxcdFxcdCAgICBcXFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIHN5bmRyb21lID0gMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXFxuIFxcdFxcdFxcdCAgICBlcnJfY3FlLVxcdTAwM2VzeW5kcm9tZSk7XFxuK1xcdFxcdG1seDVod3NfZXJyKGN0eCxcXG4rXFx0XFx0XFx0ICAgIFxcXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0gUVBOID0gMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXFxuK1xcdFxcdFxcdCAgICBiZTMyX3RvX2NwdShlcnJfY3FlLVxcdTAwM2VzX3dxZV9vcGNvZGVfcXBuKSBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdDB4ZmZmZmZmKTtcXG4rXFx0XFx0bWx4NWh3c19lcnIoY3R4LFxcbitcXHRcXHRcXHQgICAgXFxcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBXUUVfQ05UID0gMHglMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4rXFx0XFx0XFx0ICAgICh1MzIpYmUxNl90b19jcHUoZXJyX2NxZS1cXHUwMDNld3FlX2NvdW50ZXIpKTtcXG4gXFx0fVxcbiBcXG4gXFx0bWx4NWh3c19lcnIoY3R4LFxcbkBAIC00MzMsMTMgKzQ2NCwxMiBAQCBzdGF0aWMgdm9pZCBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxcbiBcXHRcXHQgICAgSFdTX1BUUl9UT19JRChydWxlKSxcXG4gXFx0XFx0ICAgIChiZTMyX3RvX2NwdShjcWUtXFx1MDAzZWJ5dGVfY250KSBcXHUwMDI2IDB4ODAwMDAwMDApID9cXG4gXFx0XFx0ICAgIFxcXCJGQUlMVVJFXFxcIiA6IFxcXCJTVUNDRVNTXFxcIik7XFxuK1xcdC8qIHN5bmRyb21lIGlzIGluIHRoZSBsb3dlciAyIGJpdHMgb2YgYnl0ZV9jbnQgKi9cXG4rXFx0c3luZHJvbWUgPSBiZTMyX3RvX2NwdShjcWUtXFx1MDAzZWJ5dGVfY250KSBcXHUwMDI2IDM7XFxuIFxcdG1seDVod3NfZXJyKGN0eCxcXG4tXFx0XFx0ICAgIFxcXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICBcXFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzICgldSlcXFxcblxcXCIsXFxuIFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxcbi1cXHRcXHQgICAgKChiZTMyX3RvX2NwdShjcWUtXFx1MDAzZWJ5dGVfY250KSBcXHUwMDI2IDB4MDAwMDAwMDMpID09IDEpID9cXG4tXFx0XFx0ICAgIFxcXCJTRVRfRkxPV19GQUlMXFxcIiA6XFxuLVxcdFxcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cXHUwMDNlYnl0ZV9jbnQpIFxcdTAwMjYgMHgwMDAwMDAwMykgPT0gMikgP1xcbi1cXHRcXHQgICAgXFxcIkRJU0FCTEVfRkxPV19GQUlMXFxcIiA6IFxcXCJVTktOT1dOXFxcIik7XFxuK1xcdFxcdCAgICBod3NfZ3RhX3N5bmRyb21lX3RvX3N0cmluZyhzeW5kcm9tZSksIHN5bmRyb21lKTtcXG4gXFx0bWx4NWh3c19lcnIoY3R4LFxcbiBcXHRcXHQgICAgXFxcIiAgICBydWxlIDB4JTA4bGx4OiBjcWUtXFx1MDAzZXNvcF9kcm9wX3FwbiAgPSAweCUwOHhcXFxcblxcXCIsXFxuIFxcdFxcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLCBiZTMyX3RvX2NwdShjcWUtXFx1MDAzZXNvcF9kcm9wX3FwbikpO1xcbkBAIC0xMDkxLDggKzExMjEsNiBAQCBzdGF0aWMgaW50IGh3c19id2Nfc2VuZF9xdWV1ZXNfaW5pdChzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHgpXFxuIFxcdGlmICghbWx4NWh3c19jb250ZXh0X2J3Y19zdXBwb3J0ZWQoY3R4KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRjdHgtXFx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO1xcbi1cXG4gXFx0Y3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyA9IGt6YWxsb2Nfb2JqcygqY3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IGJ3Y19xdWV1ZXMpO1xcbiBcXG5AQCAtMTEwNCw2ICsxMTMyLDggQEAgc3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxcbiBcXHRpZiAoIWN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcXG4gXFx0XFx0Z290byBlcnJfbG9ja19jbGFzc19rZXlzO1xcbiBcXG4rXFx0Y3R4LVxcdTAwM2VxdWV1ZXMgKz0gYndjX3F1ZXVlcztcXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBid2NfcXVldWVzOyBpKyspIHtcXG4gXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3R4LVxcdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2Nrc1tpXSk7XFxuIFxcdFxcdGxvY2tkZXBfcmVnaXN0ZXJfa2V5KGN0eC1cXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cyArIGkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0MzoyMS41NjYxMzc2MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjQ1OTA2OTA2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS8pLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBBcyBhIHJlc3VsdCwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEwYTk4OWUwMDYyMGJjODY5NjJmMmZmOWU3ZTMzZWZiZDMzYjliMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0MzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXG5pbmRleCA4ZmFlOTAxMDE2NTNmLi43NzVkYzVjMmQ3YTZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9jbWQuY1xuQEAgLTM5OCw3ICszOTgsNiBAQCBpbnQgbWx4NWh3c19jbWRfcnRjX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdXBkYXRlX21ldGhvZCwgcnRjX2F0dHItXHUwMDNlZndfZ2VuX3dxZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIHVwZGF0ZV9pbmRleF9tb2RlLCBydGNfYXR0ci1cdTAwM2V1cGRhdGVfaW5kZXhfbW9kZSk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGFjY2Vzc19pbmRleF9tb2RlLCBydGNfYXR0ci1cdTAwM2VhY2Nlc3NfaW5kZXhfbW9kZSk7XG4tXHRNTFg1X1NFVChydGMsIGF0dHIsIG51bV9oYXNoX2RlZmluZXIsIHJ0Y19hdHRyLVx1MDAzZW51bV9oYXNoX2RlZmluZXIpO1xuIFx0TUxYNV9TRVQocnRjLCBhdHRyLCBsb2dfZGVwdGgsIHJ0Y19hdHRyLVx1MDAzZWxvZ19kZXB0aCk7XG4gXHRNTFg1X1NFVChydGMsIGF0dHIsIGxvZ19oYXNoX3NpemUsIHJ0Y19hdHRyLVx1MDAzZWxvZ19zaXplKTtcbiBcdE1MWDVfU0VUKHJ0YywgYXR0ciwgdGFibGVfdHlwZSwgcnRjX2F0dHItXHUwMDNldGFibGVfdHlwZSk7XG5AQCAtNjExLDkgKzYxMCwxMSBAQCBpbnQgbWx4NWh3c19jbWRfc3RjX21vZGlmeShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcbiBcdHJldCA9IG1seDVfY21kX2V4ZWMobWRldiwgaW4sIHNpemVvZihpbiksIG91dCwgc2l6ZW9mKG91dCkpO1xuIFx0aWYgKHJldClcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcIkZhaWxlZCB0byBtb2RpZnkgU1RDIEZXIGFjdGlvbl90eXBlICVkXFxuXCIsXG4tXHRcdFx0ICAgICAgc3RjX2F0dHItXHUwMDNlYWN0aW9uX3R5cGUpO1xuLVxuK1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4rXHRcdFx0ICAgICAgXCJGYWlsZWQgdG8gbW9kaWZ5IFNUQyBhY3Rpb25fdHlwZSAlZCwgZXJyICVkLCBzeW5kcm9tZSAweCV4XFxuXCIsXG4rXHRcdFx0ICAgICAgc3RjX2F0dHItXHUwMDNlYWN0aW9uX3R5cGUsIHJldCxcbitcdFx0XHQgICAgICBNTFg1X0dFVChnZW5lcmFsX29ial9vdXRfY21kX2hkcixcbitcdFx0XHRcdCAgICAgICBvdXQsIHN5bmRyb21lKSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xMTgxLDEyICsxMTgyLDYgQEAgaW50IG1seDVod3NfY21kX3F1ZXJ5X2NhcHMoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXHRcdFx0XHRcdFx0Y2FwYWJpbGl0eS5lX3N3aXRjaF9jYXAubWVyZ2VkX2Vzd2l0Y2gpO1xuIFx0fVxuIFxuLVx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJGYWlsZWQgdG8gcXVlcnkgZGV2aWNlIGF0dHJpYnV0ZXNcXG5cIik7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0c25wcmludGYoY2Fwcy1cdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVx1MDAzZWZ3X3ZlciksIFwiJWQuJWQuJWRcIixcbiBcdFx0IGZ3X3Jldl9tYWoobWRldiksIGZ3X3Jldl9taW4obWRldiksIGZ3X3Jldl9zdWIobWRldikpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3Mvc2VuZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcbmluZGV4IGFlZDAwOWFlYzRmZTguLmYwYzNhMmJkYTBjNzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL3NlbmQuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNcbkBAIC0zNDQsNiArMzQ0LDM2IEBAIGh3c19zZW5kX2VuZ2luZV91cGRhdGVfcnVsZV9yZXNpemUoc3RydWN0IG1seDVod3Nfc2VuZF9lbmdpbmUgKnF1ZXVlLFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgY29uc3QgY2hhciAqaHdzX3J1bGVfc3RhdHVzX3RvX3N0cmluZyhlbnVtIG1seDVod3NfcnVsZV9zdGF0dXMgc3RhdHVzKVxuK3tcbitcdHN3aXRjaCAoc3RhdHVzKSB7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkc6IHJldHVybiBcIkNSRUFUSU5HXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfVVBEQVRJTkc6IHJldHVybiBcIlVQREFUSU5HXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfREVMRVRJTkc6IHJldHVybiBcIkRFTEVUSU5HXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9TVEFUVVNfRkFJTElORzogcmV0dXJuIFwiRkFJTElOR1wiO1xuK1x0ZGVmYXVsdDogcmV0dXJuIFwiTkFcIjtcbitcdH1cbit9XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKmh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmcodTggc3RhdGUpXG4re1xuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0lETEU6IHJldHVybiBcIklETEVcIjtcbitcdGNhc2UgTUxYNUhXU19SVUxFX1JFU0laRV9TVEFURV9XUklUSU5HOiByZXR1cm4gXCJXUklUSU5HXCI7XG4rXHRjYXNlIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfREVMRVRJTkc6IHJldHVybiBcIkRFTEVUSU5HXCI7XG4rXHRkZWZhdWx0OiByZXR1cm4gXCJVTktOT1dOXCI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpod3NfZ3RhX3N5bmRyb21lX3RvX3N0cmluZyh1OCBzeW5kcm9tZSlcbit7XG4rXHRzd2l0Y2ggKHN5bmRyb21lKSB7XG4rXHRjYXNlIDE6IHJldHVybiBcIlNFVF9GTE9XX0ZBSUxcIjtcbitcdGNhc2UgMjogcmV0dXJuIFwiRElTQUJMRV9GTE9XX0ZBSUxcIjtcbitcdGRlZmF1bHQ6IHJldHVybiBcIlVOS05PV05cIjtcbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG1seDVod3Nfc2VuZF9yaW5nX3ByaXYgKnByaXYsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG5AQCAtMzUyLDYgKzM4Miw3IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRzdHJ1Y3QgbWx4NWh3c19jb250ZXh0ICpjdHggPSBwcml2LVx1MDAzZXJ1bGUtXHUwMDNlbWF0Y2hlci1cdTAwM2V0YmwtXHUwMDNlY3R4O1xuIFx0dTMyIG9wY29kZSA9IGNxZSA/IGdldF9jcWVfb3Bjb2RlKGNxZSkgOiAwO1xuIFx0c3RydWN0IG1seDVod3NfcnVsZSAqcnVsZSA9IHByaXYtXHUwMDNlcnVsZTtcbitcdHU4IHN5bmRyb21lO1xuIFxuIFx0LyogSWYgc29tZXRoaW5nIGJhZCBoYXBwZW5zIGFuZCBsb3RzIG9mIHJ1bGVzIGFyZSBmYWlsaW5nLCB3ZSBkb24ndFxuIFx0ICogd2FudCB0byBwb2xsdXRlIGRtZXNnLiBQcmludCBvbmx5IHRoZSBmaXJzdCBiYWQgY3FlIHBlciBlbmdpbmUsXG5AQCAtMzY0LDI2ICszOTUsMTcgQEAgc3RhdGljIHZvaWQgaHdzX3NlbmRfZW5naW5lX2R1bXBfZXJyb3JfY3FlKHN0cnVjdCBtbHg1aHdzX3NlbmRfZW5naW5lICpxdWV1ZSxcbiBcbiBcdGlmIChtbHg1aHdzX3J1bGVfbW92ZV9pbl9wcm9ncmVzcyhydWxlKSlcbiBcdFx0bWx4NWh3c19lcnIoY3R4LFxuLVx0XHRcdCAgICBcIi0tLSBydWxlIDB4JTA4bGx4OiBlcnJvciBjb21wbGV0aW9uIG1vdmluZyBydWxlOiBwaGFzZSAlcywgd3FlcyBsZWZ0ICVkXFxuXCIsXG4rXHRcdFx0ICAgIFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gbW92aW5nIHJ1bGU6IHBoYXNlICVzICglZCksIHdxZXMgbGVmdCAlZFxcblwiLFxuIFx0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9SRVNJWkVfU1RBVEVfV1JJVElORyA/IFwiV1JJVElOR1wiIDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfUkVTSVpFX1NUQVRFX0RFTEVUSU5HID8gXCJERUxFVElOR1wiIDpcbi1cdFx0XHQgICAgXCJVTktOT1dOXCIsXG4rXHRcdFx0ICAgIGh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmdcbitcdFx0XHRcdChydWxlLVx1MDAzZXJlc2l6ZV9pbmZvLVx1MDAzZXN0YXRlKSxcbitcdFx0XHQgICAgcnVsZS1cdTAwM2VyZXNpemVfaW5mby1cdTAwM2VzdGF0ZSxcbiBcdFx0XHQgICAgcnVsZS1cdTAwM2VwZW5kaW5nX3dxZXMpO1xuIFx0ZWxzZVxuIFx0XHRtbHg1aHdzX2VycihjdHgsXG4gXHRcdFx0ICAgIFwiLS0tIHJ1bGUgMHglMDhsbHg6IGVycm9yIGNvbXBsZXRpb24gJXMgKCVkKSwgd3FlcyBsZWZ0ICVkXFxuXCIsXG4gXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4tXHRcdFx0ICAgIHJ1bGUtXHUwMDNlc3RhdHVzID09XG4tXHRcdFx0ICAgIE1MWDVIV1NfUlVMRV9TVEFUVVNfQ1JFQVRJTkcgPyBcIkNSRUFUSU5HXCIgOlxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX0RFTEVUSU5HID8gXCJERUxFVElOR1wiIDpcbi1cdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMgPT1cbi1cdFx0XHQgICAgTUxYNUhXU19SVUxFX1NUQVRVU19GQUlMSU5HID8gXCJGQUlMSU5HXCIgOlxuLVx0XHRcdCAgICBydWxlLVx1MDAzZXN0YXR1cyA9PVxuLVx0XHRcdCAgICBNTFg1SFdTX1JVTEVfU1RBVFVTX1VQREFUSU5HID8gXCJVUERBVElOR1wiIDogXCJOQVwiLFxuK1x0XHRcdCAgICBod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nKHJ1bGUtXHUwMDNlc3RhdHVzKSxcbiBcdFx0XHQgICAgcnVsZS1cdTAwM2VzdGF0dXMsXG4gXHRcdFx0ICAgIHJ1bGUtXHUwMDNlcGVuZGluZ193cWVzKTtcbiBcbkBAIC00MjMsNiArNDQ1LDE1IEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdFx0ICAgIFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tIHN5bmRyb21lID0gMHgleFxcblwiLFxuIFx0XHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuIFx0XHRcdCAgICBlcnJfY3FlLVx1MDAzZXN5bmRyb21lKTtcbitcdFx0bWx4NWh3c19lcnIoY3R4LFxuK1x0XHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBRUE4gPSAweCV4XFxuXCIsXG4rXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4rXHRcdFx0ICAgIGJlMzJfdG9fY3B1KGVycl9jcWUtXHUwMDNlc193cWVfb3Bjb2RlX3FwbikgXHUwMDI2XG4rXHRcdFx0XHRcdDB4ZmZmZmZmKTtcbitcdFx0bWx4NWh3c19lcnIoY3R4LFxuK1x0XHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiAgfC0tLSBXUUVfQ05UID0gMHglMDR4XFxuXCIsXG4rXHRcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4rXHRcdFx0ICAgICh1MzIpYmUxNl90b19jcHUoZXJyX2NxZS1cdTAwM2V3cWVfY291bnRlcikpO1xuIFx0fVxuIFxuIFx0bWx4NWh3c19lcnIoY3R4LFxuQEAgLTQzMywxMyArNDY0LDEyIEBAIHN0YXRpYyB2b2lkIGh3c19zZW5kX2VuZ2luZV9kdW1wX2Vycm9yX2NxZShzdHJ1Y3QgbWx4NWh3c19zZW5kX2VuZ2luZSAqcXVldWUsXG4gXHRcdCAgICBIV1NfUFRSX1RPX0lEKHJ1bGUpLFxuIFx0XHQgICAgKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4ODAwMDAwMDApID9cbiBcdFx0ICAgIFwiRkFJTFVSRVwiIDogXCJTVUNDRVNTXCIpO1xuK1x0Lyogc3luZHJvbWUgaXMgaW4gdGhlIGxvd2VyIDIgYml0cyBvZiBieXRlX2NudCAqL1xuK1x0c3luZHJvbWUgPSBiZTMyX3RvX2NwdShjcWUtXHUwMDNlYnl0ZV9jbnQpIFx1MDAyNiAzO1xuIFx0bWx4NWh3c19lcnIoY3R4LFxuLVx0XHQgICAgXCIgICAgcnVsZSAweCUwOGxseDogIHwtLS0tLS0tIFNZTkRST01FID0gJXNcXG5cIixcbitcdFx0ICAgIFwiICAgIHJ1bGUgMHglMDhsbHg6ICB8LS0tLS0tLSBTWU5EUk9NRSA9ICVzICgldSlcXG5cIixcbiBcdFx0ICAgIEhXU19QVFJfVE9fSUQocnVsZSksXG4tXHRcdCAgICAoKGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VieXRlX2NudCkgXHUwMDI2IDB4MDAwMDAwMDMpID09IDEpID9cbi1cdFx0ICAgIFwiU0VUX0ZMT1dfRkFJTFwiIDpcbi1cdFx0ICAgICgoYmUzMl90b19jcHUoY3FlLVx1MDAzZWJ5dGVfY250KSBcdTAwMjYgMHgwMDAwMDAwMykgPT0gMikgP1xuLVx0XHQgICAgXCJESVNBQkxFX0ZMT1dfRkFJTFwiIDogXCJVTktOT1dOXCIpO1xuK1x0XHQgICAgaHdzX2d0YV9zeW5kcm9tZV90b19zdHJpbmcoc3luZHJvbWUpLCBzeW5kcm9tZSk7XG4gXHRtbHg1aHdzX2VycihjdHgsXG4gXHRcdCAgICBcIiAgICBydWxlIDB4JTA4bGx4OiBjcWUtXHUwMDNlc29wX2Ryb3BfcXBuICA9IDB4JTA4eFxcblwiLFxuIFx0XHQgICAgSFdTX1BUUl9UT19JRChydWxlKSwgYmUzMl90b19jcHUoY3FlLVx1MDAzZXNvcF9kcm9wX3FwbikpO1xuQEAgLTEwOTEsOCArMTEyMSw2IEBAIHN0YXRpYyBpbnQgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0KHN0cnVjdCBtbHg1aHdzX2NvbnRleHQgKmN0eClcbiBcdGlmICghbWx4NWh3c19jb250ZXh0X2J3Y19zdXBwb3J0ZWQoY3R4KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRjdHgtXHUwMDNlcXVldWVzICs9IGJ3Y19xdWV1ZXM7XG4tXG4gXHRjdHgtXHUwMDNlYndjX3NlbmRfcXVldWVfbG9ja3MgPSBremFsbG9jX29ianMoKmN0eC1cdTAwM2Vid2Nfc2VuZF9xdWV1ZV9sb2NrcyxcbiBcdFx0XHRcdFx0XHQgYndjX3F1ZXVlcyk7XG4gXG5AQCAtMTEwNCw2ICsxMTMyLDggQEAgc3RhdGljIGludCBod3NfYndjX3NlbmRfcXVldWVzX2luaXQoc3RydWN0IG1seDVod3NfY29udGV4dCAqY3R4KVxuIFx0aWYgKCFjdHgtXHUwMDNlYndjX2xvY2tfY2xhc3Nfa2V5cylcbiBcdFx0Z290byBlcnJfbG9ja19jbGFzc19rZXlzO1xuIFxuK1x0Y3R4LVx1MDAzZXF1ZXVlcyArPSBid2NfcXVldWVzO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYndjX3F1ZXVlczsgaSsrKSB7XG4gXHRcdG11dGV4X2luaXQoXHUwMDI2Y3R4LVx1MDAzZWJ3Y19zZW5kX3F1ZXVlX2xvY2tzW2ldKTtcbiBcdFx0bG9ja2RlcF9yZWdpc3Rlcl9rZXkoY3R4LVx1MDAzZWJ3Y19sb2NrX2NsYXNzX2tleXMgKyBpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQzOjIxLjU2NjE0MDQ3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTA0MDA1MDczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogTWVsbGFub3ggbWx4NSBIV1MgQ29tbWFuZCBhbmQgU2VuZCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYG1seDVgIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBod3NgIChIYXJkd2FyZSBTdGVlcmluZykgc3ViLWNvbXBvbmVudHMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlJ3MgYSBtaXggb2YgY2xlYW4tdXAgYW5kIGJ1ZyBmaXhlcywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgdGhlc2Uga2luZHMgb2YgbG93LWxldmVsIGRyaXZlciB1cGRhdGVzLlxuXG5GaXJzdCwgbGV0J3MgbG9vayBhdCB0aGUgYGNtZC5jYCBjaGFuZ2VzLiBJIHNlZSBzb21lIG1vZGlmaWNhdGlvbnMgaW4gYG1seDVod3NfY21kX3J0Y19jcmVhdGVgLCBidXQgSSdtIG5vdCBpbW1lZGlhdGVseSBjb25jZXJuZWQsIHJlbW92aW5nIGBNTFg1X1NFVGAgaGVyZSBhbmQgdGhlcmUgaXMgbm90IG5ldyBhbmQgdW51c3VhbC4gVGhlbiwgaW4gYG1seDVod3NfY21kX3N0Y19tb2RpZnlgLCBpdCBsb29rcyBsaWtlIHdlJ3JlIGFkZGluZyBtb3JlIGRldGFpbCB0byB0aGUgZXJyb3IgbG9ncyB3aGljaCBpcyBhbHdheXMgZ29vZCBmb3IgZGVidWdnaW5nLlxuXG5UaGUgbW9zdCBpbnRlcmVzdGluZyBjaGFuZ2UsIGFuZCB0aGUgb25lIHRoYXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUsIGlzIHRoZSByZW1vdmFsIG9mIGEgYG1seDVfY21kX2V4ZWNgIGNhbGwgYW5kIGl0cyBhc3NvY2lhdGVkIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgbWx4NWh3c19jbWRfcXVlcnlfY2Fwc2AuIFRoaXMgaXMgdW5leHBlY3RlZCEgSXQgaW1wbGllcyBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBvZiBob3cgY2FwYWJpbGl0aWVzIGFyZSBxdWVyaWVkLiBJdCdzIG5vdCBhIGNvbW1vbiBvY2N1cnJlbmNlIHRvIGp1c3QgKnJlbW92ZSogYSBjb21tYW5kIGV4ZWN1dGlvbiwgc28gSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBxdWVyeWluZyBjYXBzIG5vdy4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGRpdmluZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYy5cblxuTm93LCBzd2l0Y2hpbmcgZ2VhcnMgdG8gYHNlbmQuY2AsIHRoaW5ncyBhcmUgYSBiaXQgbW9yZSBzdHJhaWdodGZvcndhcmQuIFdlJ3ZlIGdvdCB0aGUgYWRkaXRpb24gb2YgaGVscGVyIGZ1bmN0aW9ucyBsaWtlIGBod3NfcnVsZV9zdGF0dXNfdG9fc3RyaW5nYCwgYGh3c19ydWxlX3Jlc2l6ZV9zdGF0ZV90b19zdHJpbmdgLCBhbmQgYGh3c19ndGFfc3luZHJvbWVfdG9fc3RyaW5nYC4gVGhpcyBpcyBhIGNsZWFyIGltcHJvdmVtZW50IGZvciBsb2dnaW5nLCBtYWtpbmcgaXQgZWFzaWVyIHRvIGRlY2lwaGVyIGVycm9yIGNvZGVzIGFuZCBzdGF0ZXMgaW4gdGhlIGBod3Nfc2VuZF9lbmdpbmVfZHVtcF9lcnJvcl9jcWVgIGZ1bmN0aW9uLlxuXG5JIHNlZSBhIG1vcmUgc3RhbmRhcmQgYnVnIGZpeCBhcyB3ZWxsLCBzcGVjaWZpY2FsbHkgbW92aW5nIGBjdHgtXHUwMDNlcXVldWVzICs9IGJ3Y19xdWV1ZXM7YCBpbiBgaHdzX2J3Y19zZW5kX3F1ZXVlc19pbml0YC4gVGhpcyBpcyBhIHBvdGVudGlhbCBudWxsLXBvaW50ZXIgaXNzdWUgdGhhdCBJJ3ZlIHNlZW4gYmVmb3JlLCBpbmNyZW1lbnRpbmcgYSBjb3VudCAqYmVmb3JlKiBhbGxvY2F0aW9uIGNhbiBsZWFkIHRvIGluY29uc2lzdGVuY2llcyBpZiBhbGxvY2F0aW9uIGZhaWxzLlxuXG5CYWNrIHRvIGBjbWQuY2AgYW5kIHRoaXMgcmVtb3ZlZCBgbWx4NV9jbWRfZXhlY2AgY2FsbC4gTGV0J3Mgc2VlLi4uSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBoZXJlLi4uIGFoLCBva2F5LCBJIGNhbiBzZWUgdGhlIGRpZmYuIFRoZSBjb21tYW5kIGV4ZWN1dGlvbiBpcyBjb21wbGV0ZWx5IGdvbmUuIEknbSBnb2luZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jYC4gSXMgdGhlcmUgYW5vdGhlciB3YXkgdG8gcXVlcnkgY2Fwcz9cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwMiwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjE2LjYwNjE5NDU3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvc3RlZXJpbmcvaHdzL2NtZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0XFx0IE1MWDVfR0VUX0hDQV9DQVBfT1BfTU9EX0VTV19GTE9XX1RBQkxFIHwgSENBX0NBUF9PUE1PRF9HRVRfQ1VSKTtcXG4xMTUxOlxcdFxcbjExNTI6XFx0XFx0XFx0cmV0ID0gbWx4NV9jbWRfZXhlYyhtZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRfc2l6ZSk7XFxuMTE1MzpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMTE1NDpcXHRcXHRcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJGYWlsZWQgdG8gcXVlcnkgZmxvdyB0YWJsZSBlc3cgY2Fwc1xcXFxuXFxcIik7XFxuMTE1NTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTU2OlxcdFxcdFxcdH1cXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlZmRiX2Z0Lm1heF9sZXZlbCA9XFxuMTE1OTpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExNjA6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5tYXhfZnRfbGV2ZWwpO1xcbjExNjE6XFx0XFxuMTE2MjpcXHRcXHRcXHRjYXBzLVxcdTAwM2VmZGJfZnQucmVwYXJzZSA9XFxuMTE2MzpcXHRcXHRcXHRcXHRNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExNjQ6XFx0XFx0XFx0XFx0XFx0IGNhcGFiaWxpdHkuZmxvd190YWJsZV9uaWNfY2FwLmZsb3dfdGFibGVfcHJvcGVydGllc19uaWNfcmVjZWl2ZS5yZXBhcnNlKTtcXG4xMTY1OlxcdFxcbjExNjY6XFx0XFx0XFx0TUxYNV9TRVQocXVlcnlfaGNhX2NhcF9pbiwgaW4sIG9wX21vZCxcXG4xMTY3OlxcdFxcdFxcdFxcdCBNTFg1X1NFVF9IQ0FfQ0FQX09QX01PRF9FU1cgfCBIQ0FfQ0FQX09QTU9EX0dFVF9DVVIpO1xcbjExNjg6XFx0XFxuMTE2OTpcXHRcXHRcXHRyZXQgPSBtbHg1X2NtZF9leGVjKG1kZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dF9zaXplKTtcXG4xMTcwOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMTcxOlxcdFxcdFxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcIkZhaWxlZCB0byBxdWVyeSBlc3dpdGNoIGNhcGFiaWxpdGllc1xcXFxuXFxcIik7XFxuMTE3MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTczOlxcdFxcdFxcdH1cXG4xMTc0OlxcdFxcbjExNzU6XFx0XFx0XFx0aWYgKE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTE3NjpcXHRcXHRcXHRcXHQgICAgIGNhcGFiaWxpdHkuZV9zd2l0Y2hfY2FwLmVzd19tYW5hZ2VyX3Zwb3J0X251bWJlcl92YWxpZCkpXFxuMTE3NzpcXHRcXHRcXHRcXHRjYXBzLVxcdTAwM2Vlc3dpdGNoX21hbmFnZXJfdnBvcnRfbnVtYmVyID1cXG4xMTc4OlxcdFxcdFxcdFxcdFxcdE1MWDVfR0VUKHF1ZXJ5X2hjYV9jYXBfb3V0LCBvdXQsXFxuMTE3OTpcXHRcXHRcXHRcXHRcXHRcXHQgY2FwYWJpbGl0eS5lX3N3aXRjaF9jYXAuZXN3X21hbmFnZXJfdnBvcnRfbnVtYmVyKTtcXG4xMTgwOlxcdFxcbjExODE6XFx0XFx0XFx0Y2Fwcy1cXHUwMDNlbWVyZ2VkX2Vzd2l0Y2ggPSBNTFg1X0dFVChxdWVyeV9oY2FfY2FwX291dCwgb3V0LFxcbjExODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2FwYWJpbGl0eS5lX3N3aXRjaF9jYXAubWVyZ2VkX2Vzd2l0Y2gpO1xcbjExODM6XFx0XFx0fVxcbjExODQ6XFx0XFxuMTE4NTpcXHRcXHRzbnByaW50ZihjYXBzLVxcdTAwM2Vmd192ZXIsIHNpemVvZihjYXBzLVxcdTAwM2Vmd192ZXIpLCBcXFwiJWQuJWQuJWRcXFwiLFxcbjExODY6XFx0XFx0XFx0IGZ3X3Jldl9tYWoobWRldiksIGZ3X3Jldl9taW4obWRldiksIGZ3X3Jldl9zdWIobWRldikpO1xcbjExODc6XFx0XFxuMTE4ODpcXHRcXHRjYXBzLVxcdTAwM2Vpc19lY3BmID0gbWx4NV9jb3JlX2lzX2VjcGZfZXN3X21hbmFnZXIobWRldik7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdG91dDpcXG4xMTkxOlxcdFxcdGtmcmVlKG91dCk7XFxuMTE5MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjExOTM6XFx0fVxcbjExOTQ6XFx0XFxuMTE5NTpcXHRpbnQgbWx4NWh3c19jbWRfcXVlcnlfZ3ZtaShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgYm9vbCBvdGhlcl9mdW5jdGlvbixcXG4xMTk2OlxcdFxcdFxcdFxcdCAgIHUxNiB2cG9ydF9udW1iZXIsIHUxNiAqZ3ZtaSlcXG4xMTk3OlxcdHtcXG4xMTk4OlxcdFxcdGludCBlcnI7XFxuMTE5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MTYuNjA2MzEyMTgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU1MDQ1NDQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IE1lbGxhbm94IERyaXZlciBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgSSBzZWUgdGhhdCB0aGUgYG1seDVfY21kX2V4ZWNgIGNhbGwgd2FzIHJlbW92ZWQuIEkgcmVhbGl6ZWQgaXQgd2FzIHJlZHVuZGFudCBzaW5jZSBpdCB3YXMgYWxyZWFkeSBjYWxsZWQganVzdCBhYm92ZSBmb3IgdGhlIHNhbWUgYEhDQV9DQVBfT1BNT0RfR0VUX0NVUmAgb3BlcmF0aW9uLiBCdXQgdGhhdCdzIG5vdCB0aGUgY3JpdGljYWwgcG9pbnQgaGVyZS4gVGhpcyBpcyBhIE1lbGxhbm94IGRyaXZlciAoYG1seDVgKSwgYW5kIHRoYXQgcmFpc2VzIGEgcmVkIGZsYWcgaW1tZWRpYXRlbHkuIEl0J3MgYSBTbWFydE5JQyBkcml2ZXIsIG1lYW5pbmcgaXQgbmVlZHMgKnBoeXNpY2FsKiBNZWxsYW5veCBoYXJkd2FyZSAobGlrZSBhIENvbm5lY3RYLTUgb3IgbGF0ZXIpIHRvIGZ1bmN0aW9uLCBhbmQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhhdC5cblxuVGhlIGluc3RydWN0aW9ucyBjbGVhcmx5IHN0YXRlIHRvIGF2b2lkIHBhdGNoZXMgdGhhdCB0b3VjaCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUsIHNwZWNpZmljYWxseSBtZW50aW9uaW5nIFNtYXJ0TklDIGRyaXZlcnMgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLiBgbWx4NWAgaXMgcmlnaHQgaW4gdGhhdCBjYXRlZ29yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSwgc28gSSB3aWxsIGRvdWJsZSBjaGVjaywgYnV0IFFFTVUgZGVmaW5pdGVseSBkb2VzIG5vdCBlbXVsYXRlIE1lbGxhbm94IGBtbHg1YC4gSXQgaGFzIGJhc2ljIGVtdWxhdGVkIG5ldHdvcmsgY2FyZHMsIHN1cmUsIGxpa2UgZTEwMDAsIHJ0bDgxMzksIHZpcnRpby1uZXQsIHZteG5ldDMsIGlnYiwgZXRjLiBCdXQgbm90IGBtbHg1YC5cblxuQWxyaWdodCwgSSBjb25maXJtLCBpdCdzIGEgTWVsbGFub3ggU21hcnROSUMgZHJpdmVyLCBzbyBpdCBmYWxscyBzcXVhcmVseSB3aXRoaW4gdGhlIFwic2tpcFwiIGNyaXRlcmlhLiBGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIGNoZWNrIHRvIHNlZSB3aGF0IGVsc2UgaGFzIGJlZW4gbW9kaWZpZWQuIFRoZSBwYXRjaCBvbmx5IGNoYW5nZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9zdGVlcmluZy9od3MvY21kLmNgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3N0ZWVyaW5nL2h3cy9zZW5kLmNgLiBCb3RoIG9mIHRoZXNlIGZpbGVzIGFyZSB3aXRoaW4gdGhlIGBtbHg1YCBkaXJlY3RvcnksIHdoaWNoIGlzIGNsZWFyIGNvbmZpcm1hdGlvbi5cblxuSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBvbmx5IG1vZGlmeWluZyBjb2RlIHdpdGhpbiB0aGUgTWVsbGFub3ggYG1seDVgIGRyaXZlci4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gVGhlIGZ1enplciB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIGFueSBvZiB0aGUgbW9kaWZpZWQgY29kZSBwYXRocywgc28gaXQncyBhIHdhc3RlIG9mIHJlc291cmNlcyB0byBzcGVuZCBhbnkgdGltZSBmdXp6aW5nIHRoaXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGltZSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA3LCJPdXRwdXRUb2tlbnMiOjEwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjI2LjE1Njc2OTk5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIEFzIGEgcmVzdWx0LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIEFzIGEgcmVzdWx0LCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MjYuMTU2ODMwMzE5WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgdcsv[1] Phase: Running StartedAt: 2026-08-10 09:45:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgdcsv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-10 09:45:37 +0000 UTC FinishedAt: 2026-08-10 09:45:44 +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,}