Name: series-workflowrtqp5 Phase: Failed StartedAt: 2026-09-07 12:34:10 +0000 UTC FinishedAt: 2026-09-07 13:18:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqp5[0] Phase: Succeeded StartedAt: 2026-09-07 12:34:10 +0000 UTC FinishedAt: 2026-09-07 13:18:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqp5[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 12:34:10 +0000 UTC FinishedAt: 2026-09-07 13:18:14 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4NDgyZjZiMGY2NGY2ZTc2OWYyZDI5NzUxYmI4OGM2MGJlYTQ2ZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEzOjE3OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uZTU3Y2M3ZTM5ZTQxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5AQCAtMjE5NSwxNCAmIzQzOzIxOTUsMjEgQEAgVEVTVF9GKGd1YXJkX3JlZ2lvbnMsIHBhZ2VtYXBfc2NhbilcbiBURVNUX0YoZ3VhcmRfcmVnaW9ucywgY29sbGFwc2UpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDIgKiBIUEFHRV9TSVpFO1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcbiBcdGNoYXIgKnB0cjtcbiBcdGludCBpO1xuIFxuIFx0aWYgKCF0aHBfYXZhaWxhYmxlKCkpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0aWYgKCFocGFnZV9zaXplKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzaXplID0gMiAqIGhwYWdlX3NpemU7XG4mIzQzO1x0bnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcbiYjNDM7XG4gXHQvKiBOZWVkIGZpbGUgdG8gYmUgY29ycmVjdCBzaXplIGZvciB0ZXN0cyBmb3Igbm9uLWFub24uICovXG4gXHRpZiAodmFyaWFudC1cdTAwM2ViYWNraW5nICE9IEFOT05fQkFDS0VEKVxuIFx0XHRBU1NFUlRfRVEoZnRydW5jYXRlKHNlbGYtXHUwMDNlZmQsIHNpemUpLCAwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li5lZjI3Y2U0NjdiOGMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtNTIxLDE5ICYjNDM7NTIxLDIzIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4gXHR1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9ucztcbiBcdGludCBwYWdlbWFwX2ZkLCBuX25vcm1hbF9wYWdlcywgbl9odWdlX3BhZ2VzO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuIFxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIEtTRlRfU0tJUDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoIWhwYWdlX3NpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0bWFwX3NpemUgKj0gTUI7XG4gXHRzaXplX3QgbGVuID0gbWFwX3NpemU7XG4gXG4tXHRsZW4gLT0gbGVuICUgSFBBR0VfU0laRTtcbi1cdG1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICYjNDM7IEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0bGVuIC09IGxlbiAlIGhwYWdlX3NpemU7XG4mIzQzO1x0bWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0XHRNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRtYXBfcHRyID0gbWFwX3B0cl9vcmlnICYjNDM7IEhQQUdFX1NJWkUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIEhQQUdFX1NJWkU7XG4mIzQzO1x0bWFwX3B0ciA9IG1hcF9wdHJfb3JpZyAmIzQzOyBocGFnZV9zaXplIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBocGFnZV9zaXplO1xuIFxuIFx0aWYgKG1hcF9wdHJfb3JpZyA9PSBNQVBfRkFJTEVEKVxuIFx0XHRlcnIoMiwgXCYjMzQ7aW5pdGlhbCBtbWFwXCYjMzQ7KTtcbkBAIC01NDcsNyAmIzQzOzU1MSw3IEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXG4gXHRuX25vcm1hbF9wYWdlcyA9IDA7XG4gXHRuX2h1Z2VfcGFnZXMgPSAwO1xuLVx0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcdTAwM2MgbWFwX3B0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IEhQQUdFX1NJWkUpIHtcbiYjNDM7XHRmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwIFx1MDAzYyBtYXBfcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gaHBhZ2Vfc2l6ZSkge1xuIFx0XHRpZiAoYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpIFx1MDAzYyAwKVxuIFx0XHRcdG5fbm9ybWFsX3BhZ2VzJiM0MzsmIzQzOztcbiBcdFx0ZWxzZVxuQEAgLTU3OCwxMSAmIzQzOzU4MiwxMSBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QXZlcmFnZSBzcGVlZDogICUuM2YgTWlCL3NcXG5cJiMzNDssIChtYXBfc2l6ZSAvIE1CKSAvXG4gXHRcdFx0XHRcdCAgICAgICAoKGRvdWJsZSlzY2FuX3RpbWVfbnMgLyBOU0VDX1BFUl9TRUMpKTtcbiBcbi1cdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBIUEFHRV9TSVpFKTtcbiYjNDM7XHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSk7XG4gXHRyZXR1cm4gS1NGVF9QQVNTO1xuIFxuIGVycl9vdXQ6XG4tXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgSFBBR0VfU0laRSk7XG4mIzQzO1x0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IGhwYWdlX3NpemUpO1xuIFx0cmV0dXJuIEtTRlRfRkFJTDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggZDA5ZjlmNmEzODRlZS4uMjRhYTFkZTI3YzI1YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTM2MCw4ICYjNDM7MzYwLDggQEAgZmlcbiBDQVRFR09SWT1cJiMzNDttZW1mZF9zZWNyZXRcJiMzNDsgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXRcbiBmaVxuIFxuLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4tQ0FURUdPUlk9XCYjMzQ7a3NtXCYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMFxuJiM0MzsjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMlxuJiM0MztDQVRFR09SWT1cJiMzNDtrc21cJiMzNDsgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgNTEyXG4gIyBLU00gS1NNX01FUkdFX1RJTUUgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4gQ0FURUdPUlk9XCYjMzQ7a3NtXCYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1QIC1zIDEwMFxuICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbmluZGV4IDhlYjBjNTYzMGU3ZTMuLjljZDk3OTAyMjRkYjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTM1LDEyICYjNDM7MzUsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0c2l6ZV90IG1hcF9sZW47XG4gXHRpbnQgcGFnZW1hcF9mZDtcbiBcdGludCBkdXJhdGlvbiA9IDA7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcGFnZV9zaGlmdCgpO1xuIFxuIFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiBcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcbiBcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuIFxuJiM0MztcdGlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0cmFtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7XG4gXHRpZiAocmFtIFx1MDAzZSBTSVpFX01BWCAvIHBzaXplKCkgLyA0KVxuIFx0XHRyYW0gPSBTSVpFX01BWCAvIDQ7XG5AQCAtNzAsMjMgJiM0Mzs3NSwyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHR9XG4gXG4gXHR3YXJueChcJiMzNDthbGxvY2F0ZSAlemQgdHJhbnNodWdlIHBhZ2VzLCB1c2luZyAlemQgTWlCIHZpcnR1YWwgbWVtb3J5XCYjMzQ7XG4tXHQgICAgICBcJiMzNDsgYW5kICV6ZCBNaUIgb2YgcmFtXCYjMzQ7LCBsZW4gXHUwMDNlXHUwMDNlIEhQQUdFX1NISUZULCBsZW4gXHUwMDNlXHUwMDNlIDIwLFxuLVx0ICAgICAgcmFtIFx1MDAzZVx1MDAzZSAoMjAgJiM0MzsgSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSAtIDEpKTtcbiYjNDM7XHQgICAgICBcJiMzNDsgYW5kICV6ZCBNaUIgb2YgcmFtXCYjMzQ7LCBsZW4gXHUwMDNlXHUwMDNlIGhwYWdlX3NoaWZ0LCBsZW4gXHUwMDNlXHUwMDNlIDIwLFxuJiM0MztcdCAgICAgIHJhbSBcdTAwM2VcdTAwM2UgKDIwICYjNDM7IGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkgLSAxKSk7XG4gXG4gXHRwYWdlbWFwX2ZkID0gb3BlbihcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDssIE9fUkRPTkxZKTtcbiBcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7b3BlbiBwYWdlbWFwXFxuXCYjMzQ7KTtcbiBcbi1cdGxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFO1xuLVx0cHRyID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgSFBBR0VfU0laRSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7XG4mIzQzO1x0bGVuIC09IGxlbiAlIGhwYWdlX3NpemU7XG4mIzQzO1x0cHRyID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7XG4gXHRpZiAocHRyID09IE1BUF9GQUlMRUQpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtpbml0aWFsIG1tYXBcJiMzNDspO1xuLVx0cHRyICYjNDM7PSBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdClwdHIgJSBIUEFHRV9TSVpFO1xuJiM0MztcdHB0ciAmIzQzOz0gaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpcHRyICUgaHBhZ2Vfc2l6ZTtcbiBcbiBcdGlmIChtYWR2aXNlKHB0ciwgbGVuLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O01BRFZfSFVHRVBBR0VcJiMzNDspO1xuIFxuLVx0bWFwX2xlbiA9IHJhbSBcdTAwM2VcdTAwM2UgKEhQQUdFX1NISUZUIC0gMSk7XG4mIzQzO1x0bWFwX2xlbiA9IHJhbSBcdTAwM2VcdTAwM2UgKGhwYWdlX3NoaWZ0IC0gMSk7XG4gXHRtYXAgPSBtYWxsb2MobWFwX2xlbik7XG4gXHRpZiAoIW1hcClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21hcCBtYWxsb2NcXG5cJiMzNDspO1xuQEAgLTk5LDcgJiM0MzsxMDQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1lbXNldChtYXAsIDAsIG1hcF9sZW4pO1xuIFxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2YSk7XG4tXHRcdGZvciAocCA9IHB0cjsgcCBcdTAwM2MgcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gSFBBR0VfU0laRSkge1xuJiM0MztcdFx0Zm9yIChwID0gcHRyOyBwIFx1MDAzYyBwdHIgJiM0MzsgbGVuOyBwICYjNDM7PSBocGFnZV9zaXplKSB7XG4gXHRcdFx0aW50NjRfdCBwZm47XG4gXG4gXHRcdFx0cGZuID0gYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpO1xuQEAgLTEwNyw3ICYjNDM7MTEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGlmIChwZm4gXHUwMDNjIDApIHtcbiBcdFx0XHRcdG5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHNpemVfdCBpZHggPSBwZm4gXHUwMDNlXHUwMDNlIChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKTtcbiYjNDM7XHRcdFx0XHRzaXplX3QgaWR4ID0gcGZuIFx1MDAzZVx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSk7XG4gXG4gXHRcdFx0XHRucl9zdWNjZWVkJiM0MzsmIzQzOztcbiBcdFx0XHRcdGlmIChpZHggXHUwMDNlPSBtYXBfbGVuKSB7XG5AQCAtMTIzLDcgJiM0MzsxMjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIHNwbGl0IHRyYW5zaHVnZSBwYWdlLCBrZWVwIGxhc3QgcGFnZSAqL1xuLVx0XHRcdGlmIChtYWR2aXNlKHAsIEhQQUdFX1NJWkUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSlcbiYjNDM7XHRcdFx0aWYgKG1hZHZpc2UocCwgaHBhZ2Vfc2l6ZSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxuIFx0XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O01BRFZfRE9OVE5FRURcJiMzNDspO1xuIFx0XHR9XG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZiKTtcbkBAIC0xMzEsNyAmIzQzOzEzNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JS4zZiBzL2xvb3AsICUuM2YgbXMvcGFnZSwgJTEwLjNmIE1pQi9zXFx0XCYjMzQ7XG4gXHRcdFx0ICAgICAgIFwmIzM0OyU0ZCBzdWNjZWVkLCAlNGQgZmFpbGVkLCAlNGQgZGlmZmVyZW50IHBhZ2VzXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXHUwMDNlXHUwMDNlIEhQQUdFX1NISUZUKSwgbGVuIC8gcyAvICgxIFx1MDAzY1x1MDAzYyAyMCksXG4mIzQzO1x0XHRcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXHUwMDNlXHUwMDNlIGhwYWdlX3NoaWZ0KSwgbGVuIC8gcyAvICgxIFx1MDAzY1x1MDAzYyAyMCksXG4gXHRcdFx0ICAgICAgIG5yX3N1Y2NlZWQsIG5yX2ZhaWxlZCwgbnJfcGFnZXMpO1xuIFxuIFx0XHRpZiAoZHVyYXRpb24gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGIudHZfc2VjIC0gc3RhcnQudHZfc2VjIFx1MDAzZT0gZHVyYXRpb24pIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IDQ4MjFhMzU2MzAzNjMuLmY3NWJmMGJhY2QxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTIxLDYgJiM0MzsyMSw4IEBAXG4gXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XG4mIzQzO3VpbnQ2NF90IF9fcG1kX3BhZ2Vfc2l6ZTtcbiYjNDM7dWludDY0X3QgX19wbWRfcGFnZV9zaGlmdDtcbiBcbiB1aW50NjRfdCBwYWdlbWFwX2dldF9lbnRyeShpbnQgZmQsIGNoYXIgKnN0YXJ0KVxuIHtcbkBAIC0xNjEsNiAmIzQzOzE2Myw5IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpXG4gXHRjaGFyIGJ1ZlsyMF07XG4gXHRzc2l6ZV90IG51bV9yZWFkO1xuIFxuJiM0MztcdGlmIChfX3BtZF9wYWdlX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gX19wbWRfcGFnZV9zaXplO1xuJiM0MztcbiBcdGZkID0gb3BlbihQTURfU0laRV9GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbiBcdGlmIChmZCA9PSAtMSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTczLDcgJiM0MzsxNzgsMjUgQEAgdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZClcbiBcdGJ1ZltudW1fcmVhZF0gPSAmIzM5O1xcMCYjMzk7O1xuIFx0Y2xvc2UoZmQpO1xuIFxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4mIzQzO1x0X19wbWRfcGFnZV9zaXplID0gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcG1kX3BhZ2Vfc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dWludDY0X3QgcG1kX3BhZ2Vfc2hpZnQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChfX3BtZF9wYWdlX3NoaWZ0KVxuJiM0MztcdFx0cmV0dXJuIF9fcG1kX3BhZ2Vfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdGlmICghX19wbWRfcGFnZV9zaXplKVxuJiM0MztcdFx0X19wbWRfcGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFfX3BtZF9wYWdlX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0X19wbWRfcGFnZV9zaGlmdCA9IChmZnNsKF9fcG1kX3BhZ2Vfc2l6ZSkgLSAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcG1kX3BhZ2Vfc2hpZnQ7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbkBAIC00NTIsMTQgJiM0Mzs0NzUsMTkgQEAgYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemVcbiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKVxuIHtcbiBcdHVpbnQ2NF90IGVudFsyXTtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wYWdlX3NoaWZ0KCk7XG4mIzQzO1xuJiM0MztcdGlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4gXG4gXHQvKiBkcm9wIHBtZCAqL1xuLVx0aWYgKG1tYXAocHRyLCBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdGlmIChtbWFwKHB0ciwgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0IE1BUF9GSVhFRCB8IE1BUF9BTk9OWU1PVVMgfFxuIFx0XHQgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCkgIT0gcHRyKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7bW1hcCB0cmFuc2h1Z2VcXG5cJiMzNDspO1xuIFxuLVx0aWYgKG1hZHZpc2UocHRyLCBIUEFHRV9TSVpFLCBNQURWX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAobWFkdmlzZShwdHIsIGhwYWdlX3NpemUsIE1BRFZfSFVHRVBBR0UpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7TUFEVl9IVUdFUEFHRVxcblwmIzM0Oyk7XG4gXG4gXHQvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi9cbkBAIC00NzEsNyAmIzQzOzQ5OSw3IEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4gXG4gXHRpZiAoUEFHRU1BUF9QUkVTRU5UKGVudFswXSkgXHUwMDI2XHUwMDI2IFBBR0VNQVBfUFJFU0VOVChlbnRbMV0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIFBBR0VNQVBfUEZOKGVudFswXSkgJiM0MzsgMSA9PSBQQUdFTUFQX1BGTihlbnRbMV0pIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEoUEFHRU1BUF9QRk4oZW50WzBdKSBcdTAwMjYgKCgxIFx1MDAzY1x1MDAzYyAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSkpIC0gMSkpKVxuJiM0MztcdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpKSAtIDEpKSlcbiBcdFx0cmV0dXJuIFBBR0VNQVBfUEZOKGVudFswXSk7XG4gXG4gXHRyZXR1cm4gLTE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li4xZDI2MDhjMWFkMDhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0zMSw2ICYjNDM7MzEsOCBAQFxuIFxuIGV4dGVybiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XG4mIzQzO2V4dGVybiB1aW50NjRfdCBfX3BtZF9wYWdlX3NpemU7XG4mIzQzO2V4dGVybiB1aW50NjRfdCBfX3BtZF9wYWdlX3NoaWZ0O1xuIFxuIC8qXG4gICogUmVwcmVzZW50cyBhbiBvcGVuIGZkIGFuZCBQUk9DTUFQX1FVRVJZIHN0YXRlIGZvciBiaW5hcnkgKHZpYSBpb2N0bClcbkBAIC04OSw2ICYjNDM7OTEsNyBAQCB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfZ2V0X3BmbihpbnQgZmQsIGNoYXIgKnN0YXJ0KTtcbiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcbiBib29sIGNoZWNrX2Zvcl9wYXR0ZXJuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpO1xuJiM0Mzt1aW50NjRfdCBwbWRfcGFnZV9zaGlmdCh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuQEAgLTE1NywxMiAmIzQzOzE2MCw2IEBAIGludCBrc21fc3RvcCh2b2lkKTtcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XG4gaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4tLypcbi0gKiBPbiBwcGM2NCB0aGlzIHdpbGwgb25seSB3b3JrIHdpdGggcmFkaXggMk0gaHVnZXBhZ2Ugc2l6ZVxuLSAqL1xuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcbi0jZGVmaW5lIEhQQUdFX1NJWkUgKDEgXHUwMDNjXHUwMDNjIEhQQUdFX1NISUZUKVxuLVxuICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudClcdCgoKGVudCkgXHUwMDI2ICgxdWxsIFx1MDAzY1x1MDAzYyA2MykpICE9IDApXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXHQoKGVudCkgXHUwMDI2ICgoMXVsbCBcdTAwM2NcdTAwM2MgNTUpIC0gMSkpXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4NDgyZjZiMGY2NGY2ZTc2OWYyZDI5NzUxYmI4OGM2MGJlYTQ2ZjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDEzOjE3OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCmluZGV4IDVjOGVjM2NhNzVkN2QuLmU1N2NjN2UzOWU0MTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKQEAgLTIxOTUsMTQgJiM0MzsyMTk1LDIxIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBwYWdlbWFwX3NjYW4pCiBURVNUX0YoZ3VhcmRfcmVnaW9ucywgY29sbGFwc2UpCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gMiAqIEhQQUdFX1NJWkU7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplOwomIzQzOwljb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzOwl1bnNpZ25lZCBsb25nIG51bV9wYWdlczsKIAljaGFyICpwdHI7CiAJaW50IGk7CiAKIAlpZiAoIXRocF9hdmFpbGFibGUoKSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKIAomIzQzOwlpZiAoIWhwYWdlX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXNpemUgPSAyICogaHBhZ2Vfc2l6ZTsKJiM0MzsJbnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTsKJiM0MzsKIAkvKiBOZWVkIGZpbGUgdG8gYmUgY29ycmVjdCBzaXplIGZvciB0ZXN0cyBmb3Igbm9uLWFub24uICovCiAJaWYgKHZhcmlhbnQtJmd0O2JhY2tpbmcgIT0gQU5PTl9CQUNLRUQpCiAJCUFTU0VSVF9FUShmdHJ1bmNhdGUoc2VsZi0mZ3Q7ZmQsIHNpemUpLCAwKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKaW5kZXggNWZkNzc5MmEwZDQ3OS4uZWYyN2NlNDY3YjhjMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKQEAgLTUyMSwxOSAmIzQzOzUyMSwyMyBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LAogCXN0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lLCBlbmRfdGltZTsKIAl1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9uczsKIAlpbnQgcGFnZW1hcF9mZCwgbl9ub3JtYWxfcGFnZXMsIG5faHVnZV9wYWdlczsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiAKIAlpZiAoIXRocF9pc19lbmFibGVkKCkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwogCQlyZXR1cm4gS1NGVF9TS0lQOwogCX0KIAomIzQzOwlpZiAoIWhwYWdlX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiAJbWFwX3NpemUgKj0gTUI7CiAJc2l6ZV90IGxlbiA9IG1hcF9zaXplOwogCi0JbGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7Ci0JbWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgSFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJbGVuIC09IGxlbiAlIGhwYWdlX3NpemU7CiYjNDM7CW1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICYjNDM7IGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiAJCQlNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JbWFwX3B0ciA9IG1hcF9wdHJfb3JpZyAmIzQzOyBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBIUEFHRV9TSVpFOwomIzQzOwltYXBfcHRyID0gbWFwX3B0cl9vcmlnICYjNDM7IGhwYWdlX3NpemUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIGhwYWdlX3NpemU7CiAKIAlpZiAobWFwX3B0cl9vcmlnID09IE1BUF9GQUlMRUQpCiAJCWVycigyLCAmIzM0O2luaXRpYWwgbW1hcCYjMzQ7KTsKQEAgLTU0Nyw3ICYjNDM7NTUxLDcgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCwKIAogCW5fbm9ybWFsX3BhZ2VzID0gMDsKIAluX2h1Z2VfcGFnZXMgPSAwOwotCWZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgJmx0OyBtYXBfcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gSFBBR0VfU0laRSkgewomIzQzOwlmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwICZsdDsgbWFwX3B0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IGhwYWdlX3NpemUpIHsKIAkJaWYgKGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKSAmbHQ7IDApCiAJCQluX25vcm1hbF9wYWdlcyYjNDM7JiM0Mzs7CiAJCWVsc2UKQEAgLTU3OCwxMSAmIzQzOzU4MiwxMSBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LAogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7QXZlcmFnZSBzcGVlZDogICUuM2YgTWlCL3NcbiYjMzQ7LCAobWFwX3NpemUgLyBNQikgLwogCQkJCQkgICAgICAgKChkb3VibGUpc2Nhbl90aW1lX25zIC8gTlNFQ19QRVJfU0VDKSk7CiAKLQltdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgSFBBR0VfU0laRSk7CiYjNDM7CW11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBocGFnZV9zaXplKTsKIAlyZXR1cm4gS1NGVF9QQVNTOwogCiBlcnJfb3V0OgotCW11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBIUEFHRV9TSVpFKTsKJiM0MzsJbXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IGhwYWdlX3NpemUpOwogCXJldHVybiBLU0ZUX0ZBSUw7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggZDA5ZjlmNmEzODRlZS4uMjRhYTFkZTI3YzI1YiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTM2MCw4ICYjNDM7MzYwLDggQEAgZmkKIENBVEVHT1JZPSYjMzQ7bWVtZmRfc2VjcmV0JiMzNDsgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXQKIGZpCiAKLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwCi1DQVRFR09SWT0mIzM0O2tzbSYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMAomIzQzOyMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgNTEyCiYjNDM7Q0FURUdPUlk9JiMzNDtrc20mIzM0OyBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyA1MTIKICMgS1NNIEtTTV9NRVJHRV9USU1FIHRlc3Qgd2l0aCBzaXplIG9mIDEwMAogQ0FURUdPUlk9JiMzNDtrc20mIzM0OyBydW5fdGVzdCAuL2tzbV90ZXN0cyAtUCAtcyAxMDAKICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwppbmRleCA4ZWIwYzU2MzBlN2UzLi45Y2Q5NzkwMjI0ZGI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCkBAIC0zNSwxMiAmIzQzOzM1LDE3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlzaXplX3QgbWFwX2xlbjsKIAlpbnQgcGFnZW1hcF9mZDsKIAlpbnQgZHVyYXRpb24gPSAwOwomIzQzOwljb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcGFnZV9zaGlmdCgpOwogCiAJa3NmdF9wcmludF9oZWFkZXIoKTsKIAogCWlmICghdGhwX2lzX2VuYWJsZWQoKSkKIAkJa3NmdF9leGl0X3NraXAoJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwogCiYjNDM7CWlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiAJcmFtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7CiAJaWYgKHJhbSAmZ3Q7IFNJWkVfTUFYIC8gcHNpemUoKSAvIDQpCiAJCXJhbSA9IFNJWkVfTUFYIC8gNDsKQEAgLTcwLDIzICYjNDM7NzUsMjMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAogCXdhcm54KCYjMzQ7YWxsb2NhdGUgJXpkIHRyYW5zaHVnZSBwYWdlcywgdXNpbmcgJXpkIE1pQiB2aXJ0dWFsIG1lbW9yeSYjMzQ7Ci0JICAgICAgJiMzNDsgYW5kICV6ZCBNaUIgb2YgcmFtJiMzNDssIGxlbiAmZ3Q7Jmd0OyBIUEFHRV9TSElGVCwgbGVuICZndDsmZ3Q7IDIwLAotCSAgICAgIHJhbSAmZ3Q7Jmd0OyAoMjAgJiM0MzsgSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSAtIDEpKTsKJiM0MzsJICAgICAgJiMzNDsgYW5kICV6ZCBNaUIgb2YgcmFtJiMzNDssIGxlbiAmZ3Q7Jmd0OyBocGFnZV9zaGlmdCwgbGVuICZndDsmZ3Q7IDIwLAomIzQzOwkgICAgICByYW0gJmd0OyZndDsgKDIwICYjNDM7IGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkgLSAxKSk7CiAKIAlwYWdlbWFwX2ZkID0gb3BlbigmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7LCBPX1JET05MWSk7CiAJaWYgKHBhZ2VtYXBfZmQgJmx0OyAwKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtvcGVuIHBhZ2VtYXBcbiYjMzQ7KTsKIAotCWxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFOwotCXB0ciA9IG1tYXAoTlVMTCwgbGVuICYjNDM7IEhQQUdFX1NJWkUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApOwomIzQzOwlsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTsKJiM0MzsJcHRyID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7CiAJaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtpbml0aWFsIG1tYXAmIzM0Oyk7Ci0JcHRyICYjNDM7PSBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdClwdHIgJSBIUEFHRV9TSVpFOwomIzQzOwlwdHIgJiM0Mzs9IGhwYWdlX3NpemUgLSAodWludHB0cl90KXB0ciAlIGhwYWdlX3NpemU7CiAKIAlpZiAobWFkdmlzZShwdHIsIGxlbiwgTUFEVl9IVUdFUEFHRSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O01BRFZfSFVHRVBBR0UmIzM0Oyk7CiAKLQltYXBfbGVuID0gcmFtICZndDsmZ3Q7IChIUEFHRV9TSElGVCAtIDEpOwomIzQzOwltYXBfbGVuID0gcmFtICZndDsmZ3Q7IChocGFnZV9zaGlmdCAtIDEpOwogCW1hcCA9IG1hbGxvYyhtYXBfbGVuKTsKIAlpZiAoIW1hcCkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bWFwIG1hbGxvY1xuJiMzNDspOwpAQCAtOTksNyAmIzQzOzEwNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJbWVtc2V0KG1hcCwgMCwgbWFwX2xlbik7CiAKIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7YSk7Ci0JCWZvciAocCA9IHB0cjsgcCAmbHQ7IHB0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IEhQQUdFX1NJWkUpIHsKJiM0MzsJCWZvciAocCA9IHB0cjsgcCAmbHQ7IHB0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IGhwYWdlX3NpemUpIHsKIAkJCWludDY0X3QgcGZuOwogCiAJCQlwZm4gPSBhbGxvY2F0ZV90cmFuc2h1Z2UocCwgcGFnZW1hcF9mZCk7CkBAIC0xMDcsNyAmIzQzOzExMiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWlmIChwZm4gJmx0OyAwKSB7CiAJCQkJbnJfZmFpbGVkJiM0MzsmIzQzOzsKIAkJCX0gZWxzZSB7Ci0JCQkJc2l6ZV90IGlkeCA9IHBmbiAmZ3Q7Jmd0OyAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSk7CiYjNDM7CQkJCXNpemVfdCBpZHggPSBwZm4gJmd0OyZndDsgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpOwogCiAJCQkJbnJfc3VjY2VlZCYjNDM7JiM0Mzs7CiAJCQkJaWYgKGlkeCAmZ3Q7PSBtYXBfbGVuKSB7CkBAIC0xMjMsNyAmIzQzOzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCX0KIAogCQkJLyogc3BsaXQgdHJhbnNodWdlIHBhZ2UsIGtlZXAgbGFzdCBwYWdlICovCi0JCQlpZiAobWFkdmlzZShwLCBIUEFHRV9TSVpFIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpCiYjNDM7CQkJaWYgKG1hZHZpc2UocCwgaHBhZ2Vfc2l6ZSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKQogCQkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O01BRFZfRE9OVE5FRUQmIzM0Oyk7CiAJCX0KIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7Yik7CkBAIC0xMzEsNyAmIzQzOzEzNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQlrc2Z0X3ByaW50X21zZygmIzM0OyUuM2Ygcy9sb29wLCAlLjNmIG1zL3BhZ2UsICUxMC4zZiBNaUIvc1x0JiMzNDsKIAkJCSAgICAgICAmIzM0OyU0ZCBzdWNjZWVkLCAlNGQgZmFpbGVkLCAlNGQgZGlmZmVyZW50IHBhZ2VzXG4mIzM0OywKLQkJCSAgICAgICBzLCBzICogMTAwMCAvIChsZW4gJmd0OyZndDsgSFBBR0VfU0hJRlQpLCBsZW4gLyBzIC8gKDEgJmx0OyZsdDsgMjApLAomIzQzOwkJCSAgICAgICBzLCBzICogMTAwMCAvIChsZW4gJmd0OyZndDsgaHBhZ2Vfc2hpZnQpLCBsZW4gLyBzIC8gKDEgJmx0OyZsdDsgMjApLAogCQkJICAgICAgIG5yX3N1Y2NlZWQsIG5yX2ZhaWxlZCwgbnJfcGFnZXMpOwogCiAJCWlmIChkdXJhdGlvbiAmZ3Q7IDAgJmFtcDsmYW1wOyBiLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYyAmZ3Q7PSBkdXJhdGlvbikgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IDQ4MjFhMzU2MzAzNjMuLmY3NWJmMGJhY2QxOGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTIxLDYgJiM0MzsyMSw4IEBACiAKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTsKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7CiYjNDM7dWludDY0X3QgX19wbWRfcGFnZV9zaXplOwomIzQzO3VpbnQ2NF90IF9fcG1kX3BhZ2Vfc2hpZnQ7CiAKIHVpbnQ2NF90IHBhZ2VtYXBfZ2V0X2VudHJ5KGludCBmZCwgY2hhciAqc3RhcnQpCiB7CkBAIC0xNjEsNiAmIzQzOzE2Myw5IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpCiAJY2hhciBidWZbMjBdOwogCXNzaXplX3QgbnVtX3JlYWQ7CiAKJiM0MzsJaWYgKF9fcG1kX3BhZ2Vfc2l6ZSkKJiM0MzsJCXJldHVybiBfX3BtZF9wYWdlX3NpemU7CiYjNDM7CiAJZmQgPSBvcGVuKFBNRF9TSVpFX0ZJTEVfUEFUSCwgT19SRE9OTFkpOwogCWlmIChmZCA9PSAtMSkKIAkJcmV0dXJuIDA7CkBAIC0xNzMsNyAmIzQzOzE3OCwyNSBAQCB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKQogCWJ1ZltudW1fcmVhZF0gPSAmIzM5O1wwJiMzOTs7CiAJY2xvc2UoZmQpOwogCi0JcmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiYjNDM7CV9fcG1kX3BhZ2Vfc2l6ZSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BtZF9wYWdlX3NpemU7CiYjNDM7fQomIzQzOwomIzQzO3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoX19wbWRfcGFnZV9zaGlmdCkKJiM0MzsJCXJldHVybiBfX3BtZF9wYWdlX3NoaWZ0OwomIzQzOwomIzQzOwlpZiAoIV9fcG1kX3BhZ2Vfc2l6ZSkKJiM0MzsJCV9fcG1kX3BhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiYjNDM7CWlmICghX19wbWRfcGFnZV9zaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CV9fcG1kX3BhZ2Vfc2hpZnQgPSAoZmZzbChfX3BtZF9wYWdlX3NpemUpIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BtZF9wYWdlX3NoaWZ0OwogfQogCiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpCkBAIC00NTIsMTQgJiM0Mzs0NzUsMTkgQEAgYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCiB7CiAJdWludDY0X3QgZW50WzJdOwomIzQzOwljb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcGFnZV9zaGlmdCgpOwomIzQzOwomIzQzOwlpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KQomIzQzOwkJcmV0dXJuIC0xOwogCiAJLyogZHJvcCBwbWQgKi8KLQlpZiAobW1hcChwdHIsIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CWlmIChtbWFwKHB0ciwgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJIE1BUF9GSVhFRCB8IE1BUF9BTk9OWU1PVVMgfAogCQkgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCkgIT0gcHRyKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttbWFwIHRyYW5zaHVnZVxuJiMzNDspOwogCi0JaWYgKG1hZHZpc2UocHRyLCBIUEFHRV9TSVpFLCBNQURWX0hVR0VQQUdFKSkKJiM0MzsJaWYgKG1hZHZpc2UocHRyLCBocGFnZV9zaXplLCBNQURWX0hVR0VQQUdFKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7TUFEVl9IVUdFUEFHRVxuJiMzNDspOwogCiAJLyogYWxsb2NhdGUgdHJhbnNwYXJlbnQgaHVnZSBwYWdlICovCkBAIC00NzEsNyAmIzQzOzQ5OSw3IEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCiAKIAlpZiAoUEFHRU1BUF9QUkVTRU5UKGVudFswXSkgJmFtcDsmYW1wOyBQQUdFTUFQX1BSRVNFTlQoZW50WzFdKSAmYW1wOyZhbXA7CiAJICAgIFBBR0VNQVBfUEZOKGVudFswXSkgJiM0MzsgMSA9PSBQQUdFTUFQX1BGTihlbnRbMV0pICZhbXA7JmFtcDsKLQkgICAgIShQQUdFTUFQX1BGTihlbnRbMF0pICZhbXA7ICgoMSAmbHQ7Jmx0OyAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSkpIC0gMSkpKQomIzQzOwkgICAgIShQQUdFTUFQX1BGTihlbnRbMF0pICZhbXA7ICgoMSAmbHQ7Jmx0OyAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSkpIC0gMSkpKQogCQlyZXR1cm4gUEFHRU1BUF9QRk4oZW50WzBdKTsKIAogCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCA5YTQ5YWY4ODcwMmU0Li4xZDI2MDhjMWFkMDhmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCkBAIC0zMSw2ICYjNDM7MzEsOCBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplOwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7CiYjNDM7ZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BhZ2Vfc2l6ZTsKJiM0MztleHRlcm4gdWludDY0X3QgX19wbWRfcGFnZV9zaGlmdDsKIAogLyoKICAqIFJlcHJlc2VudHMgYW4gb3BlbiBmZCBhbmQgUFJPQ01BUF9RVUVSWSBzdGF0ZSBmb3IgYmluYXJ5ICh2aWEgaW9jdGwpCkBAIC04OSw2ICYjNDM7OTEsNyBAQCB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfZ2V0X3BmbihpbnQgZmQsIGNoYXIgKnN0YXJ0KTsKIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpOwogYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpOwomIzQzO3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpOwogdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTsKIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwogYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CkBAIC0xNTcsMTIgJiM0MzsxNjAsNiBAQCBpbnQga3NtX3N0b3Aodm9pZCk7CiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7CiBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTsKIAotLyoKLSAqIE9uIHBwYzY0IHRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCByYWRpeCAyTSBodWdlcGFnZSBzaXplCi0gKi8KLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjEKLSNkZWZpbmUgSFBBR0VfU0laRSAoMSAmbHQ7Jmx0OyBIUEFHRV9TSElGVCkKLQogI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KQkoKChlbnQpICZhbXA7ICgxdWxsICZsdDsmbHQ7IDYzKSkgIT0gMCkKICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KQkoKGVudCkgJmFtcDsgKCgxdWxsICZsdDsmbHQ7IDU1KSAtIDEpKQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTAKCQkJCQkJCW91dHB1dDogNzAKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgc2VsZi10ZXN0cyBmcmFtZXdvcmssIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbWApIHRlc3RzLCBjb250YWluZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzOiBgZ3VhcmQtcmVnaW9ucy5jYCwgYGtzbV90ZXN0cy5jYCwgYHJ1bl92bXRlc3RzLnNoYCwgYHRyYW5zaHVnZS1zdHJlc3MuY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAuIEFsbCBvZiB0aGVtLCBpbXBvcnRhbnRseSwgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhhdCBvbmUgZGlyZWN0b3J5LgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhhdCAmIzM0O05FR0FUSVZFIENSSVRFUklBJiMzNDsgaW4gU0VDVElPTiAyLiBUaGUgY29yZSBvZiB0aGlzIGRlY2lzaW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgbm90aGluZyB3aXRoaW4gdGhlIGNvcmUga2VybmVsIHNvdXJjZSB0cmVlIChlLmcuLCBgbW0vYCwgYGtlcm5lbC9gLCBgZnMvYCwgYGRyaXZlcnMvYCwgYGFyY2gvYCkgYXBwZWFycyB0byBiZSB0b3VjaGVkLiBUaGVzZSBhcmUgcHVyZWx5IHNlbGYtdGVzdHMuIFNwZWNpZmljYWxseSwgdGhleSBmYWxsIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiB1c2VyLXNwYWNlIHRlc3RpbmcgYW5kIHNjcmlwdHMgdGhhdCAqZG9uJiMzOTt0KiBkaXJlY3RseSBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBvciBtb2R1bGVzLiBUaGVyZWZvcmUsIGJ5IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBvdXRsaW5lZCwgdGhlIHBhdGNoIGlzICpub3QqIHdvcnRoIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gU2luY2UgdGhpcyBpcyBhIHRlc3QgYW5kIG5vdCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBhbHNvIGJlIGVtcHR5LiBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gbXkgYXNzZXNzbWVudCB3aXRoIGEgY2FsbCB0byBgc2V0LXJlc3VsdHNgIGp1c3QgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTc6NTguNDA4NDk4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzIyMzIyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxNzo1OC40MDg1MDM4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzI4OTk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4NDgyZjZiMGY2NGY2ZTc2OWYyZDI5NzUxYmI4OGM2MGJlYTQ2ZjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxMzoxNzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5pbmRleCA1YzhlYzNjYTc1ZDdkLi5lNTdjYzdlMzllNDE5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbkBAIC0yMTk1LDE0ICsyMTk1LDIxIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBwYWdlbWFwX3NjYW4pXFxuIFRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcXG4ge1xcbiBcXHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gMiAqIEhQQUdFX1NJWkU7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcXG4rXFx0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBudW1fcGFnZXM7XFxuIFxcdGNoYXIgKnB0cjtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcbitcXHRpZiAoIWhwYWdlX3NpemUpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRzaXplID0gMiAqIGhwYWdlX3NpemU7XFxuK1xcdG51bV9wYWdlcyA9IHNpemUgLyBwYWdlX3NpemU7XFxuK1xcbiBcXHQvKiBOZWVkIGZpbGUgdG8gYmUgY29ycmVjdCBzaXplIGZvciB0ZXN0cyBmb3Igbm9uLWFub24uICovXFxuIFxcdGlmICh2YXJpYW50LVxcdTAwM2ViYWNraW5nICE9IEFOT05fQkFDS0VEKVxcbiBcXHRcXHRBU1NFUlRfRVEoZnRydW5jYXRlKHNlbGYtXFx1MDAzZWZkLCBzaXplKSwgMCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li5lZjI3Y2U0NjdiOGMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5AQCAtNTIxLDE5ICs1MjEsMjMgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcXG4gXFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9ucztcXG4gXFx0aW50IHBhZ2VtYXBfZmQsIG5fbm9ybWFsX3BhZ2VzLCBuX2h1Z2VfcGFnZXM7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiBLU0ZUX1NLSVA7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghaHBhZ2Vfc2l6ZSlcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuIFxcdG1hcF9zaXplICo9IE1CO1xcbiBcXHRzaXplX3QgbGVuID0gbWFwX3NpemU7XFxuIFxcbi1cXHRsZW4gLT0gbGVuICUgSFBBR0VfU0laRTtcXG4tXFx0bWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gKyBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTtcXG4rXFx0bWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gKyBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbiBcXHRcXHRcXHRNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XFxuLVxcdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgKyBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBIUEFHRV9TSVpFO1xcbitcXHRtYXBfcHRyID0gbWFwX3B0cl9vcmlnICsgaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpbWFwX3B0cl9vcmlnICUgaHBhZ2Vfc2l6ZTtcXG4gXFxuIFxcdGlmIChtYXBfcHRyX29yaWcgPT0gTUFQX0ZBSUxFRClcXG4gXFx0XFx0ZXJyKDIsIFxcXCJpbml0aWFsIG1tYXBcXFwiKTtcXG5AQCAtNTQ3LDcgKzU1MSw3IEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXFxuIFxcbiBcXHRuX25vcm1hbF9wYWdlcyA9IDA7XFxuIFxcdG5faHVnZV9wYWdlcyA9IDA7XFxuLVxcdGZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgXFx1MDAzYyBtYXBfcHRyICsgbGVuOyBwICs9IEhQQUdFX1NJWkUpIHtcXG4rXFx0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcXHUwMDNjIG1hcF9wdHIgKyBsZW47IHAgKz0gaHBhZ2Vfc2l6ZSkge1xcbiBcXHRcXHRpZiAoYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0bl9ub3JtYWxfcGFnZXMrKztcXG4gXFx0XFx0ZWxzZVxcbkBAIC01NzgsMTEgKzU4MiwxMSBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiQXZlcmFnZSBzcGVlZDogICUuM2YgTWlCL3NcXFxcblxcXCIsIChtYXBfc2l6ZSAvIE1CKSAvXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICAoKGRvdWJsZSlzY2FuX3RpbWVfbnMgLyBOU0VDX1BFUl9TRUMpKTtcXG4gXFxuLVxcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIEhQQUdFX1NJWkUpO1xcbitcXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBocGFnZV9zaXplKTtcXG4gXFx0cmV0dXJuIEtTRlRfUEFTUztcXG4gXFxuIGVycl9vdXQ6XFxuLVxcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIEhQQUdFX1NJWkUpO1xcbitcXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBocGFnZV9zaXplKTtcXG4gXFx0cmV0dXJuIEtTRlRfRkFJTDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLjI0YWExZGUyN2MyNWIgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0zNjAsOCArMzYwLDggQEAgZmlcXG4gQ0FURUdPUlk9XFxcIm1lbWZkX3NlY3JldFxcXCIgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXRcXG4gZmlcXG4gXFxuLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwXFxuLUNBVEVHT1JZPVxcXCJrc21cXFwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMFxcbisjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMlxcbitDQVRFR09SWT1cXFwia3NtXFxcIiBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyA1MTJcXG4gIyBLU00gS1NNX01FUkdFX1RJTUUgdGVzdCB3aXRoIHNpemUgb2YgMTAwXFxuIENBVEVHT1JZPVxcXCJrc21cXFwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1QIC1zIDEwMFxcbiAjIEtTTSBNQURWX01FUkdFQUJMRSB0ZXN0IHdpdGggMTAgaWRlbnRpY2FsIHBhZ2VzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbmluZGV4IDhlYjBjNTYzMGU3ZTMuLjljZDk3OTAyMjRkYjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuQEAgLTM1LDEyICszNSwxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdHNpemVfdCBtYXBfbGVuO1xcbiBcXHRpbnQgcGFnZW1hcF9mZDtcXG4gXFx0aW50IGR1cmF0aW9uID0gMDtcXG4rXFx0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NoaWZ0ID0gcG1kX3BhZ2Vfc2hpZnQoKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuIFxcbiBcXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcbitcXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXFxcblxcXCIpO1xcbitcXG4gXFx0cmFtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7XFxuIFxcdGlmIChyYW0gXFx1MDAzZSBTSVpFX01BWCAvIHBzaXplKCkgLyA0KVxcbiBcXHRcXHRyYW0gPSBTSVpFX01BWCAvIDQ7XFxuQEAgLTcwLDIzICs3NSwyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdH1cXG4gXFxuIFxcdHdhcm54KFxcXCJhbGxvY2F0ZSAlemQgdHJhbnNodWdlIHBhZ2VzLCB1c2luZyAlemQgTWlCIHZpcnR1YWwgbWVtb3J5XFxcIlxcbi1cXHQgICAgICBcXFwiIGFuZCAlemQgTWlCIG9mIHJhbVxcXCIsIGxlbiBcXHUwMDNlXFx1MDAzZSBIUEFHRV9TSElGVCwgbGVuIFxcdTAwM2VcXHUwMDNlIDIwLFxcbi1cXHQgICAgICByYW0gXFx1MDAzZVxcdTAwM2UgKDIwICsgSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSAtIDEpKTtcXG4rXFx0ICAgICAgXFxcIiBhbmQgJXpkIE1pQiBvZiByYW1cXFwiLCBsZW4gXFx1MDAzZVxcdTAwM2UgaHBhZ2Vfc2hpZnQsIGxlbiBcXHUwMDNlXFx1MDAzZSAyMCxcXG4rXFx0ICAgICAgcmFtIFxcdTAwM2VcXHUwMDNlICgyMCArIGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkgLSAxKSk7XFxuIFxcbiBcXHRwYWdlbWFwX2ZkID0gb3BlbihcXFwiL3Byb2Mvc2VsZi9wYWdlbWFwXFxcIiwgT19SRE9OTFkpO1xcbiBcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwXFxcXG5cXFwiKTtcXG4gXFxuLVxcdGxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFO1xcbi1cXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiArIEhQQUdFX1NJWkUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApO1xcbitcXHRsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTtcXG4rXFx0cHRyID0gbW1hcChOVUxMLCBsZW4gKyBocGFnZV9zaXplLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcXG4gXFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImluaXRpYWwgbW1hcFxcXCIpO1xcbi1cXHRwdHIgKz0gSFBBR0VfU0laRSAtICh1aW50cHRyX3QpcHRyICUgSFBBR0VfU0laRTtcXG4rXFx0cHRyICs9IGhwYWdlX3NpemUgLSAodWludHB0cl90KXB0ciAlIGhwYWdlX3NpemU7XFxuIFxcbiBcXHRpZiAobWFkdmlzZShwdHIsIGxlbiwgTUFEVl9IVUdFUEFHRSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTUFEVl9IVUdFUEFHRVxcXCIpO1xcbiBcXG4tXFx0bWFwX2xlbiA9IHJhbSBcXHUwMDNlXFx1MDAzZSAoSFBBR0VfU0hJRlQgLSAxKTtcXG4rXFx0bWFwX2xlbiA9IHJhbSBcXHUwMDNlXFx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSAxKTtcXG4gXFx0bWFwID0gbWFsbG9jKG1hcF9sZW4pO1xcbiBcXHRpZiAoIW1hcClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtYXAgbWFsbG9jXFxcXG5cXFwiKTtcXG5AQCAtOTksNyArMTA0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRtZW1zZXQobWFwLCAwLCBtYXBfbGVuKTtcXG4gXFxuIFxcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2YSk7XFxuLVxcdFxcdGZvciAocCA9IHB0cjsgcCBcXHUwMDNjIHB0ciArIGxlbjsgcCArPSBIUEFHRV9TSVpFKSB7XFxuK1xcdFxcdGZvciAocCA9IHB0cjsgcCBcXHUwMDNjIHB0ciArIGxlbjsgcCArPSBocGFnZV9zaXplKSB7XFxuIFxcdFxcdFxcdGludDY0X3QgcGZuO1xcbiBcXG4gXFx0XFx0XFx0cGZuID0gYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpO1xcbkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHRpZiAocGZuIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRucl9mYWlsZWQrKztcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0c2l6ZV90IGlkeCA9IHBmbiBcXHUwMDNlXFx1MDAzZSAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSk7XFxuK1xcdFxcdFxcdFxcdHNpemVfdCBpZHggPSBwZm4gXFx1MDAzZVxcdTAwM2UgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpO1xcbiBcXG4gXFx0XFx0XFx0XFx0bnJfc3VjY2VlZCsrO1xcbiBcXHRcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IG1hcF9sZW4pIHtcXG5AQCAtMTIzLDcgKzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0Lyogc3BsaXQgdHJhbnNodWdlIHBhZ2UsIGtlZXAgbGFzdCBwYWdlICovXFxuLVxcdFxcdFxcdGlmIChtYWR2aXNlKHAsIEhQQUdFX1NJWkUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSlcXG4rXFx0XFx0XFx0aWYgKG1hZHZpc2UocCwgaHBhZ2Vfc2l6ZSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxcbiBcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk1BRFZfRE9OVE5FRURcXFwiKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNmIpO1xcbkBAIC0xMzEsNyArMTM2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiUuM2Ygcy9sb29wLCAlLjNmIG1zL3BhZ2UsICUxMC4zZiBNaUIvc1xcXFx0XFxcIlxcbiBcXHRcXHRcXHQgICAgICAgXFxcIiU0ZCBzdWNjZWVkLCAlNGQgZmFpbGVkLCAlNGQgZGlmZmVyZW50IHBhZ2VzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgcywgcyAqIDEwMDAgLyAobGVuIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1NISUZUKSwgbGVuIC8gcyAvICgxIFxcdTAwM2NcXHUwMDNjIDIwKSxcXG4rXFx0XFx0XFx0ICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiBcXHUwMDNlXFx1MDAzZSBocGFnZV9zaGlmdCksIGxlbiAvIHMgLyAoMSBcXHUwMDNjXFx1MDAzYyAyMCksXFxuIFxcdFxcdFxcdCAgICAgICBucl9zdWNjZWVkLCBucl9mYWlsZWQsIG5yX3BhZ2VzKTtcXG4gXFxuIFxcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgYi50dl9zZWMgLSBzdGFydC50dl9zZWMgXFx1MDAzZT0gZHVyYXRpb24pIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuaW5kZXggNDgyMWEzNTYzMDM2My4uZjc1YmYwYmFjZDE4YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5AQCAtMjEsNiArMjEsOCBAQFxcbiBcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xcbit1aW50NjRfdCBfX3BtZF9wYWdlX3NpemU7XFxuK3VpbnQ2NF90IF9fcG1kX3BhZ2Vfc2hpZnQ7XFxuIFxcbiB1aW50NjRfdCBwYWdlbWFwX2dldF9lbnRyeShpbnQgZmQsIGNoYXIgKnN0YXJ0KVxcbiB7XFxuQEAgLTE2MSw2ICsxNjMsOSBAQCB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxcbiBcXHRjaGFyIGJ1ZlsyMF07XFxuIFxcdHNzaXplX3QgbnVtX3JlYWQ7XFxuIFxcbitcXHRpZiAoX19wbWRfcGFnZV9zaXplKVxcbitcXHRcXHRyZXR1cm4gX19wbWRfcGFnZV9zaXplO1xcbitcXG4gXFx0ZmQgPSBvcGVuKFBNRF9TSVpFX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNzMsNyArMTc4LDI1IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpXFxuIFxcdGJ1ZltudW1fcmVhZF0gPSAnXFxcXDAnO1xcbiBcXHRjbG9zZShmZCk7XFxuIFxcbi1cXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcXG4rXFx0X19wbWRfcGFnZV9zaXplID0gc3RydG91bChidWYsIE5VTEwsIDEwKTtcXG4rXFxuK1xcdHJldHVybiBfX3BtZF9wYWdlX3NpemU7XFxuK31cXG4rXFxuK3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpXFxuK3tcXG4rXFx0aWYgKF9fcG1kX3BhZ2Vfc2hpZnQpXFxuK1xcdFxcdHJldHVybiBfX3BtZF9wYWdlX3NoaWZ0O1xcbitcXG4rXFx0aWYgKCFfX3BtZF9wYWdlX3NpemUpXFxuK1xcdFxcdF9fcG1kX3BhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcbitcXHRpZiAoIV9fcG1kX3BhZ2Vfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRfX3BtZF9wYWdlX3NoaWZ0ID0gKGZmc2woX19wbWRfcGFnZV9zaXplKSAtIDEpO1xcbitcXG4rXFx0cmV0dXJuIF9fcG1kX3BhZ2Vfc2hpZnQ7XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcXG5AQCAtNDUyLDE0ICs0NzUsMTkgQEAgYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemVcXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcXG4ge1xcbiBcXHR1aW50NjRfdCBlbnRbMl07XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wYWdlX3NoaWZ0KCk7XFxuK1xcbitcXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHQvKiBkcm9wIHBtZCAqL1xcbi1cXHRpZiAobW1hcChwdHIsIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdGlmIChtbWFwKHB0ciwgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0IE1BUF9GSVhFRCB8IE1BUF9BTk9OWU1PVVMgfFxcbiBcXHRcXHQgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCkgIT0gcHRyKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1tYXAgdHJhbnNodWdlXFxcXG5cXFwiKTtcXG4gXFxuLVxcdGlmIChtYWR2aXNlKHB0ciwgSFBBR0VfU0laRSwgTUFEVl9IVUdFUEFHRSkpXFxuK1xcdGlmIChtYWR2aXNlKHB0ciwgaHBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTUFEVl9IVUdFUEFHRVxcXFxuXFxcIik7XFxuIFxcbiBcXHQvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi9cXG5AQCAtNDcxLDcgKzQ5OSw3IEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuIFxcbiBcXHRpZiAoUEFHRU1BUF9QUkVTRU5UKGVudFswXSkgXFx1MDAyNlxcdTAwMjYgUEFHRU1BUF9QUkVTRU5UKGVudFsxXSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIFBBR0VNQVBfUEZOKGVudFswXSkgKyAxID09IFBBR0VNQVBfUEZOKGVudFsxXSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICEoUEFHRU1BUF9QRk4oZW50WzBdKSBcXHUwMDI2ICgoMSBcXHUwMDNjXFx1MDAzYyAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSkpIC0gMSkpKVxcbitcXHQgICAgIShQQUdFTUFQX1BGTihlbnRbMF0pIFxcdTAwMjYgKCgxIFxcdTAwM2NcXHUwMDNjIChocGFnZV9zaGlmdCAtIHBzaGlmdCgpKSkgLSAxKSkpXFxuIFxcdFxcdHJldHVybiBQQUdFTUFQX1BGTihlbnRbMF0pO1xcbiBcXG4gXFx0cmV0dXJuIC0xO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li4xZDI2MDhjMWFkMDhmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC0zMSw2ICszMSw4IEBAXFxuIFxcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcXG4rZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BhZ2Vfc2l6ZTtcXG4rZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BhZ2Vfc2hpZnQ7XFxuIFxcbiAvKlxcbiAgKiBSZXByZXNlbnRzIGFuIG9wZW4gZmQgYW5kIFBST0NNQVBfUVVFUlkgc3RhdGUgZm9yIGJpbmFyeSAodmlhIGlvY3RsKVxcbkBAIC04OSw2ICs5MSw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xcbiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcXG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XFxuK3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpO1xcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuQEAgLTE1NywxMiArMTYwLDYgQEAgaW50IGtzbV9zdG9wKHZvaWQpO1xcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XFxuIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xcbiBcXG4tLypcXG4tICogT24gcHBjNjQgdGhpcyB3aWxsIG9ubHkgd29yayB3aXRoIHJhZGl4IDJNIGh1Z2VwYWdlIHNpemVcXG4tICovXFxuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcXG4tI2RlZmluZSBIUEFHRV9TSVpFICgxIFxcdTAwM2NcXHUwMDNjIEhQQUdFX1NISUZUKVxcbi1cXG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVxcdCgoKGVudCkgXFx1MDAyNiAoMXVsbCBcXHUwMDNjXFx1MDAzYyA2MykpICE9IDApXFxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVxcdCgoZW50KSBcXHUwMDI2ICgoMXVsbCBcXHUwMDNjXFx1MDAzYyA1NSkgLSAxKSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE4OjAwLjAyNjQ5MjEyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzUxNDIyNzc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ODQ4MmY2YjBmNjRmNmU3NjlmMmQyOTc1MWJiODhjNjBiZWE0NmY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMzoxNzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uZTU3Y2M3ZTM5ZTQxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5AQCAtMjE5NSwxNCArMjE5NSwyMSBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgcGFnZW1hcF9zY2FuKVxuIFRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gMiAqIEhQQUdFX1NJWkU7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IHNpemUgLyBwYWdlX3NpemU7XG4rXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xuIFx0Y2hhciAqcHRyO1xuIFx0aW50IGk7XG4gXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4rXHRpZiAoIWhwYWdlX3NpemUpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cIik7XG4rXG4rXHRzaXplID0gMiAqIGhwYWdlX3NpemU7XG4rXHRudW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplO1xuK1xuIFx0LyogTmVlZCBmaWxlIHRvIGJlIGNvcnJlY3Qgc2l6ZSBmb3IgdGVzdHMgZm9yIG5vbi1hbm9uLiAqL1xuIFx0aWYgKHZhcmlhbnQtXHUwMDNlYmFja2luZyAhPSBBTk9OX0JBQ0tFRClcbiBcdFx0QVNTRVJUX0VRKGZ0cnVuY2F0ZShzZWxmLVx1MDAzZWZkLCBzaXplKSwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuaW5kZXggNWZkNzc5MmEwZDQ3OS4uZWYyN2NlNDY3YjhjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuQEAgLTUyMSwxOSArNTIxLDIzIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4gXHR1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9ucztcbiBcdGludCBwYWdlbWFwX2ZkLCBuX25vcm1hbF9wYWdlcywgbl9odWdlX3BhZ2VzO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4gXG4gXHRpZiAoIXRocF9pc19lbmFibGVkKCkpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIEtTRlRfU0tJUDtcbiBcdH1cbiBcbitcdGlmICghaHBhZ2Vfc2l6ZSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcblwiKTtcbitcbiBcdG1hcF9zaXplICo9IE1CO1xuIFx0c2l6ZV90IGxlbiA9IG1hcF9zaXplO1xuIFxuLVx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XG4tXHRtYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiArIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTtcbitcdG1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICsgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0XHRNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRtYXBfcHRyID0gbWFwX3B0cl9vcmlnICsgSFBBR0VfU0laRSAtICh1aW50cHRyX3QpbWFwX3B0cl9vcmlnICUgSFBBR0VfU0laRTtcbitcdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgKyBocGFnZV9zaXplIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBocGFnZV9zaXplO1xuIFxuIFx0aWYgKG1hcF9wdHJfb3JpZyA9PSBNQVBfRkFJTEVEKVxuIFx0XHRlcnIoMiwgXCJpbml0aWFsIG1tYXBcIik7XG5AQCAtNTQ3LDcgKzU1MSw3IEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXG4gXHRuX25vcm1hbF9wYWdlcyA9IDA7XG4gXHRuX2h1Z2VfcGFnZXMgPSAwO1xuLVx0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcdTAwM2MgbWFwX3B0ciArIGxlbjsgcCArPSBIUEFHRV9TSVpFKSB7XG4rXHRmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwIFx1MDAzYyBtYXBfcHRyICsgbGVuOyBwICs9IGhwYWdlX3NpemUpIHtcbiBcdFx0aWYgKGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKSBcdTAwM2MgMClcbiBcdFx0XHRuX25vcm1hbF9wYWdlcysrO1xuIFx0XHRlbHNlXG5AQCAtNTc4LDExICs1ODIsMTEgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQXZlcmFnZSBzcGVlZDogICUuM2YgTWlCL3NcXG5cIiwgKG1hcF9zaXplIC8gTUIpIC9cbiBcdFx0XHRcdFx0ICAgICAgICgoZG91YmxlKXNjYW5fdGltZV9ucyAvIE5TRUNfUEVSX1NFQykpO1xuIFxuLVx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgSFBBR0VfU0laRSk7XG4rXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBocGFnZV9zaXplKTtcbiBcdHJldHVybiBLU0ZUX1BBU1M7XG4gXG4gZXJyX291dDpcbi1cdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIEhQQUdFX1NJWkUpO1xuK1x0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgaHBhZ2Vfc2l6ZSk7XG4gXHRyZXR1cm4gS1NGVF9GQUlMO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBkMDlmOWY2YTM4NGVlLi4yNGFhMWRlMjdjMjViIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMzYwLDggKzM2MCw4IEBAIGZpXG4gQ0FURUdPUlk9XCJtZW1mZF9zZWNyZXRcIiBydW5fdGVzdCAuL21lbWZkX3NlY3JldFxuIGZpXG4gXG4tIyBLU00gS1NNX01FUkdFX1RJTUVfSFVHRV9QQUdFUyB0ZXN0IHdpdGggc2l6ZSBvZiAxMDBcbi1DQVRFR09SWT1cImtzbVwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMFxuKyMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgNTEyXG4rQ0FURUdPUlk9XCJrc21cIiBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyA1MTJcbiAjIEtTTSBLU01fTUVSR0VfVElNRSB0ZXN0IHdpdGggc2l6ZSBvZiAxMDBcbiBDQVRFR09SWT1cImtzbVwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1QIC1zIDEwMFxuICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbmluZGV4IDhlYjBjNTYzMGU3ZTMuLjljZDk3OTAyMjRkYjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTM1LDEyICszNSwxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRzaXplX3QgbWFwX2xlbjtcbiBcdGludCBwYWdlbWFwX2ZkO1xuIFx0aW50IGR1cmF0aW9uID0gMDtcbitcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcGFnZV9zaGlmdCgpO1xuIFxuIFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiBcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcbiBcdFx0a3NmdF9leGl0X3NraXAoXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwiKTtcbiBcbitcdGlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cIik7XG4rXG4gXHRyYW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTtcbiBcdGlmIChyYW0gXHUwMDNlIFNJWkVfTUFYIC8gcHNpemUoKSAvIDQpXG4gXHRcdHJhbSA9IFNJWkVfTUFYIC8gNDtcbkBAIC03MCwyMyArNzUsMjMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0fVxuIFxuIFx0d2FybngoXCJhbGxvY2F0ZSAlemQgdHJhbnNodWdlIHBhZ2VzLCB1c2luZyAlemQgTWlCIHZpcnR1YWwgbWVtb3J5XCJcbi1cdCAgICAgIFwiIGFuZCAlemQgTWlCIG9mIHJhbVwiLCBsZW4gXHUwMDNlXHUwMDNlIEhQQUdFX1NISUZULCBsZW4gXHUwMDNlXHUwMDNlIDIwLFxuLVx0ICAgICAgcmFtIFx1MDAzZVx1MDAzZSAoMjAgKyBIUEFHRV9TSElGVCAtIHBzaGlmdCgpIC0gMSkpO1xuK1x0ICAgICAgXCIgYW5kICV6ZCBNaUIgb2YgcmFtXCIsIGxlbiBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQsIGxlbiBcdTAwM2VcdTAwM2UgMjAsXG4rXHQgICAgICByYW0gXHUwMDNlXHUwMDNlICgyMCArIGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkgLSAxKSk7XG4gXG4gXHRwYWdlbWFwX2ZkID0gb3BlbihcIi9wcm9jL3NlbGYvcGFnZW1hcFwiLCBPX1JET05MWSk7XG4gXHRpZiAocGFnZW1hcF9mZCBcdTAwM2MgMClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwib3BlbiBwYWdlbWFwXFxuXCIpO1xuIFxuLVx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XG4tXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiArIEhQQUdFX1NJWkUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApO1xuK1x0bGVuIC09IGxlbiAlIGhwYWdlX3NpemU7XG4rXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiArIGhwYWdlX3NpemUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApO1xuIFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJpbml0aWFsIG1tYXBcIik7XG4tXHRwdHIgKz0gSFBBR0VfU0laRSAtICh1aW50cHRyX3QpcHRyICUgSFBBR0VfU0laRTtcbitcdHB0ciArPSBocGFnZV9zaXplIC0gKHVpbnRwdHJfdClwdHIgJSBocGFnZV9zaXplO1xuIFxuIFx0aWYgKG1hZHZpc2UocHRyLCBsZW4sIE1BRFZfSFVHRVBBR0UpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJNQURWX0hVR0VQQUdFXCIpO1xuIFxuLVx0bWFwX2xlbiA9IHJhbSBcdTAwM2VcdTAwM2UgKEhQQUdFX1NISUZUIC0gMSk7XG4rXHRtYXBfbGVuID0gcmFtIFx1MDAzZVx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSAxKTtcbiBcdG1hcCA9IG1hbGxvYyhtYXBfbGVuKTtcbiBcdGlmICghbWFwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJtYXAgbWFsbG9jXFxuXCIpO1xuQEAgLTk5LDcgKzEwNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0bWVtc2V0KG1hcCwgMCwgbWFwX2xlbik7XG4gXG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZhKTtcbi1cdFx0Zm9yIChwID0gcHRyOyBwIFx1MDAzYyBwdHIgKyBsZW47IHAgKz0gSFBBR0VfU0laRSkge1xuK1x0XHRmb3IgKHAgPSBwdHI7IHAgXHUwMDNjIHB0ciArIGxlbjsgcCArPSBocGFnZV9zaXplKSB7XG4gXHRcdFx0aW50NjRfdCBwZm47XG4gXG4gXHRcdFx0cGZuID0gYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpO1xuQEAgLTEwNyw3ICsxMTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aWYgKHBmbiBcdTAwM2MgMCkge1xuIFx0XHRcdFx0bnJfZmFpbGVkKys7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHNpemVfdCBpZHggPSBwZm4gXHUwMDNlXHUwMDNlIChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKTtcbitcdFx0XHRcdHNpemVfdCBpZHggPSBwZm4gXHUwMDNlXHUwMDNlIChocGFnZV9zaGlmdCAtIHBzaGlmdCgpKTtcbiBcbiBcdFx0XHRcdG5yX3N1Y2NlZWQrKztcbiBcdFx0XHRcdGlmIChpZHggXHUwMDNlPSBtYXBfbGVuKSB7XG5AQCAtMTIzLDcgKzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHR9XG4gXG4gXHRcdFx0Lyogc3BsaXQgdHJhbnNodWdlIHBhZ2UsIGtlZXAgbGFzdCBwYWdlICovXG4tXHRcdFx0aWYgKG1hZHZpc2UocCwgSFBBR0VfU0laRSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxuK1x0XHRcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3NpemUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSlcbiBcdFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk1BRFZfRE9OVE5FRURcIik7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmIpO1xuQEAgLTEzMSw3ICsxMzYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiJS4zZiBzL2xvb3AsICUuM2YgbXMvcGFnZSwgJTEwLjNmIE1pQi9zXFx0XCJcbiBcdFx0XHQgICAgICAgXCIlNGQgc3VjY2VlZCwgJTRkIGZhaWxlZCwgJTRkIGRpZmZlcmVudCBwYWdlc1xcblwiLFxuLVx0XHRcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXHUwMDNlXHUwMDNlIEhQQUdFX1NISUZUKSwgbGVuIC8gcyAvICgxIFx1MDAzY1x1MDAzYyAyMCksXG4rXHRcdFx0ICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQpLCBsZW4gLyBzIC8gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbiBcdFx0XHQgICAgICAgbnJfc3VjY2VlZCwgbnJfZmFpbGVkLCBucl9wYWdlcyk7XG4gXG4gXHRcdGlmIChkdXJhdGlvbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgYi50dl9zZWMgLSBzdGFydC50dl9zZWMgXHUwMDNlPSBkdXJhdGlvbikge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggNDgyMWEzNTYzMDM2My4uZjc1YmYwYmFjZDE4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMjEsNiArMjEsOCBAQFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xuK3VpbnQ2NF90IF9fcG1kX3BhZ2Vfc2l6ZTtcbit1aW50NjRfdCBfX3BtZF9wYWdlX3NoaWZ0O1xuIFxuIHVpbnQ2NF90IHBhZ2VtYXBfZ2V0X2VudHJ5KGludCBmZCwgY2hhciAqc3RhcnQpXG4ge1xuQEAgLTE2MSw2ICsxNjMsOSBAQCB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxuIFx0Y2hhciBidWZbMjBdO1xuIFx0c3NpemVfdCBudW1fcmVhZDtcbiBcbitcdGlmIChfX3BtZF9wYWdlX3NpemUpXG4rXHRcdHJldHVybiBfX3BtZF9wYWdlX3NpemU7XG4rXG4gXHRmZCA9IG9wZW4oUE1EX1NJWkVfRklMRV9QQVRILCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3Myw3ICsxNzgsMjUgQEAgdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZClcbiBcdGJ1ZltudW1fcmVhZF0gPSAnXFwwJztcbiBcdGNsb3NlKGZkKTtcbiBcbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuK1x0X19wbWRfcGFnZV9zaXplID0gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbitcbitcdHJldHVybiBfX3BtZF9wYWdlX3NpemU7XG4rfVxuK1xuK3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpXG4re1xuK1x0aWYgKF9fcG1kX3BhZ2Vfc2hpZnQpXG4rXHRcdHJldHVybiBfX3BtZF9wYWdlX3NoaWZ0O1xuK1xuK1x0aWYgKCFfX3BtZF9wYWdlX3NpemUpXG4rXHRcdF9fcG1kX3BhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXG4rXHRpZiAoIV9fcG1kX3BhZ2Vfc2l6ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRfX3BtZF9wYWdlX3NoaWZ0ID0gKGZmc2woX19wbWRfcGFnZV9zaXplKSAtIDEpO1xuK1xuK1x0cmV0dXJuIF9fcG1kX3BhZ2Vfc2hpZnQ7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbkBAIC00NTIsMTQgKzQ3NSwxOSBAQCBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZVxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4ge1xuIFx0dWludDY0X3QgZW50WzJdO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wYWdlX3NoaWZ0KCk7XG4rXG4rXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxuK1x0XHRyZXR1cm4gLTE7XG4gXG4gXHQvKiBkcm9wIHBtZCAqL1xuLVx0aWYgKG1tYXAocHRyLCBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0aWYgKG1tYXAocHRyLCBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUyB8XG4gXHRcdCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKSAhPSBwdHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXAgdHJhbnNodWdlXFxuXCIpO1xuIFxuLVx0aWYgKG1hZHZpc2UocHRyLCBIUEFHRV9TSVpFLCBNQURWX0hVR0VQQUdFKSlcbitcdGlmIChtYWR2aXNlKHB0ciwgaHBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk1BRFZfSFVHRVBBR0VcXG5cIik7XG4gXG4gXHQvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi9cbkBAIC00NzEsNyArNDk5LDcgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbiBcbiBcdGlmIChQQUdFTUFQX1BSRVNFTlQoZW50WzBdKSBcdTAwMjZcdTAwMjYgUEFHRU1BUF9QUkVTRU5UKGVudFsxXSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgUEFHRU1BUF9QRk4oZW50WzBdKSArIDEgPT0gUEFHRU1BUF9QRk4oZW50WzFdKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKEhQQUdFX1NISUZUIC0gcHNoaWZ0KCkpKSAtIDEpKSlcbitcdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpKSAtIDEpKSlcbiBcdFx0cmV0dXJuIFBBR0VNQVBfUEZOKGVudFswXSk7XG4gXG4gXHRyZXR1cm4gLTE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li4xZDI2MDhjMWFkMDhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0zMSw2ICszMSw4IEBAXG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbitleHRlcm4gdWludDY0X3QgX19wbWRfcGFnZV9zaXplO1xuK2V4dGVybiB1aW50NjRfdCBfX3BtZF9wYWdlX3NoaWZ0O1xuIFxuIC8qXG4gICogUmVwcmVzZW50cyBhbiBvcGVuIGZkIGFuZCBQUk9DTUFQX1FVRVJZIHN0YXRlIGZvciBiaW5hcnkgKHZpYSBpb2N0bClcbkBAIC04OSw2ICs5MSw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xuIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4rdWludDY0X3QgcG1kX3BhZ2Vfc2hpZnQodm9pZCk7XG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTtcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbkBAIC0xNTcsMTIgKzE2MCw2IEBAIGludCBrc21fc3RvcCh2b2lkKTtcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XG4gaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4tLypcbi0gKiBPbiBwcGM2NCB0aGlzIHdpbGwgb25seSB3b3JrIHdpdGggcmFkaXggMk0gaHVnZXBhZ2Ugc2l6ZVxuLSAqL1xuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcbi0jZGVmaW5lIEhQQUdFX1NJWkUgKDEgXHUwMDNjXHUwMDNjIEhQQUdFX1NISUZUKVxuLVxuICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudClcdCgoKGVudCkgXHUwMDI2ICgxdWxsIFx1MDAzY1x1MDAzYyA2MykpICE9IDApXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXHQoKGVudCkgXHUwMDI2ICgoMXVsbCBcdTAwM2NcdTAwM2MgNTUpIC0gMSkpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxODowMC4wMjY0OTMzNThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTE0MjA1MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBXb3J0aEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIHNlbGYtdGVzdHMgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW1gKSB0ZXN0cywgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogYGd1YXJkLXJlZ2lvbnMuY2AsIGBrc21fdGVzdHMuY2AsIGBydW5fdm10ZXN0cy5zaGAsIGB0cmFuc2h1Z2Utc3RyZXNzLmNgLCBgdm1fdXRpbC5jYCwgYW5kIGB2bV91dGlsLmhgLiBBbGwgb2YgdGhlbSwgaW1wb3J0YW50bHksIGFyZSBjb250YWluZWQgd2l0aGluIHRoYXQgb25lIGRpcmVjdG9yeS5cblxuTm93LCBsZXQncyBhcHBseSB0aGF0IFwiTkVHQVRJVkUgQ1JJVEVSSUFcIiBpbiBTRUNUSU9OIDIuIFRoZSBjb3JlIG9mIHRoaXMgZGVjaXNpb24gaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBub3RoaW5nIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgc291cmNlIHRyZWUgKGUuZy4sIGBtbS9gLCBga2VybmVsL2AsIGBmcy9gLCBgZHJpdmVycy9gLCBgYXJjaC9gKSBhcHBlYXJzIHRvIGJlIHRvdWNoZWQuIFRoZXNlIGFyZSBwdXJlbHkgc2VsZi10ZXN0cy4gU3BlY2lmaWNhbGx5LCB0aGV5IGZhbGwgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIHVzZXItc3BhY2UgdGVzdGluZyBhbmQgc2NyaXB0cyB0aGF0ICpkb24ndCogZGlyZWN0bHkgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgb3IgbW9kdWxlcy4gVGhlcmVmb3JlLCBieSB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgb3V0bGluZWQsIHRoZSBwYXRjaCBpcyAqbm90KiB3b3J0aCBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gU2luY2UgdGhpcyBpcyBhIHRlc3QgYW5kIG5vdCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBhbHNvIGJlIGVtcHR5LiBJJ2xsIHF1aWNrbHkgY29uZmlybSBteSBhc3Nlc3NtZW50IHdpdGggYSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AganVzdCB0byBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTAsIk91dHB1dFRva2VucyI6NzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxODowMy41NDA3MDExOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTg6MDMuNTQwNzIxNTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqp5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 12:34:10 +0000 UTC FinishedAt: 2026-09-07 13:18:04 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc4NDgyZjZiMGY2NGY2ZTc2OWYyZDI5NzUxYmI4OGM2MGJlYTQ2ZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEzOjE3OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uZTU3Y2M3ZTM5ZTQxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5AQCAtMjE5NSwxNCAmIzQzOzIxOTUsMjEgQEAgVEVTVF9GKGd1YXJkX3JlZ2lvbnMsIHBhZ2VtYXBfc2NhbilcbiBURVNUX0YoZ3VhcmRfcmVnaW9ucywgY29sbGFwc2UpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6ZSA9IDIgKiBIUEFHRV9TSVpFO1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bV9wYWdlcztcbiBcdGNoYXIgKnB0cjtcbiBcdGludCBpO1xuIFxuIFx0aWYgKCF0aHBfYXZhaWxhYmxlKCkpXG4gXHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4gXG4mIzQzO1x0aWYgKCFocGFnZV9zaXplKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O3JlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzaXplID0gMiAqIGhwYWdlX3NpemU7XG4mIzQzO1x0bnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcbiYjNDM7XG4gXHQvKiBOZWVkIGZpbGUgdG8gYmUgY29ycmVjdCBzaXplIGZvciB0ZXN0cyBmb3Igbm9uLWFub24uICovXG4gXHRpZiAodmFyaWFudC1cdTAwM2ViYWNraW5nICE9IEFOT05fQkFDS0VEKVxuIFx0XHRBU1NFUlRfRVEoZnRydW5jYXRlKHNlbGYtXHUwMDNlZmQsIHNpemUpLCAwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li5lZjI3Y2U0NjdiOGMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG5AQCAtNTIxLDE5ICYjNDM7NTIxLDIzIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4gXHR1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9ucztcbiBcdGludCBwYWdlbWFwX2ZkLCBuX25vcm1hbF9wYWdlcywgbl9odWdlX3BhZ2VzO1xuJiM0MztcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuIFxuIFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKSB7XG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlcyBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIEtTRlRfU0tJUDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoIWhwYWdlX3NpemUpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0bWFwX3NpemUgKj0gTUI7XG4gXHRzaXplX3QgbGVuID0gbWFwX3NpemU7XG4gXG4tXHRsZW4gLT0gbGVuICUgSFBBR0VfU0laRTtcbi1cdG1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICYjNDM7IEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0bGVuIC09IGxlbiAlIGhwYWdlX3NpemU7XG4mIzQzO1x0bWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0XHRNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRtYXBfcHRyID0gbWFwX3B0cl9vcmlnICYjNDM7IEhQQUdFX1NJWkUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIEhQQUdFX1NJWkU7XG4mIzQzO1x0bWFwX3B0ciA9IG1hcF9wdHJfb3JpZyAmIzQzOyBocGFnZV9zaXplIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBocGFnZV9zaXplO1xuIFxuIFx0aWYgKG1hcF9wdHJfb3JpZyA9PSBNQVBfRkFJTEVEKVxuIFx0XHRlcnIoMiwgXCYjMzQ7aW5pdGlhbCBtbWFwXCYjMzQ7KTtcbkBAIC01NDcsNyAmIzQzOzU1MSw3IEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXG4gXHRuX25vcm1hbF9wYWdlcyA9IDA7XG4gXHRuX2h1Z2VfcGFnZXMgPSAwO1xuLVx0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcdTAwM2MgbWFwX3B0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IEhQQUdFX1NJWkUpIHtcbiYjNDM7XHRmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwIFx1MDAzYyBtYXBfcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gaHBhZ2Vfc2l6ZSkge1xuIFx0XHRpZiAoYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpIFx1MDAzYyAwKVxuIFx0XHRcdG5fbm9ybWFsX3BhZ2VzJiM0MzsmIzQzOztcbiBcdFx0ZWxzZVxuQEAgLTU3OCwxMSAmIzQzOzU4MiwxMSBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxuIFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QXZlcmFnZSBzcGVlZDogICUuM2YgTWlCL3NcXG5cJiMzNDssIChtYXBfc2l6ZSAvIE1CKSAvXG4gXHRcdFx0XHRcdCAgICAgICAoKGRvdWJsZSlzY2FuX3RpbWVfbnMgLyBOU0VDX1BFUl9TRUMpKTtcbiBcbi1cdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBIUEFHRV9TSVpFKTtcbiYjNDM7XHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSk7XG4gXHRyZXR1cm4gS1NGVF9QQVNTO1xuIFxuIGVycl9vdXQ6XG4tXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgSFBBR0VfU0laRSk7XG4mIzQzO1x0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IGhwYWdlX3NpemUpO1xuIFx0cmV0dXJuIEtTRlRfRkFJTDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuaW5kZXggZDA5ZjlmNmEzODRlZS4uMjRhYTFkZTI3YzI1YiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuQEAgLTM2MCw4ICYjNDM7MzYwLDggQEAgZmlcbiBDQVRFR09SWT1cJiMzNDttZW1mZF9zZWNyZXRcJiMzNDsgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXRcbiBmaVxuIFxuLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4tQ0FURUdPUlk9XCYjMzQ7a3NtXCYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMFxuJiM0MzsjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMlxuJiM0MztDQVRFR09SWT1cJiMzNDtrc21cJiMzNDsgcnVuX3Rlc3QgLi9rc21fdGVzdHMgLUggLXMgNTEyXG4gIyBLU00gS1NNX01FUkdFX1RJTUUgdGVzdCB3aXRoIHNpemUgb2YgMTAwXG4gQ0FURUdPUlk9XCYjMzQ7a3NtXCYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1QIC1zIDEwMFxuICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbmluZGV4IDhlYjBjNTYzMGU3ZTMuLjljZDk3OTAyMjRkYjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTM1LDEyICYjNDM7MzUsMTcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0c2l6ZV90IG1hcF9sZW47XG4gXHRpbnQgcGFnZW1hcF9mZDtcbiBcdGludCBkdXJhdGlvbiA9IDA7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4mIzQzO1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcGFnZV9zaGlmdCgpO1xuIFxuIFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiBcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcbiBcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuIFxuJiM0MztcdGlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7cmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuIFx0cmFtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7XG4gXHRpZiAocmFtIFx1MDAzZSBTSVpFX01BWCAvIHBzaXplKCkgLyA0KVxuIFx0XHRyYW0gPSBTSVpFX01BWCAvIDQ7XG5AQCAtNzAsMjMgJiM0Mzs3NSwyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHR9XG4gXG4gXHR3YXJueChcJiMzNDthbGxvY2F0ZSAlemQgdHJhbnNodWdlIHBhZ2VzLCB1c2luZyAlemQgTWlCIHZpcnR1YWwgbWVtb3J5XCYjMzQ7XG4tXHQgICAgICBcJiMzNDsgYW5kICV6ZCBNaUIgb2YgcmFtXCYjMzQ7LCBsZW4gXHUwMDNlXHUwMDNlIEhQQUdFX1NISUZULCBsZW4gXHUwMDNlXHUwMDNlIDIwLFxuLVx0ICAgICAgcmFtIFx1MDAzZVx1MDAzZSAoMjAgJiM0MzsgSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSAtIDEpKTtcbiYjNDM7XHQgICAgICBcJiMzNDsgYW5kICV6ZCBNaUIgb2YgcmFtXCYjMzQ7LCBsZW4gXHUwMDNlXHUwMDNlIGhwYWdlX3NoaWZ0LCBsZW4gXHUwMDNlXHUwMDNlIDIwLFxuJiM0MztcdCAgICAgIHJhbSBcdTAwM2VcdTAwM2UgKDIwICYjNDM7IGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkgLSAxKSk7XG4gXG4gXHRwYWdlbWFwX2ZkID0gb3BlbihcJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXBcJiMzNDssIE9fUkRPTkxZKTtcbiBcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7b3BlbiBwYWdlbWFwXFxuXCYjMzQ7KTtcbiBcbi1cdGxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFO1xuLVx0cHRyID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgSFBBR0VfU0laRSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7XG4mIzQzO1x0bGVuIC09IGxlbiAlIGhwYWdlX3NpemU7XG4mIzQzO1x0cHRyID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7XG4gXHRpZiAocHRyID09IE1BUF9GQUlMRUQpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtpbml0aWFsIG1tYXBcJiMzNDspO1xuLVx0cHRyICYjNDM7PSBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdClwdHIgJSBIUEFHRV9TSVpFO1xuJiM0MztcdHB0ciAmIzQzOz0gaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpcHRyICUgaHBhZ2Vfc2l6ZTtcbiBcbiBcdGlmIChtYWR2aXNlKHB0ciwgbGVuLCBNQURWX0hVR0VQQUdFKSlcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O01BRFZfSFVHRVBBR0VcJiMzNDspO1xuIFxuLVx0bWFwX2xlbiA9IHJhbSBcdTAwM2VcdTAwM2UgKEhQQUdFX1NISUZUIC0gMSk7XG4mIzQzO1x0bWFwX2xlbiA9IHJhbSBcdTAwM2VcdTAwM2UgKGhwYWdlX3NoaWZ0IC0gMSk7XG4gXHRtYXAgPSBtYWxsb2MobWFwX2xlbik7XG4gXHRpZiAoIW1hcClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O21hcCBtYWxsb2NcXG5cJiMzNDspO1xuQEAgLTk5LDcgJiM0MzsxMDQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdG1lbXNldChtYXAsIDAsIG1hcF9sZW4pO1xuIFxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXHUwMDI2YSk7XG4tXHRcdGZvciAocCA9IHB0cjsgcCBcdTAwM2MgcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gSFBBR0VfU0laRSkge1xuJiM0MztcdFx0Zm9yIChwID0gcHRyOyBwIFx1MDAzYyBwdHIgJiM0MzsgbGVuOyBwICYjNDM7PSBocGFnZV9zaXplKSB7XG4gXHRcdFx0aW50NjRfdCBwZm47XG4gXG4gXHRcdFx0cGZuID0gYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpO1xuQEAgLTEwNyw3ICYjNDM7MTEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdGlmIChwZm4gXHUwMDNjIDApIHtcbiBcdFx0XHRcdG5yX2ZhaWxlZCYjNDM7JiM0Mzs7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHNpemVfdCBpZHggPSBwZm4gXHUwMDNlXHUwMDNlIChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKTtcbiYjNDM7XHRcdFx0XHRzaXplX3QgaWR4ID0gcGZuIFx1MDAzZVx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSk7XG4gXG4gXHRcdFx0XHRucl9zdWNjZWVkJiM0MzsmIzQzOztcbiBcdFx0XHRcdGlmIChpZHggXHUwMDNlPSBtYXBfbGVuKSB7XG5AQCAtMTIzLDcgJiM0MzsxMjgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0fVxuIFxuIFx0XHRcdC8qIHNwbGl0IHRyYW5zaHVnZSBwYWdlLCBrZWVwIGxhc3QgcGFnZSAqL1xuLVx0XHRcdGlmIChtYWR2aXNlKHAsIEhQQUdFX1NJWkUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSlcbiYjNDM7XHRcdFx0aWYgKG1hZHZpc2UocCwgaHBhZ2Vfc2l6ZSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxuIFx0XHRcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O01BRFZfRE9OVE5FRURcJiMzNDspO1xuIFx0XHR9XG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZiKTtcbkBAIC0xMzEsNyAmIzQzOzEzNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcbiBcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JS4zZiBzL2xvb3AsICUuM2YgbXMvcGFnZSwgJTEwLjNmIE1pQi9zXFx0XCYjMzQ7XG4gXHRcdFx0ICAgICAgIFwmIzM0OyU0ZCBzdWNjZWVkLCAlNGQgZmFpbGVkLCAlNGQgZGlmZmVyZW50IHBhZ2VzXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXHUwMDNlXHUwMDNlIEhQQUdFX1NISUZUKSwgbGVuIC8gcyAvICgxIFx1MDAzY1x1MDAzYyAyMCksXG4mIzQzO1x0XHRcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXHUwMDNlXHUwMDNlIGhwYWdlX3NoaWZ0KSwgbGVuIC8gcyAvICgxIFx1MDAzY1x1MDAzYyAyMCksXG4gXHRcdFx0ICAgICAgIG5yX3N1Y2NlZWQsIG5yX2ZhaWxlZCwgbnJfcGFnZXMpO1xuIFxuIFx0XHRpZiAoZHVyYXRpb24gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IGIudHZfc2VjIC0gc3RhcnQudHZfc2VjIFx1MDAzZT0gZHVyYXRpb24pIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbmluZGV4IDQ4MjFhMzU2MzAzNjMuLmY3NWJmMGJhY2QxOGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuQEAgLTIxLDYgJiM0MzsyMSw4IEBAXG4gXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XG4mIzQzO3VpbnQ2NF90IF9fcG1kX3BhZ2Vfc2l6ZTtcbiYjNDM7dWludDY0X3QgX19wbWRfcGFnZV9zaGlmdDtcbiBcbiB1aW50NjRfdCBwYWdlbWFwX2dldF9lbnRyeShpbnQgZmQsIGNoYXIgKnN0YXJ0KVxuIHtcbkBAIC0xNjEsNiAmIzQzOzE2Myw5IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpXG4gXHRjaGFyIGJ1ZlsyMF07XG4gXHRzc2l6ZV90IG51bV9yZWFkO1xuIFxuJiM0MztcdGlmIChfX3BtZF9wYWdlX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gX19wbWRfcGFnZV9zaXplO1xuJiM0MztcbiBcdGZkID0gb3BlbihQTURfU0laRV9GSUxFX1BBVEgsIE9fUkRPTkxZKTtcbiBcdGlmIChmZCA9PSAtMSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTczLDcgJiM0MzsxNzgsMjUgQEAgdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZClcbiBcdGJ1ZltudW1fcmVhZF0gPSAmIzM5O1xcMCYjMzk7O1xuIFx0Y2xvc2UoZmQpO1xuIFxuLVx0cmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7XG4mIzQzO1x0X19wbWRfcGFnZV9zaXplID0gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcG1kX3BhZ2Vfc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dWludDY0X3QgcG1kX3BhZ2Vfc2hpZnQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChfX3BtZF9wYWdlX3NoaWZ0KVxuJiM0MztcdFx0cmV0dXJuIF9fcG1kX3BhZ2Vfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdGlmICghX19wbWRfcGFnZV9zaXplKVxuJiM0MztcdFx0X19wbWRfcGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFfX3BtZF9wYWdlX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0X19wbWRfcGFnZV9zaGlmdCA9IChmZnNsKF9fcG1kX3BhZ2Vfc2l6ZSkgLSAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcG1kX3BhZ2Vfc2hpZnQ7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbkBAIC00NTIsMTQgJiM0Mzs0NzUsMTkgQEAgYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemVcbiBpbnQ2NF90IGFsbG9jYXRlX3RyYW5zaHVnZSh2b2lkICpwdHIsIGludCBwYWdlbWFwX2ZkKVxuIHtcbiBcdHVpbnQ2NF90IGVudFsyXTtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbiYjNDM7XHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wYWdlX3NoaWZ0KCk7XG4mIzQzO1xuJiM0MztcdGlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4gXG4gXHQvKiBkcm9wIHBtZCAqL1xuLVx0aWYgKG1tYXAocHRyLCBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdGlmIChtbWFwKHB0ciwgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0IE1BUF9GSVhFRCB8IE1BUF9BTk9OWU1PVVMgfFxuIFx0XHQgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCkgIT0gcHRyKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7bW1hcCB0cmFuc2h1Z2VcXG5cJiMzNDspO1xuIFxuLVx0aWYgKG1hZHZpc2UocHRyLCBIUEFHRV9TSVpFLCBNQURWX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAobWFkdmlzZShwdHIsIGhwYWdlX3NpemUsIE1BRFZfSFVHRVBBR0UpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCYjMzQ7TUFEVl9IVUdFUEFHRVxcblwmIzM0Oyk7XG4gXG4gXHQvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi9cbkBAIC00NzEsNyAmIzQzOzQ5OSw3IEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4gXG4gXHRpZiAoUEFHRU1BUF9QUkVTRU5UKGVudFswXSkgXHUwMDI2XHUwMDI2IFBBR0VNQVBfUFJFU0VOVChlbnRbMV0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIFBBR0VNQVBfUEZOKGVudFswXSkgJiM0MzsgMSA9PSBQQUdFTUFQX1BGTihlbnRbMV0pIFx1MDAyNlx1MDAyNlxuLVx0ICAgICEoUEFHRU1BUF9QRk4oZW50WzBdKSBcdTAwMjYgKCgxIFx1MDAzY1x1MDAzYyAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSkpIC0gMSkpKVxuJiM0MztcdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpKSAtIDEpKSlcbiBcdFx0cmV0dXJuIFBBR0VNQVBfUEZOKGVudFswXSk7XG4gXG4gXHRyZXR1cm4gLTE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li4xZDI2MDhjMWFkMDhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0zMSw2ICYjNDM7MzEsOCBAQFxuIFxuIGV4dGVybiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7XG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7XG4mIzQzO2V4dGVybiB1aW50NjRfdCBfX3BtZF9wYWdlX3NpemU7XG4mIzQzO2V4dGVybiB1aW50NjRfdCBfX3BtZF9wYWdlX3NoaWZ0O1xuIFxuIC8qXG4gICogUmVwcmVzZW50cyBhbiBvcGVuIGZkIGFuZCBQUk9DTUFQX1FVRVJZIHN0YXRlIGZvciBiaW5hcnkgKHZpYSBpb2N0bClcbkBAIC04OSw2ICYjNDM7OTEsNyBAQCB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfZ2V0X3BmbihpbnQgZmQsIGNoYXIgKnN0YXJ0KTtcbiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcbiBib29sIGNoZWNrX2Zvcl9wYXR0ZXJuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpO1xuJiM0Mzt1aW50NjRfdCBwbWRfcGFnZV9zaGlmdCh2b2lkKTtcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xuIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuIGJvb2wgY2hlY2tfaHVnZV9maWxlKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpO1xuQEAgLTE1NywxMiAmIzQzOzE2MCw2IEBAIGludCBrc21fc3RvcCh2b2lkKTtcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XG4gaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4tLypcbi0gKiBPbiBwcGM2NCB0aGlzIHdpbGwgb25seSB3b3JrIHdpdGggcmFkaXggMk0gaHVnZXBhZ2Ugc2l6ZVxuLSAqL1xuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcbi0jZGVmaW5lIEhQQUdFX1NJWkUgKDEgXHUwMDNjXHUwMDNjIEhQQUdFX1NISUZUKVxuLVxuICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudClcdCgoKGVudCkgXHUwMDI2ICgxdWxsIFx1MDAzY1x1MDAzYyA2MykpICE9IDApXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXHQoKGVudCkgXHUwMDI2ICgoMXVsbCBcdTAwM2NcdTAwM2MgNTUpIC0gMSkpXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc4NDgyZjZiMGY2NGY2ZTc2OWYyZDI5NzUxYmI4OGM2MGJlYTQ2ZjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDEzOjE3OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jCmluZGV4IDVjOGVjM2NhNzVkN2QuLmU1N2NjN2UzOWU0MTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMKQEAgLTIxOTUsMTQgJiM0MzsyMTk1LDIxIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBwYWdlbWFwX3NjYW4pCiBURVNUX0YoZ3VhcmRfcmVnaW9ucywgY29sbGFwc2UpCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBzZWxmLSZndDtwYWdlX3NpemU7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gMiAqIEhQQUdFX1NJWkU7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBudW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplOwomIzQzOwljb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplOwomIzQzOwl1bnNpZ25lZCBsb25nIG51bV9wYWdlczsKIAljaGFyICpwdHI7CiAJaW50IGk7CiAKIAlpZiAoIXRocF9hdmFpbGFibGUoKSkKIAkJU0tJUChyZXR1cm4sICYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcbiYjMzQ7KTsKIAomIzQzOwlpZiAoIWhwYWdlX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXNpemUgPSAyICogaHBhZ2Vfc2l6ZTsKJiM0MzsJbnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTsKJiM0MzsKIAkvKiBOZWVkIGZpbGUgdG8gYmUgY29ycmVjdCBzaXplIGZvciB0ZXN0cyBmb3Igbm9uLWFub24uICovCiAJaWYgKHZhcmlhbnQtJmd0O2JhY2tpbmcgIT0gQU5PTl9CQUNLRUQpCiAJCUFTU0VSVF9FUShmdHJ1bmNhdGUoc2VsZi0mZ3Q7ZmQsIHNpemUpLCAwKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKaW5kZXggNWZkNzc5MmEwZDQ3OS4uZWYyN2NlNDY3YjhjMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMKQEAgLTUyMSwxOSAmIzQzOzUyMSwyMyBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LAogCXN0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lLCBlbmRfdGltZTsKIAl1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9uczsKIAlpbnQgcGFnZW1hcF9mZCwgbl9ub3JtYWxfcGFnZXMsIG5faHVnZV9wYWdlczsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiAKIAlpZiAoIXRocF9pc19lbmFibGVkKCkpIHsKIAkJa3NmdF9wcmludF9tc2coJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwogCQlyZXR1cm4gS1NGVF9TS0lQOwogCX0KIAomIzQzOwlpZiAoIWhwYWdlX3NpemUpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiAJbWFwX3NpemUgKj0gTUI7CiAJc2l6ZV90IGxlbiA9IG1hcF9zaXplOwogCi0JbGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7Ci0JbWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgSFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKJiM0MzsJbGVuIC09IGxlbiAlIGhwYWdlX3NpemU7CiYjNDM7CW1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICYjNDM7IGhwYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiAJCQlNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JbWFwX3B0ciA9IG1hcF9wdHJfb3JpZyAmIzQzOyBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBIUEFHRV9TSVpFOwomIzQzOwltYXBfcHRyID0gbWFwX3B0cl9vcmlnICYjNDM7IGhwYWdlX3NpemUgLSAodWludHB0cl90KW1hcF9wdHJfb3JpZyAlIGhwYWdlX3NpemU7CiAKIAlpZiAobWFwX3B0cl9vcmlnID09IE1BUF9GQUlMRUQpCiAJCWVycigyLCAmIzM0O2luaXRpYWwgbW1hcCYjMzQ7KTsKQEAgLTU0Nyw3ICYjNDM7NTUxLDcgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCwKIAogCW5fbm9ybWFsX3BhZ2VzID0gMDsKIAluX2h1Z2VfcGFnZXMgPSAwOwotCWZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgJmx0OyBtYXBfcHRyICYjNDM7IGxlbjsgcCAmIzQzOz0gSFBBR0VfU0laRSkgewomIzQzOwlmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwICZsdDsgbWFwX3B0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IGhwYWdlX3NpemUpIHsKIAkJaWYgKGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKSAmbHQ7IDApCiAJCQluX25vcm1hbF9wYWdlcyYjNDM7JiM0Mzs7CiAJCWVsc2UKQEAgLTU3OCwxMSAmIzQzOzU4MiwxMSBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LAogCWtzZnRfcHJpbnRfbXNnKCYjMzQ7QXZlcmFnZSBzcGVlZDogICUuM2YgTWlCL3NcbiYjMzQ7LCAobWFwX3NpemUgLyBNQikgLwogCQkJCQkgICAgICAgKChkb3VibGUpc2Nhbl90aW1lX25zIC8gTlNFQ19QRVJfU0VDKSk7CiAKLQltdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gJiM0MzsgSFBBR0VfU0laRSk7CiYjNDM7CW11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBocGFnZV9zaXplKTsKIAlyZXR1cm4gS1NGVF9QQVNTOwogCiBlcnJfb3V0OgotCW11bm1hcChtYXBfcHRyX29yaWcsIGxlbiAmIzQzOyBIUEFHRV9TSVpFKTsKJiM0MzsJbXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICYjNDM7IGhwYWdlX3NpemUpOwogCXJldHVybiBLU0ZUX0ZBSUw7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKaW5kZXggZDA5ZjlmNmEzODRlZS4uMjRhYTFkZTI3YzI1YiAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTM2MCw4ICYjNDM7MzYwLDggQEAgZmkKIENBVEVHT1JZPSYjMzQ7bWVtZmRfc2VjcmV0JiMzNDsgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXQKIGZpCiAKLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwCi1DQVRFR09SWT0mIzM0O2tzbSYjMzQ7IHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMAomIzQzOyMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgNTEyCiYjNDM7Q0FURUdPUlk9JiMzNDtrc20mIzM0OyBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyA1MTIKICMgS1NNIEtTTV9NRVJHRV9USU1FIHRlc3Qgd2l0aCBzaXplIG9mIDEwMAogQ0FURUdPUlk9JiMzNDtrc20mIzM0OyBydW5fdGVzdCAuL2tzbV90ZXN0cyAtUCAtcyAxMDAKICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYwppbmRleCA4ZWIwYzU2MzBlN2UzLi45Y2Q5NzkwMjI0ZGI2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jCkBAIC0zNSwxMiAmIzQzOzM1LDE3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlzaXplX3QgbWFwX2xlbjsKIAlpbnQgcGFnZW1hcF9mZDsKIAlpbnQgZHVyYXRpb24gPSAwOwomIzQzOwljb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcGFnZV9zaGlmdCgpOwogCiAJa3NmdF9wcmludF9oZWFkZXIoKTsKIAogCWlmICghdGhwX2lzX2VuYWJsZWQoKSkKIAkJa3NmdF9leGl0X3NraXAoJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxuJiMzNDspOwogCiYjNDM7CWlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpCiYjNDM7CQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CiAJcmFtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7CiAJaWYgKHJhbSAmZ3Q7IFNJWkVfTUFYIC8gcHNpemUoKSAvIDQpCiAJCXJhbSA9IFNJWkVfTUFYIC8gNDsKQEAgLTcwLDIzICYjNDM7NzUsMjMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAogCXdhcm54KCYjMzQ7YWxsb2NhdGUgJXpkIHRyYW5zaHVnZSBwYWdlcywgdXNpbmcgJXpkIE1pQiB2aXJ0dWFsIG1lbW9yeSYjMzQ7Ci0JICAgICAgJiMzNDsgYW5kICV6ZCBNaUIgb2YgcmFtJiMzNDssIGxlbiAmZ3Q7Jmd0OyBIUEFHRV9TSElGVCwgbGVuICZndDsmZ3Q7IDIwLAotCSAgICAgIHJhbSAmZ3Q7Jmd0OyAoMjAgJiM0MzsgSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSAtIDEpKTsKJiM0MzsJICAgICAgJiMzNDsgYW5kICV6ZCBNaUIgb2YgcmFtJiMzNDssIGxlbiAmZ3Q7Jmd0OyBocGFnZV9zaGlmdCwgbGVuICZndDsmZ3Q7IDIwLAomIzQzOwkgICAgICByYW0gJmd0OyZndDsgKDIwICYjNDM7IGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkgLSAxKSk7CiAKIAlwYWdlbWFwX2ZkID0gb3BlbigmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcCYjMzQ7LCBPX1JET05MWSk7CiAJaWYgKHBhZ2VtYXBfZmQgJmx0OyAwKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtvcGVuIHBhZ2VtYXBcbiYjMzQ7KTsKIAotCWxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFOwotCXB0ciA9IG1tYXAoTlVMTCwgbGVuICYjNDM7IEhQQUdFX1NJWkUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApOwomIzQzOwlsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTsKJiM0MzsJcHRyID0gbW1hcChOVUxMLCBsZW4gJiM0MzsgaHBhZ2Vfc2l6ZSwgUFJPVF9SVywgbW1hcF9mbGFncywgYmFja2luZ19mZCwgMCk7CiAJaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDtpbml0aWFsIG1tYXAmIzM0Oyk7Ci0JcHRyICYjNDM7PSBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdClwdHIgJSBIUEFHRV9TSVpFOwomIzQzOwlwdHIgJiM0Mzs9IGhwYWdlX3NpemUgLSAodWludHB0cl90KXB0ciAlIGhwYWdlX3NpemU7CiAKIAlpZiAobWFkdmlzZShwdHIsIGxlbiwgTUFEVl9IVUdFUEFHRSkpCiAJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O01BRFZfSFVHRVBBR0UmIzM0Oyk7CiAKLQltYXBfbGVuID0gcmFtICZndDsmZ3Q7IChIUEFHRV9TSElGVCAtIDEpOwomIzQzOwltYXBfbGVuID0gcmFtICZndDsmZ3Q7IChocGFnZV9zaGlmdCAtIDEpOwogCW1hcCA9IG1hbGxvYyhtYXBfbGVuKTsKIAlpZiAoIW1hcCkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7bWFwIG1hbGxvY1xuJiMzNDspOwpAQCAtOTksNyAmIzQzOzEwNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJbWVtc2V0KG1hcCwgMCwgbWFwX2xlbik7CiAKIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7YSk7Ci0JCWZvciAocCA9IHB0cjsgcCAmbHQ7IHB0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IEhQQUdFX1NJWkUpIHsKJiM0MzsJCWZvciAocCA9IHB0cjsgcCAmbHQ7IHB0ciAmIzQzOyBsZW47IHAgJiM0Mzs9IGhwYWdlX3NpemUpIHsKIAkJCWludDY0X3QgcGZuOwogCiAJCQlwZm4gPSBhbGxvY2F0ZV90cmFuc2h1Z2UocCwgcGFnZW1hcF9mZCk7CkBAIC0xMDcsNyAmIzQzOzExMiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWlmIChwZm4gJmx0OyAwKSB7CiAJCQkJbnJfZmFpbGVkJiM0MzsmIzQzOzsKIAkJCX0gZWxzZSB7Ci0JCQkJc2l6ZV90IGlkeCA9IHBmbiAmZ3Q7Jmd0OyAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSk7CiYjNDM7CQkJCXNpemVfdCBpZHggPSBwZm4gJmd0OyZndDsgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpOwogCiAJCQkJbnJfc3VjY2VlZCYjNDM7JiM0Mzs7CiAJCQkJaWYgKGlkeCAmZ3Q7PSBtYXBfbGVuKSB7CkBAIC0xMjMsNyAmIzQzOzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCX0KIAogCQkJLyogc3BsaXQgdHJhbnNodWdlIHBhZ2UsIGtlZXAgbGFzdCBwYWdlICovCi0JCQlpZiAobWFkdmlzZShwLCBIUEFHRV9TSVpFIC0gcHNpemUoKSwgTUFEVl9ET05UTkVFRCkpCiYjNDM7CQkJaWYgKG1hZHZpc2UocCwgaHBhZ2Vfc2l6ZSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKQogCQkJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O01BRFZfRE9OVE5FRUQmIzM0Oyk7CiAJCX0KIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7Yik7CkBAIC0xMzEsNyAmIzQzOzEzNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAogCQlrc2Z0X3ByaW50X21zZygmIzM0OyUuM2Ygcy9sb29wLCAlLjNmIG1zL3BhZ2UsICUxMC4zZiBNaUIvc1x0JiMzNDsKIAkJCSAgICAgICAmIzM0OyU0ZCBzdWNjZWVkLCAlNGQgZmFpbGVkLCAlNGQgZGlmZmVyZW50IHBhZ2VzXG4mIzM0OywKLQkJCSAgICAgICBzLCBzICogMTAwMCAvIChsZW4gJmd0OyZndDsgSFBBR0VfU0hJRlQpLCBsZW4gLyBzIC8gKDEgJmx0OyZsdDsgMjApLAomIzQzOwkJCSAgICAgICBzLCBzICogMTAwMCAvIChsZW4gJmd0OyZndDsgaHBhZ2Vfc2hpZnQpLCBsZW4gLyBzIC8gKDEgJmx0OyZsdDsgMjApLAogCQkJICAgICAgIG5yX3N1Y2NlZWQsIG5yX2ZhaWxlZCwgbnJfcGFnZXMpOwogCiAJCWlmIChkdXJhdGlvbiAmZ3Q7IDAgJmFtcDsmYW1wOyBiLnR2X3NlYyAtIHN0YXJ0LnR2X3NlYyAmZ3Q7PSBkdXJhdGlvbikgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jCmluZGV4IDQ4MjFhMzU2MzAzNjMuLmY3NWJmMGJhY2QxOGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmMKQEAgLTIxLDYgJiM0MzsyMSw4IEBACiAKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTsKIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7CiYjNDM7dWludDY0X3QgX19wbWRfcGFnZV9zaXplOwomIzQzO3VpbnQ2NF90IF9fcG1kX3BhZ2Vfc2hpZnQ7CiAKIHVpbnQ2NF90IHBhZ2VtYXBfZ2V0X2VudHJ5KGludCBmZCwgY2hhciAqc3RhcnQpCiB7CkBAIC0xNjEsNiAmIzQzOzE2Myw5IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpCiAJY2hhciBidWZbMjBdOwogCXNzaXplX3QgbnVtX3JlYWQ7CiAKJiM0MzsJaWYgKF9fcG1kX3BhZ2Vfc2l6ZSkKJiM0MzsJCXJldHVybiBfX3BtZF9wYWdlX3NpemU7CiYjNDM7CiAJZmQgPSBvcGVuKFBNRF9TSVpFX0ZJTEVfUEFUSCwgT19SRE9OTFkpOwogCWlmIChmZCA9PSAtMSkKIAkJcmV0dXJuIDA7CkBAIC0xNzMsNyAmIzQzOzE3OCwyNSBAQCB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKQogCWJ1ZltudW1fcmVhZF0gPSAmIzM5O1wwJiMzOTs7CiAJY2xvc2UoZmQpOwogCi0JcmV0dXJuIHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiYjNDM7CV9fcG1kX3BhZ2Vfc2l6ZSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BtZF9wYWdlX3NpemU7CiYjNDM7fQomIzQzOwomIzQzO3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoX19wbWRfcGFnZV9zaGlmdCkKJiM0MzsJCXJldHVybiBfX3BtZF9wYWdlX3NoaWZ0OwomIzQzOwomIzQzOwlpZiAoIV9fcG1kX3BhZ2Vfc2l6ZSkKJiM0MzsJCV9fcG1kX3BhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7CiYjNDM7CiYjNDM7CWlmICghX19wbWRfcGFnZV9zaXplKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CV9fcG1kX3BhZ2Vfc2hpZnQgPSAoZmZzbChfX3BtZF9wYWdlX3NpemUpIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BtZF9wYWdlX3NoaWZ0OwogfQogCiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpCkBAIC00NTIsMTQgJiM0Mzs0NzUsMTkgQEAgYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUKIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCiB7CiAJdWludDY0X3QgZW50WzJdOwomIzQzOwljb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTsKJiM0MzsJY29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcGFnZV9zaGlmdCgpOwomIzQzOwomIzQzOwlpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KQomIzQzOwkJcmV0dXJuIC0xOwogCiAJLyogZHJvcCBwbWQgKi8KLQlpZiAobW1hcChwdHIsIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CWlmIChtbWFwKHB0ciwgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJIE1BUF9GSVhFRCB8IE1BUF9BTk9OWU1PVVMgfAogCQkgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCkgIT0gcHRyKQogCQlrc2Z0X2V4aXRfZmFpbF9tc2coJiMzNDttbWFwIHRyYW5zaHVnZVxuJiMzNDspOwogCi0JaWYgKG1hZHZpc2UocHRyLCBIUEFHRV9TSVpFLCBNQURWX0hVR0VQQUdFKSkKJiM0MzsJaWYgKG1hZHZpc2UocHRyLCBocGFnZV9zaXplLCBNQURWX0hVR0VQQUdFKSkKIAkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7TUFEVl9IVUdFUEFHRVxuJiMzNDspOwogCiAJLyogYWxsb2NhdGUgdHJhbnNwYXJlbnQgaHVnZSBwYWdlICovCkBAIC00NzEsNyAmIzQzOzQ5OSw3IEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpCiAKIAlpZiAoUEFHRU1BUF9QUkVTRU5UKGVudFswXSkgJmFtcDsmYW1wOyBQQUdFTUFQX1BSRVNFTlQoZW50WzFdKSAmYW1wOyZhbXA7CiAJICAgIFBBR0VNQVBfUEZOKGVudFswXSkgJiM0MzsgMSA9PSBQQUdFTUFQX1BGTihlbnRbMV0pICZhbXA7JmFtcDsKLQkgICAgIShQQUdFTUFQX1BGTihlbnRbMF0pICZhbXA7ICgoMSAmbHQ7Jmx0OyAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSkpIC0gMSkpKQomIzQzOwkgICAgIShQQUdFTUFQX1BGTihlbnRbMF0pICZhbXA7ICgoMSAmbHQ7Jmx0OyAoaHBhZ2Vfc2hpZnQgLSBwc2hpZnQoKSkpIC0gMSkpKQogCQlyZXR1cm4gUEFHRU1BUF9QRk4oZW50WzBdKTsKIAogCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaAppbmRleCA5YTQ5YWY4ODcwMmU0Li4xZDI2MDhjMWFkMDhmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oCkBAIC0zMSw2ICYjNDM7MzEsOCBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplOwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQ7CiYjNDM7ZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BhZ2Vfc2l6ZTsKJiM0MztleHRlcm4gdWludDY0X3QgX19wbWRfcGFnZV9zaGlmdDsKIAogLyoKICAqIFJlcHJlc2VudHMgYW4gb3BlbiBmZCBhbmQgUFJPQ01BUF9RVUVSWSBzdGF0ZSBmb3IgYmluYXJ5ICh2aWEgaW9jdGwpCkBAIC04OSw2ICYjNDM7OTEsNyBAQCB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfZ2V0X3BmbihpbnQgZmQsIGNoYXIgKnN0YXJ0KTsKIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpOwogYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpOwomIzQzO3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpOwogdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTsKIGJvb2wgY2hlY2tfaHVnZV9hbm9uKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemUpOwogYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7CkBAIC0xNTcsMTIgJiM0MzsxNjAsNiBAQCBpbnQga3NtX3N0b3Aodm9pZCk7CiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7CiBpbnQgdW5wb2lzb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKTsKIAotLyoKLSAqIE9uIHBwYzY0IHRoaXMgd2lsbCBvbmx5IHdvcmsgd2l0aCByYWRpeCAyTSBodWdlcGFnZSBzaXplCi0gKi8KLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjEKLSNkZWZpbmUgSFBBR0VfU0laRSAoMSAmbHQ7Jmx0OyBIUEFHRV9TSElGVCkKLQogI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KQkoKChlbnQpICZhbXA7ICgxdWxsICZsdDsmbHQ7IDYzKSkgIT0gMCkKICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KQkoKGVudCkgJmFtcDsgKCgxdWxsICZsdDsmbHQ7IDU1KSAtIDEpKQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMTAKCQkJCQkJCW91dHB1dDogNzAKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFdvcnRoRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgc2VsZi10ZXN0cyBmcmFtZXdvcmssIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbWApIHRlc3RzLCBjb250YWluZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBJIHNlZSBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzOiBgZ3VhcmQtcmVnaW9ucy5jYCwgYGtzbV90ZXN0cy5jYCwgYHJ1bl92bXRlc3RzLnNoYCwgYHRyYW5zaHVnZS1zdHJlc3MuY2AsIGB2bV91dGlsLmNgLCBhbmQgYHZtX3V0aWwuaGAuIEFsbCBvZiB0aGVtLCBpbXBvcnRhbnRseSwgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhhdCBvbmUgZGlyZWN0b3J5LgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhhdCAmIzM0O05FR0FUSVZFIENSSVRFUklBJiMzNDsgaW4gU0VDVElPTiAyLiBUaGUgY29yZSBvZiB0aGlzIGRlY2lzaW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGtlcm5lbCBpbWFnZSBvciBtb2R1bGVzLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgbm90aGluZyB3aXRoaW4gdGhlIGNvcmUga2VybmVsIHNvdXJjZSB0cmVlIChlLmcuLCBgbW0vYCwgYGtlcm5lbC9gLCBgZnMvYCwgYGRyaXZlcnMvYCwgYGFyY2gvYCkgYXBwZWFycyB0byBiZSB0b3VjaGVkLiBUaGVzZSBhcmUgcHVyZWx5IHNlbGYtdGVzdHMuIFNwZWNpZmljYWxseSwgdGhleSBmYWxsIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiB1c2VyLXNwYWNlIHRlc3RpbmcgYW5kIHNjcmlwdHMgdGhhdCAqZG9uJiMzOTt0KiBkaXJlY3RseSBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBvciBtb2R1bGVzLiBUaGVyZWZvcmUsIGJ5IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBvdXRsaW5lZCwgdGhlIHBhdGNoIGlzICpub3QqIHdvcnRoIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gU2luY2UgdGhpcyBpcyBhIHRlc3QgYW5kIG5vdCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBhbHNvIGJlIGVtcHR5LiBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gbXkgYXNzZXNzbWVudCB3aXRoIGEgY2FsbCB0byBgc2V0LXJlc3VsdHNgIGp1c3QgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTc6NTguNDA4NDk4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMzIyMzIyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgY29kZSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS8gYW5kIGRvZXMgbm90IHRvdWNoIGFueSBrZXJuZWwgY29kZSBvciBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxNzo1OC40MDg1MDM4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzI4OTk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc4NDgyZjZiMGY2NGY2ZTc2OWYyZDI5NzUxYmI4OGM2MGJlYTQ2ZjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxMzoxNzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ndWFyZC1yZWdpb25zLmNcXG5pbmRleCA1YzhlYzNjYTc1ZDdkLi5lNTdjYzdlMzllNDE5IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xcbkBAIC0yMTk1LDE0ICsyMTk1LDIxIEBAIFRFU1RfRihndWFyZF9yZWdpb25zLCBwYWdlbWFwX3NjYW4pXFxuIFRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcXG4ge1xcbiBcXHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSA9IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZTtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gMiAqIEhQQUdFX1NJWkU7XFxuLVxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gc2l6ZSAvIHBhZ2Vfc2l6ZTtcXG4rXFx0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBudW1fcGFnZXM7XFxuIFxcdGNoYXIgKnB0cjtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcXG4gXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcbitcXHRpZiAoIWhwYWdlX3NpemUpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwicmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRzaXplID0gMiAqIGhwYWdlX3NpemU7XFxuK1xcdG51bV9wYWdlcyA9IHNpemUgLyBwYWdlX3NpemU7XFxuK1xcbiBcXHQvKiBOZWVkIGZpbGUgdG8gYmUgY29ycmVjdCBzaXplIGZvciB0ZXN0cyBmb3Igbm9uLWFub24uICovXFxuIFxcdGlmICh2YXJpYW50LVxcdTAwM2ViYWNraW5nICE9IEFOT05fQkFDS0VEKVxcbiBcXHRcXHRBU1NFUlRfRVEoZnRydW5jYXRlKHNlbGYtXFx1MDAzZWZkLCBzaXplKSwgMCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5pbmRleCA1ZmQ3NzkyYTBkNDc5Li5lZjI3Y2U0NjdiOGMxIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmNcXG5AQCAtNTIxLDE5ICs1MjEsMjMgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcXG4gXFx0c3RydWN0IHRpbWVzcGVjIHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9ucztcXG4gXFx0aW50IHBhZ2VtYXBfZmQsIG5fbm9ybWFsX3BhZ2VzLCBuX2h1Z2VfcGFnZXM7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbiBcXG4gXFx0aWYgKCF0aHBfaXNfZW5hYmxlZCgpKSB7XFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiBLU0ZUX1NLSVA7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghaHBhZ2Vfc2l6ZSlcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJyZWFkaW5nIGhwYWdlX3NpemUgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuIFxcdG1hcF9zaXplICo9IE1CO1xcbiBcXHRzaXplX3QgbGVuID0gbWFwX3NpemU7XFxuIFxcbi1cXHRsZW4gLT0gbGVuICUgSFBBR0VfU0laRTtcXG4tXFx0bWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gKyBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTtcXG4rXFx0bWFwX3B0cl9vcmlnID0gbW1hcChOVUxMLCBsZW4gKyBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbiBcXHRcXHRcXHRNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XFxuLVxcdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgKyBIUEFHRV9TSVpFIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBIUEFHRV9TSVpFO1xcbitcXHRtYXBfcHRyID0gbWFwX3B0cl9vcmlnICsgaHBhZ2Vfc2l6ZSAtICh1aW50cHRyX3QpbWFwX3B0cl9vcmlnICUgaHBhZ2Vfc2l6ZTtcXG4gXFxuIFxcdGlmIChtYXBfcHRyX29yaWcgPT0gTUFQX0ZBSUxFRClcXG4gXFx0XFx0ZXJyKDIsIFxcXCJpbml0aWFsIG1tYXBcXFwiKTtcXG5AQCAtNTQ3LDcgKzU1MSw3IEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXFxuIFxcbiBcXHRuX25vcm1hbF9wYWdlcyA9IDA7XFxuIFxcdG5faHVnZV9wYWdlcyA9IDA7XFxuLVxcdGZvciAodm9pZCAqcCA9IG1hcF9wdHI7IHAgXFx1MDAzYyBtYXBfcHRyICsgbGVuOyBwICs9IEhQQUdFX1NJWkUpIHtcXG4rXFx0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcXHUwMDNjIG1hcF9wdHIgKyBsZW47IHAgKz0gaHBhZ2Vfc2l6ZSkge1xcbiBcXHRcXHRpZiAoYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0bl9ub3JtYWxfcGFnZXMrKztcXG4gXFx0XFx0ZWxzZVxcbkBAIC01NzgsMTEgKzU4MiwxMSBAQCBzdGF0aWMgaW50IGtzbV9tZXJnZV9odWdlcGFnZXNfdGltZShpbnQgbWVyZ2VfdHlwZSwgaW50IG1hcHBpbmcsIGludCBwcm90LFxcbiBcXHRrc2Z0X3ByaW50X21zZyhcXFwiQXZlcmFnZSBzcGVlZDogICUuM2YgTWlCL3NcXFxcblxcXCIsIChtYXBfc2l6ZSAvIE1CKSAvXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICAoKGRvdWJsZSlzY2FuX3RpbWVfbnMgLyBOU0VDX1BFUl9TRUMpKTtcXG4gXFxuLVxcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIEhQQUdFX1NJWkUpO1xcbitcXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBocGFnZV9zaXplKTtcXG4gXFx0cmV0dXJuIEtTRlRfUEFTUztcXG4gXFxuIGVycl9vdXQ6XFxuLVxcdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIEhQQUdFX1NJWkUpO1xcbitcXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBocGFnZV9zaXplKTtcXG4gXFx0cmV0dXJuIEtTRlRfRkFJTDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbmluZGV4IGQwOWY5ZjZhMzg0ZWUuLjI0YWExZGUyN2MyNWIgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0zNjAsOCArMzYwLDggQEAgZmlcXG4gQ0FURUdPUlk9XFxcIm1lbWZkX3NlY3JldFxcXCIgcnVuX3Rlc3QgLi9tZW1mZF9zZWNyZXRcXG4gZmlcXG4gXFxuLSMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgMTAwXFxuLUNBVEVHT1JZPVxcXCJrc21cXFwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMFxcbisjIEtTTSBLU01fTUVSR0VfVElNRV9IVUdFX1BBR0VTIHRlc3Qgd2l0aCBzaXplIG9mIDUxMlxcbitDQVRFR09SWT1cXFwia3NtXFxcIiBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyA1MTJcXG4gIyBLU00gS1NNX01FUkdFX1RJTUUgdGVzdCB3aXRoIHNpemUgb2YgMTAwXFxuIENBVEVHT1JZPVxcXCJrc21cXFwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1QIC1zIDEwMFxcbiAjIEtTTSBNQURWX01FUkdFQUJMRSB0ZXN0IHdpdGggMTAgaWRlbnRpY2FsIHBhZ2VzXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xcbmluZGV4IDhlYjBjNTYzMGU3ZTMuLjljZDk3OTAyMjRkYjYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdHJhbnNodWdlLXN0cmVzcy5jXFxuQEAgLTM1LDEyICszNSwxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdHNpemVfdCBtYXBfbGVuO1xcbiBcXHRpbnQgcGFnZW1hcF9mZDtcXG4gXFx0aW50IGR1cmF0aW9uID0gMDtcXG4rXFx0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NoaWZ0ID0gcG1kX3BhZ2Vfc2hpZnQoKTtcXG4gXFxuIFxcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XFxuIFxcbiBcXHRpZiAoIXRocF9pc19lbmFibGVkKCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcbitcXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXFxcblxcXCIpO1xcbitcXG4gXFx0cmFtID0gc3lzY29uZihfU0NfUEhZU19QQUdFUyk7XFxuIFxcdGlmIChyYW0gXFx1MDAzZSBTSVpFX01BWCAvIHBzaXplKCkgLyA0KVxcbiBcXHRcXHRyYW0gPSBTSVpFX01BWCAvIDQ7XFxuQEAgLTcwLDIzICs3NSwyMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdH1cXG4gXFxuIFxcdHdhcm54KFxcXCJhbGxvY2F0ZSAlemQgdHJhbnNodWdlIHBhZ2VzLCB1c2luZyAlemQgTWlCIHZpcnR1YWwgbWVtb3J5XFxcIlxcbi1cXHQgICAgICBcXFwiIGFuZCAlemQgTWlCIG9mIHJhbVxcXCIsIGxlbiBcXHUwMDNlXFx1MDAzZSBIUEFHRV9TSElGVCwgbGVuIFxcdTAwM2VcXHUwMDNlIDIwLFxcbi1cXHQgICAgICByYW0gXFx1MDAzZVxcdTAwM2UgKDIwICsgSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSAtIDEpKTtcXG4rXFx0ICAgICAgXFxcIiBhbmQgJXpkIE1pQiBvZiByYW1cXFwiLCBsZW4gXFx1MDAzZVxcdTAwM2UgaHBhZ2Vfc2hpZnQsIGxlbiBcXHUwMDNlXFx1MDAzZSAyMCxcXG4rXFx0ICAgICAgcmFtIFxcdTAwM2VcXHUwMDNlICgyMCArIGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkgLSAxKSk7XFxuIFxcbiBcXHRwYWdlbWFwX2ZkID0gb3BlbihcXFwiL3Byb2Mvc2VsZi9wYWdlbWFwXFxcIiwgT19SRE9OTFkpO1xcbiBcXHRpZiAocGFnZW1hcF9mZCBcXHUwMDNjIDApXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwib3BlbiBwYWdlbWFwXFxcXG5cXFwiKTtcXG4gXFxuLVxcdGxlbiAtPSBsZW4gJSBIUEFHRV9TSVpFO1xcbi1cXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiArIEhQQUdFX1NJWkUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApO1xcbitcXHRsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTtcXG4rXFx0cHRyID0gbW1hcChOVUxMLCBsZW4gKyBocGFnZV9zaXplLCBQUk9UX1JXLCBtbWFwX2ZsYWdzLCBiYWNraW5nX2ZkLCAwKTtcXG4gXFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImluaXRpYWwgbW1hcFxcXCIpO1xcbi1cXHRwdHIgKz0gSFBBR0VfU0laRSAtICh1aW50cHRyX3QpcHRyICUgSFBBR0VfU0laRTtcXG4rXFx0cHRyICs9IGhwYWdlX3NpemUgLSAodWludHB0cl90KXB0ciAlIGhwYWdlX3NpemU7XFxuIFxcbiBcXHRpZiAobWFkdmlzZShwdHIsIGxlbiwgTUFEVl9IVUdFUEFHRSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTUFEVl9IVUdFUEFHRVxcXCIpO1xcbiBcXG4tXFx0bWFwX2xlbiA9IHJhbSBcXHUwMDNlXFx1MDAzZSAoSFBBR0VfU0hJRlQgLSAxKTtcXG4rXFx0bWFwX2xlbiA9IHJhbSBcXHUwMDNlXFx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSAxKTtcXG4gXFx0bWFwID0gbWFsbG9jKG1hcF9sZW4pO1xcbiBcXHRpZiAoIW1hcClcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJtYXAgbWFsbG9jXFxcXG5cXFwiKTtcXG5AQCAtOTksNyArMTA0LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRtZW1zZXQobWFwLCAwLCBtYXBfbGVuKTtcXG4gXFxuIFxcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2YSk7XFxuLVxcdFxcdGZvciAocCA9IHB0cjsgcCBcXHUwMDNjIHB0ciArIGxlbjsgcCArPSBIUEFHRV9TSVpFKSB7XFxuK1xcdFxcdGZvciAocCA9IHB0cjsgcCBcXHUwMDNjIHB0ciArIGxlbjsgcCArPSBocGFnZV9zaXplKSB7XFxuIFxcdFxcdFxcdGludDY0X3QgcGZuO1xcbiBcXG4gXFx0XFx0XFx0cGZuID0gYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpO1xcbkBAIC0xMDcsNyArMTEyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHRpZiAocGZuIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRcXHRucl9mYWlsZWQrKztcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0c2l6ZV90IGlkeCA9IHBmbiBcXHUwMDNlXFx1MDAzZSAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSk7XFxuK1xcdFxcdFxcdFxcdHNpemVfdCBpZHggPSBwZm4gXFx1MDAzZVxcdTAwM2UgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpO1xcbiBcXG4gXFx0XFx0XFx0XFx0bnJfc3VjY2VlZCsrO1xcbiBcXHRcXHRcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IG1hcF9sZW4pIHtcXG5AQCAtMTIzLDcgKzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0Lyogc3BsaXQgdHJhbnNodWdlIHBhZ2UsIGtlZXAgbGFzdCBwYWdlICovXFxuLVxcdFxcdFxcdGlmIChtYWR2aXNlKHAsIEhQQUdFX1NJWkUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSlcXG4rXFx0XFx0XFx0aWYgKG1hZHZpc2UocCwgaHBhZ2Vfc2l6ZSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxcbiBcXHRcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIk1BRFZfRE9OVE5FRURcXFwiKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNmIpO1xcbkBAIC0xMzEsNyArMTM2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXG4gXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiUuM2Ygcy9sb29wLCAlLjNmIG1zL3BhZ2UsICUxMC4zZiBNaUIvc1xcXFx0XFxcIlxcbiBcXHRcXHRcXHQgICAgICAgXFxcIiU0ZCBzdWNjZWVkLCAlNGQgZmFpbGVkLCAlNGQgZGlmZmVyZW50IHBhZ2VzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgcywgcyAqIDEwMDAgLyAobGVuIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1NISUZUKSwgbGVuIC8gcyAvICgxIFxcdTAwM2NcXHUwMDNjIDIwKSxcXG4rXFx0XFx0XFx0ICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiBcXHUwMDNlXFx1MDAzZSBocGFnZV9zaGlmdCksIGxlbiAvIHMgLyAoMSBcXHUwMDNjXFx1MDAzYyAyMCksXFxuIFxcdFxcdFxcdCAgICAgICBucl9zdWNjZWVkLCBucl9mYWlsZWQsIG5yX3BhZ2VzKTtcXG4gXFxuIFxcdFxcdGlmIChkdXJhdGlvbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgYi50dl9zZWMgLSBzdGFydC50dl9zZWMgXFx1MDAzZT0gZHVyYXRpb24pIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXFxuaW5kZXggNDgyMWEzNTYzMDM2My4uZjc1YmYwYmFjZDE4YSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmNcXG5AQCAtMjEsNiArMjEsOCBAQFxcbiBcXG4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xcbit1aW50NjRfdCBfX3BtZF9wYWdlX3NpemU7XFxuK3VpbnQ2NF90IF9fcG1kX3BhZ2Vfc2hpZnQ7XFxuIFxcbiB1aW50NjRfdCBwYWdlbWFwX2dldF9lbnRyeShpbnQgZmQsIGNoYXIgKnN0YXJ0KVxcbiB7XFxuQEAgLTE2MSw2ICsxNjMsOSBAQCB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxcbiBcXHRjaGFyIGJ1ZlsyMF07XFxuIFxcdHNzaXplX3QgbnVtX3JlYWQ7XFxuIFxcbitcXHRpZiAoX19wbWRfcGFnZV9zaXplKVxcbitcXHRcXHRyZXR1cm4gX19wbWRfcGFnZV9zaXplO1xcbitcXG4gXFx0ZmQgPSBvcGVuKFBNRF9TSVpFX0ZJTEVfUEFUSCwgT19SRE9OTFkpO1xcbiBcXHRpZiAoZmQgPT0gLTEpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xNzMsNyArMTc4LDI1IEBAIHVpbnQ2NF90IHJlYWRfcG1kX3BhZ2VzaXplKHZvaWQpXFxuIFxcdGJ1ZltudW1fcmVhZF0gPSAnXFxcXDAnO1xcbiBcXHRjbG9zZShmZCk7XFxuIFxcbi1cXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDEwKTtcXG4rXFx0X19wbWRfcGFnZV9zaXplID0gc3RydG91bChidWYsIE5VTEwsIDEwKTtcXG4rXFxuK1xcdHJldHVybiBfX3BtZF9wYWdlX3NpemU7XFxuK31cXG4rXFxuK3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpXFxuK3tcXG4rXFx0aWYgKF9fcG1kX3BhZ2Vfc2hpZnQpXFxuK1xcdFxcdHJldHVybiBfX3BtZF9wYWdlX3NoaWZ0O1xcbitcXG4rXFx0aWYgKCFfX3BtZF9wYWdlX3NpemUpXFxuK1xcdFxcdF9fcG1kX3BhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XFxuK1xcbitcXHRpZiAoIV9fcG1kX3BhZ2Vfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRfX3BtZF9wYWdlX3NoaWZ0ID0gKGZmc2woX19wbWRfcGFnZV9zaXplKSAtIDEpO1xcbitcXG4rXFx0cmV0dXJuIF9fcG1kX3BhZ2Vfc2hpZnQ7XFxuIH1cXG4gXFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcXG5AQCAtNDUyLDE0ICs0NzUsMTkgQEAgYm9vbCBjaGVja19odWdlX3NobWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBucl9ocGFnZXMsIHVpbnQ2NF90IGhwYWdlX3NpemVcXG4gaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcXG4ge1xcbiBcXHR1aW50NjRfdCBlbnRbMl07XFxuK1xcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xcbitcXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wYWdlX3NoaWZ0KCk7XFxuK1xcbitcXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHQvKiBkcm9wIHBtZCAqL1xcbi1cXHRpZiAobW1hcChwdHIsIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuK1xcdGlmIChtbWFwKHB0ciwgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0IE1BUF9GSVhFRCB8IE1BUF9BTk9OWU1PVVMgfFxcbiBcXHRcXHQgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCkgIT0gcHRyKVxcbiBcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcIm1tYXAgdHJhbnNodWdlXFxcXG5cXFwiKTtcXG4gXFxuLVxcdGlmIChtYWR2aXNlKHB0ciwgSFBBR0VfU0laRSwgTUFEVl9IVUdFUEFHRSkpXFxuK1xcdGlmIChtYWR2aXNlKHB0ciwgaHBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXFxuIFxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiTUFEVl9IVUdFUEFHRVxcXFxuXFxcIik7XFxuIFxcbiBcXHQvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi9cXG5AQCAtNDcxLDcgKzQ5OSw3IEBAIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXFxuIFxcbiBcXHRpZiAoUEFHRU1BUF9QUkVTRU5UKGVudFswXSkgXFx1MDAyNlxcdTAwMjYgUEFHRU1BUF9QUkVTRU5UKGVudFsxXSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIFBBR0VNQVBfUEZOKGVudFswXSkgKyAxID09IFBBR0VNQVBfUEZOKGVudFsxXSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICEoUEFHRU1BUF9QRk4oZW50WzBdKSBcXHUwMDI2ICgoMSBcXHUwMDNjXFx1MDAzYyAoSFBBR0VfU0hJRlQgLSBwc2hpZnQoKSkpIC0gMSkpKVxcbitcXHQgICAgIShQQUdFTUFQX1BGTihlbnRbMF0pIFxcdTAwMjYgKCgxIFxcdTAwM2NcXHUwMDNjIChocGFnZV9zaGlmdCAtIHBzaGlmdCgpKSkgLSAxKSkpXFxuIFxcdFxcdHJldHVybiBQQUdFTUFQX1BGTihlbnRbMF0pO1xcbiBcXG4gXFx0cmV0dXJuIC0xO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li4xZDI2MDhjMWFkMDhmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuaFxcbkBAIC0zMSw2ICszMSw4IEBAXFxuIFxcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplO1xcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcXG4rZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BhZ2Vfc2l6ZTtcXG4rZXh0ZXJuIHVpbnQ2NF90IF9fcG1kX3BhZ2Vfc2hpZnQ7XFxuIFxcbiAvKlxcbiAgKiBSZXByZXNlbnRzIGFuIG9wZW4gZmQgYW5kIFBST0NNQVBfUVVFUlkgc3RhdGUgZm9yIGJpbmFyeSAodmlhIGlvY3RsKVxcbkBAIC04OSw2ICs5MSw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xcbiB2b2lkIGNsZWFyX3NvZnRkaXJ0eSh2b2lkKTtcXG4gYm9vbCBjaGVja19mb3JfcGF0dGVybihGSUxFICpmcCwgY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XFxuK3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpO1xcbiB1bnNpZ25lZCBsb25nIHJzc19hbm9uKHZvaWQpO1xcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcXG4gYm9vbCBjaGVja19odWdlX2ZpbGUodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZSk7XFxuQEAgLTE1NywxMiArMTYwLDYgQEAgaW50IGtzbV9zdG9wKHZvaWQpO1xcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XFxuIGludCB1bnBvaXNvbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pO1xcbiBcXG4tLypcXG4tICogT24gcHBjNjQgdGhpcyB3aWxsIG9ubHkgd29yayB3aXRoIHJhZGl4IDJNIGh1Z2VwYWdlIHNpemVcXG4tICovXFxuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcXG4tI2RlZmluZSBIUEFHRV9TSVpFICgxIFxcdTAwM2NcXHUwMDNjIEhQQUdFX1NISUZUKVxcbi1cXG4gI2RlZmluZSBQQUdFTUFQX1BSRVNFTlQoZW50KVxcdCgoKGVudCkgXFx1MDAyNiAoMXVsbCBcXHUwMDNjXFx1MDAzYyA2MykpICE9IDApXFxuICNkZWZpbmUgUEFHRU1BUF9QRk4oZW50KVxcdCgoZW50KSBcXHUwMDI2ICgoMXVsbCBcXHUwMDNjXFx1MDAzYyA1NSkgLSAxKSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE4OjAwLjAyNjQ5MjEyOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzUxNDIyNzc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ODQ4MmY2YjBmNjRmNmU3NjlmMmQyOTc1MWJiODhjNjBiZWE0NmY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMzoxNzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuaW5kZXggNWM4ZWMzY2E3NWQ3ZC4uZTU3Y2M3ZTM5ZTQxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2d1YXJkLXJlZ2lvbnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vZ3VhcmQtcmVnaW9ucy5jXG5AQCAtMjE5NSwxNCArMjE5NSwyMSBAQCBURVNUX0YoZ3VhcmRfcmVnaW9ucywgcGFnZW1hcF9zY2FuKVxuIFRFU1RfRihndWFyZF9yZWdpb25zLCBjb2xsYXBzZSlcbiB7XG4gXHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSA9IHNlbGYtXHUwMDNlcGFnZV9zaXplO1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaXplID0gMiAqIEhQQUdFX1NJWkU7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcyA9IHNpemUgLyBwYWdlX3NpemU7XG4rXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaXplID0gcmVhZF9wbWRfcGFnZXNpemUoKTtcbitcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcbitcdHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzO1xuIFx0Y2hhciAqcHRyO1xuIFx0aW50IGk7XG4gXG4gXHRpZiAoIXRocF9hdmFpbGFibGUoKSlcbiBcdFx0U0tJUChyZXR1cm4sIFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXG4rXHRpZiAoIWhwYWdlX3NpemUpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cIik7XG4rXG4rXHRzaXplID0gMiAqIGhwYWdlX3NpemU7XG4rXHRudW1fcGFnZXMgPSBzaXplIC8gcGFnZV9zaXplO1xuK1xuIFx0LyogTmVlZCBmaWxlIHRvIGJlIGNvcnJlY3Qgc2l6ZSBmb3IgdGVzdHMgZm9yIG5vbi1hbm9uLiAqL1xuIFx0aWYgKHZhcmlhbnQtXHUwMDNlYmFja2luZyAhPSBBTk9OX0JBQ0tFRClcbiBcdFx0QVNTRVJUX0VRKGZ0cnVuY2F0ZShzZWxmLVx1MDAzZWZkLCBzaXplKSwgMCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va3NtX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuaW5kZXggNWZkNzc5MmEwZDQ3OS4uZWYyN2NlNDY3YjhjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2tzbV90ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9rc21fdGVzdHMuY1xuQEAgLTUyMSwxOSArNTIxLDIzIEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXHRzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4gXHR1bnNpZ25lZCBsb25nIHNjYW5fdGltZV9ucztcbiBcdGludCBwYWdlbWFwX2ZkLCBuX25vcm1hbF9wYWdlcywgbl9odWdlX3BhZ2VzO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4gXG4gXHRpZiAoIXRocF9pc19lbmFibGVkKCkpIHtcbiBcdFx0a3NmdF9wcmludF9tc2coXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwiKTtcbiBcdFx0cmV0dXJuIEtTRlRfU0tJUDtcbiBcdH1cbiBcbitcdGlmICghaHBhZ2Vfc2l6ZSlcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwicmVhZGluZyBocGFnZV9zaXplIGZhaWxlZFxcblwiKTtcbitcbiBcdG1hcF9zaXplICo9IE1CO1xuIFx0c2l6ZV90IGxlbiA9IG1hcF9zaXplO1xuIFxuLVx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XG4tXHRtYXBfcHRyX29yaWcgPSBtbWFwKE5VTEwsIGxlbiArIEhQQUdFX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRsZW4gLT0gbGVuICUgaHBhZ2Vfc2l6ZTtcbitcdG1hcF9wdHJfb3JpZyA9IG1tYXAoTlVMTCwgbGVuICsgaHBhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0XHRNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRtYXBfcHRyID0gbWFwX3B0cl9vcmlnICsgSFBBR0VfU0laRSAtICh1aW50cHRyX3QpbWFwX3B0cl9vcmlnICUgSFBBR0VfU0laRTtcbitcdG1hcF9wdHIgPSBtYXBfcHRyX29yaWcgKyBocGFnZV9zaXplIC0gKHVpbnRwdHJfdCltYXBfcHRyX29yaWcgJSBocGFnZV9zaXplO1xuIFxuIFx0aWYgKG1hcF9wdHJfb3JpZyA9PSBNQVBfRkFJTEVEKVxuIFx0XHRlcnIoMiwgXCJpbml0aWFsIG1tYXBcIik7XG5AQCAtNTQ3LDcgKzU1MSw3IEBAIHN0YXRpYyBpbnQga3NtX21lcmdlX2h1Z2VwYWdlc190aW1lKGludCBtZXJnZV90eXBlLCBpbnQgbWFwcGluZywgaW50IHByb3QsXG4gXG4gXHRuX25vcm1hbF9wYWdlcyA9IDA7XG4gXHRuX2h1Z2VfcGFnZXMgPSAwO1xuLVx0Zm9yICh2b2lkICpwID0gbWFwX3B0cjsgcCBcdTAwM2MgbWFwX3B0ciArIGxlbjsgcCArPSBIUEFHRV9TSVpFKSB7XG4rXHRmb3IgKHZvaWQgKnAgPSBtYXBfcHRyOyBwIFx1MDAzYyBtYXBfcHRyICsgbGVuOyBwICs9IGhwYWdlX3NpemUpIHtcbiBcdFx0aWYgKGFsbG9jYXRlX3RyYW5zaHVnZShwLCBwYWdlbWFwX2ZkKSBcdTAwM2MgMClcbiBcdFx0XHRuX25vcm1hbF9wYWdlcysrO1xuIFx0XHRlbHNlXG5AQCAtNTc4LDExICs1ODIsMTEgQEAgc3RhdGljIGludCBrc21fbWVyZ2VfaHVnZXBhZ2VzX3RpbWUoaW50IG1lcmdlX3R5cGUsIGludCBtYXBwaW5nLCBpbnQgcHJvdCxcbiBcdGtzZnRfcHJpbnRfbXNnKFwiQXZlcmFnZSBzcGVlZDogICUuM2YgTWlCL3NcXG5cIiwgKG1hcF9zaXplIC8gTUIpIC9cbiBcdFx0XHRcdFx0ICAgICAgICgoZG91YmxlKXNjYW5fdGltZV9ucyAvIE5TRUNfUEVSX1NFQykpO1xuIFxuLVx0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgSFBBR0VfU0laRSk7XG4rXHRtdW5tYXAobWFwX3B0cl9vcmlnLCBsZW4gKyBocGFnZV9zaXplKTtcbiBcdHJldHVybiBLU0ZUX1BBU1M7XG4gXG4gZXJyX291dDpcbi1cdG11bm1hcChtYXBfcHRyX29yaWcsIGxlbiArIEhQQUdFX1NJWkUpO1xuK1x0bXVubWFwKG1hcF9wdHJfb3JpZywgbGVuICsgaHBhZ2Vfc2l6ZSk7XG4gXHRyZXR1cm4gS1NGVF9GQUlMO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBkMDlmOWY2YTM4NGVlLi4yNGFhMWRlMjdjMjViIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5AQCAtMzYwLDggKzM2MCw4IEBAIGZpXG4gQ0FURUdPUlk9XCJtZW1mZF9zZWNyZXRcIiBydW5fdGVzdCAuL21lbWZkX3NlY3JldFxuIGZpXG4gXG4tIyBLU00gS1NNX01FUkdFX1RJTUVfSFVHRV9QQUdFUyB0ZXN0IHdpdGggc2l6ZSBvZiAxMDBcbi1DQVRFR09SWT1cImtzbVwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1IIC1zIDEwMFxuKyMgS1NNIEtTTV9NRVJHRV9USU1FX0hVR0VfUEFHRVMgdGVzdCB3aXRoIHNpemUgb2YgNTEyXG4rQ0FURUdPUlk9XCJrc21cIiBydW5fdGVzdCAuL2tzbV90ZXN0cyAtSCAtcyA1MTJcbiAjIEtTTSBLU01fTUVSR0VfVElNRSB0ZXN0IHdpdGggc2l6ZSBvZiAxMDBcbiBDQVRFR09SWT1cImtzbVwiIHJ1bl90ZXN0IC4va3NtX3Rlc3RzIC1QIC1zIDEwMFxuICMgS1NNIE1BRFZfTUVSR0VBQkxFIHRlc3Qgd2l0aCAxMCBpZGVudGljYWwgcGFnZXNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbmluZGV4IDhlYjBjNTYzMGU3ZTMuLjljZDk3OTAyMjRkYjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS90cmFuc2h1Z2Utc3RyZXNzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3RyYW5zaHVnZS1zdHJlc3MuY1xuQEAgLTM1LDEyICszNSwxNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRzaXplX3QgbWFwX2xlbjtcbiBcdGludCBwYWdlbWFwX2ZkO1xuIFx0aW50IGR1cmF0aW9uID0gMDtcbitcdGNvbnN0IHVpbnQ2NF90IGhwYWdlX3NpemUgPSByZWFkX3BtZF9wYWdlc2l6ZSgpO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2hpZnQgPSBwbWRfcGFnZV9zaGlmdCgpO1xuIFxuIFx0a3NmdF9wcmludF9oZWFkZXIoKTtcbiBcbiBcdGlmICghdGhwX2lzX2VuYWJsZWQoKSlcbiBcdFx0a3NmdF9leGl0X3NraXAoXCJUcmFuc3BhcmVudCBIdWdlcGFnZXMgbm90IGF2YWlsYWJsZVxcblwiKTtcbiBcbitcdGlmICghaHBhZ2Vfc2l6ZSB8fCAhaHBhZ2Vfc2hpZnQpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcInJlYWRpbmcgaHBhZ2Vfc2l6ZSBmYWlsZWRcXG5cIik7XG4rXG4gXHRyYW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTtcbiBcdGlmIChyYW0gXHUwMDNlIFNJWkVfTUFYIC8gcHNpemUoKSAvIDQpXG4gXHRcdHJhbSA9IFNJWkVfTUFYIC8gNDtcbkBAIC03MCwyMyArNzUsMjMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0fVxuIFxuIFx0d2FybngoXCJhbGxvY2F0ZSAlemQgdHJhbnNodWdlIHBhZ2VzLCB1c2luZyAlemQgTWlCIHZpcnR1YWwgbWVtb3J5XCJcbi1cdCAgICAgIFwiIGFuZCAlemQgTWlCIG9mIHJhbVwiLCBsZW4gXHUwMDNlXHUwMDNlIEhQQUdFX1NISUZULCBsZW4gXHUwMDNlXHUwMDNlIDIwLFxuLVx0ICAgICAgcmFtIFx1MDAzZVx1MDAzZSAoMjAgKyBIUEFHRV9TSElGVCAtIHBzaGlmdCgpIC0gMSkpO1xuK1x0ICAgICAgXCIgYW5kICV6ZCBNaUIgb2YgcmFtXCIsIGxlbiBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQsIGxlbiBcdTAwM2VcdTAwM2UgMjAsXG4rXHQgICAgICByYW0gXHUwMDNlXHUwMDNlICgyMCArIGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkgLSAxKSk7XG4gXG4gXHRwYWdlbWFwX2ZkID0gb3BlbihcIi9wcm9jL3NlbGYvcGFnZW1hcFwiLCBPX1JET05MWSk7XG4gXHRpZiAocGFnZW1hcF9mZCBcdTAwM2MgMClcbiBcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwib3BlbiBwYWdlbWFwXFxuXCIpO1xuIFxuLVx0bGVuIC09IGxlbiAlIEhQQUdFX1NJWkU7XG4tXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiArIEhQQUdFX1NJWkUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApO1xuK1x0bGVuIC09IGxlbiAlIGhwYWdlX3NpemU7XG4rXHRwdHIgPSBtbWFwKE5VTEwsIGxlbiArIGhwYWdlX3NpemUsIFBST1RfUlcsIG1tYXBfZmxhZ3MsIGJhY2tpbmdfZmQsIDApO1xuIFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJpbml0aWFsIG1tYXBcIik7XG4tXHRwdHIgKz0gSFBBR0VfU0laRSAtICh1aW50cHRyX3QpcHRyICUgSFBBR0VfU0laRTtcbitcdHB0ciArPSBocGFnZV9zaXplIC0gKHVpbnRwdHJfdClwdHIgJSBocGFnZV9zaXplO1xuIFxuIFx0aWYgKG1hZHZpc2UocHRyLCBsZW4sIE1BRFZfSFVHRVBBR0UpKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJNQURWX0hVR0VQQUdFXCIpO1xuIFxuLVx0bWFwX2xlbiA9IHJhbSBcdTAwM2VcdTAwM2UgKEhQQUdFX1NISUZUIC0gMSk7XG4rXHRtYXBfbGVuID0gcmFtIFx1MDAzZVx1MDAzZSAoaHBhZ2Vfc2hpZnQgLSAxKTtcbiBcdG1hcCA9IG1hbGxvYyhtYXBfbGVuKTtcbiBcdGlmICghbWFwKVxuIFx0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJtYXAgbWFsbG9jXFxuXCIpO1xuQEAgLTk5LDcgKzEwNCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0bWVtc2V0KG1hcCwgMCwgbWFwX2xlbik7XG4gXG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZhKTtcbi1cdFx0Zm9yIChwID0gcHRyOyBwIFx1MDAzYyBwdHIgKyBsZW47IHAgKz0gSFBBR0VfU0laRSkge1xuK1x0XHRmb3IgKHAgPSBwdHI7IHAgXHUwMDNjIHB0ciArIGxlbjsgcCArPSBocGFnZV9zaXplKSB7XG4gXHRcdFx0aW50NjRfdCBwZm47XG4gXG4gXHRcdFx0cGZuID0gYWxsb2NhdGVfdHJhbnNodWdlKHAsIHBhZ2VtYXBfZmQpO1xuQEAgLTEwNyw3ICsxMTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0aWYgKHBmbiBcdTAwM2MgMCkge1xuIFx0XHRcdFx0bnJfZmFpbGVkKys7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHNpemVfdCBpZHggPSBwZm4gXHUwMDNlXHUwMDNlIChIUEFHRV9TSElGVCAtIHBzaGlmdCgpKTtcbitcdFx0XHRcdHNpemVfdCBpZHggPSBwZm4gXHUwMDNlXHUwMDNlIChocGFnZV9zaGlmdCAtIHBzaGlmdCgpKTtcbiBcbiBcdFx0XHRcdG5yX3N1Y2NlZWQrKztcbiBcdFx0XHRcdGlmIChpZHggXHUwMDNlPSBtYXBfbGVuKSB7XG5AQCAtMTIzLDcgKzEyOCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHR9XG4gXG4gXHRcdFx0Lyogc3BsaXQgdHJhbnNodWdlIHBhZ2UsIGtlZXAgbGFzdCBwYWdlICovXG4tXHRcdFx0aWYgKG1hZHZpc2UocCwgSFBBR0VfU0laRSAtIHBzaXplKCksIE1BRFZfRE9OVE5FRUQpKVxuK1x0XHRcdGlmIChtYWR2aXNlKHAsIGhwYWdlX3NpemUgLSBwc2l6ZSgpLCBNQURWX0RPTlRORUVEKSlcbiBcdFx0XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk1BRFZfRE9OVE5FRURcIik7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsIFx1MDAyNmIpO1xuQEAgLTEzMSw3ICsxMzYsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXG4gXHRcdGtzZnRfcHJpbnRfbXNnKFwiJS4zZiBzL2xvb3AsICUuM2YgbXMvcGFnZSwgJTEwLjNmIE1pQi9zXFx0XCJcbiBcdFx0XHQgICAgICAgXCIlNGQgc3VjY2VlZCwgJTRkIGZhaWxlZCwgJTRkIGRpZmZlcmVudCBwYWdlc1xcblwiLFxuLVx0XHRcdCAgICAgICBzLCBzICogMTAwMCAvIChsZW4gXHUwMDNlXHUwMDNlIEhQQUdFX1NISUZUKSwgbGVuIC8gcyAvICgxIFx1MDAzY1x1MDAzYyAyMCksXG4rXHRcdFx0ICAgICAgIHMsIHMgKiAxMDAwIC8gKGxlbiBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQpLCBsZW4gLyBzIC8gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbiBcdFx0XHQgICAgICAgbnJfc3VjY2VlZCwgbnJfZmFpbGVkLCBucl9wYWdlcyk7XG4gXG4gXHRcdGlmIChkdXJhdGlvbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgYi50dl9zZWMgLSBzdGFydC50dl9zZWMgXHUwMDNlPSBkdXJhdGlvbikge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuaW5kZXggNDgyMWEzNTYzMDM2My4uZjc1YmYwYmFjZDE4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtX3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5jXG5AQCAtMjEsNiArMjEsOCBAQFxuIFxuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0O1xuK3VpbnQ2NF90IF9fcG1kX3BhZ2Vfc2l6ZTtcbit1aW50NjRfdCBfX3BtZF9wYWdlX3NoaWZ0O1xuIFxuIHVpbnQ2NF90IHBhZ2VtYXBfZ2V0X2VudHJ5KGludCBmZCwgY2hhciAqc3RhcnQpXG4ge1xuQEAgLTE2MSw2ICsxNjMsOSBAQCB1aW50NjRfdCByZWFkX3BtZF9wYWdlc2l6ZSh2b2lkKVxuIFx0Y2hhciBidWZbMjBdO1xuIFx0c3NpemVfdCBudW1fcmVhZDtcbiBcbitcdGlmIChfX3BtZF9wYWdlX3NpemUpXG4rXHRcdHJldHVybiBfX3BtZF9wYWdlX3NpemU7XG4rXG4gXHRmZCA9IG9wZW4oUE1EX1NJWkVfRklMRV9QQVRILCBPX1JET05MWSk7XG4gXHRpZiAoZmQgPT0gLTEpXG4gXHRcdHJldHVybiAwO1xuQEAgLTE3Myw3ICsxNzgsMjUgQEAgdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZClcbiBcdGJ1ZltudW1fcmVhZF0gPSAnXFwwJztcbiBcdGNsb3NlKGZkKTtcbiBcbi1cdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApO1xuK1x0X19wbWRfcGFnZV9zaXplID0gc3RydG91bChidWYsIE5VTEwsIDEwKTtcbitcbitcdHJldHVybiBfX3BtZF9wYWdlX3NpemU7XG4rfVxuK1xuK3VpbnQ2NF90IHBtZF9wYWdlX3NoaWZ0KHZvaWQpXG4re1xuK1x0aWYgKF9fcG1kX3BhZ2Vfc2hpZnQpXG4rXHRcdHJldHVybiBfX3BtZF9wYWdlX3NoaWZ0O1xuK1xuK1x0aWYgKCFfX3BtZF9wYWdlX3NpemUpXG4rXHRcdF9fcG1kX3BhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXG4rXHRpZiAoIV9fcG1kX3BhZ2Vfc2l6ZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRfX3BtZF9wYWdlX3NoaWZ0ID0gKGZmc2woX19wbWRfcGFnZV9zaXplKSAtIDEpO1xuK1xuK1x0cmV0dXJuIF9fcG1kX3BhZ2Vfc2hpZnQ7XG4gfVxuIFxuIHVuc2lnbmVkIGxvbmcgcnNzX2Fub24odm9pZClcbkBAIC00NTIsMTQgKzQ3NSwxOSBAQCBib29sIGNoZWNrX2h1Z2Vfc2htZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IG5yX2hwYWdlcywgdWludDY0X3QgaHBhZ2Vfc2l6ZVxuIGludDY0X3QgYWxsb2NhdGVfdHJhbnNodWdlKHZvaWQgKnB0ciwgaW50IHBhZ2VtYXBfZmQpXG4ge1xuIFx0dWludDY0X3QgZW50WzJdO1xuK1x0Y29uc3QgdWludDY0X3QgaHBhZ2Vfc2l6ZSA9IHJlYWRfcG1kX3BhZ2VzaXplKCk7XG4rXHRjb25zdCB1aW50NjRfdCBocGFnZV9zaGlmdCA9IHBtZF9wYWdlX3NoaWZ0KCk7XG4rXG4rXHRpZiAoIWhwYWdlX3NpemUgfHwgIWhwYWdlX3NoaWZ0KVxuK1x0XHRyZXR1cm4gLTE7XG4gXG4gXHQvKiBkcm9wIHBtZCAqL1xuLVx0aWYgKG1tYXAocHRyLCBIUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuK1x0aWYgKG1tYXAocHRyLCBocGFnZV9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUyB8XG4gXHRcdCBNQVBfTk9SRVNFUlZFIHwgTUFQX1BSSVZBVEUsIC0xLCAwKSAhPSBwdHIpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIm1tYXAgdHJhbnNodWdlXFxuXCIpO1xuIFxuLVx0aWYgKG1hZHZpc2UocHRyLCBIUEFHRV9TSVpFLCBNQURWX0hVR0VQQUdFKSlcbitcdGlmIChtYWR2aXNlKHB0ciwgaHBhZ2Vfc2l6ZSwgTUFEVl9IVUdFUEFHRSkpXG4gXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcIk1BRFZfSFVHRVBBR0VcXG5cIik7XG4gXG4gXHQvKiBhbGxvY2F0ZSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgKi9cbkBAIC00NzEsNyArNDk5LDcgQEAgaW50NjRfdCBhbGxvY2F0ZV90cmFuc2h1Z2Uodm9pZCAqcHRyLCBpbnQgcGFnZW1hcF9mZClcbiBcbiBcdGlmIChQQUdFTUFQX1BSRVNFTlQoZW50WzBdKSBcdTAwMjZcdTAwMjYgUEFHRU1BUF9QUkVTRU5UKGVudFsxXSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgUEFHRU1BUF9QRk4oZW50WzBdKSArIDEgPT0gUEFHRU1BUF9QRk4oZW50WzFdKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKEhQQUdFX1NISUZUIC0gcHNoaWZ0KCkpKSAtIDEpKSlcbitcdCAgICAhKFBBR0VNQVBfUEZOKGVudFswXSkgXHUwMDI2ICgoMSBcdTAwM2NcdTAwM2MgKGhwYWdlX3NoaWZ0IC0gcHNoaWZ0KCkpKSAtIDEpKSlcbiBcdFx0cmV0dXJuIFBBR0VNQVBfUEZOKGVudFswXSk7XG4gXG4gXHRyZXR1cm4gLTE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG5pbmRleCA5YTQ5YWY4ODcwMmU0Li4xZDI2MDhjMWFkMDhmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bV91dGlsLmhcbkBAIC0zMSw2ICszMSw4IEBAXG4gXG4gZXh0ZXJuIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZTtcbiBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDtcbitleHRlcm4gdWludDY0X3QgX19wbWRfcGFnZV9zaXplO1xuK2V4dGVybiB1aW50NjRfdCBfX3BtZF9wYWdlX3NoaWZ0O1xuIFxuIC8qXG4gICogUmVwcmVzZW50cyBhbiBvcGVuIGZkIGFuZCBQUk9DTUFQX1FVRVJZIHN0YXRlIGZvciBiaW5hcnkgKHZpYSBpb2N0bClcbkBAIC04OSw2ICs5MSw3IEBAIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9nZXRfcGZuKGludCBmZCwgY2hhciAqc3RhcnQpO1xuIHZvaWQgY2xlYXJfc29mdGRpcnR5KHZvaWQpO1xuIGJvb2wgY2hlY2tfZm9yX3BhdHRlcm4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4gdWludDY0X3QgcmVhZF9wbWRfcGFnZXNpemUodm9pZCk7XG4rdWludDY0X3QgcG1kX3BhZ2Vfc2hpZnQodm9pZCk7XG4gdW5zaWduZWQgbG9uZyByc3NfYW5vbih2b2lkKTtcbiBib29sIGNoZWNrX2h1Z2VfYW5vbih2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbiBib29sIGNoZWNrX2h1Z2VfZmlsZSh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgbnJfaHBhZ2VzLCB1aW50NjRfdCBocGFnZV9zaXplKTtcbkBAIC0xNTcsMTIgKzE2MCw2IEBAIGludCBrc21fc3RvcCh2b2lkKTtcbiBpbnQgZ2V0X2hhcmR3YXJlX2NvcnJ1cHRlZF9zaXplKHVuc2lnbmVkIGxvbmcgKnZhbCk7XG4gaW50IHVucG9pc29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbik7XG4gXG4tLypcbi0gKiBPbiBwcGM2NCB0aGlzIHdpbGwgb25seSB3b3JrIHdpdGggcmFkaXggMk0gaHVnZXBhZ2Ugc2l6ZVxuLSAqL1xuLSNkZWZpbmUgSFBBR0VfU0hJRlQgMjFcbi0jZGVmaW5lIEhQQUdFX1NJWkUgKDEgXHUwMDNjXHUwMDNjIEhQQUdFX1NISUZUKVxuLVxuICNkZWZpbmUgUEFHRU1BUF9QUkVTRU5UKGVudClcdCgoKGVudCkgXHUwMDI2ICgxdWxsIFx1MDAzY1x1MDAzYyA2MykpICE9IDApXG4gI2RlZmluZSBQQUdFTUFQX1BGTihlbnQpXHQoKGVudCkgXHUwMDI2ICgoMXVsbCBcdTAwM2NcdTAwM2MgNTUpIC0gMSkpXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxODowMC4wMjY0OTMzNThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTE0MjA1MTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBXb3J0aEZ1enppbmcgRXZhbHVhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIHNlbGYtdGVzdHMgZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW1gKSB0ZXN0cywgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogYGd1YXJkLXJlZ2lvbnMuY2AsIGBrc21fdGVzdHMuY2AsIGBydW5fdm10ZXN0cy5zaGAsIGB0cmFuc2h1Z2Utc3RyZXNzLmNgLCBgdm1fdXRpbC5jYCwgYW5kIGB2bV91dGlsLmhgLiBBbGwgb2YgdGhlbSwgaW1wb3J0YW50bHksIGFyZSBjb250YWluZWQgd2l0aGluIHRoYXQgb25lIGRpcmVjdG9yeS5cblxuTm93LCBsZXQncyBhcHBseSB0aGF0IFwiTkVHQVRJVkUgQ1JJVEVSSUFcIiBpbiBTRUNUSU9OIDIuIFRoZSBjb3JlIG9mIHRoaXMgZGVjaXNpb24gaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUga2VybmVsIGltYWdlIG9yIG1vZHVsZXMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBub3RoaW5nIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgc291cmNlIHRyZWUgKGUuZy4sIGBtbS9gLCBga2VybmVsL2AsIGBmcy9gLCBgZHJpdmVycy9gLCBgYXJjaC9gKSBhcHBlYXJzIHRvIGJlIHRvdWNoZWQuIFRoZXNlIGFyZSBwdXJlbHkgc2VsZi10ZXN0cy4gU3BlY2lmaWNhbGx5LCB0aGV5IGZhbGwgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIHVzZXItc3BhY2UgdGVzdGluZyBhbmQgc2NyaXB0cyB0aGF0ICpkb24ndCogZGlyZWN0bHkgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgb3IgbW9kdWxlcy4gVGhlcmVmb3JlLCBieSB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgb3V0bGluZWQsIHRoZSBwYXRjaCBpcyAqbm90KiB3b3J0aCBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4gU2luY2UgdGhpcyBpcyBhIHRlc3QgYW5kIG5vdCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBhbHNvIGJlIGVtcHR5LiBJJ2xsIHF1aWNrbHkgY29uZmlybSBteSBhc3Nlc3NtZW50IHdpdGggYSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AganVzdCB0byBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTAsIk91dHB1dFRva2VucyI6NzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxODowMy41NDA3MDExOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGNvZGUgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vIGFuZCBkb2VzIG5vdCB0b3VjaCBhbnkga2VybmVsIGNvZGUgb3IgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTg6MDMuNTQwNzIxNTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqp5[1] Phase: Running StartedAt: 2026-09-07 13:18:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqp5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 13:18:14 +0000 UTC FinishedAt: 2026-09-07 13:18:18 +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,}