Name: series-workflowmd55q Phase: Failed StartedAt: 2026-07-28 04:16:07 +0000 UTC FinishedAt: 2026-07-28 04:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd55q[0] Phase: Succeeded StartedAt: 2026-07-28 04:16:07 +0000 UTC FinishedAt: 2026-07-28 04:55:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd55q[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 04:16:07 +0000 UTC FinishedAt: 2026-07-28 04:55:40 +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+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIG9mIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGBuY192ZW5kb3Jfd3JpdGVgIGFuZCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZyb20gYHZvaWRgIHRvIGBpbnRgIHRvIHByb3BhZ2F0ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGB1c2JuZXRfd3JpdGVfY21kYC4gSG93ZXZlciwgdGhlIHJldHVybiB2YWx1ZSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYWxsIGNhbGxlcnMgKG9ubHkgYG5ldDEwODBfcmVzZXRgKS4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYy9jbGVhbnVwIGNoYW5nZSB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDQ6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNmU2Y2E4MDFhMmZiYjIwMTEzYTRlZWY0NzYzY2Q5NDJlNDE1MjkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDQ6NTQ6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbmluZGV4IDE5ZjZlMTIyMmQ5MzE1Li5kZDlmMTM2MWFlZDYyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbkBAIC0xMTMsMTggJiM0MzsxMTMsMTggQEAgbmNfcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2ICpyZXR2YWxfcHRyKVxuIFx0cmV0dXJuIG5jX3ZlbmRvcl9yZWFkKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCByZXR2YWxfcHRyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWRcbiYjNDM7c3RhdGljIGludFxuIG5jX3ZlbmRvcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG4ge1xuLVx0dXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSxcbi1cdFx0XHQgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuLVx0XHRcdCB2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTtcbiYjNDM7XHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSxcbiYjNDM7XHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4mIzQzO1x0XHRcdFx0dmFsdWUsIHJlZ251bSwgTlVMTCwgMCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZFxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuIG5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG4ge1xuLVx0bmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG4mIzQzO1x0cmV0dXJuIG5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpO1xuIH1cbiBcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgZnJvbSBgdm9pZGAgdG8gYGludGAgdG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHVzYm5ldF93cml0ZV9jbWRgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhbGwgY2FsbGVycyAob25seSBgbmV0MTA4MF9yZXNldGApLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljL2NsZWFudXAgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY2ZTZjYTgwMWEyZmJiMjAxMTNhNGVlZjQ3NjNjZDk0MmU0MTUyOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAwNDo1NDo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMgYi9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jCmluZGV4IDE5ZjZlMTIyMmQ5MzE1Li5kZDlmMTM2MWFlZDYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jCkBAIC0xMTMsMTggJiM0MzsxMTMsMTggQEAgbmNfcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2ICpyZXR2YWxfcHRyKQogCXJldHVybiBuY192ZW5kb3JfcmVhZChkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgcmV0dmFsX3B0cik7CiB9CiAKLXN0YXRpYyB2b2lkCiYjNDM7c3RhdGljIGludAogbmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSkKIHsKLQl1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLAotCQkJIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSB2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCByZXEsCiYjNDM7CQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKJiM0MzsJCQkJdmFsdWUsIHJlZ251bSwgTlVMTCwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiBuY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKQogewotCW5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpOwomIzQzOwlyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7CiB9CiAKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNgLiBJdCBsb29rcyBsaWtlIHNvbWVvbmUmIzM5O3MgbW9kaWZpZWQgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGVtIHRvIHJldHVybiB0aGUgYGludGAgdmFsdWUgdGhhdCBgdXNibmV0X3dyaXRlX2NtZGAgcHJvdmlkZXMsIHJhdGhlciB0aGFuIHJlbWFpbmluZyBgdm9pZGAuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICp3aHkqPyBJcyB0aGlzIGEgZ2VudWluZSBmdW5jdGlvbmFsIGNoYW5nZSwgb3IganVzdCBhIGJpdCBvZiB0aWR5aW5nIHVwPyBBcmUgdGhlc2UgcmV0dXJuIHZhbHVlcyBhY3R1YWxseSBiZWluZyB1c2VkICpzb21ld2hlcmUqPyBQZXJoYXBzIGNoZWNraW5nIGZvciBlcnJvcnMsIG9yIG1heWJlIHRoZSByZXR1cm4gaXMgcmVxdWlyZWQuCgpUbyBmaWd1cmUgdGhpcyBvdXQsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nICpjYWxsZWQqIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZpbGUuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY2AgZm9yIGluc3RhbmNlcyBvZiBgbmNfcmVnaXN0ZXJfd3JpdGVgIGFuZCBgbmNfdmVuZG9yX3dyaXRlYC4gVGhhdCBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hldGhlciB0aGUgcmV0dXJuIHZhbHVlcyBhcmUgYmVpbmcgaGFuZGxlZCAoaS5lLiwgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSwgdXNlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgZXRjLikgb3Igc2ltcGx5IGJlaW5nIGRpc2NhcmRlZC4gQmFzZWQgb24gdGhlIHJlc3VsdHMsIEkgY2FuIGFzc2VzcyB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNfcmVnaXN0ZXJfd3JpdGV8bmNfdmVuZG9yX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTExNj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjExNzpuY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMTgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM9MTI0PXN0YXRpYyBpbmxpbmUgaW50XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjEyNTpuY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjc6XHRyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0yNTk9c3RhdGljIGludCBuZXQxMDgwX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4MS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjgyOlx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODMtXHRcdFx0VVNCQ1RMX0ZMVVNIX1RISVMgfCBVU0JDVExfRkxVU0hfT1RIRVIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyOTE6XHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cdFx0XHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIGFuYWx5c2lzOgoKKipVbmNoZWNrZWQgUmV0dXJuIFZhbHVlcyDigJMgQSBQb3RlbnRpYWwgQnVnIEFsZXJ0ISoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggbW9kaWZpZXMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgdG8gbm93IHJldHVybiBhbiBgaW50YC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLCB1c3VhbGx5LiBJdCBzdWdnZXN0cyB0aGV5IG1pZ2h0IGJlIGNvbW11bmljYXRpbmcgc3RhdHVzIG9yIGVycm9ycy4gQnV0Li4uIHdhaXQgYSBtaW51dGUsIHRoZSBjb2RlIGluIGBuZXQxMDgwX3Jlc2V0YCAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IGNoZWNrIHRob3NlIHJldHVybiB2YWx1ZXMhIFRoaXMgY291bGQgYmUgYSBzbmVha3kgbGl0dGxlIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbi4gSWYgdGhlcmUmIzM5O3MgYSB3cml0ZSBmYWlsdXJlLCBhbmQgd2UmIzM5O3JlIG5vdCBjaGVja2luZyBmb3IgaXQsIHRoZSBzeXN0ZW0gbWlnaHQgY29udGludWUsIHRoaW5raW5nIHRoZSB3cml0ZSBzdWNjZWVkZWQgd2hlbiBpdCBkaWRuJiMzOTt0LiBUaGlzIGNvdWxkIGxlYWQgdG8gYSB3aG9sZSBob3N0IG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzIGRvd24gdGhlIGxpbmUuCgpPa2F5LCBsZXQgbWUganVzdCBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBjYWxscyB0byB0aG9zZSBmdW5jdGlvbnMg4oCTIGBuY19yZWdpc3Rlcl93cml0ZWAgYW5kIGBuY192ZW5kb3Jfd3JpdGVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxhY2sgb2YgcmV0dXJuIHZhbHVlIGNoZWNraW5nIGlzbiYjMzk7dCBhIHdpZGVyIHByb2JsZW0gaW4gdGhlIGNvZGViYXNlLiBUaGlzIGZlZWxzIGxpa2UgaXQgd2FycmFudHMgYSBkZWVwZXIgZGl2ZS4gV2UgbWlnaHQgaGF2ZSBhIHN5c3RlbWljIGlzc3VlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNfcmVnaXN0ZXJfd3JpdGV8bmNfdmVuZG9yX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTExNj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjExNzpuY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMTgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM9MTI0PXN0YXRpYyBpbmxpbmUgaW50XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjEyNTpuY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjc6XHRyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0yNTk9c3RhdGljIGludCBuZXQxMDgwX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4MS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjgyOlx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODMtXHRcdFx0VVNCQ1RMX0ZMVVNIX1RISVMgfCBVU0JDVExfRkxVU0hfT1RIRVIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyOTE6XHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cdFx0XHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29kZSBSZXVzZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMsIGBuY19yZWdpc3Rlcl93cml0ZWAgYW5kIGBuY192ZW5kb3Jfd3JpdGVgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGVudGlyZSBmaWxlLCB3aGljaCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbSBnaXZlbiB0aGUgY29udGV4dC4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzZW5zZSBvZiB3aGV0aGVyIHRoZXNlIGFyZSBpc29sYXRlZCBpbmNpZGVudHMgb3IgaWYgdGhleSYjMzk7cmUgdXNlZCBlbHNld2hlcmUuIEFyZSB0aGVzZSBmdW5jdGlvbnMgb25seSBjYWxsZWQgaW4gdGhpcyBzcGVjaWZpYyBzZWN0aW9uLCBvciBhcmUgdGhleSBjZW50cmFsIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEZpbmRpbmcgYWxsIHVzYWdlcyB3aWxsIGdpdmUgYSBxdWljayBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIGhvdyBkZWVwIEkgbmVlZCB0byBkaXZlIGZvciBhIGNvbXBsZXRlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdC8qXG4gMjUxOlx0ICogVFRMIHJlZ2lzdGVyXG4gMjUyOlx0ICovXG4gMjUzOlx0XG4gMjU0Olx0I2RlZmluZVx0VFRMX09USEVSKHR0bClcdCgweDAwZmYgXHUwMDI2ICh0dGwgXHUwMDNlXHUwMDNlIDgpKVxuIDI1NTpcdCNkZWZpbmUgTUtfVFRMKHRoaXMsb3RoZXIpXHQoKHUxNikoKChvdGhlcilcdTAwM2NcdTAwM2M4KXwoMHgwMGZmXHUwMDI2KHRoaXMpKSkpXG4gMjU2Olx0XG4gMjU3Olx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAyNTg6XHRcbiAyNTk6XHRzdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIDI2MDpcdHtcbiAyNjE6XHRcdHUxNlx0XHR1c2JjdGwsIHN0YXR1cywgdHRsO1xuIDI2MjpcdFx0dTE2XHRcdHZwO1xuIDI2MzpcdFx0aW50XHRcdHJldHZhbDtcbiAyNjQ6XHRcbiAyNjU6XHRcdC8vIG5jX2R1bXBfcmVnaXN0ZXJzKGRldik7XG4gMjY2Olx0XG4gMjY3Olx0XHRpZiAoKHJldHZhbCA9IG5jX3JlZ2lzdGVyX3JlYWQoZGV2LCBSRUdfU1RBVFVTLCBcdTAwMjZ2cCkpIFx1MDAzYyAwKSB7XG4gMjY4Olx0XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Y2FuJiMzOTt0IHJlYWQgJXMtJXMgc3RhdHVzOiAlZFxcblwmIzM0OyxcbiAyNjk6XHRcdFx0XHQgICBkZXYtXHUwMDNldWRldi1cdTAwM2VidXMtXHUwMDNlYnVzX25hbWUsIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldnBhdGgsIHJldHZhbCk7XG4gMjcwOlx0XHRcdGdvdG8gZG9uZTtcbiAyNzE6XHRcdH1cbiAyNzI6XHRcdHN0YXR1cyA9IHZwO1xuIDI3MzpcdFx0bmNfZHVtcF9zdGF0dXMoZGV2LCBzdGF0dXMpO1xuIDI3NDpcdFxuIDI3NTpcdFx0aWYgKChyZXR2YWwgPSBuY19yZWdpc3Rlcl9yZWFkKGRldiwgUkVHX1VTQkNUTCwgXHUwMDI2dnApKSBcdTAwM2MgMCkge1xuIDI3NjpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2NhbiYjMzk7dCByZWFkIFVTQkNUTCwgJWRcXG5cJiMzNDssIHJldHZhbCk7XG4gMjc3Olx0XHRcdGdvdG8gZG9uZTtcbiAyNzg6XHRcdH1cbiAyNzk6XHRcdHVzYmN0bCA9IHZwO1xuIDI4MDpcdFx0bmNfZHVtcF91c2JjdGwoZGV2LCB1c2JjdGwpO1xuIDI4MTpcdFxuIDI4MjpcdFx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxuIDI4MzpcdFx0XHRcdFVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTtcbiAyODQ6XHRcbiAyODU6XHRcdGlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19UVEwsIFx1MDAyNnZwKSkgXHUwMDNjIDApIHtcbiAyODY6XHRcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtjYW4mIzM5O3QgcmVhZCBUVEwsICVkXFxuXCYjMzQ7LCByZXR2YWwpO1xuIDI4NzpcdFx0XHRnb3RvIGRvbmU7XG4gMjg4Olx0XHR9XG4gMjg5Olx0XHR0dGwgPSB2cDtcbiAyOTA6XHRcbiAyOTE6XHRcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcbiAyOTI6XHRcdFx0XHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xuIDI5MzpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDthc3NpZ25lZCBUVEwsICVkIG1zXFxuXCYjMzQ7LCBOQ19SRUFEX1RUTF9NUyk7XG4gMjk0Olx0XG4gMjk1Olx0XHRuZXRpZl9pbmZvKGRldiwgbGluaywgZGV2LVx1MDAzZW5ldCwgXCYjMzQ7cG9ydCAlYywgcGVlciAlc2Nvbm5lY3RlZFxcblwmIzM0OyxcbiAyOTY6XHRcdFx0ICAgKHN0YXR1cyBcdTAwMjYgU1RBVFVTX1BPUlRfQSkgPyAmIzM5O0EmIzM5OyA6ICYjMzk7QiYjMzk7LFxuIDI5NzpcdFx0XHQgICAoc3RhdHVzIFx1MDAyNiBTVEFUVVNfQ09OTl9PVEhFUikgPyBcJiMzNDtcJiMzNDsgOiBcJiMzNDtkaXNcJiMzNDspO1xuIDI5ODpcdFx0cmV0dmFsID0gMDtcbiAyOTk6XHRcbiAzMDA6XHRkb25lOlxuIDMwMTpcdFx0cmV0dXJuIHJldHZhbDtcbiAzMDI6XHR9XG4gMzAzOlx0XG4gMzA0Olx0c3RhdGljIGludCBuZXQxMDgwX2NoZWNrX2Nvbm5lY3Qoc3RydWN0IHVzYm5ldCAqZGV2KVxuIDMwNTpcdHtcbiAzMDY6XHRcdGludFx0XHRcdHJldHZhbDtcbiAzMDc6XHRcdHUxNlx0XHRcdHN0YXR1cztcbiAzMDg6XHRcdHUxNlx0XHRcdHZwO1xuIDMwOTpcdFxuIDMxMDpcdFx0cmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19TVEFUVVMsIFx1MDAyNnZwKTtcbiAzMTE6XHRcdHN0YXR1cyA9IHZwO1xuIDMxMjpcdFx0aWYgKHJldHZhbCAhPSAwKSB7XG4gMzEzOlx0XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7bmV0MTA4MF9jaGVja19jb25uIHJlYWQgLSAlZFxcblwmIzM0OywgcmV0dmFsKTtcbiAzMTQ6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzMTU6XHRcdH1cbiAzMTY6XHRcdGlmICgoc3RhdHVzIFx1MDAyNiBTVEFUVVNfQ09OTl9PVEhFUikgIT0gU1RBVFVTX0NPTk5fT1RIRVIpXG4gMzE3Olx0XHRcdHJldHVybiAtRU5PTElOSztcbiAzMTg6XHRcdHJldHVybiAwO1xuIDMxOTpcdH1cbiAzMjA6XHRcbiAzMjE6XHRzdGF0aWMgdm9pZCBuY19lbnN1cmVfc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gMzIyOlx0e1xuIDMyMzpcdFx0aWYgKCYjNDM7JiM0MztkZXYtXHUwMDNlZnJhbWVfZXJyb3JzIFx1MDAzYz0gNSlcbiAzMjQ6XHRcdFx0cmV0dXJuO1xuIDMyNTpcdFxuIDMyNjpcdFx0aWYgKHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLFxuIDMyNzpcdFx0XHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMzI4Olx0XHRcdFx0XHRcdFVTQl9SRUNJUF9ERVZJQ0UsXG4gMzI5Olx0XHRcdFx0XHRcdFVTQkNUTF9GTFVTSF9USElTIHxcbiAzMzA6XHRcdFx0XHRcdFx0VVNCQ1RMX0ZMVVNIX09USEVSLFxuIDMzMTpcdFx0XHRcdFx0XHRSRUdfVVNCQ1RMLCBOVUxMLCAwKSlcbiAzMzI6XHRcdFx0cmV0dXJuO1xuIDMzMzpcdFxuIDMzNDpcdFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXHUwMDNlbmV0LFxuIDMzNTpcdFx0XHQgIFwmIzM0O2ZsdXNoIG5ldDEwODA7IHRvbyBtYW55IGZyYW1pbmcgZXJyb3JzXFxuXCYjMzQ7KTtcbiAzMzY6XHRcdGRldi1cdTAwM2VmcmFtZV9lcnJvcnMgPSAwO1xuIDMzNzpcdH1cbiAzMzg6XHRcbiAzMzk6XHRzdGF0aWMgaW50IG5ldDEwODBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDM0MDpcdHtcbiAzNDE6XHRcdHN0cnVjdCBuY19oZWFkZXJcdCpoZWFkZXI7XG4gMzQyOlx0XHRzdHJ1Y3QgbmNfdHJhaWxlclx0KnRyYWlsZXI7XG4gMzQzOlx0XHR1MTZcdFx0XHRoZHJfbGVuLCBwYWNrZXRfbGVuO1xuIDM0NDpcdFxuIDM0NTpcdFx0LyogVGhpcyBjaGVjayBpcyBubyBsb25nZXIgZG9uZSBieSB1c2JuZXQgKi9cbiAzNDY6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBkZXYtXHUwMDNlbmV0LVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbiAzNDc6XHRcdFx0cmV0dXJuIDA7XG4gMzQ4Olx0XG4gMzQ5Olx0XHRpZiAoIShza2ItXHUwMDNlbGVuIFx1MDAyNiAweDAxKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgcGVycGxleGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBvZiBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byBgaW50YC4gRmluZSwgbWFrZXMgc2Vuc2UsIHBvdGVudGlhbCBmb3IgZXJyb3IgY29kZXMsIG1vcmUgZmxleGliaWxpdHksIGFsbCBnb29kLiBCdXQgdGhlbiBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldDEwODBfcmVzZXRgLCBhbmQgaXQmIzM5O3MgY29tcGxldGVseSBpZ25vcmluZyB0aGUgcmV0dXJuIHZhbHVlcyEgV2hhdCYjMzk7cyB0aGUgcG9pbnQ/IEFyZSB3ZSBqdXN0IHRyeWluZyB0byBiZSBtb3JlIHJvYnVzdCBvciBpcyB0aGlzIGEgc2ltcGxlIG92ZXJzaWdodD8KCkhvbGQgb24uLi4gSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2guIFRoaXMgbWFrZXMgbWUgd29uZGVyOiAqV2hlcmUgZWxzZSogaXMgYG5jX3JlZ2lzdGVyX3dyaXRlYCBldmVuIGJlaW5nIHVzZWQ/IFRoaXMgY291bGQgYmUgYSBtdWNoIGJpZ2dlciBwcm9ibGVtIHRoYW4ganVzdCBhIG1pc3NlZCBlcnJvciBjaGVjayBpbiBvbmUgZnVuY3Rpb24uIEJlc3QgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYWNyb3NzIHRoZSBlbnRpcmUgZmlsZSBhbmQgaWRlbnRpZnkgYWxsIGl0cyB1c2FnZXMuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY19yZWdpc3Rlcl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMjQ9c3RhdGljIGlubGluZSBpbnRcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI1Om5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyNi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0yNTk9c3RhdGljIGludCBuZXQxMDgwX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4MS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjgyOlx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODMtXHRcdFx0VVNCQ1RMX0ZMVVNIX1RISVMgfCBVU0JDVExfRkxVU0hfT1RIRVIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyOTE6XHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cdFx0XHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvc21ldGljIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHJldHVybiB0eXBlIG9mIGBuY192ZW5kb3Jfd3JpdGVgIGFuZCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZyb20gYHZvaWRgIHRvIGBpbnRgLiBCdXQsIGhvbGQgb27igKYgSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgKm5ldmVyKiBjaGVja2VkIG9yIHVzZWQgYW55d2hlcmUhIFRoYXQgc2VlbXMuLi4gc3RyYW5nZS4gSXQgbWVhbnMgdGhlIHBhdGNoIGhhcyBhYnNvbHV0ZWx5IG5vIGltcGFjdCBvbiB0aGUgcHJvZ3JhbSYjMzk7cyBleGVjdXRpb24gZmxvdy4gSXQmIzM5O3MganVzdCByZXR1cm5pbmcgYW4gaW50ZWdlciB0aGF0JiMzOTtzIGltbWVkaWF0ZWx5IGRpc2NhcmRlZC4gV2hhdCYjMzk7cyB0aGUgcG9pbnQ/CgpMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgdXNibmV0X3dyaXRlX2NtZGAgZG9lc24mIzM5O3QgaGF2ZSBzb21lIGhpZGRlbiBzaWRlIGVmZmVjdCB0aGF0JiMzOTtzIHNvbWVob3cgaW1wYWN0ZWQgYnkgdGhpcy4gTm9wZSwgc3RpbGwganVzdCByZXR1cm5pbmcgYW4gYGludGAgaW5zdGVhZCBvZiBgdm9pZGAuIFNvLCBhdCBmaXJzdCBnbGFuY2UsIHRoaXMgbG9va3MgbGlrZSBhIHB1cmVseSBjb3NtZXRpYyBjaGFuZ2UsIGEgY2xlYW51cCBvZiBzb3J0cy4gV2UmIzM5O3JlIG5vdyByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUgZnJvbSB0aGUgaGVscGVyLCBidXQgdGhlbiBwcm9tcHRseSBpZ25vcmluZyBpdCBhdCB0aGUgY2FsbCBzaXRlLiBTZWVtcyBvZGQuCgpXYWl0LCBpcyB0aGVyZSBhIHdhcm5pbmcgaXQgbWlnaHQgYmUgZml4aW5nPyBQZXJoYXBzIGB1c2JuZXRfd3JpdGVfY21kYCBpdHNlbGYgaXMgbWFya2VkIHdpdGggYF9fbXVzdF9jaGVja2A/IFRoYXQgd291bGQgbWFrZSBtb3JlIHNlbnNlLiBJIHNob3VsZCBjaGVjayBgdXNibmV0X3dyaXRlX2NtZGAgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmhgIG9yIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JuZXRfd3JpdGVfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTgxPXN0YXRpYyBpbnQgYXFjMTExX3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xODMte1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4NDpcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTg1LVx0XHRcdFx0ICAgICAgVVNCX1JFQ0lQX0RFVklDRSwgdmFsdWUsIGluZGV4LCBkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTQwPWludCBhc2l4X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDgtXHRpZiAoIWluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NDk6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZDtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTUwLVx0ZWxzZVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTE6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTItXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NjM9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjUte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NjY6XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjctXHRcdFx0ICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM9MjMxPXN0YXRpYyBpbnQgX19heDg4MTc5X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI0MC1cdGlmICghYXg4ODE3OV9pbl9wbShkZXYpKVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jOjI0MTpcdFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI0Mi1cdGVsc2VcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYzoyNDM6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI0NC1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM9MjU1PXN0YXRpYyB2b2lkIGF4ODgxNzlfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI2Mi1cdFx0Y3B1X3RvX2xlMTZzKFx1MDAyNmJ1Zik7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MjYzOlx0XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjY0LVx0XHRcdFx0ICAgICAgIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwgXHUwMDI2YnVmLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYy0yNjYtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jOjI2NzpcdFx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI2OC1cdFx0XHRcdCAgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYz00MDU9c3RhdGljIHZvaWQgY2RjX25jbV91cGRhdGVfcnh0eF9tYXgoc3RydWN0IHVzYm5ldCAqZGV2LCB1MzIgbmV3X3J4LCB1MzIgbmV3X3R4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNDE5LVx0XHQvKiB0ZWxsIGRldmljZSB0byB1c2UgbmV3IHNpemUgKi9cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM6NDIwOlx0XHRpZiAodXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfU0VUX05UQl9JTlBVVF9TSVpFLFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy00MjEtXHRcdFx0XHQgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVRcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jPTUxNj1zdGF0aWMgaW50IGNkY19uY21faW5pdChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01MzQtXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtTZXR0aW5nIENSQyBtb2RlIG9mZlxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jOjUzNTpcdFx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfU0VUX0NSQ19NT0RFLFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01MzYtXHRcdFx0XHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNTU2LVx0XHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMzItYml0XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM6NTU3Olx0XHRcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBVU0JfQ0RDX1NFVF9OVEJfRk9STUFULFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01NTgtXHRcdFx0XHRcdCAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01NjQtXHRcdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O1NldHRpbmcgTlRCIGZvcm1hdCB0byAxNi1iaXRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYzo1NjU6XHRcdFx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfU0VUX05UQl9GT1JNQVQsXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTU2Ni1cdFx0XHRcdFx0ICAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVRcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jPTYwOT1zdGF0aWMgdm9pZCBjZGNfbmNtX3NldF9kZ3JhbV9zaXplKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IG5ld19zaXplKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNjM4LVx0bWF4X2RhdGFncmFtX3NpemUgPSBjcHVfdG9fbGUxNihjdHgtXHUwMDNlbWF4X2RhdGFncmFtX3NpemUpO1xuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYzo2Mzk6XHRlcnIgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRVRfTUFYX0RBVEFHUkFNX1NJWkUsXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTY0MC1cdFx0XHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jPTc3PXN0YXRpYyBpbnQgZG1fd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTc5LVx0aW50IGVycjtcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYzo4MDpcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBETV9XUklURV9SRUdTLFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTgxLVx0XHRcdFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYz04OT1zdGF0aWMgaW50IGRtX3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtOTAte1xuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jOjkxOlx0cmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCBETV9XUklURV9SRUcsXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtOTItXHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jPTk2PXN0YXRpYyB2b2lkIGRtX3dyaXRlX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy05OC17XG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM6OTk6XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgRE1fV1JJVEVfUkVHUyxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy0xMDAtXHRcdFx0ICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbi0tXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM9MTA0PXN0YXRpYyB2b2lkIGRtX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtMTA1LXtcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYzoxMDY6XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgRE1fV1JJVEVfUkVHLFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTEwNy1cdFx0XHQgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmM9MTIzPXN0YXRpYyBpbnQgbWNzNzgzMF9zZXRfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMtMTI0LXtcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmM6MTI1Olx0cmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCBNQ1M3ODMwX1dSX0JSRVEsIE1DUzc4MzBfV1JfQk1SRVEsXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jLTEyNi1cdFx0XHRcdDB4MDAwMCwgaW5kZXgsIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmM9MTI5PXN0YXRpYyB2b2lkIG1jczc4MzBfc2V0X3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jLTEzMC17XG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jOjEzMTpcdHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBNQ1M3ODMwX1dSX0JSRVEsIE1DUzc4MzBfV1JfQk1SRVEsXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jLTEzMi1cdFx0XHRcdDB4MDAwMCwgaW5kZXgsIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM9MTE3PW5jX3ZlbmRvcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTExOC17XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjExOTpcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjAtXHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0zMjE9c3RhdGljIHZvaWQgbmNfZW5zdXJlX3N5bmMoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMzI1LVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzozMjY6XHRpZiAodXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIFJFUVVFU1RfUkVHSVNURVIsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTMyNy1cdFx0XHRcdFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9wbHVzYi5jPTU4PXBsX3ZlbmRvcl9yZXEoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHZhbCwgdTggaW5kZXgpXG5kcml2ZXJzL25ldC91c2IvcGx1c2IuYy01OS17XG5kcml2ZXJzL25ldC91c2IvcGx1c2IuYzo2MDpcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMtNjEtXHRcdFx0XHR2YWwsIGluZGV4LCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYz03MzU9c3RhdGljIGludCBxbWlfd3dhbl9jaGFuZ2VfZHRyKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBvbilcbi0tXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYy03MzgtXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYzo3Mzk6XHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfUkVRX1NFVF9DT05UUk9MX0xJTkVfU1RBVEUsXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYy03NDAtXHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTNfZWNtLmM9Mzc9c3RhdGljIGludCBwbGFfd3JpdGVfd29yZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBpbmRleCwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUzX2VjbS5jLTYzLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUzX2VjbS5jOjY0Olx0cmV0ID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIFJUTDgxNTJfUkVRX1NFVF9SRUdTLCBSVEw4MTUyX1JFUVRfV1JJVEUsIGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL3I4MTUzX2VjbS5jLTY1LVx0XHRcdCAgICAgICBNQ1VfVFlQRV9QTEEgfCBieWVuLCBcdTAwMjZ0bXAsIHNpemVvZih0bXApKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jPTMxNz1zdGF0aWMgaW50IHNpZXJyYV9uZXRfc2VuZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmMtMzIyLVxuZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYzozMjM6XHRzdGF0dXMgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5ELFxuZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYy0zMjQtXHRcdFx0XHQgIFVTQl9ESVJfT1VUfFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9JTlRFUkZBQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmM9MTAxPXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fc21zYzc1eHhfd3JpdGVfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTMyIGluZGV4LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTExMC1cdGlmICghaW5fcG0pXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYzoxMTE6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZDtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTExMi1cdGVsc2VcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jOjExMzpcdFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kX25vcG07XG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYy0xMTQtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE1PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUzMiBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjMtXHRpZiAoY3VycmVudCAhPSBwZGF0YS1cdTAwM2VwbV90YXNrKVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0Olx0XHRmbiA9IHVzYm5ldF93cml0ZV9jbWQ7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjUtXHRlbHNlXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjY6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI3LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTQ1Mz1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBzbXNjOTV4eF93cml0ZV9yZWdfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtNDYyLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6NDYzOlx0cmV0ID0gdXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIFVTQl9WRU5ET1JfUkVRVUVTVF9XUklURV9SRUdJU1RFUixcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTQ2NC1cdFx0XHRcdCAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYz0zNT1zdGF0aWMgaW50IHNyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYy0zOC1cbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYzozOTpcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBTUl9XUl9NVUxUSVBMRV9SRUdTLCBTUl9SRVFfV1JfUkVHLCAwLCByZWcsIGRhdGEsXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNDAtXHRcdFx0ICAgICAgIGxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTUxPXN0YXRpYyBpbnQgc3Jfd3JpdGVfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1OCB2YWx1ZSlcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYy01Mi17XG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM6NTM6XHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIFNSX1dSX1NJTkdMRV9SRUcsIFNSX1JFUV9XUl9SRUcsXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNTQtXHRcdFx0XHR2YWx1ZSwgcmVnLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM9NTc9c3RhdGljIHZvaWQgc3Jfd3JpdGVfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTU5LXtcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYzo2MDpcdHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBTUl9XUl9NVUxUSVBMRV9SRUdTLCBTUl9SRVFfV1JfUkVHLFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTYxLVx0XHRcdCAgICAgICAwLCByZWcsIGRhdGEsIGxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTY0PXN0YXRpYyB2b2lkIHNyX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNjUte1xuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jOjY2Olx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIFNSX1dSX1NJTkdMRV9SRUcsIFNSX1JFUV9XUl9SRUcsXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNjctXHRcdFx0ICAgICAgIHZhbHVlLCByZWcsIE5VTEwsIDApO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYz00MT1zdGF0aWMgaW50IHNyX3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTQ1LVxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jOjQ2Olx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIGNtZCwgU1JfUkVRX1dSX1JFRywgdmFsdWUsIGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTQ3LVx0XHRcdCAgICAgIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYz01NT1zcl93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy01Ny17XG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NTg6XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBTUl9SRVFfV1JfUkVHLCB2YWx1ZSwgaW5kZXgsIGRhdGEsXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmMtNTktXHRcdFx0ICAgICAgIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMDY3PXN0YXRpYyBpbnQgX191c2JuZXRfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIwOTctXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjA5ODpzdGF0aWMgaW50IF9fdXNibmV0X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTggcmVxdHlwZSxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMDk5LVx0XHRcdCAgICAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjb25zdCB2b2lkICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTA0LVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIxMDU6XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O3VzYm5ldF93cml0ZV9jbWQgY21kPTB4JTAyeCByZXF0eXBlPSUwMnhcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTA2LVx0XHQgICBcJiMzNDsgdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9yZWFkX2NtZCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxNTEtICovXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE1MjppbnQgdXNibmV0X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTggcmVxdHlwZSxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTUzLVx0XHQgICAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjb25zdCB2b2lkICpkYXRhLCB1MTYgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE1OC1cdFx0cmV0dXJuIC1FTk9ERVY7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE1OTpcdHJldCA9IF9fdXNibmV0X3dyaXRlX2NtZChkZXYsIGNtZCwgcmVxdHlwZSwgdmFsdWUsIGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxNjAtXHRcdFx0XHQgZGF0YSwgc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxNjMtfVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIxNjQ6RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3dyaXRlX2NtZCk7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE2NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MjE3Nj1FWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfcmVhZF9jbWRfbm9wbSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxODEtICovXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE4MjppbnQgdXNibmV0X3dyaXRlX2NtZF9ub3BtKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1OCByZXF0eXBlLFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxODMtXHRcdFx0ICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgY29uc3Qgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE4NS17XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE4NjpcdHJldHVybiBfX3VzYm5ldF93cml0ZV9jbWQoZGV2LCBjbWQsIHJlcXR5cGUsIHZhbHVlLCBpbmRleCxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTg3LVx0XHRcdFx0ICBkYXRhLCBzaXplKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTg4LX1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMTg5OkVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF93cml0ZV9jbWRfbm9wbSk7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE5MC1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMTkxPXN0YXRpYyB2b2lkIHVzYm5ldF9hc3luY19jbWRfY2Ioc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjA3LSAqL1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIyMDg6aW50IHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjIwOS1cdFx0XHQgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IHNpemUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIyMTUtXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjIxNjpcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7dXNibmV0X3dyaXRlX2NtZCBjbWQ9MHglMDJ4IHJlcXR5cGU9JTAyeFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIyMTctXHRcdCAgIFwmIzM0OyB2YWx1ZT0weCUwNHggaW5kZXg9MHglMDR4IHNpemU9JWRcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIyNzItfVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIyNzM6RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3dyaXRlX2NtZF9hc3luYyk7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjI3NC0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3NtZXRpYyBVU0JuZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB1c2JuZXRfd3JpdGVfY21kYCBpcyBqdXN0IHJldHVybmluZyBhbiBgaW50YCwgYW5kIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byByZXR1cm4gYW4gYGludGAgdG9vLCBidXQgdGhlIHJldHVybmVkIHZhbHVlcyBhcmUgbm90IGFjdHVhbGx5IGJlaW5nIHVzZWQuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbnVwLCBwb3NzaWJseSB0byBnZXQgcmlkIG9mIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhIGZ1bmN0aW9uIHJldHVybmluZyBgdm9pZGAgd2l0aCBhIGByZXR1cm5gIHN0YXRlbWVudCwgb3IgcGVyaGFwcyBpdCYjMzk7cyBhIGZ1dHVyZS1wcm9vZmluZyBjaGFuZ2UsIGFudGljaXBhdGluZyB0aGF0IHRoZXkgbWlnaHQgd2FudCB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIGxhdGVyIG9uLgoKQnV0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBvcmlnaW5hbCBjb2RlLiBBaCwgcmlnaHQ6CgpgYGBjCnN0YXRpYyB2b2lkCm5jX3ZlbmRvcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpCnsKCXVzYm5ldF93cml0ZV9jbWQoZGV2LCByZXEsCgkJCSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCgkJCSB2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkCm5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpCnsKCW5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpOwp9CmBgYAoKQW5kIG5vdyB0aGUgbW9kaWZpZWQgY29kZToKCmBgYGMKc3RhdGljIGludApuY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKQp7CglyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSwKCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKCQkJCXZhbHVlLCByZWdudW0sIE5VTEwsIDApOwp9CgpzdGF0aWMgaW5saW5lIGludApuY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKQp7CglyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7Cn0KYGBgCgpSaWdodCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBpcyBwdXJlbHkgY29zbWV0aWMuIFRoZSByZXR1cm4gdmFsdWVzIGFyZSAqc3RpbGwqIGlnbm9yZWQsIGp1c3QgYmVpbmcgcGFzc2VkIHVwIHRoZSBjaGFpbi4gIEl0IGRvZXNuJiMzOTt0IGNoYW5nZSBhbnl0aGluZyBmdW5jdGlvbmFsbHkuCgpIb2xkIG9uLCBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBMZXQgbWUgc2VlIHdoZXJlIGBuY19yZWdpc3Rlcl93cml0ZWAgYW5kIGBuY192ZW5kb3Jfd3JpdGVgIGFyZSBhY3R1YWxseSB1c2VkLiBUaGV5JiMzOTtyZSBgc3RhdGljYCBmdW5jdGlvbnMsIHNvIHRoZXkmIzM5O3JlIG9ubHkgaW4gYGRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNgLiBPa2F5LCBzbyB0aGV5JiMzOTtyZSBvbmx5IHVzZWQgd2l0aGluIHRoaXMgc2luZ2xlIGZpbGUuICBJIHJlY2FsbCBub3csIGBuY19yZWdpc3Rlcl93cml0ZWAgaXMgY2FsbGVkIHR3aWNlIGluIGBuZXQxMDgwX3Jlc2V0YCwgYW5kIGFzIGV4cGVjdGVkLCB0aGUgcmV0dXJuIHZhbHVlIGlzbiYjMzk7dCB1c2VkIHRoZXJlIGVpdGhlci4gU28sIHRoZSBwYXRjaCBqdXN0IHByb3BhZ2F0ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgdXNibmV0X3dyaXRlX2NtZGAsIGJ1dCBpdCBnZXRzIGRyb3BwZWQgYXQgdGhlIGVuZC4KCkluIHRoaXMgaW5zdGFuY2UsIEkgZG9uJiMzOTt0IHNlZSBhbnkgdmFsdWUgaW4gc3BlbmRpbmcgdGltZSBmdXp6aW5nIHRoaXMgYmVjYXVzZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbCBoYXNuJiMzOTt0IGNoYW5nZWQgYXQgYWxsLiBJIGNhbiBtb3ZlIG9uLiBMZXQgbWUganVzdCBjb25maXJtIGFnYWluIHRoYXQgYG5ldDEwODBfcmVzZXRgIGlzIHRoZSBvbmx5IGNhbGxlciBvZiBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZvciBjb21wbGV0ZSBjZXJ0YWludHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jX3JlZ2lzdGVyX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyND1zdGF0aWMgaW5saW5lIGludFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjU6bmNfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMTI2LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTI1OT1zdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgxLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyODI6XHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19VU0JDVEwsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4My1cdFx0XHRVU0JDVExfRkxVU0hfVEhJUyB8IFVTQkNUTF9GTFVTSF9PVEhFUik7XG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yOTAtXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjI5MTpcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkyLVx0XHRcdE1LX1RUTChOQ19SRUFEX1RUTF9NUywgVFRMX09USEVSKHR0bCkpICk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqTmFycm93aW5nIERvd24gdGhlIFNjb3BlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlIGlzIG9jY3VycmluZy4gVGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHNlZW1zIHRvIGJlIHRoYXQgdGhlIHByb2JsZW0gaXMgc3RyaWN0bHkgbG9jYWxpemVkIHRvIHRoZSBgbmV0MTA4MF9yZXNldGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjb25zdHJhaW50LCBtYWtpbmcgdGhlIGRlYnVnZ2luZyBwcm9jZXNzIG11Y2ggbW9yZSBtYW5hZ2VhYmxlLiBGdXJ0aGVyLCBJIGtub3cgdGhhdCBgbmNfdmVuZG9yX3dyaXRlYCBvbmx5IGdldHMgY2FsbGVkIHRocm91Z2ggYG5jX3JlZ2lzdGVyX3dyaXRlYC4gVGhpcyBuYXJyb3dzIHRoaW5ncyBkb3duIGV2ZW4gZnVydGhlci4gTm93LCBpbnN0ZWFkIG9mIHRoZSBlbnRpcmUgY29kZWJhc2UsIEkgY2FuIGZvY3VzIHNwZWNpZmljYWxseSBvbiB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCB0aGUgcGF0aHdheSBiZXR3ZWVuIHRoZW0uIEkmIzM5O3ZlIGVmZmVjdGl2ZWx5IGNyZWF0ZWQgYSB2ZXJ5IHByZWNpc2Ugc2VhcmNoIHNwYWNlLiBJIGNhbiBsb29rIGludG8gdGhlc2Ugc2VjdGlvbnMgb2YgdGhlIGNvZGUgdG8gZnVydGhlciBpZGVudGlmeSB0aGUgaXNzdWUuIFRoaXMgbWFrZXMgdGhlIGpvYiBhIHdob2xlIGxvdCBlYXNpZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jX3ZlbmRvcl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMTY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMTc6bmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMTE4LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyNT1uY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjc6XHRyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODI0CgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSBhcmUgbXkgb3duOgoKKipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiBUaGlzIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIGlzIG9ubHkgdHJpZ2dlcmVkIGJ5IGBuY19yZWdpc3Rlcl93cml0ZWAuIEludGVyZXN0aW5nLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5IGhlcmUuIEdpdmVuIHRoYXQgYW5kLCB0aGUgY3J1Y2lhbCBwYXJ0OiB0aGUgcmV0dXJuIHZhbHVlIGlzIHNpbXBseSBkaXNjYXJkZWQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGlnbm9yZWQuIFNvLCBmdW5jdGlvbmFsbHksIHRoaXMgcGF0Y2ggY2hhbmdlcyBhYnNvbHV0ZWx5IG5vdGhpbmcuIFplcm8gaW1wYWN0IG9uIHRoZSBwcm9ncmFtJiMzOTtzIGJlaGF2aW91ciBvciBvdXRwdXQuIFRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0byBiZSBnYWluZWQuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIE5vIHBvaW50IGluIGV4cGVuZGluZyByZXNvdXJjZXMgb24gc29tZXRoaW5nIHRoYXQgaGFzIG5vIGVmZmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdHlwZSBvZiBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCBmcm9tIGB2b2lkYCB0byBgaW50YCB0byBwcm9wYWdhdGUgdGhlIHJldHVybiB2YWx1ZSBvZiBgdXNibmV0X3dyaXRlX2NtZGAuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdmFsdWUgaXMgY29tcGxldGVseSBpZ25vcmVkIGJ5IGFsbCBjYWxsZXJzIChvbmx5IGBuZXQxMDgwX3Jlc2V0YCkuIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMvY2xlYW51cCBjaGFuZ2Ugd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdHlwZSBvZiBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCBmcm9tIGB2b2lkYCB0byBgaW50YCB0byBwcm9wYWdhdGUgdGhlIHJldHVybiB2YWx1ZSBvZiBgdXNibmV0X3dyaXRlX2NtZGAuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdmFsdWUgaXMgY29tcGxldGVseSBpZ25vcmVkIGJ5IGFsbCBjYWxsZXJzIChvbmx5IGBuZXQxMDgwX3Jlc2V0YCkuIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMvY2xlYW51cCBjaGFuZ2Ugd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTAuNzk2NDYyMzg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMDAxMDYxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIG9mIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGBuY192ZW5kb3Jfd3JpdGVgIGFuZCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZyb20gYHZvaWRgIHRvIGBpbnRgIHRvIHByb3BhZ2F0ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGB1c2JuZXRfd3JpdGVfY21kYC4gSG93ZXZlciwgdGhlIHJldHVybiB2YWx1ZSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYWxsIGNhbGxlcnMgKG9ubHkgYG5ldDEwODBfcmVzZXRgKS4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYy9jbGVhbnVwIGNoYW5nZSB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA0OjU0OjUwLjc5NjQ3MjgwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MDIwMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjZlNmNhODAxYTJmYmIyMDExM2E0ZWVmNDc2M2NkOTQyZTQxNTI5MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAwNDo1NDo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1xcbmluZGV4IDE5ZjZlMTIyMmQ5MzE1Li5kZDlmMTM2MWFlZDYyNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1xcbkBAIC0xMTMsMTggKzExMywxOCBAQCBuY19yZWdpc3Rlcl9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgKnJldHZhbF9wdHIpXFxuIFxcdHJldHVybiBuY192ZW5kb3JfcmVhZChkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgcmV0dmFsX3B0cik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkXFxuK3N0YXRpYyBpbnRcXG4gbmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG4ge1xcbi1cXHR1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLFxcbi1cXHRcXHRcXHQgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxcbi1cXHRcXHRcXHQgdmFsdWUsIHJlZ251bSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLFxcbitcXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuK1xcdFxcdFxcdFxcdHZhbHVlLCByZWdudW0sIE5VTEwsIDApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWRcXG4rc3RhdGljIGlubGluZSBpbnRcXG4gbmNfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG4ge1xcbi1cXHRuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcXG4rXFx0cmV0dXJuIG5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpO1xcbiB9XFxuIFxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTEuNTYzNTQ1MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjIzMzAxMzcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgZnJvbSBgdm9pZGAgdG8gYGludGAgdG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHVzYm5ldF93cml0ZV9jbWRgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhbGwgY2FsbGVycyAob25seSBgbmV0MTA4MF9yZXNldGApLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljL2NsZWFudXAgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjZlNmNhODAxYTJmYmIyMDExM2E0ZWVmNDc2M2NkOTQyZTQxNTI5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDA0OjU0OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbmluZGV4IDE5ZjZlMTIyMmQ5MzE1Li5kZDlmMTM2MWFlZDYyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbkBAIC0xMTMsMTggKzExMywxOCBAQCBuY19yZWdpc3Rlcl9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgKnJldHZhbF9wdHIpXG4gXHRyZXR1cm4gbmNfdmVuZG9yX3JlYWQoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHJldHZhbF9wdHIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuK3N0YXRpYyBpbnRcbiBuY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuIHtcbi1cdHVzYm5ldF93cml0ZV9jbWQoZGV2LCByZXEsXG4tXHRcdFx0IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbi1cdFx0XHQgdmFsdWUsIHJlZ251bSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSxcbitcdFx0XHRcdFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbitcdFx0XHRcdHZhbHVlLCByZWdudW0sIE5VTEwsIDApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWRcbitzdGF0aWMgaW5saW5lIGludFxuIG5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG4ge1xuLVx0bmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG4rXHRyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG4gfVxuIFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTEuNTYzNTQ4MTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc1OTUzMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jYC4gSXQgbG9va3MgbGlrZSBzb21lb25lJ3MgbW9kaWZpZWQgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBjaGFuZ2VkIHRoZW0gdG8gcmV0dXJuIHRoZSBgaW50YCB2YWx1ZSB0aGF0IGB1c2JuZXRfd3JpdGVfY21kYCBwcm92aWRlcywgcmF0aGVyIHRoYW4gcmVtYWluaW5nIGB2b2lkYC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAqd2h5Kj8gSXMgdGhpcyBhIGdlbnVpbmUgZnVuY3Rpb25hbCBjaGFuZ2UsIG9yIGp1c3QgYSBiaXQgb2YgdGlkeWluZyB1cD8gQXJlIHRoZXNlIHJldHVybiB2YWx1ZXMgYWN0dWFsbHkgYmVpbmcgdXNlZCAqc29tZXdoZXJlKj8gUGVyaGFwcyBjaGVja2luZyBmb3IgZXJyb3JzLCBvciBtYXliZSB0aGUgcmV0dXJuIGlzIHJlcXVpcmVkLlxuXG5UbyBmaWd1cmUgdGhpcyBvdXQsIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoaXMgc3BlY2lmaWMgZmlsZS4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNgIGZvciBpbnN0YW5jZXMgb2YgYG5jX3JlZ2lzdGVyX3dyaXRlYCBhbmQgYG5jX3ZlbmRvcl93cml0ZWAuIFRoYXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhlIHJldHVybiB2YWx1ZXMgYXJlIGJlaW5nIGhhbmRsZWQgKGkuZS4sIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUsIHVzZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIGV0Yy4pIG9yIHNpbXBseSBiZWluZyBkaXNjYXJkZWQuIEJhc2VkIG9uIHRoZSByZXN1bHRzLCBJIGNhbiBhc3Nlc3MgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhdGNoIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHRoZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTUuNTM5NTA0NjY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE2NDYwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY19yZWdpc3Rlcl93cml0ZXxuY192ZW5kb3Jfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTExNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMTc6bmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTExOC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyND1zdGF0aWMgaW5saW5lIGludFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI1Om5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI3OlxcdHJldHVybiBuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTI1OT1zdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODEtXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyODI6XFx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgzLVxcdFxcdFxcdFVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjkxOlxcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cXHRcXHRcXHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNDo1NDo1NS42ODc2NzkyMzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ2MzYxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBhbmFseXNpczpcblxuKipVbmNoZWNrZWQgUmV0dXJuIFZhbHVlcyDigJMgQSBQb3RlbnRpYWwgQnVnIEFsZXJ0ISoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBtb2RpZmllcyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byBub3cgcmV0dXJuIGFuIGBpbnRgLiBUaGF0J3MgZ29vZCBwcmFjdGljZSwgdXN1YWxseS4gSXQgc3VnZ2VzdHMgdGhleSBtaWdodCBiZSBjb21tdW5pY2F0aW5nIHN0YXR1cyBvciBlcnJvcnMuIEJ1dC4uLiB3YWl0IGEgbWludXRlLCB0aGUgY29kZSBpbiBgbmV0MTA4MF9yZXNldGAgKmRvZXNuJ3QqIGFjdHVhbGx5IGNoZWNrIHRob3NlIHJldHVybiB2YWx1ZXMhIFRoaXMgY291bGQgYmUgYSBzbmVha3kgbGl0dGxlIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbi4gSWYgdGhlcmUncyBhIHdyaXRlIGZhaWx1cmUsIGFuZCB3ZSdyZSBub3QgY2hlY2tpbmcgZm9yIGl0LCB0aGUgc3lzdGVtIG1pZ2h0IGNvbnRpbnVlLCB0aGlua2luZyB0aGUgd3JpdGUgc3VjY2VlZGVkIHdoZW4gaXQgZGlkbid0LiBUaGlzIGNvdWxkIGxlYWQgdG8gYSB3aG9sZSBob3N0IG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzIGRvd24gdGhlIGxpbmUuXG5cbk9rYXksIGxldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIGNhbGxzIHRvIHRob3NlIGZ1bmN0aW9ucyDigJMgYG5jX3JlZ2lzdGVyX3dyaXRlYCBhbmQgYG5jX3ZlbmRvcl93cml0ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbGFjayBvZiByZXR1cm4gdmFsdWUgY2hlY2tpbmcgaXNuJ3QgYSB3aWRlciBwcm9ibGVtIGluIHRoZSBjb2RlYmFzZS4gVGhpcyBmZWVscyBsaWtlIGl0IHdhcnJhbnRzIGEgZGVlcGVyIGRpdmUuIFdlIG1pZ2h0IGhhdmUgYSBzeXN0ZW1pYyBpc3N1ZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTkuMjM0MDQ1Mjc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjgzNDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY19yZWdpc3Rlcl93cml0ZXxuY192ZW5kb3Jfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTExNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMTc6bmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTExOC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyND1zdGF0aWMgaW5saW5lIGludFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI1Om5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI3OlxcdHJldHVybiBuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTI1OT1zdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODEtXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyODI6XFx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgzLVxcdFxcdFxcdFVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjkxOlxcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cXHRcXHRcXHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNDo1NDo1OS40MTY4ODcwMjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgyMjIwNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb2RlIFJldXNlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGFuZCBgbmNfdmVuZG9yX3dyaXRlYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGVudGlyZSBmaWxlLCB3aGljaCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNlbnNlIG9mIHdoZXRoZXIgdGhlc2UgYXJlIGlzb2xhdGVkIGluY2lkZW50cyBvciBpZiB0aGV5J3JlIHVzZWQgZWxzZXdoZXJlLiBBcmUgdGhlc2UgZnVuY3Rpb25zIG9ubHkgY2FsbGVkIGluIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiwgb3IgYXJlIHRoZXkgY2VudHJhbCB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBGaW5kaW5nIGFsbCB1c2FnZXMgd2lsbCBnaXZlIGEgcXVpY2sgb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGRlY2lkZSBob3cgZGVlcCBJIG5lZWQgdG8gZGl2ZSBmb3IgYSBjb21wbGV0ZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA0OjU1OjAyLjM5OTExMDg1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0LypcXG4gMjUxOlxcdCAqIFRUTCByZWdpc3RlclxcbiAyNTI6XFx0ICovXFxuIDI1MzpcXHRcXG4gMjU0OlxcdCNkZWZpbmVcXHRUVExfT1RIRVIodHRsKVxcdCgweDAwZmYgXFx1MDAyNiAodHRsIFxcdTAwM2VcXHUwMDNlIDgpKVxcbiAyNTU6XFx0I2RlZmluZSBNS19UVEwodGhpcyxvdGhlcilcXHQoKHUxNikoKChvdGhlcilcXHUwMDNjXFx1MDAzYzgpfCgweDAwZmZcXHUwMDI2KHRoaXMpKSkpXFxuIDI1NjpcXHRcXG4gMjU3OlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuIDI1ODpcXHRcXG4gMjU5OlxcdHN0YXRpYyBpbnQgbmV0MTA4MF9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDI2MDpcXHR7XFxuIDI2MTpcXHRcXHR1MTZcXHRcXHR1c2JjdGwsIHN0YXR1cywgdHRsO1xcbiAyNjI6XFx0XFx0dTE2XFx0XFx0dnA7XFxuIDI2MzpcXHRcXHRpbnRcXHRcXHRyZXR2YWw7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdC8vIG5jX2R1bXBfcmVnaXN0ZXJzKGRldik7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdGlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19TVEFUVVMsIFxcdTAwMjZ2cCkpIFxcdTAwM2MgMCkge1xcbiAyNjg6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IHJlYWQgJXMtJXMgc3RhdHVzOiAlZFxcXFxuXFxcIixcXG4gMjY5OlxcdFxcdFxcdFxcdCAgIGRldi1cXHUwMDNldWRldi1cXHUwMDNlYnVzLVxcdTAwM2VidXNfbmFtZSwgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXZwYXRoLCByZXR2YWwpO1xcbiAyNzA6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyNzE6XFx0XFx0fVxcbiAyNzI6XFx0XFx0c3RhdHVzID0gdnA7XFxuIDI3MzpcXHRcXHRuY19kdW1wX3N0YXR1cyhkZXYsIHN0YXR1cyk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdGlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19VU0JDVEwsIFxcdTAwMjZ2cCkpIFxcdTAwM2MgMCkge1xcbiAyNzY6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IHJlYWQgVVNCQ1RMLCAlZFxcXFxuXFxcIiwgcmV0dmFsKTtcXG4gMjc3OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMjc4OlxcdFxcdH1cXG4gMjc5OlxcdFxcdHVzYmN0bCA9IHZwO1xcbiAyODA6XFx0XFx0bmNfZHVtcF91c2JjdGwoZGV2LCB1c2JjdGwpO1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19VU0JDVEwsXFxuIDI4MzpcXHRcXHRcXHRcXHRVU0JDVExfRkxVU0hfVEhJUyB8IFVTQkNUTF9GTFVTSF9PVEhFUik7XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcdGlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19UVEwsIFxcdTAwMjZ2cCkpIFxcdTAwM2MgMCkge1xcbiAyODY6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IHJlYWQgVFRMLCAlZFxcXFxuXFxcIiwgcmV0dmFsKTtcXG4gMjg3OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMjg4OlxcdFxcdH1cXG4gMjg5OlxcdFxcdHR0bCA9IHZwO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXFxuIDI5MjpcXHRcXHRcXHRcXHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xcbiAyOTM6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzc2lnbmVkIFRUTCwgJWQgbXNcXFxcblxcXCIsIE5DX1JFQURfVFRMX01TKTtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0bmV0aWZfaW5mbyhkZXYsIGxpbmssIGRldi1cXHUwMDNlbmV0LCBcXFwicG9ydCAlYywgcGVlciAlc2Nvbm5lY3RlZFxcXFxuXFxcIixcXG4gMjk2OlxcdFxcdFxcdCAgIChzdGF0dXMgXFx1MDAyNiBTVEFUVVNfUE9SVF9BKSA/ICdBJyA6ICdCJyxcXG4gMjk3OlxcdFxcdFxcdCAgIChzdGF0dXMgXFx1MDAyNiBTVEFUVVNfQ09OTl9PVEhFUikgPyBcXFwiXFxcIiA6IFxcXCJkaXNcXFwiKTtcXG4gMjk4OlxcdFxcdHJldHZhbCA9IDA7XFxuIDI5OTpcXHRcXG4gMzAwOlxcdGRvbmU6XFxuIDMwMTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzMDI6XFx0fVxcbiAzMDM6XFx0XFxuIDMwNDpcXHRzdGF0aWMgaW50IG5ldDEwODBfY2hlY2tfY29ubmVjdChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDMwNTpcXHR7XFxuIDMwNjpcXHRcXHRpbnRcXHRcXHRcXHRyZXR2YWw7XFxuIDMwNzpcXHRcXHR1MTZcXHRcXHRcXHRzdGF0dXM7XFxuIDMwODpcXHRcXHR1MTZcXHRcXHRcXHR2cDtcXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0cmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19TVEFUVVMsIFxcdTAwMjZ2cCk7XFxuIDMxMTpcXHRcXHRzdGF0dXMgPSB2cDtcXG4gMzEyOlxcdFxcdGlmIChyZXR2YWwgIT0gMCkge1xcbiAzMTM6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcIm5ldDEwODBfY2hlY2tfY29ubiByZWFkIC0gJWRcXFxcblxcXCIsIHJldHZhbCk7XFxuIDMxNDpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzMTU6XFx0XFx0fVxcbiAzMTY6XFx0XFx0aWYgKChzdGF0dXMgXFx1MDAyNiBTVEFUVVNfQ09OTl9PVEhFUikgIT0gU1RBVFVTX0NPTk5fT1RIRVIpXFxuIDMxNzpcXHRcXHRcXHRyZXR1cm4gLUVOT0xJTks7XFxuIDMxODpcXHRcXHRyZXR1cm4gMDtcXG4gMzE5OlxcdH1cXG4gMzIwOlxcdFxcbiAzMjE6XFx0c3RhdGljIHZvaWQgbmNfZW5zdXJlX3N5bmMoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAzMjI6XFx0e1xcbiAzMjM6XFx0XFx0aWYgKCsrZGV2LVxcdTAwM2VmcmFtZV9lcnJvcnMgXFx1MDAzYz0gNSlcXG4gMzI0OlxcdFxcdFxcdHJldHVybjtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0aWYgKHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLFxcbiAzMjc6XFx0XFx0XFx0XFx0XFx0XFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSxcXG4gMzI5OlxcdFxcdFxcdFxcdFxcdFxcdFVTQkNUTF9GTFVTSF9USElTIHxcXG4gMzMwOlxcdFxcdFxcdFxcdFxcdFxcdFVTQkNUTF9GTFVTSF9PVEhFUixcXG4gMzMxOlxcdFxcdFxcdFxcdFxcdFxcdFJFR19VU0JDVEwsIE5VTEwsIDApKVxcbiAzMzI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzMzU6XFx0XFx0XFx0ICBcXFwiZmx1c2ggbmV0MTA4MDsgdG9vIG1hbnkgZnJhbWluZyBlcnJvcnNcXFxcblxcXCIpO1xcbiAzMzY6XFx0XFx0ZGV2LVxcdTAwM2VmcmFtZV9lcnJvcnMgPSAwO1xcbiAzMzc6XFx0fVxcbiAzMzg6XFx0XFxuIDMzOTpcXHRzdGF0aWMgaW50IG5ldDEwODBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzNDA6XFx0e1xcbiAzNDE6XFx0XFx0c3RydWN0IG5jX2hlYWRlclxcdCpoZWFkZXI7XFxuIDM0MjpcXHRcXHRzdHJ1Y3QgbmNfdHJhaWxlclxcdCp0cmFpbGVyO1xcbiAzNDM6XFx0XFx0dTE2XFx0XFx0XFx0aGRyX2xlbiwgcGFja2V0X2xlbjtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0LyogVGhpcyBjaGVjayBpcyBubyBsb25nZXIgZG9uZSBieSB1c2JuZXQgKi9cXG4gMzQ2OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pXFxuIDM0NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0aWYgKCEoc2tiLVxcdTAwM2VsZW4gXFx1MDAyNiAweDAxKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNDo1NTowMi4zOTkyNzk1MDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIwOTM1ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IHBlcnBsZXhpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBjaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBvZiBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byBgaW50YC4gRmluZSwgbWFrZXMgc2Vuc2UsIHBvdGVudGlhbCBmb3IgZXJyb3IgY29kZXMsIG1vcmUgZmxleGliaWxpdHksIGFsbCBnb29kLiBCdXQgdGhlbiBJJ20gbG9va2luZyBhdCBgbmV0MTA4MF9yZXNldGAsIGFuZCBpdCdzIGNvbXBsZXRlbHkgaWdub3JpbmcgdGhlIHJldHVybiB2YWx1ZXMhIFdoYXQncyB0aGUgcG9pbnQ/IEFyZSB3ZSBqdXN0IHRyeWluZyB0byBiZSBtb3JlIHJvYnVzdCBvciBpcyB0aGlzIGEgc2ltcGxlIG92ZXJzaWdodD9cblxuSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgbW9yZSB0aG9yb3VnaC4gVGhpcyBtYWtlcyBtZSB3b25kZXI6ICpXaGVyZSBlbHNlKiBpcyBgbmNfcmVnaXN0ZXJfd3JpdGVgIGV2ZW4gYmVpbmcgdXNlZD8gVGhpcyBjb3VsZCBiZSBhIG11Y2ggYmlnZ2VyIHByb2JsZW0gdGhhbiBqdXN0IGEgbWlzc2VkIGVycm9yIGNoZWNrIGluIG9uZSBmdW5jdGlvbi4gQmVzdCB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhY3Jvc3MgdGhlIGVudGlyZSBmaWxlIGFuZCBpZGVudGlmeSBhbGwgaXRzIHVzYWdlcy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MDYuMDIwMjE5MDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgyMzk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY19yZWdpc3Rlcl93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM9MTI0PXN0YXRpYyBpbmxpbmUgaW50XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjU6bmNfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyNi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTI1OT1zdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODEtXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyODI6XFx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgzLVxcdFxcdFxcdFVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjkxOlxcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cXHRcXHRcXHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNDo1NTowNi4xNjUwNTE2NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NTg3MzYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb3NtZXRpYyBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHJldHVybiB0eXBlIG9mIGBuY192ZW5kb3Jfd3JpdGVgIGFuZCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZyb20gYHZvaWRgIHRvIGBpbnRgLiBCdXQsIGhvbGQgb27igKYgSSdtIHNlZWluZyB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyAqbmV2ZXIqIGNoZWNrZWQgb3IgdXNlZCBhbnl3aGVyZSEgVGhhdCBzZWVtcy4uLiBzdHJhbmdlLiBJdCBtZWFucyB0aGUgcGF0Y2ggaGFzIGFic29sdXRlbHkgbm8gaW1wYWN0IG9uIHRoZSBwcm9ncmFtJ3MgZXhlY3V0aW9uIGZsb3cuIEl0J3MganVzdCByZXR1cm5pbmcgYW4gaW50ZWdlciB0aGF0J3MgaW1tZWRpYXRlbHkgZGlzY2FyZGVkLiBXaGF0J3MgdGhlIHBvaW50P1xuXG5MZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgdXNibmV0X3dyaXRlX2NtZGAgZG9lc24ndCBoYXZlIHNvbWUgaGlkZGVuIHNpZGUgZWZmZWN0IHRoYXQncyBzb21laG93IGltcGFjdGVkIGJ5IHRoaXMuIE5vcGUsIHN0aWxsIGp1c3QgcmV0dXJuaW5nIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLiBTbywgYXQgZmlyc3QgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlLCBhIGNsZWFudXAgb2Ygc29ydHMuIFdlJ3JlIG5vdyByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUgZnJvbSB0aGUgaGVscGVyLCBidXQgdGhlbiBwcm9tcHRseSBpZ25vcmluZyBpdCBhdCB0aGUgY2FsbCBzaXRlLiBTZWVtcyBvZGQuXG5cbldhaXQsIGlzIHRoZXJlIGEgd2FybmluZyBpdCBtaWdodCBiZSBmaXhpbmc/IFBlcmhhcHMgYHVzYm5ldF93cml0ZV9jbWRgIGl0c2VsZiBpcyBtYXJrZWQgd2l0aCBgX19tdXN0X2NoZWNrYD8gVGhhdCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UuIEkgc2hvdWxkIGNoZWNrIGB1c2JuZXRfd3JpdGVfY21kYCBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaGAgb3IgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MTAuNzEwOTMwMjczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI5MDY0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNibmV0X3dyaXRlX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0xODE9c3RhdGljIGludCBhcWMxMTFfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgzLXtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTg0OlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE4NS1cXHRcXHRcXHRcXHQgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz00MD1pbnQgYXNpeF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDgtXFx0aWYgKCFpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0OTpcXHRcXHRmbiA9IHVzYm5ldF93cml0ZV9jbWQ7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTAtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjUxOlxcdFxcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NjM9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02NS17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NjY6XFx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02Ny1cXHRcXHRcXHQgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jPTIzMT1zdGF0aWMgaW50IF9fYXg4ODE3OV93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI0MC1cXHRpZiAoIWF4ODgxNzlfaW5fcG0oZGV2KSlcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MjQxOlxcdFxcdGZuID0gdXNibmV0X3dyaXRlX2NtZDtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjQyLVxcdGVsc2VcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MjQzOlxcdFxcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYy0yNDQtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM9MjU1PXN0YXRpYyB2b2lkIGF4ODgxNzlfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjYyLVxcdFxcdGNwdV90b19sZTE2cyhcXHUwMDI2YnVmKTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MjYzOlxcdFxcdHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBjbWQsIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjY0LVxcdFxcdFxcdFxcdCAgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIFxcdTAwMjZidWYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjY2LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jOjI2NzpcXHRcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI2OC1cXHRcXHRcXHRcXHQgICAgICAgVVNCX1JFQ0lQX0RFVklDRSwgdmFsdWUsIGluZGV4LCBkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYz00MDU9c3RhdGljIHZvaWQgY2RjX25jbV91cGRhdGVfcnh0eF9tYXgoc3RydWN0IHVzYm5ldCAqZGV2LCB1MzIgbmV3X3J4LCB1MzIgbmV3X3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy00MTktXFx0XFx0LyogdGVsbCBkZXZpY2UgdG8gdXNlIG5ldyBzaXplICovXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYzo0MjA6XFx0XFx0aWYgKHVzYm5ldF93cml0ZV9jbWQoZGV2LCBVU0JfQ0RDX1NFVF9OVEJfSU5QVVRfU0laRSxcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTQyMS1cXHRcXHRcXHRcXHQgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVRcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM9NTE2PXN0YXRpYyBpbnQgY2RjX25jbV9pbml0KHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNTM0LVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiU2V0dGluZyBDUkMgbW9kZSBvZmZcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM6NTM1OlxcdFxcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBVU0JfQ0RDX1NFVF9DUkNfTU9ERSxcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTUzNi1cXHRcXHRcXHRcXHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01NTYtXFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCJTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMzItYml0XFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jOjU1NzpcXHRcXHRcXHRlcnIgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVCxcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTU1OC1cXHRcXHRcXHRcXHRcXHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01NjQtXFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCJTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMTYtYml0XFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jOjU2NTpcXHRcXHRcXHRlcnIgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVCxcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTU2Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYz02MDk9c3RhdGljIHZvaWQgY2RjX25jbV9zZXRfZGdyYW1fc2l6ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBuZXdfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNjM4LVxcdG1heF9kYXRhZ3JhbV9zaXplID0gY3B1X3RvX2xlMTYoY3R4LVxcdTAwM2VtYXhfZGF0YWdyYW1fc2l6ZSk7XFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYzo2Mzk6XFx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfU0VUX01BWF9EQVRBR1JBTV9TSVpFLFxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNjQwLVxcdFxcdFxcdCAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYz03Nz1zdGF0aWMgaW50IGRtX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTc5LVxcdGludCBlcnI7XFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jOjgwOlxcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBETV9XUklURV9SRUdTLFxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy04MS1cXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM9ODk9c3RhdGljIGludCBkbV93cml0ZV9yZWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHU4IHZhbHVlKVxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy05MC17XFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jOjkxOlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgRE1fV1JJVEVfUkVHLFxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy05Mi1cXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM9OTY9c3RhdGljIHZvaWQgZG1fd3JpdGVfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtOTgte1xcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYzo5OTpcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgRE1fV1JJVEVfUkVHUyxcXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtMTAwLVxcdFxcdFxcdCAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM9MTA0PXN0YXRpYyB2b2lkIGRtX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTEwNS17XFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jOjEwNjpcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgRE1fV1JJVEVfUkVHLFxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy0xMDctXFx0XFx0XFx0ICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmM9MTIzPXN0YXRpYyBpbnQgbWNzNzgzMF9zZXRfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jLTEyNC17XFxuZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYzoxMjU6XFx0cmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCBNQ1M3ODMwX1dSX0JSRVEsIE1DUzc4MzBfV1JfQk1SRVEsXFxuZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYy0xMjYtXFx0XFx0XFx0XFx0MHgwMDAwLCBpbmRleCwgZGF0YSwgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jPTEyOT1zdGF0aWMgdm9pZCBtY3M3ODMwX3NldF9yZWdfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMtMTMwLXtcXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jOjEzMTpcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgTUNTNzgzMF9XUl9CUkVRLCBNQ1M3ODMwX1dSX0JNUkVRLFxcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMtMTMyLVxcdFxcdFxcdFxcdDB4MDAwMCwgaW5kZXgsIGRhdGEsIHNpemUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMTc9bmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTExOC17XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMTk6XFx0cmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCByZXEsXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjAtXFx0XFx0XFx0XFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0zMjE9c3RhdGljIHZvaWQgbmNfZW5zdXJlX3N5bmMoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0zMjUtXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzozMjY6XFx0aWYgKHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMzI3LVxcdFxcdFxcdFxcdFxcdFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9wbHVzYi5jPTU4PXBsX3ZlbmRvcl9yZXEoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHZhbCwgdTggaW5kZXgpXFxuZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMtNTkte1xcbmRyaXZlcnMvbmV0L3VzYi9wbHVzYi5jOjYwOlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxcbmRyaXZlcnMvbmV0L3VzYi9wbHVzYi5jLTYxLVxcdFxcdFxcdFxcdHZhbCwgaW5kZXgsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3FtaV93d2FuLmM9NzM1PXN0YXRpYyBpbnQgcW1pX3d3YW5fY2hhbmdlX2R0cihzdHJ1Y3QgdXNibmV0ICpkZXYsIGJvb2wgb24pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYy03MzgtXFxuZHJpdmVycy9uZXQvdXNiL3FtaV93d2FuLmM6NzM5OlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19SRVFfU0VUX0NPTlRST0xfTElORV9TVEFURSxcXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYy03NDAtXFx0XFx0XFx0XFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTNfZWNtLmM9Mzc9c3RhdGljIGludCBwbGFfd3JpdGVfd29yZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBpbmRleCwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTNfZWNtLmMtNjMtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUzX2VjbS5jOjY0OlxcdHJldCA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBSVEw4MTUyX1JFUV9TRVRfUkVHUywgUlRMODE1Ml9SRVFUX1dSSVRFLCBpbmRleCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTNfZWNtLmMtNjUtXFx0XFx0XFx0ICAgICAgIE1DVV9UWVBFX1BMQSB8IGJ5ZW4sIFxcdTAwMjZ0bXAsIHNpemVvZih0bXApKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmM9MzE3PXN0YXRpYyBpbnQgc2llcnJhX25ldF9zZW5kX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jLTMyMi1cXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jOjMyMzpcXHRzdGF0dXMgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5ELFxcbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmMtMzI0LVxcdFxcdFxcdFxcdCAgVVNCX0RJUl9PVVR8VVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0lOVEVSRkFDRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jPTEwMT1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX3Ntc2M3NXh4X3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUzMiBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTExMC1cXHRpZiAoIWluX3BtKVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jOjExMTpcXHRcXHRmbiA9IHVzYm5ldF93cml0ZV9jbWQ7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmMtMTEyLVxcdGVsc2VcXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYzoxMTM6XFx0XFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kX25vcG07XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmMtMTE0LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE1PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUzMiBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMy1cXHRpZiAoY3VycmVudCAhPSBwZGF0YS1cXHUwMDNlcG1fdGFzaylcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQ6XFx0XFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNS1cXHRlbHNlXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI2OlxcdFxcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTQ1Mz1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBzbXNjOTV4eF93cml0ZV9yZWdfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy00NjItXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6NDYzOlxcdHJldCA9IHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBVU0JfVkVORE9SX1JFUVVFU1RfV1JJVEVfUkVHSVNURVIsXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtNDY0LVxcdFxcdFxcdFxcdCAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTM1PXN0YXRpYyBpbnQgc3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtMzgtXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jOjM5OlxcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBTUl9XUl9NVUxUSVBMRV9SRUdTLCBTUl9SRVFfV1JfUkVHLCAwLCByZWcsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTQwLVxcdFxcdFxcdCAgICAgICBsZW5ndGgpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTUxPXN0YXRpYyBpbnQgc3Jfd3JpdGVfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1OCB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNTIte1xcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYzo1MzpcXHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIFNSX1dSX1NJTkdMRV9SRUcsIFNSX1JFUV9XUl9SRUcsXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTU0LVxcdFxcdFxcdFxcdHZhbHVlLCByZWcsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTU3PXN0YXRpYyB2b2lkIHNyX3dyaXRlX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTU5LXtcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM6NjA6XFx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIFNSX1dSX01VTFRJUExFX1JFR1MsIFNSX1JFUV9XUl9SRUcsXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTYxLVxcdFxcdFxcdCAgICAgICAwLCByZWcsIGRhdGEsIGxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM9NjQ9c3RhdGljIHZvaWQgc3Jfd3JpdGVfcmVnX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1OCB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNjUte1xcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYzo2NjpcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgU1JfV1JfU0lOR0xFX1JFRywgU1JfUkVRX1dSX1JFRyxcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNjctXFx0XFx0XFx0ICAgICAgIHZhbHVlLCByZWcsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jPTQxPXN0YXRpYyBpbnQgc3Jfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy00NS1cXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NDY6XFx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIGNtZCwgU1JfUkVRX1dSX1JFRywgdmFsdWUsIGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy00Ny1cXHRcXHRcXHQgICAgICBkYXRhLCBzaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYz01NT1zcl93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTU3LXtcXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NTg6XFx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCwgU1JfUkVRX1dSX1JFRywgdmFsdWUsIGluZGV4LCBkYXRhLFxcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy01OS1cXHRcXHRcXHQgICAgICAgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MjA2Nz1zdGF0aWMgaW50IF9fdXNibmV0X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1OCByZXF0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIwOTctXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIwOTg6c3RhdGljIGludCBfX3VzYm5ldF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIwOTktXFx0XFx0XFx0ICAgICAgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIGNvbnN0IHZvaWQgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjEwNC1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjEwNTpcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwidXNibmV0X3dyaXRlX2NtZCBjbWQ9MHglMDJ4IHJlcXR5cGU9JTAyeFxcXCJcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjEwNi1cXHRcXHQgICBcXFwiIHZhbHVlPTB4JTA0eCBpbmRleD0weCUwNHggc2l6ZT0lZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9yZWFkX2NtZCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE1MS0gKi9cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE1MjppbnQgdXNibmV0X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTggcmVxdHlwZSxcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE1My1cXHRcXHQgICAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjb25zdCB2b2lkICpkYXRhLCB1MTYgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTU4LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMTU5OlxcdHJldCA9IF9fdXNibmV0X3dyaXRlX2NtZChkZXYsIGNtZCwgcmVxdHlwZSwgdmFsdWUsIGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTYwLVxcdFxcdFxcdFxcdCBkYXRhLCBzaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTYzLX1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE2NDpFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfd3JpdGVfY21kKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMTc2PUVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9yZWFkX2NtZF9ub3BtKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTgxLSAqL1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMTgyOmludCB1c2JuZXRfd3JpdGVfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxODMtXFx0XFx0XFx0ICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgY29uc3Qgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTg1LXtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE4NjpcXHRyZXR1cm4gX191c2JuZXRfd3JpdGVfY21kKGRldiwgY21kLCByZXF0eXBlLCB2YWx1ZSwgaW5kZXgsXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxODctXFx0XFx0XFx0XFx0ICBkYXRhLCBzaXplKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE4OC19XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIxODk6RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3dyaXRlX2NtZF9ub3BtKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE5MC1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MjE5MT1zdGF0aWMgdm9pZCB1c2JuZXRfYXN5bmNfY21kX2NiKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjA3LSAqL1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMjA4OmludCB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1OCByZXF0eXBlLFxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjA5LVxcdFxcdFxcdCAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjb25zdCB2b2lkICpkYXRhLCB1MTYgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjE1LVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMjE2OlxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJ1c2JuZXRfd3JpdGVfY21kIGNtZD0weCUwMnggcmVxdHlwZT0lMDJ4XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjE3LVxcdFxcdCAgIFxcXCIgdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIyNzItfVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMjczOkVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF93cml0ZV9jbWRfYXN5bmMpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjc0LS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA0OjU1OjExLjM2Mzg0Mjg0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzM0NDM1NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvc21ldGljIFVTQm5ldCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB1c2JuZXRfd3JpdGVfY21kYCBpcyBqdXN0IHJldHVybmluZyBhbiBgaW50YCwgYW5kIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byByZXR1cm4gYW4gYGludGAgdG9vLCBidXQgdGhlIHJldHVybmVkIHZhbHVlcyBhcmUgbm90IGFjdHVhbGx5IGJlaW5nIHVzZWQuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbnVwLCBwb3NzaWJseSB0byBnZXQgcmlkIG9mIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhIGZ1bmN0aW9uIHJldHVybmluZyBgdm9pZGAgd2l0aCBhIGByZXR1cm5gIHN0YXRlbWVudCwgb3IgcGVyaGFwcyBpdCdzIGEgZnV0dXJlLXByb29maW5nIGNoYW5nZSwgYW50aWNpcGF0aW5nIHRoYXQgdGhleSBtaWdodCB3YW50IHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgbGF0ZXIgb24uXG5cbkJ1dCwgbGV0J3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBvcmlnaW5hbCBjb2RlLiBBaCwgcmlnaHQ6XG5cbmBgYGNcbnN0YXRpYyB2b2lkXG5uY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxue1xuXHR1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLFxuXHRcdFx0IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcblx0XHRcdCB2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTtcbn1cblxuc3RhdGljIGlubGluZSB2b2lkXG5uY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxue1xuXHRuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcbn1cbmBgYFxuXG5BbmQgbm93IHRoZSBtb2RpZmllZCBjb2RlOlxuXG5gYGBjXG5zdGF0aWMgaW50XG5uY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxue1xuXHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSxcblx0XHRcdFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuXHRcdFx0XHR2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTtcbn1cblxuc3RhdGljIGlubGluZSBpbnRcbm5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG57XG5cdHJldHVybiBuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcbn1cbmBgYFxuXG5SaWdodCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIHB1cmVseSBjb3NtZXRpYy4gVGhlIHJldHVybiB2YWx1ZXMgYXJlICpzdGlsbCogaWdub3JlZCwganVzdCBiZWluZyBwYXNzZWQgdXAgdGhlIGNoYWluLiAgSXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgZnVuY3Rpb25hbGx5LlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBMZXQgbWUgc2VlIHdoZXJlIGBuY19yZWdpc3Rlcl93cml0ZWAgYW5kIGBuY192ZW5kb3Jfd3JpdGVgIGFyZSBhY3R1YWxseSB1c2VkLiBUaGV5J3JlIGBzdGF0aWNgIGZ1bmN0aW9ucywgc28gdGhleSdyZSBvbmx5IGluIGBkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jYC4gT2theSwgc28gdGhleSdyZSBvbmx5IHVzZWQgd2l0aGluIHRoaXMgc2luZ2xlIGZpbGUuICBJIHJlY2FsbCBub3csIGBuY19yZWdpc3Rlcl93cml0ZWAgaXMgY2FsbGVkIHR3aWNlIGluIGBuZXQxMDgwX3Jlc2V0YCwgYW5kIGFzIGV4cGVjdGVkLCB0aGUgcmV0dXJuIHZhbHVlIGlzbid0IHVzZWQgdGhlcmUgZWl0aGVyLiBTbywgdGhlIHBhdGNoIGp1c3QgcHJvcGFnYXRlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGB1c2JuZXRfd3JpdGVfY21kYCwgYnV0IGl0IGdldHMgZHJvcHBlZCBhdCB0aGUgZW5kLlxuXG5JbiB0aGlzIGluc3RhbmNlLCBJIGRvbid0IHNlZSBhbnkgdmFsdWUgaW4gc3BlbmRpbmcgdGltZSBmdXp6aW5nIHRoaXMgYmVjYXVzZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbCBoYXNuJ3QgY2hhbmdlZCBhdCBhbGwuIEkgY2FuIG1vdmUgb24uIExldCBtZSBqdXN0IGNvbmZpcm0gYWdhaW4gdGhhdCBgbmV0MTA4MF9yZXNldGAgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGBuY19yZWdpc3Rlcl93cml0ZWAgZm9yIGNvbXBsZXRlIGNlcnRhaW50eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MTkuMDk4MjgxNDgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjUyOTQ1OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNfcmVnaXN0ZXJfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyND1zdGF0aWMgaW5saW5lIGludFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI1Om5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0yNTk9c3RhdGljIGludCBuZXQxMDgwX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgxLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjgyOlxcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1VTQkNUTCxcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4My1cXHRcXHRcXHRVU0JDVExfRkxVU0hfVEhJUyB8IFVTQkNUTF9GTFVTSF9PVEhFUik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5MC1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjI5MTpcXHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yOTItXFx0XFx0XFx0TUtfVFRMKE5DX1JFQURfVFRMX01TLCBUVExfT1RIRVIodHRsKSkgKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MTkuNDIzNTg3OTYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDEwNDU4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hcnJvd2luZyBEb3duIHRoZSBTY29wZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgaXNzdWUgaXMgb2NjdXJyaW5nLiBUaGUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gc2VlbXMgdG8gYmUgdGhhdCB0aGUgcHJvYmxlbSBpcyBzdHJpY3RseSBsb2NhbGl6ZWQgdG8gdGhlIGBuZXQxMDgwX3Jlc2V0YCBmdW5jdGlvbi4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgY29uc3RyYWludCwgbWFraW5nIHRoZSBkZWJ1Z2dpbmcgcHJvY2VzcyBtdWNoIG1vcmUgbWFuYWdlYWJsZS4gRnVydGhlciwgSSBrbm93IHRoYXQgYG5jX3ZlbmRvcl93cml0ZWAgb25seSBnZXRzIGNhbGxlZCB0aHJvdWdoIGBuY19yZWdpc3Rlcl93cml0ZWAuIFRoaXMgbmFycm93cyB0aGluZ3MgZG93biBldmVuIGZ1cnRoZXIuIE5vdywgaW5zdGVhZCBvZiB0aGUgZW50aXJlIGNvZGViYXNlLCBJIGNhbiBmb2N1cyBzcGVjaWZpY2FsbHkgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucyBhbmQgdGhlIHBhdGh3YXkgYmV0d2VlbiB0aGVtLiBJJ3ZlIGVmZmVjdGl2ZWx5IGNyZWF0ZWQgYSB2ZXJ5IHByZWNpc2Ugc2VhcmNoIHNwYWNlLiBJIGNhbiBsb29rIGludG8gdGhlc2Ugc2VjdGlvbnMgb2YgdGhlIGNvZGUgdG8gZnVydGhlciBpZGVudGlmeSB0aGUgaXNzdWUuIFRoaXMgbWFrZXMgdGhlIGpvYiBhIHdob2xlIGxvdCBlYXNpZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MjMuODY0NjQwMjYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA5NjY0NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNfdmVuZG9yX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMTY9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTE3Om5jX3ZlbmRvcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMjU9bmNfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyNi17XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjc6XFx0cmV0dXJuIG5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpO1xcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMTI4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MjQuMDc1NjEzMTk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjA5MDc3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkgYXJlIG15IG93bjpcblxuKipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiBUaGlzIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgaXMgb25seSB0cmlnZ2VyZWQgYnkgYG5jX3JlZ2lzdGVyX3dyaXRlYC4gSW50ZXJlc3RpbmcuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgaGVyZS4gR2l2ZW4gdGhhdCBhbmQsIHRoZSBjcnVjaWFsIHBhcnQ6IHRoZSByZXR1cm4gdmFsdWUgaXMgc2ltcGx5IGRpc2NhcmRlZC4gSXQncyBlc3NlbnRpYWxseSBpZ25vcmVkLiBTbywgZnVuY3Rpb25hbGx5LCB0aGlzIHBhdGNoIGNoYW5nZXMgYWJzb2x1dGVseSBub3RoaW5nLiBaZXJvIGltcGFjdCBvbiB0aGUgcHJvZ3JhbSdzIGJlaGF2aW91ciBvciBvdXRwdXQuIFRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGl0J3MgYSBub24tc3RhcnRlci4gVGhlcmUncyBub3RoaW5nIGhlcmUgdG8gYmUgZ2FpbmVkLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIE5vIHBvaW50IGluIGV4cGVuZGluZyByZXNvdXJjZXMgb24gc29tZXRoaW5nIHRoYXQgaGFzIG5vIGVmZmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MjQsIk91dHB1dFRva2VucyI6MTE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MjcuNzk2NTI0NjQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgZnJvbSBgdm9pZGAgdG8gYGludGAgdG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHVzYm5ldF93cml0ZV9jbWRgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhbGwgY2FsbGVycyAob25seSBgbmV0MTA4MF9yZXNldGApLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljL2NsZWFudXAgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgZnJvbSBgdm9pZGAgdG8gYGludGAgdG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHVzYm5ldF93cml0ZV9jbWRgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhbGwgY2FsbGVycyAob25seSBgbmV0MTA4MF9yZXNldGApLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljL2NsZWFudXAgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd55q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 04:16:07 +0000 UTC FinishedAt: 2026-07-28 04:55:29 +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+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIG9mIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGBuY192ZW5kb3Jfd3JpdGVgIGFuZCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZyb20gYHZvaWRgIHRvIGBpbnRgIHRvIHByb3BhZ2F0ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGB1c2JuZXRfd3JpdGVfY21kYC4gSG93ZXZlciwgdGhlIHJldHVybiB2YWx1ZSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYWxsIGNhbGxlcnMgKG9ubHkgYG5ldDEwODBfcmVzZXRgKS4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYy9jbGVhbnVwIGNoYW5nZSB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDQ6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNmU2Y2E4MDFhMmZiYjIwMTEzYTRlZWY0NzYzY2Q5NDJlNDE1MjkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDQ6NTQ6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbmluZGV4IDE5ZjZlMTIyMmQ5MzE1Li5kZDlmMTM2MWFlZDYyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbkBAIC0xMTMsMTggJiM0MzsxMTMsMTggQEAgbmNfcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2ICpyZXR2YWxfcHRyKVxuIFx0cmV0dXJuIG5jX3ZlbmRvcl9yZWFkKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCByZXR2YWxfcHRyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWRcbiYjNDM7c3RhdGljIGludFxuIG5jX3ZlbmRvcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG4ge1xuLVx0dXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSxcbi1cdFx0XHQgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuLVx0XHRcdCB2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTtcbiYjNDM7XHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSxcbiYjNDM7XHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4mIzQzO1x0XHRcdFx0dmFsdWUsIHJlZ251bSwgTlVMTCwgMCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZFxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuIG5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG4ge1xuLVx0bmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG4mIzQzO1x0cmV0dXJuIG5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpO1xuIH1cbiBcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgZnJvbSBgdm9pZGAgdG8gYGludGAgdG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHVzYm5ldF93cml0ZV9jbWRgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhbGwgY2FsbGVycyAob25seSBgbmV0MTA4MF9yZXNldGApLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljL2NsZWFudXAgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY2ZTZjYTgwMWEyZmJiMjAxMTNhNGVlZjQ3NjNjZDk0MmU0MTUyOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAwNDo1NDo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMgYi9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jCmluZGV4IDE5ZjZlMTIyMmQ5MzE1Li5kZDlmMTM2MWFlZDYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jCkBAIC0xMTMsMTggJiM0MzsxMTMsMTggQEAgbmNfcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2ICpyZXR2YWxfcHRyKQogCXJldHVybiBuY192ZW5kb3JfcmVhZChkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgcmV0dmFsX3B0cik7CiB9CiAKLXN0YXRpYyB2b2lkCiYjNDM7c3RhdGljIGludAogbmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSkKIHsKLQl1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLAotCQkJIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSB2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCByZXEsCiYjNDM7CQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKJiM0MzsJCQkJdmFsdWUsIHJlZ251bSwgTlVMTCwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiBuY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKQogewotCW5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpOwomIzQzOwlyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7CiB9CiAKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNgLiBJdCBsb29rcyBsaWtlIHNvbWVvbmUmIzM5O3MgbW9kaWZpZWQgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgY2hhbmdlZCB0aGVtIHRvIHJldHVybiB0aGUgYGludGAgdmFsdWUgdGhhdCBgdXNibmV0X3dyaXRlX2NtZGAgcHJvdmlkZXMsIHJhdGhlciB0aGFuIHJlbWFpbmluZyBgdm9pZGAuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICp3aHkqPyBJcyB0aGlzIGEgZ2VudWluZSBmdW5jdGlvbmFsIGNoYW5nZSwgb3IganVzdCBhIGJpdCBvZiB0aWR5aW5nIHVwPyBBcmUgdGhlc2UgcmV0dXJuIHZhbHVlcyBhY3R1YWxseSBiZWluZyB1c2VkICpzb21ld2hlcmUqPyBQZXJoYXBzIGNoZWNraW5nIGZvciBlcnJvcnMsIG9yIG1heWJlIHRoZSByZXR1cm4gaXMgcmVxdWlyZWQuCgpUbyBmaWd1cmUgdGhpcyBvdXQsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nICpjYWxsZWQqIHdpdGhpbiB0aGlzIHNwZWNpZmljIGZpbGUuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY2AgZm9yIGluc3RhbmNlcyBvZiBgbmNfcmVnaXN0ZXJfd3JpdGVgIGFuZCBgbmNfdmVuZG9yX3dyaXRlYC4gVGhhdCBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hldGhlciB0aGUgcmV0dXJuIHZhbHVlcyBhcmUgYmVpbmcgaGFuZGxlZCAoaS5lLiwgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSwgdXNlZCBpbiBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCwgZXRjLikgb3Igc2ltcGx5IGJlaW5nIGRpc2NhcmRlZC4gQmFzZWQgb24gdGhlIHJlc3VsdHMsIEkgY2FuIGFzc2VzcyB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNfcmVnaXN0ZXJfd3JpdGV8bmNfdmVuZG9yX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTExNj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjExNzpuY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMTgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM9MTI0PXN0YXRpYyBpbmxpbmUgaW50XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjEyNTpuY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjc6XHRyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0yNTk9c3RhdGljIGludCBuZXQxMDgwX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4MS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjgyOlx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODMtXHRcdFx0VVNCQ1RMX0ZMVVNIX1RISVMgfCBVU0JDVExfRkxVU0hfT1RIRVIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyOTE6XHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cdFx0XHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIGFuYWx5c2lzOgoKKipVbmNoZWNrZWQgUmV0dXJuIFZhbHVlcyDigJMgQSBQb3RlbnRpYWwgQnVnIEFsZXJ0ISoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggbW9kaWZpZXMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgdG8gbm93IHJldHVybiBhbiBgaW50YC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLCB1c3VhbGx5LiBJdCBzdWdnZXN0cyB0aGV5IG1pZ2h0IGJlIGNvbW11bmljYXRpbmcgc3RhdHVzIG9yIGVycm9ycy4gQnV0Li4uIHdhaXQgYSBtaW51dGUsIHRoZSBjb2RlIGluIGBuZXQxMDgwX3Jlc2V0YCAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IGNoZWNrIHRob3NlIHJldHVybiB2YWx1ZXMhIFRoaXMgY291bGQgYmUgYSBzbmVha3kgbGl0dGxlIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbi4gSWYgdGhlcmUmIzM5O3MgYSB3cml0ZSBmYWlsdXJlLCBhbmQgd2UmIzM5O3JlIG5vdCBjaGVja2luZyBmb3IgaXQsIHRoZSBzeXN0ZW0gbWlnaHQgY29udGludWUsIHRoaW5raW5nIHRoZSB3cml0ZSBzdWNjZWVkZWQgd2hlbiBpdCBkaWRuJiMzOTt0LiBUaGlzIGNvdWxkIGxlYWQgdG8gYSB3aG9sZSBob3N0IG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzIGRvd24gdGhlIGxpbmUuCgpPa2F5LCBsZXQgbWUganVzdCBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBjYWxscyB0byB0aG9zZSBmdW5jdGlvbnMg4oCTIGBuY19yZWdpc3Rlcl93cml0ZWAgYW5kIGBuY192ZW5kb3Jfd3JpdGVgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxhY2sgb2YgcmV0dXJuIHZhbHVlIGNoZWNraW5nIGlzbiYjMzk7dCBhIHdpZGVyIHByb2JsZW0gaW4gdGhlIGNvZGViYXNlLiBUaGlzIGZlZWxzIGxpa2UgaXQgd2FycmFudHMgYSBkZWVwZXIgZGl2ZS4gV2UgbWlnaHQgaGF2ZSBhIHN5c3RlbWljIGlzc3VlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmNfcmVnaXN0ZXJfd3JpdGV8bmNfdmVuZG9yX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTExNj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjExNzpuY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMTgte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM9MTI0PXN0YXRpYyBpbmxpbmUgaW50XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjEyNTpuY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjc6XHRyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0yNTk9c3RhdGljIGludCBuZXQxMDgwX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4MS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjgyOlx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODMtXHRcdFx0VVNCQ1RMX0ZMVVNIX1RISVMgfCBVU0JDVExfRkxVU0hfT1RIRVIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyOTE6XHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cdFx0XHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29kZSBSZXVzZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMsIGBuY19yZWdpc3Rlcl93cml0ZWAgYW5kIGBuY192ZW5kb3Jfd3JpdGVgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGVudGlyZSBmaWxlLCB3aGljaCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbSBnaXZlbiB0aGUgY29udGV4dC4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzZW5zZSBvZiB3aGV0aGVyIHRoZXNlIGFyZSBpc29sYXRlZCBpbmNpZGVudHMgb3IgaWYgdGhleSYjMzk7cmUgdXNlZCBlbHNld2hlcmUuIEFyZSB0aGVzZSBmdW5jdGlvbnMgb25seSBjYWxsZWQgaW4gdGhpcyBzcGVjaWZpYyBzZWN0aW9uLCBvciBhcmUgdGhleSBjZW50cmFsIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEZpbmRpbmcgYWxsIHVzYWdlcyB3aWxsIGdpdmUgYSBxdWljayBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gZGVjaWRlIGhvdyBkZWVwIEkgbmVlZCB0byBkaXZlIGZvciBhIGNvbXBsZXRlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdC8qXG4gMjUxOlx0ICogVFRMIHJlZ2lzdGVyXG4gMjUyOlx0ICovXG4gMjUzOlx0XG4gMjU0Olx0I2RlZmluZVx0VFRMX09USEVSKHR0bClcdCgweDAwZmYgXHUwMDI2ICh0dGwgXHUwMDNlXHUwMDNlIDgpKVxuIDI1NTpcdCNkZWZpbmUgTUtfVFRMKHRoaXMsb3RoZXIpXHQoKHUxNikoKChvdGhlcilcdTAwM2NcdTAwM2M4KXwoMHgwMGZmXHUwMDI2KHRoaXMpKSkpXG4gMjU2Olx0XG4gMjU3Olx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAyNTg6XHRcbiAyNTk6XHRzdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIDI2MDpcdHtcbiAyNjE6XHRcdHUxNlx0XHR1c2JjdGwsIHN0YXR1cywgdHRsO1xuIDI2MjpcdFx0dTE2XHRcdHZwO1xuIDI2MzpcdFx0aW50XHRcdHJldHZhbDtcbiAyNjQ6XHRcbiAyNjU6XHRcdC8vIG5jX2R1bXBfcmVnaXN0ZXJzKGRldik7XG4gMjY2Olx0XG4gMjY3Olx0XHRpZiAoKHJldHZhbCA9IG5jX3JlZ2lzdGVyX3JlYWQoZGV2LCBSRUdfU1RBVFVTLCBcdTAwMjZ2cCkpIFx1MDAzYyAwKSB7XG4gMjY4Olx0XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Y2FuJiMzOTt0IHJlYWQgJXMtJXMgc3RhdHVzOiAlZFxcblwmIzM0OyxcbiAyNjk6XHRcdFx0XHQgICBkZXYtXHUwMDNldWRldi1cdTAwM2VidXMtXHUwMDNlYnVzX25hbWUsIGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldnBhdGgsIHJldHZhbCk7XG4gMjcwOlx0XHRcdGdvdG8gZG9uZTtcbiAyNzE6XHRcdH1cbiAyNzI6XHRcdHN0YXR1cyA9IHZwO1xuIDI3MzpcdFx0bmNfZHVtcF9zdGF0dXMoZGV2LCBzdGF0dXMpO1xuIDI3NDpcdFxuIDI3NTpcdFx0aWYgKChyZXR2YWwgPSBuY19yZWdpc3Rlcl9yZWFkKGRldiwgUkVHX1VTQkNUTCwgXHUwMDI2dnApKSBcdTAwM2MgMCkge1xuIDI3NjpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2NhbiYjMzk7dCByZWFkIFVTQkNUTCwgJWRcXG5cJiMzNDssIHJldHZhbCk7XG4gMjc3Olx0XHRcdGdvdG8gZG9uZTtcbiAyNzg6XHRcdH1cbiAyNzk6XHRcdHVzYmN0bCA9IHZwO1xuIDI4MDpcdFx0bmNfZHVtcF91c2JjdGwoZGV2LCB1c2JjdGwpO1xuIDI4MTpcdFxuIDI4MjpcdFx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxuIDI4MzpcdFx0XHRcdFVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTtcbiAyODQ6XHRcbiAyODU6XHRcdGlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19UVEwsIFx1MDAyNnZwKSkgXHUwMDNjIDApIHtcbiAyODY6XHRcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtjYW4mIzM5O3QgcmVhZCBUVEwsICVkXFxuXCYjMzQ7LCByZXR2YWwpO1xuIDI4NzpcdFx0XHRnb3RvIGRvbmU7XG4gMjg4Olx0XHR9XG4gMjg5Olx0XHR0dGwgPSB2cDtcbiAyOTA6XHRcbiAyOTE6XHRcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcbiAyOTI6XHRcdFx0XHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xuIDI5MzpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDthc3NpZ25lZCBUVEwsICVkIG1zXFxuXCYjMzQ7LCBOQ19SRUFEX1RUTF9NUyk7XG4gMjk0Olx0XG4gMjk1Olx0XHRuZXRpZl9pbmZvKGRldiwgbGluaywgZGV2LVx1MDAzZW5ldCwgXCYjMzQ7cG9ydCAlYywgcGVlciAlc2Nvbm5lY3RlZFxcblwmIzM0OyxcbiAyOTY6XHRcdFx0ICAgKHN0YXR1cyBcdTAwMjYgU1RBVFVTX1BPUlRfQSkgPyAmIzM5O0EmIzM5OyA6ICYjMzk7QiYjMzk7LFxuIDI5NzpcdFx0XHQgICAoc3RhdHVzIFx1MDAyNiBTVEFUVVNfQ09OTl9PVEhFUikgPyBcJiMzNDtcJiMzNDsgOiBcJiMzNDtkaXNcJiMzNDspO1xuIDI5ODpcdFx0cmV0dmFsID0gMDtcbiAyOTk6XHRcbiAzMDA6XHRkb25lOlxuIDMwMTpcdFx0cmV0dXJuIHJldHZhbDtcbiAzMDI6XHR9XG4gMzAzOlx0XG4gMzA0Olx0c3RhdGljIGludCBuZXQxMDgwX2NoZWNrX2Nvbm5lY3Qoc3RydWN0IHVzYm5ldCAqZGV2KVxuIDMwNTpcdHtcbiAzMDY6XHRcdGludFx0XHRcdHJldHZhbDtcbiAzMDc6XHRcdHUxNlx0XHRcdHN0YXR1cztcbiAzMDg6XHRcdHUxNlx0XHRcdHZwO1xuIDMwOTpcdFxuIDMxMDpcdFx0cmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19TVEFUVVMsIFx1MDAyNnZwKTtcbiAzMTE6XHRcdHN0YXR1cyA9IHZwO1xuIDMxMjpcdFx0aWYgKHJldHZhbCAhPSAwKSB7XG4gMzEzOlx0XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7bmV0MTA4MF9jaGVja19jb25uIHJlYWQgLSAlZFxcblwmIzM0OywgcmV0dmFsKTtcbiAzMTQ6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzMTU6XHRcdH1cbiAzMTY6XHRcdGlmICgoc3RhdHVzIFx1MDAyNiBTVEFUVVNfQ09OTl9PVEhFUikgIT0gU1RBVFVTX0NPTk5fT1RIRVIpXG4gMzE3Olx0XHRcdHJldHVybiAtRU5PTElOSztcbiAzMTg6XHRcdHJldHVybiAwO1xuIDMxOTpcdH1cbiAzMjA6XHRcbiAzMjE6XHRzdGF0aWMgdm9pZCBuY19lbnN1cmVfc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4gMzIyOlx0e1xuIDMyMzpcdFx0aWYgKCYjNDM7JiM0MztkZXYtXHUwMDNlZnJhbWVfZXJyb3JzIFx1MDAzYz0gNSlcbiAzMjQ6XHRcdFx0cmV0dXJuO1xuIDMyNTpcdFxuIDMyNjpcdFx0aWYgKHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLFxuIDMyNzpcdFx0XHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMzI4Olx0XHRcdFx0XHRcdFVTQl9SRUNJUF9ERVZJQ0UsXG4gMzI5Olx0XHRcdFx0XHRcdFVTQkNUTF9GTFVTSF9USElTIHxcbiAzMzA6XHRcdFx0XHRcdFx0VVNCQ1RMX0ZMVVNIX09USEVSLFxuIDMzMTpcdFx0XHRcdFx0XHRSRUdfVVNCQ1RMLCBOVUxMLCAwKSlcbiAzMzI6XHRcdFx0cmV0dXJuO1xuIDMzMzpcdFxuIDMzNDpcdFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXHUwMDNlbmV0LFxuIDMzNTpcdFx0XHQgIFwmIzM0O2ZsdXNoIG5ldDEwODA7IHRvbyBtYW55IGZyYW1pbmcgZXJyb3JzXFxuXCYjMzQ7KTtcbiAzMzY6XHRcdGRldi1cdTAwM2VmcmFtZV9lcnJvcnMgPSAwO1xuIDMzNzpcdH1cbiAzMzg6XHRcbiAzMzk6XHRzdGF0aWMgaW50IG5ldDEwODBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDM0MDpcdHtcbiAzNDE6XHRcdHN0cnVjdCBuY19oZWFkZXJcdCpoZWFkZXI7XG4gMzQyOlx0XHRzdHJ1Y3QgbmNfdHJhaWxlclx0KnRyYWlsZXI7XG4gMzQzOlx0XHR1MTZcdFx0XHRoZHJfbGVuLCBwYWNrZXRfbGVuO1xuIDM0NDpcdFxuIDM0NTpcdFx0LyogVGhpcyBjaGVjayBpcyBubyBsb25nZXIgZG9uZSBieSB1c2JuZXQgKi9cbiAzNDY6XHRcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBkZXYtXHUwMDNlbmV0LVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbiAzNDc6XHRcdFx0cmV0dXJuIDA7XG4gMzQ4Olx0XG4gMzQ5Olx0XHRpZiAoIShza2ItXHUwMDNlbGVuIFx1MDAyNiAweDAxKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MzIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBiaXQgcGVycGxleGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBvZiBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byBgaW50YC4gRmluZSwgbWFrZXMgc2Vuc2UsIHBvdGVudGlhbCBmb3IgZXJyb3IgY29kZXMsIG1vcmUgZmxleGliaWxpdHksIGFsbCBnb29kLiBCdXQgdGhlbiBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldDEwODBfcmVzZXRgLCBhbmQgaXQmIzM5O3MgY29tcGxldGVseSBpZ25vcmluZyB0aGUgcmV0dXJuIHZhbHVlcyEgV2hhdCYjMzk7cyB0aGUgcG9pbnQ/IEFyZSB3ZSBqdXN0IHRyeWluZyB0byBiZSBtb3JlIHJvYnVzdCBvciBpcyB0aGlzIGEgc2ltcGxlIG92ZXJzaWdodD8KCkhvbGQgb24uLi4gSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2guIFRoaXMgbWFrZXMgbWUgd29uZGVyOiAqV2hlcmUgZWxzZSogaXMgYG5jX3JlZ2lzdGVyX3dyaXRlYCBldmVuIGJlaW5nIHVzZWQ/IFRoaXMgY291bGQgYmUgYSBtdWNoIGJpZ2dlciBwcm9ibGVtIHRoYW4ganVzdCBhIG1pc3NlZCBlcnJvciBjaGVjayBpbiBvbmUgZnVuY3Rpb24uIEJlc3QgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgYWNyb3NzIHRoZSBlbnRpcmUgZmlsZSBhbmQgaWRlbnRpZnkgYWxsIGl0cyB1c2FnZXMuIEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY19yZWdpc3Rlcl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMjQ9c3RhdGljIGlubGluZSBpbnRcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI1Om5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyNi17XG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0yNTk9c3RhdGljIGludCBuZXQxMDgwX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4MS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjgyOlx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODMtXHRcdFx0VVNCQ1RMX0ZMVVNIX1RISVMgfCBVU0JDVExfRkxVU0hfT1RIRVIpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyOTE6XHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cdFx0XHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQ5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvc21ldGljIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHJldHVybiB0eXBlIG9mIGBuY192ZW5kb3Jfd3JpdGVgIGFuZCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZyb20gYHZvaWRgIHRvIGBpbnRgLiBCdXQsIGhvbGQgb27igKYgSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgKm5ldmVyKiBjaGVja2VkIG9yIHVzZWQgYW55d2hlcmUhIFRoYXQgc2VlbXMuLi4gc3RyYW5nZS4gSXQgbWVhbnMgdGhlIHBhdGNoIGhhcyBhYnNvbHV0ZWx5IG5vIGltcGFjdCBvbiB0aGUgcHJvZ3JhbSYjMzk7cyBleGVjdXRpb24gZmxvdy4gSXQmIzM5O3MganVzdCByZXR1cm5pbmcgYW4gaW50ZWdlciB0aGF0JiMzOTtzIGltbWVkaWF0ZWx5IGRpc2NhcmRlZC4gV2hhdCYjMzk7cyB0aGUgcG9pbnQ/CgpMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgdXNibmV0X3dyaXRlX2NtZGAgZG9lc24mIzM5O3QgaGF2ZSBzb21lIGhpZGRlbiBzaWRlIGVmZmVjdCB0aGF0JiMzOTtzIHNvbWVob3cgaW1wYWN0ZWQgYnkgdGhpcy4gTm9wZSwgc3RpbGwganVzdCByZXR1cm5pbmcgYW4gYGludGAgaW5zdGVhZCBvZiBgdm9pZGAuIFNvLCBhdCBmaXJzdCBnbGFuY2UsIHRoaXMgbG9va3MgbGlrZSBhIHB1cmVseSBjb3NtZXRpYyBjaGFuZ2UsIGEgY2xlYW51cCBvZiBzb3J0cy4gV2UmIzM5O3JlIG5vdyByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUgZnJvbSB0aGUgaGVscGVyLCBidXQgdGhlbiBwcm9tcHRseSBpZ25vcmluZyBpdCBhdCB0aGUgY2FsbCBzaXRlLiBTZWVtcyBvZGQuCgpXYWl0LCBpcyB0aGVyZSBhIHdhcm5pbmcgaXQgbWlnaHQgYmUgZml4aW5nPyBQZXJoYXBzIGB1c2JuZXRfd3JpdGVfY21kYCBpdHNlbGYgaXMgbWFya2VkIHdpdGggYF9fbXVzdF9jaGVja2A/IFRoYXQgd291bGQgbWFrZSBtb3JlIHNlbnNlLiBJIHNob3VsZCBjaGVjayBgdXNibmV0X3dyaXRlX2NtZGAgZGVmaW5pdGlvbiBpbiBgaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmhgIG9yIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2JuZXRfd3JpdGVfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTgxPXN0YXRpYyBpbnQgYXFjMTExX3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xODMte1xuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jOjE4NDpcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTg1LVx0XHRcdFx0ICAgICAgVVNCX1JFQ0lQX0RFVklDRSwgdmFsdWUsIGluZGV4LCBkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTQwPWludCBhc2l4X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDgtXHRpZiAoIWluX3BtKVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NDk6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZDtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTUwLVx0ZWxzZVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NTE6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTItXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NjM9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjUte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NjY6XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNjctXHRcdFx0ICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM9MjMxPXN0YXRpYyBpbnQgX19heDg4MTc5X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI0MC1cdGlmICghYXg4ODE3OV9pbl9wbShkZXYpKVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jOjI0MTpcdFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI0Mi1cdGVsc2VcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYzoyNDM6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI0NC1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM9MjU1PXN0YXRpYyB2b2lkIGF4ODgxNzlfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI2Mi1cdFx0Y3B1X3RvX2xlMTZzKFx1MDAyNmJ1Zik7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MjYzOlx0XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjY0LVx0XHRcdFx0ICAgICAgIFVTQl9SRUNJUF9ERVZJQ0UsIHZhbHVlLCBpbmRleCwgXHUwMDI2YnVmLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYy0yNjYtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jOjI2NzpcdFx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCwgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI2OC1cdFx0XHRcdCAgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYz00MDU9c3RhdGljIHZvaWQgY2RjX25jbV91cGRhdGVfcnh0eF9tYXgoc3RydWN0IHVzYm5ldCAqZGV2LCB1MzIgbmV3X3J4LCB1MzIgbmV3X3R4KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNDE5LVx0XHQvKiB0ZWxsIGRldmljZSB0byB1c2UgbmV3IHNpemUgKi9cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM6NDIwOlx0XHRpZiAodXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfU0VUX05UQl9JTlBVVF9TSVpFLFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy00MjEtXHRcdFx0XHQgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVRcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jPTUxNj1zdGF0aWMgaW50IGNkY19uY21faW5pdChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01MzQtXHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtTZXR0aW5nIENSQyBtb2RlIG9mZlxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jOjUzNTpcdFx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfU0VUX0NSQ19NT0RFLFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01MzYtXHRcdFx0XHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNTU2LVx0XHRcdGRldl9kYmcoXHUwMDI2ZGV2LVx1MDAzZWludGYtXHUwMDNlZGV2LCBcJiMzNDtTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMzItYml0XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM6NTU3Olx0XHRcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBVU0JfQ0RDX1NFVF9OVEJfRk9STUFULFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01NTgtXHRcdFx0XHRcdCAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01NjQtXHRcdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O1NldHRpbmcgTlRCIGZvcm1hdCB0byAxNi1iaXRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYzo1NjU6XHRcdFx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfU0VUX05UQl9GT1JNQVQsXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTU2Ni1cdFx0XHRcdFx0ICAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVRcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jPTYwOT1zdGF0aWMgdm9pZCBjZGNfbmNtX3NldF9kZ3JhbV9zaXplKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IG5ld19zaXplKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNjM4LVx0bWF4X2RhdGFncmFtX3NpemUgPSBjcHVfdG9fbGUxNihjdHgtXHUwMDNlbWF4X2RhdGFncmFtX3NpemUpO1xuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYzo2Mzk6XHRlcnIgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRVRfTUFYX0RBVEFHUkFNX1NJWkUsXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTY0MC1cdFx0XHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jPTc3PXN0YXRpYyBpbnQgZG1fd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTc5LVx0aW50IGVycjtcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYzo4MDpcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBETV9XUklURV9SRUdTLFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTgxLVx0XHRcdFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYz04OT1zdGF0aWMgaW50IGRtX3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtOTAte1xuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jOjkxOlx0cmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCBETV9XUklURV9SRUcsXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtOTItXHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jPTk2PXN0YXRpYyB2b2lkIGRtX3dyaXRlX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy05OC17XG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM6OTk6XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgRE1fV1JJVEVfUkVHUyxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy0xMDAtXHRcdFx0ICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbi0tXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM9MTA0PXN0YXRpYyB2b2lkIGRtX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtMTA1LXtcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYzoxMDY6XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgRE1fV1JJVEVfUkVHLFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTEwNy1cdFx0XHQgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmM9MTIzPXN0YXRpYyBpbnQgbWNzNzgzMF9zZXRfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMtMTI0LXtcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmM6MTI1Olx0cmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCBNQ1M3ODMwX1dSX0JSRVEsIE1DUzc4MzBfV1JfQk1SRVEsXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jLTEyNi1cdFx0XHRcdDB4MDAwMCwgaW5kZXgsIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmM9MTI5PXN0YXRpYyB2b2lkIG1jczc4MzBfc2V0X3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBpbmRleCwgdTE2IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jLTEzMC17XG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jOjEzMTpcdHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBNQ1M3ODMwX1dSX0JSRVEsIE1DUzc4MzBfV1JfQk1SRVEsXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jLTEzMi1cdFx0XHRcdDB4MDAwMCwgaW5kZXgsIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM9MTE3PW5jX3ZlbmRvcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTExOC17XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjExOTpcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjAtXHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0zMjE9c3RhdGljIHZvaWQgbmNfZW5zdXJlX3N5bmMoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMzI1LVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzozMjY6XHRpZiAodXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIFJFUVVFU1RfUkVHSVNURVIsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTMyNy1cdFx0XHRcdFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9wbHVzYi5jPTU4PXBsX3ZlbmRvcl9yZXEoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHZhbCwgdTggaW5kZXgpXG5kcml2ZXJzL25ldC91c2IvcGx1c2IuYy01OS17XG5kcml2ZXJzL25ldC91c2IvcGx1c2IuYzo2MDpcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMtNjEtXHRcdFx0XHR2YWwsIGluZGV4LCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYz03MzU9c3RhdGljIGludCBxbWlfd3dhbl9jaGFuZ2VfZHRyKHN0cnVjdCB1c2JuZXQgKmRldiwgYm9vbCBvbilcbi0tXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYy03MzgtXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYzo3Mzk6XHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfUkVRX1NFVF9DT05UUk9MX0xJTkVfU1RBVEUsXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYy03NDAtXHRcdFx0XHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSxcbi0tXG5kcml2ZXJzL25ldC91c2IvcjgxNTNfZWNtLmM9Mzc9c3RhdGljIGludCBwbGFfd3JpdGVfd29yZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBpbmRleCwgdTMyIGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUzX2VjbS5jLTYzLVxuZHJpdmVycy9uZXQvdXNiL3I4MTUzX2VjbS5jOjY0Olx0cmV0ID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIFJUTDgxNTJfUkVRX1NFVF9SRUdTLCBSVEw4MTUyX1JFUVRfV1JJVEUsIGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL3I4MTUzX2VjbS5jLTY1LVx0XHRcdCAgICAgICBNQ1VfVFlQRV9QTEEgfCBieWVuLCBcdTAwMjZ0bXAsIHNpemVvZih0bXApKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jPTMxNz1zdGF0aWMgaW50IHNpZXJyYV9uZXRfc2VuZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmMtMzIyLVxuZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYzozMjM6XHRzdGF0dXMgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5ELFxuZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYy0zMjQtXHRcdFx0XHQgIFVTQl9ESVJfT1VUfFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9JTlRFUkZBQ0UsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmM9MTAxPXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIF9fc21zYzc1eHhfd3JpdGVfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTMyIGluZGV4LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTExMC1cdGlmICghaW5fcG0pXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYzoxMTE6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZDtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTExMi1cdGVsc2VcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jOjExMzpcdFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kX25vcG07XG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYy0xMTQtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE1PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUzMiBpbmRleCxcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjMtXHRpZiAoY3VycmVudCAhPSBwZGF0YS1cdTAwM2VwbV90YXNrKVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0Olx0XHRmbiA9IHVzYm5ldF93cml0ZV9jbWQ7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjUtXHRlbHNlXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjY6XHRcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI3LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTQ1Mz1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBzbXNjOTV4eF93cml0ZV9yZWdfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtNDYyLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6NDYzOlx0cmV0ID0gdXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIFVTQl9WRU5ET1JfUkVRVUVTVF9XUklURV9SRUdJU1RFUixcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTQ2NC1cdFx0XHRcdCAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYz0zNT1zdGF0aWMgaW50IHNyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYy0zOC1cbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYzozOTpcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBTUl9XUl9NVUxUSVBMRV9SRUdTLCBTUl9SRVFfV1JfUkVHLCAwLCByZWcsIGRhdGEsXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNDAtXHRcdFx0ICAgICAgIGxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTUxPXN0YXRpYyBpbnQgc3Jfd3JpdGVfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1OCB2YWx1ZSlcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYy01Mi17XG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM6NTM6XHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIFNSX1dSX1NJTkdMRV9SRUcsIFNSX1JFUV9XUl9SRUcsXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNTQtXHRcdFx0XHR2YWx1ZSwgcmVnLCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM9NTc9c3RhdGljIHZvaWQgc3Jfd3JpdGVfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTU5LXtcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYzo2MDpcdHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBTUl9XUl9NVUxUSVBMRV9SRUdTLCBTUl9SRVFfV1JfUkVHLFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTYxLVx0XHRcdCAgICAgICAwLCByZWcsIGRhdGEsIGxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTY0PXN0YXRpYyB2b2lkIHNyX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNjUte1xuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jOjY2Olx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIFNSX1dSX1NJTkdMRV9SRUcsIFNSX1JFUV9XUl9SRUcsXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNjctXHRcdFx0ICAgICAgIHZhbHVlLCByZWcsIE5VTEwsIDApO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYz00MT1zdGF0aWMgaW50IHNyX3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTQ1LVxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jOjQ2Olx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIGNtZCwgU1JfUkVRX1dSX1JFRywgdmFsdWUsIGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTQ3LVx0XHRcdCAgICAgIGRhdGEsIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYz01NT1zcl93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy01Ny17XG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NTg6XHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBTUl9SRVFfV1JfUkVHLCB2YWx1ZSwgaW5kZXgsIGRhdGEsXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmMtNTktXHRcdFx0ICAgICAgIHNpemUpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMDY3PXN0YXRpYyBpbnQgX191c2JuZXRfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIwOTctXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjA5ODpzdGF0aWMgaW50IF9fdXNibmV0X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTggcmVxdHlwZSxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMDk5LVx0XHRcdCAgICAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjb25zdCB2b2lkICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTA0LVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIxMDU6XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O3VzYm5ldF93cml0ZV9jbWQgY21kPTB4JTAyeCByZXF0eXBlPSUwMnhcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTA2LVx0XHQgICBcJiMzNDsgdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9yZWFkX2NtZCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxNTEtICovXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE1MjppbnQgdXNibmV0X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTggcmVxdHlwZSxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTUzLVx0XHQgICAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjb25zdCB2b2lkICpkYXRhLCB1MTYgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE1OC1cdFx0cmV0dXJuIC1FTk9ERVY7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE1OTpcdHJldCA9IF9fdXNibmV0X3dyaXRlX2NtZChkZXYsIGNtZCwgcmVxdHlwZSwgdmFsdWUsIGluZGV4LFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxNjAtXHRcdFx0XHQgZGF0YSwgc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxNjMtfVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIxNjQ6RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3dyaXRlX2NtZCk7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE2NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MjE3Nj1FWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfcmVhZF9jbWRfbm9wbSk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxODEtICovXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE4MjppbnQgdXNibmV0X3dyaXRlX2NtZF9ub3BtKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1OCByZXF0eXBlLFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxODMtXHRcdFx0ICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgY29uc3Qgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE4NS17XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE4NjpcdHJldHVybiBfX3VzYm5ldF93cml0ZV9jbWQoZGV2LCBjbWQsIHJlcXR5cGUsIHZhbHVlLCBpbmRleCxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTg3LVx0XHRcdFx0ICBkYXRhLCBzaXplKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTg4LX1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMTg5OkVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF93cml0ZV9jbWRfbm9wbSk7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE5MC1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMTkxPXN0YXRpYyB2b2lkIHVzYm5ldF9hc3luY19jbWRfY2Ioc3RydWN0IHVyYiAqdXJiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjA3LSAqL1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIyMDg6aW50IHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjIwOS1cdFx0XHQgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgY29uc3Qgdm9pZCAqZGF0YSwgdTE2IHNpemUpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIyMTUtXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjIxNjpcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7dXNibmV0X3dyaXRlX2NtZCBjbWQ9MHglMDJ4IHJlcXR5cGU9JTAyeFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIyMTctXHRcdCAgIFwmIzM0OyB2YWx1ZT0weCUwNHggaW5kZXg9MHglMDR4IHNpemU9JWRcXG5cJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIyNzItfVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIyNzM6RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3dyaXRlX2NtZF9hc3luYyk7XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjI3NC0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3NtZXRpYyBVU0JuZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB1c2JuZXRfd3JpdGVfY21kYCBpcyBqdXN0IHJldHVybmluZyBhbiBgaW50YCwgYW5kIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byByZXR1cm4gYW4gYGludGAgdG9vLCBidXQgdGhlIHJldHVybmVkIHZhbHVlcyBhcmUgbm90IGFjdHVhbGx5IGJlaW5nIHVzZWQuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbnVwLCBwb3NzaWJseSB0byBnZXQgcmlkIG9mIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhIGZ1bmN0aW9uIHJldHVybmluZyBgdm9pZGAgd2l0aCBhIGByZXR1cm5gIHN0YXRlbWVudCwgb3IgcGVyaGFwcyBpdCYjMzk7cyBhIGZ1dHVyZS1wcm9vZmluZyBjaGFuZ2UsIGFudGljaXBhdGluZyB0aGF0IHRoZXkgbWlnaHQgd2FudCB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIGxhdGVyIG9uLgoKQnV0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBvcmlnaW5hbCBjb2RlLiBBaCwgcmlnaHQ6CgpgYGBjCnN0YXRpYyB2b2lkCm5jX3ZlbmRvcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpCnsKCXVzYm5ldF93cml0ZV9jbWQoZGV2LCByZXEsCgkJCSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCgkJCSB2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkCm5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpCnsKCW5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpOwp9CmBgYAoKQW5kIG5vdyB0aGUgbW9kaWZpZWQgY29kZToKCmBgYGMKc3RhdGljIGludApuY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKQp7CglyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSwKCQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKCQkJCXZhbHVlLCByZWdudW0sIE5VTEwsIDApOwp9CgpzdGF0aWMgaW5saW5lIGludApuY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKQp7CglyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7Cn0KYGBgCgpSaWdodCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBpcyBwdXJlbHkgY29zbWV0aWMuIFRoZSByZXR1cm4gdmFsdWVzIGFyZSAqc3RpbGwqIGlnbm9yZWQsIGp1c3QgYmVpbmcgcGFzc2VkIHVwIHRoZSBjaGFpbi4gIEl0IGRvZXNuJiMzOTt0IGNoYW5nZSBhbnl0aGluZyBmdW5jdGlvbmFsbHkuCgpIb2xkIG9uLCBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBMZXQgbWUgc2VlIHdoZXJlIGBuY19yZWdpc3Rlcl93cml0ZWAgYW5kIGBuY192ZW5kb3Jfd3JpdGVgIGFyZSBhY3R1YWxseSB1c2VkLiBUaGV5JiMzOTtyZSBgc3RhdGljYCBmdW5jdGlvbnMsIHNvIHRoZXkmIzM5O3JlIG9ubHkgaW4gYGRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNgLiBPa2F5LCBzbyB0aGV5JiMzOTtyZSBvbmx5IHVzZWQgd2l0aGluIHRoaXMgc2luZ2xlIGZpbGUuICBJIHJlY2FsbCBub3csIGBuY19yZWdpc3Rlcl93cml0ZWAgaXMgY2FsbGVkIHR3aWNlIGluIGBuZXQxMDgwX3Jlc2V0YCwgYW5kIGFzIGV4cGVjdGVkLCB0aGUgcmV0dXJuIHZhbHVlIGlzbiYjMzk7dCB1c2VkIHRoZXJlIGVpdGhlci4gU28sIHRoZSBwYXRjaCBqdXN0IHByb3BhZ2F0ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgdXNibmV0X3dyaXRlX2NtZGAsIGJ1dCBpdCBnZXRzIGRyb3BwZWQgYXQgdGhlIGVuZC4KCkluIHRoaXMgaW5zdGFuY2UsIEkgZG9uJiMzOTt0IHNlZSBhbnkgdmFsdWUgaW4gc3BlbmRpbmcgdGltZSBmdXp6aW5nIHRoaXMgYmVjYXVzZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbCBoYXNuJiMzOTt0IGNoYW5nZWQgYXQgYWxsLiBJIGNhbiBtb3ZlIG9uLiBMZXQgbWUganVzdCBjb25maXJtIGFnYWluIHRoYXQgYG5ldDEwODBfcmVzZXRgIGlzIHRoZSBvbmx5IGNhbGxlciBvZiBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZvciBjb21wbGV0ZSBjZXJ0YWludHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jX3JlZ2lzdGVyX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyND1zdGF0aWMgaW5saW5lIGludFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjU6bmNfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMTI2LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTI1OT1zdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgxLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyODI6XHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19VU0JDVEwsXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4My1cdFx0XHRVU0JDVExfRkxVU0hfVEhJUyB8IFVTQkNUTF9GTFVTSF9PVEhFUik7XG4tLVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yOTAtXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjI5MTpcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkyLVx0XHRcdE1LX1RUTChOQ19SRUFEX1RUTF9NUywgVFRMX09USEVSKHR0bCkpICk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqTmFycm93aW5nIERvd24gdGhlIFNjb3BlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlIGlzIG9jY3VycmluZy4gVGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHNlZW1zIHRvIGJlIHRoYXQgdGhlIHByb2JsZW0gaXMgc3RyaWN0bHkgbG9jYWxpemVkIHRvIHRoZSBgbmV0MTA4MF9yZXNldGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjb25zdHJhaW50LCBtYWtpbmcgdGhlIGRlYnVnZ2luZyBwcm9jZXNzIG11Y2ggbW9yZSBtYW5hZ2VhYmxlLiBGdXJ0aGVyLCBJIGtub3cgdGhhdCBgbmNfdmVuZG9yX3dyaXRlYCBvbmx5IGdldHMgY2FsbGVkIHRocm91Z2ggYG5jX3JlZ2lzdGVyX3dyaXRlYC4gVGhpcyBuYXJyb3dzIHRoaW5ncyBkb3duIGV2ZW4gZnVydGhlci4gTm93LCBpbnN0ZWFkIG9mIHRoZSBlbnRpcmUgY29kZWJhc2UsIEkgY2FuIGZvY3VzIHNwZWNpZmljYWxseSBvbiB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCB0aGUgcGF0aHdheSBiZXR3ZWVuIHRoZW0uIEkmIzM5O3ZlIGVmZmVjdGl2ZWx5IGNyZWF0ZWQgYSB2ZXJ5IHByZWNpc2Ugc2VhcmNoIHNwYWNlLiBJIGNhbiBsb29rIGludG8gdGhlc2Ugc2VjdGlvbnMgb2YgdGhlIGNvZGUgdG8gZnVydGhlciBpZGVudGlmeSB0aGUgaXNzdWUuIFRoaXMgbWFrZXMgdGhlIGpvYiBhIHdob2xlIGxvdCBlYXNpZXIhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jX3ZlbmRvcl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMTY9c3RhdGljIGludFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMTc6bmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMTE4LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyNT1uY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjc6XHRyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODI0CgkJCQkJCQlvdXRwdXQ6IDExNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSBhcmUgbXkgb3duOgoKKipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiBUaGlzIFBhdGNoKioKClJpZ2h0LCBzbyB0aGlzIGlzIG9ubHkgdHJpZ2dlcmVkIGJ5IGBuY19yZWdpc3Rlcl93cml0ZWAuIEludGVyZXN0aW5nLiBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5IGhlcmUuIEdpdmVuIHRoYXQgYW5kLCB0aGUgY3J1Y2lhbCBwYXJ0OiB0aGUgcmV0dXJuIHZhbHVlIGlzIHNpbXBseSBkaXNjYXJkZWQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGlnbm9yZWQuIFNvLCBmdW5jdGlvbmFsbHksIHRoaXMgcGF0Y2ggY2hhbmdlcyBhYnNvbHV0ZWx5IG5vdGhpbmcuIFplcm8gaW1wYWN0IG9uIHRoZSBwcm9ncmFtJiMzOTtzIGJlaGF2aW91ciBvciBvdXRwdXQuIFRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0byBiZSBnYWluZWQuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIE5vIHBvaW50IGluIGV4cGVuZGluZyByZXNvdXJjZXMgb24gc29tZXRoaW5nIHRoYXQgaGFzIG5vIGVmZmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdHlwZSBvZiBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCBmcm9tIGB2b2lkYCB0byBgaW50YCB0byBwcm9wYWdhdGUgdGhlIHJldHVybiB2YWx1ZSBvZiBgdXNibmV0X3dyaXRlX2NtZGAuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdmFsdWUgaXMgY29tcGxldGVseSBpZ25vcmVkIGJ5IGFsbCBjYWxsZXJzIChvbmx5IGBuZXQxMDgwX3Jlc2V0YCkuIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMvY2xlYW51cCBjaGFuZ2Ugd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIHRoZSByZXR1cm4gdHlwZSBvZiBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCBmcm9tIGB2b2lkYCB0byBgaW50YCB0byBwcm9wYWdhdGUgdGhlIHJldHVybiB2YWx1ZSBvZiBgdXNibmV0X3dyaXRlX2NtZGAuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdmFsdWUgaXMgY29tcGxldGVseSBpZ25vcmVkIGJ5IGFsbCBjYWxsZXJzIChvbmx5IGBuZXQxMDgwX3Jlc2V0YCkuIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMvY2xlYW51cCBjaGFuZ2Ugd2l0aCBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTAuNzk2NDYyMzg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcwMDAxMDYxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIG9mIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGBuY192ZW5kb3Jfd3JpdGVgIGFuZCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZyb20gYHZvaWRgIHRvIGBpbnRgIHRvIHByb3BhZ2F0ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGB1c2JuZXRfd3JpdGVfY21kYC4gSG93ZXZlciwgdGhlIHJldHVybiB2YWx1ZSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYnkgYWxsIGNhbGxlcnMgKG9ubHkgYG5ldDEwODBfcmVzZXRgKS4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYy9jbGVhbnVwIGNoYW5nZSB3aXRoIG5vIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA0OjU0OjUwLjc5NjQ3MjgwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2MDIwMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjZlNmNhODAxYTJmYmIyMDExM2E0ZWVmNDc2M2NkOTQyZTQxNTI5MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAwNDo1NDo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1xcbmluZGV4IDE5ZjZlMTIyMmQ5MzE1Li5kZDlmMTM2MWFlZDYyNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jXFxuKysrIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1xcbkBAIC0xMTMsMTggKzExMywxOCBAQCBuY19yZWdpc3Rlcl9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgKnJldHZhbF9wdHIpXFxuIFxcdHJldHVybiBuY192ZW5kb3JfcmVhZChkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgcmV0dmFsX3B0cik7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkXFxuK3N0YXRpYyBpbnRcXG4gbmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG4ge1xcbi1cXHR1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLFxcbi1cXHRcXHRcXHQgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxcbi1cXHRcXHRcXHQgdmFsdWUsIHJlZ251bSwgTlVMTCwgMCk7XFxuK1xcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLFxcbitcXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuK1xcdFxcdFxcdFxcdHZhbHVlLCByZWdudW0sIE5VTEwsIDApO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWRcXG4rc3RhdGljIGlubGluZSBpbnRcXG4gbmNfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG4ge1xcbi1cXHRuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcXG4rXFx0cmV0dXJuIG5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpO1xcbiB9XFxuIFxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTEuNTYzNTQ1MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjIzMzAxMzcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgZnJvbSBgdm9pZGAgdG8gYGludGAgdG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHVzYm5ldF93cml0ZV9jbWRgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhbGwgY2FsbGVycyAob25seSBgbmV0MTA4MF9yZXNldGApLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljL2NsZWFudXAgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjZlNmNhODAxYTJmYmIyMDExM2E0ZWVmNDc2M2NkOTQyZTQxNTI5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDA0OjU0OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbmluZGV4IDE5ZjZlMTIyMmQ5MzE1Li5kZDlmMTM2MWFlZDYyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcbkBAIC0xMTMsMTggKzExMywxOCBAQCBuY19yZWdpc3Rlcl9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgKnJldHZhbF9wdHIpXG4gXHRyZXR1cm4gbmNfdmVuZG9yX3JlYWQoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHJldHZhbF9wdHIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuK3N0YXRpYyBpbnRcbiBuY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxuIHtcbi1cdHVzYm5ldF93cml0ZV9jbWQoZGV2LCByZXEsXG4tXHRcdFx0IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbi1cdFx0XHQgdmFsdWUsIHJlZ251bSwgTlVMTCwgMCk7XG4rXHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSxcbitcdFx0XHRcdFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcbitcdFx0XHRcdHZhbHVlLCByZWdudW0sIE5VTEwsIDApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWRcbitzdGF0aWMgaW5saW5lIGludFxuIG5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG4ge1xuLVx0bmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG4rXHRyZXR1cm4gbmNfdmVuZG9yX3dyaXRlKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7XG4gfVxuIFxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTEuNTYzNTQ4MTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc1OTUzMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jYC4gSXQgbG9va3MgbGlrZSBzb21lb25lJ3MgbW9kaWZpZWQgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBjaGFuZ2VkIHRoZW0gdG8gcmV0dXJuIHRoZSBgaW50YCB2YWx1ZSB0aGF0IGB1c2JuZXRfd3JpdGVfY21kYCBwcm92aWRlcywgcmF0aGVyIHRoYW4gcmVtYWluaW5nIGB2b2lkYC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCAqd2h5Kj8gSXMgdGhpcyBhIGdlbnVpbmUgZnVuY3Rpb25hbCBjaGFuZ2UsIG9yIGp1c3QgYSBiaXQgb2YgdGlkeWluZyB1cD8gQXJlIHRoZXNlIHJldHVybiB2YWx1ZXMgYWN0dWFsbHkgYmVpbmcgdXNlZCAqc29tZXdoZXJlKj8gUGVyaGFwcyBjaGVja2luZyBmb3IgZXJyb3JzLCBvciBtYXliZSB0aGUgcmV0dXJuIGlzIHJlcXVpcmVkLlxuXG5UbyBmaWd1cmUgdGhpcyBvdXQsIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgKmNhbGxlZCogd2l0aGluIHRoaXMgc3BlY2lmaWMgZmlsZS4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNgIGZvciBpbnN0YW5jZXMgb2YgYG5jX3JlZ2lzdGVyX3dyaXRlYCBhbmQgYG5jX3ZlbmRvcl93cml0ZWAuIFRoYXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhlIHJldHVybiB2YWx1ZXMgYXJlIGJlaW5nIGhhbmRsZWQgKGkuZS4sIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUsIHVzZWQgaW4gYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIGV0Yy4pIG9yIHNpbXBseSBiZWluZyBkaXNjYXJkZWQuIEJhc2VkIG9uIHRoZSByZXN1bHRzLCBJIGNhbiBhc3Nlc3MgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIHBhdGNoIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHRoZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTUuNTM5NTA0NjY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE2NDYwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY19yZWdpc3Rlcl93cml0ZXxuY192ZW5kb3Jfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTExNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMTc6bmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTExOC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyND1zdGF0aWMgaW5saW5lIGludFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI1Om5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI3OlxcdHJldHVybiBuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTI1OT1zdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODEtXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyODI6XFx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgzLVxcdFxcdFxcdFVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjkxOlxcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cXHRcXHRcXHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNDo1NDo1NS42ODc2NzkyMzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ2MzYxNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBhbmFseXNpczpcblxuKipVbmNoZWNrZWQgUmV0dXJuIFZhbHVlcyDigJMgQSBQb3RlbnRpYWwgQnVnIEFsZXJ0ISoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBtb2RpZmllcyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byBub3cgcmV0dXJuIGFuIGBpbnRgLiBUaGF0J3MgZ29vZCBwcmFjdGljZSwgdXN1YWxseS4gSXQgc3VnZ2VzdHMgdGhleSBtaWdodCBiZSBjb21tdW5pY2F0aW5nIHN0YXR1cyBvciBlcnJvcnMuIEJ1dC4uLiB3YWl0IGEgbWludXRlLCB0aGUgY29kZSBpbiBgbmV0MTA4MF9yZXNldGAgKmRvZXNuJ3QqIGFjdHVhbGx5IGNoZWNrIHRob3NlIHJldHVybiB2YWx1ZXMhIFRoaXMgY291bGQgYmUgYSBzbmVha3kgbGl0dGxlIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbi4gSWYgdGhlcmUncyBhIHdyaXRlIGZhaWx1cmUsIGFuZCB3ZSdyZSBub3QgY2hlY2tpbmcgZm9yIGl0LCB0aGUgc3lzdGVtIG1pZ2h0IGNvbnRpbnVlLCB0aGlua2luZyB0aGUgd3JpdGUgc3VjY2VlZGVkIHdoZW4gaXQgZGlkbid0LiBUaGlzIGNvdWxkIGxlYWQgdG8gYSB3aG9sZSBob3N0IG9mIGhhcmQtdG8tZGVidWcgaXNzdWVzIGRvd24gdGhlIGxpbmUuXG5cbk9rYXksIGxldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIGNhbGxzIHRvIHRob3NlIGZ1bmN0aW9ucyDigJMgYG5jX3JlZ2lzdGVyX3dyaXRlYCBhbmQgYG5jX3ZlbmRvcl93cml0ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbGFjayBvZiByZXR1cm4gdmFsdWUgY2hlY2tpbmcgaXNuJ3QgYSB3aWRlciBwcm9ibGVtIGluIHRoZSBjb2RlYmFzZS4gVGhpcyBmZWVscyBsaWtlIGl0IHdhcnJhbnRzIGEgZGVlcGVyIGRpdmUuIFdlIG1pZ2h0IGhhdmUgYSBzeXN0ZW1pYyBpc3N1ZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTQ6NTkuMjM0MDQ1Mjc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjgzNDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY19yZWdpc3Rlcl93cml0ZXxuY192ZW5kb3Jfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTExNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMTc6bmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTExOC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyND1zdGF0aWMgaW5saW5lIGludFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI1Om5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI3OlxcdHJldHVybiBuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyOC19XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTI1OT1zdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODEtXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyODI6XFx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgzLVxcdFxcdFxcdFVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjkxOlxcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cXHRcXHRcXHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNDo1NDo1OS40MTY4ODcwMjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgyMjIwNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb2RlIFJldXNlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGFuZCBgbmNfdmVuZG9yX3dyaXRlYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGVudGlyZSBmaWxlLCB3aGljaCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNlbnNlIG9mIHdoZXRoZXIgdGhlc2UgYXJlIGlzb2xhdGVkIGluY2lkZW50cyBvciBpZiB0aGV5J3JlIHVzZWQgZWxzZXdoZXJlLiBBcmUgdGhlc2UgZnVuY3Rpb25zIG9ubHkgY2FsbGVkIGluIHRoaXMgc3BlY2lmaWMgc2VjdGlvbiwgb3IgYXJlIHRoZXkgY2VudHJhbCB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBGaW5kaW5nIGFsbCB1c2FnZXMgd2lsbCBnaXZlIGEgcXVpY2sgb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGRlY2lkZSBob3cgZGVlcCBJIG5lZWQgdG8gZGl2ZSBmb3IgYSBjb21wbGV0ZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA0OjU1OjAyLjM5OTExMDg1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0LypcXG4gMjUxOlxcdCAqIFRUTCByZWdpc3RlclxcbiAyNTI6XFx0ICovXFxuIDI1MzpcXHRcXG4gMjU0OlxcdCNkZWZpbmVcXHRUVExfT1RIRVIodHRsKVxcdCgweDAwZmYgXFx1MDAyNiAodHRsIFxcdTAwM2VcXHUwMDNlIDgpKVxcbiAyNTU6XFx0I2RlZmluZSBNS19UVEwodGhpcyxvdGhlcilcXHQoKHUxNikoKChvdGhlcilcXHUwMDNjXFx1MDAzYzgpfCgweDAwZmZcXHUwMDI2KHRoaXMpKSkpXFxuIDI1NjpcXHRcXG4gMjU3OlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuIDI1ODpcXHRcXG4gMjU5OlxcdHN0YXRpYyBpbnQgbmV0MTA4MF9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDI2MDpcXHR7XFxuIDI2MTpcXHRcXHR1MTZcXHRcXHR1c2JjdGwsIHN0YXR1cywgdHRsO1xcbiAyNjI6XFx0XFx0dTE2XFx0XFx0dnA7XFxuIDI2MzpcXHRcXHRpbnRcXHRcXHRyZXR2YWw7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdC8vIG5jX2R1bXBfcmVnaXN0ZXJzKGRldik7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdGlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19TVEFUVVMsIFxcdTAwMjZ2cCkpIFxcdTAwM2MgMCkge1xcbiAyNjg6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IHJlYWQgJXMtJXMgc3RhdHVzOiAlZFxcXFxuXFxcIixcXG4gMjY5OlxcdFxcdFxcdFxcdCAgIGRldi1cXHUwMDNldWRldi1cXHUwMDNlYnVzLVxcdTAwM2VidXNfbmFtZSwgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXZwYXRoLCByZXR2YWwpO1xcbiAyNzA6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyNzE6XFx0XFx0fVxcbiAyNzI6XFx0XFx0c3RhdHVzID0gdnA7XFxuIDI3MzpcXHRcXHRuY19kdW1wX3N0YXR1cyhkZXYsIHN0YXR1cyk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdGlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19VU0JDVEwsIFxcdTAwMjZ2cCkpIFxcdTAwM2MgMCkge1xcbiAyNzY6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IHJlYWQgVVNCQ1RMLCAlZFxcXFxuXFxcIiwgcmV0dmFsKTtcXG4gMjc3OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMjc4OlxcdFxcdH1cXG4gMjc5OlxcdFxcdHVzYmN0bCA9IHZwO1xcbiAyODA6XFx0XFx0bmNfZHVtcF91c2JjdGwoZGV2LCB1c2JjdGwpO1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19VU0JDVEwsXFxuIDI4MzpcXHRcXHRcXHRcXHRVU0JDVExfRkxVU0hfVEhJUyB8IFVTQkNUTF9GTFVTSF9PVEhFUik7XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcdGlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19UVEwsIFxcdTAwMjZ2cCkpIFxcdTAwM2MgMCkge1xcbiAyODY6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IHJlYWQgVFRMLCAlZFxcXFxuXFxcIiwgcmV0dmFsKTtcXG4gMjg3OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMjg4OlxcdFxcdH1cXG4gMjg5OlxcdFxcdHR0bCA9IHZwO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXFxuIDI5MjpcXHRcXHRcXHRcXHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xcbiAyOTM6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcImFzc2lnbmVkIFRUTCwgJWQgbXNcXFxcblxcXCIsIE5DX1JFQURfVFRMX01TKTtcXG4gMjk0OlxcdFxcbiAyOTU6XFx0XFx0bmV0aWZfaW5mbyhkZXYsIGxpbmssIGRldi1cXHUwMDNlbmV0LCBcXFwicG9ydCAlYywgcGVlciAlc2Nvbm5lY3RlZFxcXFxuXFxcIixcXG4gMjk2OlxcdFxcdFxcdCAgIChzdGF0dXMgXFx1MDAyNiBTVEFUVVNfUE9SVF9BKSA/ICdBJyA6ICdCJyxcXG4gMjk3OlxcdFxcdFxcdCAgIChzdGF0dXMgXFx1MDAyNiBTVEFUVVNfQ09OTl9PVEhFUikgPyBcXFwiXFxcIiA6IFxcXCJkaXNcXFwiKTtcXG4gMjk4OlxcdFxcdHJldHZhbCA9IDA7XFxuIDI5OTpcXHRcXG4gMzAwOlxcdGRvbmU6XFxuIDMwMTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzMDI6XFx0fVxcbiAzMDM6XFx0XFxuIDMwNDpcXHRzdGF0aWMgaW50IG5ldDEwODBfY2hlY2tfY29ubmVjdChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDMwNTpcXHR7XFxuIDMwNjpcXHRcXHRpbnRcXHRcXHRcXHRyZXR2YWw7XFxuIDMwNzpcXHRcXHR1MTZcXHRcXHRcXHRzdGF0dXM7XFxuIDMwODpcXHRcXHR1MTZcXHRcXHRcXHR2cDtcXG4gMzA5OlxcdFxcbiAzMTA6XFx0XFx0cmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZChkZXYsIFJFR19TVEFUVVMsIFxcdTAwMjZ2cCk7XFxuIDMxMTpcXHRcXHRzdGF0dXMgPSB2cDtcXG4gMzEyOlxcdFxcdGlmIChyZXR2YWwgIT0gMCkge1xcbiAzMTM6XFx0XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcIm5ldDEwODBfY2hlY2tfY29ubiByZWFkIC0gJWRcXFxcblxcXCIsIHJldHZhbCk7XFxuIDMxNDpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzMTU6XFx0XFx0fVxcbiAzMTY6XFx0XFx0aWYgKChzdGF0dXMgXFx1MDAyNiBTVEFUVVNfQ09OTl9PVEhFUikgIT0gU1RBVFVTX0NPTk5fT1RIRVIpXFxuIDMxNzpcXHRcXHRcXHRyZXR1cm4gLUVOT0xJTks7XFxuIDMxODpcXHRcXHRyZXR1cm4gMDtcXG4gMzE5OlxcdH1cXG4gMzIwOlxcdFxcbiAzMjE6XFx0c3RhdGljIHZvaWQgbmNfZW5zdXJlX3N5bmMoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAzMjI6XFx0e1xcbiAzMjM6XFx0XFx0aWYgKCsrZGV2LVxcdTAwM2VmcmFtZV9lcnJvcnMgXFx1MDAzYz0gNSlcXG4gMzI0OlxcdFxcdFxcdHJldHVybjtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0aWYgKHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLFxcbiAzMjc6XFx0XFx0XFx0XFx0XFx0XFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSxcXG4gMzI5OlxcdFxcdFxcdFxcdFxcdFxcdFVTQkNUTF9GTFVTSF9USElTIHxcXG4gMzMwOlxcdFxcdFxcdFxcdFxcdFxcdFVTQkNUTF9GTFVTSF9PVEhFUixcXG4gMzMxOlxcdFxcdFxcdFxcdFxcdFxcdFJFR19VU0JDVEwsIE5VTEwsIDApKVxcbiAzMzI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzMzU6XFx0XFx0XFx0ICBcXFwiZmx1c2ggbmV0MTA4MDsgdG9vIG1hbnkgZnJhbWluZyBlcnJvcnNcXFxcblxcXCIpO1xcbiAzMzY6XFx0XFx0ZGV2LVxcdTAwM2VmcmFtZV9lcnJvcnMgPSAwO1xcbiAzMzc6XFx0fVxcbiAzMzg6XFx0XFxuIDMzOTpcXHRzdGF0aWMgaW50IG5ldDEwODBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAzNDA6XFx0e1xcbiAzNDE6XFx0XFx0c3RydWN0IG5jX2hlYWRlclxcdCpoZWFkZXI7XFxuIDM0MjpcXHRcXHRzdHJ1Y3QgbmNfdHJhaWxlclxcdCp0cmFpbGVyO1xcbiAzNDM6XFx0XFx0dTE2XFx0XFx0XFx0aGRyX2xlbiwgcGFja2V0X2xlbjtcXG4gMzQ0OlxcdFxcbiAzNDU6XFx0XFx0LyogVGhpcyBjaGVjayBpcyBubyBsb25nZXIgZG9uZSBieSB1c2JuZXQgKi9cXG4gMzQ2OlxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIGRldi1cXHUwMDNlbmV0LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pXFxuIDM0NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzQ4OlxcdFxcbiAzNDk6XFx0XFx0aWYgKCEoc2tiLVxcdTAwM2VsZW4gXFx1MDAyNiAweDAxKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNDo1NTowMi4zOTkyNzk1MDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjIwOTM1ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IHBlcnBsZXhpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBjaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBvZiBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byBgaW50YC4gRmluZSwgbWFrZXMgc2Vuc2UsIHBvdGVudGlhbCBmb3IgZXJyb3IgY29kZXMsIG1vcmUgZmxleGliaWxpdHksIGFsbCBnb29kLiBCdXQgdGhlbiBJJ20gbG9va2luZyBhdCBgbmV0MTA4MF9yZXNldGAsIGFuZCBpdCdzIGNvbXBsZXRlbHkgaWdub3JpbmcgdGhlIHJldHVybiB2YWx1ZXMhIFdoYXQncyB0aGUgcG9pbnQ/IEFyZSB3ZSBqdXN0IHRyeWluZyB0byBiZSBtb3JlIHJvYnVzdCBvciBpcyB0aGlzIGEgc2ltcGxlIG92ZXJzaWdodD9cblxuSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgbW9yZSB0aG9yb3VnaC4gVGhpcyBtYWtlcyBtZSB3b25kZXI6ICpXaGVyZSBlbHNlKiBpcyBgbmNfcmVnaXN0ZXJfd3JpdGVgIGV2ZW4gYmVpbmcgdXNlZD8gVGhpcyBjb3VsZCBiZSBhIG11Y2ggYmlnZ2VyIHByb2JsZW0gdGhhbiBqdXN0IGEgbWlzc2VkIGVycm9yIGNoZWNrIGluIG9uZSBmdW5jdGlvbi4gQmVzdCB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBhY3Jvc3MgdGhlIGVudGlyZSBmaWxlIGFuZCBpZGVudGlmeSBhbGwgaXRzIHVzYWdlcy4gSSBuZWVkIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTczMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MDYuMDIwMjE5MDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDgyMzk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuY19yZWdpc3Rlcl93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM9MTI0PXN0YXRpYyBpbmxpbmUgaW50XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjU6bmNfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyNi17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTI1OT1zdGF0aWMgaW50IG5ldDEwODBfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yODEtXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoyODI6XFx0bmNfcmVnaXN0ZXJfd3JpdGUoZGV2LCBSRUdfVVNCQ1RMLFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgzLVxcdFxcdFxcdFVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjkwLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjkxOlxcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1RUTCxcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5Mi1cXHRcXHRcXHRNS19UVEwoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUih0dGwpKSApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNDo1NTowNi4xNjUwNTE2NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU0NTg3MzYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb3NtZXRpYyBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHJldHVybiB0eXBlIG9mIGBuY192ZW5kb3Jfd3JpdGVgIGFuZCBgbmNfcmVnaXN0ZXJfd3JpdGVgIGZyb20gYHZvaWRgIHRvIGBpbnRgLiBCdXQsIGhvbGQgb27igKYgSSdtIHNlZWluZyB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyAqbmV2ZXIqIGNoZWNrZWQgb3IgdXNlZCBhbnl3aGVyZSEgVGhhdCBzZWVtcy4uLiBzdHJhbmdlLiBJdCBtZWFucyB0aGUgcGF0Y2ggaGFzIGFic29sdXRlbHkgbm8gaW1wYWN0IG9uIHRoZSBwcm9ncmFtJ3MgZXhlY3V0aW9uIGZsb3cuIEl0J3MganVzdCByZXR1cm5pbmcgYW4gaW50ZWdlciB0aGF0J3MgaW1tZWRpYXRlbHkgZGlzY2FyZGVkLiBXaGF0J3MgdGhlIHBvaW50P1xuXG5MZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgdXNibmV0X3dyaXRlX2NtZGAgZG9lc24ndCBoYXZlIHNvbWUgaGlkZGVuIHNpZGUgZWZmZWN0IHRoYXQncyBzb21laG93IGltcGFjdGVkIGJ5IHRoaXMuIE5vcGUsIHN0aWxsIGp1c3QgcmV0dXJuaW5nIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLiBTbywgYXQgZmlyc3QgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlLCBhIGNsZWFudXAgb2Ygc29ydHMuIFdlJ3JlIG5vdyByZXR1cm5pbmcgdGhlIGVycm9yIGNvZGUgZnJvbSB0aGUgaGVscGVyLCBidXQgdGhlbiBwcm9tcHRseSBpZ25vcmluZyBpdCBhdCB0aGUgY2FsbCBzaXRlLiBTZWVtcyBvZGQuXG5cbldhaXQsIGlzIHRoZXJlIGEgd2FybmluZyBpdCBtaWdodCBiZSBmaXhpbmc/IFBlcmhhcHMgYHVzYm5ldF93cml0ZV9jbWRgIGl0c2VsZiBpcyBtYXJrZWQgd2l0aCBgX19tdXN0X2NoZWNrYD8gVGhhdCB3b3VsZCBtYWtlIG1vcmUgc2Vuc2UuIEkgc2hvdWxkIGNoZWNrIGB1c2JuZXRfd3JpdGVfY21kYCBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaGAgb3IgYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MTAuNzEwOTMwMjczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI5MDY0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNibmV0X3dyaXRlX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYz0xODE9c3RhdGljIGludCBhcWMxMTFfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTgzLXtcXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTg0OlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTE4NS1cXHRcXHRcXHRcXHQgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIGRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYz00MD1pbnQgYXNpeF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNDgtXFx0aWYgKCFpbl9wbSlcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYzo0OTpcXHRcXHRmbiA9IHVzYm5ldF93cml0ZV9jbWQ7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtNTAtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjUxOlxcdFxcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9NjM9dm9pZCBhc2l4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02NS17XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6NjY6XFx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy02Ny1cXHRcXHRcXHQgICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jPTIzMT1zdGF0aWMgaW50IF9fYXg4ODE3OV93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI0MC1cXHRpZiAoIWF4ODgxNzlfaW5fcG0oZGV2KSlcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MjQxOlxcdFxcdGZuID0gdXNibmV0X3dyaXRlX2NtZDtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjQyLVxcdGVsc2VcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MjQzOlxcdFxcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYy0yNDQtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM9MjU1PXN0YXRpYyB2b2lkIGF4ODgxNzlfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjYyLVxcdFxcdGNwdV90b19sZTE2cyhcXHUwMDI2YnVmKTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MjYzOlxcdFxcdHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBjbWQsIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjY0LVxcdFxcdFxcdFxcdCAgICAgICBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsIFxcdTAwMjZidWYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMjY2LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jOjI2NzpcXHRcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgY21kLCBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTI2OC1cXHRcXHRcXHRcXHQgICAgICAgVVNCX1JFQ0lQX0RFVklDRSwgdmFsdWUsIGluZGV4LCBkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYz00MDU9c3RhdGljIHZvaWQgY2RjX25jbV91cGRhdGVfcnh0eF9tYXgoc3RydWN0IHVzYm5ldCAqZGV2LCB1MzIgbmV3X3J4LCB1MzIgbmV3X3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy00MTktXFx0XFx0LyogdGVsbCBkZXZpY2UgdG8gdXNlIG5ldyBzaXplICovXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYzo0MjA6XFx0XFx0aWYgKHVzYm5ldF93cml0ZV9jbWQoZGV2LCBVU0JfQ0RDX1NFVF9OVEJfSU5QVVRfU0laRSxcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTQyMS1cXHRcXHRcXHRcXHQgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVRcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM9NTE2PXN0YXRpYyBpbnQgY2RjX25jbV9pbml0KHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNTM0LVxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiU2V0dGluZyBDUkMgbW9kZSBvZmZcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM6NTM1OlxcdFxcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBVU0JfQ0RDX1NFVF9DUkNfTU9ERSxcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTUzNi1cXHRcXHRcXHRcXHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01NTYtXFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCJTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMzItYml0XFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jOjU1NzpcXHRcXHRcXHRlcnIgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVCxcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTU1OC1cXHRcXHRcXHRcXHRcXHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy01NjQtXFx0XFx0XFx0ZGV2X2RiZyhcXHUwMDI2ZGV2LVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCJTZXR0aW5nIE5UQiBmb3JtYXQgdG8gMTYtYml0XFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jOjU2NTpcXHRcXHRcXHRlcnIgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRVRfTlRCX0ZPUk1BVCxcXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTU2Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYz02MDk9c3RhdGljIHZvaWQgY2RjX25jbV9zZXRfZGdyYW1fc2l6ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBuZXdfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNjM4LVxcdG1heF9kYXRhZ3JhbV9zaXplID0gY3B1X3RvX2xlMTYoY3R4LVxcdTAwM2VtYXhfZGF0YWdyYW1fc2l6ZSk7XFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYzo2Mzk6XFx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIFVTQl9DRENfU0VUX01BWF9EQVRBR1JBTV9TSVpFLFxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtNjQwLVxcdFxcdFxcdCAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYz03Nz1zdGF0aWMgaW50IGRtX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTc5LVxcdGludCBlcnI7XFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jOjgwOlxcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBETV9XUklURV9SRUdTLFxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy04MS1cXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM9ODk9c3RhdGljIGludCBkbV93cml0ZV9yZWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHU4IHZhbHVlKVxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy05MC17XFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jOjkxOlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgRE1fV1JJVEVfUkVHLFxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy05Mi1cXHRcXHRcXHRcXHRVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM9OTY9c3RhdGljIHZvaWQgZG1fd3JpdGVfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtOTgte1xcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYzo5OTpcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgRE1fV1JJVEVfUkVHUyxcXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmMtMTAwLVxcdFxcdFxcdCAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvZG05NjAxLmM9MTA0PXN0YXRpYyB2b2lkIGRtX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jLTEwNS17XFxuZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jOjEwNjpcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgRE1fV1JJVEVfUkVHLFxcbmRyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYy0xMDctXFx0XFx0XFx0ICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmM9MTIzPXN0YXRpYyBpbnQgbWNzNzgzMF9zZXRfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IGluZGV4LCB1MTYgc2l6ZSwgY29uc3Qgdm9pZCAqZGF0YSlcXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jLTEyNC17XFxuZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYzoxMjU6XFx0cmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCBNQ1M3ODMwX1dSX0JSRVEsIE1DUzc4MzBfV1JfQk1SRVEsXFxuZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYy0xMjYtXFx0XFx0XFx0XFx0MHgwMDAwLCBpbmRleCwgZGF0YSwgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jPTEyOT1zdGF0aWMgdm9pZCBtY3M3ODMwX3NldF9yZWdfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMtMTMwLXtcXG5kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jOjEzMTpcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgTUNTNzgzMF9XUl9CUkVRLCBNQ1M3ODMwX1dSX0JNUkVRLFxcbmRyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMtMTMyLVxcdFxcdFxcdFxcdDB4MDAwMCwgaW5kZXgsIGRhdGEsIHNpemUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMTc9bmNfdmVuZG9yX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTExOC17XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMTk6XFx0cmV0dXJuIHVzYm5ldF93cml0ZV9jbWQoZGV2LCByZXEsXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjAtXFx0XFx0XFx0XFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0zMjE9c3RhdGljIHZvaWQgbmNfZW5zdXJlX3N5bmMoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0zMjUtXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzozMjY6XFx0aWYgKHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMzI3LVxcdFxcdFxcdFxcdFxcdFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9wbHVzYi5jPTU4PXBsX3ZlbmRvcl9yZXEoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHZhbCwgdTggaW5kZXgpXFxuZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMtNTkte1xcbmRyaXZlcnMvbmV0L3VzYi9wbHVzYi5jOjYwOlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxcbmRyaXZlcnMvbmV0L3VzYi9wbHVzYi5jLTYxLVxcdFxcdFxcdFxcdHZhbCwgaW5kZXgsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3FtaV93d2FuLmM9NzM1PXN0YXRpYyBpbnQgcW1pX3d3YW5fY2hhbmdlX2R0cihzdHJ1Y3QgdXNibmV0ICpkZXYsIGJvb2wgb24pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYy03MzgtXFxuZHJpdmVycy9uZXQvdXNiL3FtaV93d2FuLmM6NzM5OlxcdHJldHVybiB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19SRVFfU0VUX0NPTlRST0xfTElORV9TVEFURSxcXG5kcml2ZXJzL25ldC91c2IvcW1pX3d3YW4uYy03NDAtXFx0XFx0XFx0XFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTNfZWNtLmM9Mzc9c3RhdGljIGludCBwbGFfd3JpdGVfd29yZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBpbmRleCwgdTMyIGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvcjgxNTNfZWNtLmMtNjMtXFxuZHJpdmVycy9uZXQvdXNiL3I4MTUzX2VjbS5jOjY0OlxcdHJldCA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBSVEw4MTUyX1JFUV9TRVRfUkVHUywgUlRMODE1Ml9SRVFUX1dSSVRFLCBpbmRleCxcXG5kcml2ZXJzL25ldC91c2IvcjgxNTNfZWNtLmMtNjUtXFx0XFx0XFx0ICAgICAgIE1DVV9UWVBFX1BMQSB8IGJ5ZW4sIFxcdTAwMjZ0bXAsIHNpemVvZih0bXApKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmM9MzE3PXN0YXRpYyBpbnQgc2llcnJhX25ldF9zZW5kX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jLTMyMi1cXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jOjMyMzpcXHRzdGF0dXMgPSB1c2JuZXRfd3JpdGVfY21kKGRldiwgVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5ELFxcbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmMtMzI0LVxcdFxcdFxcdFxcdCAgVVNCX0RJUl9PVVR8VVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0lOVEVSRkFDRSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jPTEwMT1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBfX3Ntc2M3NXh4X3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUzMiBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTExMC1cXHRpZiAoIWluX3BtKVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jOjExMTpcXHRcXHRmbiA9IHVzYm5ldF93cml0ZV9jbWQ7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmMtMTEyLVxcdGVsc2VcXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYzoxMTM6XFx0XFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kX25vcG07XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M3NXh4LmMtMTE0LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE1PXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIHNtc2M5NXh4X3dyaXRlX3JlZyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUzMiBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMy1cXHRpZiAoY3VycmVudCAhPSBwZGF0YS1cXHUwMDNlcG1fdGFzaylcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQ6XFx0XFx0Zm4gPSB1c2JuZXRfd3JpdGVfY21kO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNS1cXHRlbHNlXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI2OlxcdFxcdGZuID0gdXNibmV0X3dyaXRlX2NtZF9ub3BtO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTQ1Mz1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBzbXNjOTV4eF93cml0ZV9yZWdfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy00NjItXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6NDYzOlxcdHJldCA9IHVzYm5ldF93cml0ZV9jbWRfYXN5bmMoZGV2LCBVU0JfVkVORE9SX1JFUVVFU1RfV1JJVEVfUkVHSVNURVIsXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtNDY0LVxcdFxcdFxcdFxcdCAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTM1PXN0YXRpYyBpbnQgc3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHUxNiBsZW5ndGgsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtMzgtXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jOjM5OlxcdGVyciA9IHVzYm5ldF93cml0ZV9jbWQoZGV2LCBTUl9XUl9NVUxUSVBMRV9SRUdTLCBTUl9SRVFfV1JfUkVHLCAwLCByZWcsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTQwLVxcdFxcdFxcdCAgICAgICBsZW5ndGgpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTUxPXN0YXRpYyBpbnQgc3Jfd3JpdGVfcmVnKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1OCB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNTIte1xcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYzo1MzpcXHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIFNSX1dSX1NJTkdMRV9SRUcsIFNSX1JFUV9XUl9SRUcsXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTU0LVxcdFxcdFxcdFxcdHZhbHVlLCByZWcsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jPTU3PXN0YXRpYyB2b2lkIHNyX3dyaXRlX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTU5LXtcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM6NjA6XFx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIFNSX1dSX01VTFRJUExFX1JFR1MsIFNSX1JFUV9XUl9SRUcsXFxuZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jLTYxLVxcdFxcdFxcdCAgICAgICAwLCByZWcsIGRhdGEsIGxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM9NjQ9c3RhdGljIHZvaWQgc3Jfd3JpdGVfcmVnX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1OCB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNjUte1xcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYzo2NjpcXHR1c2JuZXRfd3JpdGVfY21kX2FzeW5jKGRldiwgU1JfV1JfU0lOR0xFX1JFRywgU1JfUkVRX1dSX1JFRyxcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtNjctXFx0XFx0XFx0ICAgICAgIHZhbHVlLCByZWcsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jPTQxPXN0YXRpYyBpbnQgc3Jfd3JpdGVfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy00NS1cXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NDY6XFx0ZXJyID0gdXNibmV0X3dyaXRlX2NtZChkZXYsIGNtZCwgU1JfUkVRX1dSX1JFRywgdmFsdWUsIGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy00Ny1cXHRcXHRcXHQgICAgICBkYXRhLCBzaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYz01NT1zcl93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTU3LXtcXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmM6NTg6XFx0dXNibmV0X3dyaXRlX2NtZF9hc3luYyhkZXYsIGNtZCwgU1JfUkVRX1dSX1JFRywgdmFsdWUsIGluZGV4LCBkYXRhLFxcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYy01OS1cXHRcXHRcXHQgICAgICAgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MjA2Nz1zdGF0aWMgaW50IF9fdXNibmV0X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1OCByZXF0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIwOTctXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIwOTg6c3RhdGljIGludCBfX3VzYm5ldF93cml0ZV9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIwOTktXFx0XFx0XFx0ICAgICAgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIGNvbnN0IHZvaWQgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjEwNC1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjEwNTpcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwidXNibmV0X3dyaXRlX2NtZCBjbWQ9MHglMDJ4IHJlcXR5cGU9JTAyeFxcXCJcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjEwNi1cXHRcXHQgICBcXFwiIHZhbHVlPTB4JTA0eCBpbmRleD0weCUwNHggc2l6ZT0lZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9yZWFkX2NtZCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE1MS0gKi9cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE1MjppbnQgdXNibmV0X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTggcmVxdHlwZSxcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE1My1cXHRcXHQgICAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjb25zdCB2b2lkICpkYXRhLCB1MTYgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTU4LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMTU5OlxcdHJldCA9IF9fdXNibmV0X3dyaXRlX2NtZChkZXYsIGNtZCwgcmVxdHlwZSwgdmFsdWUsIGluZGV4LFxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTYwLVxcdFxcdFxcdFxcdCBkYXRhLCBzaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTYzLX1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE2NDpFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfd3JpdGVfY21kKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE2NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0yMTc2PUVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9yZWFkX2NtZF9ub3BtKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTgxLSAqL1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMTgyOmludCB1c2JuZXRfd3JpdGVfY21kX25vcG0oc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHU4IHJlcXR5cGUsXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxODMtXFx0XFx0XFx0ICB1MTYgdmFsdWUsIHUxNiBpbmRleCwgY29uc3Qgdm9pZCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMTg1LXtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MjE4NjpcXHRyZXR1cm4gX191c2JuZXRfd3JpdGVfY21kKGRldiwgY21kLCByZXF0eXBlLCB2YWx1ZSwgaW5kZXgsXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIxODctXFx0XFx0XFx0XFx0ICBkYXRhLCBzaXplKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE4OC19XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjIxODk6RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3dyaXRlX2NtZF9ub3BtKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMjE5MC1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MjE5MT1zdGF0aWMgdm9pZCB1c2JuZXRfYXN5bmNfY21kX2NiKHN0cnVjdCB1cmIgKnVyYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjA3LSAqL1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMjA4OmludCB1c2JuZXRfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1OCByZXF0eXBlLFxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjA5LVxcdFxcdFxcdCAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjb25zdCB2b2lkICpkYXRhLCB1MTYgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjE1LVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMjE2OlxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJ1c2JuZXRfd3JpdGVfY21kIGNtZD0weCUwMnggcmVxdHlwZT0lMDJ4XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjE3LVxcdFxcdCAgIFxcXCIgdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTIyNzItfVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoyMjczOkVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF93cml0ZV9jbWRfYXN5bmMpO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0yMjc0LS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA0OjU1OjExLjM2Mzg0Mjg0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzM0NDM1NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvc21ldGljIFVTQm5ldCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB1c2JuZXRfd3JpdGVfY21kYCBpcyBqdXN0IHJldHVybmluZyBhbiBgaW50YCwgYW5kIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgbmNfdmVuZG9yX3dyaXRlYCBhbmQgYG5jX3JlZ2lzdGVyX3dyaXRlYCB0byByZXR1cm4gYW4gYGludGAgdG9vLCBidXQgdGhlIHJldHVybmVkIHZhbHVlcyBhcmUgbm90IGFjdHVhbGx5IGJlaW5nIHVzZWQuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbnVwLCBwb3NzaWJseSB0byBnZXQgcmlkIG9mIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhIGZ1bmN0aW9uIHJldHVybmluZyBgdm9pZGAgd2l0aCBhIGByZXR1cm5gIHN0YXRlbWVudCwgb3IgcGVyaGFwcyBpdCdzIGEgZnV0dXJlLXByb29maW5nIGNoYW5nZSwgYW50aWNpcGF0aW5nIHRoYXQgdGhleSBtaWdodCB3YW50IHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgbGF0ZXIgb24uXG5cbkJ1dCwgbGV0J3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBvcmlnaW5hbCBjb2RlLiBBaCwgcmlnaHQ6XG5cbmBgYGNcbnN0YXRpYyB2b2lkXG5uY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxue1xuXHR1c2JuZXRfd3JpdGVfY21kKGRldiwgcmVxLFxuXHRcdFx0IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSxcblx0XHRcdCB2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTtcbn1cblxuc3RhdGljIGlubGluZSB2b2lkXG5uY19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxue1xuXHRuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcbn1cbmBgYFxuXG5BbmQgbm93IHRoZSBtb2RpZmllZCBjb2RlOlxuXG5gYGBjXG5zdGF0aWMgaW50XG5uY192ZW5kb3Jfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZXEsIHU4IHJlZ251bSwgdTE2IHZhbHVlKVxue1xuXHRyZXR1cm4gdXNibmV0X3dyaXRlX2NtZChkZXYsIHJlcSxcblx0XHRcdFx0VVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLFxuXHRcdFx0XHR2YWx1ZSwgcmVnbnVtLCBOVUxMLCAwKTtcbn1cblxuc3RhdGljIGlubGluZSBpbnRcbm5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXG57XG5cdHJldHVybiBuY192ZW5kb3Jfd3JpdGUoZGV2LCBSRVFVRVNUX1JFR0lTVEVSLCByZWdudW0sIHZhbHVlKTtcbn1cbmBgYFxuXG5SaWdodCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIHB1cmVseSBjb3NtZXRpYy4gVGhlIHJldHVybiB2YWx1ZXMgYXJlICpzdGlsbCogaWdub3JlZCwganVzdCBiZWluZyBwYXNzZWQgdXAgdGhlIGNoYWluLiAgSXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgZnVuY3Rpb25hbGx5LlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlLiBMZXQgbWUgc2VlIHdoZXJlIGBuY19yZWdpc3Rlcl93cml0ZWAgYW5kIGBuY192ZW5kb3Jfd3JpdGVgIGFyZSBhY3R1YWxseSB1c2VkLiBUaGV5J3JlIGBzdGF0aWNgIGZ1bmN0aW9ucywgc28gdGhleSdyZSBvbmx5IGluIGBkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jYC4gT2theSwgc28gdGhleSdyZSBvbmx5IHVzZWQgd2l0aGluIHRoaXMgc2luZ2xlIGZpbGUuICBJIHJlY2FsbCBub3csIGBuY19yZWdpc3Rlcl93cml0ZWAgaXMgY2FsbGVkIHR3aWNlIGluIGBuZXQxMDgwX3Jlc2V0YCwgYW5kIGFzIGV4cGVjdGVkLCB0aGUgcmV0dXJuIHZhbHVlIGlzbid0IHVzZWQgdGhlcmUgZWl0aGVyLiBTbywgdGhlIHBhdGNoIGp1c3QgcHJvcGFnYXRlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGB1c2JuZXRfd3JpdGVfY21kYCwgYnV0IGl0IGdldHMgZHJvcHBlZCBhdCB0aGUgZW5kLlxuXG5JbiB0aGlzIGluc3RhbmNlLCBJIGRvbid0IHNlZSBhbnkgdmFsdWUgaW4gc3BlbmRpbmcgdGltZSBmdXp6aW5nIHRoaXMgYmVjYXVzZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGtlcm5lbCBoYXNuJ3QgY2hhbmdlZCBhdCBhbGwuIEkgY2FuIG1vdmUgb24uIExldCBtZSBqdXN0IGNvbmZpcm0gYWdhaW4gdGhhdCBgbmV0MTA4MF9yZXNldGAgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGBuY19yZWdpc3Rlcl93cml0ZWAgZm9yIGNvbXBsZXRlIGNlcnRhaW50eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MTkuMDk4MjgxNDgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjUyOTQ1OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNfcmVnaXN0ZXJfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL25ldDEwODAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jPTEyND1zdGF0aWMgaW5saW5lIGludFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTI1Om5jX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMjYte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0yNTk9c3RhdGljIGludCBuZXQxMDgwX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMjgxLVxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MjgyOlxcdG5jX3JlZ2lzdGVyX3dyaXRlKGRldiwgUkVHX1VTQkNUTCxcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI4My1cXHRcXHRcXHRVU0JDVExfRkxVU0hfVEhJUyB8IFVTQkNUTF9GTFVTSF9PVEhFUik7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTI5MC1cXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jOjI5MTpcXHRuY19yZWdpc3Rlcl93cml0ZShkZXYsIFJFR19UVEwsXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0yOTItXFx0XFx0XFx0TUtfVFRMKE5DX1JFQURfVFRMX01TLCBUVExfT1RIRVIodHRsKSkgKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MTkuNDIzNTg3OTYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDEwNDU4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hcnJvd2luZyBEb3duIHRoZSBTY29wZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgaXNzdWUgaXMgb2NjdXJyaW5nLiBUaGUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gc2VlbXMgdG8gYmUgdGhhdCB0aGUgcHJvYmxlbSBpcyBzdHJpY3RseSBsb2NhbGl6ZWQgdG8gdGhlIGBuZXQxMDgwX3Jlc2V0YCBmdW5jdGlvbi4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgY29uc3RyYWludCwgbWFraW5nIHRoZSBkZWJ1Z2dpbmcgcHJvY2VzcyBtdWNoIG1vcmUgbWFuYWdlYWJsZS4gRnVydGhlciwgSSBrbm93IHRoYXQgYG5jX3ZlbmRvcl93cml0ZWAgb25seSBnZXRzIGNhbGxlZCB0aHJvdWdoIGBuY19yZWdpc3Rlcl93cml0ZWAuIFRoaXMgbmFycm93cyB0aGluZ3MgZG93biBldmVuIGZ1cnRoZXIuIE5vdywgaW5zdGVhZCBvZiB0aGUgZW50aXJlIGNvZGViYXNlLCBJIGNhbiBmb2N1cyBzcGVjaWZpY2FsbHkgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucyBhbmQgdGhlIHBhdGh3YXkgYmV0d2VlbiB0aGVtLiBJJ3ZlIGVmZmVjdGl2ZWx5IGNyZWF0ZWQgYSB2ZXJ5IHByZWNpc2Ugc2VhcmNoIHNwYWNlLiBJIGNhbiBsb29rIGludG8gdGhlc2Ugc2VjdGlvbnMgb2YgdGhlIGNvZGUgdG8gZnVydGhlciBpZGVudGlmeSB0aGUgaXNzdWUuIFRoaXMgbWFrZXMgdGhlIGpvYiBhIHdob2xlIGxvdCBlYXNpZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MjMuODY0NjQwMjYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA5NjY0NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmNfdmVuZG9yX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMTY9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmM6MTE3Om5jX3ZlbmRvcl93cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYy0xMTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYz0xMjU9bmNfcmVnaXN0ZXJfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jLTEyNi17XFxuZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYzoxMjc6XFx0cmV0dXJuIG5jX3ZlbmRvcl93cml0ZShkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgdmFsdWUpO1xcbmRyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMtMTI4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MjQuMDc1NjEzMTk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjA5MDc3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkgYXJlIG15IG93bjpcblxuKipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiBUaGlzIFBhdGNoKipcblxuUmlnaHQsIHNvIHRoaXMgaXMgb25seSB0cmlnZ2VyZWQgYnkgYG5jX3JlZ2lzdGVyX3dyaXRlYC4gSW50ZXJlc3RpbmcuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBrZXkgaGVyZS4gR2l2ZW4gdGhhdCBhbmQsIHRoZSBjcnVjaWFsIHBhcnQ6IHRoZSByZXR1cm4gdmFsdWUgaXMgc2ltcGx5IGRpc2NhcmRlZC4gSXQncyBlc3NlbnRpYWxseSBpZ25vcmVkLiBTbywgZnVuY3Rpb25hbGx5LCB0aGlzIHBhdGNoIGNoYW5nZXMgYWJzb2x1dGVseSBub3RoaW5nLiBaZXJvIGltcGFjdCBvbiB0aGUgcHJvZ3JhbSdzIGJlaGF2aW91ciBvciBvdXRwdXQuIFRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGl0J3MgYSBub24tc3RhcnRlci4gVGhlcmUncyBub3RoaW5nIGhlcmUgdG8gYmUgZ2FpbmVkLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIE5vIHBvaW50IGluIGV4cGVuZGluZyByZXNvdXJjZXMgb24gc29tZXRoaW5nIHRoYXQgaGFzIG5vIGVmZmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MjQsIk91dHB1dFRva2VucyI6MTE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDQ6NTU6MjcuNzk2NTI0NjQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgZnJvbSBgdm9pZGAgdG8gYGludGAgdG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHVzYm5ldF93cml0ZV9jbWRgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhbGwgY2FsbGVycyAob25seSBgbmV0MTA4MF9yZXNldGApLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljL2NsZWFudXAgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgYG5jX3ZlbmRvcl93cml0ZWAgYW5kIGBuY19yZWdpc3Rlcl93cml0ZWAgZnJvbSBgdm9pZGAgdG8gYGludGAgdG8gcHJvcGFnYXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgYHVzYm5ldF93cml0ZV9jbWRgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBieSBhbGwgY2FsbGVycyAob25seSBgbmV0MTA4MF9yZXNldGApLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljL2NsZWFudXAgY2hhbmdlIHdpdGggbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmd55q[1] Phase: Running StartedAt: 2026-07-28 04:55:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmd55q[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-28 04:55:40 +0000 UTC FinishedAt: 2026-07-28 04:56:02 +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,}