Name: series-workflow95slq Phase: Failed StartedAt: 2026-08-03 19:27:03 +0000 UTC FinishedAt: 2026-08-03 19:30:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow95slq[0] Phase: Succeeded StartedAt: 2026-08-03 19:27:03 +0000 UTC FinishedAt: 2026-08-03 19:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow95slq[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 19:27:03 +0000 UTC FinishedAt: 2026-08-03 19:30:26 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHJlZ2lzdGVyIG51bWJlciBwcmludGVkIGluIGFuIGVycm9yIG1lc3NhZ2UgKHZpYSB2ZXJib3NlKCkpIHdoZW4gYSBCUEYgcG9pbnRlciBhcml0aG1ldGljIHNhbml0aXphdGlvbiBlcnJvciBvY2N1cnMgd2l0aCBhbiBpbW1lZGlhdGUgdmFsdWUuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdywgc3RhdGUsIG9yIHJldHVybiB2YWx1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzgxZjk3NmE3OWQ5Mjc4MTk3MmE1OThkNGJiODMyMzEyZDU3OTdkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTk6Mjk6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBmZGM1ZmJiMWY3OGNhLi5lNWE4NTQ3YWQ3MjMxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMzU2Miw2ICYjNDM7MTM1NjIsNyBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc1xuIFx0c3RhdGljIGNvbnN0IGNoYXIgKmVyciA9IFwmIzM0O3BvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIGl0IHByb2hpYml0ZWQgZm9yICFyb290XCYjMzQ7O1xuIFx0Y29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUREID8gXCYjMzQ7YWRkXCYjMzQ7IDogXCYjMzQ7c3ViXCYjMzQ7O1xuIFx0dTMyIGRzdCA9IGluc24tXHUwMDNlZHN0X3JlZywgc3JjID0gaW5zbi1cdTAwM2VzcmNfcmVnO1xuJiM0MztcdGJvb2wgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSztcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcbiBcbiBcdHN3aXRjaCAocmVhc29uKSB7XG5AQCAtMTM1NzEsNyAmIzQzOzEzNTcyLDcgQEAgc3RhdGljIGludCBzYW5pdGl6ZV9lcnIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFQVNPTl9UWVBFOlxuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIGhhcyBwb2ludGVyIHdpdGggdW5zdXBwb3J0ZWQgYWx1IG9wZXJhdGlvbiwgJXNcXG5cJiMzNDssXG4tXHRcdFx0cmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFID8gZHN0IDogc3JjLCBlcnIpO1xuJiM0MztcdFx0XHRzcmNfaXNfaW1tIHx8IHJlZ3Nbc3JjXS50eXBlID09IFNDQUxBUl9WQUxVRSA/IGRzdCA6IHNyYywgZXJyKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFQVNPTl9QQVRIUzpcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1IlZCB0cmllZCB0byAlcyBmcm9tIGRpZmZlcmVudCBtYXBzLCBwYXRocyBvciBzY2FsYXJzLCAlc1xcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgcmVnaXN0ZXIgbnVtYmVyIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSAodmlhIHZlcmJvc2UoKSkgd2hlbiBhIEJQRiBwb2ludGVyIGFyaXRobWV0aWMgc2FuaXRpemF0aW9uIGVycm9yIG9jY3VycyB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBzdGF0ZSwgb3IgcmV0dXJuIHZhbHVlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ODFmOTc2YTc5ZDkyNzgxOTcyYTU5OGQ0YmI4MzIzMTJkNTc5N2Q5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAxOToyOTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBmZGM1ZmJiMWY3OGNhLi5lNWE4NTQ3YWQ3MjMxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMzU2Miw2ICYjNDM7MTM1NjIsNyBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmlucwogCXN0YXRpYyBjb25zdCBjaGFyICplcnIgPSAmIzM0O3BvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIGl0IHByb2hpYml0ZWQgZm9yICFyb290JiMzNDs7CiAJY29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FERCA/ICYjMzQ7YWRkJiMzNDsgOiAmIzM0O3N1YiYjMzQ7OwogCXUzMiBkc3QgPSBpbnNuLSZndDtkc3RfcmVnLCBzcmMgPSBpbnNuLSZndDtzcmNfcmVnOwomIzQzOwlib29sIHNyY19pc19pbW0gPSBCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9LOwogCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTsKIAogCXN3aXRjaCAocmVhc29uKSB7CkBAIC0xMzU3MSw3ICYjNDM7MTM1NzIsNyBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmlucwogCQlicmVhazsKIAljYXNlIFJFQVNPTl9UWVBFOgogCQl2ZXJib3NlKGVudiwgJiMzNDtSJWQgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uLCAlc1xuJiMzNDssCi0JCQlyZWdzW3NyY10udHlwZSA9PSBTQ0FMQVJfVkFMVUUgPyBkc3QgOiBzcmMsIGVycik7CiYjNDM7CQkJc3JjX2lzX2ltbSB8fCByZWdzW3NyY10udHlwZSA9PSBTQ0FMQVJfVkFMVUUgPyBkc3QgOiBzcmMsIGVycik7CiAJCWJyZWFrOwogCWNhc2UgUkVBU09OX1BBVEhTOgogCQl2ZXJib3NlKGVudiwgJiMzNDtSJWQgdHJpZWQgdG8gJXMgZnJvbSBkaWZmZXJlbnQgbWFwcywgcGF0aHMgb3Igc2NhbGFycywgJXNcbiYjMzQ7LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc2FuaXRpemVfZXJyYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIHRoaXMgbmV3IGJvb2xlYW4sIGBzcmNfaXNfaW1tID0gQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSztgLCB0aGF0JiMzOTtzIGJlaW5nIGludHJvZHVjZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBgUkVBU09OX1RZUEVgIGNhc2Ugb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQuIEhtbSwgYW5kIGl0JiMzOTtzICpvbmx5KiBpbXBhY3RpbmcgdGhlIG91dHB1dCBvZiBgdmVyYm9zZShlbnYsIC4uLilgIOKAkyBzbyB0aGlzIGlzIHN0cmljdGx5IGFib3V0IGxvZ2dpbmcgb3IgZGlhZ25vc3RpYyBtZXNzYWdlcy4KClJpZ2h0LCBgc2FuaXRpemVfZXJyYC4uLiB0aGF0JiMzOTtzIGNhbGxlZCB3aGVuIHdlIGhpdCBhbiBlcnJvciBkdXJpbmcgcG9pbnRlciBhcml0aG1ldGljIHNhbml0aXphdGlvbi4gSSByZW1lbWJlciB0aGF0IGNvZGUuIEFoLCBJIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhpcyBwYXRjaCBjb3JyZWN0cyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyB0aGUgcmVnaXN0ZXIgbnVtYmVyIGlzIHByaW50ZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgc291cmNlIG9wZXJhbmQgaXMgYW4gaW1tZWRpYXRlIHZhbHVlIChgQlBGX0tgKS4KClByZXZpb3VzbHksIGl0IHdhcyBjaGVja2luZyBgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFYC4gQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgaWYgaXQmIzM5O3MgYW4gaW1tZWRpYXRlLCBgc3JjYCAqaXNuJiMzOTt0KiBhIHJlZ2lzdGVyLiBTbywgYWNjZXNzaW5nIGByZWdzW3NyY11gIGlzIGVpdGhlciBvdXQgb2YgYm91bmRzIG9yLCBhdCBiZXN0LCBtaXNsZWFkaW5nLiBXYWl0Li4uIGlmIGBzcmNfaXNfaW1tYCBpcyB0cnVlLCB0aGVuIGBzcmNgICpoYXMqIHRvIGJlIHplcm8uIEJlY2F1c2UgYHNyY19yZWdgIGlzIGRlZmluaXRlbHkgMCBmb3IgYEJQRl9LYCBpbnN0cnVjdGlvbnMsIG9yIGlzIG1heWJlIGp1c3Qgbm90IGV2ZW4gdXNlZC4gWWVzLCBgc3JjYCBpcyBgaW5zbi0mZ3Q7c3JjX3JlZ2AuIEdvdCBpdC4gSWYgdGhlIGBCUEZfU1JDYCBmaWVsZCBpcyBgQlBGX0tgLCB0aGVuIGBzcmNfcmVnYCAqaXMqIGluZGVlZCAwLiBTbyBpdCB3b3VsZCBoYXZlIGNoZWNrZWQgYHJlZ3NbMF0udHlwZWAsIHdoaWNoIGlzIHByb2JhYmx5IGZpbmUgc29tZXRpbWVzIGJ1dCBtYXliZSBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yLgoKQnV0LCB0aGUgY2hhbmdlIGlzIGp1c3QgaW4gdGhlIGB2ZXJib3NlKClgIGVycm9yIG1lc3NhZ2UuIEVzc2VudGlhbGx5IGl0JiMzOTtzIHByb3ZpZGluZyBtb3JlIGFjY3VyYXRlIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uIE9rYXksIEkgc2hvdWxkIGNvbmZpcm0gYnkgY2hlY2tpbmcgYHNhbml0aXplX2VycmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2FuaXRpemVfZXJyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzU0Nz1zdGF0aWMgdm9pZCBzYW5pdGl6ZV9tYXJrX2luc25fc2VlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU1OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzU2MDpzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCByZWFzb24pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1NjEte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY2NT1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzY0LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzY1Olx0XHRcdHJldHVybiBzYW5pdGl6ZV9lcnIoZW52LCBpbnNuLCByZXQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzY2LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1Ny1cdFx0aWYgKHJldCBcdTAwM2MgMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg1ODpcdFx0XHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1OS1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ1OTI9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYwOS1cdFx0aWYgKHJldCBcdTAwM2MgMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYxMDpcdFx0XHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYxMS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYHNhbml0aXplX2VycmAgaW1wbGVtZW50YXRpb24uIEkgYXNzdW1lIHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgZGVzaWduZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgaW4gdGhlIGZhY2Ugb2YgZXJyb3JzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqSG93IGl0IGlkZW50aWZpZXMgZGlmZmVyZW50IHR5cGVzIG9mIGVycm9ycy4qKiBJcyBpdCB1c2luZyBlcnJvciBjb2RlcywgZXhjZXB0aW9uIHR5cGVzLCBtZXNzYWdlIHBhcnNpbmcsIG9yIGEgY29tYmluYXRpb24/IFdoYXQmIzM5O3MgdGhlIGdyYW51bGFyaXR5IG9mIGl0cyBlcnJvciBjbGFzc2lmaWNhdGlvbj8KKiAgICoqV2hhdCBpdCBkb2VzIHdpdGggdGhlIGVycm9ycyBpdCBmaW5kcy4qKiBJcyBpdCBsb2dnaW5nLCBtYXNraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgdHJhbnNmb3JtaW5nIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgdXNlciwgb3IgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBvdGhlciBjb3JyZWN0aXZlIGFjdGlvbnM/CiogICAqKlRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBzYW5pdGl6YXRpb24uKiogQ291bGQgdGhpcyBmdW5jdGlvbiBpbnRyb2R1Y2UgbmV3IGVycm9ycywgaGlkZSBjcml0aWNhbCBpbmZvcm1hdGlvbiwgb3IgaGF2ZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cz8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrYWdlIG9yIGRlbmlhbC1vZi1zZXJ2aWNlIGlzc3Vlcy4KKiAgICoqVGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgdXNlZC4qKiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IHBhcnRzIG9mIHRoZSBjb2RlYmFzZSByZWx5IG9uIGl0PyBIb3cgZGVlcGx5IGludGVncmF0ZWQgaXMgaXQ/IFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBpc3N1ZXMgSSBmaW5kLgoKTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50IGFuZCBJIG11c3QgdGFrZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZCBpdCBjb21wbGV0ZWx5LiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVneSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHJlbGlhYmlsaXR5IG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU2MDpcdHN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IHJlYXNvbilcbjEzNTYxOlx0e1xuMTM1NjI6XHRcdHN0YXRpYyBjb25zdCBjaGFyICplcnIgPSBcJiMzNDtwb2ludGVyIGFyaXRobWV0aWMgd2l0aCBpdCBwcm9oaWJpdGVkIGZvciAhcm9vdFwmIzM0OztcbjEzNTYzOlx0XHRjb25zdCBjaGFyICpvcCA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BREQgPyBcJiMzNDthZGRcJiMzNDsgOiBcJiMzNDtzdWJcJiMzNDs7XG4xMzU2NDpcdFx0dTMyIGRzdCA9IGluc24tXHUwMDNlZHN0X3JlZywgc3JjID0gaW5zbi1cdTAwM2VzcmNfcmVnO1xuMTM1NjU6XHRcdGJvb2wgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSztcbjEzNTY2Olx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XG4xMzU2NzpcdFxuMTM1Njg6XHRcdHN3aXRjaCAocmVhc29uKSB7XG4xMzU2OTpcdFx0Y2FzZSBSRUFTT05fQk9VTkRTOlxuMTM1NzA6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1IlZCBoYXMgdW5rbm93biBzY2FsYXIgd2l0aCBtaXhlZCBzaWduZWQgYm91bmRzLCAlc1xcblwmIzM0OyxcbjEzNTcxOlx0XHRcdFx0cmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFID8gc3JjIDogZHN0LCBlcnIpO1xuMTM1NzI6XHRcdFx0YnJlYWs7XG4xMzU3MzpcdFx0Y2FzZSBSRUFTT05fVFlQRTpcbjEzNTc0Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtSJWQgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uLCAlc1xcblwmIzM0OyxcbjEzNTc1Olx0XHRcdFx0c3JjX2lzX2ltbSB8fCByZWdzW3NyY10udHlwZSA9PSBTQ0FMQVJfVkFMVUUgPyBkc3QgOiBzcmMsIGVycik7XG4xMzU3NjpcdFx0XHRicmVhaztcbjEzNTc3Olx0XHRjYXNlIFJFQVNPTl9QQVRIUzpcbjEzNTc4Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtSJWQgdHJpZWQgdG8gJXMgZnJvbSBkaWZmZXJlbnQgbWFwcywgcGF0aHMgb3Igc2NhbGFycywgJXNcXG5cJiMzNDssXG4xMzU3OTpcdFx0XHRcdGRzdCwgb3AsIGVycik7XG4xMzU4MDpcdFx0XHRicmVhaztcbjEzNTgxOlx0XHRjYXNlIFJFQVNPTl9MSU1JVDpcbjEzNTgyOlx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtSJWQgdHJpZWQgdG8gJXMgYmV5b25kIHBvaW50ZXIgYm91bmRzLCAlc1xcblwmIzM0OyxcbjEzNTgzOlx0XHRcdFx0ZHN0LCBvcCwgZXJyKTtcbjEzNTg0Olx0XHRcdGJyZWFrO1xuMTM1ODU6XHRcdGNhc2UgUkVBU09OX1NUQUNLOlxuMTM1ODY6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1IlZCBjb3VsZCBub3QgYmUgcHVzaGVkIGZvciBzcGVjdWxhdGl2ZSB2ZXJpZmljYXRpb24sICVzXFxuXCYjMzQ7LFxuMTM1ODc6XHRcdFx0XHRkc3QsIGVycik7XG4xMzU4ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEzNTg5Olx0XHRkZWZhdWx0OlxuMTM1OTA6XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7dW5rbm93biByZWFzb24gKCVkKVwmIzM0OywgcmVhc29uKTtcbjEzNTkxOlx0XHRcdGJyZWFrO1xuMTM1OTI6XHRcdH1cbjEzNTkzOlx0XG4xMzU5NDpcdFx0cmV0dXJuIC1FQUNDRVM7XG4xMzU5NTpcdH1cbjEzNTk2Olx0XG4xMzU5NzpcdC8qIGNoZWNrIHRoYXQgc3RhY2sgYWNjZXNzIGZhbGxzIHdpdGhpbiBzdGFjayBsaW1pdHMgYW5kIHRoYXQgJiMzOTtyZWcmIzM5OyBkb2VzbiYjMzk7dFxuMTM1OTg6XHQgKiBoYXZlIGEgdmFyaWFibGUgb2Zmc2V0LlxuMTM1OTk6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIExvZ2dpbmcgYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UgdG8gdGhlIGB2ZXJib3NlKClgIG91dHB1dCB3aXRoaW4gYHNhbml0aXplX2VycigpYC4gSXTigJlzIGFsbCBhYm91dCBsb2dnaW5nIGFuZCBkaWFnbm9zdGljcywgc3BlY2lmaWNhbGx5IGRlY2lkaW5nIHdoZXRoZXIgdG8gcHJpbnQgYGRzdGAgb3IgYHNyY2AgYXMgdGhlIHJlZ2lzdGVyIG51bWJlciBiYXNlZCBvbiBgc3JjX2lzX2ltbWAuIEZ1bmN0aW9uYWxseSwgdGhpcyBkb2VzbiYjMzk7dCBjaGFuZ2UgZXhlY3V0aW9uLCByaWdodD8KCldhaXQgYSBzZWNvbmTigKYgY291bGQgdGhpcyAqYWN0dWFsbHkqIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3Mgb24gYHJlZ3Nbc3JjXWA/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIElmIGBzcmNfaXNfaW1tYCBpcyB0cnVlLCB0aGVuIGBzcmNgIGlzIGBpbnNuLSZndDtzcmNfcmVnYC4gSW4gdHlwaWNhbCBgQlBGX0tgIGluc3RydWN0aW9ucywgYHNyY19yZWdgIGlzIHVzdWFsbHkgMC4gQW5kIGByZWdzYCBpcyBhbiBhcnJheSBvZiBgTUFYX0JQRl9SRUdgLCB3aGljaCBpcyAxMS4gU28sIGByZWdzWzBdYCBpcyBhIHZhbGlkIGFjY2Vzcy4gSXQgKm1pZ2h0KiBiZSB0aGF0IGByZWdzWzBdLnR5cGVgIGlzIG5vdCBgU0NBTEFSX1ZBTFVFYCwgc28gdGhlIG91dHB1dCB3b3VsZCBwcmludCBgc3JjYCwgd2hpY2ggaXMgMCwgaW5zdGVhZCBvZiBgZHN0YC4KCkhhbmcgb24sIGlmIGBzcmNfaXNfaW1tYCBpcyB0cnVlLCBgc3JjYCBpcyBkZWZpbml0ZWx5IDAuIFByaW50aW5nICYjMzQ7UjAgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uJiMzNDsgaXMgY29uZnVzaW5nIHdoZW4gdGhlIHNvdXJjZSBpcyBhbiBpbW1lZGlhdGUsIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHBvaW50ZXIuIEl0JiMzOTtzIGp1c3QgZml4aW5nIHRoZSBlcnJvciBtZXNzYWdlLiBTbywgaXQgaXMgbGlrZWx5IHRoYXQgdGhlIHBhdGNoIGlzIGZvciBsb2dnaW5nLgoKRG9lcyB0aGlzIGNoYW5nZSBwcmV2ZW50IGEgY3Jhc2g/IElmIGBzcmNgIGNvdWxkIGJlIG91dCBvZiBib3VuZHMsIHllcy4gQnV0LCBgaW5zbi0mZ3Q7c3JjX3JlZ2AgaXMgYSA0LWJpdCBmaWVsZCwgc28gaXQmIzM5O3MgYmV0d2VlbiAwLTE1LiBCdXQgd2FpdCwgdGhlIGByZWdzYCBhcnJheSBpcyBvbmx5IHNpemUgMTEsIGl0IGlzIGNhcHBlZCBhdCBgTUFYX0JQRl9SRUdgLiBJZiBgaW5zbi0mZ3Q7c3JjX3JlZ2AgKmlzKiAmZ3Q7IDEwLCB0aGVuIGByZWdzW3NyY11gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzISBUaGF0JiMzOTtzIGEgdnVsbmVyYWJpbGl0eS4KCkkgbmVlZCB0byBjaGVjayBpZiBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSBjb3VsZCBwb3NzaWJseSBtYWtlIGBpbnNuLSZndDtzcmNfcmVnYCAmZ3Q7IDEwIGZvciBgQlBGX0tgIGluc3RydWN0aW9ucy4gVHlwaWNhbGx5LCBgc3JjX3JlZ2AgaXMgMCBpbiBgQlBGX0tgIGluc3RydWN0aW9ucywgYnV0IGEgbWFsaWNpb3VzIHByb2dyYW0gKmNvdWxkKiBzZXQgaXQgdG8gMTUuCgpXYWl0ISBUaGUgQlBGIHZlcmlmaWVyIGNoZWNrcyBgc3JjX3JlZyA9PSAwYCBlYXJseSBvbiBmb3IgYEJQRl9LYCBpbnN0cnVjdGlvbnMuIE9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbGlrZWx5IGhhcm1sZXNzLCBhbmQgaXQmIzM5O3Mgc29sZWx5IGFib3V0IGltcHJvdmluZyB0aGUgZXJyb3IgbWVzc2FnZSBjbGFyaXR5LCBtYWtpbmcgaXQgbGVzcyBjb25mdXNpbmcgYW5kIG1vcmUgaW5mb3JtYXRpdmUuIEkgdGhpbmsgd2UgYXJlIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfcmVnX2FyZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzA4Mz1zdGF0aWMgdm9pZCBtYXJrX2luc25femV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMwOTY6c3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk3LVx0XHRcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTMzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzQ6c3RhdGljIGludCBjaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM1LVx0XHRcdCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMTQwOlx0cmV0dXJuIF9fY2hlY2tfcmVnX2FyZyhlbnYsIHN0YXRlLVx1MDAzZXJlZ3MsIHJlZ25vLCB0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTQxLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0Nz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3ODMtXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzg0Olx0XHRcdFx0LyogVGhlIGVhcmxpZXIgY2hlY2tfcmVnX2FyZygpIGhhcyBkZWNpZGVkIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3ODUtXHRcdFx0XHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzQxPXN0YXRpYyBpbnQgY2hlY2tfbG9hZF9tZW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzUyLVx0aWYgKGlzX3N0YWNrX2FyZ19sZHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzUzOlx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1OS1cdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM2MDpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2MS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjQtXHQvKiBjaGVjayBkc3Qgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2Ni1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mzk0LVx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mzk1Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTYtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDAyOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDAzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQwNi1cdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MDc6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDIyPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM0LVx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQzNTpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXHQvKiBjaGVjayBzcmMyIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQwOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ0Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQ4Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgYXV4X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQ5LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDc2LVx0XHQvKiBjaGVjayBhbmQgcmVjb3JkIGxvYWQgb2Ygb2xkIHZhbHVlICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NzpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyMzg9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTEtXHRcdFx0Lypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MzEyOlx0XHRcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTMtXHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODIxMT1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODIyODpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCByZWdubywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjI5LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1Mj1zdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU5LVx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2NhbGxlcl9zYXZlZFtpXV0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNjA6XHRcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNjEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwODI9c3RhdGljIGludCBzZXR1cF9mdW5jX2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBpbnQgY2FsbHNpdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkxMTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTExOTpcdC8qIG9ubHkgaW5jcmVtZW50IGl0IGFmdGVyIGNoZWNrX3JlZ19hcmcoKSBmaW5pc2hlZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkxMjAtXHRzdGF0ZS1cdTAwM2VjdXJmcmFtZSYjNDM7JiM0Mzs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTcxPXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNS1cdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQxNjpcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDE3LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDkxOD1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI1LVx0XHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTI2Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI3LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzNy1cdFx0aWYgKHJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXS50eXBlID09IFNDQUxBUl9WQUxVRSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTM4Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzOS1cdFx0XHRlcnIgPSBlcnIgPzogYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHMoZW52LCBpbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk0Mi1cdFx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk0MzpcdFx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTQ0LVx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTU4LVx0XHRcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NTk6XHRcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2MC1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2NC1cdFx0LyogY2hlY2sgZGVzdCBvcGVyYW5kLCBtYXJrIGFzIHJlcXVpcmVkIGxhdGVyICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NjU6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2Ni1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzAtXHRcdFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzE6XHRcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Mi1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Ni1cdFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzc6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk3LVx0XHQvKiBjaGVjayBkZXN0IG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA5ODpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk5LVx0XHRlcnIgPSBlcnIgPzogYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoZW52LCBpbnNuKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5NDY9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4NS1cdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg2Olx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4Ny1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTkyLVx0XHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5MzpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxODU9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE5Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjE5ODpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxOTktXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjMwNz1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI0LVx0LyogY2hlY2sgd2hldGhlciBpbXBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAocmVnaXN0ZXIgUjYpIGlzIHJlYWRhYmxlICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgY3R4X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ0LVx0XHQvKiBjaGVjayBleHBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzQ1Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ2LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM1Ni1cdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM1NzpcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzU4LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjUzMT1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NTY1LVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NjY6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgcmVnbm8sIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY1NjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjYxNj1zdGF0aWMgaW50IGNoZWNrX2dsb2JhbF9zdWJwcm9nX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjI0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2NjI1Olx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIEJQRl9SRUdfMCwgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjYyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MjM1PXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcyNjc6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBWZXJpZmljYXRpb24gQ29uY2VybioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIEFMVSBvcGVyYXRpb25zLiBJIHNlZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBnZXRzIHNjcmVlbmVkIGJlZm9yZSBpdCBldmVuIGhpdHMgYHNhbml0aXplX2VycmAsIHdoaWNoIGlzIGdvb2QuIElmIGl0JiMzOTtzIGFuIEFMVSBvcCwgYGNoZWNrX2FsdV9vcGAgaXMgaW52b2tlZC4gSW5zaWRlIGBjaGVja19hbHVfb3BgLCB0aGluZ3Mgc2VlbSBzdHJhaWdodGZvcndhcmQsIGVzcGVjaWFsbHkgZm9yIGBCUEZfWGAgc291cmNlIG9wZXJhbmRzIHdoZXJlIEkmIzM5O20gZXhwZWN0aW5nIGBjaGVja19yZWdfYXJnYCB0byB2YWxpZGF0ZSB0aGUgYHNyY19yZWdgLgoKSG93ZXZlciwgbXkgYnJhaW4ganVzdCBwaW5nZWQhIFdoYXQgaGFwcGVucyBpZiB0aGUgc291cmNlIG9wZXJhbmQgaXMgYEJQRl9LYD8gSW4gdGhhdCBjYXNlLCBgY2hlY2tfcmVnX2FyZ2AgKmlzbiYjMzk7dCogY2FsbGVkIGZvciBgc3JjX3JlZ2AsIGJ1dCB0aGUgYGluc24tJmd0O3NyY19yZWdgICppcyogc3RpbGwgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24uIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLiBJcyBgaW5zbi0mZ3Q7c3JjX3JlZ2AgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm8gZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zPyBJIGhhdmUgYSBzdHJvbmcgZ3V0IGZlZWxpbmcgdGhhdCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLgoKTGV0IG1lIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBgYnBmX2luc25gIHN0cnVjdHVyZSBhbmQgaG93IGBCUEZfS2AgaXMgaGFuZGxlZC4gSWYgYGluc24tJmd0O3NyY19yZWdgICppc24mIzM5O3QqIHplcm8sIHRoYXQgdmFsdWUgY291bGQgYmUgYW55dGhpbmcgdXAgdG8gMTUuIFRoZSBgcmVnc2AgYXJyYXksIHRob3VnaCwgaGFzIGEgc2l6ZSBvZiBvbmx5IDExIChgTUFYX0JQRl9SRUdgKS4gU28sIGlmIGBpbnNuLSZndDtzcmNfcmVnYCBoYXBwZW5zIHRvIGJlIDE1LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyEgVGhhdCYjMzk7cyBhIHNlcmlvdXMgdnVsbmVyYWJpbGl0eS4KCldhaXQuLi4gZG9lcyB0aGUgdmVyaWZpZXIsIHNvbWV3aGVyZSBpbiBgY2hlY2tfYWx1X29wYCwgYHJlcGxhY2VfbWFwX2ZkX3dpdGhfbWFwX3B0cmAgb3IgYGJwZl9jaGVja2AgYWN0dWFsbHkgdmFsaWRhdGUgdGhlIGBzcmNfcmVnYCBhbmQgY29uZmlybSB0aGF0IGl04oCZcyBgMGAgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zPyBJIG5lZWQgdG8gY2hlY2sgdGhlc2UgZnVuY3Rpb25zICppbW1lZGlhdGVseSogdG8gYXZvaWQgb3Zlcmxvb2tpbmcgdGhpcyBjcnVjaWFsIGRldGFpbC4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBzZWN1cml0eSBob2xlIEkgbmVlZCB0byBhZGRyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcmNfcmVnID09IDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTI4NDA9c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODUzLVx0XHRpZiAoY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9DQUxMKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyODU0Olx0XHQgICAgaW5zbltpXS5zcmNfcmVnID09IDAgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjg1NS1cdFx0ICAgIGluc25baV0uaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjAyLVx0ZHN0X3JlZyA9IFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjIwMzpcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gMCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjA0LVx0XHR1NjQgaW1tID0gKCh1NjQpKGluc24gJiM0MzsgMSktXHUwMDNlaW1tIFx1MDAzY1x1MDAzYyAzMikgfCAodTMyKWluc24tXHUwMDNlaW1tO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODA5Nj1zdGF0aWMgaW50IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTM0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTM1Olx0XHRcdGlmIChpbnNuWzBdLnNyY19yZWcgPT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEzNi1cdFx0XHRcdC8qIHZhbGlkIGdlbmVyaWMgbG9hZCA2NC1iaXQgaW1tICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjgyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipMb2NhdGluZyBgc3JjX3JlZ2AgQ2hlY2tzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRob3VnaHQ6IEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSBvZiBgc3JjX3JlZ2AgY2hlY2tzIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTtsbCBiZSB1c2luZyBzb21lIGZvcm0gb2Ygc2VhcmNoIGZ1bmN0aW9uYWxpdHkg4oCTIGxpa2VseSBhIGdyZXAsIGFuIElERSYjMzk7cyBzZWFyY2gsIG9yIGEgbW9yZSBzcGVjaWFsaXplZCB0b29sIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdC4gVGhlIGdvYWwgaGVyZSBpcyBlZmZpY2llbnQgaWRlbnRpZmljYXRpb247IEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBmb3IgYSBzaW1wbGUgc3RyaW5nIG1hdGNoLCBidXQgdW5kZXJzdGFuZGluZyB0aGUgKmNvbnRleHQqIGFyb3VuZCB0aGUgY2hlY2sgaXRzZWxmLiBBcmUgdGhlc2UgY2hlY2tzIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgdmFsaWRhdGlvbiwgc2VjdXJpdHkgbWVhc3VyZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBjaGVjayBtYXR0ZXJzIGluIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gU28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjb2RlIHN1cnJvdW5kaW5nIGl0LiBJJiMzOTtsbCBuZWVkIHRvIHRoZW4gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZSByZWdpc3RlciBhbmQgaG93IGl0IGlzIHVzZWQuIEkgYW50aWNpcGF0ZSBxdWlja2x5IG5hcnJvd2luZyBkb3duIHRoZSBwb3RlbnRpYWxseSByZWxldmFudCBpbnN0YW5jZXMgYW5kIHRoZW4gZGl2aW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLiBUaGUga2V5IGlzIG1ldGhvZGljYWwgaWRlbnRpZmljYXRpb24gYW5kIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfcmVnX2FyZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzA4Mz1zdGF0aWMgdm9pZCBtYXJrX2luc25femV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMwOTY6c3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk3LVx0XHRcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTMzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzQ6c3RhdGljIGludCBjaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM1LVx0XHRcdCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMTQwOlx0cmV0dXJuIF9fY2hlY2tfcmVnX2FyZyhlbnYsIHN0YXRlLVx1MDAzZXJlZ3MsIHJlZ25vLCB0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTQxLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0Nz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3ODMtXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzg0Olx0XHRcdFx0LyogVGhlIGVhcmxpZXIgY2hlY2tfcmVnX2FyZygpIGhhcyBkZWNpZGVkIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3ODUtXHRcdFx0XHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzQxPXN0YXRpYyBpbnQgY2hlY2tfbG9hZF9tZW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzUyLVx0aWYgKGlzX3N0YWNrX2FyZ19sZHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzUzOlx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1OS1cdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM2MDpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2MS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjQtXHQvKiBjaGVjayBkc3Qgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2Ni1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mzk0LVx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mzk1Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTYtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDAyOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDAzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQwNi1cdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MDc6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDIyPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM0LVx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQzNTpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXHQvKiBjaGVjayBzcmMyIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQwOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ0Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQ4Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgYXV4X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQ5LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDc2LVx0XHQvKiBjaGVjayBhbmQgcmVjb3JkIGxvYWQgb2Ygb2xkIHZhbHVlICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NzpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyMzg9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTEtXHRcdFx0Lypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MzEyOlx0XHRcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTMtXHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODIxMT1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODIyODpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCByZWdubywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjI5LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1Mj1zdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU5LVx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2NhbGxlcl9zYXZlZFtpXV0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNjA6XHRcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNjEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwODI9c3RhdGljIGludCBzZXR1cF9mdW5jX2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBpbnQgY2FsbHNpdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkxMTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTExOTpcdC8qIG9ubHkgaW5jcmVtZW50IGl0IGFmdGVyIGNoZWNrX3JlZ19hcmcoKSBmaW5pc2hlZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkxMjAtXHRzdGF0ZS1cdTAwM2VjdXJmcmFtZSYjNDM7JiM0Mzs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTcxPXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNS1cdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQxNjpcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDE3LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDkxOD1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI1LVx0XHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTI2Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI3LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzNy1cdFx0aWYgKHJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXS50eXBlID09IFNDQUxBUl9WQUxVRSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTM4Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzOS1cdFx0XHRlcnIgPSBlcnIgPzogYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHMoZW52LCBpbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk0Mi1cdFx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk0MzpcdFx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTQ0LVx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTU4LVx0XHRcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NTk6XHRcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2MC1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2NC1cdFx0LyogY2hlY2sgZGVzdCBvcGVyYW5kLCBtYXJrIGFzIHJlcXVpcmVkIGxhdGVyICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NjU6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2Ni1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzAtXHRcdFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzE6XHRcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Mi1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Ni1cdFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzc6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk3LVx0XHQvKiBjaGVjayBkZXN0IG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA5ODpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk5LVx0XHRlcnIgPSBlcnIgPzogYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoZW52LCBpbnNuKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5NDY9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4NS1cdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg2Olx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4Ny1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTkyLVx0XHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5MzpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxODU9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE5Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjE5ODpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxOTktXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjMwNz1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI0LVx0LyogY2hlY2sgd2hldGhlciBpbXBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAocmVnaXN0ZXIgUjYpIGlzIHJlYWRhYmxlICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgY3R4X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ0LVx0XHQvKiBjaGVjayBleHBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzQ1Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ2LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM1Ni1cdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM1NzpcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzU4LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjUzMT1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NTY1LVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NjY6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgcmVnbm8sIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY1NjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjYxNj1zdGF0aWMgaW50IGNoZWNrX2dsb2JhbF9zdWJwcm9nX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjI0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2NjI1Olx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIEJQRl9SRUdfMCwgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjYyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MjM1PXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcyNjc6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQlBGIEluc3RydWN0aW9uIFJlZ2lzdGVyIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGJwZl9pbnNuYCBzdHJ1Y3R1cmUgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZm9jdXNlcyBvbiB0aGUgcmVnaXN0ZXIgZmllbGRzLiBJJiMzOTttIHNlZWluZyBgc3JjX3JlZ2AgYW5kIGBkc3RfcmVnYCwgZWFjaCA0IGJpdHMgd2lkZS4gVGhhdCYjMzk7cyBnb29kLCB0eXBpY2FsIHJlZ2lzdGVyIHNldHVwLiBCdXQsIGFuZCBoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiB0aGF0IGp1bXBzIG91dCBhdCBtZTogaWYgdGhlIGluc3RydWN0aW9uJiMzOTtzIGBCUEZfU1JDKGluc24tJmd0O2NvZGUpYCBmaWVsZCBzaWduaWZpZXMgYSBkaXJlY3QgaW1tZWRpYXRlIHZhbHVlIChgQlBGX0tgKSwgKmRvZXMqIHRoZSBCUEYgdmVyaWZpZXIgYXV0b21hdGljYWxseSBlbmZvcmNlIHRoYXQgdGhlIGBzcmNfcmVnYCBmaWVsZCBpcyBzZXQgdG8gemVybz8gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgY29udmVudGlvbiBpbiBtYW55IGluc3RydWN0aW9uIHNldHMsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0JiMzOTtzIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGhlcmUuCgpUbyBmaWd1cmUgdGhpcyBvdXQgZGVmaW5pdGl2ZWx5LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHZlcmlmaWVyJiMzOTtzIGNvZGUuIE15IGd1dCBzYXlzIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgdGhlIGFuc3dlciB3aXRoaW4gYHJlcGxhY2VfbWFwX2ZkX3dpdGhfbWFwX3B0cmAgb3IgcGVyaGFwcyBpbiB0aGUgbWFpbiBgYnBmX2NoZWNrYCBmdW5jdGlvbi4gVGhlc2UgYXJlIHRoZSB0d28gcHJpbWFyeSBsb2NhdGlvbnMgd2hlcmUgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyByZWxhdGVkIHRvIGluc3RydWN0aW9uIHZhbGlkYXRpb24gYW5kIHJlc291cmNlIHN1YnN0aXR1dGlvbiB3b3VsZCByZXNpZGUuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBmaWxlcyBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIGF0IHRoZSBiaXQgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NyY19yZWcgIT0gMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwOTY9c3RhdGljIGludCBjaGVja19hbmRfcmVzb2x2ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEyMy1cdFx0XHRpZiAoaSA9PSBpbnNuX2NudCAtIDEgfHwgaW5zblsxXS5jb2RlICE9IDAgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODEyNDpcdFx0XHQgICAgaW5zblsxXS5kc3RfcmVnICE9IDAgfHwgaW5zblsxXS5zcmNfcmVnICE9IDAgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEyNS1cdFx0XHQgICAgaW5zblsxXS5vZmYgIT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBBTFUgT3BlcmF0aW9uIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBBTFUgb3BlcmF0aW9uIHZlcmlmaWNhdGlvbiBpcyBmdW5jdGlvbmluZy4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY2hlY2tfYWx1X29wYCBmdW5jdGlvbi4gSSBhbHJlYWR5IGhhdmUgYSBzdHJvbmcgaW50dWl0aW9uIGFib3V0IHdoZXJlIHRoZSBsaWtlbHkgaXNzdWVzIG1pZ2h0IGJlLCBnaXZlbiBwYXN0IGV4cGVyaWVuY2VzIHdpdGggQlBGIHZlcmlmaWVyIGRlc2lnbiBhbmQgY29tbW9uIHBpdGZhbGxzLiBJJiMzOTttIGFudGljaXBhdGluZyBsb29raW5nIGF0IHJlZ2lzdGVyIGNvbnN0cmFpbnRzLCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMsIGFuZCBwZXJoYXBzIHRoZSBoYW5kbGluZyBvZiBkaWZmZXJlbnQgZGF0YSB3aWR0aHMgb3Igc2lnbmVkbmVzcyBjb252ZXJzaW9ucyB3aXRoaW4gdGhlc2UgYXJpdGhtZXRpYyBhbmQgbG9naWNhbCBvcGVyYXRpb25zLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiBpdHMgYXBwcm9hY2ggdG8gaGFuZGxpbmcgZWRnZSBjYXNlcyBhbmQgaG93IHRoZSB2ZXJpZmllciBlbnN1cmVzIHRoYXQgYW4gQUxVIG9wIHdvbiYjMzk7dCBpbnRyb2R1Y2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9yIHZpb2xhdGUgYW55IHNhZmV0eSBndWFyYW50ZWVzLiBJcyBpdCB1c2luZyByYW5nZSBhbmFseXNpcz8gQ29uc3RhbnQgcHJvcGFnYXRpb24/IFN5bWJvbGljIGV4ZWN1dGlvbj8gVGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaGVyZSBhcmUgY3JpdGljYWwgZm9yIHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ5MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0OTE4Olx0c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuMTQ5MTk6XHR7XG4xNDkyMDpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuMTQ5MjE6XHRcdHU4IG9wY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xuMTQ5MjI6XHRcdGludCBlcnI7XG4xNDkyMzpcdFxuMTQ5MjQ6XHRcdGlmIChvcGNvZGUgPT0gQlBGX0VORCB8fCBvcGNvZGUgPT0gQlBGX05FRykge1xuMTQ5MjU6XHRcdFx0LyogY2hlY2sgc3JjIG9wZXJhbmQgKi9cbjE0OTI2Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG4xNDkyNzpcdFx0XHRpZiAoZXJyKVxuMTQ5Mjg6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTQ5Mjk6XHRcbjE0OTMwOlx0XHRcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnKSkge1xuMTQ5MzE6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIHBvaW50ZXIgYXJpdGhtZXRpYyBwcm9oaWJpdGVkXFxuXCYjMzQ7LFxuMTQ5MzI6XHRcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyk7XG4xNDkzMzpcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMTQ5MzQ6XHRcdFx0fVxuMTQ5MzU6XHRcbjE0OTM2Olx0XHRcdC8qIGNoZWNrIGRlc3Qgb3BlcmFuZCAqL1xuMTQ5Mzc6XHRcdFx0aWYgKHJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXS50eXBlID09IFNDQUxBUl9WQUxVRSkge1xuMTQ5Mzg6XHRcdFx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG4xNDkzOTpcdFx0XHRcdGVyciA9IGVyciA/OiBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhlbnYsIGluc24sXG4xNDk0MDpcdFx0XHRcdFx0XHRcdFx0IFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXSxcbjE0OTQxOlx0XHRcdFx0XHRcdFx0XHQgcmVnc1tpbnNuLVx1MDAzZWRzdF9yZWddKTtcbjE0OTQyOlx0XHRcdH0gZWxzZSB7XG4xNDk0MzpcdFx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XG4xNDk0NDpcdFx0XHR9XG4xNDk0NTpcdFx0XHRpZiAoZXJyKVxuMTQ5NDY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTQ5NDc6XHRcbjE0OTQ4Olx0XHR9IGVsc2UgaWYgKG9wY29kZSA9PSBCUEZfTU9WKSB7XG4xNDk0OTpcdFxuMTQ5NTA6XHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuMTQ5NTE6XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfU1BBQ0VfQ0FTVCkge1xuMTQ5NTI6XHRcdFx0XHRcdGlmICghZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hKSB7XG4xNDk1MzpcdFx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7YWRkcl9zcGFjZV9jYXN0IGluc24gY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHByb2dyYW0gdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCBhcmVuYVxcblwmIzM0Oyk7XG4xNDk1NDpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0OTU1Olx0XHRcdFx0XHR9XG4xNDk1NjpcdFx0XHRcdH1cbjE0OTU3Olx0XG4xNDk1ODpcdFx0XHRcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG4xNDk1OTpcdFx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG4xNDk2MDpcdFx0XHRcdGlmIChlcnIpXG4xNDk2MTpcdFx0XHRcdFx0cmV0dXJuIGVycjtcbjE0OTYyOlx0XHRcdH1cbjE0OTYzOlx0XG4xNDk2NDpcdFx0XHQvKiBjaGVjayBkZXN0IG9wZXJhbmQsIG1hcmsgYXMgcmVxdWlyZWQgbGF0ZXIgKi9cbjE0OTY1Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbjE0OTY2Olx0XHRcdGlmIChlcnIpXG4xNDk2NzpcdFx0XHRcdHJldHVybiBlcnI7XG4xNDk2ODpcdFxuMTQ5Njk6XHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuMTQ5NzA6XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyA9IHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2VzcmNfcmVnO1xuMTQ5NzE6XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyA9IHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2Vkc3RfcmVnO1xuMTQ5NzI6XHRcbjE0OTczOlx0XHRcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCkge1xuMTQ5NzQ6XHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSkge1xuMTQ5NzU6XHRcdFx0XHRcdFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cbjE0OTc2Olx0XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuMTQ5Nzc6XHRcdFx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IDEpIHsgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4xNDk3ODpcdFx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19BUkVOQTtcbjE0OTc5Olx0XHRcdFx0XHRcdFx0LyogUFRSX1RPX0FSRU5BIGlzIDMyLWJpdCAqL1xuMTQ5ODA6XHRcdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbjE0OTgxOlx0XHRcdFx0XHRcdH1cbjE0OTgyOlx0XHRcdFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlb2ZmID09IDApIHtcbjE0OTgzOlx0XHRcdFx0XHRcdC8qIGNhc2U6IFIxID0gUjJcbjE0OTg0Olx0XHRcdFx0XHRcdCAqIGNvcHkgcmVnaXN0ZXIgc3RhdGUgdG8gZGVzdCByZWdcbjE0OTg1Olx0XHRcdFx0XHRcdCAqL1xuMTQ5ODY6XHRcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4xNDk4NzpcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuMTQ5ODg6XHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4xNDk4OTpcdFx0XHRcdFx0fSBlbHNlIHtcbjE0OTkwOlx0XHRcdFx0XHRcdC8qIGNhc2U6IFIxID0gKHM4LCBzMTYgczMyKVIyICovXG4xNDk5MTpcdFx0XHRcdFx0XHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZykpIHtcbjE0OTkyOlx0XHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsXG4xNDk5MzpcdFx0XHRcdFx0XHRcdFx0XCYjMzQ7UiVkIHNpZ24tZXh0ZW5zaW9uIHBhcnQgb2YgcG9pbnRlclxcblwmIzM0OyxcbjE0OTk0Olx0XHRcdFx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuMTQ5OTU6XHRcdFx0XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbjE0OTk2Olx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSkge1xuMTQ5OTc6XHRcdFx0XHRcdFx0XHRib29sIG5vX3NleHQ7XG4xNDk5ODpcdFxuMTQ5OTk6XHRcdFx0XHRcdFx0XHRub19zZXh0ID0gcmVnX3VtYXgoc3JjX3JlZykgXHUwMDNjICgxVUxMIFx1MDAzY1x1MDAzYyAoaW5zbi1cdTAwM2VvZmYgLSAxKSk7XG4xNTAwMDpcdFx0XHRcdFx0XHRcdGlmIChub19zZXh0KVxuMTUwMDE6XHRcdFx0XHRcdFx0XHRcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHNyY19yZWcpO1xuMTUwMDI6XHRcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuMTUwMDM6XHRcdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG4xNTAwNDpcdFx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xuMTUwMDU6XHRcdFx0XHRcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuMTUwMDY6XHRcdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbjE1MDA3Olx0XHRcdFx0XHRcdH0gZWxzZSB7XG4xNTAwODpcdFx0XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuMTUwMDk6XHRcdFx0XHRcdFx0fVxuMTUwMTA6XHRcdFx0XHRcdH1cbjE1MDExOlx0XHRcdFx0fSBlbHNlIHtcbjE1MDEyOlx0XHRcdFx0XHQvKiBSMSA9ICh1MzIpIFIyICovXG4xNTAxMzpcdFx0XHRcdFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpKSB7XG4xNTAxNDpcdFx0XHRcdFx0XHR2ZXJib3NlKGVudixcbjE1MDE1Olx0XHRcdFx0XHRcdFx0XCYjMzQ7UiVkIHBhcnRpYWwgY29weSBvZiBwb2ludGVyXFxuXCYjMzQ7LFxuMTUwMTY6XHRcdFx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuMTUwMTc6XHRcdFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgc3RhcnRpbmcgdG8gdHVybi4KCioqRGlzc2VjdGluZyB0aGUgRGF0YSBGbG93KioKCkhhbmcgb24gYSBzZWNvbmQsIGEga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYGNoZWNrX2FsdV9vcGAsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGVpdGhlciBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgIG9yIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgYmVoYXZpb3IuIFNvLCBteSBmb2N1cyBpcyBub3cgb24gdGhvc2UgZnVuY3Rpb25zLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBjaGVja19hbHVfb3BgLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgc2FuaXRpemVfZXJyYCBpcyB1c2VkLCBzbyB0aGF0IEkgdW5kZXJzdGFuZCB3aGVyZSBpdCBjYW4gY3JlYXRlIGEgcHJvYmxlbSwgYW5kIGhvdyB0aGUgcHJvZ3JhbSBkZWFscyB3aXRoIGl0LiBJIHNob3VsZCB0cmFjZSB0aGUgZXJyb3IgaGFuZGxpbmcgZmxvdyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzc1MDpcdFx0ICovXG4xMzc1MTpcdFx0aWYgKGJhc2VfdHlwZShwdHJfcmVnLVx1MDAzZXR5cGUpID09IFBUUl9UT19NRU0gXHUwMDI2XHUwMDI2IChwdHJfcmVnLVx1MDAzZXR5cGUgXHUwMDI2IFBUUl9VTlRSVVNURUQpKVxuMTM3NTI6XHRcdFx0cmV0dXJuIDA7XG4xMzc1MzpcdFxuMTM3NTQ6XHRcdGlmICghY2hlY2tfcmVnX3NhbmVfb2Zmc2V0X3NjYWxhcihlbnYsIG9mZl9yZWcsIHB0cl9yZWctXHUwMDNldHlwZSkgfHxcbjEzNzU1Olx0XHQgICAgIWNoZWNrX3JlZ19zYW5lX29mZnNldF9wdHIoZW52LCBwdHJfcmVnLCBwdHJfcmVnLVx1MDAzZXR5cGUpKVxuMTM3NTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzc1NzpcdFxuMTM3NTg6XHRcdC8qIHBvaW50ZXIgdHlwZXMgZG8gbm90IGNhcnJ5IDMyLWJpdCBib3VuZHMgYXQgdGhlIG1vbWVudC4gKi9cbjEzNzU5Olx0XHRfX21hcmtfcmVnMzJfdW5ib3VuZGVkKGRzdF9yZWcpO1xuMTM3NjA6XHRcbjEzNzYxOlx0XHRpZiAoc2FuaXRpemVfbmVlZGVkKG9wY29kZSkpIHtcbjEzNzYyOlx0XHRcdHJldCA9IHNhbml0aXplX3B0cl9hbHUoZW52LCBpbnNuLCBwdHJfcmVnLCBvZmZfcmVnLCBkc3RfcmVnLFxuMTM3NjM6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZpbmZvLCBmYWxzZSk7XG4xMzc2NDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM3NjU6XHRcdFx0XHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcbjEzNzY2Olx0XHR9XG4xMzc2NzpcdFxuMTM3Njg6XHRcdHN3aXRjaCAob3Bjb2RlKSB7XG4xMzc2OTpcdFx0Y2FzZSBCUEZfQUREOlxuMTM3NzA6XHRcdFx0LypcbjEzNzcxOlx0XHRcdCAqIGRzdF9yZWcgZ2V0cyB0aGUgcG9pbnRlciB0eXBlIGFuZCBzaW5jZSBzb21lIHBvc2l0aXZlXG4xMzc3MjpcdFx0XHQgKiBpbnRlZ2VyIHZhbHVlIHdhcyBhZGRlZCB0byB0aGUgcG9pbnRlciwgZ2l2ZSBpdCBhIG5ldyAmIzM5O2lkJiMzOTtcbjEzNzczOlx0XHRcdCAqIGlmIGl0JiMzOTtzIGEgUFRSX1RPX1BBQ0tFVC5cbjEzNzc0Olx0XHRcdCAqIHRoaXMgY3JlYXRlcyBhIG5ldyAmIzM5O2Jhc2UmIzM5OyBwb2ludGVyLCBvZmZfcmVnICh2YXJpYWJsZSkgZ2V0c1xuMTM3NzU6XHRcdFx0ICogYWRkZWQgaW50byB0aGUgdmFyaWFibGUgb2Zmc2V0LCBhbmQgd2UgY29weSB0aGUgZml4ZWQgb2Zmc2V0XG4xMzc3NjpcdFx0XHQgKiBmcm9tIHB0cl9yZWcuXG4xMzc3NzpcdFx0XHQgKi9cbjEzNzc4Olx0XHRcdGRzdF9yZWctXHUwMDNlcjY0ID0gY251bTY0X2FkZChwdHJfcmVnLVx1MDAzZXI2NCwgb2ZmX3JlZy1cdTAwM2VyNjQpO1xuMTM3Nzk6XHRcdFx0ZHN0X3JlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9hZGQocHRyX3JlZy1cdTAwM2V2YXJfb2ZmLCBvZmZfcmVnLVx1MDAzZXZhcl9vZmYpO1xuMTM3ODA6XHRcdFx0ZHN0X3JlZy1cdTAwM2VyYXcgPSBwdHJfcmVnLVx1MDAzZXJhdztcbjEzNzgxOlx0XHRcdGlmIChyZWdfaXNfcGt0X3BvaW50ZXIocHRyX3JlZykpIHtcbjEzNzgyOlx0XHRcdFx0aWYgKCFrbm93bilcbjEzNzgzOlx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZWlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4xMzc4NDpcdFx0XHRcdC8qXG4xMzc4NTpcdFx0XHRcdCAqIENsZWFyIHJhbmdlIGZvciB1bmtub3duIGFkZGVuZHMgc2luY2Ugd2UgY2FuJiMzOTt0IGtub3dcbjEzNzg2Olx0XHRcdFx0ICogd2hlcmUgdGhlIHBrdCBwb2ludGVyIGVuZGVkIHVwLiBBbHNvIGNsZWFyIEFUX1BLVF9FTkQgL1xuMTM3ODc6XHRcdFx0XHQgKiBCRVlPTkRfUEtUX0VORCBmcm9tIHByaW9yIGNvbXBhcmlzb24gYXMgYW55IHBvaW50ZXJcbjEzNzg4Olx0XHRcdFx0ICogYXJpdGhtZXRpYyBpbnZhbGlkYXRlcyB0aGVtLlxuMTM3ODk6XHRcdFx0XHQgKi9cbjEzNzkwOlx0XHRcdFx0aWYgKCFrbm93biB8fCBkc3RfcmVnLVx1MDAzZXJhbmdlIFx1MDAzYyAwKVxuMTM3OTE6XHRcdFx0XHRcdG1lbXNldChcdTAwMjZkc3RfcmVnLVx1MDAzZXJhdywgMCwgc2l6ZW9mKGRzdF9yZWctXHUwMDNlcmF3KSk7XG4xMzc5MjpcdFx0XHR9XG4xMzc5MzpcdFx0XHRicmVhaztcbjEzNzk0Olx0XHRjYXNlIEJQRl9TVUI6XG4xMzc5NTpcdFx0XHRpZiAoZHN0X3JlZyAhPSBwdHJfcmVnKSB7XG4xMzc5NjpcdFx0XHRcdC8qIHNjYWxhciAtPSBwb2ludGVyLiAgQ3JlYXRlcyBhbiB1bmtub3duIHNjYWxhciAqL1xuMTM3OTc6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIHRyaWVkIHRvIHN1YnRyYWN0IHBvaW50ZXIgZnJvbSBzY2FsYXJcXG5cJiMzNDssXG4xMzc5ODpcdFx0XHRcdFx0ZHN0KTtcbjEzNzk5Olx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIENvc21ldGljIEVycm9yIE1lc3NhZ2UgQ29ycmVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHN1YnRsZSBjaGFuZ2UgaW4gYHNhbml0aXplX2VycmAuIEl0IHNlZW1zIGxpa2UgYHNhbml0aXplX2VycmAgaXMgY2FsbGVkIHdoZW4gdGhlcmUmIzM5O3MgYW4gaXNzdWUgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBhZGp1c3RtZW50cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgIGFuZCBgYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSBlcnJvciBtZXNzYWdlIGlkZW50aWZpZXMgdGhlIHByb2JsZW1hdGljIHJlZ2lzdGVyLgoKQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgdXNlZCBgcmVnc1tzcmNdLnR5cGVgIGluIHRoZSBgdmVyYm9zZWAgc3RhdGVtZW50IHRvIGRldGVybWluZSB3aGljaCByZWdpc3RlciB0byByZXBvcnQuIE5vdywgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgY29uZGl0aW9uYWxseSB1c2luZyBgZHN0YCAoZGVzdGluYXRpb24gcmVnaXN0ZXIpIG9yIGBzcmNgIChzb3VyY2UgcmVnaXN0ZXIpIGJhc2VkIG9uIGBzcmNfaXNfaW1tYCBvciBgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGNhc2VzIHdpdGhpbiBgQlBGX0tgIGluc3RydWN0aW9ucy4KClRoZSBsb2dpYyBzYXlzIHRoYXQgaWYgYHNyY19pc19pbW1gIGlzIHRydWUsIG9yIHRoZSBzb3VyY2UgcmVnaXN0ZXImIzM5O3MgdHlwZSBpcyBhIHNjYWxhciB2YWx1ZSwgdGhlbiB0aGUgdGFyZ2V0IHJlZ2lzdGVyIChgZHN0YCkgaXMgcHJpbnRlZDsgb3RoZXJ3aXNlLCB0aGUgc291cmNlIHJlZ2lzdGVyIChgc3JjYCkgaXMgcHJpbnRlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS4gVGhpcyBpcyBhbGwgYWJvdXQgbWFraW5nIHRoZSBlcnJvciBtZXNzYWdlIG1vcmUgaW5mb3JtYXRpdmUuIFRoZSBjb2RlIGlzIHRyeWluZyB0byBwcmludCB0aGUgY29ycmVjdCByZWdpc3RlciBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzb3VyY2Ugb3BlcmFuZCBpcyBhbiBpbW1lZGlhdGUgdmFsdWUgb3IgYSByZWdpc3Rlci4KClRoZSBrZXkgaW5zaWdodCBpcyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiBgQlBGX0tgIGluc3RydWN0aW9ucy4gSW4gdGhlc2UgaW5zdHJ1Y3Rpb25zLCBgaW5zbi0mZ3Q7c3JjX3JlZ2AgaXMgdXN1YWxseSAwLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgcHJpbnRpbmcgJiMzNDtSMCYjMzQ7IGV2ZW4gaWYgdGhlIG9wZXJhdGlvbiB3YXMgaW52YWxpZC4gTm93IGl0IG1pZ2h0IHByaW50IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbnN0ZWFkLiBUaGlzIGlzIHB1cmVseSBhIGNvc21ldGljIGltcHJvdmVtZW50IGZvciB0aGUgZXJyb3IgbWVzc2FnZSwgbWFraW5nIGl0IG1vcmUgYWNjdXJhdGUgYW5kIGhlbHBmdWwgZm9yIGRlYnVnZ2luZy4KCk5vdywgYSBwb3RlbnRpYWwgY29uY2VybiBwb3BwZWQgdXA6IENhbiBgc3JjYCBldmVuIGJlIG91dCBvZiBib3VuZHMsIGVzcGVjaWFsbHkgZ2l2ZW4gYGluc24tJmd0O3NyY19yZWdgPyBJZiBgaW5zbi0mZ3Q7c3JjX3JlZ2Agd2VyZSBncmVhdGVyIHRoYW4gMTAsIGFjY2Vzc2luZyBgcmVnc1tzcmNdYCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLCByaWdodD8gQnV0IHdhaXQgYSBtaW51dGUsIGlzbiYjMzk7dCB0aGVyZSBhIGNoZWNrIGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIHJlZ2lzdGVyIGFyZ3VtZW50cyBpbiBgY2hlY2tfYWx1X29wYD8gTG9va2luZyBtb3JlIGNsb3NlbHksIGl0IGFwcGVhcnMgdGhhdCBgY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tJmd0O3NyY19yZWcsIFNSQ19PUClgIGlzIE5PVCBjYWxsZWQgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBUaGlzIG5lZWRzIG1vcmUgdmVyaWZpY2F0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBpbnNuLSZndDtzcmNfcmVnYCBhY3R1YWxseSAqaXMqIGNoZWNrZWQgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBUaGlzIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZ2lzdGVyIGluZGV4IGBzcmNgIGlzIGFsd2F5cyB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgYHJlZ3NgIGFycmF5LCBhbmQgbm90IGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luc24tXHUwMDNlc3JjX3JlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ1PWJvb2wgYnBmX2lzX21heV9nb3RvX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU0Ni17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTQ3Olx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfTUFZX0dPVE87XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTQ4LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mjk5Nz1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMwMTYtXHRcdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzAxNzpcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDE4LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjMxPXN0YXRpYyBjb25zdCBjaGFyICpkaXNhc21fa2Z1bmNfbmFtZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIzNjpcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMzctXHRcdHJldHVybiBOVUxMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzQxPXN0YXRpYyBpbnQgY2hlY2tfbG9hZF9tZW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzU5LVx0LyogY2hlY2sgc3JjIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzYwOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzYxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzY5Olx0c3JjX3JlZ190eXBlID0gcmVnc1tpbnNuLVx1MDAzZXNyY19yZWddLnR5cGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3MC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3My1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNzQ6XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCByZWdzICYjNDM7IGluc24tXHUwMDNlc3JjX3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cdTAwM2VzcmNfcmVnKSwgaW5zbi1cdTAwM2VvZmYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3NS1cdFx0XHQgICAgICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgQlBGX1JFQUQsIGluc24tXHUwMDNlZHN0X3JlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM4ND1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTQtXHRpZiAoaXNfc3RhY2tfYXJnX3N0eChpbnNuKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzOTU6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5Ni1cdFx0aWYgKGVycilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mzk3LVx0XHRcdHJldHVybiBlcnI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5ODpcdFx0cmV0dXJuIGNoZWNrX3N0YWNrX2FyZ193cml0ZShlbnYsIHN0YXRlLCBpbnNuLVx1MDAzZW9mZiwgcmVncyAmIzQzOyBpbnNuLVx1MDAzZXNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTktXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDAyOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDAzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQxNC1cdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2Vkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVx1MDAzZWRzdF9yZWcpLCBpbnNuLVx1MDAzZW9mZixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDE1Olx0XHRcdCAgICAgICBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIGluc24tXHUwMDNlc3JjX3JlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDE2LVx0XHRcdCAgICAgICBzdHJpY3RfYWxpZ25tZW50X29uY2UsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQyMj1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzNC1cdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MzU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDU3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0NTg6XHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDU5Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIGxlYWtzIGFkZHIgaW50byBtZW1cXG5cJiMzNDssIGluc24tXHUwMDNlc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ2MC1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzMtXHRcdGVsc2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDc0Olx0XHRcdGxvYWRfcmVnID0gaW5zbi1cdTAwM2VzcmNfcmVnO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY1MTQ9c3RhdGljIGludCBjaGVja19hdG9taWNfbG9hZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTIyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MjM6XHRpZiAoIWF0b21pY19wdHJfdHlwZV9vayhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTI0LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7QlBGX0FUT01JQyBsb2FkcyBmcm9tIFIlZCAlcyBpcyBub3QgYWxsb3dlZFxcblwmIzM0Oyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTI1Olx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTI2Olx0XHRcdHJlZ190eXBlX3N0cihlbnYsIHJlZ19zdGF0ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZyktXHUwMDNldHlwZSkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MjctXHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzQzMT1zdGF0aWMgaW50IHNhbml0aXplX3NwZWN1bGF0aXZlX3BhdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0NDQtXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0NDU6XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0NDYtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM1NjA9c3RhdGljIGludCBzYW5pdGl6ZV9lcnIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgcmVhc29uKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU2My1cdGNvbnN0IGNoYXIgKm9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FERCA/IFwmIzM0O2FkZFwmIzM0OyA6IFwmIzM0O3N1YlwmIzM0Oztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzU2NDpcdHUzMiBkc3QgPSBpbnNuLVx1MDAzZWRzdF9yZWcsIHNyYyA9IGluc24tXHUwMDNlc3JjX3JlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU2NS1cdGJvb2wgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ3NTA9c3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDc2Mi1cdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ3NjM6XHRcdHNyY19yZWcgPSBcdTAwMjZyZWdzW2luc24tXHUwMDNlc3JjX3JlZ107XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3NjQtXHRlbHNlXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODE3LVx0XHRcdC8qIHBvaW50ZXIgJiM0Mzs9IHNjYWxhciAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODE4Olx0XHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxOS1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgyNC1cdFx0XHQvKiBpZiBkc3RfcmVnIGlzIHByZWNpc2UsIHNyY19yZWcgc2hvdWxkIGJlIHByZWNpc2UgYXMgd2VsbCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODI1Olx0XHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgyNi1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDg3My1cdCAgICBkc3RfcmVnLVx1MDAzZWlkIFx1MDAyNlx1MDAyNiBpc19yZWdfY29uc3Qoc3JjX3JlZywgYWx1MzIpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODc0Olx0ICAgICEoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgPT0gaW5zbi1cdTAwM2Vkc3RfcmVnKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODc1LVx0XHR1NjQgdmFsID0gcmVnX2NvbnN0X3ZhbHVlKHNyY19yZWcsIGFsdTMyKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ5MTg9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk1OC1cdFx0XHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTU5Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjAtXHRcdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjktXHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk3MDpcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyA9IHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2VzcmNfcmVnO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTcxLVx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnID0gcmVncyAmIzQzOyBpbnNuLVx1MDAzZWRzdF9yZWc7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTkwLVx0XHRcdFx0XHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTkxOlx0XHRcdFx0XHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk5Mi1cdFx0XHRcdFx0XHR2ZXJib3NlKGVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk5My1cdFx0XHRcdFx0XHRcdFwmIzM0O1IlZCBzaWduLWV4dGVuc2lvbiBwYXJ0IG9mIHBvaW50ZXJcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5OTQ6XHRcdFx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTk1LVx0XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTAxMi1cdFx0XHRcdC8qIFIxID0gKHUzMikgUjIgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTAxMzpcdFx0XHRcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDE0LVx0XHRcdFx0XHR2ZXJib3NlKGVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTAxNS1cdFx0XHRcdFx0XHRcJiMzNDtSJWQgcGFydGlhbCBjb3B5IG9mIHBvaW50ZXJcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwMTY6XHRcdFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTAxNy1cdFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDcwLVx0XHRcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDcxOlx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzItXHRcdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU3MjY9c3RhdGljIGJvb2wgdHJ5X21hdGNoX3BrdF9wb2ludGVycyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzU1LVx0XHRcdFx0XHQgICAgICAgc3JjX3JlZy1cdTAwM2V0eXBlLCB0cnVlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTc1NjpcdFx0XHRtYXJrX3BrdF9lbmQodGhpc19icmFuY2gsIGluc24tXHUwMDNlc3JjX3JlZywgZmFsc2UpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzU3LVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTc3Ni1cdFx0XHRcdFx0ICAgICAgIHNyY19yZWctXHUwMDNldHlwZSwgZmFsc2UpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1Nzc3Olx0XHRcdG1hcmtfcGt0X2VuZChvdGhlcl9icmFuY2gsIGluc24tXHUwMDNlc3JjX3JlZywgdHJ1ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU3NzgtXHRcdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Nzk3LVx0XHRcdFx0XHQgICAgICAgc3JjX3JlZy1cdTAwM2V0eXBlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3OTg6XHRcdFx0bWFya19wa3RfZW5kKHRoaXNfYnJhbmNoLCBpbnNuLVx1MDAzZXNyY19yZWcsIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Nzk5LVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTgxOC1cdFx0XHRcdFx0ICAgICAgIHNyY19yZWctXHUwMDNldHlwZSwgdHJ1ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4MTk6XHRcdFx0bWFya19wa3RfZW5kKG90aGVyX2JyYW5jaCwgaW5zbi1cdTAwM2VzcmNfcmVnLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4MjAtXHRcdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1OTQ2PXN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5OTItXHRcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTkzOlx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTk0LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5NzpcdFx0c3JjX3JlZyA9IFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5OC1cdFx0aWYgKCEocmVnX2lzX3BrdF9wb2ludGVyX2FueShkc3RfcmVnKSBcdTAwMjZcdTAwMjYgcmVnX2lzX3BrdF9wb2ludGVyX2FueShzcmNfcmVnKSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5OTk6XHRcdCAgICBpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDAwLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtSJWQgcG9pbnRlciBjb21wYXJpc29uIHByb2hpYml0ZWRcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMDE6XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDAyLVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAzOC1cdFx0ICAgICFfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHNyY19yZWcpKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MDM5Olx0XHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjA0MC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDEtXHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTAyOlx0XHRvdGhlcl9icmFuY2hfcmVnc1tpbnNuLVx1MDAzZXNyY19yZWddID0gZW52LVx1MDAzZXRydWVfcmVnMjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjEwMy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDUtXHQgICAgc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjEwNjpcdCAgICAhV0FSTl9PTl9PTkNFKHNyY19yZWctXHUwMDNlaWQgIT0gb3RoZXJfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXS5pZCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjEwNy1cdFx0c3luY19saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBzcmNfcmVnLCBcdTAwMjZsaW5rZWRfcmVncyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxMDg6XHRcdHN5bmNfbGlua2VkX3JlZ3MoZW52LCBvdGhlcl9icmFuY2gsIFx1MDAyNm90aGVyX2JyYW5jaF9yZWdzW2luc24tXHUwMDNlc3JjX3JlZ10sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDktXHRcdFx0XHQgXHUwMDI2bGlua2VkX3JlZ3MpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE0OC1cdFx0XHRpZiAodHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVx1MDAzZXR5cGUpKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTQ5Olx0XHRcdFx0bWFya19wdHJfbm90X251bGxfcmVnKFx1MDAyNmVxX2JyYW5jaF9yZWdzW2luc24tXHUwMDNlc3JjX3JlZ10pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MTUwLVx0XHRcdGVsc2Vcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxNzEtXHRcdFx0XHQgICAgICBvcGNvZGUgPT0gQlBGX0pFUSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxNzI6XHR9IGVsc2UgaWYgKCF0cnlfbWF0Y2hfcGt0X3BvaW50ZXJzKGluc24sIGRzdF9yZWcsIFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE3My1cdFx0XHRcdFx0ICAgdGhpc19icmFuY2gsIG90aGVyX2JyYW5jaCkgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MTg1PXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMDItXHRkc3RfcmVnID0gXHUwMDI2cmVnc1tpbnNuLVx1MDAzZWRzdF9yZWddO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjAzOlx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSAwKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMDQtXHRcdHU2NCBpbW0gPSAoKHU2NCkoaW5zbiAmIzQzOyAxKS1cdTAwM2VpbW0gXHUwMDNjXHUwMDNjIDMyKSB8ICh1MzIpaW5zbi1cdTAwM2VpbW07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjE2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjE3Olx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0JURl9JRCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjE4LVx0XHRkc3RfcmVnLVx1MDAzZXR5cGUgPSBhdXgtXHUwMDNlYnRmX3Zhci5yZWdfdHlwZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMzMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyMzQ6XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fRlVOQykge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjM1LVx0XHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXg7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjU0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjU1Olx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9WQUxVRSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjU2Olx0ICAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjI1Ny1cdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJFTkEpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyNjctXHRcdC8qIFdlIHdhbnQgcmVnLVx1MDAzZWlkIHRvIGJlIHNhbWUgKDApIGFzIG1hcF92YWx1ZSBpcyBub3QgZGlzdGluY3QgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI2ODpcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX0ZEIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyNjk6XHRcdCAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjI3MC1cdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gQ09OU1RfUFRSX1RPX01BUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYzMDc9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM0NC1cdFx0LyogY2hlY2sgZXhwbGljaXQgc291cmNlIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM0NTpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM0Ni1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyMzU9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI4Ny1cdFx0XHRpZiAoZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfbG9ja3MpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI4ODpcdFx0XHRcdGlmICgoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9SRUdfMCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI4OS1cdFx0XHRcdCAgICAgaW5zbi1cdTAwM2VpbW0gIT0gQlBGX0ZVTkNfc3Bpbl91bmxvY2sgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyOTAtXHRcdFx0XHQgICAgIGluc24tXHUwMDNlaW1tICE9IEJQRl9GVU5DX2twdHJfeGNoZykgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI5MTpcdFx0XHRcdCAgICAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI5Mi1cdFx0XHRcdCAgICAgKGluc24tXHUwMDNlb2ZmICE9IDAgfHwgIWtmdW5jX3NwaW5fYWxsb3dlZChpbnNuLVx1MDAzZWltbSkpKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMwMC1cdFx0XHRcdGN1cl9mdW5jKGVudiktXHUwMDNlbm9fc3RhY2tfYXJnX2xvYWQgPSB0cnVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzAxOlx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzAyLVx0XHRcdFx0cmV0dXJuIGNoZWNrX2Z1bmNfY2FsbChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMDM6XHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczMDQtXHRcdFx0XHRyZXR1cm4gY2hlY2tfa2Z1bmNfY2FsbChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTA0PXN0YXRpYyBpbnQgY2hlY2tfYWx1X2ZpZWxkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTEwLVx0Y2FzZSBCUEZfTkVHOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTExOlx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9LIHx8IGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzkxMi1cdFx0ICAgIGluc24tXHUwMDNlb2ZmICE9IDAgfHwgaW5zbi1cdTAwM2VpbW0gIT0gMCkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzkxNy1cdGNhc2UgQlBGX0VORDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzkxODpcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHwgaW5zbi1cdTAwM2VvZmYgIT0gMCB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTE5LVx0XHQgICAgKGluc24tXHUwMDNlaW1tICE9IDE2IFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSAhPSAzMiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gIT0gNjQpIHx8XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTQyLVx0XHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk0MzpcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXHUwMDNlb2ZmICE9IDApIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk0NC1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7QlBGX01PViB1c2VzIHJlc2VydmVkIGZpZWxkc1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTY0LVx0XHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk2NTpcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NjYtXHRcdFx0ICAgKGluc24tXHUwMDNlb2ZmICE9IDAgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmICE9IDEpIHx8XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTc4PXN0YXRpYyBpbnQgY2hlY2tfam1wX2ZpZWxkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTg1LVx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9LIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5ODY6XHRcdCAgICAoaW5zbi1cdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgIT0gMCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk4NzpcdFx0ICAgIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1BTRVVET19DQUxMIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTg4Olx0XHQgICAgIGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5ODktXHRcdCAgICBpbnNuLVx1MDAzZWRzdF9yZWcgIT0gQlBGX1JFR18wIHx8IGNsYXNzID09IEJQRl9KTVAzMikge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk5NS1cdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTk2Olx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXHUwMDNlaW1tICE9IDAgfHwgaW5zbi1cdTAwM2VvZmYgIT0gMCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTk3LVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0JQRl9KQXxCUEZfWCB1c2VzIHJlc2VydmVkIGZpZWxkc1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTk5LVx0XHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODAwMDpcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXHUwMDNlZHN0X3JlZyAhPSBCUEZfUkVHXzAgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODAwMS1cdFx0XHQgICAoY2xhc3MgPT0gQlBGX0pNUCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gIT0gMCkgfHxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMDgtXHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0sgfHwgaW5zbi1cdTAwM2VpbW0gIT0gMCB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDA5Olx0XHQgICAgaW5zbi1cdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCB8fCBpbnNuLVx1MDAzZWRzdF9yZWcgIT0gQlBGX1JFR18wIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMTAtXHRcdCAgICBjbGFzcyA9PSBCUEZfSk1QMzIpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMTUtXHRjYXNlIEJQRl9KQ09ORDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODAxNjpcdFx0aWYgKGluc24tXHUwMDNlY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgfHwgaW5zbi1cdTAwM2VzcmNfcmVnICE9IEJQRl9NQVlfR09UTyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDE3LVx0XHQgICAgaW5zbi1cdTAwM2Vkc3RfcmVnIHx8IGluc24tXHUwMDNlaW1tKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDI3LVx0XHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODAyODpcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMjktXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0JQRl9KTVAvSk1QMzIgdXNlcyByZXNlcnZlZCBmaWVsZHNcXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODAzNj1zdGF0aWMgaW50IGNoZWNrX2luc25fZmllbGRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwNTctXHRjYXNlIEJQRl9TVDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA1ODpcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX01FTSB8fCBpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwNTktXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0JQRl9TVCB1c2VzIHJlc2VydmVkIGZpZWxkc1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDcxLVx0XHRcdCAgICBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDcyOlx0XHRcdCAgICAobW9kZSA9PSBCUEZfQUJTIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDczLVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0JQRl9MRF9bQUJTfElORF0gdXNlcyByZXNlcnZlZCBmaWVsZHNcXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODA5Nj1zdGF0aWMgaW50IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTExLVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMTI6XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgXHUwMDNlPSBNQVhfQlBGX1JFRyBcdTAwMjZcdTAwMjYgIWlzX3N0YWNrX2FyZ19sZHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExMzpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIGlzIGludmFsaWRcXG5cJiMzNDssIGluc24tXHUwMDNlc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTQtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MjU4PXN0YXRpYyB2b2lkIGNvbnZlcnRfcHNldWRvX2xkX2ltbTY0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MjY2LVx0XHRcdGNvbnRpbnVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MjY3Olx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fRlVOQylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODI2OC1cdFx0XHRjb250aW51ZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODI2OTpcdFx0aW5zbi1cdTAwM2VzcmNfcmVnID0gMDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODI3MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4ODgKCQkJCQkJCW91dHB1dDogNzYKCQkJCQkJCXRob3VnaHRzOiAxNzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEVycm9yIE1lc3NhZ2UgQ2hhbmdlIGluIEJQRiBWZXJpZmllcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgY2hlY2tfYW5kX3Jlc29sdmVfaW5zbnNgLCBJIHNlZSBhIGd1YXJkIGVuc3VyaW5nIGBpbnNuLSZndDtzcmNfcmVnYCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBgTUFYX0JQRl9SRUdgLiBUaGF0JiMzOTtzIGdvb2QsIHNvIGByZWdzW2luc24tJmd0O3NyY19yZWddYCBpcyBhbHdheXMgdmFsaWRseSBhY2Nlc3NlZC4gQnV0IHRoZW4sIEkgcmVtZW1iZXIgdGhlIGBjaGVja19hbHVfZmllbGRzYCBmdW5jdGlvbiwgYW5kIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY2hlY2sgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLCB3aGVyZSBgaW5zbi0mZ3Q7c3JjX3JlZ2AgKm11c3QqIGJlIGBCUEZfUkVHXzBgICh3aGljaCBpcyB6ZXJvKS4KCkVzc2VudGlhbGx5LCBgY2hlY2tfYWx1X2ZpZWxkc2AgZ3VhcmFudGVlcyB0aGF0IGlmIGFuIGluc3RydWN0aW9uIHVzZXMgYW4gaW1tZWRpYXRlIChgQlBGX0tgKSwgdGhlIHNvdXJjZSByZWdpc3RlciBpcyBhbHdheXMgemVyby4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBgc2FuaXRpemVfZXJyYCBmdW5jdGlvbiwgdGhlIGBzcmNgIHJlZ2lzdGVyIGlzIGFsd2F5cyAwIHdoZW4gYHNyY19pc19pbW1gIGlzIHRydWUuIGByZWdzWzBdYCB3aWxsIGFsd2F5cyBiZSBpbiBib3VuZHMuCgpOb3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoLCB0aGUgY2hhbmdlIGlzIHB1cmVseSBjb3NtZXRpYy4gSXQmIzM5O3MgYWJvdXQgaG93IHRoZSBlcnJvciBtZXNzYWdlIGlzIGZvcm1hdHRlZC4gVGhlIG9yaWdpbmFsIGNvZGUgcHJpbnRlZCBgc3JjYCAod2hpY2ggaXMgemVybykgaW4gdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gd2FzIGFuIGltbWVkaWF0ZSBBTFUgb3BlcmF0aW9uIG9uIGEgcG9pbnRlci4gTm93LCBpdCBwcmludHMgYGRzdGAgaW5zdGVhZCBpZiBgc3JjX2lzX2ltbWAgb3IgYHJlZ3Nbc3JjXS50eXBlYCBpcyBgU0NBTEFSX1ZBTFVFYC4gSG93ZXZlciwgaXQgd291bGQgaGF2ZSBwcmludGVkIGBkc3RgIGFueXdheSBpZiBgcmVnc1swXS50eXBlYCB3YXMgYFNDQUxBUl9WQUxVRWAsIHNvIHRoZSBpbXBhY3QgaXMgbWluaW1hbC4gVGhlIGtleSByZWFsaXphdGlvbiBpcyB0aGF0IHByaW50aW5nICYjMzQ7UjAgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uJiMzNDsgaXMgbWlzbGVhZGluZyBiZWNhdXNlIFIwIGlzbiYjMzk7dCByZWFsbHkgaW52b2x2ZWQgaW4gdGhlIG9wZXJhdGlvbiAoaXQmIzM5O3MgdGhlIGltbWVkaWF0ZSB2YWx1ZSkuIFRoaXMgcGF0Y2gganVzdCBtYWtlcyB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlIGFjY3VyYXRlIGJ5IHBvaW50aW5nIHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4KClRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IG1vZGlmeSBleGVjdXRpb24gcGF0aHMsIHJldHVybiB2YWx1ZXMsIG9yIGFmZmVjdCB0aGUgb3ZlcmFsbCBsb2dpYyBvZiB0aGUgdmVyaWZpZXIuIEFmdGVyIHJlLWV4YW1pbmluZyB0aGUgY29tcGxldGUgZGlmZiwgY29uZmlybWluZyBpdCYjMzk7cyBsaW1pdGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBldmFsdWF0aW9uIHNob3VsZCBiZSBgZmFsc2VgLiBJdCYjMzk7cyBwdXJlbHkgYSBkaWFnbm9zdGljIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHJlZ2lzdGVyIG51bWJlciBwcmludGVkIGluIGFuIGVycm9yIG1lc3NhZ2UgKHZpYSB2ZXJib3NlKCkpIHdoZW4gYSBCUEYgcG9pbnRlciBhcml0aG1ldGljIHNhbml0aXphdGlvbiBlcnJvciBvY2N1cnMgd2l0aCBhbiBpbW1lZGlhdGUgdmFsdWUuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdywgc3RhdGUsIG9yIHJldHVybiB2YWx1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSByZWdpc3RlciBudW1iZXIgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlICh2aWEgdmVyYm9zZSgpKSB3aGVuIGEgQlBGIHBvaW50ZXIgYXJpdGhtZXRpYyBzYW5pdGl6YXRpb24gZXJyb3Igb2NjdXJzIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHN0YXRlLCBvciByZXR1cm4gdmFsdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjA0LjUzMDk2NDgyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTk4NDAzNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSByZWdpc3RlciBudW1iZXIgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlICh2aWEgdmVyYm9zZSgpKSB3aGVuIGEgQlBGIHBvaW50ZXIgYXJpdGhtZXRpYyBzYW5pdGl6YXRpb24gZXJyb3Igb2NjdXJzIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHN0YXRlLCBvciByZXR1cm4gdmFsdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6MDQuNTMwOTcyMjk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3NTg4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ODFmOTc2YTc5ZDkyNzgxOTcyYTU5OGQ0YmI4MzIzMTJkNTc5N2Q5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTk6Mjk6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZmRjNWZiYjFmNzhjYS4uZTVhODU0N2FkNzIzMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTM1NjIsNiArMTM1NjIsNyBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc1xcbiBcXHRzdGF0aWMgY29uc3QgY2hhciAqZXJyID0gXFxcInBvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIGl0IHByb2hpYml0ZWQgZm9yICFyb290XFxcIjtcXG4gXFx0Y29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FERCA/IFxcXCJhZGRcXFwiIDogXFxcInN1YlxcXCI7XFxuIFxcdHUzMiBkc3QgPSBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBzcmMgPSBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbitcXHRib29sIHNyY19pc19pbW0gPSBCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LO1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XFxuIFxcbiBcXHRzd2l0Y2ggKHJlYXNvbikge1xcbkBAIC0xMzU3MSw3ICsxMzU3Miw3IEBAIHN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFJFQVNPTl9UWVBFOlxcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBoYXMgcG9pbnRlciB3aXRoIHVuc3VwcG9ydGVkIGFsdSBvcGVyYXRpb24sICVzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyZWdzW3NyY10udHlwZSA9PSBTQ0FMQVJfVkFMVUUgPyBkc3QgOiBzcmMsIGVycik7XFxuK1xcdFxcdFxcdHNyY19pc19pbW0gfHwgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFID8gZHN0IDogc3JjLCBlcnIpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBSRUFTT05fUEFUSFM6XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUiVkIHRyaWVkIHRvICVzIGZyb20gZGlmZmVyZW50IG1hcHMsIHBhdGhzIG9yIHNjYWxhcnMsICVzXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTowNC45ODg0MzcyODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MDc0MDg5MzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgcmVnaXN0ZXIgbnVtYmVyIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSAodmlhIHZlcmJvc2UoKSkgd2hlbiBhIEJQRiBwb2ludGVyIGFyaXRobWV0aWMgc2FuaXRpemF0aW9uIGVycm9yIG9jY3VycyB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBzdGF0ZSwgb3IgcmV0dXJuIHZhbHVlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4MWY5NzZhNzlkOTI3ODE5NzJhNTk4ZDRiYjgzMjMxMmQ1Nzk3ZDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjI5OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBmZGM1ZmJiMWY3OGNhLi5lNWE4NTQ3YWQ3MjMxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMzU2Miw2ICsxMzU2Miw3IEBAIHN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zXG4gXHRzdGF0aWMgY29uc3QgY2hhciAqZXJyID0gXCJwb2ludGVyIGFyaXRobWV0aWMgd2l0aCBpdCBwcm9oaWJpdGVkIGZvciAhcm9vdFwiO1xuIFx0Y29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUREID8gXCJhZGRcIiA6IFwic3ViXCI7XG4gXHR1MzIgZHN0ID0gaW5zbi1cdTAwM2Vkc3RfcmVnLCBzcmMgPSBpbnNuLVx1MDAzZXNyY19yZWc7XG4rXHRib29sIHNyY19pc19pbW0gPSBCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0s7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XG4gXG4gXHRzd2l0Y2ggKHJlYXNvbikge1xuQEAgLTEzNTcxLDcgKzEzNTcyLDcgQEAgc3RhdGljIGludCBzYW5pdGl6ZV9lcnIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFQVNPTl9UWVBFOlxuIFx0XHR2ZXJib3NlKGVudiwgXCJSJWQgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uLCAlc1xcblwiLFxuLVx0XHRcdHJlZ3Nbc3JjXS50eXBlID09IFNDQUxBUl9WQUxVRSA/IGRzdCA6IHNyYywgZXJyKTtcbitcdFx0XHRzcmNfaXNfaW1tIHx8IHJlZ3Nbc3JjXS50eXBlID09IFNDQUxBUl9WQUxVRSA/IGRzdCA6IHNyYywgZXJyKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFQVNPTl9QQVRIUzpcbiBcdFx0dmVyYm9zZShlbnYsIFwiUiVkIHRyaWVkIHRvICVzIGZyb20gZGlmZmVyZW50IG1hcHMsIHBhdGhzIG9yIHNjYWxhcnMsICVzXFxuXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTowNC45ODg0Mzg0NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjcxNzcwOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNhbml0aXplX2VycmAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSB0aGlzIG5ldyBib29sZWFuLCBgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSztgLCB0aGF0J3MgYmVpbmcgaW50cm9kdWNlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGBSRUFTT05fVFlQRWAgY2FzZSBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudC4gSG1tLCBhbmQgaXQncyAqb25seSogaW1wYWN0aW5nIHRoZSBvdXRwdXQgb2YgYHZlcmJvc2UoZW52LCAuLi4pYCDigJMgc28gdGhpcyBpcyBzdHJpY3RseSBhYm91dCBsb2dnaW5nIG9yIGRpYWdub3N0aWMgbWVzc2FnZXMuXG5cblJpZ2h0LCBgc2FuaXRpemVfZXJyYC4uLiB0aGF0J3MgY2FsbGVkIHdoZW4gd2UgaGl0IGFuIGVycm9yIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMgc2FuaXRpemF0aW9uLiBJIHJlbWVtYmVyIHRoYXQgY29kZS4gQWgsIEkgc2VlIHdoYXQncyBoYXBwZW5pbmcuIFRoaXMgcGF0Y2ggY29ycmVjdHMgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBob3cgdGhlIHJlZ2lzdGVyIG51bWJlciBpcyBwcmludGVkIGluIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHNvdXJjZSBvcGVyYW5kIGlzIGFuIGltbWVkaWF0ZSB2YWx1ZSAoYEJQRl9LYCkuXG5cblByZXZpb3VzbHksIGl0IHdhcyBjaGVja2luZyBgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFYC4gQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgaWYgaXQncyBhbiBpbW1lZGlhdGUsIGBzcmNgICppc24ndCogYSByZWdpc3Rlci4gU28sIGFjY2Vzc2luZyBgcmVnc1tzcmNdYCBpcyBlaXRoZXIgb3V0IG9mIGJvdW5kcyBvciwgYXQgYmVzdCwgbWlzbGVhZGluZy4gV2FpdC4uLiBpZiBgc3JjX2lzX2ltbWAgaXMgdHJ1ZSwgdGhlbiBgc3JjYCAqaGFzKiB0byBiZSB6ZXJvLiBCZWNhdXNlIGBzcmNfcmVnYCBpcyBkZWZpbml0ZWx5IDAgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLCBvciBpcyBtYXliZSBqdXN0IG5vdCBldmVuIHVzZWQuIFllcywgYHNyY2AgaXMgYGluc24tXHUwMDNlc3JjX3JlZ2AuIEdvdCBpdC4gSWYgdGhlIGBCUEZfU1JDYCBmaWVsZCBpcyBgQlBGX0tgLCB0aGVuIGBzcmNfcmVnYCAqaXMqIGluZGVlZCAwLiBTbyBpdCB3b3VsZCBoYXZlIGNoZWNrZWQgYHJlZ3NbMF0udHlwZWAsIHdoaWNoIGlzIHByb2JhYmx5IGZpbmUgc29tZXRpbWVzIGJ1dCBtYXliZSBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuXG5CdXQsIHRoZSBjaGFuZ2UgaXMganVzdCBpbiB0aGUgYHZlcmJvc2UoKWAgZXJyb3IgbWVzc2FnZS4gRXNzZW50aWFsbHkgaXQncyBwcm92aWRpbmcgbW9yZSBhY2N1cmF0ZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiBPa2F5LCBJIHNob3VsZCBjb25maXJtIGJ5IGNoZWNraW5nIGBzYW5pdGl6ZV9lcnJgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6MTEuNjYwMjEzMTI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODY1Nzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzYW5pdGl6ZV9lcnJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzU0Nz1zdGF0aWMgdm9pZCBzYW5pdGl6ZV9tYXJrX2luc25fc2VlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNTU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzU2MDpzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCByZWFzb24pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNTYxLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY2NT1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NjQtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzY1OlxcdFxcdFxcdHJldHVybiBzYW5pdGl6ZV9lcnIoZW52LCBpbnNuLCByZXQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc2Ni1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4NTctXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzODU4OlxcdFxcdFxcdHJldHVybiBzYW5pdGl6ZV9lcnIoZW52LCBpbnNuLCByZXQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1OS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ1OTI9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjA5LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYxMDpcXHRcXHRcXHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2MTEtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOToxMS43Nzg4Nzg0MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg4MDA5MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYHNhbml0aXplX2VycmAgaW1wbGVtZW50YXRpb24uIEkgYXNzdW1lIHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBtYWludGFpbiBkYXRhIGludGVncml0eSBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqSG93IGl0IGlkZW50aWZpZXMgZGlmZmVyZW50IHR5cGVzIG9mIGVycm9ycy4qKiBJcyBpdCB1c2luZyBlcnJvciBjb2RlcywgZXhjZXB0aW9uIHR5cGVzLCBtZXNzYWdlIHBhcnNpbmcsIG9yIGEgY29tYmluYXRpb24/IFdoYXQncyB0aGUgZ3JhbnVsYXJpdHkgb2YgaXRzIGVycm9yIGNsYXNzaWZpY2F0aW9uP1xuKiAgICoqV2hhdCBpdCBkb2VzIHdpdGggdGhlIGVycm9ycyBpdCBmaW5kcy4qKiBJcyBpdCBsb2dnaW5nLCBtYXNraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgdHJhbnNmb3JtaW5nIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgdXNlciwgb3IgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBvdGhlciBjb3JyZWN0aXZlIGFjdGlvbnM/XG4qICAgKipUaGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgc2FuaXRpemF0aW9uLioqIENvdWxkIHRoaXMgZnVuY3Rpb24gaW50cm9kdWNlIG5ldyBlcnJvcnMsIGhpZGUgY3JpdGljYWwgaW5mb3JtYXRpb24sIG9yIGhhdmUgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHM/IEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrYWdlIG9yIGRlbmlhbC1vZi1zZXJ2aWNlIGlzc3Vlcy5cbiogICAqKlRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgdXNlZC4qKiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IHBhcnRzIG9mIHRoZSBjb2RlYmFzZSByZWx5IG9uIGl0PyBIb3cgZGVlcGx5IGludGVncmF0ZWQgaXMgaXQ/IFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBpc3N1ZXMgSSBmaW5kLlxuXG5NeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIGEgY29yZSBjb21wb25lbnQgYW5kIEkgbXVzdCB0YWtlIGEgc3RydWN0dXJlZCBhcHByb2FjaCB0byB1bmRlcnN0YW5kIGl0IGNvbXBsZXRlbHkuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBhbmQgcmVsaWFiaWxpdHkgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjE1LjU2Njg5MTQwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTYwOlxcdHN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IHJlYXNvbilcXG4xMzU2MTpcXHR7XFxuMTM1NjI6XFx0XFx0c3RhdGljIGNvbnN0IGNoYXIgKmVyciA9IFxcXCJwb2ludGVyIGFyaXRobWV0aWMgd2l0aCBpdCBwcm9oaWJpdGVkIGZvciAhcm9vdFxcXCI7XFxuMTM1NjM6XFx0XFx0Y29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FERCA/IFxcXCJhZGRcXFwiIDogXFxcInN1YlxcXCI7XFxuMTM1NjQ6XFx0XFx0dTMyIGRzdCA9IGluc24tXFx1MDAzZWRzdF9yZWcsIHNyYyA9IGluc24tXFx1MDAzZXNyY19yZWc7XFxuMTM1NjU6XFx0XFx0Ym9vbCBzcmNfaXNfaW1tID0gQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSztcXG4xMzU2NjpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XFxuMTM1Njc6XFx0XFxuMTM1Njg6XFx0XFx0c3dpdGNoIChyZWFzb24pIHtcXG4xMzU2OTpcXHRcXHRjYXNlIFJFQVNPTl9CT1VORFM6XFxuMTM1NzA6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJSJWQgaGFzIHVua25vd24gc2NhbGFyIHdpdGggbWl4ZWQgc2lnbmVkIGJvdW5kcywgJXNcXFxcblxcXCIsXFxuMTM1NzE6XFx0XFx0XFx0XFx0cmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFID8gc3JjIDogZHN0LCBlcnIpO1xcbjEzNTcyOlxcdFxcdFxcdGJyZWFrO1xcbjEzNTczOlxcdFxcdGNhc2UgUkVBU09OX1RZUEU6XFxuMTM1NzQ6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJSJWQgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uLCAlc1xcXFxuXFxcIixcXG4xMzU3NTpcXHRcXHRcXHRcXHRzcmNfaXNfaW1tIHx8IHJlZ3Nbc3JjXS50eXBlID09IFNDQUxBUl9WQUxVRSA/IGRzdCA6IHNyYywgZXJyKTtcXG4xMzU3NjpcXHRcXHRcXHRicmVhaztcXG4xMzU3NzpcXHRcXHRjYXNlIFJFQVNPTl9QQVRIUzpcXG4xMzU3ODpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCB0cmllZCB0byAlcyBmcm9tIGRpZmZlcmVudCBtYXBzLCBwYXRocyBvciBzY2FsYXJzLCAlc1xcXFxuXFxcIixcXG4xMzU3OTpcXHRcXHRcXHRcXHRkc3QsIG9wLCBlcnIpO1xcbjEzNTgwOlxcdFxcdFxcdGJyZWFrO1xcbjEzNTgxOlxcdFxcdGNhc2UgUkVBU09OX0xJTUlUOlxcbjEzNTgyOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUiVkIHRyaWVkIHRvICVzIGJleW9uZCBwb2ludGVyIGJvdW5kcywgJXNcXFxcblxcXCIsXFxuMTM1ODM6XFx0XFx0XFx0XFx0ZHN0LCBvcCwgZXJyKTtcXG4xMzU4NDpcXHRcXHRcXHRicmVhaztcXG4xMzU4NTpcXHRcXHRjYXNlIFJFQVNPTl9TVEFDSzpcXG4xMzU4NjpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBjb3VsZCBub3QgYmUgcHVzaGVkIGZvciBzcGVjdWxhdGl2ZSB2ZXJpZmljYXRpb24sICVzXFxcXG5cXFwiLFxcbjEzNTg3OlxcdFxcdFxcdFxcdGRzdCwgZXJyKTtcXG4xMzU4ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMzU4OTpcXHRcXHRkZWZhdWx0OlxcbjEzNTkwOlxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJ1bmtub3duIHJlYXNvbiAoJWQpXFxcIiwgcmVhc29uKTtcXG4xMzU5MTpcXHRcXHRcXHRicmVhaztcXG4xMzU5MjpcXHRcXHR9XFxuMTM1OTM6XFx0XFxuMTM1OTQ6XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMTM1OTU6XFx0fVxcbjEzNTk2OlxcdFxcbjEzNTk3OlxcdC8qIGNoZWNrIHRoYXQgc3RhY2sgYWNjZXNzIGZhbGxzIHdpdGhpbiBzdGFjayBsaW1pdHMgYW5kIHRoYXQgJ3JlZycgZG9lc24ndFxcbjEzNTk4OlxcdCAqIGhhdmUgYSB2YXJpYWJsZSBvZmZzZXQuXFxuMTM1OTk6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6MTUuNTY3NjEwMTQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIwNzgwNjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gTG9nZ2luZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIHRoZSBgdmVyYm9zZSgpYCBvdXRwdXQgd2l0aGluIGBzYW5pdGl6ZV9lcnIoKWAuIEl04oCZcyBhbGwgYWJvdXQgbG9nZ2luZyBhbmQgZGlhZ25vc3RpY3MsIHNwZWNpZmljYWxseSBkZWNpZGluZyB3aGV0aGVyIHRvIHByaW50IGBkc3RgIG9yIGBzcmNgIGFzIHRoZSByZWdpc3RlciBudW1iZXIgYmFzZWQgb24gYHNyY19pc19pbW1gLiBGdW5jdGlvbmFsbHksIHRoaXMgZG9lc24ndCBjaGFuZ2UgZXhlY3V0aW9uLCByaWdodD9cblxuV2FpdCBhIHNlY29uZOKApiBjb3VsZCB0aGlzICphY3R1YWxseSogcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBvbiBgcmVnc1tzcmNdYD8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi5cblxuTGV0J3MgYnJlYWsgaXQgZG93bi4gSWYgYHNyY19pc19pbW1gIGlzIHRydWUsIHRoZW4gYHNyY2AgaXMgYGluc24tXHUwMDNlc3JjX3JlZ2AuIEluIHR5cGljYWwgYEJQRl9LYCBpbnN0cnVjdGlvbnMsIGBzcmNfcmVnYCBpcyB1c3VhbGx5IDAuIEFuZCBgcmVnc2AgaXMgYW4gYXJyYXkgb2YgYE1BWF9CUEZfUkVHYCwgd2hpY2ggaXMgMTEuIFNvLCBgcmVnc1swXWAgaXMgYSB2YWxpZCBhY2Nlc3MuIEl0ICptaWdodCogYmUgdGhhdCBgcmVnc1swXS50eXBlYCBpcyBub3QgYFNDQUxBUl9WQUxVRWAsIHNvIHRoZSBvdXRwdXQgd291bGQgcHJpbnQgYHNyY2AsIHdoaWNoIGlzIDAsIGluc3RlYWQgb2YgYGRzdGAuXG5cbkhhbmcgb24sIGlmIGBzcmNfaXNfaW1tYCBpcyB0cnVlLCBgc3JjYCBpcyBkZWZpbml0ZWx5IDAuIFByaW50aW5nIFwiUjAgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uXCIgaXMgY29uZnVzaW5nIHdoZW4gdGhlIHNvdXJjZSBpcyBhbiBpbW1lZGlhdGUsIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHBvaW50ZXIuIEl0J3MganVzdCBmaXhpbmcgdGhlIGVycm9yIG1lc3NhZ2UuIFNvLCBpdCBpcyBsaWtlbHkgdGhhdCB0aGUgcGF0Y2ggaXMgZm9yIGxvZ2dpbmcuXG5cbkRvZXMgdGhpcyBjaGFuZ2UgcHJldmVudCBhIGNyYXNoPyBJZiBgc3JjYCBjb3VsZCBiZSBvdXQgb2YgYm91bmRzLCB5ZXMuIEJ1dCwgYGluc24tXHUwMDNlc3JjX3JlZ2AgaXMgYSA0LWJpdCBmaWVsZCwgc28gaXQncyBiZXR3ZWVuIDAtMTUuIEJ1dCB3YWl0LCB0aGUgYHJlZ3NgIGFycmF5IGlzIG9ubHkgc2l6ZSAxMSwgaXQgaXMgY2FwcGVkIGF0IGBNQVhfQlBGX1JFR2AuIElmIGBpbnNuLVx1MDAzZXNyY19yZWdgICppcyogXHUwMDNlIDEwLCB0aGVuIGByZWdzW3NyY11gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzISBUaGF0J3MgYSB2dWxuZXJhYmlsaXR5LlxuXG5JIG5lZWQgdG8gY2hlY2sgaWYgYSBtYWxpY2lvdXMgQlBGIHByb2dyYW0gY291bGQgcG9zc2libHkgbWFrZSBgaW5zbi1cdTAwM2VzcmNfcmVnYCBcdTAwM2UgMTAgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBUeXBpY2FsbHksIGBzcmNfcmVnYCBpcyAwIGluIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLCBidXQgYSBtYWxpY2lvdXMgcHJvZ3JhbSAqY291bGQqIHNldCBpdCB0byAxNS5cblxuV2FpdCEgVGhlIEJQRiB2ZXJpZmllciBjaGVja3MgYHNyY19yZWcgPT0gMGAgZWFybHkgb24gZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGxpa2VseSBoYXJtbGVzcywgYW5kIGl0J3Mgc29sZWx5IGFib3V0IGltcHJvdmluZyB0aGUgZXJyb3IgbWVzc2FnZSBjbGFyaXR5LCBtYWtpbmcgaXQgbGVzcyBjb25mdXNpbmcgYW5kIG1vcmUgaW5mb3JtYXRpdmUuIEkgdGhpbmsgd2UgYXJlIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOToyMi43NzU0MTg4NzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjc1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3JlZ19hcmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMDgzPXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzA5NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzA5NjpzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk3LVxcdFxcdFxcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMxMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzQ6c3RhdGljIGludCBjaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzNS1cXHRcXHRcXHQgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzE0MDpcXHRyZXR1cm4gX19jaGVja19yZWdfYXJnKGVudiwgc3RhdGUtXFx1MDAzZXJlZ3MsIHJlZ25vLCB0KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzE0MS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0Nz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc4My1cXHRcXHRcXHQgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzg0OlxcdFxcdFxcdFxcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc4NS1cXHRcXHRcXHRcXHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0Llxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzNDE9c3RhdGljIGludCBjaGVja19sb2FkX21lbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1Mi1cXHRpZiAoaXNfc3RhY2tfYXJnX2xkeChpbnNuKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzUzOlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzU5LVxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjA6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjEtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzY0LVxcdC8qIGNoZWNrIGRzdCBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2Ni1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTQtXFx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5NTpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5Ni1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MDI6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA2LVxcdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDA3OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQyMj1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM0LVxcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDM1OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzOS1cXHQvKiBjaGVjayBzcmMyIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ0MDpcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ0MS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0NDg6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGF1eF9yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDktXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDc2LVxcdFxcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NzpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgbG9hZF9yZWcsIERTVF9PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzgtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjM4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTEtXFx0XFx0XFx0LypcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxMjpcXHRcXHRcXHQgKiBGb3IgQ09OU1RfUFRSX1RPX0RZTlBUUiwgcmVnIGlzIGFscmVhZHkgc2NyYXRjaGVkIGJ5IGNoZWNrX3JlZ19hcmdcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMxMy1cXHRcXHRcXHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgyMTE9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMjg6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ25vLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjI5LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1Mj1zdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTktXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNjA6XFx0XFx0X19jaGVja19yZWdfYXJnKGVudiwgcmVncywgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNjEtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwODI9c3RhdGljIGludCBzZXR1cF9mdW5jX2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBpbnQgY2FsbHNpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTExOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTExOTpcXHQvKiBvbmx5IGluY3JlbWVudCBpdCBhZnRlciBjaGVja19yZWdfYXJnKCkgZmluaXNoZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTEyMC1cXHRzdGF0ZS1cXHUwMDNlY3VyZnJhbWUrKztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE3MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNS1cXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MTY6XFx0XFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNy1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ5MTg9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI1LVxcdFxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTI2OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkyNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTM3LVxcdFxcdGlmIChyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddLnR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTM4OlxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTM5LVxcdFxcdFxcdGVyciA9IGVyciA/OiBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhlbnYsIGluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NDItXFx0XFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NDM6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTQ0LVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk1OC1cXHRcXHRcXHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk1OTpcXHRcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjAtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2NC1cXHRcXHQvKiBjaGVjayBkZXN0IG9wZXJhbmQsIG1hcmsgYXMgcmVxdWlyZWQgbGF0ZXIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NjU6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3MC1cXHRcXHRcXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzE6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDcyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzYtXFx0XFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDc3OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk3LVxcdFxcdC8qIGNoZWNrIGRlc3Qgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA5ODpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgRFNUX09QX05PX01BUkspO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA5OS1cXHRcXHRlcnIgPSBlcnIgPzogYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoZW52LCBpbnNuKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTk0Nj1zdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODUtXFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg2OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTkyLVxcdFxcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5MzpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5OTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxOTctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTk4OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE5OS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MzA3PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyNC1cXHQvKiBjaGVjayB3aGV0aGVyIGltcGxpY2l0IHNvdXJjZSBvcGVyYW5kIChyZWdpc3RlciBSNikgaXMgcmVhZGFibGUgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGN0eF9yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNDQtXFx0XFx0LyogY2hlY2sgZXhwbGljaXQgc291cmNlIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzNDU6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNTYtXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzU3OlxcdFxcdGNoZWNrX3JlZ19hcmcoZW52LCBjYWxsZXJfc2F2ZWRbaV0sIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNTgtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTMxPXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU2NS1cXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NjY6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ25vLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU2Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NjE2PXN0YXRpYyBpbnQgY2hlY2tfZ2xvYmFsX3N1YnByb2dfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjYyNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY2MjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIEJQRl9SRUdfMCwgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY2MjYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzIzNT1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MjY3OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI2OC1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOToyMi44ODc2OTgxNDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzcxNzQzMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFZlcmlmaWNhdGlvbiBDb25jZXJuKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIEFMVSBvcGVyYXRpb25zLiBJIHNlZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBnZXRzIHNjcmVlbmVkIGJlZm9yZSBpdCBldmVuIGhpdHMgYHNhbml0aXplX2VycmAsIHdoaWNoIGlzIGdvb2QuIElmIGl0J3MgYW4gQUxVIG9wLCBgY2hlY2tfYWx1X29wYCBpcyBpbnZva2VkLiBJbnNpZGUgYGNoZWNrX2FsdV9vcGAsIHRoaW5ncyBzZWVtIHN0cmFpZ2h0Zm9yd2FyZCwgZXNwZWNpYWxseSBmb3IgYEJQRl9YYCBzb3VyY2Ugb3BlcmFuZHMgd2hlcmUgSSdtIGV4cGVjdGluZyBgY2hlY2tfcmVnX2FyZ2AgdG8gdmFsaWRhdGUgdGhlIGBzcmNfcmVnYC5cblxuSG93ZXZlciwgbXkgYnJhaW4ganVzdCBwaW5nZWQhIFdoYXQgaGFwcGVucyBpZiB0aGUgc291cmNlIG9wZXJhbmQgaXMgYEJQRl9LYD8gSW4gdGhhdCBjYXNlLCBgY2hlY2tfcmVnX2FyZ2AgKmlzbid0KiBjYWxsZWQgZm9yIGBzcmNfcmVnYCwgYnV0IHRoZSBgaW5zbi1cdTAwM2VzcmNfcmVnYCAqaXMqIHN0aWxsIHBhcnQgb2YgdGhlIGluc3RydWN0aW9uLiBUaGF0J3MgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLiBJcyBgaW5zbi1cdTAwM2VzcmNfcmVnYCAqZ3VhcmFudGVlZCogdG8gYmUgemVybyBmb3IgYEJQRl9LYCBpbnN0cnVjdGlvbnM/IEkgaGF2ZSBhIHN0cm9uZyBndXQgZmVlbGluZyB0aGF0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuXG5cbkxldCBtZSByZWZyZXNoIG15c2VsZiBvbiB0aGUgYGJwZl9pbnNuYCBzdHJ1Y3R1cmUgYW5kIGhvdyBgQlBGX0tgIGlzIGhhbmRsZWQuIElmIGBpbnNuLVx1MDAzZXNyY19yZWdgICppc24ndCogemVybywgdGhhdCB2YWx1ZSBjb3VsZCBiZSBhbnl0aGluZyB1cCB0byAxNS4gVGhlIGByZWdzYCBhcnJheSwgdGhvdWdoLCBoYXMgYSBzaXplIG9mIG9ubHkgMTEgKGBNQVhfQlBGX1JFR2ApLiBTbywgaWYgYGluc24tXHUwMDNlc3JjX3JlZ2AgaGFwcGVucyB0byBiZSAxNSwgd2UncmUgdGFsa2luZyBhYm91dCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyEgVGhhdCdzIGEgc2VyaW91cyB2dWxuZXJhYmlsaXR5LlxuXG5XYWl0Li4uIGRvZXMgdGhlIHZlcmlmaWVyLCBzb21ld2hlcmUgaW4gYGNoZWNrX2FsdV9vcGAsIGByZXBsYWNlX21hcF9mZF93aXRoX21hcF9wdHJgIG9yIGBicGZfY2hlY2tgIGFjdHVhbGx5IHZhbGlkYXRlIHRoZSBgc3JjX3JlZ2AgYW5kIGNvbmZpcm0gdGhhdCBpdOKAmXMgYDBgIGZvciBgQlBGX0tgIGluc3RydWN0aW9ucz8gSSBuZWVkIHRvIGNoZWNrIHRoZXNlIGZ1bmN0aW9ucyAqaW1tZWRpYXRlbHkqIHRvIGF2b2lkIG92ZXJsb29raW5nIHRoaXMgY3J1Y2lhbCBkZXRhaWwuIFRoYXQncyBhIHBvdGVudGlhbCBzZWN1cml0eSBob2xlIEkgbmVlZCB0byBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjI5LjY1OTQ0NjQyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDAzMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNyY19yZWcgPT0gMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTI4NDA9c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI4NTMtXFx0XFx0aWYgKGNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mjg1NDpcXHRcXHQgICAgaW5zbltpXS5zcmNfcmVnID09IDAgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjg1NS1cXHRcXHQgICAgaW5zbltpXS5pbW0gPT0gQlBGX0ZVTkNfdGFpbF9jYWxsKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxODU9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjAyLVxcdGRzdF9yZWcgPSBcXHUwMDI2cmVnc1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyMDM6XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gMCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjIwNC1cXHRcXHR1NjQgaW1tID0gKCh1NjQpKGluc24gKyAxKS1cXHUwMDNlaW1tIFxcdTAwM2NcXHUwMDNjIDMyKSB8ICh1MzIpaW5zbi1cXHUwMDNlaW1tO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDk2PXN0YXRpYyBpbnQgY2hlY2tfYW5kX3Jlc29sdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEzNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMzU6XFx0XFx0XFx0aWYgKGluc25bMF0uc3JjX3JlZyA9PSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEzNi1cXHRcXHRcXHRcXHQvKiB2YWxpZCBnZW5lcmljIGxvYWQgNjQtYml0IGltbSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOToyOS43ODc0NTg3NjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyMDA0MDc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkxvY2F0aW5nIGBzcmNfcmVnYCBDaGVja3MqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB0aG91Z2h0OiBJIG5lZWQgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugb2YgYHNyY19yZWdgIGNoZWNrcyB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSdsbCBiZSB1c2luZyBzb21lIGZvcm0gb2Ygc2VhcmNoIGZ1bmN0aW9uYWxpdHkg4oCTIGxpa2VseSBhIGdyZXAsIGFuIElERSdzIHNlYXJjaCwgb3IgYSBtb3JlIHNwZWNpYWxpemVkIHRvb2wgZGVwZW5kaW5nIG9uIHRoZSBwcm9qZWN0LiBUaGUgZ29hbCBoZXJlIGlzIGVmZmljaWVudCBpZGVudGlmaWNhdGlvbjsgSSdtIG5vdCBqdXN0IGxvb2tpbmcgZm9yIGEgc2ltcGxlIHN0cmluZyBtYXRjaCwgYnV0IHVuZGVyc3RhbmRpbmcgdGhlICpjb250ZXh0KiBhcm91bmQgdGhlIGNoZWNrIGl0c2VsZi4gQXJlIHRoZXNlIGNoZWNrcyBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIHZhbGlkYXRpb24sIHNlY3VyaXR5IG1lYXN1cmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgY2hlY2sgbWF0dGVycyBpbiBob3cgaXQgaXMgaW1wbGVtZW50ZWQuIFNvIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgY29kZSBzdXJyb3VuZGluZyBpdC4gSSdsbCBuZWVkIHRvIHRoZW4gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZSByZWdpc3RlciBhbmQgaG93IGl0IGlzIHVzZWQuIEkgYW50aWNpcGF0ZSBxdWlja2x5IG5hcnJvd2luZyBkb3duIHRoZSBwb3RlbnRpYWxseSByZWxldmFudCBpbnN0YW5jZXMgYW5kIHRoZW4gZGl2aW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLiBUaGUga2V5IGlzIG1ldGhvZGljYWwgaWRlbnRpZmljYXRpb24gYW5kIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTozNC44MDc1MjA3NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MjYzNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3JlZ19hcmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMDgzPXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzA5NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzA5NjpzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk3LVxcdFxcdFxcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMxMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzQ6c3RhdGljIGludCBjaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzNS1cXHRcXHRcXHQgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzE0MDpcXHRyZXR1cm4gX19jaGVja19yZWdfYXJnKGVudiwgc3RhdGUtXFx1MDAzZXJlZ3MsIHJlZ25vLCB0KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzE0MS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0Nz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc4My1cXHRcXHRcXHQgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzg0OlxcdFxcdFxcdFxcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc4NS1cXHRcXHRcXHRcXHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0Llxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzNDE9c3RhdGljIGludCBjaGVja19sb2FkX21lbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1Mi1cXHRpZiAoaXNfc3RhY2tfYXJnX2xkeChpbnNuKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzUzOlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzU5LVxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjA6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjEtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzY0LVxcdC8qIGNoZWNrIGRzdCBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2Ni1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTQtXFx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5NTpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5Ni1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MDI6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA2LVxcdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDA3OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQyMj1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM0LVxcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDM1OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzOS1cXHQvKiBjaGVjayBzcmMyIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ0MDpcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ0MS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0NDg6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGF1eF9yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDktXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDc2LVxcdFxcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NzpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgbG9hZF9yZWcsIERTVF9PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzgtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjM4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTEtXFx0XFx0XFx0LypcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxMjpcXHRcXHRcXHQgKiBGb3IgQ09OU1RfUFRSX1RPX0RZTlBUUiwgcmVnIGlzIGFscmVhZHkgc2NyYXRjaGVkIGJ5IGNoZWNrX3JlZ19hcmdcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMxMy1cXHRcXHRcXHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgyMTE9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMjg6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ25vLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjI5LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1Mj1zdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTktXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNjA6XFx0XFx0X19jaGVja19yZWdfYXJnKGVudiwgcmVncywgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNjEtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwODI9c3RhdGljIGludCBzZXR1cF9mdW5jX2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBpbnQgY2FsbHNpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTExOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTExOTpcXHQvKiBvbmx5IGluY3JlbWVudCBpdCBhZnRlciBjaGVja19yZWdfYXJnKCkgZmluaXNoZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTEyMC1cXHRzdGF0ZS1cXHUwMDNlY3VyZnJhbWUrKztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE3MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNS1cXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MTY6XFx0XFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNy1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ5MTg9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI1LVxcdFxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTI2OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkyNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTM3LVxcdFxcdGlmIChyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddLnR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTM4OlxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTM5LVxcdFxcdFxcdGVyciA9IGVyciA/OiBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhlbnYsIGluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NDItXFx0XFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NDM6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTQ0LVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk1OC1cXHRcXHRcXHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk1OTpcXHRcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjAtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2NC1cXHRcXHQvKiBjaGVjayBkZXN0IG9wZXJhbmQsIG1hcmsgYXMgcmVxdWlyZWQgbGF0ZXIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NjU6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3MC1cXHRcXHRcXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzE6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDcyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzYtXFx0XFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDc3OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk3LVxcdFxcdC8qIGNoZWNrIGRlc3Qgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA5ODpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgRFNUX09QX05PX01BUkspO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA5OS1cXHRcXHRlcnIgPSBlcnIgPzogYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoZW52LCBpbnNuKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTk0Nj1zdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODUtXFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg2OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTkyLVxcdFxcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5MzpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5OTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxOTctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTk4OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE5OS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MzA3PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyNC1cXHQvKiBjaGVjayB3aGV0aGVyIGltcGxpY2l0IHNvdXJjZSBvcGVyYW5kIChyZWdpc3RlciBSNikgaXMgcmVhZGFibGUgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGN0eF9yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNDQtXFx0XFx0LyogY2hlY2sgZXhwbGljaXQgc291cmNlIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzNDU6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNTYtXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzU3OlxcdFxcdGNoZWNrX3JlZ19hcmcoZW52LCBjYWxsZXJfc2F2ZWRbaV0sIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNTgtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTMxPXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU2NS1cXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NjY6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ25vLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU2Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NjE2PXN0YXRpYyBpbnQgY2hlY2tfZ2xvYmFsX3N1YnByb2dfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjYyNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY2MjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIEJQRl9SRUdfMCwgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY2MjYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzIzNT1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MjY3OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI2OC1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTozNC44ODI3OTAwNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMDU0NjM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIEluc3RydWN0aW9uIFJlZ2lzdGVyIFVzYWdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBicGZfaW5zbmAgc3RydWN0dXJlIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGZvY3VzZXMgb24gdGhlIHJlZ2lzdGVyIGZpZWxkcy4gSSdtIHNlZWluZyBgc3JjX3JlZ2AgYW5kIGBkc3RfcmVnYCwgZWFjaCA0IGJpdHMgd2lkZS4gVGhhdCdzIGdvb2QsIHR5cGljYWwgcmVnaXN0ZXIgc2V0dXAuIEJ1dCwgYW5kIGhlcmUncyB0aGUgcXVlc3Rpb24gdGhhdCBqdW1wcyBvdXQgYXQgbWU6IGlmIHRoZSBpbnN0cnVjdGlvbidzIGBCUEZfU1JDKGluc24tXHUwMDNlY29kZSlgIGZpZWxkIHNpZ25pZmllcyBhIGRpcmVjdCBpbW1lZGlhdGUgdmFsdWUgKGBCUEZfS2ApLCAqZG9lcyogdGhlIEJQRiB2ZXJpZmllciBhdXRvbWF0aWNhbGx5IGVuZm9yY2UgdGhhdCB0aGUgYHNyY19yZWdgIGZpZWxkIGlzIHNldCB0byB6ZXJvPyBUaGF0J3MgdGhlIGV4cGVjdGVkIGNvbnZlbnRpb24gaW4gbWFueSBpbnN0cnVjdGlvbiBzZXRzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCdzIGhvdyBpdCdzIGhhbmRsZWQgaGVyZS5cblxuVG8gZmlndXJlIHRoaXMgb3V0IGRlZmluaXRpdmVseSwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSB2ZXJpZmllcidzIGNvZGUuIE15IGd1dCBzYXlzIEknbGwgcHJvYmFibHkgZmluZCB0aGUgYW5zd2VyIHdpdGhpbiBgcmVwbGFjZV9tYXBfZmRfd2l0aF9tYXBfcHRyYCBvciBwZXJoYXBzIGluIHRoZSBtYWluIGBicGZfY2hlY2tgIGZ1bmN0aW9uLiBUaGVzZSBhcmUgdGhlIHR3byBwcmltYXJ5IGxvY2F0aW9ucyB3aGVyZSB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIHJlbGF0ZWQgdG8gaW5zdHJ1Y3Rpb24gdmFsaWRhdGlvbiBhbmQgcmVzb3VyY2Ugc3Vic3RpdHV0aW9uIHdvdWxkIHJlc2lkZS4gVGltZSB0byBjcmFjayBvcGVuIHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGUgYml0IGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDczMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjM4Ljg5MzM2MjkzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4OTA5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3JjX3JlZyAhPSAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwOTY9c3RhdGljIGludCBjaGVja19hbmRfcmVzb2x2ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTIzLVxcdFxcdFxcdGlmIChpID09IGluc25fY250IC0gMSB8fCBpbnNuWzFdLmNvZGUgIT0gMCB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODEyNDpcXHRcXHRcXHQgICAgaW5zblsxXS5kc3RfcmVnICE9IDAgfHwgaW5zblsxXS5zcmNfcmVnICE9IDAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjUtXFx0XFx0XFx0ICAgIGluc25bMV0ub2ZmICE9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6MzguOTc2MjcwODk0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MTAzNTM2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBTFUgT3BlcmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIEFMVSBvcGVyYXRpb24gdmVyaWZpY2F0aW9uIGlzIGZ1bmN0aW9uaW5nLiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNoZWNrX2FsdV9vcGAgZnVuY3Rpb24uIEkgYWxyZWFkeSBoYXZlIGEgc3Ryb25nIGludHVpdGlvbiBhYm91dCB3aGVyZSB0aGUgbGlrZWx5IGlzc3VlcyBtaWdodCBiZSwgZ2l2ZW4gcGFzdCBleHBlcmllbmNlcyB3aXRoIEJQRiB2ZXJpZmllciBkZXNpZ24gYW5kIGNvbW1vbiBwaXRmYWxscy4gSSdtIGFudGljaXBhdGluZyBsb29raW5nIGF0IHJlZ2lzdGVyIGNvbnN0cmFpbnRzLCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMsIGFuZCBwZXJoYXBzIHRoZSBoYW5kbGluZyBvZiBkaWZmZXJlbnQgZGF0YSB3aWR0aHMgb3Igc2lnbmVkbmVzcyBjb252ZXJzaW9ucyB3aXRoaW4gdGhlc2UgYXJpdGhtZXRpYyBhbmQgbG9naWNhbCBvcGVyYXRpb25zLiBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyBhcHByb2FjaCB0byBoYW5kbGluZyBlZGdlIGNhc2VzIGFuZCBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgdGhhdCBhbiBBTFUgb3Agd29uJ3QgaW50cm9kdWNlIHVuZGVmaW5lZCBiZWhhdmlvciBvciB2aW9sYXRlIGFueSBzYWZldHkgZ3VhcmFudGVlcy4gSXMgaXQgdXNpbmcgcmFuZ2UgYW5hbHlzaXM/IENvbnN0YW50IHByb3BhZ2F0aW9uPyBTeW1ib2xpYyBleGVjdXRpb24/IFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhlcmUgYXJlIGNyaXRpY2FsIGZvciByb2J1c3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI4NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjQ0Ljc4NjYyNzMxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTIyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0OTE4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MTg6XFx0c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbjE0OTE5OlxcdHtcXG4xNDkyMDpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XFxuMTQ5MjE6XFx0XFx0dTggb3Bjb2RlID0gQlBGX09QKGluc24tXFx1MDAzZWNvZGUpO1xcbjE0OTIyOlxcdFxcdGludCBlcnI7XFxuMTQ5MjM6XFx0XFxuMTQ5MjQ6XFx0XFx0aWYgKG9wY29kZSA9PSBCUEZfRU5EIHx8IG9wY29kZSA9PSBCUEZfTkVHKSB7XFxuMTQ5MjU6XFx0XFx0XFx0LyogY2hlY2sgc3JjIG9wZXJhbmQgKi9cXG4xNDkyNjpcXHRcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcXG4xNDkyNzpcXHRcXHRcXHRpZiAoZXJyKVxcbjE0OTI4OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTQ5Mjk6XFx0XFxuMTQ5MzA6XFx0XFx0XFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnKSkge1xcbjE0OTMxOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUiVkIHBvaW50ZXIgYXJpdGhtZXRpYyBwcm9oaWJpdGVkXFxcXG5cXFwiLFxcbjE0OTMyOlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbjE0OTMzOlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjE0OTM0OlxcdFxcdFxcdH1cXG4xNDkzNTpcXHRcXG4xNDkzNjpcXHRcXHRcXHQvKiBjaGVjayBkZXN0IG9wZXJhbmQgKi9cXG4xNDkzNzpcXHRcXHRcXHRpZiAocmVnc1tpbnNuLVxcdTAwM2Vkc3RfcmVnXS50eXBlID09IFNDQUxBUl9WQUxVRSkge1xcbjE0OTM4OlxcdFxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxuMTQ5Mzk6XFx0XFx0XFx0XFx0ZXJyID0gZXJyID86IGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzKGVudiwgaW5zbixcXG4xNDk0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10sXFxuMTQ5NDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10pO1xcbjE0OTQyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTQ5NDM6XFx0XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XFxuMTQ5NDQ6XFx0XFx0XFx0fVxcbjE0OTQ1OlxcdFxcdFxcdGlmIChlcnIpXFxuMTQ5NDY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDk0NzpcXHRcXG4xNDk0ODpcXHRcXHR9IGVsc2UgaWYgKG9wY29kZSA9PSBCUEZfTU9WKSB7XFxuMTQ5NDk6XFx0XFxuMTQ5NTA6XFx0XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG4xNDk1MTpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QpIHtcXG4xNDk1MjpcXHRcXHRcXHRcXHRcXHRpZiAoIWVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhcmVuYSkge1xcbjE0OTUzOlxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiYWRkcl9zcGFjZV9jYXN0IGluc24gY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHByb2dyYW0gdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCBhcmVuYVxcXFxuXFxcIik7XFxuMTQ5NTQ6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ5NTU6XFx0XFx0XFx0XFx0XFx0fVxcbjE0OTU2OlxcdFxcdFxcdFxcdH1cXG4xNDk1NzpcXHRcXG4xNDk1ODpcXHRcXHRcXHRcXHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xcbjE0OTU5OlxcdFxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbjE0OTYwOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTQ5NjE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDk2MjpcXHRcXHRcXHR9XFxuMTQ5NjM6XFx0XFxuMTQ5NjQ6XFx0XFx0XFx0LyogY2hlY2sgZGVzdCBvcGVyYW5kLCBtYXJrIGFzIHJlcXVpcmVkIGxhdGVyICovXFxuMTQ5NjU6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG4xNDk2NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjE0OTY3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTQ5Njg6XFx0XFxuMTQ5Njk6XFx0XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG4xNDk3MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyA9IHJlZ3MgKyBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbjE0OTcxOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnID0gcmVncyArIGluc24tXFx1MDAzZWRzdF9yZWc7XFxuMTQ5NzI6XFx0XFxuMTQ5NzM6XFx0XFx0XFx0XFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpIHtcXG4xNDk3NDpcXHRcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tKSB7XFxuMTQ5NzU6XFx0XFx0XFx0XFx0XFx0XFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cXG4xNDk3NjpcXHRcXHRcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuMTQ5Nzc6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xcbjE0OTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fQVJFTkE7XFxuMTQ5Nzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogUFRSX1RPX0FSRU5BIGlzIDMyLWJpdCAqL1xcbjE0OTgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4xNDk4MTpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuMTQ5ODI6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2VvZmYgPT0gMCkge1xcbjE0OTgzOlxcdFxcdFxcdFxcdFxcdFxcdC8qIGNhc2U6IFIxID0gUjJcXG4xNDk4NDpcXHRcXHRcXHRcXHRcXHRcXHQgKiBjb3B5IHJlZ2lzdGVyIHN0YXRlIHRvIGRlc3QgcmVnXFxuMTQ5ODU6XFx0XFx0XFx0XFx0XFx0XFx0ICovXFxuMTQ5ODY6XFx0XFx0XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XFxuMTQ5ODc6XFx0XFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4xNDk4ODpcXHRcXHRcXHRcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuMTQ5ODk6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNDk5MDpcXHRcXHRcXHRcXHRcXHRcXHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xcbjE0OTkxOlxcdFxcdFxcdFxcdFxcdFxcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZykpIHtcXG4xNDk5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudixcXG4xNDk5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwiUiVkIHNpZ24tZXh0ZW5zaW9uIHBhcnQgb2YgcG9pbnRlclxcXFxuXFxcIixcXG4xNDk5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4xNDk5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4xNDk5NjpcXHRcXHRcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHNyY19yZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XFxuMTQ5OTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBub19zZXh0O1xcbjE0OTk4OlxcdFxcbjE0OTk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG5vX3NleHQgPSByZWdfdW1heChzcmNfcmVnKSBcXHUwMDNjICgxVUxMIFxcdTAwM2NcXHUwMDNjIChpbnNuLVxcdTAwM2VvZmYgLSAxKSk7XFxuMTUwMDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aWYgKG5vX3NleHQpXFxuMTUwMDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XFxuMTUwMDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4xNTAwMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuMTUwMDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xcbjE1MDA1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYgXFx1MDAzZVxcdTAwM2UgMyk7XFxuMTUwMDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbjE1MDA3OlxcdFxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTUwMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbjE1MDA5OlxcdFxcdFxcdFxcdFxcdFxcdH1cXG4xNTAxMDpcXHRcXHRcXHRcXHRcXHR9XFxuMTUwMTE6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNTAxMjpcXHRcXHRcXHRcXHRcXHQvKiBSMSA9ICh1MzIpIFIyICovXFxuMTUwMTM6XFx0XFx0XFx0XFx0XFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnKSkge1xcbjE1MDE0OlxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbjE1MDE1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJSJWQgcGFydGlhbCBjb3B5IG9mIHBvaW50ZXJcXFxcblxcXCIsXFxuMTUwMTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuMTUwMTc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjQ0Ljc4NzI4MTcwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMzMjc5OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgc3RhcnRpbmcgdG8gdHVybi5cblxuKipEaXNzZWN0aW5nIHRoZSBEYXRhIEZsb3cqKlxuXG5IYW5nIG9uIGEgc2Vjb25kLCBhIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBjaGVja19hbHVfb3BgLCBhbmQgaXQncyBjYWxsaW5nIGVpdGhlciBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgIG9yIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgYmVoYXZpb3IuIFNvLCBteSBmb2N1cyBpcyBub3cgb24gdGhvc2UgZnVuY3Rpb25zLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBjaGVja19hbHVfb3BgLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgc2FuaXRpemVfZXJyYCBpcyB1c2VkLCBzbyB0aGF0IEkgdW5kZXJzdGFuZCB3aGVyZSBpdCBjYW4gY3JlYXRlIGEgcHJvYmxlbSwgYW5kIGhvdyB0aGUgcHJvZ3JhbSBkZWFscyB3aXRoIGl0LiBJIHNob3VsZCB0cmFjZSB0aGUgZXJyb3IgaGFuZGxpbmcgZmxvdyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjQ5LjYyMDU2NjU5MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzc1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3NTA6XFx0XFx0ICovXFxuMTM3NTE6XFx0XFx0aWYgKGJhc2VfdHlwZShwdHJfcmVnLVxcdTAwM2V0eXBlKSA9PSBQVFJfVE9fTUVNIFxcdTAwMjZcXHUwMDI2IChwdHJfcmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgUFRSX1VOVFJVU1RFRCkpXFxuMTM3NTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTM3NTM6XFx0XFxuMTM3NTQ6XFx0XFx0aWYgKCFjaGVja19yZWdfc2FuZV9vZmZzZXRfc2NhbGFyKGVudiwgb2ZmX3JlZywgcHRyX3JlZy1cXHUwMDNldHlwZSkgfHxcXG4xMzc1NTpcXHRcXHQgICAgIWNoZWNrX3JlZ19zYW5lX29mZnNldF9wdHIoZW52LCBwdHJfcmVnLCBwdHJfcmVnLVxcdTAwM2V0eXBlKSlcXG4xMzc1NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzc1NzpcXHRcXG4xMzc1ODpcXHRcXHQvKiBwb2ludGVyIHR5cGVzIGRvIG5vdCBjYXJyeSAzMi1iaXQgYm91bmRzIGF0IHRoZSBtb21lbnQuICovXFxuMTM3NTk6XFx0XFx0X19tYXJrX3JlZzMyX3VuYm91bmRlZChkc3RfcmVnKTtcXG4xMzc2MDpcXHRcXG4xMzc2MTpcXHRcXHRpZiAoc2FuaXRpemVfbmVlZGVkKG9wY29kZSkpIHtcXG4xMzc2MjpcXHRcXHRcXHRyZXQgPSBzYW5pdGl6ZV9wdHJfYWx1KGVudiwgaW5zbiwgcHRyX3JlZywgb2ZmX3JlZywgZHN0X3JlZyxcXG4xMzc2MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmluZm8sIGZhbHNlKTtcXG4xMzc2NDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzc2NTpcXHRcXHRcXHRcXHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcXG4xMzc2NjpcXHRcXHR9XFxuMTM3Njc6XFx0XFxuMTM3Njg6XFx0XFx0c3dpdGNoIChvcGNvZGUpIHtcXG4xMzc2OTpcXHRcXHRjYXNlIEJQRl9BREQ6XFxuMTM3NzA6XFx0XFx0XFx0LypcXG4xMzc3MTpcXHRcXHRcXHQgKiBkc3RfcmVnIGdldHMgdGhlIHBvaW50ZXIgdHlwZSBhbmQgc2luY2Ugc29tZSBwb3NpdGl2ZVxcbjEzNzcyOlxcdFxcdFxcdCAqIGludGVnZXIgdmFsdWUgd2FzIGFkZGVkIHRvIHRoZSBwb2ludGVyLCBnaXZlIGl0IGEgbmV3ICdpZCdcXG4xMzc3MzpcXHRcXHRcXHQgKiBpZiBpdCdzIGEgUFRSX1RPX1BBQ0tFVC5cXG4xMzc3NDpcXHRcXHRcXHQgKiB0aGlzIGNyZWF0ZXMgYSBuZXcgJ2Jhc2UnIHBvaW50ZXIsIG9mZl9yZWcgKHZhcmlhYmxlKSBnZXRzXFxuMTM3NzU6XFx0XFx0XFx0ICogYWRkZWQgaW50byB0aGUgdmFyaWFibGUgb2Zmc2V0LCBhbmQgd2UgY29weSB0aGUgZml4ZWQgb2Zmc2V0XFxuMTM3NzY6XFx0XFx0XFx0ICogZnJvbSBwdHJfcmVnLlxcbjEzNzc3OlxcdFxcdFxcdCAqL1xcbjEzNzc4OlxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXI2NCA9IGNudW02NF9hZGQocHRyX3JlZy1cXHUwMDNlcjY0LCBvZmZfcmVnLVxcdTAwM2VyNjQpO1xcbjEzNzc5OlxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX2FkZChwdHJfcmVnLVxcdTAwM2V2YXJfb2ZmLCBvZmZfcmVnLVxcdTAwM2V2YXJfb2ZmKTtcXG4xMzc4MDpcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2VyYXcgPSBwdHJfcmVnLVxcdTAwM2VyYXc7XFxuMTM3ODE6XFx0XFx0XFx0aWYgKHJlZ19pc19wa3RfcG9pbnRlcihwdHJfcmVnKSkge1xcbjEzNzgyOlxcdFxcdFxcdFxcdGlmICgha25vd24pXFxuMTM3ODM6XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbjEzNzg0OlxcdFxcdFxcdFxcdC8qXFxuMTM3ODU6XFx0XFx0XFx0XFx0ICogQ2xlYXIgcmFuZ2UgZm9yIHVua25vd24gYWRkZW5kcyBzaW5jZSB3ZSBjYW4ndCBrbm93XFxuMTM3ODY6XFx0XFx0XFx0XFx0ICogd2hlcmUgdGhlIHBrdCBwb2ludGVyIGVuZGVkIHVwLiBBbHNvIGNsZWFyIEFUX1BLVF9FTkQgL1xcbjEzNzg3OlxcdFxcdFxcdFxcdCAqIEJFWU9ORF9QS1RfRU5EIGZyb20gcHJpb3IgY29tcGFyaXNvbiBhcyBhbnkgcG9pbnRlclxcbjEzNzg4OlxcdFxcdFxcdFxcdCAqIGFyaXRobWV0aWMgaW52YWxpZGF0ZXMgdGhlbS5cXG4xMzc4OTpcXHRcXHRcXHRcXHQgKi9cXG4xMzc5MDpcXHRcXHRcXHRcXHRpZiAoIWtub3duIHx8IGRzdF9yZWctXFx1MDAzZXJhbmdlIFxcdTAwM2MgMClcXG4xMzc5MTpcXHRcXHRcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmRzdF9yZWctXFx1MDAzZXJhdywgMCwgc2l6ZW9mKGRzdF9yZWctXFx1MDAzZXJhdykpO1xcbjEzNzkyOlxcdFxcdFxcdH1cXG4xMzc5MzpcXHRcXHRcXHRicmVhaztcXG4xMzc5NDpcXHRcXHRjYXNlIEJQRl9TVUI6XFxuMTM3OTU6XFx0XFx0XFx0aWYgKGRzdF9yZWcgIT0gcHRyX3JlZykge1xcbjEzNzk2OlxcdFxcdFxcdFxcdC8qIHNjYWxhciAtPSBwb2ludGVyLiAgQ3JlYXRlcyBhbiB1bmtub3duIHNjYWxhciAqL1xcbjEzNzk3OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUiVkIHRyaWVkIHRvIHN1YnRyYWN0IHBvaW50ZXIgZnJvbSBzY2FsYXJcXFxcblxcXCIsXFxuMTM3OTg6XFx0XFx0XFx0XFx0XFx0ZHN0KTtcXG4xMzc5OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6NDkuNjIyMTg2MzYxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNTQ5NDQ2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgQ29zbWV0aWMgRXJyb3IgTWVzc2FnZSBDb3JyZWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHN1YnRsZSBjaGFuZ2UgaW4gYHNhbml0aXplX2VycmAuIEl0IHNlZW1zIGxpa2UgYHNhbml0aXplX2VycmAgaXMgY2FsbGVkIHdoZW4gdGhlcmUncyBhbiBpc3N1ZSBkdXJpbmcgcG9pbnRlciBhcml0aG1ldGljIGFkanVzdG1lbnRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AgYW5kIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgdGhlIGVycm9yIG1lc3NhZ2UgaWRlbnRpZmllcyB0aGUgcHJvYmxlbWF0aWMgcmVnaXN0ZXIuXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHVzZWQgYHJlZ3Nbc3JjXS50eXBlYCBpbiB0aGUgYHZlcmJvc2VgIHN0YXRlbWVudCB0byBkZXRlcm1pbmUgd2hpY2ggcmVnaXN0ZXIgdG8gcmVwb3J0LiBOb3csIGl0IHNlZW1zIGxpa2Ugd2UncmUgY29uZGl0aW9uYWxseSB1c2luZyBgZHN0YCAoZGVzdGluYXRpb24gcmVnaXN0ZXIpIG9yIGBzcmNgIChzb3VyY2UgcmVnaXN0ZXIpIGJhc2VkIG9uIGBzcmNfaXNfaW1tYCBvciBgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGNhc2VzIHdpdGhpbiBgQlBGX0tgIGluc3RydWN0aW9ucy5cblxuVGhlIGxvZ2ljIHNheXMgdGhhdCBpZiBgc3JjX2lzX2ltbWAgaXMgdHJ1ZSwgb3IgdGhlIHNvdXJjZSByZWdpc3RlcidzIHR5cGUgaXMgYSBzY2FsYXIgdmFsdWUsIHRoZW4gdGhlIHRhcmdldCByZWdpc3RlciAoYGRzdGApIGlzIHByaW50ZWQ7IG90aGVyd2lzZSwgdGhlIHNvdXJjZSByZWdpc3RlciAoYHNyY2ApIGlzIHByaW50ZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMgYWxsIGFib3V0IG1ha2luZyB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlIGluZm9ybWF0aXZlLiBUaGUgY29kZSBpcyB0cnlpbmcgdG8gcHJpbnQgdGhlIGNvcnJlY3QgcmVnaXN0ZXIgYmFzZWQgb24gd2hldGhlciB0aGUgc291cmNlIG9wZXJhbmQgaXMgYW4gaW1tZWRpYXRlIHZhbHVlIG9yIGEgcmVnaXN0ZXIuXG5cblRoZSBrZXkgaW5zaWdodCBpcyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiBgQlBGX0tgIGluc3RydWN0aW9ucy4gSW4gdGhlc2UgaW5zdHJ1Y3Rpb25zLCBgaW5zbi1cdTAwM2VzcmNfcmVnYCBpcyB1c3VhbGx5IDAuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBwcmludGluZyBcIlIwXCIgZXZlbiBpZiB0aGUgb3BlcmF0aW9uIHdhcyBpbnZhbGlkLiBOb3cgaXQgbWlnaHQgcHJpbnQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluc3RlYWQuIFRoaXMgaXMgcHVyZWx5IGEgY29zbWV0aWMgaW1wcm92ZW1lbnQgZm9yIHRoZSBlcnJvciBtZXNzYWdlLCBtYWtpbmcgaXQgbW9yZSBhY2N1cmF0ZSBhbmQgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxuXG5Ob3csIGEgcG90ZW50aWFsIGNvbmNlcm4gcG9wcGVkIHVwOiBDYW4gYHNyY2AgZXZlbiBiZSBvdXQgb2YgYm91bmRzLCBlc3BlY2lhbGx5IGdpdmVuIGBpbnNuLVx1MDAzZXNyY19yZWdgPyBJZiBgaW5zbi1cdTAwM2VzcmNfcmVnYCB3ZXJlIGdyZWF0ZXIgdGhhbiAxMCwgYWNjZXNzaW5nIGByZWdzW3NyY11gIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIHJpZ2h0PyBCdXQgd2FpdCBhIG1pbnV0ZSwgaXNuJ3QgdGhlcmUgYSBjaGVjayBmb3IgdGhlIHZhbGlkaXR5IG9mIHRoZSByZWdpc3RlciBhcmd1bWVudHMgaW4gYGNoZWNrX2FsdV9vcGA/IExvb2tpbmcgbW9yZSBjbG9zZWx5LCBpdCBhcHBlYXJzIHRoYXQgYGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUClgIGlzIE5PVCBjYWxsZWQgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBUaGlzIG5lZWRzIG1vcmUgdmVyaWZpY2F0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBpbnNuLVx1MDAzZXNyY19yZWdgIGFjdHVhbGx5ICppcyogY2hlY2tlZCBmb3IgYEJQRl9LYCBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhhdCB0aGUgcmVnaXN0ZXIgaW5kZXggYHNyY2AgaXMgYWx3YXlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBgcmVnc2AgYXJyYXksIGFuZCBub3QgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTo1Ny45NzcxMzM0NDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NzE3MDg0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnNuLVxcdTAwM2VzcmNfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ1PWJvb2wgYnBmX2lzX21heV9nb3RvX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NDc6XFx0cmV0dXJuIGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX01BWV9HT1RPO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDgtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTI5OTc9Ym9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMwMTYtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMwMTc6XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDE4LVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjMxPXN0YXRpYyBjb25zdCBjaGFyICpkaXNhc21fa2Z1bmNfbmFtZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIzNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIzNjpcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMzctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM0MT1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzU5LVxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjA6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjEtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzY4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzY5OlxcdHNyY19yZWdfdHlwZSA9IHJlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ10udHlwZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3MC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzczLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mzc0OlxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCByZWdzICsgaW5zbi1cXHUwMDNlc3JjX3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlc3JjX3JlZyksIGluc24tXFx1MDAzZW9mZixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3NS1cXHRcXHRcXHQgICAgICAgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIEJQRl9SRUFELCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTQtXFx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5NTpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5Ni1cXHRcXHRpZiAoZXJyKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mzk3LVxcdFxcdFxcdHJldHVybiBlcnI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzOTg6XFx0XFx0cmV0dXJuIGNoZWNrX3N0YWNrX2FyZ193cml0ZShlbnYsIHN0YXRlLCBpbnNuLVxcdTAwM2VvZmYsIHJlZ3MgKyBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5OS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQwMS1cXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQwMjpcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQwMy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MTQtXFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsIHJlZ3MgKyBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2Vkc3RfcmVnKSwgaW5zbi1cXHUwMDNlb2ZmLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDE1OlxcdFxcdFxcdCAgICAgICBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSwgQlBGX1dSSVRFLCBpbnNuLVxcdTAwM2VzcmNfcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDE2LVxcdFxcdFxcdCAgICAgICBzdHJpY3RfYWxpZ25tZW50X29uY2UsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDIyPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzQtXFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MzU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDU3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDU4OlxcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ1OTpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBsZWFrcyBhZGRyIGludG8gbWVtXFxcXG5cXFwiLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ2MC1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDczLVxcdFxcdGVsc2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NDpcXHRcXHRcXHRsb2FkX3JlZyA9IGluc24tXFx1MDAzZXNyY19yZWc7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzUtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjUxND1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19sb2FkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUyMzpcXHRpZiAoIWF0b21pY19wdHJfdHlwZV9vayhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIGluc24pKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MjQtXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJCUEZfQVRPTUlDIGxvYWRzIGZyb20gUiVkICVzIGlzIG5vdCBhbGxvd2VkXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTI1OlxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MjY6XFx0XFx0XFx0cmVnX3R5cGVfc3RyKGVudiwgcmVnX3N0YXRlKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZyktXFx1MDAzZXR5cGUpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyNy1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzQzMT1zdGF0aWMgaW50IHNhbml0aXplX3NwZWN1bGF0aXZlX3BhdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQ0NC1cXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDQ1OlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0NDYtXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNTYwPXN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IHJlYXNvbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU2My1cXHRjb25zdCBjaGFyICpvcCA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUREID8gXFxcImFkZFxcXCIgOiBcXFwic3ViXFxcIjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM1NjQ6XFx0dTMyIGRzdCA9IGluc24tXFx1MDAzZWRzdF9yZWcsIHNyYyA9IGluc24tXFx1MDAzZXNyY19yZWc7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNTY1LVxcdGJvb2wgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0s7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ3NTA9c3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NzYyLVxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDc2MzpcXHRcXHRzcmNfcmVnID0gXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NzY0LVxcdGVsc2VcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxNy1cXHRcXHRcXHQvKiBwb2ludGVyICs9IHNjYWxhciAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDgxODpcXHRcXHRcXHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxOS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODI0LVxcdFxcdFxcdC8qIGlmIGRzdF9yZWcgaXMgcHJlY2lzZSwgc3JjX3JlZyBzaG91bGQgYmUgcHJlY2lzZSBhcyB3ZWxsICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODI1OlxcdFxcdFxcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODI2LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ4NzMtXFx0ICAgIGRzdF9yZWctXFx1MDAzZWlkIFxcdTAwMjZcXHUwMDI2IGlzX3JlZ19jb25zdChzcmNfcmVnLCBhbHUzMikgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ4NzQ6XFx0ICAgICEoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VzcmNfcmVnID09IGluc24tXFx1MDAzZWRzdF9yZWcpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODc1LVxcdFxcdHU2NCB2YWwgPSByZWdfY29uc3RfdmFsdWUoc3JjX3JlZywgYWx1MzIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0OTE4PXN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk1OC1cXHRcXHRcXHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk1OTpcXHRcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjAtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2OS1cXHRcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk3MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyA9IHJlZ3MgKyBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk3MS1cXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyA9IHJlZ3MgKyBpbnNuLVxcdTAwM2Vkc3RfcmVnO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTkwLVxcdFxcdFxcdFxcdFxcdC8qIGNhc2U6IFIxID0gKHM4LCBzMTYgczMyKVIyICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTkxOlxcdFxcdFxcdFxcdFxcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5OTItXFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTkzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJSJWQgc2lnbi1leHRlbnNpb24gcGFydCBvZiBwb2ludGVyXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5OTUtXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMTItXFx0XFx0XFx0XFx0LyogUjEgPSAodTMyKSBSMiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTAxMzpcXHRcXHRcXHRcXHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDE0LVxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTAxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiUiVkIHBhcnRpYWwgY29weSBvZiBwb2ludGVyXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTAxNjpcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMTctXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzAtXFx0XFx0XFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDcxOlxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Mi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1NzI2PXN0YXRpYyBib29sIHRyeV9tYXRjaF9wa3RfcG9pbnRlcnMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzU1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzcmNfcmVnLVxcdTAwM2V0eXBlLCB0cnVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3NTY6XFx0XFx0XFx0bWFya19wa3RfZW5kKHRoaXNfYnJhbmNoLCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBmYWxzZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzU3LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU3NzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNyY19yZWctXFx1MDAzZXR5cGUsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3Nzc6XFx0XFx0XFx0bWFya19wa3RfZW5kKG90aGVyX2JyYW5jaCwgaW5zbi1cXHUwMDNlc3JjX3JlZywgdHJ1ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Nzc4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU3OTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNyY19yZWctXFx1MDAzZXR5cGUsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3OTg6XFx0XFx0XFx0bWFya19wa3RfZW5kKHRoaXNfYnJhbmNoLCBpbnNuLVxcdTAwM2VzcmNfcmVnLCB0cnVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU3OTktXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTgxOC1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3JjX3JlZy1cXHUwMDNldHlwZSwgdHJ1ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1ODE5OlxcdFxcdFxcdG1hcmtfcGt0X2VuZChvdGhlcl9icmFuY2gsIGluc24tXFx1MDAzZXNyY19yZWcsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4MjAtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTk0Nj1zdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5OTItXFx0XFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTkzOlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTk2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5NzpcXHRcXHRzcmNfcmVnID0gXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTk4LVxcdFxcdGlmICghKHJlZ19pc19wa3RfcG9pbnRlcl9hbnkoZHN0X3JlZykgXFx1MDAyNlxcdTAwMjYgcmVnX2lzX3BrdF9wb2ludGVyX2FueShzcmNfcmVnKSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5OTk6XFx0XFx0ICAgIGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAwMC1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBwb2ludGVyIGNvbXBhcmlzb24gcHJvaGliaXRlZFxcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMDE6XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDAyLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDM4LVxcdFxcdCAgICAhX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBzcmNfcmVnKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMzk6XFx0XFx0XFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwNDAtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjEwMS1cXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxMDI6XFx0XFx0b3RoZXJfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ10gPSBlbnYtXFx1MDAzZXRydWVfcmVnMjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDMtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDUtXFx0ICAgIHNyY19yZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IHNyY19yZWctXFx1MDAzZWlkIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTA2OlxcdCAgICAhV0FSTl9PTl9PTkNFKHNyY19yZWctXFx1MDAzZWlkICE9IG90aGVyX2JyYW5jaF9yZWdzW2luc24tXFx1MDAzZXNyY19yZWddLmlkKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjEwNy1cXHRcXHRzeW5jX2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWcsIFxcdTAwMjZsaW5rZWRfcmVncyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTA4OlxcdFxcdHN5bmNfbGlua2VkX3JlZ3MoZW52LCBvdGhlcl9icmFuY2gsIFxcdTAwMjZvdGhlcl9icmFuY2hfcmVnc1tpbnNuLVxcdTAwM2VzcmNfcmVnXSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDktXFx0XFx0XFx0XFx0IFxcdTAwMjZsaW5rZWRfcmVncyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxNDgtXFx0XFx0XFx0aWYgKHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTQ5OlxcdFxcdFxcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ10pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE1MC1cXHRcXHRcXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxNzEtXFx0XFx0XFx0XFx0ICAgICAgb3Bjb2RlID09IEJQRl9KRVEpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjE3MjpcXHR9IGVsc2UgaWYgKCF0cnlfbWF0Y2hfcGt0X3BvaW50ZXJzKGluc24sIGRzdF9yZWcsIFxcdTAwMjZyZWdzW2luc24tXFx1MDAzZXNyY19yZWddLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE3My1cXHRcXHRcXHRcXHRcXHQgICB0aGlzX2JyYW5jaCwgb3RoZXJfYnJhbmNoKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MTg1PXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjIwMi1cXHRkc3RfcmVnID0gXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjAzOlxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IDApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMDQtXFx0XFx0dTY0IGltbSA9ICgodTY0KShpbnNuICsgMSktXFx1MDAzZWltbSBcXHUwMDNjXFx1MDAzYyAzMikgfCAodTMyKWluc24tXFx1MDAzZWltbTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjIxNi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyMTc6XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19CVEZfSUQpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMTgtXFx0XFx0ZHN0X3JlZy1cXHUwMDNldHlwZSA9IGF1eC1cXHUwMDNlYnRmX3Zhci5yZWdfdHlwZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjIzMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyMzQ6XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19GVU5DKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjM1LVxcdFxcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4O1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjU0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI1NTpcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9WQUxVRSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI1NjpcXHQgICAgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyNTctXFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0FSRU5BKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyNjctXFx0XFx0LyogV2Ugd2FudCByZWctXFx1MDAzZWlkIHRvIGJlIHNhbWUgKDApIGFzIG1hcF92YWx1ZSBpcyBub3QgZGlzdGluY3QgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyNjg6XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX0ZEIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjY5OlxcdFxcdCAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjcwLVxcdFxcdGRzdF9yZWctXFx1MDAzZXR5cGUgPSBDT05TVF9QVFJfVE9fTUFQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MzA3PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM0NC1cXHRcXHQvKiBjaGVjayBleHBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM0NTpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNDYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzIzNT1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyODctXFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VhY3RpdmVfbG9ja3MpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcyODg6XFx0XFx0XFx0XFx0aWYgKChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9SRUdfMCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI4OS1cXHRcXHRcXHRcXHQgICAgIGluc24tXFx1MDAzZWltbSAhPSBCUEZfRlVOQ19zcGluX3VubG9jayBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI5MC1cXHRcXHRcXHRcXHQgICAgIGluc24tXFx1MDAzZWltbSAhPSBCUEZfRlVOQ19rcHRyX3hjaGcpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MjkxOlxcdFxcdFxcdFxcdCAgICAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyOTItXFx0XFx0XFx0XFx0ICAgICAoaW5zbi1cXHUwMDNlb2ZmICE9IDAgfHwgIWtmdW5jX3NwaW5fYWxsb3dlZChpbnNuLVxcdTAwM2VpbW0pKSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMwMC1cXHRcXHRcXHRcXHRjdXJfZnVuYyhlbnYpLVxcdTAwM2Vub19zdGFja19hcmdfbG9hZCA9IHRydWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzAxOlxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczMDItXFx0XFx0XFx0XFx0cmV0dXJuIGNoZWNrX2Z1bmNfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMDM6XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMwNC1cXHRcXHRcXHRcXHRyZXR1cm4gY2hlY2tfa2Z1bmNfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzkwND1zdGF0aWMgaW50IGNoZWNrX2FsdV9maWVsZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTEwLVxcdGNhc2UgQlBGX05FRzpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5MTE6XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0sgfHwgaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MTItXFx0XFx0ICAgIGluc24tXFx1MDAzZW9mZiAhPSAwIHx8IGluc24tXFx1MDAzZWltbSAhPSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MTctXFx0Y2FzZSBCUEZfRU5EOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzkxODpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHwgaW5zbi1cXHUwMDNlb2ZmICE9IDAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MTktXFx0XFx0ICAgIChpbnNuLVxcdTAwM2VpbW0gIT0gMTYgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlaW1tICE9IDMyIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZWltbSAhPSA2NCkgfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk0Mi1cXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTQzOlxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHwgaW5zbi1cXHUwMDNlb2ZmICE9IDApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NDQtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJCUEZfTU9WIHVzZXMgcmVzZXJ2ZWQgZmllbGRzXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2NC1cXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTY1OlxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NjYtXFx0XFx0XFx0ICAgKGluc24tXFx1MDAzZW9mZiAhPSAwIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiAhPSAxKSB8fFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTc4PXN0YXRpYyBpbnQgY2hlY2tfam1wX2ZpZWxkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5ODUtXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0sgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5ODY6XFx0XFx0ICAgIChpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgIT0gMCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5ODc6XFx0XFx0ICAgIChpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fQ0FMTCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk4ODpcXHRcXHQgICAgIGluc24tXFx1MDAzZXNyY19yZWcgIT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk4OS1cXHRcXHQgICAgaW5zbi1cXHUwMDNlZHN0X3JlZyAhPSBCUEZfUkVHXzAgfHwgY2xhc3MgPT0gQlBGX0pNUDMyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5OTUtXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5OTY6XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXFx1MDAzZWltbSAhPSAwIHx8IGluc24tXFx1MDAzZW9mZiAhPSAwKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTk3LVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiQlBGX0pBfEJQRl9YIHVzZXMgcmVzZXJ2ZWQgZmllbGRzXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk5OS1cXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDAwOlxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHwgaW5zbi1cXHUwMDNlZHN0X3JlZyAhPSBCUEZfUkVHXzAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMDEtXFx0XFx0XFx0ICAgKGNsYXNzID09IEJQRl9KTVAgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlaW1tICE9IDApIHx8XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMDgtXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0sgfHwgaW5zbi1cXHUwMDNlaW1tICE9IDAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwMDk6XFx0XFx0ICAgIGluc24tXFx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXFx1MDAzZWRzdF9yZWcgIT0gQlBGX1JFR18wIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDEwLVxcdFxcdCAgICBjbGFzcyA9PSBCUEZfSk1QMzIpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODAxNS1cXHRjYXNlIEJQRl9KQ09ORDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwMTY6XFx0XFx0aWYgKGluc24tXFx1MDAzZWNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIHx8IGluc24tXFx1MDAzZXNyY19yZWcgIT0gQlBGX01BWV9HT1RPIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDE3LVxcdFxcdCAgICBpbnNuLVxcdTAwM2Vkc3RfcmVnIHx8IGluc24tXFx1MDAzZWltbSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDI3LVxcdFxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwMjg6XFx0XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODAyOS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkJQRl9KTVAvSk1QMzIgdXNlcyByZXNlcnZlZCBmaWVsZHNcXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDM2PXN0YXRpYyBpbnQgY2hlY2tfaW5zbl9maWVsZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDU3LVxcdGNhc2UgQlBGX1NUOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA1ODpcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX01FTSB8fCBpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA1OS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkJQRl9TVCB1c2VzIHJlc2VydmVkIGZpZWxkc1xcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwNzEtXFx0XFx0XFx0ICAgIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVyB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA3MjpcXHRcXHRcXHQgICAgKG1vZGUgPT0gQlBGX0FCUyBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwNzMtXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJCUEZfTERfW0FCU3xJTkRdIHVzZXMgcmVzZXJ2ZWQgZmllbGRzXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODA5Nj1zdGF0aWMgaW50IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTEtXFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExMjpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyBcXHUwMDNlPSBNQVhfQlBGX1JFRyBcXHUwMDI2XFx1MDAyNiAhaXNfc3RhY2tfYXJnX2xkeChpbnNuKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExMzpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBpcyBpbnZhbGlkXFxcXG5cXFwiLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTQtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgyNTg9c3RhdGljIHZvaWQgY29udmVydF9wc2V1ZG9fbGRfaW1tNjQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODI2Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyNjc6XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19GVU5DKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODI2OC1cXHRcXHRcXHRjb250aW51ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyNjk6XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZyA9IDA7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MjcwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6NTguMzc0MzEwNzg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzU0OTU2ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEVycm9yIE1lc3NhZ2UgQ2hhbmdlIGluIEJQRiBWZXJpZmllcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGNoZWNrX2FuZF9yZXNvbHZlX2luc25zYCwgSSBzZWUgYSBndWFyZCBlbnN1cmluZyBgaW5zbi1cdTAwM2VzcmNfcmVnYCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBgTUFYX0JQRl9SRUdgLiBUaGF0J3MgZ29vZCwgc28gYHJlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXWAgaXMgYWx3YXlzIHZhbGlkbHkgYWNjZXNzZWQuIEJ1dCB0aGVuLCBJIHJlbWVtYmVyIHRoZSBgY2hlY2tfYWx1X2ZpZWxkc2AgZnVuY3Rpb24sIGFuZCB0aGVyZSdzIGEgc3BlY2lmaWMgY2hlY2sgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLCB3aGVyZSBgaW5zbi1cdTAwM2VzcmNfcmVnYCAqbXVzdCogYmUgYEJQRl9SRUdfMGAgKHdoaWNoIGlzIHplcm8pLlxuXG5Fc3NlbnRpYWxseSwgYGNoZWNrX2FsdV9maWVsZHNgIGd1YXJhbnRlZXMgdGhhdCBpZiBhbiBpbnN0cnVjdGlvbiB1c2VzIGFuIGltbWVkaWF0ZSAoYEJQRl9LYCksIHRoZSBzb3VyY2UgcmVnaXN0ZXIgaXMgYWx3YXlzIHplcm8uIFRoaXMgbWVhbnMgdGhhdCBpbiB0aGUgYHNhbml0aXplX2VycmAgZnVuY3Rpb24sIHRoZSBgc3JjYCByZWdpc3RlciBpcyBhbHdheXMgMCB3aGVuIGBzcmNfaXNfaW1tYCBpcyB0cnVlLiBgcmVnc1swXWAgd2lsbCBhbHdheXMgYmUgaW4gYm91bmRzLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoLCB0aGUgY2hhbmdlIGlzIHB1cmVseSBjb3NtZXRpYy4gSXQncyBhYm91dCBob3cgdGhlIGVycm9yIG1lc3NhZ2UgaXMgZm9ybWF0dGVkLiBUaGUgb3JpZ2luYWwgY29kZSBwcmludGVkIGBzcmNgICh3aGljaCBpcyB6ZXJvKSBpbiB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiB3YXMgYW4gaW1tZWRpYXRlIEFMVSBvcGVyYXRpb24gb24gYSBwb2ludGVyLiBOb3csIGl0IHByaW50cyBgZHN0YCBpbnN0ZWFkIGlmIGBzcmNfaXNfaW1tYCBvciBgcmVnc1tzcmNdLnR5cGVgIGlzIGBTQ0FMQVJfVkFMVUVgLiBIb3dldmVyLCBpdCB3b3VsZCBoYXZlIHByaW50ZWQgYGRzdGAgYW55d2F5IGlmIGByZWdzWzBdLnR5cGVgIHdhcyBgU0NBTEFSX1ZBTFVFYCwgc28gdGhlIGltcGFjdCBpcyBtaW5pbWFsLiBUaGUga2V5IHJlYWxpemF0aW9uIGlzIHRoYXQgcHJpbnRpbmcgXCJSMCBoYXMgcG9pbnRlciB3aXRoIHVuc3VwcG9ydGVkIGFsdSBvcGVyYXRpb25cIiBpcyBtaXNsZWFkaW5nIGJlY2F1c2UgUjAgaXNuJ3QgcmVhbGx5IGludm9sdmVkIGluIHRoZSBvcGVyYXRpb24gKGl0J3MgdGhlIGltbWVkaWF0ZSB2YWx1ZSkuIFRoaXMgcGF0Y2gganVzdCBtYWtlcyB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlIGFjY3VyYXRlIGJ5IHBvaW50aW5nIHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci5cblxuVGhpcyBjaGFuZ2UgZG9lc24ndCBtb2RpZnkgZXhlY3V0aW9uIHBhdGhzLCByZXR1cm4gdmFsdWVzLCBvciBhZmZlY3QgdGhlIG92ZXJhbGwgbG9naWMgb2YgdGhlIHZlcmlmaWVyLiBBZnRlciByZS1leGFtaW5pbmcgdGhlIGNvbXBsZXRlIGRpZmYsIGNvbmZpcm1pbmcgaXQncyBsaW1pdGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgXCJXb3J0aEZ1enppbmdcIiBldmFsdWF0aW9uIHNob3VsZCBiZSBgZmFsc2VgLiBJdCdzIHB1cmVseSBhIGRpYWdub3N0aWMgaW1wcm92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODg4LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTozMDoxNS43MjkyNzMzMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSByZWdpc3RlciBudW1iZXIgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlICh2aWEgdmVyYm9zZSgpKSB3aGVuIGEgQlBGIHBvaW50ZXIgYXJpdGhtZXRpYyBzYW5pdGl6YXRpb24gZXJyb3Igb2NjdXJzIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHN0YXRlLCBvciByZXR1cm4gdmFsdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgcmVnaXN0ZXIgbnVtYmVyIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSAodmlhIHZlcmJvc2UoKSkgd2hlbiBhIEJQRiBwb2ludGVyIGFyaXRobWV0aWMgc2FuaXRpemF0aW9uIGVycm9yIG9jY3VycyB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBzdGF0ZSwgb3IgcmV0dXJuIHZhbHVlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow95slq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 19:27:03 +0000 UTC FinishedAt: 2026-08-03 19:30:16 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHJlZ2lzdGVyIG51bWJlciBwcmludGVkIGluIGFuIGVycm9yIG1lc3NhZ2UgKHZpYSB2ZXJib3NlKCkpIHdoZW4gYSBCUEYgcG9pbnRlciBhcml0aG1ldGljIHNhbml0aXphdGlvbiBlcnJvciBvY2N1cnMgd2l0aCBhbiBpbW1lZGlhdGUgdmFsdWUuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdywgc3RhdGUsIG9yIHJldHVybiB2YWx1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzgxZjk3NmE3OWQ5Mjc4MTk3MmE1OThkNGJiODMyMzEyZDU3OTdkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTk6Mjk6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBmZGM1ZmJiMWY3OGNhLi5lNWE4NTQ3YWQ3MjMxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMzU2Miw2ICYjNDM7MTM1NjIsNyBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc1xuIFx0c3RhdGljIGNvbnN0IGNoYXIgKmVyciA9IFwmIzM0O3BvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIGl0IHByb2hpYml0ZWQgZm9yICFyb290XCYjMzQ7O1xuIFx0Y29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUREID8gXCYjMzQ7YWRkXCYjMzQ7IDogXCYjMzQ7c3ViXCYjMzQ7O1xuIFx0dTMyIGRzdCA9IGluc24tXHUwMDNlZHN0X3JlZywgc3JjID0gaW5zbi1cdTAwM2VzcmNfcmVnO1xuJiM0MztcdGJvb2wgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSztcbiBcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTtcbiBcbiBcdHN3aXRjaCAocmVhc29uKSB7XG5AQCAtMTM1NzEsNyAmIzQzOzEzNTcyLDcgQEAgc3RhdGljIGludCBzYW5pdGl6ZV9lcnIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFQVNPTl9UWVBFOlxuIFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIGhhcyBwb2ludGVyIHdpdGggdW5zdXBwb3J0ZWQgYWx1IG9wZXJhdGlvbiwgJXNcXG5cJiMzNDssXG4tXHRcdFx0cmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFID8gZHN0IDogc3JjLCBlcnIpO1xuJiM0MztcdFx0XHRzcmNfaXNfaW1tIHx8IHJlZ3Nbc3JjXS50eXBlID09IFNDQUxBUl9WQUxVRSA/IGRzdCA6IHNyYywgZXJyKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFQVNPTl9QQVRIUzpcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1IlZCB0cmllZCB0byAlcyBmcm9tIGRpZmZlcmVudCBtYXBzLCBwYXRocyBvciBzY2FsYXJzLCAlc1xcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgcmVnaXN0ZXIgbnVtYmVyIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSAodmlhIHZlcmJvc2UoKSkgd2hlbiBhIEJQRiBwb2ludGVyIGFyaXRobWV0aWMgc2FuaXRpemF0aW9uIGVycm9yIG9jY3VycyB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBzdGF0ZSwgb3IgcmV0dXJuIHZhbHVlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ODFmOTc2YTc5ZDkyNzgxOTcyYTU5OGQ0YmI4MzIzMTJkNTc5N2Q5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAxOToyOTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBmZGM1ZmJiMWY3OGNhLi5lNWE4NTQ3YWQ3MjMxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMzU2Miw2ICYjNDM7MTM1NjIsNyBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmlucwogCXN0YXRpYyBjb25zdCBjaGFyICplcnIgPSAmIzM0O3BvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIGl0IHByb2hpYml0ZWQgZm9yICFyb290JiMzNDs7CiAJY29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FERCA/ICYjMzQ7YWRkJiMzNDsgOiAmIzM0O3N1YiYjMzQ7OwogCXUzMiBkc3QgPSBpbnNuLSZndDtkc3RfcmVnLCBzcmMgPSBpbnNuLSZndDtzcmNfcmVnOwomIzQzOwlib29sIHNyY19pc19pbW0gPSBCUEZfU1JDKGluc24tJmd0O2NvZGUpID09IEJQRl9LOwogCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzID0gY3VyX3JlZ3MoZW52KTsKIAogCXN3aXRjaCAocmVhc29uKSB7CkBAIC0xMzU3MSw3ICYjNDM7MTM1NzIsNyBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmlucwogCQlicmVhazsKIAljYXNlIFJFQVNPTl9UWVBFOgogCQl2ZXJib3NlKGVudiwgJiMzNDtSJWQgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uLCAlc1xuJiMzNDssCi0JCQlyZWdzW3NyY10udHlwZSA9PSBTQ0FMQVJfVkFMVUUgPyBkc3QgOiBzcmMsIGVycik7CiYjNDM7CQkJc3JjX2lzX2ltbSB8fCByZWdzW3NyY10udHlwZSA9PSBTQ0FMQVJfVkFMVUUgPyBkc3QgOiBzcmMsIGVycik7CiAJCWJyZWFrOwogCWNhc2UgUkVBU09OX1BBVEhTOgogCQl2ZXJib3NlKGVudiwgJiMzNDtSJWQgdHJpZWQgdG8gJXMgZnJvbSBkaWZmZXJlbnQgbWFwcywgcGF0aHMgb3Igc2NhbGFycywgJXNcbiYjMzQ7LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc2FuaXRpemVfZXJyYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIHRoaXMgbmV3IGJvb2xlYW4sIGBzcmNfaXNfaW1tID0gQlBGX1NSQyhpbnNuLSZndDtjb2RlKSA9PSBCUEZfSztgLCB0aGF0JiMzOTtzIGJlaW5nIGludHJvZHVjZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBgUkVBU09OX1RZUEVgIGNhc2Ugb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQuIEhtbSwgYW5kIGl0JiMzOTtzICpvbmx5KiBpbXBhY3RpbmcgdGhlIG91dHB1dCBvZiBgdmVyYm9zZShlbnYsIC4uLilgIOKAkyBzbyB0aGlzIGlzIHN0cmljdGx5IGFib3V0IGxvZ2dpbmcgb3IgZGlhZ25vc3RpYyBtZXNzYWdlcy4KClJpZ2h0LCBgc2FuaXRpemVfZXJyYC4uLiB0aGF0JiMzOTtzIGNhbGxlZCB3aGVuIHdlIGhpdCBhbiBlcnJvciBkdXJpbmcgcG9pbnRlciBhcml0aG1ldGljIHNhbml0aXphdGlvbi4gSSByZW1lbWJlciB0aGF0IGNvZGUuIEFoLCBJIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhpcyBwYXRjaCBjb3JyZWN0cyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyB0aGUgcmVnaXN0ZXIgbnVtYmVyIGlzIHByaW50ZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgc291cmNlIG9wZXJhbmQgaXMgYW4gaW1tZWRpYXRlIHZhbHVlIChgQlBGX0tgKS4KClByZXZpb3VzbHksIGl0IHdhcyBjaGVja2luZyBgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFYC4gQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgaWYgaXQmIzM5O3MgYW4gaW1tZWRpYXRlLCBgc3JjYCAqaXNuJiMzOTt0KiBhIHJlZ2lzdGVyLiBTbywgYWNjZXNzaW5nIGByZWdzW3NyY11gIGlzIGVpdGhlciBvdXQgb2YgYm91bmRzIG9yLCBhdCBiZXN0LCBtaXNsZWFkaW5nLiBXYWl0Li4uIGlmIGBzcmNfaXNfaW1tYCBpcyB0cnVlLCB0aGVuIGBzcmNgICpoYXMqIHRvIGJlIHplcm8uIEJlY2F1c2UgYHNyY19yZWdgIGlzIGRlZmluaXRlbHkgMCBmb3IgYEJQRl9LYCBpbnN0cnVjdGlvbnMsIG9yIGlzIG1heWJlIGp1c3Qgbm90IGV2ZW4gdXNlZC4gWWVzLCBgc3JjYCBpcyBgaW5zbi0mZ3Q7c3JjX3JlZ2AuIEdvdCBpdC4gSWYgdGhlIGBCUEZfU1JDYCBmaWVsZCBpcyBgQlBGX0tgLCB0aGVuIGBzcmNfcmVnYCAqaXMqIGluZGVlZCAwLiBTbyBpdCB3b3VsZCBoYXZlIGNoZWNrZWQgYHJlZ3NbMF0udHlwZWAsIHdoaWNoIGlzIHByb2JhYmx5IGZpbmUgc29tZXRpbWVzIGJ1dCBtYXliZSBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yLgoKQnV0LCB0aGUgY2hhbmdlIGlzIGp1c3QgaW4gdGhlIGB2ZXJib3NlKClgIGVycm9yIG1lc3NhZ2UuIEVzc2VudGlhbGx5IGl0JiMzOTtzIHByb3ZpZGluZyBtb3JlIGFjY3VyYXRlIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uIE9rYXksIEkgc2hvdWxkIGNvbmZpcm0gYnkgY2hlY2tpbmcgYHNhbml0aXplX2VycmAgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2FuaXRpemVfZXJyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzU0Nz1zdGF0aWMgdm9pZCBzYW5pdGl6ZV9tYXJrX2luc25fc2VlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU1OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzU2MDpzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCByZWFzb24pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM1NjEte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY2NT1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzY0LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzY1Olx0XHRcdHJldHVybiBzYW5pdGl6ZV9lcnIoZW52LCBpbnNuLCByZXQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNzY2LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1Ny1cdFx0aWYgKHJldCBcdTAwM2MgMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzg1ODpcdFx0XHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1OS1cdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ1OTI9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYwOS1cdFx0aWYgKHJldCBcdTAwM2MgMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYxMDpcdFx0XHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDYxMS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYHNhbml0aXplX2VycmAgaW1wbGVtZW50YXRpb24uIEkgYXNzdW1lIHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgZGVzaWduZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgaW4gdGhlIGZhY2Ugb2YgZXJyb3JzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqSG93IGl0IGlkZW50aWZpZXMgZGlmZmVyZW50IHR5cGVzIG9mIGVycm9ycy4qKiBJcyBpdCB1c2luZyBlcnJvciBjb2RlcywgZXhjZXB0aW9uIHR5cGVzLCBtZXNzYWdlIHBhcnNpbmcsIG9yIGEgY29tYmluYXRpb24/IFdoYXQmIzM5O3MgdGhlIGdyYW51bGFyaXR5IG9mIGl0cyBlcnJvciBjbGFzc2lmaWNhdGlvbj8KKiAgICoqV2hhdCBpdCBkb2VzIHdpdGggdGhlIGVycm9ycyBpdCBmaW5kcy4qKiBJcyBpdCBsb2dnaW5nLCBtYXNraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgdHJhbnNmb3JtaW5nIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgdXNlciwgb3IgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBvdGhlciBjb3JyZWN0aXZlIGFjdGlvbnM/CiogICAqKlRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoZSBzYW5pdGl6YXRpb24uKiogQ291bGQgdGhpcyBmdW5jdGlvbiBpbnRyb2R1Y2UgbmV3IGVycm9ycywgaGlkZSBjcml0aWNhbCBpbmZvcm1hdGlvbiwgb3IgaGF2ZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cz8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrYWdlIG9yIGRlbmlhbC1vZi1zZXJ2aWNlIGlzc3Vlcy4KKiAgICoqVGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgdXNlZC4qKiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IHBhcnRzIG9mIHRoZSBjb2RlYmFzZSByZWx5IG9uIGl0PyBIb3cgZGVlcGx5IGludGVncmF0ZWQgaXMgaXQ/IFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBpc3N1ZXMgSSBmaW5kLgoKTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyBhIGNvcmUgY29tcG9uZW50IGFuZCBJIG11c3QgdGFrZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZCBpdCBjb21wbGV0ZWx5LiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVneSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHJlbGlhYmlsaXR5IG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzU2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzU2MDpcdHN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IHJlYXNvbilcbjEzNTYxOlx0e1xuMTM1NjI6XHRcdHN0YXRpYyBjb25zdCBjaGFyICplcnIgPSBcJiMzNDtwb2ludGVyIGFyaXRobWV0aWMgd2l0aCBpdCBwcm9oaWJpdGVkIGZvciAhcm9vdFwmIzM0OztcbjEzNTYzOlx0XHRjb25zdCBjaGFyICpvcCA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BREQgPyBcJiMzNDthZGRcJiMzNDsgOiBcJiMzNDtzdWJcJiMzNDs7XG4xMzU2NDpcdFx0dTMyIGRzdCA9IGluc24tXHUwMDNlZHN0X3JlZywgc3JjID0gaW5zbi1cdTAwM2VzcmNfcmVnO1xuMTM1NjU6XHRcdGJvb2wgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSztcbjEzNTY2Olx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XG4xMzU2NzpcdFxuMTM1Njg6XHRcdHN3aXRjaCAocmVhc29uKSB7XG4xMzU2OTpcdFx0Y2FzZSBSRUFTT05fQk9VTkRTOlxuMTM1NzA6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1IlZCBoYXMgdW5rbm93biBzY2FsYXIgd2l0aCBtaXhlZCBzaWduZWQgYm91bmRzLCAlc1xcblwmIzM0OyxcbjEzNTcxOlx0XHRcdFx0cmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFID8gc3JjIDogZHN0LCBlcnIpO1xuMTM1NzI6XHRcdFx0YnJlYWs7XG4xMzU3MzpcdFx0Y2FzZSBSRUFTT05fVFlQRTpcbjEzNTc0Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtSJWQgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uLCAlc1xcblwmIzM0OyxcbjEzNTc1Olx0XHRcdFx0c3JjX2lzX2ltbSB8fCByZWdzW3NyY10udHlwZSA9PSBTQ0FMQVJfVkFMVUUgPyBkc3QgOiBzcmMsIGVycik7XG4xMzU3NjpcdFx0XHRicmVhaztcbjEzNTc3Olx0XHRjYXNlIFJFQVNPTl9QQVRIUzpcbjEzNTc4Olx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtSJWQgdHJpZWQgdG8gJXMgZnJvbSBkaWZmZXJlbnQgbWFwcywgcGF0aHMgb3Igc2NhbGFycywgJXNcXG5cJiMzNDssXG4xMzU3OTpcdFx0XHRcdGRzdCwgb3AsIGVycik7XG4xMzU4MDpcdFx0XHRicmVhaztcbjEzNTgxOlx0XHRjYXNlIFJFQVNPTl9MSU1JVDpcbjEzNTgyOlx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtSJWQgdHJpZWQgdG8gJXMgYmV5b25kIHBvaW50ZXIgYm91bmRzLCAlc1xcblwmIzM0OyxcbjEzNTgzOlx0XHRcdFx0ZHN0LCBvcCwgZXJyKTtcbjEzNTg0Olx0XHRcdGJyZWFrO1xuMTM1ODU6XHRcdGNhc2UgUkVBU09OX1NUQUNLOlxuMTM1ODY6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O1IlZCBjb3VsZCBub3QgYmUgcHVzaGVkIGZvciBzcGVjdWxhdGl2ZSB2ZXJpZmljYXRpb24sICVzXFxuXCYjMzQ7LFxuMTM1ODc6XHRcdFx0XHRkc3QsIGVycik7XG4xMzU4ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEzNTg5Olx0XHRkZWZhdWx0OlxuMTM1OTA6XHRcdFx0dmVyaWZpZXJfYnVnKGVudiwgXCYjMzQ7dW5rbm93biByZWFzb24gKCVkKVwmIzM0OywgcmVhc29uKTtcbjEzNTkxOlx0XHRcdGJyZWFrO1xuMTM1OTI6XHRcdH1cbjEzNTkzOlx0XG4xMzU5NDpcdFx0cmV0dXJuIC1FQUNDRVM7XG4xMzU5NTpcdH1cbjEzNTk2Olx0XG4xMzU5NzpcdC8qIGNoZWNrIHRoYXQgc3RhY2sgYWNjZXNzIGZhbGxzIHdpdGhpbiBzdGFjayBsaW1pdHMgYW5kIHRoYXQgJiMzOTtyZWcmIzM5OyBkb2VzbiYjMzk7dFxuMTM1OTg6XHQgKiBoYXZlIGEgdmFyaWFibGUgb2Zmc2V0LlxuMTM1OTk6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIExvZ2dpbmcgYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UgdG8gdGhlIGB2ZXJib3NlKClgIG91dHB1dCB3aXRoaW4gYHNhbml0aXplX2VycigpYC4gSXTigJlzIGFsbCBhYm91dCBsb2dnaW5nIGFuZCBkaWFnbm9zdGljcywgc3BlY2lmaWNhbGx5IGRlY2lkaW5nIHdoZXRoZXIgdG8gcHJpbnQgYGRzdGAgb3IgYHNyY2AgYXMgdGhlIHJlZ2lzdGVyIG51bWJlciBiYXNlZCBvbiBgc3JjX2lzX2ltbWAuIEZ1bmN0aW9uYWxseSwgdGhpcyBkb2VzbiYjMzk7dCBjaGFuZ2UgZXhlY3V0aW9uLCByaWdodD8KCldhaXQgYSBzZWNvbmTigKYgY291bGQgdGhpcyAqYWN0dWFsbHkqIHByZXZlbnQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3Mgb24gYHJlZ3Nbc3JjXWA/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIElmIGBzcmNfaXNfaW1tYCBpcyB0cnVlLCB0aGVuIGBzcmNgIGlzIGBpbnNuLSZndDtzcmNfcmVnYC4gSW4gdHlwaWNhbCBgQlBGX0tgIGluc3RydWN0aW9ucywgYHNyY19yZWdgIGlzIHVzdWFsbHkgMC4gQW5kIGByZWdzYCBpcyBhbiBhcnJheSBvZiBgTUFYX0JQRl9SRUdgLCB3aGljaCBpcyAxMS4gU28sIGByZWdzWzBdYCBpcyBhIHZhbGlkIGFjY2Vzcy4gSXQgKm1pZ2h0KiBiZSB0aGF0IGByZWdzWzBdLnR5cGVgIGlzIG5vdCBgU0NBTEFSX1ZBTFVFYCwgc28gdGhlIG91dHB1dCB3b3VsZCBwcmludCBgc3JjYCwgd2hpY2ggaXMgMCwgaW5zdGVhZCBvZiBgZHN0YC4KCkhhbmcgb24sIGlmIGBzcmNfaXNfaW1tYCBpcyB0cnVlLCBgc3JjYCBpcyBkZWZpbml0ZWx5IDAuIFByaW50aW5nICYjMzQ7UjAgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uJiMzNDsgaXMgY29uZnVzaW5nIHdoZW4gdGhlIHNvdXJjZSBpcyBhbiBpbW1lZGlhdGUsIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHBvaW50ZXIuIEl0JiMzOTtzIGp1c3QgZml4aW5nIHRoZSBlcnJvciBtZXNzYWdlLiBTbywgaXQgaXMgbGlrZWx5IHRoYXQgdGhlIHBhdGNoIGlzIGZvciBsb2dnaW5nLgoKRG9lcyB0aGlzIGNoYW5nZSBwcmV2ZW50IGEgY3Jhc2g/IElmIGBzcmNgIGNvdWxkIGJlIG91dCBvZiBib3VuZHMsIHllcy4gQnV0LCBgaW5zbi0mZ3Q7c3JjX3JlZ2AgaXMgYSA0LWJpdCBmaWVsZCwgc28gaXQmIzM5O3MgYmV0d2VlbiAwLTE1LiBCdXQgd2FpdCwgdGhlIGByZWdzYCBhcnJheSBpcyBvbmx5IHNpemUgMTEsIGl0IGlzIGNhcHBlZCBhdCBgTUFYX0JQRl9SRUdgLiBJZiBgaW5zbi0mZ3Q7c3JjX3JlZ2AgKmlzKiAmZ3Q7IDEwLCB0aGVuIGByZWdzW3NyY11gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzISBUaGF0JiMzOTtzIGEgdnVsbmVyYWJpbGl0eS4KCkkgbmVlZCB0byBjaGVjayBpZiBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSBjb3VsZCBwb3NzaWJseSBtYWtlIGBpbnNuLSZndDtzcmNfcmVnYCAmZ3Q7IDEwIGZvciBgQlBGX0tgIGluc3RydWN0aW9ucy4gVHlwaWNhbGx5LCBgc3JjX3JlZ2AgaXMgMCBpbiBgQlBGX0tgIGluc3RydWN0aW9ucywgYnV0IGEgbWFsaWNpb3VzIHByb2dyYW0gKmNvdWxkKiBzZXQgaXQgdG8gMTUuCgpXYWl0ISBUaGUgQlBGIHZlcmlmaWVyIGNoZWNrcyBgc3JjX3JlZyA9PSAwYCBlYXJseSBvbiBmb3IgYEJQRl9LYCBpbnN0cnVjdGlvbnMuIE9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbGlrZWx5IGhhcm1sZXNzLCBhbmQgaXQmIzM5O3Mgc29sZWx5IGFib3V0IGltcHJvdmluZyB0aGUgZXJyb3IgbWVzc2FnZSBjbGFyaXR5LCBtYWtpbmcgaXQgbGVzcyBjb25mdXNpbmcgYW5kIG1vcmUgaW5mb3JtYXRpdmUuIEkgdGhpbmsgd2UgYXJlIHNhZmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfcmVnX2FyZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzA4Mz1zdGF0aWMgdm9pZCBtYXJrX2luc25femV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMwOTY6c3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk3LVx0XHRcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTMzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzQ6c3RhdGljIGludCBjaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM1LVx0XHRcdCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMTQwOlx0cmV0dXJuIF9fY2hlY2tfcmVnX2FyZyhlbnYsIHN0YXRlLVx1MDAzZXJlZ3MsIHJlZ25vLCB0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTQxLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0Nz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3ODMtXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzg0Olx0XHRcdFx0LyogVGhlIGVhcmxpZXIgY2hlY2tfcmVnX2FyZygpIGhhcyBkZWNpZGVkIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3ODUtXHRcdFx0XHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzQxPXN0YXRpYyBpbnQgY2hlY2tfbG9hZF9tZW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzUyLVx0aWYgKGlzX3N0YWNrX2FyZ19sZHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzUzOlx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1OS1cdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM2MDpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2MS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjQtXHQvKiBjaGVjayBkc3Qgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2Ni1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mzk0LVx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mzk1Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTYtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDAyOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDAzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQwNi1cdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MDc6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDIyPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM0LVx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQzNTpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXHQvKiBjaGVjayBzcmMyIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQwOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ0Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQ4Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgYXV4X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQ5LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDc2LVx0XHQvKiBjaGVjayBhbmQgcmVjb3JkIGxvYWQgb2Ygb2xkIHZhbHVlICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NzpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyMzg9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTEtXHRcdFx0Lypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MzEyOlx0XHRcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTMtXHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODIxMT1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODIyODpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCByZWdubywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjI5LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1Mj1zdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU5LVx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2NhbGxlcl9zYXZlZFtpXV0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNjA6XHRcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNjEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwODI9c3RhdGljIGludCBzZXR1cF9mdW5jX2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBpbnQgY2FsbHNpdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkxMTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTExOTpcdC8qIG9ubHkgaW5jcmVtZW50IGl0IGFmdGVyIGNoZWNrX3JlZ19hcmcoKSBmaW5pc2hlZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkxMjAtXHRzdGF0ZS1cdTAwM2VjdXJmcmFtZSYjNDM7JiM0Mzs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTcxPXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNS1cdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQxNjpcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDE3LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDkxOD1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI1LVx0XHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTI2Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI3LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzNy1cdFx0aWYgKHJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXS50eXBlID09IFNDQUxBUl9WQUxVRSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTM4Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzOS1cdFx0XHRlcnIgPSBlcnIgPzogYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHMoZW52LCBpbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk0Mi1cdFx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk0MzpcdFx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTQ0LVx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTU4LVx0XHRcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NTk6XHRcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2MC1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2NC1cdFx0LyogY2hlY2sgZGVzdCBvcGVyYW5kLCBtYXJrIGFzIHJlcXVpcmVkIGxhdGVyICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NjU6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2Ni1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzAtXHRcdFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzE6XHRcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Mi1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Ni1cdFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzc6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk3LVx0XHQvKiBjaGVjayBkZXN0IG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA5ODpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk5LVx0XHRlcnIgPSBlcnIgPzogYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoZW52LCBpbnNuKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5NDY9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4NS1cdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg2Olx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4Ny1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTkyLVx0XHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5MzpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxODU9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE5Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjE5ODpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxOTktXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjMwNz1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI0LVx0LyogY2hlY2sgd2hldGhlciBpbXBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAocmVnaXN0ZXIgUjYpIGlzIHJlYWRhYmxlICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgY3R4X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ0LVx0XHQvKiBjaGVjayBleHBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzQ1Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ2LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM1Ni1cdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM1NzpcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzU4LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjUzMT1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NTY1LVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NjY6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgcmVnbm8sIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY1NjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjYxNj1zdGF0aWMgaW50IGNoZWNrX2dsb2JhbF9zdWJwcm9nX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjI0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2NjI1Olx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIEJQRl9SRUdfMCwgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjYyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MjM1PXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcyNjc6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBWZXJpZmljYXRpb24gQ29uY2VybioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIEFMVSBvcGVyYXRpb25zLiBJIHNlZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBnZXRzIHNjcmVlbmVkIGJlZm9yZSBpdCBldmVuIGhpdHMgYHNhbml0aXplX2VycmAsIHdoaWNoIGlzIGdvb2QuIElmIGl0JiMzOTtzIGFuIEFMVSBvcCwgYGNoZWNrX2FsdV9vcGAgaXMgaW52b2tlZC4gSW5zaWRlIGBjaGVja19hbHVfb3BgLCB0aGluZ3Mgc2VlbSBzdHJhaWdodGZvcndhcmQsIGVzcGVjaWFsbHkgZm9yIGBCUEZfWGAgc291cmNlIG9wZXJhbmRzIHdoZXJlIEkmIzM5O20gZXhwZWN0aW5nIGBjaGVja19yZWdfYXJnYCB0byB2YWxpZGF0ZSB0aGUgYHNyY19yZWdgLgoKSG93ZXZlciwgbXkgYnJhaW4ganVzdCBwaW5nZWQhIFdoYXQgaGFwcGVucyBpZiB0aGUgc291cmNlIG9wZXJhbmQgaXMgYEJQRl9LYD8gSW4gdGhhdCBjYXNlLCBgY2hlY2tfcmVnX2FyZ2AgKmlzbiYjMzk7dCogY2FsbGVkIGZvciBgc3JjX3JlZ2AsIGJ1dCB0aGUgYGluc24tJmd0O3NyY19yZWdgICppcyogc3RpbGwgcGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24uIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLiBJcyBgaW5zbi0mZ3Q7c3JjX3JlZ2AgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm8gZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zPyBJIGhhdmUgYSBzdHJvbmcgZ3V0IGZlZWxpbmcgdGhhdCBJIG5lZWQgdG8gY29uZmlybSB0aGlzLgoKTGV0IG1lIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBgYnBmX2luc25gIHN0cnVjdHVyZSBhbmQgaG93IGBCUEZfS2AgaXMgaGFuZGxlZC4gSWYgYGluc24tJmd0O3NyY19yZWdgICppc24mIzM5O3QqIHplcm8sIHRoYXQgdmFsdWUgY291bGQgYmUgYW55dGhpbmcgdXAgdG8gMTUuIFRoZSBgcmVnc2AgYXJyYXksIHRob3VnaCwgaGFzIGEgc2l6ZSBvZiBvbmx5IDExIChgTUFYX0JQRl9SRUdgKS4gU28sIGlmIGBpbnNuLSZndDtzcmNfcmVnYCBoYXBwZW5zIHRvIGJlIDE1LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyEgVGhhdCYjMzk7cyBhIHNlcmlvdXMgdnVsbmVyYWJpbGl0eS4KCldhaXQuLi4gZG9lcyB0aGUgdmVyaWZpZXIsIHNvbWV3aGVyZSBpbiBgY2hlY2tfYWx1X29wYCwgYHJlcGxhY2VfbWFwX2ZkX3dpdGhfbWFwX3B0cmAgb3IgYGJwZl9jaGVja2AgYWN0dWFsbHkgdmFsaWRhdGUgdGhlIGBzcmNfcmVnYCBhbmQgY29uZmlybSB0aGF0IGl04oCZcyBgMGAgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zPyBJIG5lZWQgdG8gY2hlY2sgdGhlc2UgZnVuY3Rpb25zICppbW1lZGlhdGVseSogdG8gYXZvaWQgb3Zlcmxvb2tpbmcgdGhpcyBjcnVjaWFsIGRldGFpbC4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBzZWN1cml0eSBob2xlIEkgbmVlZCB0byBhZGRyZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcmNfcmVnID09IDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTI4NDA9c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yODUzLVx0XHRpZiAoY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9DQUxMKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyODU0Olx0XHQgICAgaW5zbltpXS5zcmNfcmVnID09IDAgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjg1NS1cdFx0ICAgIGluc25baV0uaW1tID09IEJQRl9GVU5DX3RhaWxfY2FsbCkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjAyLVx0ZHN0X3JlZyA9IFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjIwMzpcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gMCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjA0LVx0XHR1NjQgaW1tID0gKCh1NjQpKGluc24gJiM0MzsgMSktXHUwMDNlaW1tIFx1MDAzY1x1MDAzYyAzMikgfCAodTMyKWluc24tXHUwMDNlaW1tO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODA5Nj1zdGF0aWMgaW50IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTM0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MTM1Olx0XHRcdGlmIChpbnNuWzBdLnNyY19yZWcgPT0gMClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEzNi1cdFx0XHRcdC8qIHZhbGlkIGdlbmVyaWMgbG9hZCA2NC1iaXQgaW1tICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjgyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipMb2NhdGluZyBgc3JjX3JlZ2AgQ2hlY2tzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRob3VnaHQ6IEkgbmVlZCB0byBwaW5wb2ludCBldmVyeSBpbnN0YW5jZSBvZiBgc3JjX3JlZ2AgY2hlY2tzIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTtsbCBiZSB1c2luZyBzb21lIGZvcm0gb2Ygc2VhcmNoIGZ1bmN0aW9uYWxpdHkg4oCTIGxpa2VseSBhIGdyZXAsIGFuIElERSYjMzk7cyBzZWFyY2gsIG9yIGEgbW9yZSBzcGVjaWFsaXplZCB0b29sIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdC4gVGhlIGdvYWwgaGVyZSBpcyBlZmZpY2llbnQgaWRlbnRpZmljYXRpb247IEkmIzM5O20gbm90IGp1c3QgbG9va2luZyBmb3IgYSBzaW1wbGUgc3RyaW5nIG1hdGNoLCBidXQgdW5kZXJzdGFuZGluZyB0aGUgKmNvbnRleHQqIGFyb3VuZCB0aGUgY2hlY2sgaXRzZWxmLiBBcmUgdGhlc2UgY2hlY2tzIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgdmFsaWRhdGlvbiwgc2VjdXJpdHkgbWVhc3VyZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgdHlwZSBvZiBjaGVjayBtYXR0ZXJzIGluIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gU28gSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjb2RlIHN1cnJvdW5kaW5nIGl0LiBJJiMzOTtsbCBuZWVkIHRvIHRoZW4gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZSByZWdpc3RlciBhbmQgaG93IGl0IGlzIHVzZWQuIEkgYW50aWNpcGF0ZSBxdWlja2x5IG5hcnJvd2luZyBkb3duIHRoZSBwb3RlbnRpYWxseSByZWxldmFudCBpbnN0YW5jZXMgYW5kIHRoZW4gZGl2aW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLiBUaGUga2V5IGlzIG1ldGhvZGljYWwgaWRlbnRpZmljYXRpb24gYW5kIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfcmVnX2FyZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzA4Mz1zdGF0aWMgdm9pZCBtYXJrX2luc25femV4dChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMwOTY6c3RhdGljIGludCBfX2NoZWNrX3JlZ19hcmcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiByZWdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk3LVx0XHRcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTMzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzQ6c3RhdGljIGludCBjaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTM1LVx0XHRcdCBlbnVtIGJwZl9yZWdfYXJnX3R5cGUgdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMTQwOlx0cmV0dXJuIF9fY2hlY2tfcmVnX2FyZyhlbnYsIHN0YXRlLVx1MDAzZXJlZ3MsIHJlZ25vLCB0KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMTQxLX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0Nz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3ODMtXHRcdFx0ICAgIGJwZl9zdGFja19uYXJyb3dfYWNjZXNzX29rKG9mZiwgc2l6ZSwgc3BpbGxfc2l6ZSkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzg0Olx0XHRcdFx0LyogVGhlIGVhcmxpZXIgY2hlY2tfcmVnX2FyZygpIGhhcyBkZWNpZGVkIHRoZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM3ODUtXHRcdFx0XHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0LlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzQxPXN0YXRpYyBpbnQgY2hlY2tfbG9hZF9tZW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzUyLVx0aWYgKGlzX3N0YWNrX2FyZ19sZHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzUzOlx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1OS1cdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM2MDpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2MS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjQtXHQvKiBjaGVjayBkc3Qgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2Ni1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mzk0LVx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mzk1Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTYtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDAyOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDAzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQwNi1cdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MDc6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDIyPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM0LVx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQzNTpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzktXHQvKiBjaGVjayBzcmMyIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQwOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ0Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDQ4Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgYXV4X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDQ5LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDc2LVx0XHQvKiBjaGVjayBhbmQgcmVjb3JkIGxvYWQgb2Ygb2xkIHZhbHVlICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NzpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGxvYWRfcmVnLCBEU1RfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTcyMzg9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTEtXHRcdFx0Lypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MzEyOlx0XHRcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTMtXHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9ODIxMT1zdGF0aWMgaW50IGNoZWNrX2Z1bmNfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBhcmcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMjctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6ODIyODpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCByZWdubywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjI5LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1Mj1zdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MDU5LVx0XHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcdTAwMjZyZWdzW2NhbGxlcl9zYXZlZFtpXV0pO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNjA6XHRcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNjEtXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwODI9c3RhdGljIGludCBzZXR1cF9mdW5jX2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBpbnQgY2FsbHNpdGUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTkxMTgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTExOTpcdC8qIG9ubHkgaW5jcmVtZW50IGl0IGFmdGVyIGNoZWNrX3JlZ19hcmcoKSBmaW5pc2hlZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkxMjAtXHRzdGF0ZS1cdTAwM2VjdXJmcmFtZSYjNDM7JiM0Mzs7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTcxPXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNS1cdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDQxNjpcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNDE3LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDkxOD1zdGF0aWMgaW50IGNoZWNrX2FsdV9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI1LVx0XHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTI2Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI3LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzNy1cdFx0aWYgKHJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXS50eXBlID09IFNDQUxBUl9WQUxVRSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTM4Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkzOS1cdFx0XHRlcnIgPSBlcnIgPzogYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHMoZW52LCBpbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk0Mi1cdFx0fSBlbHNlIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk0MzpcdFx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTQ0LVx0XHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTU4LVx0XHRcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NTk6XHRcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2MC1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2NC1cdFx0LyogY2hlY2sgZGVzdCBvcGVyYW5kLCBtYXJrIGFzIHJlcXVpcmVkIGxhdGVyICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NjU6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2Ni1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzAtXHRcdFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzE6XHRcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Mi1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Ni1cdFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzc6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzgtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk3LVx0XHQvKiBjaGVjayBkZXN0IG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA5ODpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk5LVx0XHRlcnIgPSBlcnIgPzogYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoZW52LCBpbnNuKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5NDY9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4NS1cdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg2Olx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4Ny1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTkyLVx0XHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5MzpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxODU9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE5Ny1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjE5ODpcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxOTktXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjMwNz1zdGF0aWMgaW50IGNoZWNrX2xkX2FicyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI0LVx0LyogY2hlY2sgd2hldGhlciBpbXBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAocmVnaXN0ZXIgUjYpIGlzIHJlYWRhYmxlICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgY3R4X3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ0LVx0XHQvKiBjaGVjayBleHBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzQ1Olx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ2LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM1Ni1cdFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM1NzpcdFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzU4LVx0fVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjUzMT1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NTY1LVx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NjY6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgcmVnbm8sIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY1NjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjYxNj1zdGF0aWMgaW50IGNoZWNrX2dsb2JhbF9zdWJwcm9nX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjI0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2NjI1Olx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIEJQRl9SRUdfMCwgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjYyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3MjM1PXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcyNjc6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjgtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgQlBGIEluc3RydWN0aW9uIFJlZ2lzdGVyIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGJwZl9pbnNuYCBzdHJ1Y3R1cmUgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZm9jdXNlcyBvbiB0aGUgcmVnaXN0ZXIgZmllbGRzLiBJJiMzOTttIHNlZWluZyBgc3JjX3JlZ2AgYW5kIGBkc3RfcmVnYCwgZWFjaCA0IGJpdHMgd2lkZS4gVGhhdCYjMzk7cyBnb29kLCB0eXBpY2FsIHJlZ2lzdGVyIHNldHVwLiBCdXQsIGFuZCBoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiB0aGF0IGp1bXBzIG91dCBhdCBtZTogaWYgdGhlIGluc3RydWN0aW9uJiMzOTtzIGBCUEZfU1JDKGluc24tJmd0O2NvZGUpYCBmaWVsZCBzaWduaWZpZXMgYSBkaXJlY3QgaW1tZWRpYXRlIHZhbHVlIChgQlBGX0tgKSwgKmRvZXMqIHRoZSBCUEYgdmVyaWZpZXIgYXV0b21hdGljYWxseSBlbmZvcmNlIHRoYXQgdGhlIGBzcmNfcmVnYCBmaWVsZCBpcyBzZXQgdG8gemVybz8gVGhhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgY29udmVudGlvbiBpbiBtYW55IGluc3RydWN0aW9uIHNldHMsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0JiMzOTtzIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGhlcmUuCgpUbyBmaWd1cmUgdGhpcyBvdXQgZGVmaW5pdGl2ZWx5LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHZlcmlmaWVyJiMzOTtzIGNvZGUuIE15IGd1dCBzYXlzIEkmIzM5O2xsIHByb2JhYmx5IGZpbmQgdGhlIGFuc3dlciB3aXRoaW4gYHJlcGxhY2VfbWFwX2ZkX3dpdGhfbWFwX3B0cmAgb3IgcGVyaGFwcyBpbiB0aGUgbWFpbiBgYnBmX2NoZWNrYCBmdW5jdGlvbi4gVGhlc2UgYXJlIHRoZSB0d28gcHJpbWFyeSBsb2NhdGlvbnMgd2hlcmUgdGhlIEJQRiB2ZXJpZmllciBsb2dpYyByZWxhdGVkIHRvIGluc3RydWN0aW9uIHZhbGlkYXRpb24gYW5kIHJlc291cmNlIHN1YnN0aXR1dGlvbiB3b3VsZCByZXNpZGUuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aG9zZSBmaWxlcyBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIGF0IHRoZSBiaXQgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NyY19yZWcgIT0gMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwOTY9c3RhdGljIGludCBjaGVja19hbmRfcmVzb2x2ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEyMy1cdFx0XHRpZiAoaSA9PSBpbnNuX2NudCAtIDEgfHwgaW5zblsxXS5jb2RlICE9IDAgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODEyNDpcdFx0XHQgICAgaW5zblsxXS5kc3RfcmVnICE9IDAgfHwgaW5zblsxXS5zcmNfcmVnICE9IDAgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEyNS1cdFx0XHQgICAgaW5zblsxXS5vZmYgIT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBBTFUgT3BlcmF0aW9uIFZlcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBBTFUgb3BlcmF0aW9uIHZlcmlmaWNhdGlvbiBpcyBmdW5jdGlvbmluZy4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgY2hlY2tfYWx1X29wYCBmdW5jdGlvbi4gSSBhbHJlYWR5IGhhdmUgYSBzdHJvbmcgaW50dWl0aW9uIGFib3V0IHdoZXJlIHRoZSBsaWtlbHkgaXNzdWVzIG1pZ2h0IGJlLCBnaXZlbiBwYXN0IGV4cGVyaWVuY2VzIHdpdGggQlBGIHZlcmlmaWVyIGRlc2lnbiBhbmQgY29tbW9uIHBpdGZhbGxzLiBJJiMzOTttIGFudGljaXBhdGluZyBsb29raW5nIGF0IHJlZ2lzdGVyIGNvbnN0cmFpbnRzLCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMsIGFuZCBwZXJoYXBzIHRoZSBoYW5kbGluZyBvZiBkaWZmZXJlbnQgZGF0YSB3aWR0aHMgb3Igc2lnbmVkbmVzcyBjb252ZXJzaW9ucyB3aXRoaW4gdGhlc2UgYXJpdGhtZXRpYyBhbmQgbG9naWNhbCBvcGVyYXRpb25zLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiBpdHMgYXBwcm9hY2ggdG8gaGFuZGxpbmcgZWRnZSBjYXNlcyBhbmQgaG93IHRoZSB2ZXJpZmllciBlbnN1cmVzIHRoYXQgYW4gQUxVIG9wIHdvbiYjMzk7dCBpbnRyb2R1Y2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9yIHZpb2xhdGUgYW55IHNhZmV0eSBndWFyYW50ZWVzLiBJcyBpdCB1c2luZyByYW5nZSBhbmFseXNpcz8gQ29uc3RhbnQgcHJvcGFnYXRpb24/IFN5bWJvbGljIGV4ZWN1dGlvbj8gVGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgaGVyZSBhcmUgY3JpdGljYWwgZm9yIHJvYnVzdG5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ5MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0OTE4Olx0c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuMTQ5MTk6XHR7XG4xNDkyMDpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MgPSBjdXJfcmVncyhlbnYpO1xuMTQ5MjE6XHRcdHU4IG9wY29kZSA9IEJQRl9PUChpbnNuLVx1MDAzZWNvZGUpO1xuMTQ5MjI6XHRcdGludCBlcnI7XG4xNDkyMzpcdFxuMTQ5MjQ6XHRcdGlmIChvcGNvZGUgPT0gQlBGX0VORCB8fCBvcGNvZGUgPT0gQlBGX05FRykge1xuMTQ5MjU6XHRcdFx0LyogY2hlY2sgc3JjIG9wZXJhbmQgKi9cbjE0OTI2Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIFNSQ19PUCk7XG4xNDkyNzpcdFx0XHRpZiAoZXJyKVxuMTQ5Mjg6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTQ5Mjk6XHRcbjE0OTMwOlx0XHRcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnKSkge1xuMTQ5MzE6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIHBvaW50ZXIgYXJpdGhtZXRpYyBwcm9oaWJpdGVkXFxuXCYjMzQ7LFxuMTQ5MzI6XHRcdFx0XHRcdGluc24tXHUwMDNlZHN0X3JlZyk7XG4xNDkzMzpcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuMTQ5MzQ6XHRcdFx0fVxuMTQ5MzU6XHRcbjE0OTM2Olx0XHRcdC8qIGNoZWNrIGRlc3Qgb3BlcmFuZCAqL1xuMTQ5Mzc6XHRcdFx0aWYgKHJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXS50eXBlID09IFNDQUxBUl9WQUxVRSkge1xuMTQ5Mzg6XHRcdFx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XG4xNDkzOTpcdFx0XHRcdGVyciA9IGVyciA/OiBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhlbnYsIGluc24sXG4xNDk0MDpcdFx0XHRcdFx0XHRcdFx0IFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2Vkc3RfcmVnXSxcbjE0OTQxOlx0XHRcdFx0XHRcdFx0XHQgcmVnc1tpbnNuLVx1MDAzZWRzdF9yZWddKTtcbjE0OTQyOlx0XHRcdH0gZWxzZSB7XG4xNDk0MzpcdFx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XG4xNDk0NDpcdFx0XHR9XG4xNDk0NTpcdFx0XHRpZiAoZXJyKVxuMTQ5NDY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMTQ5NDc6XHRcbjE0OTQ4Olx0XHR9IGVsc2UgaWYgKG9wY29kZSA9PSBCUEZfTU9WKSB7XG4xNDk0OTpcdFxuMTQ5NTA6XHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuMTQ5NTE6XHRcdFx0XHRpZiAoaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfU1BBQ0VfQ0FTVCkge1xuMTQ5NTI6XHRcdFx0XHRcdGlmICghZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hKSB7XG4xNDk1MzpcdFx0XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7YWRkcl9zcGFjZV9jYXN0IGluc24gY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHByb2dyYW0gdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCBhcmVuYVxcblwmIzM0Oyk7XG4xNDk1NDpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE0OTU1Olx0XHRcdFx0XHR9XG4xNDk1NjpcdFx0XHRcdH1cbjE0OTU3Olx0XG4xNDk1ODpcdFx0XHRcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXG4xNDk1OTpcdFx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG4xNDk2MDpcdFx0XHRcdGlmIChlcnIpXG4xNDk2MTpcdFx0XHRcdFx0cmV0dXJuIGVycjtcbjE0OTYyOlx0XHRcdH1cbjE0OTYzOlx0XG4xNDk2NDpcdFx0XHQvKiBjaGVjayBkZXN0IG9wZXJhbmQsIG1hcmsgYXMgcmVxdWlyZWQgbGF0ZXIgKi9cbjE0OTY1Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcbjE0OTY2Olx0XHRcdGlmIChlcnIpXG4xNDk2NzpcdFx0XHRcdHJldHVybiBlcnI7XG4xNDk2ODpcdFxuMTQ5Njk6XHRcdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xuMTQ5NzA6XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyA9IHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2VzcmNfcmVnO1xuMTQ5NzE6XHRcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyA9IHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2Vkc3RfcmVnO1xuMTQ5NzI6XHRcbjE0OTczOlx0XHRcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCkge1xuMTQ5NzQ6XHRcdFx0XHRcdGlmIChpbnNuLVx1MDAzZWltbSkge1xuMTQ5NzU6XHRcdFx0XHRcdFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cbjE0OTc2Olx0XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuMTQ5Nzc6XHRcdFx0XHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IDEpIHsgLyogY2FzdCBmcm9tIGFzKDEpIHRvIGFzKDApICovXG4xNDk3ODpcdFx0XHRcdFx0XHRcdGRzdF9yZWctXHUwMDNldHlwZSA9IFBUUl9UT19BUkVOQTtcbjE0OTc5Olx0XHRcdFx0XHRcdFx0LyogUFRSX1RPX0FSRU5BIGlzIDMyLWJpdCAqL1xuMTQ5ODA6XHRcdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXHUwMDNlaW5zbl9pZHggJiM0MzsgMTtcbjE0OTgxOlx0XHRcdFx0XHRcdH1cbjE0OTgyOlx0XHRcdFx0XHR9IGVsc2UgaWYgKGluc24tXHUwMDNlb2ZmID09IDApIHtcbjE0OTgzOlx0XHRcdFx0XHRcdC8qIGNhc2U6IFIxID0gUjJcbjE0OTg0Olx0XHRcdFx0XHRcdCAqIGNvcHkgcmVnaXN0ZXIgc3RhdGUgdG8gZGVzdCByZWdcbjE0OTg1Olx0XHRcdFx0XHRcdCAqL1xuMTQ5ODY6XHRcdFx0XHRcdFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XG4xNDk4NzpcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuMTQ5ODg6XHRcdFx0XHRcdFx0ZHN0X3JlZy1cdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XG4xNDk4OTpcdFx0XHRcdFx0fSBlbHNlIHtcbjE0OTkwOlx0XHRcdFx0XHRcdC8qIGNhc2U6IFIxID0gKHM4LCBzMTYgczMyKVIyICovXG4xNDk5MTpcdFx0XHRcdFx0XHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZykpIHtcbjE0OTkyOlx0XHRcdFx0XHRcdFx0dmVyYm9zZShlbnYsXG4xNDk5MzpcdFx0XHRcdFx0XHRcdFx0XCYjMzQ7UiVkIHNpZ24tZXh0ZW5zaW9uIHBhcnQgb2YgcG9pbnRlclxcblwmIzM0OyxcbjE0OTk0Olx0XHRcdFx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuMTQ5OTU6XHRcdFx0XHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbjE0OTk2Olx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSkge1xuMTQ5OTc6XHRcdFx0XHRcdFx0XHRib29sIG5vX3NleHQ7XG4xNDk5ODpcdFxuMTQ5OTk6XHRcdFx0XHRcdFx0XHRub19zZXh0ID0gcmVnX3VtYXgoc3JjX3JlZykgXHUwMDNjICgxVUxMIFx1MDAzY1x1MDAzYyAoaW5zbi1cdTAwM2VvZmYgLSAxKSk7XG4xNTAwMDpcdFx0XHRcdFx0XHRcdGlmIChub19zZXh0KVxuMTUwMDE6XHRcdFx0XHRcdFx0XHRcdGFzc2lnbl9zY2FsYXJfaWRfYmVmb3JlX21vdihlbnYsIHNyY19yZWcpO1xuMTUwMDI6XHRcdFx0XHRcdFx0XHQqZHN0X3JlZyA9ICpzcmNfcmVnO1xuMTUwMDM6XHRcdFx0XHRcdFx0XHRpZiAoIW5vX3NleHQpXG4xNTAwNDpcdFx0XHRcdFx0XHRcdFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xuMTUwMDU6XHRcdFx0XHRcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYgXHUwMDNlXHUwMDNlIDMpO1xuMTUwMDY6XHRcdFx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZXN1YnJlZ19kZWYgPSBERUZfTk9UX1NVQlJFRztcbjE1MDA3Olx0XHRcdFx0XHRcdH0gZWxzZSB7XG4xNTAwODpcdFx0XHRcdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xuMTUwMDk6XHRcdFx0XHRcdFx0fVxuMTUwMTA6XHRcdFx0XHRcdH1cbjE1MDExOlx0XHRcdFx0fSBlbHNlIHtcbjE1MDEyOlx0XHRcdFx0XHQvKiBSMSA9ICh1MzIpIFIyICovXG4xNTAxMzpcdFx0XHRcdFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcpKSB7XG4xNTAxNDpcdFx0XHRcdFx0XHR2ZXJib3NlKGVudixcbjE1MDE1Olx0XHRcdFx0XHRcdFx0XCYjMzQ7UiVkIHBhcnRpYWwgY29weSBvZiBwb2ludGVyXFxuXCYjMzQ7LFxuMTUwMTY6XHRcdFx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xuMTUwMTc6XHRcdFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzQyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgc3RhcnRpbmcgdG8gdHVybi4KCioqRGlzc2VjdGluZyB0aGUgRGF0YSBGbG93KioKCkhhbmcgb24gYSBzZWNvbmQsIGEga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYGNoZWNrX2FsdV9vcGAsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGVpdGhlciBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgIG9yIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgYmVoYXZpb3IuIFNvLCBteSBmb2N1cyBpcyBub3cgb24gdGhvc2UgZnVuY3Rpb25zLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBjaGVja19hbHVfb3BgLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgc2FuaXRpemVfZXJyYCBpcyB1c2VkLCBzbyB0aGF0IEkgdW5kZXJzdGFuZCB3aGVyZSBpdCBjYW4gY3JlYXRlIGEgcHJvYmxlbSwgYW5kIGhvdyB0aGUgcHJvZ3JhbSBkZWFscyB3aXRoIGl0LiBJIHNob3VsZCB0cmFjZSB0aGUgZXJyb3IgaGFuZGxpbmcgZmxvdyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzc1MDpcdFx0ICovXG4xMzc1MTpcdFx0aWYgKGJhc2VfdHlwZShwdHJfcmVnLVx1MDAzZXR5cGUpID09IFBUUl9UT19NRU0gXHUwMDI2XHUwMDI2IChwdHJfcmVnLVx1MDAzZXR5cGUgXHUwMDI2IFBUUl9VTlRSVVNURUQpKVxuMTM3NTI6XHRcdFx0cmV0dXJuIDA7XG4xMzc1MzpcdFxuMTM3NTQ6XHRcdGlmICghY2hlY2tfcmVnX3NhbmVfb2Zmc2V0X3NjYWxhcihlbnYsIG9mZl9yZWcsIHB0cl9yZWctXHUwMDNldHlwZSkgfHxcbjEzNzU1Olx0XHQgICAgIWNoZWNrX3JlZ19zYW5lX29mZnNldF9wdHIoZW52LCBwdHJfcmVnLCBwdHJfcmVnLVx1MDAzZXR5cGUpKVxuMTM3NTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzc1NzpcdFxuMTM3NTg6XHRcdC8qIHBvaW50ZXIgdHlwZXMgZG8gbm90IGNhcnJ5IDMyLWJpdCBib3VuZHMgYXQgdGhlIG1vbWVudC4gKi9cbjEzNzU5Olx0XHRfX21hcmtfcmVnMzJfdW5ib3VuZGVkKGRzdF9yZWcpO1xuMTM3NjA6XHRcbjEzNzYxOlx0XHRpZiAoc2FuaXRpemVfbmVlZGVkKG9wY29kZSkpIHtcbjEzNzYyOlx0XHRcdHJldCA9IHNhbml0aXplX3B0cl9hbHUoZW52LCBpbnNuLCBwdHJfcmVnLCBvZmZfcmVnLCBkc3RfcmVnLFxuMTM3NjM6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZpbmZvLCBmYWxzZSk7XG4xMzc2NDpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTM3NjU6XHRcdFx0XHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcbjEzNzY2Olx0XHR9XG4xMzc2NzpcdFxuMTM3Njg6XHRcdHN3aXRjaCAob3Bjb2RlKSB7XG4xMzc2OTpcdFx0Y2FzZSBCUEZfQUREOlxuMTM3NzA6XHRcdFx0LypcbjEzNzcxOlx0XHRcdCAqIGRzdF9yZWcgZ2V0cyB0aGUgcG9pbnRlciB0eXBlIGFuZCBzaW5jZSBzb21lIHBvc2l0aXZlXG4xMzc3MjpcdFx0XHQgKiBpbnRlZ2VyIHZhbHVlIHdhcyBhZGRlZCB0byB0aGUgcG9pbnRlciwgZ2l2ZSBpdCBhIG5ldyAmIzM5O2lkJiMzOTtcbjEzNzczOlx0XHRcdCAqIGlmIGl0JiMzOTtzIGEgUFRSX1RPX1BBQ0tFVC5cbjEzNzc0Olx0XHRcdCAqIHRoaXMgY3JlYXRlcyBhIG5ldyAmIzM5O2Jhc2UmIzM5OyBwb2ludGVyLCBvZmZfcmVnICh2YXJpYWJsZSkgZ2V0c1xuMTM3NzU6XHRcdFx0ICogYWRkZWQgaW50byB0aGUgdmFyaWFibGUgb2Zmc2V0LCBhbmQgd2UgY29weSB0aGUgZml4ZWQgb2Zmc2V0XG4xMzc3NjpcdFx0XHQgKiBmcm9tIHB0cl9yZWcuXG4xMzc3NzpcdFx0XHQgKi9cbjEzNzc4Olx0XHRcdGRzdF9yZWctXHUwMDNlcjY0ID0gY251bTY0X2FkZChwdHJfcmVnLVx1MDAzZXI2NCwgb2ZmX3JlZy1cdTAwM2VyNjQpO1xuMTM3Nzk6XHRcdFx0ZHN0X3JlZy1cdTAwM2V2YXJfb2ZmID0gdG51bV9hZGQocHRyX3JlZy1cdTAwM2V2YXJfb2ZmLCBvZmZfcmVnLVx1MDAzZXZhcl9vZmYpO1xuMTM3ODA6XHRcdFx0ZHN0X3JlZy1cdTAwM2VyYXcgPSBwdHJfcmVnLVx1MDAzZXJhdztcbjEzNzgxOlx0XHRcdGlmIChyZWdfaXNfcGt0X3BvaW50ZXIocHRyX3JlZykpIHtcbjEzNzgyOlx0XHRcdFx0aWYgKCFrbm93bilcbjEzNzgzOlx0XHRcdFx0XHRkc3RfcmVnLVx1MDAzZWlkID0gJiM0MzsmIzQzO2Vudi1cdTAwM2VpZF9nZW47XG4xMzc4NDpcdFx0XHRcdC8qXG4xMzc4NTpcdFx0XHRcdCAqIENsZWFyIHJhbmdlIGZvciB1bmtub3duIGFkZGVuZHMgc2luY2Ugd2UgY2FuJiMzOTt0IGtub3dcbjEzNzg2Olx0XHRcdFx0ICogd2hlcmUgdGhlIHBrdCBwb2ludGVyIGVuZGVkIHVwLiBBbHNvIGNsZWFyIEFUX1BLVF9FTkQgL1xuMTM3ODc6XHRcdFx0XHQgKiBCRVlPTkRfUEtUX0VORCBmcm9tIHByaW9yIGNvbXBhcmlzb24gYXMgYW55IHBvaW50ZXJcbjEzNzg4Olx0XHRcdFx0ICogYXJpdGhtZXRpYyBpbnZhbGlkYXRlcyB0aGVtLlxuMTM3ODk6XHRcdFx0XHQgKi9cbjEzNzkwOlx0XHRcdFx0aWYgKCFrbm93biB8fCBkc3RfcmVnLVx1MDAzZXJhbmdlIFx1MDAzYyAwKVxuMTM3OTE6XHRcdFx0XHRcdG1lbXNldChcdTAwMjZkc3RfcmVnLVx1MDAzZXJhdywgMCwgc2l6ZW9mKGRzdF9yZWctXHUwMDNlcmF3KSk7XG4xMzc5MjpcdFx0XHR9XG4xMzc5MzpcdFx0XHRicmVhaztcbjEzNzk0Olx0XHRjYXNlIEJQRl9TVUI6XG4xMzc5NTpcdFx0XHRpZiAoZHN0X3JlZyAhPSBwdHJfcmVnKSB7XG4xMzc5NjpcdFx0XHRcdC8qIHNjYWxhciAtPSBwb2ludGVyLiAgQ3JlYXRlcyBhbiB1bmtub3duIHNjYWxhciAqL1xuMTM3OTc6XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIHRyaWVkIHRvIHN1YnRyYWN0IHBvaW50ZXIgZnJvbSBzY2FsYXJcXG5cJiMzNDssXG4xMzc5ODpcdFx0XHRcdFx0ZHN0KTtcbjEzNzk5Olx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIENvc21ldGljIEVycm9yIE1lc3NhZ2UgQ29ycmVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHN1YnRsZSBjaGFuZ2UgaW4gYHNhbml0aXplX2VycmAuIEl0IHNlZW1zIGxpa2UgYHNhbml0aXplX2VycmAgaXMgY2FsbGVkIHdoZW4gdGhlcmUmIzM5O3MgYW4gaXNzdWUgZHVyaW5nIHBvaW50ZXIgYXJpdGhtZXRpYyBhZGp1c3RtZW50cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgIGFuZCBgYWRqdXN0X3NjYWxhcl9taW5fbWF4X3ZhbHNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSBlcnJvciBtZXNzYWdlIGlkZW50aWZpZXMgdGhlIHByb2JsZW1hdGljIHJlZ2lzdGVyLgoKQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgdXNlZCBgcmVnc1tzcmNdLnR5cGVgIGluIHRoZSBgdmVyYm9zZWAgc3RhdGVtZW50IHRvIGRldGVybWluZSB3aGljaCByZWdpc3RlciB0byByZXBvcnQuIE5vdywgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgY29uZGl0aW9uYWxseSB1c2luZyBgZHN0YCAoZGVzdGluYXRpb24gcmVnaXN0ZXIpIG9yIGBzcmNgIChzb3VyY2UgcmVnaXN0ZXIpIGJhc2VkIG9uIGBzcmNfaXNfaW1tYCBvciBgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGNhc2VzIHdpdGhpbiBgQlBGX0tgIGluc3RydWN0aW9ucy4KClRoZSBsb2dpYyBzYXlzIHRoYXQgaWYgYHNyY19pc19pbW1gIGlzIHRydWUsIG9yIHRoZSBzb3VyY2UgcmVnaXN0ZXImIzM5O3MgdHlwZSBpcyBhIHNjYWxhciB2YWx1ZSwgdGhlbiB0aGUgdGFyZ2V0IHJlZ2lzdGVyIChgZHN0YCkgaXMgcHJpbnRlZDsgb3RoZXJ3aXNlLCB0aGUgc291cmNlIHJlZ2lzdGVyIChgc3JjYCkgaXMgcHJpbnRlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS4gVGhpcyBpcyBhbGwgYWJvdXQgbWFraW5nIHRoZSBlcnJvciBtZXNzYWdlIG1vcmUgaW5mb3JtYXRpdmUuIFRoZSBjb2RlIGlzIHRyeWluZyB0byBwcmludCB0aGUgY29ycmVjdCByZWdpc3RlciBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzb3VyY2Ugb3BlcmFuZCBpcyBhbiBpbW1lZGlhdGUgdmFsdWUgb3IgYSByZWdpc3Rlci4KClRoZSBrZXkgaW5zaWdodCBpcyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiBgQlBGX0tgIGluc3RydWN0aW9ucy4gSW4gdGhlc2UgaW5zdHJ1Y3Rpb25zLCBgaW5zbi0mZ3Q7c3JjX3JlZ2AgaXMgdXN1YWxseSAwLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcG90ZW50aWFsbHkgcHJpbnRpbmcgJiMzNDtSMCYjMzQ7IGV2ZW4gaWYgdGhlIG9wZXJhdGlvbiB3YXMgaW52YWxpZC4gTm93IGl0IG1pZ2h0IHByaW50IHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpbnN0ZWFkLiBUaGlzIGlzIHB1cmVseSBhIGNvc21ldGljIGltcHJvdmVtZW50IGZvciB0aGUgZXJyb3IgbWVzc2FnZSwgbWFraW5nIGl0IG1vcmUgYWNjdXJhdGUgYW5kIGhlbHBmdWwgZm9yIGRlYnVnZ2luZy4KCk5vdywgYSBwb3RlbnRpYWwgY29uY2VybiBwb3BwZWQgdXA6IENhbiBgc3JjYCBldmVuIGJlIG91dCBvZiBib3VuZHMsIGVzcGVjaWFsbHkgZ2l2ZW4gYGluc24tJmd0O3NyY19yZWdgPyBJZiBgaW5zbi0mZ3Q7c3JjX3JlZ2Agd2VyZSBncmVhdGVyIHRoYW4gMTAsIGFjY2Vzc2luZyBgcmVnc1tzcmNdYCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLCByaWdodD8gQnV0IHdhaXQgYSBtaW51dGUsIGlzbiYjMzk7dCB0aGVyZSBhIGNoZWNrIGZvciB0aGUgdmFsaWRpdHkgb2YgdGhlIHJlZ2lzdGVyIGFyZ3VtZW50cyBpbiBgY2hlY2tfYWx1X29wYD8gTG9va2luZyBtb3JlIGNsb3NlbHksIGl0IGFwcGVhcnMgdGhhdCBgY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tJmd0O3NyY19yZWcsIFNSQ19PUClgIGlzIE5PVCBjYWxsZWQgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBUaGlzIG5lZWRzIG1vcmUgdmVyaWZpY2F0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBpbnNuLSZndDtzcmNfcmVnYCBhY3R1YWxseSAqaXMqIGNoZWNrZWQgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBUaGlzIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZ2lzdGVyIGluZGV4IGBzcmNgIGlzIGFsd2F5cyB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgYHJlZ3NgIGFycmF5LCBhbmQgbm90IGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luc24tXHUwMDNlc3JjX3JlZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ1PWJvb2wgYnBmX2lzX21heV9nb3RvX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU0Ni17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTQ3Olx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfTUFZX0dPVE87XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTQ4LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mjk5Nz1ib29sIGJwZl9pc19yZWc2NChzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMwMTYtXHRcdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzAxNzpcdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDE4LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjMxPXN0YXRpYyBjb25zdCBjaGFyICpkaXNhc21fa2Z1bmNfbmFtZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIzNjpcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMzctXHRcdHJldHVybiBOVUxMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MzQxPXN0YXRpYyBpbnQgY2hlY2tfbG9hZF9tZW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzU5LVx0LyogY2hlY2sgc3JjIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzYwOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzYxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzY5Olx0c3JjX3JlZ190eXBlID0gcmVnc1tpbnNuLVx1MDAzZXNyY19yZWddLnR5cGU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3MC1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3My1cdCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNzQ6XHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCByZWdzICYjNDM7IGluc24tXHUwMDNlc3JjX3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cdTAwM2VzcmNfcmVnKSwgaW5zbi1cdTAwM2VvZmYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3NS1cdFx0XHQgICAgICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgQlBGX1JFQUQsIGluc24tXHUwMDNlZHN0X3JlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM4ND1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTQtXHRpZiAoaXNfc3RhY2tfYXJnX3N0eChpbnNuKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjYzOTU6XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5Ni1cdFx0aWYgKGVycilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mzk3LVx0XHRcdHJldHVybiBlcnI7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5ODpcdFx0cmV0dXJuIGNoZWNrX3N0YWNrX2FyZ193cml0ZShlbnYsIHN0YXRlLCBpbnNuLVx1MDAzZW9mZiwgcmVncyAmIzQzOyBpbnNuLVx1MDAzZXNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTktXHR9XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDAyOlx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDAzLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQxNC1cdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2Vkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVx1MDAzZWRzdF9yZWcpLCBpbnNuLVx1MDAzZW9mZixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDE1Olx0XHRcdCAgICAgICBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIGluc24tXHUwMDNlc3JjX3JlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDE2LVx0XHRcdCAgICAgICBzdHJpY3RfYWxpZ25tZW50X29uY2UsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQyMj1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzNC1cdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MzU6XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzYtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDU3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0NTg6XHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDU5Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIGxlYWtzIGFkZHIgaW50byBtZW1cXG5cJiMzNDssIGluc24tXHUwMDNlc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ2MC1cdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzMtXHRcdGVsc2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDc0Olx0XHRcdGxvYWRfcmVnID0gaW5zbi1cdTAwM2VzcmNfcmVnO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY1MTQ9c3RhdGljIGludCBjaGVja19hdG9taWNfbG9hZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTIyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MjM6XHRpZiAoIWF0b21pY19wdHJfdHlwZV9vayhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTI0LVx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7QlBGX0FUT01JQyBsb2FkcyBmcm9tIFIlZCAlcyBpcyBub3QgYWxsb3dlZFxcblwmIzM0Oyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTI1Olx0XHRcdGluc24tXHUwMDNlc3JjX3JlZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTI2Olx0XHRcdHJlZ190eXBlX3N0cihlbnYsIHJlZ19zdGF0ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZyktXHUwMDNldHlwZSkpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MjctXHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzQzMT1zdGF0aWMgaW50IHNhbml0aXplX3NwZWN1bGF0aXZlX3BhdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0NDQtXHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM0NDU6XHRcdFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXHUwMDNlc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0NDYtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTM1NjA9c3RhdGljIGludCBzYW5pdGl6ZV9lcnIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgcmVhc29uKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU2My1cdGNvbnN0IGNoYXIgKm9wID0gQlBGX09QKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FERCA/IFwmIzM0O2FkZFwmIzM0OyA6IFwmIzM0O3N1YlwmIzM0Oztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzU2NDpcdHUzMiBkc3QgPSBpbnNuLVx1MDAzZWRzdF9yZWcsIHNyYyA9IGluc24tXHUwMDNlc3JjX3JlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU2NS1cdGJvb2wgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSztcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ3NTA9c3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDc2Mi1cdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ3NjM6XHRcdHNyY19yZWcgPSBcdTAwMjZyZWdzW2luc24tXHUwMDNlc3JjX3JlZ107XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ3NjQtXHRlbHNlXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODE3LVx0XHRcdC8qIHBvaW50ZXIgJiM0Mzs9IHNjYWxhciAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODE4Olx0XHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxOS1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgyNC1cdFx0XHQvKiBpZiBkc3RfcmVnIGlzIHByZWNpc2UsIHNyY19yZWcgc2hvdWxkIGJlIHByZWNpc2UgYXMgd2VsbCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODI1Olx0XHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgyNi1cdFx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDg3My1cdCAgICBkc3RfcmVnLVx1MDAzZWlkIFx1MDAyNlx1MDAyNiBpc19yZWdfY29uc3Qoc3JjX3JlZywgYWx1MzIpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODc0Olx0ICAgICEoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgPT0gaW5zbi1cdTAwM2Vkc3RfcmVnKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODc1LVx0XHR1NjQgdmFsID0gcmVnX2NvbnN0X3ZhbHVlKHNyY19yZWcsIGFsdTMyKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ5MTg9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk1OC1cdFx0XHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTU5Olx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjAtXHRcdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjktXHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk3MDpcdFx0XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyA9IHJlZ3MgJiM0MzsgaW5zbi1cdTAwM2VzcmNfcmVnO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTcxLVx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnID0gcmVncyAmIzQzOyBpbnNuLVx1MDAzZWRzdF9yZWc7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTkwLVx0XHRcdFx0XHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTkxOlx0XHRcdFx0XHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXHUwMDNlc3JjX3JlZykpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk5Mi1cdFx0XHRcdFx0XHR2ZXJib3NlKGVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk5My1cdFx0XHRcdFx0XHRcdFwmIzM0O1IlZCBzaWduLWV4dGVuc2lvbiBwYXJ0IG9mIHBvaW50ZXJcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5OTQ6XHRcdFx0XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTk1LVx0XHRcdFx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTAxMi1cdFx0XHRcdC8qIFIxID0gKHUzMikgUjIgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTAxMzpcdFx0XHRcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDE0LVx0XHRcdFx0XHR2ZXJib3NlKGVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTAxNS1cdFx0XHRcdFx0XHRcJiMzNDtSJWQgcGFydGlhbCBjb3B5IG9mIHBvaW50ZXJcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwMTY6XHRcdFx0XHRcdFx0aW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTAxNy1cdFx0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDcwLVx0XHRcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDcxOlx0XHRcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzItXHRcdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU3MjY9c3RhdGljIGJvb2wgdHJ5X21hdGNoX3BrdF9wb2ludGVycyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzU1LVx0XHRcdFx0XHQgICAgICAgc3JjX3JlZy1cdTAwM2V0eXBlLCB0cnVlKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTc1NjpcdFx0XHRtYXJrX3BrdF9lbmQodGhpc19icmFuY2gsIGluc24tXHUwMDNlc3JjX3JlZywgZmFsc2UpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzU3LVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTc3Ni1cdFx0XHRcdFx0ICAgICAgIHNyY19yZWctXHUwMDNldHlwZSwgZmFsc2UpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1Nzc3Olx0XHRcdG1hcmtfcGt0X2VuZChvdGhlcl9icmFuY2gsIGluc24tXHUwMDNlc3JjX3JlZywgdHJ1ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU3NzgtXHRcdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Nzk3LVx0XHRcdFx0XHQgICAgICAgc3JjX3JlZy1cdTAwM2V0eXBlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3OTg6XHRcdFx0bWFya19wa3RfZW5kKHRoaXNfYnJhbmNoLCBpbnNuLVx1MDAzZXNyY19yZWcsIHRydWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Nzk5LVx0XHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTgxOC1cdFx0XHRcdFx0ICAgICAgIHNyY19yZWctXHUwMDNldHlwZSwgdHJ1ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU4MTk6XHRcdFx0bWFya19wa3RfZW5kKG90aGVyX2JyYW5jaCwgaW5zbi1cdTAwM2VzcmNfcmVnLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4MjAtXHRcdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1OTQ2PXN0YXRpYyBpbnQgY2hlY2tfY29uZF9qbXBfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5OTItXHRcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTkzOlx0XHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTk0LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5NzpcdFx0c3JjX3JlZyA9IFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5OC1cdFx0aWYgKCEocmVnX2lzX3BrdF9wb2ludGVyX2FueShkc3RfcmVnKSBcdTAwMjZcdTAwMjYgcmVnX2lzX3BrdF9wb2ludGVyX2FueShzcmNfcmVnKSkgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5OTk6XHRcdCAgICBpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDAwLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDtSJWQgcG9pbnRlciBjb21wYXJpc29uIHByb2hpYml0ZWRcXG5cJiMzNDssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMDE6XHRcdFx0XHRpbnNuLVx1MDAzZXNyY19yZWcpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDAyLVx0XHRcdHJldHVybiAtRUFDQ0VTO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAzOC1cdFx0ICAgICFfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHNyY19yZWcpKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MDM5Olx0XHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cdTAwM2VzcmNfcmVnKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjA0MC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDEtXHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTAyOlx0XHRvdGhlcl9icmFuY2hfcmVnc1tpbnNuLVx1MDAzZXNyY19yZWddID0gZW52LVx1MDAzZXRydWVfcmVnMjtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjEwMy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDUtXHQgICAgc3JjX3JlZy1cdTAwM2V0eXBlID09IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgc3JjX3JlZy1cdTAwM2VpZCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjEwNjpcdCAgICAhV0FSTl9PTl9PTkNFKHNyY19yZWctXHUwMDNlaWQgIT0gb3RoZXJfYnJhbmNoX3JlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXS5pZCkpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjEwNy1cdFx0c3luY19saW5rZWRfcmVncyhlbnYsIHRoaXNfYnJhbmNoLCBzcmNfcmVnLCBcdTAwMjZsaW5rZWRfcmVncyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxMDg6XHRcdHN5bmNfbGlua2VkX3JlZ3MoZW52LCBvdGhlcl9icmFuY2gsIFx1MDAyNm90aGVyX2JyYW5jaF9yZWdzW2luc24tXHUwMDNlc3JjX3JlZ10sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDktXHRcdFx0XHQgXHUwMDI2bGlua2VkX3JlZ3MpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE0OC1cdFx0XHRpZiAodHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVx1MDAzZXR5cGUpKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTQ5Olx0XHRcdFx0bWFya19wdHJfbm90X251bGxfcmVnKFx1MDAyNmVxX2JyYW5jaF9yZWdzW2luc24tXHUwMDNlc3JjX3JlZ10pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MTUwLVx0XHRcdGVsc2Vcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxNzEtXHRcdFx0XHQgICAgICBvcGNvZGUgPT0gQlBGX0pFUSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxNzI6XHR9IGVsc2UgaWYgKCF0cnlfbWF0Y2hfcGt0X3BvaW50ZXJzKGluc24sIGRzdF9yZWcsIFx1MDAyNnJlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE3My1cdFx0XHRcdFx0ICAgdGhpc19icmFuY2gsIG90aGVyX2JyYW5jaCkgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MTg1PXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMDItXHRkc3RfcmVnID0gXHUwMDI2cmVnc1tpbnNuLVx1MDAzZWRzdF9yZWddO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjAzOlx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSAwKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMDQtXHRcdHU2NCBpbW0gPSAoKHU2NCkoaW5zbiAmIzQzOyAxKS1cdTAwM2VpbW0gXHUwMDNjXHUwMDNjIDMyKSB8ICh1MzIpaW5zbi1cdTAwM2VpbW07XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjE2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjE3Olx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0JURl9JRCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjE4LVx0XHRkc3RfcmVnLVx1MDAzZXR5cGUgPSBhdXgtXHUwMDNlYnRmX3Zhci5yZWdfdHlwZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMzMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyMzQ6XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fRlVOQykge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjM1LVx0XHRzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXggPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXg7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjU0LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjU1Olx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9WQUxVRSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjU2Olx0ICAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjI1Ny1cdFx0aWYgKG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfQVJFTkEpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyNjctXHRcdC8qIFdlIHdhbnQgcmVnLVx1MDAzZWlkIHRvIGJlIHNhbWUgKDApIGFzIG1hcF92YWx1ZSBpcyBub3QgZGlzdGluY3QgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI2ODpcdH0gZWxzZSBpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX0ZEIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyNjk6XHRcdCAgIGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjI3MC1cdFx0ZHN0X3JlZy1cdTAwM2V0eXBlID0gQ09OU1RfUFRSX1RPX01BUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYzMDc9c3RhdGljIGludCBjaGVja19sZF9hYnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM0NC1cdFx0LyogY2hlY2sgZXhwbGljaXQgc291cmNlIG9wZXJhbmQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM0NTpcdFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM0Ni1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyMzU9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI4Ny1cdFx0XHRpZiAoZW52LVx1MDAzZWN1cl9zdGF0ZS1cdTAwM2VhY3RpdmVfbG9ja3MpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI4ODpcdFx0XHRcdGlmICgoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9SRUdfMCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI4OS1cdFx0XHRcdCAgICAgaW5zbi1cdTAwM2VpbW0gIT0gQlBGX0ZVTkNfc3Bpbl91bmxvY2sgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyOTAtXHRcdFx0XHQgICAgIGluc24tXHUwMDNlaW1tICE9IEJQRl9GVU5DX2twdHJfeGNoZykgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzI5MTpcdFx0XHRcdCAgICAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI5Mi1cdFx0XHRcdCAgICAgKGluc24tXHUwMDNlb2ZmICE9IDAgfHwgIWtmdW5jX3NwaW5fYWxsb3dlZChpbnNuLVx1MDAzZWltbSkpKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMwMC1cdFx0XHRcdGN1cl9mdW5jKGVudiktXHUwMDNlbm9fc3RhY2tfYXJnX2xvYWQgPSB0cnVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzAxOlx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzAyLVx0XHRcdFx0cmV0dXJuIGNoZWNrX2Z1bmNfY2FsbChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMDM6XHRcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczMDQtXHRcdFx0XHRyZXR1cm4gY2hlY2tfa2Z1bmNfY2FsbChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTA0PXN0YXRpYyBpbnQgY2hlY2tfYWx1X2ZpZWxkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTEwLVx0Y2FzZSBCUEZfTkVHOlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTExOlx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9LIHx8IGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzkxMi1cdFx0ICAgIGluc24tXHUwMDNlb2ZmICE9IDAgfHwgaW5zbi1cdTAwM2VpbW0gIT0gMCkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzkxNy1cdGNhc2UgQlBGX0VORDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzkxODpcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHwgaW5zbi1cdTAwM2VvZmYgIT0gMCB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTE5LVx0XHQgICAgKGluc24tXHUwMDNlaW1tICE9IDE2IFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZWltbSAhPSAzMiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gIT0gNjQpIHx8XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTQyLVx0XHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk0MzpcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXHUwMDNlb2ZmICE9IDApIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk0NC1cdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7QlBGX01PViB1c2VzIHJlc2VydmVkIGZpZWxkc1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTY0LVx0XHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk2NTpcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NjYtXHRcdFx0ICAgKGluc24tXHUwMDNlb2ZmICE9IDAgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmICE9IDEpIHx8XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTc4PXN0YXRpYyBpbnQgY2hlY2tfam1wX2ZpZWxkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTg1LVx0XHRpZiAoQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9LIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5ODY6XHRcdCAgICAoaW5zbi1cdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgIT0gMCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk4NzpcdFx0ICAgIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1BTRVVET19DQUxMIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTg4Olx0XHQgICAgIGluc24tXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5ODktXHRcdCAgICBpbnNuLVx1MDAzZWRzdF9yZWcgIT0gQlBGX1JFR18wIHx8IGNsYXNzID09IEJQRl9KTVAzMikge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk5NS1cdFx0aWYgKEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTk2Olx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXHUwMDNlaW1tICE9IDAgfHwgaW5zbi1cdTAwM2VvZmYgIT0gMCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTk3LVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0JQRl9KQXxCUEZfWCB1c2VzIHJlc2VydmVkIGZpZWxkc1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTk5LVx0XHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODAwMDpcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXHUwMDNlZHN0X3JlZyAhPSBCUEZfUkVHXzAgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODAwMS1cdFx0XHQgICAoY2xhc3MgPT0gQlBGX0pNUCBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VpbW0gIT0gMCkgfHxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMDgtXHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0sgfHwgaW5zbi1cdTAwM2VpbW0gIT0gMCB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDA5Olx0XHQgICAgaW5zbi1cdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCB8fCBpbnNuLVx1MDAzZWRzdF9yZWcgIT0gQlBGX1JFR18wIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMTAtXHRcdCAgICBjbGFzcyA9PSBCUEZfSk1QMzIpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMTUtXHRjYXNlIEJQRl9KQ09ORDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODAxNjpcdFx0aWYgKGluc24tXHUwMDNlY29kZSAhPSAoQlBGX0pNUCB8IEJQRl9KQ09ORCkgfHwgaW5zbi1cdTAwM2VzcmNfcmVnICE9IEJQRl9NQVlfR09UTyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDE3LVx0XHQgICAgaW5zbi1cdTAwM2Vkc3RfcmVnIHx8IGluc24tXHUwMDNlaW1tKSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDI3LVx0XHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODAyODpcdFx0fSBlbHNlIGlmIChpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMjktXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0JQRl9KTVAvSk1QMzIgdXNlcyByZXNlcnZlZCBmaWVsZHNcXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODAzNj1zdGF0aWMgaW50IGNoZWNrX2luc25fZmllbGRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwNTctXHRjYXNlIEJQRl9TVDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA1ODpcdFx0aWYgKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX01FTSB8fCBpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwNTktXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0JQRl9TVCB1c2VzIHJlc2VydmVkIGZpZWxkc1xcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDcxLVx0XHRcdCAgICBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9EVyB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDcyOlx0XHRcdCAgICAobW9kZSA9PSBCUEZfQUJTIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDczLVx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0JQRl9MRF9bQUJTfElORF0gdXNlcyByZXNlcnZlZCBmaWVsZHNcXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODA5Nj1zdGF0aWMgaW50IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTExLVx0XHR9XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMTI6XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgXHUwMDNlPSBNQVhfQlBGX1JFRyBcdTAwMjZcdTAwMjYgIWlzX3N0YWNrX2FyZ19sZHgoaW5zbikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExMzpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7UiVkIGlzIGludmFsaWRcXG5cJiMzNDssIGluc24tXHUwMDNlc3JjX3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTQtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MjU4PXN0YXRpYyB2b2lkIGNvbnZlcnRfcHNldWRvX2xkX2ltbTY0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MjY2LVx0XHRcdGNvbnRpbnVlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MjY3Olx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fRlVOQylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODI2OC1cdFx0XHRjb250aW51ZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODI2OTpcdFx0aW5zbi1cdTAwM2VzcmNfcmVnID0gMDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODI3MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4ODgKCQkJCQkJCW91dHB1dDogNzYKCQkJCQkJCXRob3VnaHRzOiAxNzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEVycm9yIE1lc3NhZ2UgQ2hhbmdlIGluIEJQRiBWZXJpZmllcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgY2hlY2tfYW5kX3Jlc29sdmVfaW5zbnNgLCBJIHNlZSBhIGd1YXJkIGVuc3VyaW5nIGBpbnNuLSZndDtzcmNfcmVnYCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBgTUFYX0JQRl9SRUdgLiBUaGF0JiMzOTtzIGdvb2QsIHNvIGByZWdzW2luc24tJmd0O3NyY19yZWddYCBpcyBhbHdheXMgdmFsaWRseSBhY2Nlc3NlZC4gQnV0IHRoZW4sIEkgcmVtZW1iZXIgdGhlIGBjaGVja19hbHVfZmllbGRzYCBmdW5jdGlvbiwgYW5kIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY2hlY2sgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLCB3aGVyZSBgaW5zbi0mZ3Q7c3JjX3JlZ2AgKm11c3QqIGJlIGBCUEZfUkVHXzBgICh3aGljaCBpcyB6ZXJvKS4KCkVzc2VudGlhbGx5LCBgY2hlY2tfYWx1X2ZpZWxkc2AgZ3VhcmFudGVlcyB0aGF0IGlmIGFuIGluc3RydWN0aW9uIHVzZXMgYW4gaW1tZWRpYXRlIChgQlBGX0tgKSwgdGhlIHNvdXJjZSByZWdpc3RlciBpcyBhbHdheXMgemVyby4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBgc2FuaXRpemVfZXJyYCBmdW5jdGlvbiwgdGhlIGBzcmNgIHJlZ2lzdGVyIGlzIGFsd2F5cyAwIHdoZW4gYHNyY19pc19pbW1gIGlzIHRydWUuIGByZWdzWzBdYCB3aWxsIGFsd2F5cyBiZSBpbiBib3VuZHMuCgpOb3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoLCB0aGUgY2hhbmdlIGlzIHB1cmVseSBjb3NtZXRpYy4gSXQmIzM5O3MgYWJvdXQgaG93IHRoZSBlcnJvciBtZXNzYWdlIGlzIGZvcm1hdHRlZC4gVGhlIG9yaWdpbmFsIGNvZGUgcHJpbnRlZCBgc3JjYCAod2hpY2ggaXMgemVybykgaW4gdGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgaW5zdHJ1Y3Rpb24gd2FzIGFuIGltbWVkaWF0ZSBBTFUgb3BlcmF0aW9uIG9uIGEgcG9pbnRlci4gTm93LCBpdCBwcmludHMgYGRzdGAgaW5zdGVhZCBpZiBgc3JjX2lzX2ltbWAgb3IgYHJlZ3Nbc3JjXS50eXBlYCBpcyBgU0NBTEFSX1ZBTFVFYC4gSG93ZXZlciwgaXQgd291bGQgaGF2ZSBwcmludGVkIGBkc3RgIGFueXdheSBpZiBgcmVnc1swXS50eXBlYCB3YXMgYFNDQUxBUl9WQUxVRWAsIHNvIHRoZSBpbXBhY3QgaXMgbWluaW1hbC4gVGhlIGtleSByZWFsaXphdGlvbiBpcyB0aGF0IHByaW50aW5nICYjMzQ7UjAgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uJiMzNDsgaXMgbWlzbGVhZGluZyBiZWNhdXNlIFIwIGlzbiYjMzk7dCByZWFsbHkgaW52b2x2ZWQgaW4gdGhlIG9wZXJhdGlvbiAoaXQmIzM5O3MgdGhlIGltbWVkaWF0ZSB2YWx1ZSkuIFRoaXMgcGF0Y2gganVzdCBtYWtlcyB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlIGFjY3VyYXRlIGJ5IHBvaW50aW5nIHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4KClRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IG1vZGlmeSBleGVjdXRpb24gcGF0aHMsIHJldHVybiB2YWx1ZXMsIG9yIGFmZmVjdCB0aGUgb3ZlcmFsbCBsb2dpYyBvZiB0aGUgdmVyaWZpZXIuIEFmdGVyIHJlLWV4YW1pbmluZyB0aGUgY29tcGxldGUgZGlmZiwgY29uZmlybWluZyBpdCYjMzk7cyBsaW1pdGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBldmFsdWF0aW9uIHNob3VsZCBiZSBgZmFsc2VgLiBJdCYjMzk7cyBwdXJlbHkgYSBkaWFnbm9zdGljIGltcHJvdmVtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIHJlZ2lzdGVyIG51bWJlciBwcmludGVkIGluIGFuIGVycm9yIG1lc3NhZ2UgKHZpYSB2ZXJib3NlKCkpIHdoZW4gYSBCUEYgcG9pbnRlciBhcml0aG1ldGljIHNhbml0aXphdGlvbiBlcnJvciBvY2N1cnMgd2l0aCBhbiBpbW1lZGlhdGUgdmFsdWUuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdywgc3RhdGUsIG9yIHJldHVybiB2YWx1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSByZWdpc3RlciBudW1iZXIgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlICh2aWEgdmVyYm9zZSgpKSB3aGVuIGEgQlBGIHBvaW50ZXIgYXJpdGhtZXRpYyBzYW5pdGl6YXRpb24gZXJyb3Igb2NjdXJzIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHN0YXRlLCBvciByZXR1cm4gdmFsdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjA0LjUzMDk2NDgyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTk4NDAzNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSByZWdpc3RlciBudW1iZXIgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlICh2aWEgdmVyYm9zZSgpKSB3aGVuIGEgQlBGIHBvaW50ZXIgYXJpdGhtZXRpYyBzYW5pdGl6YXRpb24gZXJyb3Igb2NjdXJzIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHN0YXRlLCBvciByZXR1cm4gdmFsdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6MDQuNTMwOTcyMjk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3NTg4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ODFmOTc2YTc5ZDkyNzgxOTcyYTU5OGQ0YmI4MzIzMTJkNTc5N2Q5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMgMTk6Mjk6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZmRjNWZiYjFmNzhjYS4uZTVhODU0N2FkNzIzMSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTM1NjIsNiArMTM1NjIsNyBAQCBzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc1xcbiBcXHRzdGF0aWMgY29uc3QgY2hhciAqZXJyID0gXFxcInBvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIGl0IHByb2hpYml0ZWQgZm9yICFyb290XFxcIjtcXG4gXFx0Y29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FERCA/IFxcXCJhZGRcXFwiIDogXFxcInN1YlxcXCI7XFxuIFxcdHUzMiBkc3QgPSBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBzcmMgPSBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbitcXHRib29sIHNyY19pc19pbW0gPSBCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9LO1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XFxuIFxcbiBcXHRzd2l0Y2ggKHJlYXNvbikge1xcbkBAIC0xMzU3MSw3ICsxMzU3Miw3IEBAIHN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFJFQVNPTl9UWVBFOlxcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBoYXMgcG9pbnRlciB3aXRoIHVuc3VwcG9ydGVkIGFsdSBvcGVyYXRpb24sICVzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyZWdzW3NyY10udHlwZSA9PSBTQ0FMQVJfVkFMVUUgPyBkc3QgOiBzcmMsIGVycik7XFxuK1xcdFxcdFxcdHNyY19pc19pbW0gfHwgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFID8gZHN0IDogc3JjLCBlcnIpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBSRUFTT05fUEFUSFM6XFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUiVkIHRyaWVkIHRvICVzIGZyb20gZGlmZmVyZW50IG1hcHMsIHBhdGhzIG9yIHNjYWxhcnMsICVzXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTowNC45ODg0MzcyODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MDc0MDg5MzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgcmVnaXN0ZXIgbnVtYmVyIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSAodmlhIHZlcmJvc2UoKSkgd2hlbiBhIEJQRiBwb2ludGVyIGFyaXRobWV0aWMgc2FuaXRpemF0aW9uIGVycm9yIG9jY3VycyB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBzdGF0ZSwgb3IgcmV0dXJuIHZhbHVlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc4MWY5NzZhNzlkOTI3ODE5NzJhNTk4ZDRiYjgzMjMxMmQ1Nzk3ZDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjI5OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBmZGM1ZmJiMWY3OGNhLi5lNWE4NTQ3YWQ3MjMxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMzU2Miw2ICsxMzU2Miw3IEBAIHN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zXG4gXHRzdGF0aWMgY29uc3QgY2hhciAqZXJyID0gXCJwb2ludGVyIGFyaXRobWV0aWMgd2l0aCBpdCBwcm9oaWJpdGVkIGZvciAhcm9vdFwiO1xuIFx0Y29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUREID8gXCJhZGRcIiA6IFwic3ViXCI7XG4gXHR1MzIgZHN0ID0gaW5zbi1cdTAwM2Vkc3RfcmVnLCBzcmMgPSBpbnNuLVx1MDAzZXNyY19yZWc7XG4rXHRib29sIHNyY19pc19pbW0gPSBCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0s7XG4gXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XG4gXG4gXHRzd2l0Y2ggKHJlYXNvbikge1xuQEAgLTEzNTcxLDcgKzEzNTcyLDcgQEAgc3RhdGljIGludCBzYW5pdGl6ZV9lcnIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFQVNPTl9UWVBFOlxuIFx0XHR2ZXJib3NlKGVudiwgXCJSJWQgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uLCAlc1xcblwiLFxuLVx0XHRcdHJlZ3Nbc3JjXS50eXBlID09IFNDQUxBUl9WQUxVRSA/IGRzdCA6IHNyYywgZXJyKTtcbitcdFx0XHRzcmNfaXNfaW1tIHx8IHJlZ3Nbc3JjXS50eXBlID09IFNDQUxBUl9WQUxVRSA/IGRzdCA6IHNyYywgZXJyKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFQVNPTl9QQVRIUzpcbiBcdFx0dmVyYm9zZShlbnYsIFwiUiVkIHRyaWVkIHRvICVzIGZyb20gZGlmZmVyZW50IG1hcHMsIHBhdGhzIG9yIHNjYWxhcnMsICVzXFxuXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTowNC45ODg0Mzg0NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjcxNzcwOTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNhbml0aXplX2VycmAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSB0aGlzIG5ldyBib29sZWFuLCBgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfSztgLCB0aGF0J3MgYmVpbmcgaW50cm9kdWNlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGBSRUFTT05fVFlQRWAgY2FzZSBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudC4gSG1tLCBhbmQgaXQncyAqb25seSogaW1wYWN0aW5nIHRoZSBvdXRwdXQgb2YgYHZlcmJvc2UoZW52LCAuLi4pYCDigJMgc28gdGhpcyBpcyBzdHJpY3RseSBhYm91dCBsb2dnaW5nIG9yIGRpYWdub3N0aWMgbWVzc2FnZXMuXG5cblJpZ2h0LCBgc2FuaXRpemVfZXJyYC4uLiB0aGF0J3MgY2FsbGVkIHdoZW4gd2UgaGl0IGFuIGVycm9yIGR1cmluZyBwb2ludGVyIGFyaXRobWV0aWMgc2FuaXRpemF0aW9uLiBJIHJlbWVtYmVyIHRoYXQgY29kZS4gQWgsIEkgc2VlIHdoYXQncyBoYXBwZW5pbmcuIFRoaXMgcGF0Y2ggY29ycmVjdHMgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBob3cgdGhlIHJlZ2lzdGVyIG51bWJlciBpcyBwcmludGVkIGluIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHNvdXJjZSBvcGVyYW5kIGlzIGFuIGltbWVkaWF0ZSB2YWx1ZSAoYEJQRl9LYCkuXG5cblByZXZpb3VzbHksIGl0IHdhcyBjaGVja2luZyBgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFYC4gQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgaWYgaXQncyBhbiBpbW1lZGlhdGUsIGBzcmNgICppc24ndCogYSByZWdpc3Rlci4gU28sIGFjY2Vzc2luZyBgcmVnc1tzcmNdYCBpcyBlaXRoZXIgb3V0IG9mIGJvdW5kcyBvciwgYXQgYmVzdCwgbWlzbGVhZGluZy4gV2FpdC4uLiBpZiBgc3JjX2lzX2ltbWAgaXMgdHJ1ZSwgdGhlbiBgc3JjYCAqaGFzKiB0byBiZSB6ZXJvLiBCZWNhdXNlIGBzcmNfcmVnYCBpcyBkZWZpbml0ZWx5IDAgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLCBvciBpcyBtYXliZSBqdXN0IG5vdCBldmVuIHVzZWQuIFllcywgYHNyY2AgaXMgYGluc24tXHUwMDNlc3JjX3JlZ2AuIEdvdCBpdC4gSWYgdGhlIGBCUEZfU1JDYCBmaWVsZCBpcyBgQlBGX0tgLCB0aGVuIGBzcmNfcmVnYCAqaXMqIGluZGVlZCAwLiBTbyBpdCB3b3VsZCBoYXZlIGNoZWNrZWQgYHJlZ3NbMF0udHlwZWAsIHdoaWNoIGlzIHByb2JhYmx5IGZpbmUgc29tZXRpbWVzIGJ1dCBtYXliZSBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuXG5CdXQsIHRoZSBjaGFuZ2UgaXMganVzdCBpbiB0aGUgYHZlcmJvc2UoKWAgZXJyb3IgbWVzc2FnZS4gRXNzZW50aWFsbHkgaXQncyBwcm92aWRpbmcgbW9yZSBhY2N1cmF0ZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uLiBPa2F5LCBJIHNob3VsZCBjb25maXJtIGJ5IGNoZWNraW5nIGBzYW5pdGl6ZV9lcnJgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6MTEuNjYwMjEzMTI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODY1Nzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzYW5pdGl6ZV9lcnJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzU0Nz1zdGF0aWMgdm9pZCBzYW5pdGl6ZV9tYXJrX2luc25fc2VlbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNTU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzU2MDpzdGF0aWMgaW50IHNhbml0aXplX2VycihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCByZWFzb24pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNTYxLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzY2NT1zdGF0aWMgaW50IGFkanVzdF9wdHJfbWluX21heF92YWxzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM3NjQtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNzY1OlxcdFxcdFxcdHJldHVybiBzYW5pdGl6ZV9lcnIoZW52LCBpbnNuLCByZXQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzc2Ni1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM4NTctXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzODU4OlxcdFxcdFxcdHJldHVybiBzYW5pdGl6ZV9lcnIoZW52LCBpbnNuLCByZXQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzg1OS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ1OTI9c3RhdGljIGludCBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NjA5LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDYxMDpcXHRcXHRcXHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ2MTEtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOToxMS43Nzg4Nzg0MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg4MDA5MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYHNhbml0aXplX2VycmAgaW1wbGVtZW50YXRpb24uIEkgYXNzdW1lIHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBzeXN0ZW0sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBtYWludGFpbiBkYXRhIGludGVncml0eSBpbiB0aGUgZmFjZSBvZiBlcnJvcnMuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqSG93IGl0IGlkZW50aWZpZXMgZGlmZmVyZW50IHR5cGVzIG9mIGVycm9ycy4qKiBJcyBpdCB1c2luZyBlcnJvciBjb2RlcywgZXhjZXB0aW9uIHR5cGVzLCBtZXNzYWdlIHBhcnNpbmcsIG9yIGEgY29tYmluYXRpb24/IFdoYXQncyB0aGUgZ3JhbnVsYXJpdHkgb2YgaXRzIGVycm9yIGNsYXNzaWZpY2F0aW9uP1xuKiAgICoqV2hhdCBpdCBkb2VzIHdpdGggdGhlIGVycm9ycyBpdCBmaW5kcy4qKiBJcyBpdCBsb2dnaW5nLCBtYXNraW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgdHJhbnNmb3JtaW5nIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgdXNlciwgb3IgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBvdGhlciBjb3JyZWN0aXZlIGFjdGlvbnM/XG4qICAgKipUaGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgc2FuaXRpemF0aW9uLioqIENvdWxkIHRoaXMgZnVuY3Rpb24gaW50cm9kdWNlIG5ldyBlcnJvcnMsIGhpZGUgY3JpdGljYWwgaW5mb3JtYXRpb24sIG9yIGhhdmUgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHM/IEknbGwgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBpbmZvcm1hdGlvbiBsZWFrYWdlIG9yIGRlbmlhbC1vZi1zZXJ2aWNlIGlzc3Vlcy5cbiogICAqKlRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgdXNlZC4qKiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBXaGF0IHBhcnRzIG9mIHRoZSBjb2RlYmFzZSByZWx5IG9uIGl0PyBIb3cgZGVlcGx5IGludGVncmF0ZWQgaXMgaXQ/IFRoaXMgd2lsbCBpbmZsdWVuY2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBpc3N1ZXMgSSBmaW5kLlxuXG5NeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIGEgY29yZSBjb21wb25lbnQgYW5kIEkgbXVzdCB0YWtlIGEgc3RydWN0dXJlZCBhcHByb2FjaCB0byB1bmRlcnN0YW5kIGl0IGNvbXBsZXRlbHkuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzZWN1cml0eSBhbmQgcmVsaWFiaWxpdHkgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjE1LjU2Njg5MTQwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTYwOlxcdHN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IHJlYXNvbilcXG4xMzU2MTpcXHR7XFxuMTM1NjI6XFx0XFx0c3RhdGljIGNvbnN0IGNoYXIgKmVyciA9IFxcXCJwb2ludGVyIGFyaXRobWV0aWMgd2l0aCBpdCBwcm9oaWJpdGVkIGZvciAhcm9vdFxcXCI7XFxuMTM1NjM6XFx0XFx0Y29uc3QgY2hhciAqb3AgPSBCUEZfT1AoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FERCA/IFxcXCJhZGRcXFwiIDogXFxcInN1YlxcXCI7XFxuMTM1NjQ6XFx0XFx0dTMyIGRzdCA9IGluc24tXFx1MDAzZWRzdF9yZWcsIHNyYyA9IGluc24tXFx1MDAzZXNyY19yZWc7XFxuMTM1NjU6XFx0XFx0Ym9vbCBzcmNfaXNfaW1tID0gQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfSztcXG4xMzU2NjpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XFxuMTM1Njc6XFx0XFxuMTM1Njg6XFx0XFx0c3dpdGNoIChyZWFzb24pIHtcXG4xMzU2OTpcXHRcXHRjYXNlIFJFQVNPTl9CT1VORFM6XFxuMTM1NzA6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJSJWQgaGFzIHVua25vd24gc2NhbGFyIHdpdGggbWl4ZWQgc2lnbmVkIGJvdW5kcywgJXNcXFxcblxcXCIsXFxuMTM1NzE6XFx0XFx0XFx0XFx0cmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFID8gc3JjIDogZHN0LCBlcnIpO1xcbjEzNTcyOlxcdFxcdFxcdGJyZWFrO1xcbjEzNTczOlxcdFxcdGNhc2UgUkVBU09OX1RZUEU6XFxuMTM1NzQ6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJSJWQgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uLCAlc1xcXFxuXFxcIixcXG4xMzU3NTpcXHRcXHRcXHRcXHRzcmNfaXNfaW1tIHx8IHJlZ3Nbc3JjXS50eXBlID09IFNDQUxBUl9WQUxVRSA/IGRzdCA6IHNyYywgZXJyKTtcXG4xMzU3NjpcXHRcXHRcXHRicmVhaztcXG4xMzU3NzpcXHRcXHRjYXNlIFJFQVNPTl9QQVRIUzpcXG4xMzU3ODpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCB0cmllZCB0byAlcyBmcm9tIGRpZmZlcmVudCBtYXBzLCBwYXRocyBvciBzY2FsYXJzLCAlc1xcXFxuXFxcIixcXG4xMzU3OTpcXHRcXHRcXHRcXHRkc3QsIG9wLCBlcnIpO1xcbjEzNTgwOlxcdFxcdFxcdGJyZWFrO1xcbjEzNTgxOlxcdFxcdGNhc2UgUkVBU09OX0xJTUlUOlxcbjEzNTgyOlxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUiVkIHRyaWVkIHRvICVzIGJleW9uZCBwb2ludGVyIGJvdW5kcywgJXNcXFxcblxcXCIsXFxuMTM1ODM6XFx0XFx0XFx0XFx0ZHN0LCBvcCwgZXJyKTtcXG4xMzU4NDpcXHRcXHRcXHRicmVhaztcXG4xMzU4NTpcXHRcXHRjYXNlIFJFQVNPTl9TVEFDSzpcXG4xMzU4NjpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBjb3VsZCBub3QgYmUgcHVzaGVkIGZvciBzcGVjdWxhdGl2ZSB2ZXJpZmljYXRpb24sICVzXFxcXG5cXFwiLFxcbjEzNTg3OlxcdFxcdFxcdFxcdGRzdCwgZXJyKTtcXG4xMzU4ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMzU4OTpcXHRcXHRkZWZhdWx0OlxcbjEzNTkwOlxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJ1bmtub3duIHJlYXNvbiAoJWQpXFxcIiwgcmVhc29uKTtcXG4xMzU5MTpcXHRcXHRcXHRicmVhaztcXG4xMzU5MjpcXHRcXHR9XFxuMTM1OTM6XFx0XFxuMTM1OTQ6XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuMTM1OTU6XFx0fVxcbjEzNTk2OlxcdFxcbjEzNTk3OlxcdC8qIGNoZWNrIHRoYXQgc3RhY2sgYWNjZXNzIGZhbGxzIHdpdGhpbiBzdGFjayBsaW1pdHMgYW5kIHRoYXQgJ3JlZycgZG9lc24ndFxcbjEzNTk4OlxcdCAqIGhhdmUgYSB2YXJpYWJsZSBvZmZzZXQuXFxuMTM1OTk6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6MTUuNTY3NjEwMTQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIwNzgwNjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gTG9nZ2luZyBhbmQgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdGllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIHRoZSBgdmVyYm9zZSgpYCBvdXRwdXQgd2l0aGluIGBzYW5pdGl6ZV9lcnIoKWAuIEl04oCZcyBhbGwgYWJvdXQgbG9nZ2luZyBhbmQgZGlhZ25vc3RpY3MsIHNwZWNpZmljYWxseSBkZWNpZGluZyB3aGV0aGVyIHRvIHByaW50IGBkc3RgIG9yIGBzcmNgIGFzIHRoZSByZWdpc3RlciBudW1iZXIgYmFzZWQgb24gYHNyY19pc19pbW1gLiBGdW5jdGlvbmFsbHksIHRoaXMgZG9lc24ndCBjaGFuZ2UgZXhlY3V0aW9uLCByaWdodD9cblxuV2FpdCBhIHNlY29uZOKApiBjb3VsZCB0aGlzICphY3R1YWxseSogcHJldmVudCBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBvbiBgcmVnc1tzcmNdYD8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbi5cblxuTGV0J3MgYnJlYWsgaXQgZG93bi4gSWYgYHNyY19pc19pbW1gIGlzIHRydWUsIHRoZW4gYHNyY2AgaXMgYGluc24tXHUwMDNlc3JjX3JlZ2AuIEluIHR5cGljYWwgYEJQRl9LYCBpbnN0cnVjdGlvbnMsIGBzcmNfcmVnYCBpcyB1c3VhbGx5IDAuIEFuZCBgcmVnc2AgaXMgYW4gYXJyYXkgb2YgYE1BWF9CUEZfUkVHYCwgd2hpY2ggaXMgMTEuIFNvLCBgcmVnc1swXWAgaXMgYSB2YWxpZCBhY2Nlc3MuIEl0ICptaWdodCogYmUgdGhhdCBgcmVnc1swXS50eXBlYCBpcyBub3QgYFNDQUxBUl9WQUxVRWAsIHNvIHRoZSBvdXRwdXQgd291bGQgcHJpbnQgYHNyY2AsIHdoaWNoIGlzIDAsIGluc3RlYWQgb2YgYGRzdGAuXG5cbkhhbmcgb24sIGlmIGBzcmNfaXNfaW1tYCBpcyB0cnVlLCBgc3JjYCBpcyBkZWZpbml0ZWx5IDAuIFByaW50aW5nIFwiUjAgaGFzIHBvaW50ZXIgd2l0aCB1bnN1cHBvcnRlZCBhbHUgb3BlcmF0aW9uXCIgaXMgY29uZnVzaW5nIHdoZW4gdGhlIHNvdXJjZSBpcyBhbiBpbW1lZGlhdGUsIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHBvaW50ZXIuIEl0J3MganVzdCBmaXhpbmcgdGhlIGVycm9yIG1lc3NhZ2UuIFNvLCBpdCBpcyBsaWtlbHkgdGhhdCB0aGUgcGF0Y2ggaXMgZm9yIGxvZ2dpbmcuXG5cbkRvZXMgdGhpcyBjaGFuZ2UgcHJldmVudCBhIGNyYXNoPyBJZiBgc3JjYCBjb3VsZCBiZSBvdXQgb2YgYm91bmRzLCB5ZXMuIEJ1dCwgYGluc24tXHUwMDNlc3JjX3JlZ2AgaXMgYSA0LWJpdCBmaWVsZCwgc28gaXQncyBiZXR3ZWVuIDAtMTUuIEJ1dCB3YWl0LCB0aGUgYHJlZ3NgIGFycmF5IGlzIG9ubHkgc2l6ZSAxMSwgaXQgaXMgY2FwcGVkIGF0IGBNQVhfQlBGX1JFR2AuIElmIGBpbnNuLVx1MDAzZXNyY19yZWdgICppcyogXHUwMDNlIDEwLCB0aGVuIGByZWdzW3NyY11gIHdvdWxkIGJlIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzISBUaGF0J3MgYSB2dWxuZXJhYmlsaXR5LlxuXG5JIG5lZWQgdG8gY2hlY2sgaWYgYSBtYWxpY2lvdXMgQlBGIHByb2dyYW0gY291bGQgcG9zc2libHkgbWFrZSBgaW5zbi1cdTAwM2VzcmNfcmVnYCBcdTAwM2UgMTAgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBUeXBpY2FsbHksIGBzcmNfcmVnYCBpcyAwIGluIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLCBidXQgYSBtYWxpY2lvdXMgcHJvZ3JhbSAqY291bGQqIHNldCBpdCB0byAxNS5cblxuV2FpdCEgVGhlIEJQRiB2ZXJpZmllciBjaGVja3MgYHNyY19yZWcgPT0gMGAgZWFybHkgb24gZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGxpa2VseSBoYXJtbGVzcywgYW5kIGl0J3Mgc29sZWx5IGFib3V0IGltcHJvdmluZyB0aGUgZXJyb3IgbWVzc2FnZSBjbGFyaXR5LCBtYWtpbmcgaXQgbGVzcyBjb25mdXNpbmcgYW5kIG1vcmUgaW5mb3JtYXRpdmUuIEkgdGhpbmsgd2UgYXJlIHNhZmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOToyMi43NzU0MTg4NzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjc1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3JlZ19hcmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMDgzPXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzA5NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzA5NjpzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk3LVxcdFxcdFxcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMxMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzQ6c3RhdGljIGludCBjaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzNS1cXHRcXHRcXHQgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzE0MDpcXHRyZXR1cm4gX19jaGVja19yZWdfYXJnKGVudiwgc3RhdGUtXFx1MDAzZXJlZ3MsIHJlZ25vLCB0KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzE0MS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0Nz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc4My1cXHRcXHRcXHQgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzg0OlxcdFxcdFxcdFxcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc4NS1cXHRcXHRcXHRcXHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0Llxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzNDE9c3RhdGljIGludCBjaGVja19sb2FkX21lbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1Mi1cXHRpZiAoaXNfc3RhY2tfYXJnX2xkeChpbnNuKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzUzOlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzU5LVxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjA6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjEtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzY0LVxcdC8qIGNoZWNrIGRzdCBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2Ni1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTQtXFx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5NTpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5Ni1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MDI6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA2LVxcdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDA3OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQyMj1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM0LVxcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDM1OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzOS1cXHQvKiBjaGVjayBzcmMyIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ0MDpcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ0MS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0NDg6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGF1eF9yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDktXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDc2LVxcdFxcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NzpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgbG9hZF9yZWcsIERTVF9PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzgtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjM4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTEtXFx0XFx0XFx0LypcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxMjpcXHRcXHRcXHQgKiBGb3IgQ09OU1RfUFRSX1RPX0RZTlBUUiwgcmVnIGlzIGFscmVhZHkgc2NyYXRjaGVkIGJ5IGNoZWNrX3JlZ19hcmdcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMxMy1cXHRcXHRcXHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgyMTE9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMjg6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ25vLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjI5LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1Mj1zdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTktXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNjA6XFx0XFx0X19jaGVja19yZWdfYXJnKGVudiwgcmVncywgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNjEtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwODI9c3RhdGljIGludCBzZXR1cF9mdW5jX2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBpbnQgY2FsbHNpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTExOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTExOTpcXHQvKiBvbmx5IGluY3JlbWVudCBpdCBhZnRlciBjaGVja19yZWdfYXJnKCkgZmluaXNoZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTEyMC1cXHRzdGF0ZS1cXHUwMDNlY3VyZnJhbWUrKztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE3MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNS1cXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MTY6XFx0XFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNy1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ5MTg9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI1LVxcdFxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTI2OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkyNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTM3LVxcdFxcdGlmIChyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddLnR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTM4OlxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTM5LVxcdFxcdFxcdGVyciA9IGVyciA/OiBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhlbnYsIGluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NDItXFx0XFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NDM6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTQ0LVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk1OC1cXHRcXHRcXHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk1OTpcXHRcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjAtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2NC1cXHRcXHQvKiBjaGVjayBkZXN0IG9wZXJhbmQsIG1hcmsgYXMgcmVxdWlyZWQgbGF0ZXIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NjU6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3MC1cXHRcXHRcXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzE6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDcyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzYtXFx0XFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDc3OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk3LVxcdFxcdC8qIGNoZWNrIGRlc3Qgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA5ODpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgRFNUX09QX05PX01BUkspO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA5OS1cXHRcXHRlcnIgPSBlcnIgPzogYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoZW52LCBpbnNuKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTk0Nj1zdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODUtXFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg2OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTkyLVxcdFxcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5MzpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5OTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxOTctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTk4OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE5OS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MzA3PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyNC1cXHQvKiBjaGVjayB3aGV0aGVyIGltcGxpY2l0IHNvdXJjZSBvcGVyYW5kIChyZWdpc3RlciBSNikgaXMgcmVhZGFibGUgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGN0eF9yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNDQtXFx0XFx0LyogY2hlY2sgZXhwbGljaXQgc291cmNlIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzNDU6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNTYtXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzU3OlxcdFxcdGNoZWNrX3JlZ19hcmcoZW52LCBjYWxsZXJfc2F2ZWRbaV0sIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNTgtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTMxPXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU2NS1cXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NjY6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ25vLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU2Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NjE2PXN0YXRpYyBpbnQgY2hlY2tfZ2xvYmFsX3N1YnByb2dfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjYyNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY2MjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIEJQRl9SRUdfMCwgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY2MjYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzIzNT1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MjY3OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI2OC1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOToyMi44ODc2OTgxNDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzcxNzQzMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFZlcmlmaWNhdGlvbiBDb25jZXJuKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIEFMVSBvcGVyYXRpb25zLiBJIHNlZSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBnZXRzIHNjcmVlbmVkIGJlZm9yZSBpdCBldmVuIGhpdHMgYHNhbml0aXplX2VycmAsIHdoaWNoIGlzIGdvb2QuIElmIGl0J3MgYW4gQUxVIG9wLCBgY2hlY2tfYWx1X29wYCBpcyBpbnZva2VkLiBJbnNpZGUgYGNoZWNrX2FsdV9vcGAsIHRoaW5ncyBzZWVtIHN0cmFpZ2h0Zm9yd2FyZCwgZXNwZWNpYWxseSBmb3IgYEJQRl9YYCBzb3VyY2Ugb3BlcmFuZHMgd2hlcmUgSSdtIGV4cGVjdGluZyBgY2hlY2tfcmVnX2FyZ2AgdG8gdmFsaWRhdGUgdGhlIGBzcmNfcmVnYC5cblxuSG93ZXZlciwgbXkgYnJhaW4ganVzdCBwaW5nZWQhIFdoYXQgaGFwcGVucyBpZiB0aGUgc291cmNlIG9wZXJhbmQgaXMgYEJQRl9LYD8gSW4gdGhhdCBjYXNlLCBgY2hlY2tfcmVnX2FyZ2AgKmlzbid0KiBjYWxsZWQgZm9yIGBzcmNfcmVnYCwgYnV0IHRoZSBgaW5zbi1cdTAwM2VzcmNfcmVnYCAqaXMqIHN0aWxsIHBhcnQgb2YgdGhlIGluc3RydWN0aW9uLiBUaGF0J3MgaW1tZWRpYXRlbHkgcmFpc2luZyBhIHJlZCBmbGFnLiBJcyBgaW5zbi1cdTAwM2VzcmNfcmVnYCAqZ3VhcmFudGVlZCogdG8gYmUgemVybyBmb3IgYEJQRl9LYCBpbnN0cnVjdGlvbnM/IEkgaGF2ZSBhIHN0cm9uZyBndXQgZmVlbGluZyB0aGF0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuXG5cbkxldCBtZSByZWZyZXNoIG15c2VsZiBvbiB0aGUgYGJwZl9pbnNuYCBzdHJ1Y3R1cmUgYW5kIGhvdyBgQlBGX0tgIGlzIGhhbmRsZWQuIElmIGBpbnNuLVx1MDAzZXNyY19yZWdgICppc24ndCogemVybywgdGhhdCB2YWx1ZSBjb3VsZCBiZSBhbnl0aGluZyB1cCB0byAxNS4gVGhlIGByZWdzYCBhcnJheSwgdGhvdWdoLCBoYXMgYSBzaXplIG9mIG9ubHkgMTEgKGBNQVhfQlBGX1JFR2ApLiBTbywgaWYgYGluc24tXHUwMDNlc3JjX3JlZ2AgaGFwcGVucyB0byBiZSAxNSwgd2UncmUgdGFsa2luZyBhYm91dCBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyEgVGhhdCdzIGEgc2VyaW91cyB2dWxuZXJhYmlsaXR5LlxuXG5XYWl0Li4uIGRvZXMgdGhlIHZlcmlmaWVyLCBzb21ld2hlcmUgaW4gYGNoZWNrX2FsdV9vcGAsIGByZXBsYWNlX21hcF9mZF93aXRoX21hcF9wdHJgIG9yIGBicGZfY2hlY2tgIGFjdHVhbGx5IHZhbGlkYXRlIHRoZSBgc3JjX3JlZ2AgYW5kIGNvbmZpcm0gdGhhdCBpdOKAmXMgYDBgIGZvciBgQlBGX0tgIGluc3RydWN0aW9ucz8gSSBuZWVkIHRvIGNoZWNrIHRoZXNlIGZ1bmN0aW9ucyAqaW1tZWRpYXRlbHkqIHRvIGF2b2lkIG92ZXJsb29raW5nIHRoaXMgY3J1Y2lhbCBkZXRhaWwuIFRoYXQncyBhIHBvdGVudGlhbCBzZWN1cml0eSBob2xlIEkgbmVlZCB0byBhZGRyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjI5LjY1OTQ0NjQyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MDAzMzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNyY19yZWcgPT0gMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTI4NDA9c3RhdGljIGludCBjaGVja19zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTI4NTMtXFx0XFx0aWYgKGNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfQ0FMTCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mjg1NDpcXHRcXHQgICAgaW5zbltpXS5zcmNfcmVnID09IDAgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjg1NS1cXHRcXHQgICAgaW5zbltpXS5pbW0gPT0gQlBGX0ZVTkNfdGFpbF9jYWxsKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTYxODU9c3RhdGljIGludCBjaGVja19sZF9pbW0oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjAyLVxcdGRzdF9yZWcgPSBcXHUwMDI2cmVnc1tpbnNuLVxcdTAwM2Vkc3RfcmVnXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyMDM6XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gMCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjIwNC1cXHRcXHR1NjQgaW1tID0gKCh1NjQpKGluc24gKyAxKS1cXHUwMDNlaW1tIFxcdTAwM2NcXHUwMDNjIDMyKSB8ICh1MzIpaW5zbi1cXHUwMDNlaW1tO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDk2PXN0YXRpYyBpbnQgY2hlY2tfYW5kX3Jlc29sdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEzNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMzU6XFx0XFx0XFx0aWYgKGluc25bMF0uc3JjX3JlZyA9PSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODEzNi1cXHRcXHRcXHRcXHQvKiB2YWxpZCBnZW5lcmljIGxvYWQgNjQtYml0IGltbSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOToyOS43ODc0NTg3NjZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyMDA0MDc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkxvY2F0aW5nIGBzcmNfcmVnYCBDaGVja3MqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCB0aG91Z2h0OiBJIG5lZWQgdG8gcGlucG9pbnQgZXZlcnkgaW5zdGFuY2Ugb2YgYHNyY19yZWdgIGNoZWNrcyB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSdsbCBiZSB1c2luZyBzb21lIGZvcm0gb2Ygc2VhcmNoIGZ1bmN0aW9uYWxpdHkg4oCTIGxpa2VseSBhIGdyZXAsIGFuIElERSdzIHNlYXJjaCwgb3IgYSBtb3JlIHNwZWNpYWxpemVkIHRvb2wgZGVwZW5kaW5nIG9uIHRoZSBwcm9qZWN0LiBUaGUgZ29hbCBoZXJlIGlzIGVmZmljaWVudCBpZGVudGlmaWNhdGlvbjsgSSdtIG5vdCBqdXN0IGxvb2tpbmcgZm9yIGEgc2ltcGxlIHN0cmluZyBtYXRjaCwgYnV0IHVuZGVyc3RhbmRpbmcgdGhlICpjb250ZXh0KiBhcm91bmQgdGhlIGNoZWNrIGl0c2VsZi4gQXJlIHRoZXNlIGNoZWNrcyBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIHZhbGlkYXRpb24sIHNlY3VyaXR5IG1lYXN1cmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgY2hlY2sgbWF0dGVycyBpbiBob3cgaXQgaXMgaW1wbGVtZW50ZWQuIFNvIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgY29kZSBzdXJyb3VuZGluZyBpdC4gSSdsbCBuZWVkIHRvIHRoZW4gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZSByZWdpc3RlciBhbmQgaG93IGl0IGlzIHVzZWQuIEkgYW50aWNpcGF0ZSBxdWlja2x5IG5hcnJvd2luZyBkb3duIHRoZSBwb3RlbnRpYWxseSByZWxldmFudCBpbnN0YW5jZXMgYW5kIHRoZW4gZGl2aW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLiBUaGUga2V5IGlzIG1ldGhvZGljYWwgaWRlbnRpZmljYXRpb24gYW5kIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTozNC44MDc1MjA3NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MjYzNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX3JlZ19hcmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMDgzPXN0YXRpYyB2b2lkIG1hcmtfaW5zbl96ZXh0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzA5NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzA5NjpzdGF0aWMgaW50IF9fY2hlY2tfcmVnX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHJlZ25vLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDk3LVxcdFxcdFxcdCAgIGVudW0gYnBmX3JlZ19hcmdfdHlwZSB0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMxMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMxMzQ6c3RhdGljIGludCBjaGVja19yZWdfYXJnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiByZWdubyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzNS1cXHRcXHRcXHQgZW51bSBicGZfcmVnX2FyZ190eXBlIHQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzEzOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzE0MDpcXHRyZXR1cm4gX19jaGVja19yZWdfYXJnKGVudiwgc3RhdGUtXFx1MDAzZXJlZ3MsIHJlZ25vLCB0KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzE0MS19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0Nz1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc4My1cXHRcXHRcXHQgICAgYnBmX3N0YWNrX25hcnJvd19hY2Nlc3Nfb2sob2ZmLCBzaXplLCBzcGlsbF9zaXplKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNzg0OlxcdFxcdFxcdFxcdC8qIFRoZSBlYXJsaWVyIGNoZWNrX3JlZ19hcmcoKSBoYXMgZGVjaWRlZCB0aGVcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzc4NS1cXHRcXHRcXHRcXHQgKiBzdWJyZWdfZGVmIGZvciB0aGlzIGluc24uICBTYXZlIGl0IGZpcnN0Llxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzNDE9c3RhdGljIGludCBjaGVja19sb2FkX21lbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM1Mi1cXHRpZiAoaXNfc3RhY2tfYXJnX2xkeChpbnNuKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzUzOlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzU5LVxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjA6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjEtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzY0LVxcdC8qIGNoZWNrIGRzdCBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM2Ni1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTQtXFx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5NTpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5Ni1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDEtXFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MDI6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA2LVxcdC8qIGNoZWNrIHNyYzIgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDA3OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjQyMj1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM0LVxcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDM1OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDM2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQzOS1cXHQvKiBjaGVjayBzcmMyIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ0MDpcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ0MS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0NDg6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGF1eF9yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NDktXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDc2LVxcdFxcdC8qIGNoZWNrIGFuZCByZWNvcmQgbG9hZCBvZiBvbGQgdmFsdWUgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NzpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgbG9hZF9yZWcsIERTVF9PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzgtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjM4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTEtXFx0XFx0XFx0LypcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxMjpcXHRcXHRcXHQgKiBGb3IgQ09OU1RfUFRSX1RPX0RZTlBUUiwgcmVnIGlzIGFscmVhZHkgc2NyYXRjaGVkIGJ5IGNoZWNrX3JlZ19hcmdcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMxMy1cXHRcXHRcXHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTgyMTE9c3RhdGljIGludCBjaGVja19mdW5jX2FyZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgYXJnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTgyMjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjgyMjg6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ25vLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy04MjI5LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTA1Mj1zdGF0aWMgdm9pZCBjbGVhcl9jYWxsZXJfc2F2ZWRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNTktXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkwNjA6XFx0XFx0X19jaGVja19yZWdfYXJnKGVudiwgcmVncywgY2FsbGVyX3NhdmVkW2ldLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkwNjEtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkwODI9c3RhdGljIGludCBzZXR1cF9mdW5jX2VudHJ5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLCBpbnQgY2FsbHNpdGUsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTExOC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6OTExOTpcXHQvKiBvbmx5IGluY3JlbWVudCBpdCBhZnRlciBjaGVja19yZWdfYXJnKCkgZmluaXNoZWQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTEyMC1cXHRzdGF0ZS1cXHUwMDNlY3VyZnJhbWUrKztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMDE3MT1zdGF0aWMgaW50IGNoZWNrX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNS1cXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA0MTY6XFx0XFx0Y2hlY2tfcmVnX2FyZyhlbnYsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDQxNy1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ5MTg9c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTI1LVxcdFxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTI2OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDkyNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTM3LVxcdFxcdGlmIChyZWdzW2luc24tXFx1MDAzZWRzdF9yZWddLnR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTM4OlxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTM5LVxcdFxcdFxcdGVyciA9IGVyciA/OiBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFscyhlbnYsIGluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NDItXFx0XFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NDM6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTQ0LVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk1OC1cXHRcXHRcXHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk1OTpcXHRcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjAtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2NC1cXHRcXHQvKiBjaGVjayBkZXN0IG9wZXJhbmQsIG1hcmsgYXMgcmVxdWlyZWQgbGF0ZXIgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ5NjU6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3MC1cXHRcXHRcXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTUwNzE6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDcyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzYtXFx0XFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDc3OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3OC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDk3LVxcdFxcdC8qIGNoZWNrIGRlc3Qgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTA5ODpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgRFNUX09QX05PX01BUkspO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA5OS1cXHRcXHRlcnIgPSBlcnIgPzogYWRqdXN0X3JlZ19taW5fbWF4X3ZhbHMoZW52LCBpbnNuKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTk0Nj1zdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5ODUtXFx0LyogY2hlY2sgc3JjMiBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTg2OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk4Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTkyLVxcdFxcdC8qIGNoZWNrIHNyYzEgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5MzpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5OTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjE4NT1zdGF0aWMgaW50IGNoZWNrX2xkX2ltbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxOTctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTk4OlxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE5OS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MzA3PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjMyNC1cXHQvKiBjaGVjayB3aGV0aGVyIGltcGxpY2l0IHNvdXJjZSBvcGVyYW5kIChyZWdpc3RlciBSNikgaXMgcmVhZGFibGUgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzMjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGN0eF9yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzI2LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNDQtXFx0XFx0LyogY2hlY2sgZXhwbGljaXQgc291cmNlIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYzNDU6XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MzQ2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNTYtXFx0XFx0YnBmX21hcmtfcmVnX25vdF9pbml0KGVudiwgXFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MzU3OlxcdFxcdGNoZWNrX3JlZ19hcmcoZW52LCBjYWxsZXJfc2F2ZWRbaV0sIERTVF9PUF9OT19NQVJLKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNTgtXFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NTMxPXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU2NS1cXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY1NjY6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ25vLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjU2Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NjE2PXN0YXRpYyBpbnQgY2hlY2tfZ2xvYmFsX3N1YnByb2dfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjYyNC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTY2MjU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIEJQRl9SRUdfMCwgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTY2MjYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzIzNT1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyNjYtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MjY3OlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI2OC1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTozNC44ODI3OTAwNzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMDU0NjM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIEluc3RydWN0aW9uIFJlZ2lzdGVyIFVzYWdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBicGZfaW5zbmAgc3RydWN0dXJlIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGZvY3VzZXMgb24gdGhlIHJlZ2lzdGVyIGZpZWxkcy4gSSdtIHNlZWluZyBgc3JjX3JlZ2AgYW5kIGBkc3RfcmVnYCwgZWFjaCA0IGJpdHMgd2lkZS4gVGhhdCdzIGdvb2QsIHR5cGljYWwgcmVnaXN0ZXIgc2V0dXAuIEJ1dCwgYW5kIGhlcmUncyB0aGUgcXVlc3Rpb24gdGhhdCBqdW1wcyBvdXQgYXQgbWU6IGlmIHRoZSBpbnN0cnVjdGlvbidzIGBCUEZfU1JDKGluc24tXHUwMDNlY29kZSlgIGZpZWxkIHNpZ25pZmllcyBhIGRpcmVjdCBpbW1lZGlhdGUgdmFsdWUgKGBCUEZfS2ApLCAqZG9lcyogdGhlIEJQRiB2ZXJpZmllciBhdXRvbWF0aWNhbGx5IGVuZm9yY2UgdGhhdCB0aGUgYHNyY19yZWdgIGZpZWxkIGlzIHNldCB0byB6ZXJvPyBUaGF0J3MgdGhlIGV4cGVjdGVkIGNvbnZlbnRpb24gaW4gbWFueSBpbnN0cnVjdGlvbiBzZXRzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCdzIGhvdyBpdCdzIGhhbmRsZWQgaGVyZS5cblxuVG8gZmlndXJlIHRoaXMgb3V0IGRlZmluaXRpdmVseSwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSB2ZXJpZmllcidzIGNvZGUuIE15IGd1dCBzYXlzIEknbGwgcHJvYmFibHkgZmluZCB0aGUgYW5zd2VyIHdpdGhpbiBgcmVwbGFjZV9tYXBfZmRfd2l0aF9tYXBfcHRyYCBvciBwZXJoYXBzIGluIHRoZSBtYWluIGBicGZfY2hlY2tgIGZ1bmN0aW9uLiBUaGVzZSBhcmUgdGhlIHR3byBwcmltYXJ5IGxvY2F0aW9ucyB3aGVyZSB0aGUgQlBGIHZlcmlmaWVyIGxvZ2ljIHJlbGF0ZWQgdG8gaW5zdHJ1Y3Rpb24gdmFsaWRhdGlvbiBhbmQgcmVzb3VyY2Ugc3Vic3RpdHV0aW9uIHdvdWxkIHJlc2lkZS4gVGltZSB0byBjcmFjayBvcGVuIHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGUgYml0IGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDczMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjM4Ljg5MzM2MjkzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI4OTA5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3JjX3JlZyAhPSAwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwOTY9c3RhdGljIGludCBjaGVja19hbmRfcmVzb2x2ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTIzLVxcdFxcdFxcdGlmIChpID09IGluc25fY250IC0gMSB8fCBpbnNuWzFdLmNvZGUgIT0gMCB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODEyNDpcXHRcXHRcXHQgICAgaW5zblsxXS5kc3RfcmVnICE9IDAgfHwgaW5zblsxXS5zcmNfcmVnICE9IDAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMjUtXFx0XFx0XFx0ICAgIGluc25bMV0ub2ZmICE9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6MzguOTc2MjcwODk0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MTAzNTM2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBBTFUgT3BlcmF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIEFMVSBvcGVyYXRpb24gdmVyaWZpY2F0aW9uIGlzIGZ1bmN0aW9uaW5nLiBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGNoZWNrX2FsdV9vcGAgZnVuY3Rpb24uIEkgYWxyZWFkeSBoYXZlIGEgc3Ryb25nIGludHVpdGlvbiBhYm91dCB3aGVyZSB0aGUgbGlrZWx5IGlzc3VlcyBtaWdodCBiZSwgZ2l2ZW4gcGFzdCBleHBlcmllbmNlcyB3aXRoIEJQRiB2ZXJpZmllciBkZXNpZ24gYW5kIGNvbW1vbiBwaXRmYWxscy4gSSdtIGFudGljaXBhdGluZyBsb29raW5nIGF0IHJlZ2lzdGVyIGNvbnN0cmFpbnRzLCBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMsIGFuZCBwZXJoYXBzIHRoZSBoYW5kbGluZyBvZiBkaWZmZXJlbnQgZGF0YSB3aWR0aHMgb3Igc2lnbmVkbmVzcyBjb252ZXJzaW9ucyB3aXRoaW4gdGhlc2UgYXJpdGhtZXRpYyBhbmQgbG9naWNhbCBvcGVyYXRpb25zLiBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyBhcHByb2FjaCB0byBoYW5kbGluZyBlZGdlIGNhc2VzIGFuZCBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgdGhhdCBhbiBBTFUgb3Agd29uJ3QgaW50cm9kdWNlIHVuZGVmaW5lZCBiZWhhdmlvciBvciB2aW9sYXRlIGFueSBzYWZldHkgZ3VhcmFudGVlcy4gSXMgaXQgdXNpbmcgcmFuZ2UgYW5hbHlzaXM/IENvbnN0YW50IHByb3BhZ2F0aW9uPyBTeW1ib2xpYyBleGVjdXRpb24/IFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGhlcmUgYXJlIGNyaXRpY2FsIGZvciByb2J1c3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI4NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjQ0Ljc4NjYyNzMxNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTIyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0OTE4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MTg6XFx0c3RhdGljIGludCBjaGVja19hbHVfb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbjE0OTE5OlxcdHtcXG4xNDkyMDpcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncyA9IGN1cl9yZWdzKGVudik7XFxuMTQ5MjE6XFx0XFx0dTggb3Bjb2RlID0gQlBGX09QKGluc24tXFx1MDAzZWNvZGUpO1xcbjE0OTIyOlxcdFxcdGludCBlcnI7XFxuMTQ5MjM6XFx0XFxuMTQ5MjQ6XFx0XFx0aWYgKG9wY29kZSA9PSBCUEZfRU5EIHx8IG9wY29kZSA9PSBCUEZfTkVHKSB7XFxuMTQ5MjU6XFx0XFx0XFx0LyogY2hlY2sgc3JjIG9wZXJhbmQgKi9cXG4xNDkyNjpcXHRcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlZHN0X3JlZywgU1JDX09QKTtcXG4xNDkyNzpcXHRcXHRcXHRpZiAoZXJyKVxcbjE0OTI4OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTQ5Mjk6XFx0XFxuMTQ5MzA6XFx0XFx0XFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnKSkge1xcbjE0OTMxOlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUiVkIHBvaW50ZXIgYXJpdGhtZXRpYyBwcm9oaWJpdGVkXFxcXG5cXFwiLFxcbjE0OTMyOlxcdFxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbjE0OTMzOlxcdFxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbjE0OTM0OlxcdFxcdFxcdH1cXG4xNDkzNTpcXHRcXG4xNDkzNjpcXHRcXHRcXHQvKiBjaGVjayBkZXN0IG9wZXJhbmQgKi9cXG4xNDkzNzpcXHRcXHRcXHRpZiAocmVnc1tpbnNuLVxcdTAwM2Vkc3RfcmVnXS50eXBlID09IFNDQUxBUl9WQUxVRSkge1xcbjE0OTM4OlxcdFxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBEU1RfT1BfTk9fTUFSSyk7XFxuMTQ5Mzk6XFx0XFx0XFx0XFx0ZXJyID0gZXJyID86IGFkanVzdF9zY2FsYXJfbWluX21heF92YWxzKGVudiwgaW5zbixcXG4xNDk0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10sXFxuMTQ5NDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ10pO1xcbjE0OTQyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTQ5NDM6XFx0XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUCk7XFxuMTQ5NDQ6XFx0XFx0XFx0fVxcbjE0OTQ1OlxcdFxcdFxcdGlmIChlcnIpXFxuMTQ5NDY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDk0NzpcXHRcXG4xNDk0ODpcXHRcXHR9IGVsc2UgaWYgKG9wY29kZSA9PSBCUEZfTU9WKSB7XFxuMTQ5NDk6XFx0XFxuMTQ5NTA6XFx0XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG4xNDk1MTpcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QpIHtcXG4xNDk1MjpcXHRcXHRcXHRcXHRcXHRpZiAoIWVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhcmVuYSkge1xcbjE0OTUzOlxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiYWRkcl9zcGFjZV9jYXN0IGluc24gY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHByb2dyYW0gdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCBhcmVuYVxcXFxuXFxcIik7XFxuMTQ5NTQ6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTQ5NTU6XFx0XFx0XFx0XFx0XFx0fVxcbjE0OTU2OlxcdFxcdFxcdFxcdH1cXG4xNDk1NzpcXHRcXG4xNDk1ODpcXHRcXHRcXHRcXHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xcbjE0OTU5OlxcdFxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbjE0OTYwOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuMTQ5NjE6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDk2MjpcXHRcXHRcXHR9XFxuMTQ5NjM6XFx0XFxuMTQ5NjQ6XFx0XFx0XFx0LyogY2hlY2sgZGVzdCBvcGVyYW5kLCBtYXJrIGFzIHJlcXVpcmVkIGxhdGVyICovXFxuMTQ5NjU6XFx0XFx0XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcsIERTVF9PUF9OT19NQVJLKTtcXG4xNDk2NjpcXHRcXHRcXHRpZiAoZXJyKVxcbjE0OTY3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTQ5Njg6XFx0XFxuMTQ5Njk6XFx0XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG4xNDk3MDpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyA9IHJlZ3MgKyBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbjE0OTcxOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnID0gcmVncyArIGluc24tXFx1MDAzZWRzdF9yZWc7XFxuMTQ5NzI6XFx0XFxuMTQ5NzM6XFx0XFx0XFx0XFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQpIHtcXG4xNDk3NDpcXHRcXHRcXHRcXHRcXHRpZiAoaW5zbi1cXHUwMDNlaW1tKSB7XFxuMTQ5NzU6XFx0XFx0XFx0XFx0XFx0XFx0Lyogb2ZmID09IEJQRl9BRERSX1NQQUNFX0NBU1QgKi9cXG4xNDk3NjpcXHRcXHRcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxuMTQ5Nzc6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSAxKSB7IC8qIGNhc3QgZnJvbSBhcygxKSB0byBhcygwKSAqL1xcbjE0OTc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXR5cGUgPSBQVFJfVE9fQVJFTkE7XFxuMTQ5Nzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0LyogUFRSX1RPX0FSRU5BIGlzIDMyLWJpdCAqL1xcbjE0OTgwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXN1YnJlZ19kZWYgPSBlbnYtXFx1MDAzZWluc25faWR4ICsgMTtcXG4xNDk4MTpcXHRcXHRcXHRcXHRcXHRcXHR9XFxuMTQ5ODI6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2VvZmYgPT0gMCkge1xcbjE0OTgzOlxcdFxcdFxcdFxcdFxcdFxcdC8qIGNhc2U6IFIxID0gUjJcXG4xNDk4NDpcXHRcXHRcXHRcXHRcXHRcXHQgKiBjb3B5IHJlZ2lzdGVyIHN0YXRlIHRvIGRlc3QgcmVnXFxuMTQ5ODU6XFx0XFx0XFx0XFx0XFx0XFx0ICovXFxuMTQ5ODY6XFx0XFx0XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XFxuMTQ5ODc6XFx0XFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4xNDk4ODpcXHRcXHRcXHRcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2VzdWJyZWdfZGVmID0gREVGX05PVF9TVUJSRUc7XFxuMTQ5ODk6XFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNDk5MDpcXHRcXHRcXHRcXHRcXHRcXHQvKiBjYXNlOiBSMSA9IChzOCwgczE2IHMzMilSMiAqL1xcbjE0OTkxOlxcdFxcdFxcdFxcdFxcdFxcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZykpIHtcXG4xNDk5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHR2ZXJib3NlKGVudixcXG4xNDk5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFwiUiVkIHNpZ24tZXh0ZW5zaW9uIHBhcnQgb2YgcG9pbnRlclxcXFxuXFxcIixcXG4xNDk5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG4xNDk5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4xNDk5NjpcXHRcXHRcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHNyY19yZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFKSB7XFxuMTQ5OTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBub19zZXh0O1xcbjE0OTk4OlxcdFxcbjE0OTk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG5vX3NleHQgPSByZWdfdW1heChzcmNfcmVnKSBcXHUwMDNjICgxVUxMIFxcdTAwM2NcXHUwMDNjIChpbnNuLVxcdTAwM2VvZmYgLSAxKSk7XFxuMTUwMDA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aWYgKG5vX3NleHQpXFxuMTUwMDE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YXNzaWduX3NjYWxhcl9pZF9iZWZvcmVfbW92KGVudiwgc3JjX3JlZyk7XFxuMTUwMDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0KmRzdF9yZWcgPSAqc3JjX3JlZztcXG4xNTAwMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIW5vX3NleHQpXFxuMTUwMDQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xlYXJfc2NhbGFyX2lkKGRzdF9yZWcpO1xcbjE1MDA1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvZXJjZV9yZWdfdG9fc2l6ZV9zeChkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYgXFx1MDAzZVxcdTAwM2UgMyk7XFxuMTUwMDY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlc3VicmVnX2RlZiA9IERFRl9OT1RfU1VCUkVHO1xcbjE1MDA3OlxcdFxcdFxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTUwMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIGluc24tXFx1MDAzZWRzdF9yZWcpO1xcbjE1MDA5OlxcdFxcdFxcdFxcdFxcdFxcdH1cXG4xNTAxMDpcXHRcXHRcXHRcXHRcXHR9XFxuMTUwMTE6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xNTAxMjpcXHRcXHRcXHRcXHRcXHQvKiBSMSA9ICh1MzIpIFIyICovXFxuMTUwMTM6XFx0XFx0XFx0XFx0XFx0aWYgKGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnKSkge1xcbjE1MDE0OlxcdFxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbjE1MDE1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJSJWQgcGFydGlhbCBjb3B5IG9mIHBvaW50ZXJcXFxcblxcXCIsXFxuMTUwMTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuMTUwMTc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjQ0Ljc4NzI4MTcwNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMzMjc5OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IG1lbnRhbCBnZWFycyBhcmUgc3RhcnRpbmcgdG8gdHVybi5cblxuKipEaXNzZWN0aW5nIHRoZSBEYXRhIEZsb3cqKlxuXG5IYW5nIG9uIGEgc2Vjb25kLCBhIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBjaGVja19hbHVfb3BgLCBhbmQgaXQncyBjYWxsaW5nIGVpdGhlciBgYWRqdXN0X3B0cl9taW5fbWF4X3ZhbHNgIG9yIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgYmVoYXZpb3IuIFNvLCBteSBmb2N1cyBpcyBub3cgb24gdGhvc2UgZnVuY3Rpb25zLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGBjaGVja19hbHVfb3BgLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgc2FuaXRpemVfZXJyYCBpcyB1c2VkLCBzbyB0aGF0IEkgdW5kZXJzdGFuZCB3aGVyZSBpdCBjYW4gY3JlYXRlIGEgcHJvYmxlbSwgYW5kIGhvdyB0aGUgcHJvZ3JhbSBkZWFscyB3aXRoIGl0LiBJIHNob3VsZCB0cmFjZSB0aGUgZXJyb3IgaGFuZGxpbmcgZmxvdyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjI5OjQ5LjYyMDU2NjU5MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzc1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM3NTA6XFx0XFx0ICovXFxuMTM3NTE6XFx0XFx0aWYgKGJhc2VfdHlwZShwdHJfcmVnLVxcdTAwM2V0eXBlKSA9PSBQVFJfVE9fTUVNIFxcdTAwMjZcXHUwMDI2IChwdHJfcmVnLVxcdTAwM2V0eXBlIFxcdTAwMjYgUFRSX1VOVFJVU1RFRCkpXFxuMTM3NTI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTM3NTM6XFx0XFxuMTM3NTQ6XFx0XFx0aWYgKCFjaGVja19yZWdfc2FuZV9vZmZzZXRfc2NhbGFyKGVudiwgb2ZmX3JlZywgcHRyX3JlZy1cXHUwMDNldHlwZSkgfHxcXG4xMzc1NTpcXHRcXHQgICAgIWNoZWNrX3JlZ19zYW5lX29mZnNldF9wdHIoZW52LCBwdHJfcmVnLCBwdHJfcmVnLVxcdTAwM2V0eXBlKSlcXG4xMzc1NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzc1NzpcXHRcXG4xMzc1ODpcXHRcXHQvKiBwb2ludGVyIHR5cGVzIGRvIG5vdCBjYXJyeSAzMi1iaXQgYm91bmRzIGF0IHRoZSBtb21lbnQuICovXFxuMTM3NTk6XFx0XFx0X19tYXJrX3JlZzMyX3VuYm91bmRlZChkc3RfcmVnKTtcXG4xMzc2MDpcXHRcXG4xMzc2MTpcXHRcXHRpZiAoc2FuaXRpemVfbmVlZGVkKG9wY29kZSkpIHtcXG4xMzc2MjpcXHRcXHRcXHRyZXQgPSBzYW5pdGl6ZV9wdHJfYWx1KGVudiwgaW5zbiwgcHRyX3JlZywgb2ZmX3JlZywgZHN0X3JlZyxcXG4xMzc2MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmluZm8sIGZhbHNlKTtcXG4xMzc2NDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMzc2NTpcXHRcXHRcXHRcXHRyZXR1cm4gc2FuaXRpemVfZXJyKGVudiwgaW5zbiwgcmV0KTtcXG4xMzc2NjpcXHRcXHR9XFxuMTM3Njc6XFx0XFxuMTM3Njg6XFx0XFx0c3dpdGNoIChvcGNvZGUpIHtcXG4xMzc2OTpcXHRcXHRjYXNlIEJQRl9BREQ6XFxuMTM3NzA6XFx0XFx0XFx0LypcXG4xMzc3MTpcXHRcXHRcXHQgKiBkc3RfcmVnIGdldHMgdGhlIHBvaW50ZXIgdHlwZSBhbmQgc2luY2Ugc29tZSBwb3NpdGl2ZVxcbjEzNzcyOlxcdFxcdFxcdCAqIGludGVnZXIgdmFsdWUgd2FzIGFkZGVkIHRvIHRoZSBwb2ludGVyLCBnaXZlIGl0IGEgbmV3ICdpZCdcXG4xMzc3MzpcXHRcXHRcXHQgKiBpZiBpdCdzIGEgUFRSX1RPX1BBQ0tFVC5cXG4xMzc3NDpcXHRcXHRcXHQgKiB0aGlzIGNyZWF0ZXMgYSBuZXcgJ2Jhc2UnIHBvaW50ZXIsIG9mZl9yZWcgKHZhcmlhYmxlKSBnZXRzXFxuMTM3NzU6XFx0XFx0XFx0ICogYWRkZWQgaW50byB0aGUgdmFyaWFibGUgb2Zmc2V0LCBhbmQgd2UgY29weSB0aGUgZml4ZWQgb2Zmc2V0XFxuMTM3NzY6XFx0XFx0XFx0ICogZnJvbSBwdHJfcmVnLlxcbjEzNzc3OlxcdFxcdFxcdCAqL1xcbjEzNzc4OlxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXI2NCA9IGNudW02NF9hZGQocHRyX3JlZy1cXHUwMDNlcjY0LCBvZmZfcmVnLVxcdTAwM2VyNjQpO1xcbjEzNzc5OlxcdFxcdFxcdGRzdF9yZWctXFx1MDAzZXZhcl9vZmYgPSB0bnVtX2FkZChwdHJfcmVnLVxcdTAwM2V2YXJfb2ZmLCBvZmZfcmVnLVxcdTAwM2V2YXJfb2ZmKTtcXG4xMzc4MDpcXHRcXHRcXHRkc3RfcmVnLVxcdTAwM2VyYXcgPSBwdHJfcmVnLVxcdTAwM2VyYXc7XFxuMTM3ODE6XFx0XFx0XFx0aWYgKHJlZ19pc19wa3RfcG9pbnRlcihwdHJfcmVnKSkge1xcbjEzNzgyOlxcdFxcdFxcdFxcdGlmICgha25vd24pXFxuMTM3ODM6XFx0XFx0XFx0XFx0XFx0ZHN0X3JlZy1cXHUwMDNlaWQgPSArK2Vudi1cXHUwMDNlaWRfZ2VuO1xcbjEzNzg0OlxcdFxcdFxcdFxcdC8qXFxuMTM3ODU6XFx0XFx0XFx0XFx0ICogQ2xlYXIgcmFuZ2UgZm9yIHVua25vd24gYWRkZW5kcyBzaW5jZSB3ZSBjYW4ndCBrbm93XFxuMTM3ODY6XFx0XFx0XFx0XFx0ICogd2hlcmUgdGhlIHBrdCBwb2ludGVyIGVuZGVkIHVwLiBBbHNvIGNsZWFyIEFUX1BLVF9FTkQgL1xcbjEzNzg3OlxcdFxcdFxcdFxcdCAqIEJFWU9ORF9QS1RfRU5EIGZyb20gcHJpb3IgY29tcGFyaXNvbiBhcyBhbnkgcG9pbnRlclxcbjEzNzg4OlxcdFxcdFxcdFxcdCAqIGFyaXRobWV0aWMgaW52YWxpZGF0ZXMgdGhlbS5cXG4xMzc4OTpcXHRcXHRcXHRcXHQgKi9cXG4xMzc5MDpcXHRcXHRcXHRcXHRpZiAoIWtub3duIHx8IGRzdF9yZWctXFx1MDAzZXJhbmdlIFxcdTAwM2MgMClcXG4xMzc5MTpcXHRcXHRcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmRzdF9yZWctXFx1MDAzZXJhdywgMCwgc2l6ZW9mKGRzdF9yZWctXFx1MDAzZXJhdykpO1xcbjEzNzkyOlxcdFxcdFxcdH1cXG4xMzc5MzpcXHRcXHRcXHRicmVhaztcXG4xMzc5NDpcXHRcXHRjYXNlIEJQRl9TVUI6XFxuMTM3OTU6XFx0XFx0XFx0aWYgKGRzdF9yZWcgIT0gcHRyX3JlZykge1xcbjEzNzk2OlxcdFxcdFxcdFxcdC8qIHNjYWxhciAtPSBwb2ludGVyLiAgQ3JlYXRlcyBhbiB1bmtub3duIHNjYWxhciAqL1xcbjEzNzk3OlxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiUiVkIHRyaWVkIHRvIHN1YnRyYWN0IHBvaW50ZXIgZnJvbSBzY2FsYXJcXFxcblxcXCIsXFxuMTM3OTg6XFx0XFx0XFx0XFx0XFx0ZHN0KTtcXG4xMzc5OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6NDkuNjIyMTg2MzYxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNTQ5NDQ2MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgQ29zbWV0aWMgRXJyb3IgTWVzc2FnZSBDb3JyZWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHN1YnRsZSBjaGFuZ2UgaW4gYHNhbml0aXplX2VycmAuIEl0IHNlZW1zIGxpa2UgYHNhbml0aXplX2VycmAgaXMgY2FsbGVkIHdoZW4gdGhlcmUncyBhbiBpc3N1ZSBkdXJpbmcgcG9pbnRlciBhcml0aG1ldGljIGFkanVzdG1lbnRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhZGp1c3RfcHRyX21pbl9tYXhfdmFsc2AgYW5kIGBhZGp1c3Rfc2NhbGFyX21pbl9tYXhfdmFsc2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiBob3cgdGhlIGVycm9yIG1lc3NhZ2UgaWRlbnRpZmllcyB0aGUgcHJvYmxlbWF0aWMgcmVnaXN0ZXIuXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHVzZWQgYHJlZ3Nbc3JjXS50eXBlYCBpbiB0aGUgYHZlcmJvc2VgIHN0YXRlbWVudCB0byBkZXRlcm1pbmUgd2hpY2ggcmVnaXN0ZXIgdG8gcmVwb3J0LiBOb3csIGl0IHNlZW1zIGxpa2Ugd2UncmUgY29uZGl0aW9uYWxseSB1c2luZyBgZHN0YCAoZGVzdGluYXRpb24gcmVnaXN0ZXIpIG9yIGBzcmNgIChzb3VyY2UgcmVnaXN0ZXIpIGJhc2VkIG9uIGBzcmNfaXNfaW1tYCBvciBgcmVnc1tzcmNdLnR5cGUgPT0gU0NBTEFSX1ZBTFVFYC4gVGhpcyBpcyBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGNhc2VzIHdpdGhpbiBgQlBGX0tgIGluc3RydWN0aW9ucy5cblxuVGhlIGxvZ2ljIHNheXMgdGhhdCBpZiBgc3JjX2lzX2ltbWAgaXMgdHJ1ZSwgb3IgdGhlIHNvdXJjZSByZWdpc3RlcidzIHR5cGUgaXMgYSBzY2FsYXIgdmFsdWUsIHRoZW4gdGhlIHRhcmdldCByZWdpc3RlciAoYGRzdGApIGlzIHByaW50ZWQ7IG90aGVyd2lzZSwgdGhlIHNvdXJjZSByZWdpc3RlciAoYHNyY2ApIGlzIHByaW50ZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMgYWxsIGFib3V0IG1ha2luZyB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlIGluZm9ybWF0aXZlLiBUaGUgY29kZSBpcyB0cnlpbmcgdG8gcHJpbnQgdGhlIGNvcnJlY3QgcmVnaXN0ZXIgYmFzZWQgb24gd2hldGhlciB0aGUgc291cmNlIG9wZXJhbmQgaXMgYW4gaW1tZWRpYXRlIHZhbHVlIG9yIGEgcmVnaXN0ZXIuXG5cblRoZSBrZXkgaW5zaWdodCBpcyB0aGUgc3BlY2lhbCBoYW5kbGluZyBvZiBgQlBGX0tgIGluc3RydWN0aW9ucy4gSW4gdGhlc2UgaW5zdHJ1Y3Rpb25zLCBgaW5zbi1cdTAwM2VzcmNfcmVnYCBpcyB1c3VhbGx5IDAuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwb3RlbnRpYWxseSBwcmludGluZyBcIlIwXCIgZXZlbiBpZiB0aGUgb3BlcmF0aW9uIHdhcyBpbnZhbGlkLiBOb3cgaXQgbWlnaHQgcHJpbnQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGluc3RlYWQuIFRoaXMgaXMgcHVyZWx5IGEgY29zbWV0aWMgaW1wcm92ZW1lbnQgZm9yIHRoZSBlcnJvciBtZXNzYWdlLCBtYWtpbmcgaXQgbW9yZSBhY2N1cmF0ZSBhbmQgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxuXG5Ob3csIGEgcG90ZW50aWFsIGNvbmNlcm4gcG9wcGVkIHVwOiBDYW4gYHNyY2AgZXZlbiBiZSBvdXQgb2YgYm91bmRzLCBlc3BlY2lhbGx5IGdpdmVuIGBpbnNuLVx1MDAzZXNyY19yZWdgPyBJZiBgaW5zbi1cdTAwM2VzcmNfcmVnYCB3ZXJlIGdyZWF0ZXIgdGhhbiAxMCwgYWNjZXNzaW5nIGByZWdzW3NyY11gIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIHJpZ2h0PyBCdXQgd2FpdCBhIG1pbnV0ZSwgaXNuJ3QgdGhlcmUgYSBjaGVjayBmb3IgdGhlIHZhbGlkaXR5IG9mIHRoZSByZWdpc3RlciBhcmd1bWVudHMgaW4gYGNoZWNrX2FsdV9vcGA/IExvb2tpbmcgbW9yZSBjbG9zZWx5LCBpdCBhcHBlYXJzIHRoYXQgYGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVx1MDAzZXNyY19yZWcsIFNSQ19PUClgIGlzIE5PVCBjYWxsZWQgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLiBUaGlzIG5lZWRzIG1vcmUgdmVyaWZpY2F0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBpbnNuLVx1MDAzZXNyY19yZWdgIGFjdHVhbGx5ICppcyogY2hlY2tlZCBmb3IgYEJQRl9LYCBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhhdCB0aGUgcmVnaXN0ZXIgaW5kZXggYHNyY2AgaXMgYWx3YXlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBgcmVnc2AgYXJyYXksIGFuZCBub3QgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOToyOTo1Ny45NzcxMzM0NDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NzE3MDg0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnNuLVxcdTAwM2VzcmNfcmVnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTQ1PWJvb2wgYnBmX2lzX21heV9nb3RvX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NDc6XFx0cmV0dXJuIGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX01BWV9HT1RPO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NDgtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTI5OTc9Ym9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMwMTYtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMwMTc6XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19DQUxMKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMDE4LVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMjMxPXN0YXRpYyBjb25zdCBjaGFyICpkaXNhc21fa2Z1bmNfbmFtZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIzNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzIzNjpcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMzctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjM0MT1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzU5LVxcdC8qIGNoZWNrIHNyYyBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzNjA6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzNjEtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzY4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MzY5OlxcdHNyY19yZWdfdHlwZSA9IHJlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ10udHlwZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3MC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MzczLVxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2Mzc0OlxcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXFx1MDAzZWluc25faWR4LCByZWdzICsgaW5zbi1cXHUwMDNlc3JjX3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlc3JjX3JlZyksIGluc24tXFx1MDAzZW9mZixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM3NS1cXHRcXHRcXHQgICAgICAgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIEJQRl9SRUFELCBpbnNuLVxcdTAwM2Vkc3RfcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYzODQ9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYzOTQtXFx0aWYgKGlzX3N0YWNrX2FyZ19zdHgoaW5zbikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjM5NTpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5Ni1cXHRcXHRpZiAoZXJyKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02Mzk3LVxcdFxcdFxcdHJldHVybiBlcnI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjYzOTg6XFx0XFx0cmV0dXJuIGNoZWNrX3N0YWNrX2FyZ193cml0ZShlbnYsIHN0YXRlLCBpbnNuLVxcdTAwM2VvZmYsIHJlZ3MgKyBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjM5OS1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQwMS1cXHQvKiBjaGVjayBzcmMxIG9wZXJhbmQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQwMjpcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQwMy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MTQtXFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cXHUwMDNlaW5zbl9pZHgsIHJlZ3MgKyBpbnNuLVxcdTAwM2Vkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVxcdTAwM2Vkc3RfcmVnKSwgaW5zbi1cXHUwMDNlb2ZmLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDE1OlxcdFxcdFxcdCAgICAgICBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSwgQlBGX1dSSVRFLCBpbnNuLVxcdTAwM2VzcmNfcmVnLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDE2LVxcdFxcdFxcdCAgICAgICBzdHJpY3RfYWxpZ25tZW50X29uY2UsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NDIyPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzQtXFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MzU6XFx0ZXJyID0gY2hlY2tfcmVnX2FyZyhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIFNSQ19PUCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MzYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDU3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NDU4OlxcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ1OTpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBsZWFrcyBhZGRyIGludG8gbWVtXFxcXG5cXFwiLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjQ2MC1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDczLVxcdFxcdGVsc2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjQ3NDpcXHRcXHRcXHRsb2FkX3JlZyA9IGluc24tXFx1MDAzZXNyY19yZWc7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0NzUtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjUxND1zdGF0aWMgaW50IGNoZWNrX2F0b21pY19sb2FkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjUyMzpcXHRpZiAoIWF0b21pY19wdHJfdHlwZV9vayhlbnYsIGluc24tXFx1MDAzZXNyY19yZWcsIGluc24pKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1MjQtXFx0XFx0dmVyYm9zZShlbnYsIFxcXCJCUEZfQVRPTUlDIGxvYWRzIGZyb20gUiVkICVzIGlzIG5vdCBhbGxvd2VkXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTI1OlxcdFxcdFxcdGluc24tXFx1MDAzZXNyY19yZWcsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1MjY6XFx0XFx0XFx0cmVnX3R5cGVfc3RyKGVudiwgcmVnX3N0YXRlKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZyktXFx1MDAzZXR5cGUpKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjUyNy1cXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzQzMT1zdGF0aWMgaW50IHNhbml0aXplX3NwZWN1bGF0aXZlX3BhdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzQ0NC1cXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzNDQ1OlxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTM0NDYtXFx0XFx0fVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzNTYwPXN0YXRpYyBpbnQgc2FuaXRpemVfZXJyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IHJlYXNvbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzU2My1cXHRjb25zdCBjaGFyICpvcCA9IEJQRl9PUChpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQUREID8gXFxcImFkZFxcXCIgOiBcXFwic3ViXFxcIjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTM1NjQ6XFx0dTMyIGRzdCA9IGluc24tXFx1MDAzZWRzdF9yZWcsIHNyYyA9IGluc24tXFx1MDAzZXNyY19yZWc7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzNTY1LVxcdGJvb2wgc3JjX2lzX2ltbSA9IEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0s7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTQ3NTA9c3RhdGljIGludCBhZGp1c3RfcmVnX21pbl9tYXhfdmFscyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NzYyLVxcdGlmIChCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDc2MzpcXHRcXHRzcmNfcmVnID0gXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NzY0LVxcdGVsc2VcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxNy1cXHRcXHRcXHQvKiBwb2ludGVyICs9IHNjYWxhciAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDgxODpcXHRcXHRcXHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDgxOS1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODI0LVxcdFxcdFxcdC8qIGlmIGRzdF9yZWcgaXMgcHJlY2lzZSwgc3JjX3JlZyBzaG91bGQgYmUgcHJlY2lzZSBhcyB3ZWxsICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0ODI1OlxcdFxcdFxcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODI2LVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ4NzMtXFx0ICAgIGRzdF9yZWctXFx1MDAzZWlkIFxcdTAwMjZcXHUwMDI2IGlzX3JlZ19jb25zdChzcmNfcmVnLCBhbHUzMikgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTQ4NzQ6XFx0ICAgICEoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VzcmNfcmVnID09IGluc24tXFx1MDAzZWRzdF9yZWcpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0ODc1LVxcdFxcdHU2NCB2YWwgPSByZWdfY29uc3RfdmFsdWUoc3JjX3JlZywgYWx1MzIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE0OTE4PXN0YXRpYyBpbnQgY2hlY2tfYWx1X29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk1OC1cXHRcXHRcXHQvKiBjaGVjayBzcmMgb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk1OTpcXHRcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5NjAtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk2OS1cXHRcXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk3MDpcXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3JjX3JlZyA9IHJlZ3MgKyBpbnNuLVxcdTAwM2VzcmNfcmVnO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDk3MS1cXHRcXHRcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZHN0X3JlZyA9IHJlZ3MgKyBpbnNuLVxcdTAwM2Vkc3RfcmVnO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTkwLVxcdFxcdFxcdFxcdFxcdC8qIGNhc2U6IFIxID0gKHM4LCBzMTYgczMyKVIyICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE0OTkxOlxcdFxcdFxcdFxcdFxcdGlmIChpc19wb2ludGVyX3ZhbHVlKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5OTItXFx0XFx0XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0OTkzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJSJWQgc2lnbi1leHRlbnNpb24gcGFydCBvZiBwb2ludGVyXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDk5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ5OTUtXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMTItXFx0XFx0XFx0XFx0LyogUjEgPSAodTMyKSBSMiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTAxMzpcXHRcXHRcXHRcXHRpZiAoaXNfcG9pbnRlcl92YWx1ZShlbnYsIGluc24tXFx1MDAzZXNyY19yZWcpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1MDE0LVxcdFxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTAxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiUiVkIHBhcnRpYWwgY29weSBvZiBwb2ludGVyXFxcXG5cXFwiLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTAxNjpcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwMTctXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTUwNzAtXFx0XFx0XFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1MDcxOlxcdFxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTA3Mi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1NzI2PXN0YXRpYyBib29sIHRyeV9tYXRjaF9wa3RfcG9pbnRlcnMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzU1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzcmNfcmVnLVxcdTAwM2V0eXBlLCB0cnVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3NTY6XFx0XFx0XFx0bWFya19wa3RfZW5kKHRoaXNfYnJhbmNoLCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBmYWxzZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1NzU3LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU3NzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNyY19yZWctXFx1MDAzZXR5cGUsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3Nzc6XFx0XFx0XFx0bWFya19wa3RfZW5kKG90aGVyX2JyYW5jaCwgaW5zbi1cXHUwMDNlc3JjX3JlZywgdHJ1ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1Nzc4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU3OTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNyY19yZWctXFx1MDAzZXR5cGUsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU3OTg6XFx0XFx0XFx0bWFya19wa3RfZW5kKHRoaXNfYnJhbmNoLCBpbnNuLVxcdTAwM2VzcmNfcmVnLCB0cnVlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU3OTktXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTgxOC1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3JjX3JlZy1cXHUwMDNldHlwZSwgdHJ1ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1ODE5OlxcdFxcdFxcdG1hcmtfcGt0X2VuZChvdGhlcl9icmFuY2gsIGluc24tXFx1MDAzZXNyY19yZWcsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU4MjAtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTk0Nj1zdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU5OTItXFx0XFx0LyogY2hlY2sgc3JjMSBvcGVyYW5kICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1OTkzOlxcdFxcdGVyciA9IGNoZWNrX3JlZ19hcmcoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnLCBTUkNfT1ApO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTk5NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTk2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTk5NzpcXHRcXHRzcmNfcmVnID0gXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ107XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE1OTk4LVxcdFxcdGlmICghKHJlZ19pc19wa3RfcG9pbnRlcl9hbnkoZHN0X3JlZykgXFx1MDAyNlxcdTAwMjYgcmVnX2lzX3BrdF9wb2ludGVyX2FueShzcmNfcmVnKSkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTU5OTk6XFx0XFx0ICAgIGlzX3BvaW50ZXJfdmFsdWUoZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAwMC1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBwb2ludGVyIGNvbXBhcmlzb24gcHJvaGliaXRlZFxcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMDE6XFx0XFx0XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDAyLVxcdFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDM4LVxcdFxcdCAgICAhX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBzcmNfcmVnKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMzk6XFx0XFx0XFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwNDAtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjEwMS1cXHRpZiAoQlBGX1NSQyhpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfWClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYxMDI6XFx0XFx0b3RoZXJfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ10gPSBlbnYtXFx1MDAzZXRydWVfcmVnMjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDMtXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDUtXFx0ICAgIHNyY19yZWctXFx1MDAzZXR5cGUgPT0gU0NBTEFSX1ZBTFVFIFxcdTAwMjZcXHUwMDI2IHNyY19yZWctXFx1MDAzZWlkIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTA2OlxcdCAgICAhV0FSTl9PTl9PTkNFKHNyY19yZWctXFx1MDAzZWlkICE9IG90aGVyX2JyYW5jaF9yZWdzW2luc24tXFx1MDAzZXNyY19yZWddLmlkKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjEwNy1cXHRcXHRzeW5jX2xpbmtlZF9yZWdzKGVudiwgdGhpc19icmFuY2gsIHNyY19yZWcsIFxcdTAwMjZsaW5rZWRfcmVncyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTA4OlxcdFxcdHN5bmNfbGlua2VkX3JlZ3MoZW52LCBvdGhlcl9icmFuY2gsIFxcdTAwMjZvdGhlcl9icmFuY2hfcmVnc1tpbnNuLVxcdTAwM2VzcmNfcmVnXSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMDktXFx0XFx0XFx0XFx0IFxcdTAwMjZsaW5rZWRfcmVncyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxNDgtXFx0XFx0XFx0aWYgKHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTQ5OlxcdFxcdFxcdFxcdG1hcmtfcHRyX25vdF9udWxsX3JlZyhcXHUwMDI2ZXFfYnJhbmNoX3JlZ3NbaW5zbi1cXHUwMDNlc3JjX3JlZ10pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE1MC1cXHRcXHRcXHRlbHNlXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxNzEtXFx0XFx0XFx0XFx0ICAgICAgb3Bjb2RlID09IEJQRl9KRVEpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjE3MjpcXHR9IGVsc2UgaWYgKCF0cnlfbWF0Y2hfcGt0X3BvaW50ZXJzKGluc24sIGRzdF9yZWcsIFxcdTAwMjZyZWdzW2luc24tXFx1MDAzZXNyY19yZWddLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjE3My1cXHRcXHRcXHRcXHRcXHQgICB0aGlzX2JyYW5jaCwgb3RoZXJfYnJhbmNoKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MTg1PXN0YXRpYyBpbnQgY2hlY2tfbGRfaW1tKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjIwMi1cXHRkc3RfcmVnID0gXFx1MDAyNnJlZ3NbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjAzOlxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IDApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMDQtXFx0XFx0dTY0IGltbSA9ICgodTY0KShpbnNuICsgMSktXFx1MDAzZWltbSBcXHUwMDNjXFx1MDAzYyAzMikgfCAodTMyKWluc24tXFx1MDAzZWltbTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjIxNi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyMTc6XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19CVEZfSUQpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyMTgtXFx0XFx0ZHN0X3JlZy1cXHUwMDNldHlwZSA9IGF1eC1cXHUwMDNlYnRmX3Zhci5yZWdfdHlwZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjIzMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyMzQ6XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19GVU5DKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjM1LVxcdFxcdHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eCA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4O1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjU0LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI1NTpcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9WQUxVRSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjI1NjpcXHQgICAgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX01BUF9JRFhfVkFMVUUpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyNTctXFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0FSRU5BKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYyNjctXFx0XFx0LyogV2Ugd2FudCByZWctXFx1MDAzZWlkIHRvIGJlIHNhbWUgKDApIGFzIG1hcF92YWx1ZSBpcyBub3QgZGlzdGluY3QgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYyNjg6XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fTUFQX0ZEIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MjY5OlxcdFxcdCAgIGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19NQVBfSURYKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MjcwLVxcdFxcdGRzdF9yZWctXFx1MDAzZXR5cGUgPSBDT05TVF9QVFJfVE9fTUFQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2MzA3PXN0YXRpYyBpbnQgY2hlY2tfbGRfYWJzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjM0NC1cXHRcXHQvKiBjaGVjayBleHBsaWNpdCBzb3VyY2Ugb3BlcmFuZCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjM0NTpcXHRcXHRlcnIgPSBjaGVja19yZWdfYXJnKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZywgU1JDX09QKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYzNDYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzIzNT1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyODctXFx0XFx0XFx0aWYgKGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VhY3RpdmVfbG9ja3MpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTcyODg6XFx0XFx0XFx0XFx0aWYgKChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9SRUdfMCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI4OS1cXHRcXHRcXHRcXHQgICAgIGluc24tXFx1MDAzZWltbSAhPSBCUEZfRlVOQ19zcGluX3VubG9jayBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzI5MC1cXHRcXHRcXHRcXHQgICAgIGluc24tXFx1MDAzZWltbSAhPSBCUEZfRlVOQ19rcHRyX3hjaGcpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MjkxOlxcdFxcdFxcdFxcdCAgICAoaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTcyOTItXFx0XFx0XFx0XFx0ICAgICAoaW5zbi1cXHUwMDNlb2ZmICE9IDAgfHwgIWtmdW5jX3NwaW5fYWxsb3dlZChpbnNuLVxcdTAwM2VpbW0pKSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMwMC1cXHRcXHRcXHRcXHRjdXJfZnVuYyhlbnYpLVxcdTAwM2Vub19zdGFja19hcmdfbG9hZCA9IHRydWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzAxOlxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fQ0FMTClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczMDItXFx0XFx0XFx0XFx0cmV0dXJuIGNoZWNrX2Z1bmNfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMDM6XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMwNC1cXHRcXHRcXHRcXHRyZXR1cm4gY2hlY2tfa2Z1bmNfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzkwND1zdGF0aWMgaW50IGNoZWNrX2FsdV9maWVsZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTEwLVxcdGNhc2UgQlBGX05FRzpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5MTE6XFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0sgfHwgaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MTItXFx0XFx0ICAgIGluc24tXFx1MDAzZW9mZiAhPSAwIHx8IGluc24tXFx1MDAzZWltbSAhPSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MTctXFx0Y2FzZSBCUEZfRU5EOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzkxODpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHwgaW5zbi1cXHUwMDNlb2ZmICE9IDAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5MTktXFx0XFx0ICAgIChpbnNuLVxcdTAwM2VpbW0gIT0gMTYgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlaW1tICE9IDMyIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZWltbSAhPSA2NCkgfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk0Mi1cXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTQzOlxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHwgaW5zbi1cXHUwMDNlb2ZmICE9IDApIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NDQtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJCUEZfTU9WIHVzZXMgcmVzZXJ2ZWQgZmllbGRzXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk2NC1cXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3OTY1OlxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5NjYtXFx0XFx0XFx0ICAgKGluc24tXFx1MDAzZW9mZiAhPSAwIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiAhPSAxKSB8fFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3OTc4PXN0YXRpYyBpbnQgY2hlY2tfam1wX2ZpZWxkcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5ODUtXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0sgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5ODY6XFx0XFx0ICAgIChpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgIT0gMCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5ODc6XFx0XFx0ICAgIChpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9QU0VVRE9fQ0FMTCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzk4ODpcXHRcXHQgICAgIGluc24tXFx1MDAzZXNyY19yZWcgIT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk4OS1cXHRcXHQgICAgaW5zbi1cXHUwMDNlZHN0X3JlZyAhPSBCUEZfUkVHXzAgfHwgY2xhc3MgPT0gQlBGX0pNUDMyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc5OTUtXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1gpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc5OTY6XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXFx1MDAzZWltbSAhPSAwIHx8IGluc24tXFx1MDAzZW9mZiAhPSAwKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3OTk3LVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiQlBGX0pBfEJQRl9YIHVzZXMgcmVzZXJ2ZWQgZmllbGRzXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzk5OS1cXHRcXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDAwOlxcdFxcdH0gZWxzZSBpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyAhPSBCUEZfUkVHXzAgfHwgaW5zbi1cXHUwMDNlZHN0X3JlZyAhPSBCUEZfUkVHXzAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMDEtXFx0XFx0XFx0ICAgKGNsYXNzID09IEJQRl9KTVAgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlaW1tICE9IDApIHx8XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwMDgtXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0sgfHwgaW5zbi1cXHUwMDNlaW1tICE9IDAgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwMDk6XFx0XFx0ICAgIGluc24tXFx1MDAzZXNyY19yZWcgIT0gQlBGX1JFR18wIHx8IGluc24tXFx1MDAzZWRzdF9yZWcgIT0gQlBGX1JFR18wIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDEwLVxcdFxcdCAgICBjbGFzcyA9PSBCUEZfSk1QMzIpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODAxNS1cXHRjYXNlIEJQRl9KQ09ORDpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwMTY6XFx0XFx0aWYgKGluc24tXFx1MDAzZWNvZGUgIT0gKEJQRl9KTVAgfCBCUEZfSkNPTkQpIHx8IGluc24tXFx1MDAzZXNyY19yZWcgIT0gQlBGX01BWV9HT1RPIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDE3LVxcdFxcdCAgICBpbnNuLVxcdTAwM2Vkc3RfcmVnIHx8IGluc24tXFx1MDAzZWltbSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDI3LVxcdFxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwMjg6XFx0XFx0fSBlbHNlIGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODAyOS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkJQRl9KTVAvSk1QMzIgdXNlcyByZXNlcnZlZCBmaWVsZHNcXFxcblxcXCIpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDM2PXN0YXRpYyBpbnQgY2hlY2tfaW5zbl9maWVsZHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDU3LVxcdGNhc2UgQlBGX1NUOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA1ODpcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX01FTSB8fCBpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA1OS1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIkJQRl9TVCB1c2VzIHJlc2VydmVkIGZpZWxkc1xcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwNzEtXFx0XFx0XFx0ICAgIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVyB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA3MjpcXHRcXHRcXHQgICAgKG1vZGUgPT0gQlBGX0FCUyBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VzcmNfcmVnICE9IEJQRl9SRUdfMCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwNzMtXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJCUEZfTERfW0FCU3xJTkRdIHVzZXMgcmVzZXJ2ZWQgZmllbGRzXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODA5Nj1zdGF0aWMgaW50IGNoZWNrX2FuZF9yZXNvbHZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTEtXFx0XFx0fVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExMjpcXHRcXHRpZiAoaW5zbi1cXHUwMDNlc3JjX3JlZyBcXHUwMDNlPSBNQVhfQlBGX1JFRyBcXHUwMDI2XFx1MDAyNiAhaXNfc3RhY2tfYXJnX2xkeChpbnNuKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExMzpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIlIlZCBpcyBpbnZhbGlkXFxcXG5cXFwiLCBpbnNuLVxcdTAwM2VzcmNfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTQtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgyNTg9c3RhdGljIHZvaWQgY29udmVydF9wc2V1ZG9fbGRfaW1tNjQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODI2Ni1cXHRcXHRcXHRjb250aW51ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyNjc6XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19GVU5DKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODI2OC1cXHRcXHRcXHRjb250aW51ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgyNjk6XFx0XFx0aW5zbi1cXHUwMDNlc3JjX3JlZyA9IDA7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MjcwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6Mjk6NTguMzc0MzEwNzg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzU0OTU2ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEVycm9yIE1lc3NhZ2UgQ2hhbmdlIGluIEJQRiBWZXJpZmllcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGNoZWNrX2FuZF9yZXNvbHZlX2luc25zYCwgSSBzZWUgYSBndWFyZCBlbnN1cmluZyBgaW5zbi1cdTAwM2VzcmNfcmVnYCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiBgTUFYX0JQRl9SRUdgLiBUaGF0J3MgZ29vZCwgc28gYHJlZ3NbaW5zbi1cdTAwM2VzcmNfcmVnXWAgaXMgYWx3YXlzIHZhbGlkbHkgYWNjZXNzZWQuIEJ1dCB0aGVuLCBJIHJlbWVtYmVyIHRoZSBgY2hlY2tfYWx1X2ZpZWxkc2AgZnVuY3Rpb24sIGFuZCB0aGVyZSdzIGEgc3BlY2lmaWMgY2hlY2sgZm9yIGBCUEZfS2AgaW5zdHJ1Y3Rpb25zLCB3aGVyZSBgaW5zbi1cdTAwM2VzcmNfcmVnYCAqbXVzdCogYmUgYEJQRl9SRUdfMGAgKHdoaWNoIGlzIHplcm8pLlxuXG5Fc3NlbnRpYWxseSwgYGNoZWNrX2FsdV9maWVsZHNgIGd1YXJhbnRlZXMgdGhhdCBpZiBhbiBpbnN0cnVjdGlvbiB1c2VzIGFuIGltbWVkaWF0ZSAoYEJQRl9LYCksIHRoZSBzb3VyY2UgcmVnaXN0ZXIgaXMgYWx3YXlzIHplcm8uIFRoaXMgbWVhbnMgdGhhdCBpbiB0aGUgYHNhbml0aXplX2VycmAgZnVuY3Rpb24sIHRoZSBgc3JjYCByZWdpc3RlciBpcyBhbHdheXMgMCB3aGVuIGBzcmNfaXNfaW1tYCBpcyB0cnVlLiBgcmVnc1swXWAgd2lsbCBhbHdheXMgYmUgaW4gYm91bmRzLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoLCB0aGUgY2hhbmdlIGlzIHB1cmVseSBjb3NtZXRpYy4gSXQncyBhYm91dCBob3cgdGhlIGVycm9yIG1lc3NhZ2UgaXMgZm9ybWF0dGVkLiBUaGUgb3JpZ2luYWwgY29kZSBwcmludGVkIGBzcmNgICh3aGljaCBpcyB6ZXJvKSBpbiB0aGUgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBpbnN0cnVjdGlvbiB3YXMgYW4gaW1tZWRpYXRlIEFMVSBvcGVyYXRpb24gb24gYSBwb2ludGVyLiBOb3csIGl0IHByaW50cyBgZHN0YCBpbnN0ZWFkIGlmIGBzcmNfaXNfaW1tYCBvciBgcmVnc1tzcmNdLnR5cGVgIGlzIGBTQ0FMQVJfVkFMVUVgLiBIb3dldmVyLCBpdCB3b3VsZCBoYXZlIHByaW50ZWQgYGRzdGAgYW55d2F5IGlmIGByZWdzWzBdLnR5cGVgIHdhcyBgU0NBTEFSX1ZBTFVFYCwgc28gdGhlIGltcGFjdCBpcyBtaW5pbWFsLiBUaGUga2V5IHJlYWxpemF0aW9uIGlzIHRoYXQgcHJpbnRpbmcgXCJSMCBoYXMgcG9pbnRlciB3aXRoIHVuc3VwcG9ydGVkIGFsdSBvcGVyYXRpb25cIiBpcyBtaXNsZWFkaW5nIGJlY2F1c2UgUjAgaXNuJ3QgcmVhbGx5IGludm9sdmVkIGluIHRoZSBvcGVyYXRpb24gKGl0J3MgdGhlIGltbWVkaWF0ZSB2YWx1ZSkuIFRoaXMgcGF0Y2gganVzdCBtYWtlcyB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlIGFjY3VyYXRlIGJ5IHBvaW50aW5nIHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci5cblxuVGhpcyBjaGFuZ2UgZG9lc24ndCBtb2RpZnkgZXhlY3V0aW9uIHBhdGhzLCByZXR1cm4gdmFsdWVzLCBvciBhZmZlY3QgdGhlIG92ZXJhbGwgbG9naWMgb2YgdGhlIHZlcmlmaWVyLiBBZnRlciByZS1leGFtaW5pbmcgdGhlIGNvbXBsZXRlIGRpZmYsIGNvbmZpcm1pbmcgaXQncyBsaW1pdGVkIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgXCJXb3J0aEZ1enppbmdcIiBldmFsdWF0aW9uIHNob3VsZCBiZSBgZmFsc2VgLiBJdCdzIHB1cmVseSBhIGRpYWdub3N0aWMgaW1wcm92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODg4LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTozMDoxNS43MjkyNzMzMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSByZWdpc3RlciBudW1iZXIgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlICh2aWEgdmVyYm9zZSgpKSB3aGVuIGEgQlBGIHBvaW50ZXIgYXJpdGhtZXRpYyBzYW5pdGl6YXRpb24gZXJyb3Igb2NjdXJzIHdpdGggYW4gaW1tZWRpYXRlIHZhbHVlLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHN0YXRlLCBvciByZXR1cm4gdmFsdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgcmVnaXN0ZXIgbnVtYmVyIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSAodmlhIHZlcmJvc2UoKSkgd2hlbiBhIEJQRiBwb2ludGVyIGFyaXRobWV0aWMgc2FuaXRpemF0aW9uIGVycm9yIG9jY3VycyB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZS4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LCBzdGF0ZSwgb3IgcmV0dXJuIHZhbHVlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow95slq[1] Phase: Running StartedAt: 2026-08-03 19:30:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow95slq[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-03 19:30:26 +0000 UTC FinishedAt: 2026-08-03 19:30:31 +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,}