Name: series-workflow4cjwl Phase: Failed StartedAt: 2026-08-17 05:35:18 +0000 UTC FinishedAt: 2026-08-17 06:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cjwl[0] Phase: Succeeded StartedAt: 2026-08-17 05:35:18 +0000 UTC FinishedAt: 2026-08-17 06:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cjwl[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 05:35:18 +0000 UTC FinishedAt: 2026-08-17 06:19:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aCBgYWN0aXZlX2Fub25fdm1hYCBpbiBhIGNhbGwgdG8gYGFub25fdm1hX2xvY2tfd3JpdGUoKWAuIFNpbmNlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBuZWl0aGVyIHZhcmlhYmxlIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjbGVhbnVwIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdWJzZXF1ZW50IGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgY2FsbC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNzU1N2E2OWYwZGJmZGYyYTRkNjA3YTg2NjdhZjM4MmQzNWM1NWM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDY6MTg6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmLi5mM2ZhZGZiNjljN2YyIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0zNTAsNyAmIzQzOzM1MCw3IEBAIGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gXHQgKiBOb3cgbGluayB0aGUgYW5vbl92bWEmIzM5O3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cbiBcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEmIzM5O3Mgc2hhcmUgdGhlIHNhbWUgcm9vdC5cbiBcdCAqL1xuLVx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuJiM0MztcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiBcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aCBgYWN0aXZlX2Fub25fdm1hYCBpbiBhIGNhbGwgdG8gYGFub25fdm1hX2xvY2tfd3JpdGUoKWAuIFNpbmNlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBuZWl0aGVyIHZhcmlhYmxlIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjbGVhbnVwIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdWJzZXF1ZW50IGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgY2FsbC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNzU1N2E2OWYwZGJmZGYyYTRkNjA3YTg2NjdhZjM4MmQzNWM1NWM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDY6MTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZjNmYWRmYjY5YzdmMiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLAogCSAqIE5vdyBsaW5rIHRoZSBhbm9uX3ZtYSYjMzk7cyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLgogCSAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEmIzM5O3Mgc2hhcmUgdGhlIHNhbWUgcm9vdC4KIAkgKi8KLQlhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpOwomIzQzOwlhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgJmFtcDtkc3QtJmd0O2Fub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLSZndDthbm9uX3ZtYTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3JtYXAuY2AuIEl0JiMzOTtzIGEgcHJldHR5IGZvY3VzZWQgbW9kaWZpY2F0aW9uLCByaWdodCBpbiB0aGUgYGFub25fdm1hX2Nsb25lYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhpczogdGhleSYjMzk7dmUgc3dhcHBlZCB0aGUgYGFub25fdm1hYCBiZWluZyBsb2NrZWQuIFByZXZpb3VzbHksIGl0IHdhcyBgc3JjLSZndDthbm9uX3ZtYWAsIGFuZCBub3cgaXQmIzM5O3MgYGFjdGl2ZV9hbm9uX3ZtYWAuIFRoaXMgaXMgYSBjb3JlIGNoYW5nZSDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSB0b3VjaGluZyB0aGUgaGVhcnQgb2YgaG93IGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhcyBhcmUgaGFuZGxlZC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGBybWFwYCBzdWJzeXN0ZW0sIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHdlIHVuZGVyc3RhbmQgdGhpcy4gSXQmIzM5O3Mgc3VidGxlLCBidXQgdGhlc2Uga2luZHMgb2YgY2hhbmdlcyBjYW4gaGF2ZSBmYXItcmVhY2hpbmcgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBhbm9uX3ZtYV9jbG9uZWAgaW4gYG1tL3JtYXAuY2AgaXRzZWxmLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5ICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCB3aGF0IHRoZSBvcmlnaW5hbCBpbnRlbnQgd2FzLCBhbmQgaG93IHRoaXMgbmV3IGxvY2sgYWZmZWN0cyBjb25jdXJyZW5jeSBhbmQgZGF0YSBpbnRlZ3JpdHkgaW4gdGhpcyBwYXJ0aWN1bGFyIGFyZWEuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9jbG9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTIzNC1cbm1tL3JtYXAuYzoyMzU6c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG5tbS9ybWFwLmMtMjM2LVx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4tLVxubW0vcm1hcC5jLTI5Mi0vKipcbm1tL3JtYXAuYzoyOTM6ICogYW5vbl92bWFfY2xvbmUgLSBFc3RhYmxpc2hlcyBuZXcgYW5vbl92bWFfY2hhaW4gb2JqZWN0cyBpbiBAZHN0IGxpbmtpbmcgdG9cbm1tL3JtYXAuYy0yOTQtICogYWxsIG9mIHRoZSBhbm9uX3ZtYSBvYmplY3RzIGNvbnRhaW5lZCB3aXRoaW4gQHNyYyBhbm9uX3ZtYV9jaGFpbiYjMzk7cy5cbi0tXG5tbS9ybWFwLmMtMzE5LSAqL1xubW0vcm1hcC5jOjMyMDppbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxubW0vcm1hcC5jLTMyMS1cdFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbi0tXG5tbS9ybWFwLmMtMzI1LVxubW0vcm1hcC5jOjMyNjpcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xubW0vcm1hcC5jLTMyNy1cbi0tXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXG4tLVxubW0vcm1hcC5jLTQwMy1cdCAqL1xubW0vcm1hcC5jOjQwNDpcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XG5tbS9ybWFwLmMtNDA1LVx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cbi0tXG5tbS9ybWFwLmMtNDQ0LS8qXG5tbS9ybWFwLmM6NDQ1OiAqIEluIHRoZSB1bmZvcnR1bmF0ZSBjYXNlIG9mIGFub25fdm1hX2Nsb25lKCkgZmFpbGluZyB0byBhbGxvY2F0ZSBtZW1vcnkgd2Vcbm1tL3JtYXAuYy00NDYtICogaGF2ZSB0byBjbGVhbiB0aGluZ3MgdXAuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgYW5vbl92bWFfY2xvbmVgIC0gQSBEZWVwIERpdmUqKgoKUmlnaHQsIGBhbm9uX3ZtYV9jbG9uZWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBpc24mIzM5O3QgaXQ/IEkga25vdyBJJiMzOTt2ZSBzZWVuIGl0IGNhbGxlZCBmcm9tIGBhbm9uX3ZtYV9mb3JrYCwgYnV0IEkgc3VzcGVjdCBpdCBwb3BzIHVwIGluIG90aGVyIGNydWNpYWwgYXJlYXMgdG9vLiBHaXZlbiBpdHMgY2VudHJhbCByb2xlLCBJIG5lZWQgdG8gZ2V0IGEgZnVsbCBoYW5kbGUgb24gdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIHRoZSBvcGVyYXRpb25zIHRoYXQgdHJpZ2dlciBpdCB3aWxsIHJlYWxseSB1bmxvY2sgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhIGNsb25pbmcgcHJvY2VzcyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzEwOlx0ICogSW4gYWxsIGNhc2VzIG90aGVyIHRoYW4gZm9yayB0aGlzIGlzIHNpbXBseSBhIGR1cGxpY2F0aW9uLiBGb3JrIGFkZGl0aW9uYWxseVxuIDMxMTpcdCAqIGFkZHMgYSBuZXcgYWN0aXZlIGFub25fdm1hLlxuIDMxMjpcdCAqXG4gMzEzOlx0ICogT05MWSBpbiB0aGUgY2FzZSBvZiBmb3JrIGRvIHdlIHRyeSB0byAmIzM5O3JldXNlJiMzOTsgZXhpc3RpbmcgYW5vbl92bWEmIzM5O3MgaW4gYW5cbiAzMTQ6XHQgKiBhbm9uX3ZtYSBoaWVyYXJjaHksIHJldXNpbmcgYW5vbl92bWEmIzM5O3Mgd2hpY2ggaGF2ZSBubyBWTUEgYXNzb2NpYXRlZCB3aXRoIHRoZW1cbiAzMTU6XHQgKiBidXQgZG8gaGF2ZSBhIHNpbmdsZSBjaGlsZC4gVGhpcyBpcyB0byBhdm9pZCB3YXN0ZSBvZiBtZW1vcnkgd2hlbiByZXBlYXRlZGx5XG4gMzE2Olx0ICogZm9ya2luZy5cbiAzMTc6XHQgKlxuIDMxODpcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLlxuIDMxOTpcdCAqL1xuIDMyMDpcdGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMzIxOlx0XHRcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXG4gMzIyOlx0e1xuIDMyMzpcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpwYXZjO1xuIDMyNDpcdFx0c3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWE7XG4gMzI1Olx0XG4gMzI2Olx0XHRjaGVja19hbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgb3BlcmF0aW9uKTtcbiAzMjc6XHRcbiAzMjg6XHRcdGlmICghYWN0aXZlX2Fub25fdm1hKVxuIDMyOTpcdFx0XHRyZXR1cm4gMDtcbiAzMzA6XHRcbiAzMzE6XHRcdC8qXG4gMzMyOlx0XHQgKiBBbGxvY2F0ZSBBVkNzLiBXZSBkb24mIzM5O3QgbmVlZCBhbiBhbm9uX3ZtYSBsb2NrIGZvciB0aGlzIGFzIHdlXG4gMzMzOlx0XHQgKiBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZ1xuIDMzNDpcdFx0ICogYW5vbl92bWEgc3RhdGlzdGljcy5cbiAzMzU6XHRcdCAqXG4gMzM2Olx0XHQgKiBFaXRoZXIgc3JjLCBkc3QgaGF2ZSB0aGUgc2FtZSBtbSBmb3Igd2hpY2ggd2UgaG9sZCBhbiBleGNsdXNpdmUgbW1hcFxuIDMzNzpcdFx0ICogd3JpdGUgbG9jaywgb3Igd2UgYXJlIGZvcmtpbmcgYW5kIHdlIGhvbGQgaXQgb24gc3JjLVx1MDAzZXZtX21tIGFuZCBkc3QgaXNcbiAzMzg6XHRcdCAqIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byBvdGhlciB0aHJlYWRzIHNvIHRoZXJlJiMzOTtzIG5vIHBvc3NpYmxpaXR5IG9mIHRoZVxuIDMzOTpcdFx0ICogdW5saW5rZWQgQVZDJiMzOTtzIGJlaW5nIG9ic2VydmVkIHlldC5cbiAzNDA6XHRcdCAqL1xuIDM0MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwYXZjLCBcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gMzQyOlx0XHRcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xuIDM0MzpcdFx0XHRpZiAoIWF2YylcbiAzNDQ6XHRcdFx0XHRnb3RvIGVub21lbV9mYWlsdXJlO1xuIDM0NTpcdFxuIDM0NjpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtXHUwMDNlYW5vbl92bWEpO1xuIDM0NzpcdFx0fVxuIDM0ODpcdFxuIDM0OTpcdFx0LypcbiAzNTA6XHRcdCAqIE5vdyBsaW5rIHRoZSBhbm9uX3ZtYSYjMzk7cyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLlxuIDM1MTpcdFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSYjMzk7cyBzaGFyZSB0aGUgc2FtZSByb290LlxuIDM1MjpcdFx0ICovXG4gMzUzOlx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gMzU0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gMzU1Olx0XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXHUwMDNlYW5vbl92bWE7XG4gMzU2Olx0XG4gMzU3Olx0XHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG4gMzU4Olx0XHRcdGlmIChvcGVyYXRpb24gPT0gVk1BX09QX0ZPUkspXG4gMzU5Olx0XHRcdFx0bWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7XG4gMzYwOlx0XHR9XG4gMzYxOlx0XG4gMzYyOlx0XHRpZiAob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLKVxuIDM2MzpcdFx0XHRkc3QtXHUwMDNlYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOztcbiAzNjQ6XHRcbiAzNjU6XHRcdGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuIDM2NjpcdFx0cmV0dXJuIDA7XG4gMzY3Olx0XG4gMzY4Olx0IGVub21lbV9mYWlsdXJlOlxuIDM2OTpcdFx0Y2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhkc3QpO1xuIDM3MDpcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzcxOlx0fVxuIDM3MjpcdFxuIDM3MzpcdC8qXG4gMzc0Olx0ICogQXR0YWNoIHZtYSB0byBpdHMgb3duIGFub25fdm1hLCBhcyB3ZWxsIGFzIHRvIHRoZSBhbm9uX3ZtYXMgdGhhdFxuIDM3NTpcdCAqIHRoZSBjb3JyZXNwb25kaW5nIFZNQSBpbiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8uXG4gMzc2Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuXG4gMzc3Olx0ICovXG4gMzc4Olx0aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbiAzNzk6XHR7XG4gMzgwOlx0XHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcbiAzODE6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7XG4gMzgyOlx0XHRpbnQgcmM7XG4gMzgzOlx0XG4gMzg0Olx0XHQvKiBEb24mIzM5O3QgYm90aGVyIGlmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgbm8gYW5vbl92bWEgaGVyZS4gKi9cbiAzODU6XHRcdGlmICghcHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiAzODY6XHRcdFx0cmV0dXJuIDA7XG4gMzg3Olx0XG4gMzg4Olx0XHQvKiBEcm9wIGluaGVyaXRlZCBhbm9uX3ZtYSwgd2UmIzM5O2xsIHJldXNlIGV4aXN0aW5nIG9yIGFsbG9jYXRlIG5ldy4gKi9cbiAzODk6XHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG4gMzkwOlx0XG4gMzkxOlx0XHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XG4gMzkyOlx0XHRpZiAoIWFub25fdm1hKVxuIDM5MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzOTQ6XHRcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xuIDM5NTpcdFx0aWYgKCFhdmMpIHtcbiAzOTY6XHRcdFx0cHV0X2Fub25fdm1hKGFub25fdm1hKTtcbiAzOTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzk4Olx0XHR9XG4gMzk5Olx0XG4gNDAwOlx0XHQvKlxuIDQwMTpcdFx0ICogRmlyc3QsIGF0dGFjaCB0aGUgbmV3IFZNQSB0byB0aGUgcGFyZW50IFZNQSYjMzk7cyBhbm9uX3ZtYXMsXG4gNDAyOlx0XHQgKiBzbyBybWFwIGNhbiBmaW5kIG5vbi1DT1dlZCBwYWdlcyBpbiBjaGlsZCBwcm9jZXNzZXMuXG4gNDAzOlx0XHQgKi9cbiA0MDQ6XHRcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XG4gNDA1Olx0XHQvKiBBbiBlcnJvciBhcm9zZSBvciBhbiBleGlzdGluZyBhbm9uX3ZtYSB3YXMgcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqL1xuIDQwNjpcdFx0aWYgKHJjIHx8IHZtYS1cdTAwM2Vhbm9uX3ZtYSkge1xuIDQwNzpcdFx0XHRwdXRfYW5vbl92bWEoYW5vbl92bWEpO1xuIDQwODpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gNDA5Olx0XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBBbm9uX1ZNQSBMb2NrIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYSBjaGFuZ2UgZnJvbSBsb2NraW5nIGFuZCB1bmxvY2tpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgIHRvIHVzaW5nIGBhY3RpdmVfYW5vbl92bWFgOgoKYGBgYwotCWFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSk7CiYjNDM7CWFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTsKYGBgCgphbmQgbGF0ZXI6CgpgYGBjCi0JYW5vbl92bWFfdW5sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpOwomIzQzOwlhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTsKYGBgCgpJbml0aWFsbHksIGBhY3RpdmVfYW5vbl92bWFgIGlzIHNldCB0byBgc3JjLSZndDthbm9uX3ZtYWA6CgpgYGBjCglzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy0mZ3Q7YW5vbl92bWE7CmBgYAoKTXkgZmlyc3QgdGhvdWdodCBpcywgYXJlIHRoZXNlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50PyBJZiBgc3JjLSZndDthbm9uX3ZtYWAgKmRvZXNuJiMzOTt0KiBjaGFuZ2UgYmV0d2VlbiB0aGUgbG9jayBhbmQgdW5sb2NrIGNhbGxzLCB0aGlzIGlzIGp1c3QgYSBjbGVhbnVwLiBJdCBtaWdodCBiZSBnb29kIHByYWN0aWNlIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUsIGJ1dCBpdCYjMzk7cyBub3QgYSBmdW5jdGlvbmFsIGRpZmZlcmVuY2UuCgpIb3dldmVyLCB0aGUgcXVlc3Rpb24gaXMsICpjYW4qIGBzcmMtJmd0O2Fub25fdm1hYCBjaGFuZ2U/IFRoZSBjb2RlIGNvbW1lbnRzIHN1Z2dlc3QgdGhhdCB0aGUgZnVuY3Rpb24gaG9sZHMgYW4gZXhjbHVzaXZlIG1tYXAgd3JpdGUgbG9jayBpbiBtYW55IGNhc2VzLiBJZiB3ZSBoYXZlIHRoYXQgZXhjbHVzaXZlIGxvY2ssIGBzcmMtJmd0O2Fub25fdm1hYCAqc2hvdWxkbiYjMzk7dCogYmUgbW9kaWZpZWQgYnkgYW5vdGhlciB0aHJlYWQuIEl0IGV4cGxpY2l0bHkgbWVudGlvbnMgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBlaXRoZXIgYHNyY2AsIGBkc3RgIG9yIHRoZSBmb3JrIGNhc2UuCgpCdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gV2hhdCBpZiBgc3JjYCBpdHNlbGYgaXMgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCBjaGFuZ2VzIGBzcmMtJmd0O2Fub25fdm1hYD8gVGhlIGxhdGVyIHVzZSBvZiBgYWN0aXZlX2Fub25fdm1hYCBpbiB0aGUgYHVubG9ja2AgY2FsbCwgd2hpbGUgYHNyYy0mZ3Q7YW5vbl92bWFgIGluIGBsb2NrYCB3b3VsZCBiZSBhIHJlYWwgcHJvYmxlbS4gU28gdGhpcyBpcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLgoKSSYjMzk7bSBzZWVpbmcgdGhhdCBgYW5vbl92bWFfY2xvbmVgIGlzIGNhbGxlZCB3aXRoIGBkc3RgIGFuZCBgc3JjYC4gSW4gdGhlIGZvcmsgY2FzZSwgSSBiZWxpZXZlIGBzcmNgIGlzIGBwdm1hYCBhbmQgYGRzdGAgaXMgYHZtYWAuIEl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgYHB2bWEtJmd0O2Fub25fdm1hYCBjb3VsZCBiZSBtb2RpZmllZCBoZXJlLCBidXQgYmVjYXVzZSB3ZSBob2xkIHRoZSBtbWFwIGxvY2ssIHRoYXQgZG9lc24mIzM5O3Qgc2VlbSBwb3NzaWJsZS4gQWxzbywgSSBkb24mIzM5O3Qgc2VlIGFueSBtb2RpZmljYXRpb24gb2YgYHNyYy0mZ3Q7YW5vbl92bWFgIGl0c2VsZiB3aXRoaW4gdGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24uCgpTbywgaXQgKmxvb2tzKiBsaWtlIHRoaXMgaXMgcHJvYmFibHkgYSBjbGVhbnVwLiBCdXQgSSBzaG91bGQgY29uZmlybSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBgYW5vbl92bWFfbG9ja193cml0ZWAgZm9yIHNhZmV0eSBhbmQgdGhhdCBgYW5vbl92bWFfbG9ja193cml0ZWAgaXMgdXNpbmcgcG9pbnRlcnMsIGJlY2F1c2UgdGhhdCB3b3VsZCBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHNhZmUgY2xlYW51cCBhbmQgdGhlIGFkZHJlc3MgY2Fubm90IGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9sb2NrX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDAyMz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwNzEtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6NDA3MjpcdFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XG5tbS9odWdlX21lbW9yeS5jLTQwNzMtXHRcdG1hcHBpbmcgPSBOVUxMO1xuLS1cbm1tL2ludGVybmFsLmg9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbi0tXG5tbS9pbnRlcm5hbC5oLTIxNy1cbm1tL2ludGVybmFsLmg6MjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG5tbS9pbnRlcm5hbC5oLTIxOS17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTg5NT1zdGF0aWMgdm9pZCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9jb3B5X2ZhaWxlZChwdGVfdCAqcHRlLFxuLS1cbm1tL2todWdlcGFnZWQuYy05MDUtXHQgKiBwYWdlcy4gU2luY2UgcGFnZXMgYXJlIHN0aWxsIGlzb2xhdGVkIGFuZCBsb2NrZWQgaGVyZSxcbm1tL2todWdlcGFnZWQuYzo5MDY6XHQgKiBhY3F1aXJpbmcgYW5vbl92bWFfbG9ja193cml0ZSBpcyB1bm5lY2Vzc2FyeS5cbm1tL2todWdlcGFnZWQuYy05MDctXHQgKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTI3OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTM0OS1cbm1tL2todWdlcGFnZWQuYzoxMzUwOlx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xubW0va2h1Z2VwYWdlZC5jLTEzNTEtXHRhbm9uX3ZtYV9sb2NrZWQgPSB0cnVlO1xuLS1cbm1tL21yZW1hcC5jPTE0Mz1zdGF0aWMgdm9pZCB0YWtlX3JtYXBfbG9ja3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbXJlbWFwLmMtMTQ3LVx0aWYgKHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbm1tL21yZW1hcC5jOjE0ODpcdFx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xubW0vbXJlbWFwLmMtMTQ5LX1cbi0tXG5tbS9ybWFwLmM9MTEwPXN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG4tLVxubW0vcm1hcC5jLTEzMi1cdGlmIChyd3NlbV9pc19sb2NrZWQoXHUwMDI2YW5vbl92bWEtXHUwMDNlcm9vdC1cdTAwM2Vyd3NlbSkpIHtcbm1tL3JtYXAuYzoxMzM6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xubW0vcm1hcC5jLTEzNC1cdFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTtcbi0tXG5tbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTIwNy1cbm1tL3JtYXAuYzoyMDg6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcbm1tL3JtYXAuYy0yMDktXHQvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi9cbi0tXG5tbS9ybWFwLmM9MzIwPWludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vcm1hcC5jLTM1Mi1cdCAqL1xubW0vcm1hcC5jOjM1MzpcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbm1tL3JtYXAuYy0zNTQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4tLVxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxuLS1cbm1tL3JtYXAuYy00MzUtXHQvKiBOb3cgbGV0IHJtYXAgc2VlIGl0LiAqL1xubW0vcm1hcC5jOjQzNjpcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xubW0vcm1hcC5jLTQzNy1cdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG4tLVxubW0vcm1hcC5jPTQ3OT12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTQ5Mi1cbm1tL3JtYXAuYzo0OTM6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5tbS9ybWFwLmMtNDk0LVxuLS1cbm1tL3JtYXAuYz02MzM9c3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtNjg5LVx0XHQgKiBhbmQgYmFpbCAtLSBjYW4mIzM5O3Qgc2ltcGx5IHVzZSBwdXRfYW5vbl92bWEoKSBiZWNhdXNlXG5tbS9ybWFwLmM6NjkwOlx0XHQgKiB3ZSYjMzk7bGwgZGVhZGxvY2sgb24gdGhlIGFub25fdm1hX2xvY2tfd3JpdGUoKSByZWN1cnNpb24uXG5tbS9ybWFwLmMtNjkxLVx0XHQgKi9cbi0tXG5tbS92bWEuYz0yOTE9c3RhdGljIHZvaWQgdm1hX3ByZXBhcmUoc3RydWN0IHZtYV9wcmVwYXJlICp2cClcbi0tXG5tbS92bWEuYy0zMTMtXHRpZiAodnAtXHUwMDNlYW5vbl92bWEpIHtcbm1tL3ZtYS5jOjMxNDpcdFx0YW5vbl92bWFfbG9ja193cml0ZSh2cC1cdTAwM2Vhbm9uX3ZtYSk7XG5tbS92bWEuYy0zMTUtXHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfcHJlX3VwZGF0ZV92bWEodnAtXHUwMDNldm1hKTtcbi0tXG5tbS92bWEuYz0zMTE3PWludCBleHBhbmRfdXB3YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL3ZtYS5jLTMxNjUtXHQvKiBXZSB1cGRhdGUgdGhlIGFub24gVk1BIHRyZWUuICovXG5tbS92bWEuYzozMTY2Olx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xubW0vdm1hLmMtMzE2Ny1cbi0tXG5tbS92bWEuYz0zMjAzPWludCBleHBhbmRfZG93bndhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4tLVxubW0vdm1hLmMtMzI0NC1cdC8qIFdlIHVwZGF0ZSB0aGUgYW5vbiBWTUEgdHJlZS4gKi9cbm1tL3ZtYS5jOjMyNDU6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG5tbS92bWEuYy0zMjQ2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIFNuaXBwZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nIHNlZW1zIHJlZHVuZGFudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpczoKCmBgYGMKc3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSBzcmMtJmd0O2Fub25fdm1hOwphbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpOwpgYGAKCkl0IGxvb2tzIGxpa2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMganVzdCBhIGNvcHkgb2YgYHNyYy0mZ3Q7YW5vbl92bWFgLCBhbmQgdGhlbiB0aGUgdmVyeSBzYW1lIHZhbHVlIGlzIHBhc3NlZCB0byBgYW5vbl92bWFfbG9ja193cml0ZWAuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzLCBhcmUgdGhlc2UgdHdvIGNhbGxzIGFjdHVhbGx5IHRoZSBzYW1lPyBJbiBvdGhlciB3b3JkcywgaXMgdGhlcmUgYW55IHNpdHVhdGlvbiB3aGVyZSBldmFsdWF0aW5nIGBzcmMtJmd0O2Fub25fdm1hYCBjb3VsZCByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgKmxhdGVyKj8KCkxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIGBzcmNgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IHZtX2FyZWFfc3RydWN0YC4gIGBzcmMtJmd0O2Fub25fdm1hYCBpcyBzaW1wbHkgYSBkaXJlY3QgZmllbGQgYWNjZXNzLiBUaGVyZSYjMzk7cyBubyBmYW5jeSBmdW5jdGlvbiBjYWxsIG9yIHNpZGUgZWZmZWN0IHRoYXQgY291bGQgYWx0ZXIgdGhlIHZhbHVlICpkdXJpbmcqIGV4ZWN1dGlvbi4gVGhlIG9ubHkgd2F5IHRoZSB2YWx1ZSBvZiBgc3JjLSZndDthbm9uX3ZtYWAgY291bGQgY2hhbmdlIGlzIGlmIGBzcmNgIGl0c2VsZiBnZXRzIG1vZGlmaWVkLgoKQWxyaWdodCwgc28gbGV0JiMzOTtzIGxvb2sgZm9yIHRoYXQsIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZToKCmBgYGMKCWxpc3RfZm9yX2VhY2hfZW50cnkocGF2YywgJmFtcDtzcmMtJmd0O2Fub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewoJCWF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpOwoJCWlmICghYXZjKQoJCQlnb3RvIGVub21lbV9mYWlsdXJlOwoKCQlhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtJmd0O2Fub25fdm1hKTsKCX0KYGBgCgpJIHNlZSBhIGxvb3AgaXRlcmF0aW5nIHRocm91Z2ggYHNyYy0mZ3Q7YW5vbl92bWFfY2hhaW5gLiBIb3dldmVyLCAqYHNyY2AgaXRzZWxmKiBpc24mIzM5O3QgbW9kaWZpZWQgaW5zaWRlIHRoaXMgbG9vcC4gU28sIHRoYXQmIzM5O3Mgbm90IHRoZSBpc3N1ZS4gVGhlIGNvZGUgbWFuaXB1bGF0ZXMgYGRzdGAgYW5kIGEgZmV3IG90aGVyIHBvaW50ZXJzLCBidXQgbm90IGBzcmNgLgoKT2theSwgc28gaXQgcmVhbGx5IGRvZXMgc2VlbSBsaWtlIHRoZSBmaXJzdCBsaW5lIGlzIHNpbXBseSByZWR1bmRhbnQuIFRoaXMgbG9va3MgbGlrZSBhIGNsZWFudXAgcGF0Y2guIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbG9vayBhdCB0aGUgY29tbWl0IG1lc3NhZ2UsIGlmIHBvc3NpYmxlLCBvciBzZWFyY2ggZm9yIGl0IHRvIGNvbmZpcm0gbXkgaHVuY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2xvY2tfd3JpdGVcXChhY3RpdmVfYW5vbl92bWFcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYy0zNTItXHQgKi9cbm1tL3JtYXAuYzozNTM6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMzU0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xuLS1cbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy00OTItXG5tbS9ybWFwLmM6NDkzOlx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xubW0vcm1hcC5jLTQ5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhbm9uX3ZtYWAgTG9jayBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGlzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCB2ZXJzdXMgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgc2l0dWF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlmIGBzcmMtJmd0O2Fub25fdm1hYCAqaXMqIHRoZSBzYW1lIGFzIGBhY3RpdmVfYW5vbl92bWFgLCB0aGVuIHRoaXMgaXMganVzdCBhIGNvc21ldGljIGNoYW5nZSDigJMgbm90IGltcGFjdGZ1bC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS4KClRoZSBjb21tZW50IGlzIGhlbHBmdWw6IGl0IHN0YXRlcyB0aGF0IHdlICpkb24mIzM5O3QqIG5lZWQgdGhlIGBhbm9uX3ZtYWAgbG9jayB3aGVuIGFsbG9jYXRpbmcgQVZDcyBiZWNhdXNlIHdlIGFyZW4mIzM5O3QgdG91Y2hpbmcgdGhlIHJidHJlZSBvciBjaGFuZ2luZyBzdGF0aXN0aWNzLiBJdCBnb2VzIG9uIHRvIHNheSB0aGF0IGVpdGhlciBgc3JjYCBhbmQgYGRzdGAgc2hhcmUgYW4gYG1tYCBhbmQgd2UgaGF2ZSBhbiBleGNsdXNpdmUgbW1hcCB3cml0ZSBsb2NrLCAqb3IqIHdlJiMzOTtyZSBmb3JraW5nIGFuZCB3ZSBob2xkIHRoZSB3cml0ZSBsb2NrIG9uIGBzcmMtJmd0O3ZtX21tYCBhbmQgYGRzdGAgaXNuJiMzOTt0IGFjY2Vzc2libGUgeWV0LiBUaGlzIG1lYW5zLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHdpdGggdGhlIGV4Y2x1c2l2ZSBtbWFwIHdyaXRlIGxvY2ssIGBzcmMtJmd0O2Fub25fdm1hYCBzaG91bGQgKm5vdCogYmUgY29uY3VycmVudGx5IG1vZGlmaWVkLgoKQnV0LCBoYW5nIG9uLi4uIHdoYXQgYWJvdXQgYGNoZWNrX2Fub25fdm1hX2Nsb25lYD8gQ291bGQgdGhhdCBiZSBtZXNzaW5nIHdpdGggYHNyYy0mZ3Q7YW5vbl92bWFgIGluIGEgd2F5IEkmIzM5O20gbm90IHNlZWluZz8gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2Fub25fdm1hX2Nsb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtMjM0LVxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbm1tL3JtYXAuYy0yMzYtXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYy0zMjUtXG5tbS9ybWFwLmM6MzI2Olx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XG5tbS9ybWFwLmMtMzI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzLCBzcGVjaWZpY2FsbHkgdGhlIGNsb25pbmcgcHJvY2Vzcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGNydWNpYWwgZm9yIHRoaW5ncyBsaWtlIGBmb3JrKClgIG9yIG90aGVyIGNvcHktb24td3JpdGUgbWVjaGFuaXNtcy4gVGhlIGZvY3VzIG9uICYjMzQ7YW5vbnltb3VzJiMzNDsgYXJlYXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbm90IGJhY2tlZCBieSBhIGZpbGUgb24gZGlzaywgbGlrZSB0aGUgcHJvZ3JhbSYjMzk7cyBoZWFwLCBzdGFjaywgb3IgcGVyaGFwcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4KClNvLCBJIHN1c3BlY3QgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IGFuZCBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gdGhlc2UgYW5vbnltb3VzIFZNQXMgYXJlIGR1cGxpY2F0ZWQuIFdlIG5lZWQgdG8gYXZvaWQgY29uZmxpY3RzLCBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSAoZXNwZWNpYWxseSB3aXRoIGNvcHktb24td3JpdGUpLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB0b3VjaGluZyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9ucy4gSXQgaGFzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBuZXcgcHJvY2VzcyBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGNvcnJ1cHQgdGhlIGRhdGEgb2YgdGhlIG9yaWdpbmFsIHByb2Nlc3MuIEl0IHdvdWxkIG5lZWQgdG8gY29uc2lkZXIgdGhpbmdzIGxpa2UgdGhlIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykgdGhhdCBwb2ludCB0byB0aGVzZSBtZW1vcnkgcmVnaW9ucywgZW5zdXJpbmcgdGhleSYjMzk7cmUgcHJvcGVybHkgZHVwbGljYXRlZCBvciwgbW9yZSBsaWtlbHksIG1hcmtlZCBhcyBjb3B5LW9uLXdyaXRlLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucy4gQW5kIGl0IHdvdWxkIG5lZWQgdG8gY29vcmRpbmF0ZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHJvdXRpbmVzLiBBbnkgb3RoZXIgZGV0YWlscyBhcmUgbGlrZWx5IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvciBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gZGlnIGluIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMwOlx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gMjMxOlx0IG91dF9lbm9tZW06XG4gMjMyOlx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMzM6XHR9XG4gMjM0Olx0XG4gMjM1Olx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjM2Olx0XHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMjM3Olx0XHRcdFx0XHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAyMzg6XHR7XG4gMjM5Olx0XHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXG4gMjQwOlx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKTtcbiAyNDE6XHRcdC8qIElmIG5vdCBhIGZvcmsgdGhlbiBtdXN0IGJlIG9uIHNhbWUgbW0uICovXG4gMjQyOlx0XHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNldm1fbW0gIT0gc3JjLVx1MDAzZXZtX21tKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdC8qIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gZG8gc3JjLVx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXG4gMjQ1Olx0XHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2c3JjLVx1MDAzZWFub25fdm1hX2NoYWluKSk7XG4gMjQ2Olx0XHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgZHN0LVx1MDAzZWFub25fdm1hKTtcbiAyNDc6XHRcdC8qIFdlIGFyZSBlc3RhYmxpc2hpbmcgYSBuZXcgYW5vbl92bWFfY2hhaW4uICovXG4gMjQ4Olx0XHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluKSk7XG4gMjQ5Olx0XHQvKlxuIDI1MDpcdFx0ICogT24gZm9yaywgZHN0LVx1MDAzZWFub25fdm1hIGlzIHNldCBOVUxMICh0ZW1wb3JhcmlseSkuIE90aGVyd2lzZSwgYW5vbl92bWFcbiAyNTE6XHRcdCAqIG11c3QgYmUgdGhlIHNhbWUgYWNyb3NzIGRzdCBhbmQgc3JjLlxuIDI1MjpcdFx0ICovXG4gMjUzOlx0XHRWTV9XQVJOX09OX09OQ0UoZHN0LVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNlYW5vbl92bWEgIT0gc3JjLVx1MDAzZWFub25fdm1hKTtcbiAyNTQ6XHRcdC8qXG4gMjU1Olx0XHQgKiBFc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIGFib3ZlIC0gaWYgbm90IGEgbm8tb3AsIHdlIHNob3VsZCBleHBlY3RcbiAyNTY6XHRcdCAqIGRzdC1cdTAwM2Vhbm9uX3ZtYSB0byBiZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGEgZm9yay5cbiAyNTc6XHRcdCAqL1xuIDI1ODpcdFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSyBcdTAwMjZcdTAwMjYgc3JjLVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNlxuIDI1OTpcdFx0XHRcdCFkc3QtXHUwMDNlYW5vbl92bWEpO1xuIDI2MDpcdFx0LyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi9cbiAyNjE6XHRcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gPT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiAyNjI6XHRcdFx0XHQhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcbiAyNjM6XHQjaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIDI2NDpcdFx0LyogT25seSBtZXJnaW5nIGFuIHVuZmF1bHRlZCBWTUEgbGVhdmVzIHRoZSBkZXN0aW5hdGlvbiBhdHRhY2hlZC4gKi9cbiAyNjU6XHRcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiAyNjY6XHRcdFx0XHR2bWFfaXNfYXR0YWNoZWQoZHN0KSk7XG4gMjY3Olx0I2VuZGlmXG4gMjY4Olx0fVxuIDI2OTpcdFxuIDI3MDpcdHN0YXRpYyB2b2lkIG1heWJlX3JldXNlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxuIDI3MTpcdFx0XHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxuIDI3MjpcdHtcbiAyNzM6XHRcdC8qIElmIGFscmVhZHkgcG9wdWxhdGVkLCBub3RoaW5nIHRvIGRvLiovXG4gMjc0Olx0XHRpZiAoZHN0LVx1MDAzZWFub25fdm1hKVxuIDI3NTpcdFx0XHRyZXR1cm47XG4gMjc2Olx0XG4gMjc3Olx0XHQvKlxuIDI3ODpcdFx0ICogV2UgcmV1c2UgYW4gYW5vbl92bWEgaWYgYW55IGxpbmtpbmcgVk1BcyB3ZXJlIHVubWFwcGVkIGFuZCBpdCBoYXNcbiAyNzk6XHRcdCAqIG9ubHkgYSBzaW5nbGUgY2hpbGQgYXQgbW9zdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjYKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogNjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFub25fdm1hX2Nsb25lYCBQYXRjaDogQSBDb3NtZXRpYyBVbmRlcnRha2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGVuc3VyZSBgc3JjLSZndDthbm9uX3ZtYWAgaXNuJiMzOTt0IGFsdGVyZWQgZHVyaW5nIHRoZSBgYW5vbl92bWFfY2xvbmVgIHByb2Nlc3MsIG91dHNpZGUgb2YgdGhlIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgY2FsbC4gVGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLSZndDt2bV9tbWAgZG9lcyBwcmV2ZW50IGV4dGVybmFsIG1vZGlmaWNhdGlvbnMsIHdoaWNoIG1ha2VzIGBzcmMtJmd0O2Fub25fdm1hYCBlZmZlY3RpdmVseSBjb25zdGFudCB0aHJvdWdob3V0LiBUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlIGZyb20gYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSlgIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIHNlZW1lZCBwdXJlbHkgY29zbWV0aWMsIGdpdmVuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtJmd0O2Fub25fdm1hYCBhbmQgbmVpdGhlciBhcHBlYXIgdG8gYmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LgoKSSB0aGVuIHBlcmZvcm1lZCBhIGRlZXBlciBjaGVjaywgZm9jdXNpbmcgb24gdGhlIGNvcmUgbG9naWMgd2l0aGluIGBhbm9uX3ZtYV9jbG9uZWAuIFRoZSBhbGxvY2F0aW9uIG9mIGBhbm9uX3ZtYV9jaGFpbmAgc3RydWN0dXJlcyBhbmQgdGhlaXIgYXNzaWdubWVudCwgd2l0aGluIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgbG9vcCwgZG9lc24mIzM5O3QgdG91Y2ggb3IgbW9kaWZ5IGBhY3RpdmVfYW5vbl92bWFgLiBUaGVyZWZvcmUsIHRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiBgYWN0aXZlX2Fub25fdm1hYCByZW1haW5zIHVuY2hhbmdlZCB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24uCgpUaGlzIG1lYW5zIGl0ICppcyogYSBwdXJlbHkgY29zbWV0aWMgY2xlYW51cC4gVGhlIHJlYXNvbiBpcyBsaWtlbHkgZm9yIGNvbnNpc3RlbmN5LCB0byBoYXZlIGEgbmFtZWQgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgdXNlZCBjb25zaXN0ZW50bHkgd2l0aCB0aGUgcGFpcmVkIHVubG9jayBgYW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgoKR2l2ZW4gdGhhdCB0aGlzIGNoYW5nZSBoYXMgbm8gaW1wYWN0IG9uIGV4ZWN1dGlvbiBmbG93LCBhbmQgaXMgb25seSBhIHN0eWxpc3RpYyBpbXByb3ZlbWVudCwgaXQmIzM5O3Mgc2FmZSB0byBzYXkgdGhhdCB0aGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsbHkgaW5lcnQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBzcGVuZCB0aW1lIGZ1enppbmcgdGhpcyBzcGVjaWZpYyBwYXRjaC4KV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBzcmMtXHUwMDNlYW5vbl92bWFgIHdpdGggYGFjdGl2ZV9hbm9uX3ZtYWAgaW4gYSBjYWxsIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKClgLiBTaW5jZSBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBhbmQgbmVpdGhlciB2YXJpYWJsZSBpcyBtb2RpZmllZCBiZWZvcmUgdGhlIGxvY2sgaXMgYWNxdWlyZWQsIHRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2xlYW51cCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgc3Vic2VxdWVudCBgYW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGNhbGwuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgc3JjLVx1MDAzZWFub25fdm1hYCB3aXRoIGBhY3RpdmVfYW5vbl92bWFgIGluIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZSgpYC4gU2luY2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgdG8gYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24gYW5kIG5laXRoZXIgdmFyaWFibGUgaXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLCB0aGlzIGlzIGEgcHVyZWx5IGNvc21ldGljIGNsZWFudXAgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIHN1YnNlcXVlbnQgYGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCBjYWxsLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE4OjM5LjI3NjE4NzAzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjUwNTA1MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHNyYy1cXHUwMDNlYW5vbl92bWFgIHdpdGggYGFjdGl2ZV9hbm9uX3ZtYWAgaW4gYSBjYWxsIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKClgLiBTaW5jZSBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24gYW5kIG5laXRoZXIgdmFyaWFibGUgaXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLCB0aGlzIGlzIGEgcHVyZWx5IGNvc21ldGljIGNsZWFudXAgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIHN1YnNlcXVlbnQgYGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCBjYWxsLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6MzkuMjc2MjA5Njc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1MDQ3MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTc1NTdhNjlmMGRiZmRmMmE0ZDYwN2E4NjY3YWYzODJkMzVjNTVjNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNjoxODozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCAxYzc3ZDVkYzA2ZTlmLi5mM2ZhZGZiNjljN2YyIDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC0zNTAsNyArMzUwLDcgQEAgaW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gXFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cXG4gXFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSdzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXFxuIFxcdCAqL1xcbi1cXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cXHUwMDNlYW5vbl92bWEpO1xcbitcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiBcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLVxcdTAwM2Vhbm9uX3ZtYTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE4OjQwLjcwMjIwMDk4MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ1ODI0NDcyMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgd2l0aCBgYWN0aXZlX2Fub25fdm1hYCBpbiBhIGNhbGwgdG8gYGFub25fdm1hX2xvY2tfd3JpdGUoKWAuIFNpbmNlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXFx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBhbmQgbmVpdGhlciB2YXJpYWJsZSBpcyBtb2RpZmllZCBiZWZvcmUgdGhlIGxvY2sgaXMgYWNxdWlyZWQsIHRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2xlYW51cCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgc3Vic2VxdWVudCBgYW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGNhbGwuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzU1N2E2OWYwZGJmZGYyYTRkNjA3YTg2NjdhZjM4MmQzNWM1NWM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDY6MTg6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFjNzdkNWRjMDZlOWYuLmYzZmFkZmI2OWM3ZjIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTM1MCw3ICszNTAsNyBAQCBpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuIFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cbiBcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEncyBzaGFyZSB0aGUgc2FtZSByb290LlxuIFx0ICovXG4tXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSk7XG4rXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXHUwMDNlYW5vbl92bWE7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNjoxODo0MC43MDIyMDMxMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc4OTkwOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9ybWFwLmNgLiBJdCdzIGEgcHJldHR5IGZvY3VzZWQgbW9kaWZpY2F0aW9uLCByaWdodCBpbiB0aGUgYGFub25fdm1hX2Nsb25lYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhpczogdGhleSd2ZSBzd2FwcGVkIHRoZSBgYW5vbl92bWFgIGJlaW5nIGxvY2tlZC4gUHJldmlvdXNseSwgaXQgd2FzIGBzcmMtXHUwMDNlYW5vbl92bWFgLCBhbmQgbm93IGl0J3MgYGFjdGl2ZV9hbm9uX3ZtYWAuIFRoaXMgaXMgYSBjb3JlIGNoYW5nZSDigJMgaXQncyBkZWZpbml0ZWx5IHRvdWNoaW5nIHRoZSBoZWFydCBvZiBob3cgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzIGFyZSBoYW5kbGVkLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBgcm1hcGAgc3Vic3lzdGVtLCBzbyBpdCdzIGNyaXRpY2FsIHdlIHVuZGVyc3RhbmQgdGhpcy4gSXQncyBzdWJ0bGUsIGJ1dCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzIGNhbiBoYXZlIGZhci1yZWFjaGluZyBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBkaXZlIGludG8gYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCBpdHNlbGYuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIHdoYXQgdGhlIG9yaWdpbmFsIGludGVudCB3YXMsIGFuZCBob3cgdGhpcyBuZXcgbG9jayBhZmZlY3RzIGNvbmN1cnJlbmN5IGFuZCBkYXRhIGludGVncml0eSBpbiB0aGlzIHBhcnRpY3VsYXIgYXJlYS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE4OjQ1LjA4MTE5ODQwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDIxODQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ybWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTIzNC1cXG5tbS9ybWFwLmM6MjM1OnN0YXRpYyB2b2lkIGNoZWNrX2Fub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxcbm1tL3JtYXAuYy0yMzYtXFx0XFx0XFx0XFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jPTI5MD1zdGF0aWMgdm9pZCBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4tLVxcbm1tL3JtYXAuYy0yOTItLyoqXFxubW0vcm1hcC5jOjI5MzogKiBhbm9uX3ZtYV9jbG9uZSAtIEVzdGFibGlzaGVzIG5ldyBhbm9uX3ZtYV9jaGFpbiBvYmplY3RzIGluIEBkc3QgbGlua2luZyB0b1xcbm1tL3JtYXAuYy0yOTQtICogYWxsIG9mIHRoZSBhbm9uX3ZtYSBvYmplY3RzIGNvbnRhaW5lZCB3aXRoaW4gQHNyYyBhbm9uX3ZtYV9jaGFpbidzLlxcbi0tXFxubW0vcm1hcC5jLTMxOS0gKi9cXG5tbS9ybWFwLmM6MzIwOmludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxubW0vcm1hcC5jLTMyMS1cXHRcXHQgICBlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKVxcbi0tXFxubW0vcm1hcC5jLTMyNS1cXG5tbS9ybWFwLmM6MzI2OlxcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xcbm1tL3JtYXAuYy0zMjctXFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtNDAzLVxcdCAqL1xcbm1tL3JtYXAuYzo0MDQ6XFx0cmMgPSBhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEsIFZNQV9PUF9GT1JLKTtcXG5tbS9ybWFwLmMtNDA1LVxcdC8qIEFuIGVycm9yIGFyb3NlIG9yIGFuIGV4aXN0aW5nIGFub25fdm1hIHdhcyByZXVzZWQsIGFsbCBkb25lIHRoZW4uICovXFxuLS1cXG5tbS9ybWFwLmMtNDQ0LS8qXFxubW0vcm1hcC5jOjQ0NTogKiBJbiB0aGUgdW5mb3J0dW5hdGUgY2FzZSBvZiBhbm9uX3ZtYV9jbG9uZSgpIGZhaWxpbmcgdG8gYWxsb2NhdGUgbWVtb3J5IHdlXFxubW0vcm1hcC5jLTQ0Ni0gKiBoYXZlIHRvIGNsZWFuIHRoaW5ncyB1cC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6NDUuMTYxNDIzMzcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMjkyOTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBhbm9uX3ZtYV9jbG9uZWAgLSBBIERlZXAgRGl2ZSoqXG5cblJpZ2h0LCBgYW5vbl92bWFfY2xvbmVgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBpc24ndCBpdD8gSSBrbm93IEkndmUgc2VlbiBpdCBjYWxsZWQgZnJvbSBgYW5vbl92bWFfZm9ya2AsIGJ1dCBJIHN1c3BlY3QgaXQgcG9wcyB1cCBpbiBvdGhlciBjcnVjaWFsIGFyZWFzIHRvby4gR2l2ZW4gaXRzIGNlbnRyYWwgcm9sZSwgSSBuZWVkIHRvIGdldCBhIGZ1bGwgaGFuZGxlIG9uIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoaXMgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQncyBjYWxsZWQgYW5kIHRoZSBvcGVyYXRpb25zIHRoYXQgdHJpZ2dlciBpdCB3aWxsIHJlYWxseSB1bmxvY2sgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhIGNsb25pbmcgcHJvY2VzcyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6NDguNjk0MzU1MDQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzEwOlxcdCAqIEluIGFsbCBjYXNlcyBvdGhlciB0aGFuIGZvcmsgdGhpcyBpcyBzaW1wbHkgYSBkdXBsaWNhdGlvbi4gRm9yayBhZGRpdGlvbmFsbHlcXG4gMzExOlxcdCAqIGFkZHMgYSBuZXcgYWN0aXZlIGFub25fdm1hLlxcbiAzMTI6XFx0ICpcXG4gMzEzOlxcdCAqIE9OTFkgaW4gdGhlIGNhc2Ugb2YgZm9yayBkbyB3ZSB0cnkgdG8gJ3JldXNlJyBleGlzdGluZyBhbm9uX3ZtYSdzIGluIGFuXFxuIDMxNDpcXHQgKiBhbm9uX3ZtYSBoaWVyYXJjaHksIHJldXNpbmcgYW5vbl92bWEncyB3aGljaCBoYXZlIG5vIFZNQSBhc3NvY2lhdGVkIHdpdGggdGhlbVxcbiAzMTU6XFx0ICogYnV0IGRvIGhhdmUgYSBzaW5nbGUgY2hpbGQuIFRoaXMgaXMgdG8gYXZvaWQgd2FzdGUgb2YgbWVtb3J5IHdoZW4gcmVwZWF0ZWRseVxcbiAzMTY6XFx0ICogZm9ya2luZy5cXG4gMzE3OlxcdCAqXFxuIDMxODpcXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cXG4gMzE5OlxcdCAqL1xcbiAzMjA6XFx0aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gMzIxOlxcdFxcdFxcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuIDMyMjpcXHR7XFxuIDMyMzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywgKnBhdmM7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cXHUwMDNlYW5vbl92bWE7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRpZiAoIWFjdGl2ZV9hbm9uX3ZtYSlcXG4gMzI5OlxcdFxcdFxcdHJldHVybiAwO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHQvKlxcbiAzMzI6XFx0XFx0ICogQWxsb2NhdGUgQVZDcy4gV2UgZG9uJ3QgbmVlZCBhbiBhbm9uX3ZtYSBsb2NrIGZvciB0aGlzIGFzIHdlXFxuIDMzMzpcXHRcXHQgKiBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZ1xcbiAzMzQ6XFx0XFx0ICogYW5vbl92bWEgc3RhdGlzdGljcy5cXG4gMzM1OlxcdFxcdCAqXFxuIDMzNjpcXHRcXHQgKiBFaXRoZXIgc3JjLCBkc3QgaGF2ZSB0aGUgc2FtZSBtbSBmb3Igd2hpY2ggd2UgaG9sZCBhbiBleGNsdXNpdmUgbW1hcFxcbiAzMzc6XFx0XFx0ICogd3JpdGUgbG9jaywgb3Igd2UgYXJlIGZvcmtpbmcgYW5kIHdlIGhvbGQgaXQgb24gc3JjLVxcdTAwM2V2bV9tbSBhbmQgZHN0IGlzXFxuIDMzODpcXHRcXHQgKiBub3QgeWV0IGFjY2Vzc2libGUgdG8gb3RoZXIgdGhyZWFkcyBzbyB0aGVyZSdzIG5vIHBvc3NpYmxpaXR5IG9mIHRoZVxcbiAzMzk6XFx0XFx0ICogdW5saW5rZWQgQVZDJ3MgYmVpbmcgb2JzZXJ2ZWQgeWV0LlxcbiAzNDA6XFx0XFx0ICovXFxuIDM0MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFxcdTAwMjZzcmMtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiAzNDI6XFx0XFx0XFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XFxuIDM0MzpcXHRcXHRcXHRpZiAoIWF2YylcXG4gMzQ0OlxcdFxcdFxcdFxcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbihkc3QsIGF2YywgcGF2Yy1cXHUwMDNlYW5vbl92bWEpO1xcbiAzNDc6XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHQvKlxcbiAzNTA6XFx0XFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cXG4gMzUxOlxcdFxcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEncyBzaGFyZSB0aGUgc2FtZSByb290LlxcbiAzNTI6XFx0XFx0ICovXFxuIDM1MzpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIDM1NDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcXHUwMDI2ZHN0LVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcXG4gMzU1OlxcdFxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXFx1MDAzZWFub25fdm1hO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRcXHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcmJfcm9vdCk7XFxuIDM1ODpcXHRcXHRcXHRpZiAob3BlcmF0aW9uID09IFZNQV9PUF9GT1JLKVxcbiAzNTk6XFx0XFx0XFx0XFx0bWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7XFxuIDM2MDpcXHRcXHR9XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdGlmIChvcGVyYXRpb24gIT0gVk1BX09QX0ZPUkspXFxuIDM2MzpcXHRcXHRcXHRkc3QtXFx1MDAzZWFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcXG4gMzY0OlxcdFxcbiAzNjU6XFx0XFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIDM2NjpcXHRcXHRyZXR1cm4gMDtcXG4gMzY3OlxcdFxcbiAzNjg6XFx0IGVub21lbV9mYWlsdXJlOlxcbiAzNjk6XFx0XFx0Y2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhkc3QpO1xcbiAzNzA6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM3MTpcXHR9XFxuIDM3MjpcXHRcXG4gMzczOlxcdC8qXFxuIDM3NDpcXHQgKiBBdHRhY2ggdm1hIHRvIGl0cyBvd24gYW5vbl92bWEsIGFzIHdlbGwgYXMgdG8gdGhlIGFub25fdm1hcyB0aGF0XFxuIDM3NTpcXHQgKiB0aGUgY29ycmVzcG9uZGluZyBWTUEgaW4gdGhlIHBhcmVudCBwcm9jZXNzIGlzIGF0dGFjaGVkIHRvLlxcbiAzNzY6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuXFxuIDM3NzpcXHQgKi9cXG4gMzc4OlxcdGludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuIDM3OTpcXHR7XFxuIDM4MDpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcXG4gMzgxOlxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7XFxuIDM4MjpcXHRcXHRpbnQgcmM7XFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdC8qIERvbid0IGJvdGhlciBpZiB0aGUgcGFyZW50IHByb2Nlc3MgaGFzIG5vIGFub25fdm1hIGhlcmUuICovXFxuIDM4NTpcXHRcXHRpZiAoIXB2bWEtXFx1MDAzZWFub25fdm1hKVxcbiAzODY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXFxuIDM4OTpcXHRcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0YW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpO1xcbiAzOTI6XFx0XFx0aWYgKCFhbm9uX3ZtYSlcXG4gMzkzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzOTQ6XFx0XFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XFxuIDM5NTpcXHRcXHRpZiAoIWF2Yykge1xcbiAzOTY6XFx0XFx0XFx0cHV0X2Fub25fdm1hKGFub25fdm1hKTtcXG4gMzk3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzOTg6XFx0XFx0fVxcbiAzOTk6XFx0XFxuIDQwMDpcXHRcXHQvKlxcbiA0MDE6XFx0XFx0ICogRmlyc3QsIGF0dGFjaCB0aGUgbmV3IFZNQSB0byB0aGUgcGFyZW50IFZNQSdzIGFub25fdm1hcyxcXG4gNDAyOlxcdFxcdCAqIHNvIHJtYXAgY2FuIGZpbmQgbm9uLUNPV2VkIHBhZ2VzIGluIGNoaWxkIHByb2Nlc3Nlcy5cXG4gNDAzOlxcdFxcdCAqL1xcbiA0MDQ6XFx0XFx0cmMgPSBhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEsIFZNQV9PUF9GT1JLKTtcXG4gNDA1OlxcdFxcdC8qIEFuIGVycm9yIGFyb3NlIG9yIGFuIGV4aXN0aW5nIGFub25fdm1hIHdhcyByZXVzZWQsIGFsbCBkb25lIHRoZW4uICovXFxuIDQwNjpcXHRcXHRpZiAocmMgfHwgdm1hLVxcdTAwM2Vhbm9uX3ZtYSkge1xcbiA0MDc6XFx0XFx0XFx0cHV0X2Fub25fdm1hKGFub25fdm1hKTtcXG4gNDA4OlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTtcXG4gNDA5OlxcdFxcdFxcdHJldHVybiByYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6NDguNjk0NTk0MzExWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcwMzY1NjkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgQW5vbl9WTUEgTG9jayBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhIGNoYW5nZSBmcm9tIGxvY2tpbmcgYW5kIHVubG9ja2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCB0byB1c2luZyBgYWN0aXZlX2Fub25fdm1hYDpcblxuYGBgY1xuLVx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuK1x0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuYGBgXG5cbmFuZCBsYXRlcjpcblxuYGBgY1xuLVx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSk7XG4rXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbmBgYFxuXG5Jbml0aWFsbHksIGBhY3RpdmVfYW5vbl92bWFgIGlzIHNldCB0byBgc3JjLVx1MDAzZWFub25fdm1hYDpcblxuYGBgY1xuXHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbmBgYFxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQ/IElmIGBzcmMtXHUwMDNlYW5vbl92bWFgICpkb2Vzbid0KiBjaGFuZ2UgYmV0d2VlbiB0aGUgbG9jayBhbmQgdW5sb2NrIGNhbGxzLCB0aGlzIGlzIGp1c3QgYSBjbGVhbnVwLiBJdCBtaWdodCBiZSBnb29kIHByYWN0aWNlIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUsIGJ1dCBpdCdzIG5vdCBhIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZS5cblxuSG93ZXZlciwgdGhlIHF1ZXN0aW9uIGlzLCAqY2FuKiBgc3JjLVx1MDAzZWFub25fdm1hYCBjaGFuZ2U/IFRoZSBjb2RlIGNvbW1lbnRzIHN1Z2dlc3QgdGhhdCB0aGUgZnVuY3Rpb24gaG9sZHMgYW4gZXhjbHVzaXZlIG1tYXAgd3JpdGUgbG9jayBpbiBtYW55IGNhc2VzLiBJZiB3ZSBoYXZlIHRoYXQgZXhjbHVzaXZlIGxvY2ssIGBzcmMtXHUwMDNlYW5vbl92bWFgICpzaG91bGRuJ3QqIGJlIG1vZGlmaWVkIGJ5IGFub3RoZXIgdGhyZWFkLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gZWl0aGVyIGBzcmNgLCBgZHN0YCBvciB0aGUgZm9yayBjYXNlLlxuXG5CdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gV2hhdCBpZiBgc3JjYCBpdHNlbGYgaXMgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCBjaGFuZ2VzIGBzcmMtXHUwMDNlYW5vbl92bWFgPyBUaGUgbGF0ZXIgdXNlIG9mIGBhY3RpdmVfYW5vbl92bWFgIGluIHRoZSBgdW5sb2NrYCBjYWxsLCB3aGlsZSBgc3JjLVx1MDAzZWFub25fdm1hYCBpbiBgbG9ja2Agd291bGQgYmUgYSByZWFsIHByb2JsZW0uIFNvIHRoaXMgaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC5cblxuSSdtIHNlZWluZyB0aGF0IGBhbm9uX3ZtYV9jbG9uZWAgaXMgY2FsbGVkIHdpdGggYGRzdGAgYW5kIGBzcmNgLiBJbiB0aGUgZm9yayBjYXNlLCBJIGJlbGlldmUgYHNyY2AgaXMgYHB2bWFgIGFuZCBgZHN0YCBpcyBgdm1hYC4gSXQncyBwb3NzaWJsZSB0aGF0IGBwdm1hLVx1MDAzZWFub25fdm1hYCBjb3VsZCBiZSBtb2RpZmllZCBoZXJlLCBidXQgYmVjYXVzZSB3ZSBob2xkIHRoZSBtbWFwIGxvY2ssIHRoYXQgZG9lc24ndCBzZWVtIHBvc3NpYmxlLiBBbHNvLCBJIGRvbid0IHNlZSBhbnkgbW9kaWZpY2F0aW9uIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgIGl0c2VsZiB3aXRoaW4gdGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24uXG5cblNvLCBpdCAqbG9va3MqIGxpa2UgdGhpcyBpcyBwcm9iYWJseSBhIGNsZWFudXAuIEJ1dCBJIHNob3VsZCBjb25maXJtIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBmb3Igc2FmZXR5IGFuZCB0aGF0IGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBpcyB1c2luZyBwb2ludGVycywgYmVjYXVzZSB0aGF0IHdvdWxkIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGEgc2FmZSBjbGVhbnVwIGFuZCB0aGUgYWRkcmVzcyBjYW5ub3QgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6NTguMzk4MjU0NDU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTMzNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFub25fdm1hX2xvY2tfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9NDAyMz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3MS1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo0MDcyOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3My1cXHRcXHRtYXBwaW5nID0gTlVMTDtcXG4tLVxcbm1tL2ludGVybmFsLmg9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcXG4tLVxcbm1tL2ludGVybmFsLmgtMjE3LVxcbm1tL2ludGVybmFsLmg6MjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxubW0vaW50ZXJuYWwuaC0yMTkte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTg5NT1zdGF0aWMgdm9pZCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9jb3B5X2ZhaWxlZChwdGVfdCAqcHRlLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTkwNS1cXHQgKiBwYWdlcy4gU2luY2UgcGFnZXMgYXJlIHN0aWxsIGlzb2xhdGVkIGFuZCBsb2NrZWQgaGVyZSxcXG5tbS9raHVnZXBhZ2VkLmM6OTA2OlxcdCAqIGFjcXVpcmluZyBhbm9uX3ZtYV9sb2NrX3dyaXRlIGlzIHVubmVjZXNzYXJ5Llxcbm1tL2todWdlcGFnZWQuYy05MDctXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTI3OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzQ5LVxcbm1tL2todWdlcGFnZWQuYzoxMzUwOlxcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0va2h1Z2VwYWdlZC5jLTEzNTEtXFx0YW5vbl92bWFfbG9ja2VkID0gdHJ1ZTtcXG4tLVxcbm1tL21yZW1hcC5jPTE0Mz1zdGF0aWMgdm9pZCB0YWtlX3JtYXBfbG9ja3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tcmVtYXAuYy0xNDctXFx0aWYgKHZtYS1cXHUwMDNlYW5vbl92bWEpXFxubW0vbXJlbWFwLmM6MTQ4OlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0vbXJlbWFwLmMtMTQ5LX1cXG4tLVxcbm1tL3JtYXAuYz0xMTA9c3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2ZyZWUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcXG4tLVxcbm1tL3JtYXAuYy0xMzItXFx0aWYgKHJ3c2VtX2lzX2xvY2tlZChcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJvb3QtXFx1MDAzZXJ3c2VtKSkge1xcbm1tL3JtYXAuYzoxMzM6XFx0XFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XFxubW0vcm1hcC5jLTEzNC1cXHRcXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYW5vbl92bWEpO1xcbi0tXFxubW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTIwNy1cXG5tbS9ybWFwLmM6MjA4OlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0yMDktXFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXFxuLS1cXG5tbS9ybWFwLmM9MzIwPWludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9ybWFwLmMtMzUyLVxcdCAqL1xcbm1tL3JtYXAuYzozNTM6XFx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0zNTQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXFx1MDAyNmRzdC1cXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtNDM1LVxcdC8qIE5vdyBsZXQgcm1hcCBzZWUgaXQuICovXFxubW0vcm1hcC5jOjQzNjpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcXG5tbS9ybWFwLmMtNDM3LVxcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXFx1MDAyNmFub25fdm1hLVxcdTAwM2VyYl9yb290KTtcXG4tLVxcbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTQ5Mi1cXG5tbS9ybWFwLmM6NDkzOlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG5tbS9ybWFwLmMtNDk0LVxcbi0tXFxubW0vcm1hcC5jPTYzMz1zdHJ1Y3QgYW5vbl92bWEgKmZvbGlvX2xvY2tfYW5vbl92bWFfcmVhZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTY4OS1cXHRcXHQgKiBhbmQgYmFpbCAtLSBjYW4ndCBzaW1wbHkgdXNlIHB1dF9hbm9uX3ZtYSgpIGJlY2F1c2VcXG5tbS9ybWFwLmM6NjkwOlxcdFxcdCAqIHdlJ2xsIGRlYWRsb2NrIG9uIHRoZSBhbm9uX3ZtYV9sb2NrX3dyaXRlKCkgcmVjdXJzaW9uLlxcbm1tL3JtYXAuYy02OTEtXFx0XFx0ICovXFxuLS1cXG5tbS92bWEuYz0yOTE9c3RhdGljIHZvaWQgdm1hX3ByZXBhcmUoc3RydWN0IHZtYV9wcmVwYXJlICp2cClcXG4tLVxcbm1tL3ZtYS5jLTMxMy1cXHRpZiAodnAtXFx1MDAzZWFub25fdm1hKSB7XFxubW0vdm1hLmM6MzE0OlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUodnAtXFx1MDAzZWFub25fdm1hKTtcXG5tbS92bWEuYy0zMTUtXFx0XFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9wcmVfdXBkYXRlX3ZtYSh2cC1cXHUwMDNldm1hKTtcXG4tLVxcbm1tL3ZtYS5jPTMxMTc9aW50IGV4cGFuZF91cHdhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5tbS92bWEuYy0zMTY1LVxcdC8qIFdlIHVwZGF0ZSB0aGUgYW5vbiBWTUEgdHJlZS4gKi9cXG5tbS92bWEuYzozMTY2OlxcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0vdm1hLmMtMzE2Ny1cXG4tLVxcbm1tL3ZtYS5jPTMyMDM9aW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL3ZtYS5jLTMyNDQtXFx0LyogV2UgdXBkYXRlIHRoZSBhbm9uIFZNQSB0cmVlLiAqL1xcbm1tL3ZtYS5jOjMyNDU6XFx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG5tbS92bWEuYy0zMjQ2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNjoxODo1OC40Njc3OTIwNzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc1ODcyMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBTbmlwcGV0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgc2VlbXMgcmVkdW5kYW50LiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoaXM6XG5cbmBgYGNcbnN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gc3JjLVx1MDAzZWFub25fdm1hO1xuYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuYGBgXG5cbkl0IGxvb2tzIGxpa2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMganVzdCBhIGNvcHkgb2YgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAsIGFuZCB0aGVuIHRoZSB2ZXJ5IHNhbWUgdmFsdWUgaXMgcGFzc2VkIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYC4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGFyZSB0aGVzZSB0d28gY2FsbHMgYWN0dWFsbHkgdGhlIHNhbWU/IEluIG90aGVyIHdvcmRzLCBpcyB0aGVyZSBhbnkgc2l0dWF0aW9uIHdoZXJlIGV2YWx1YXRpbmcgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgY291bGQgcmV0dXJuIGEgZGlmZmVyZW50IHZhbHVlICpsYXRlcio/XG5cbkxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHNyY2AgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgLiAgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgc2ltcGx5IGEgZGlyZWN0IGZpZWxkIGFjY2Vzcy4gVGhlcmUncyBubyBmYW5jeSBmdW5jdGlvbiBjYWxsIG9yIHNpZGUgZWZmZWN0IHRoYXQgY291bGQgYWx0ZXIgdGhlIHZhbHVlICpkdXJpbmcqIGV4ZWN1dGlvbi4gVGhlIG9ubHkgd2F5IHRoZSB2YWx1ZSBvZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjb3VsZCBjaGFuZ2UgaXMgaWYgYHNyY2AgaXRzZWxmIGdldHMgbW9kaWZpZWQuXG5cbkFscmlnaHQsIHNvIGxldCdzIGxvb2sgZm9yIHRoYXQsIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZTpcblxuYGBgY1xuXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFx1MDAyNnNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcblx0XHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcblx0XHRpZiAoIWF2Yylcblx0XHRcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XG5cblx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtXHUwMDNlYW5vbl92bWEpO1xuXHR9XG5gYGBcblxuSSBzZWUgYSBsb29wIGl0ZXJhdGluZyB0aHJvdWdoIGBzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW5gLiBIb3dldmVyLCAqYHNyY2AgaXRzZWxmKiBpc24ndCBtb2RpZmllZCBpbnNpZGUgdGhpcyBsb29wLiBTbywgdGhhdCdzIG5vdCB0aGUgaXNzdWUuIFRoZSBjb2RlIG1hbmlwdWxhdGVzIGBkc3RgIGFuZCBhIGZldyBvdGhlciBwb2ludGVycywgYnV0IG5vdCBgc3JjYC5cblxuT2theSwgc28gaXQgcmVhbGx5IGRvZXMgc2VlbSBsaWtlIHRoZSBmaXJzdCBsaW5lIGlzIHNpbXBseSByZWR1bmRhbnQuIFRoaXMgbG9va3MgbGlrZSBhIGNsZWFudXAgcGF0Y2guIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbG9vayBhdCB0aGUgY29tbWl0IG1lc3NhZ2UsIGlmIHBvc3NpYmxlLCBvciBzZWFyY2ggZm9yIGl0IHRvIGNvbmZpcm0gbXkgaHVuY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTk6MDYuMDQzNjY2Mjc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI4MTY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9sb2NrX3dyaXRlXFxcXChhY3RpdmVfYW5vbl92bWFcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ybWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jLTM1Mi1cXHQgKi9cXG5tbS9ybWFwLmM6MzUzOlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG5tbS9ybWFwLmMtMzU0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbi0tXFxubW0vcm1hcC5jPTQ3OT12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtNDkyLVxcbm1tL3JtYXAuYzo0OTM6XFx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xcbm1tL3JtYXAuYy00OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE5OjA2LjE0MTk1NDM0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjkyNTg4NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGFub25fdm1hYCBMb2NrIFVzYWdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGlzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIHZlcnN1cyBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgKmlzKiB0aGUgc2FtZSBhcyBgYWN0aXZlX2Fub25fdm1hYCwgdGhlbiB0aGlzIGlzIGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2Ug4oCTIG5vdCBpbXBhY3RmdWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBzcmMtXHUwMDNlYW5vbl92bWFgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS5cblxuVGhlIGNvbW1lbnQgaXMgaGVscGZ1bDogaXQgc3RhdGVzIHRoYXQgd2UgKmRvbid0KiBuZWVkIHRoZSBgYW5vbl92bWFgIGxvY2sgd2hlbiBhbGxvY2F0aW5nIEFWQ3MgYmVjYXVzZSB3ZSBhcmVuJ3QgdG91Y2hpbmcgdGhlIHJidHJlZSBvciBjaGFuZ2luZyBzdGF0aXN0aWNzLiBJdCBnb2VzIG9uIHRvIHNheSB0aGF0IGVpdGhlciBgc3JjYCBhbmQgYGRzdGAgc2hhcmUgYW4gYG1tYCBhbmQgd2UgaGF2ZSBhbiBleGNsdXNpdmUgbW1hcCB3cml0ZSBsb2NrLCAqb3IqIHdlJ3JlIGZvcmtpbmcgYW5kIHdlIGhvbGQgdGhlIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAgYW5kIGBkc3RgIGlzbid0IGFjY2Vzc2libGUgeWV0LiBUaGlzIG1lYW5zLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHdpdGggdGhlIGV4Y2x1c2l2ZSBtbWFwIHdyaXRlIGxvY2ssIGBzcmMtXHUwMDNlYW5vbl92bWFgIHNob3VsZCAqbm90KiBiZSBjb25jdXJyZW50bHkgbW9kaWZpZWQuXG5cbkJ1dCwgaGFuZyBvbi4uLiB3aGF0IGFib3V0IGBjaGVja19hbm9uX3ZtYV9jbG9uZWA/IENvdWxkIHRoYXQgYmUgbWVzc2luZyB3aXRoIGBzcmMtXHUwMDNlYW5vbl92bWFgIGluIGEgd2F5IEknbSBub3Qgc2VlaW5nPyBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNjoxOToxMS44MzQ1NjEwNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MDQwODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2Fub25fdm1hX2Nsb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3JtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMjM0LVxcbm1tL3JtYXAuYzoyMzU6c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXFxubW0vcm1hcC5jLTIzNi1cXHRcXHRcXHRcXHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9ybWFwLmM9MzIwPWludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9ybWFwLmMtMzI1LVxcbm1tL3JtYXAuYzozMjY6XFx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XFxubW0vcm1hcC5jLTMyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTk6MTEuOTAyNjA4MzE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjI4MzY2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhcywgc3BlY2lmaWNhbGx5IHRoZSBjbG9uaW5nIHByb2Nlc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBjcnVjaWFsIGZvciB0aGluZ3MgbGlrZSBgZm9yaygpYCBvciBvdGhlciBjb3B5LW9uLXdyaXRlIG1lY2hhbmlzbXMuIFRoZSBmb2N1cyBvbiBcImFub255bW91c1wiIGFyZWFzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbm90IGJhY2tlZCBieSBhIGZpbGUgb24gZGlzaywgbGlrZSB0aGUgcHJvZ3JhbSdzIGhlYXAsIHN0YWNrLCBvciBwZXJoYXBzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLlxuXG5TbywgSSBzdXNwZWN0IHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IGFuZCBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gdGhlc2UgYW5vbnltb3VzIFZNQXMgYXJlIGR1cGxpY2F0ZWQuIFdlIG5lZWQgdG8gYXZvaWQgY29uZmxpY3RzLCBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSAoZXNwZWNpYWxseSB3aXRoIGNvcHktb24td3JpdGUpLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB0b3VjaGluZyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9ucy4gSXQgaGFzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBuZXcgcHJvY2VzcyBkb2Vzbid0IGluYWR2ZXJ0ZW50bHkgY29ycnVwdCB0aGUgZGF0YSBvZiB0aGUgb3JpZ2luYWwgcHJvY2Vzcy4gSXQgd291bGQgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSB0aGF0IHBvaW50IHRvIHRoZXNlIG1lbW9yeSByZWdpb25zLCBlbnN1cmluZyB0aGV5J3JlIHByb3Blcmx5IGR1cGxpY2F0ZWQgb3IsIG1vcmUgbGlrZWx5LCBtYXJrZWQgYXMgY29weS1vbi13cml0ZSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMuIEFuZCBpdCB3b3VsZCBuZWVkIHRvIGNvb3JkaW5hdGUgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiByb3V0aW5lcy4gQW55IG90aGVyIGRldGFpbHMgYXJlIGxpa2VseSBpbiB0aGUgaW1wbGVtZW50YXRpb24gb3Igc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIGRpZyBpbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE5OjE1Ljc2NTQ0NzM0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcm1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMDpcXHRcXHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XFxuIDIzMTpcXHQgb3V0X2Vub21lbTpcXG4gMjMyOlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gMjM3OlxcdFxcdFxcdFxcdFxcdCBlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKVxcbiAyMzg6XFx0e1xcbiAyMzk6XFx0XFx0LyogVGhlIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLiAqL1xcbiAyNDA6XFx0XFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHNyYy1cXHUwMDNldm1fbW0pO1xcbiAyNDE6XFx0XFx0LyogSWYgbm90IGEgZm9yayB0aGVuIG11c3QgYmUgb24gc2FtZSBtbS4gKi9cXG4gMjQyOlxcdFxcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX0ZPUksgXFx1MDAyNlxcdTAwMjYgZHN0LVxcdTAwM2V2bV9tbSAhPSBzcmMtXFx1MDAzZXZtX21tKTtcXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0LyogSWYgd2UgaGF2ZSBhbnl0aGluZyB0byBkbyBzcmMtXFx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXFxuIDI0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cXHUwMDNlYW5vbl92bWEgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnNyYy1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcXG4gMjQ2OlxcdFxcdFZNX1dBUk5fT05fT05DRSghc3JjLVxcdTAwM2Vhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBkc3QtXFx1MDAzZWFub25fdm1hKTtcXG4gMjQ3OlxcdFxcdC8qIFdlIGFyZSBlc3RhYmxpc2hpbmcgYSBuZXcgYW5vbl92bWFfY2hhaW4uICovXFxuIDI0ODpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRzdC1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcXG4gMjQ5OlxcdFxcdC8qXFxuIDI1MDpcXHRcXHQgKiBPbiBmb3JrLCBkc3QtXFx1MDAzZWFub25fdm1hIGlzIHNldCBOVUxMICh0ZW1wb3JhcmlseSkuIE90aGVyd2lzZSwgYW5vbl92bWFcXG4gMjUxOlxcdFxcdCAqIG11c3QgYmUgdGhlIHNhbWUgYWNyb3NzIGRzdCBhbmQgc3JjLlxcbiAyNTI6XFx0XFx0ICovXFxuIDI1MzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0LVxcdTAwM2Vhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBkc3QtXFx1MDAzZWFub25fdm1hICE9IHNyYy1cXHUwMDNlYW5vbl92bWEpO1xcbiAyNTQ6XFx0XFx0LypcXG4gMjU1OlxcdFxcdCAqIEVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gYWJvdmUgLSBpZiBub3QgYSBuby1vcCwgd2Ugc2hvdWxkIGV4cGVjdFxcbiAyNTY6XFx0XFx0ICogZHN0LVxcdTAwM2Vhbm9uX3ZtYSB0byBiZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGEgZm9yay5cXG4gMjU3OlxcdFxcdCAqL1xcbiAyNTg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSyBcXHUwMDI2XFx1MDAyNiBzcmMtXFx1MDAzZWFub25fdm1hIFxcdTAwMjZcXHUwMDI2XFxuIDI1OTpcXHRcXHRcXHRcXHQhZHN0LVxcdTAwM2Vhbm9uX3ZtYSk7XFxuIDI2MDpcXHRcXHQvKiBGb3IgdGhlIGFub25fdm1hIHRvIGJlIGNvbXBhdGlibGUsIGl0IGNhbiBvbmx5IGJlIHNpbmd1bGFyLiAqL1xcbiAyNjE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiA9PSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFxcdTAwMjZcXHUwMDI2XFxuIDI2MjpcXHRcXHRcXHRcXHQhbGlzdF9pc19zaW5ndWxhcihcXHUwMDI2c3JjLVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbikpO1xcbiAyNjM6XFx0I2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gMjY0OlxcdFxcdC8qIE9ubHkgbWVyZ2luZyBhbiB1bmZhdWx0ZWQgVk1BIGxlYXZlcyB0aGUgZGVzdGluYXRpb24gYXR0YWNoZWQuICovXFxuIDI2NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9NRVJHRV9VTkZBVUxURUQgXFx1MDAyNlxcdTAwMjZcXG4gMjY2OlxcdFxcdFxcdFxcdHZtYV9pc19hdHRhY2hlZChkc3QpKTtcXG4gMjY3OlxcdCNlbmRpZlxcbiAyNjg6XFx0fVxcbiAyNjk6XFx0XFxuIDI3MDpcXHRzdGF0aWMgdm9pZCBtYXliZV9yZXVzZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4gMjcxOlxcdFxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuIDI3MjpcXHR7XFxuIDI3MzpcXHRcXHQvKiBJZiBhbHJlYWR5IHBvcHVsYXRlZCwgbm90aGluZyB0byBkby4qL1xcbiAyNzQ6XFx0XFx0aWYgKGRzdC1cXHUwMDNlYW5vbl92bWEpXFxuIDI3NTpcXHRcXHRcXHRyZXR1cm47XFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdC8qXFxuIDI3ODpcXHRcXHQgKiBXZSByZXVzZSBhbiBhbm9uX3ZtYSBpZiBhbnkgbGlua2luZyBWTUFzIHdlcmUgdW5tYXBwZWQgYW5kIGl0IGhhc1xcbiAyNzk6XFx0XFx0ICogb25seSBhIHNpbmdsZSBjaGlsZCBhdCBtb3N0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNjoxOToxNS43NjU2MTY3MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NjEwMTk5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYW5vbl92bWFfY2xvbmVgIFBhdGNoOiBBIENvc21ldGljIFVuZGVydGFraW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGVuc3VyZSBgc3JjLVx1MDAzZWFub25fdm1hYCBpc24ndCBhbHRlcmVkIGR1cmluZyB0aGUgYGFub25fdm1hX2Nsb25lYCBwcm9jZXNzLCBvdXRzaWRlIG9mIHRoZSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGNhbGwuIFRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAgZG9lcyBwcmV2ZW50IGV4dGVybmFsIG1vZGlmaWNhdGlvbnMsIHdoaWNoIG1ha2VzIGBzcmMtXHUwMDNlYW5vbl92bWFgIGVmZmVjdGl2ZWx5IGNvbnN0YW50IHRocm91Z2hvdXQuIFRoZSBwYXRjaCdzIGNoYW5nZSBmcm9tIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIHNlZW1lZCBwdXJlbHkgY29zbWV0aWMsIGdpdmVuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCBuZWl0aGVyIGFwcGVhciB0byBiZSBtb2RpZmllZCBzdWJzZXF1ZW50bHkuXG5cbkkgdGhlbiBwZXJmb3JtZWQgYSBkZWVwZXIgY2hlY2ssIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgLiBUaGUgYWxsb2NhdGlvbiBvZiBgYW5vbl92bWFfY2hhaW5gIHN0cnVjdHVyZXMgYW5kIHRoZWlyIGFzc2lnbm1lbnQsIHdpdGhpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIGRvZXNuJ3QgdG91Y2ggb3IgbW9kaWZ5IGBhY3RpdmVfYW5vbl92bWFgLiBUaGVyZWZvcmUsIHRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiBgYWN0aXZlX2Fub25fdm1hYCByZW1haW5zIHVuY2hhbmdlZCB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbi5cblxuVGhpcyBtZWFucyBpdCAqaXMqIGEgcHVyZWx5IGNvc21ldGljIGNsZWFudXAuIFRoZSByZWFzb24gaXMgbGlrZWx5IGZvciBjb25zaXN0ZW5jeSwgdG8gaGF2ZSBhIG5hbWVkIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIHVzZWQgY29uc2lzdGVudGx5IHdpdGggdGhlIHBhaXJlZCB1bmxvY2sgYGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi5cblxuR2l2ZW4gdGhhdCB0aGlzIGNoYW5nZSBoYXMgbm8gaW1wYWN0IG9uIGV4ZWN1dGlvbiBmbG93LCBhbmQgaXMgb25seSBhIHN0eWxpc3RpYyBpbXByb3ZlbWVudCwgaXQncyBzYWZlIHRvIHNheSB0aGF0IHRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBpbmVydC4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIG5lZWQgdG8gc3BlbmQgdGltZSBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgcGF0Y2guXG5Xb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY2LCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE5OjI2LjUyNjYzOTY1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzcmMtXFx1MDAzZWFub25fdm1hYCB3aXRoIGBhY3RpdmVfYW5vbl92bWFgIGluIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZSgpYC4gU2luY2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgdG8gYHNyYy1cXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBuZWl0aGVyIHZhcmlhYmxlIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjbGVhbnVwIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdWJzZXF1ZW50IGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgY2FsbC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzcmMtXFx1MDAzZWFub25fdm1hYCB3aXRoIGBhY3RpdmVfYW5vbl92bWFgIGluIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZSgpYC4gU2luY2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgdG8gYHNyYy1cXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBuZWl0aGVyIHZhcmlhYmxlIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjbGVhbnVwIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdWJzZXF1ZW50IGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgY2FsbC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE5OjI2LjUyNjY3NTcxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cjwl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 05:35:18 +0000 UTC FinishedAt: 2026-08-17 06:19:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aCBgYWN0aXZlX2Fub25fdm1hYCBpbiBhIGNhbGwgdG8gYGFub25fdm1hX2xvY2tfd3JpdGUoKWAuIFNpbmNlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBuZWl0aGVyIHZhcmlhYmxlIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjbGVhbnVwIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdWJzZXF1ZW50IGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgY2FsbC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNzU1N2E2OWYwZGJmZGYyYTRkNjA3YTg2NjdhZjM4MmQzNWM1NWM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDY6MTg6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmLi5mM2ZhZGZiNjljN2YyIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0zNTAsNyAmIzQzOzM1MCw3IEBAIGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gXHQgKiBOb3cgbGluayB0aGUgYW5vbl92bWEmIzM5O3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cbiBcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEmIzM5O3Mgc2hhcmUgdGhlIHNhbWUgcm9vdC5cbiBcdCAqL1xuLVx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuJiM0MztcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiBcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aCBgYWN0aXZlX2Fub25fdm1hYCBpbiBhIGNhbGwgdG8gYGFub25fdm1hX2xvY2tfd3JpdGUoKWAuIFNpbmNlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBuZWl0aGVyIHZhcmlhYmxlIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjbGVhbnVwIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdWJzZXF1ZW50IGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgY2FsbC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNzU1N2E2OWYwZGJmZGYyYTRkNjA3YTg2NjdhZjM4MmQzNWM1NWM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDY6MTg6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZjNmYWRmYjY5YzdmMiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLAogCSAqIE5vdyBsaW5rIHRoZSBhbm9uX3ZtYSYjMzk7cyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLgogCSAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEmIzM5O3Mgc2hhcmUgdGhlIHNhbWUgcm9vdC4KIAkgKi8KLQlhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpOwomIzQzOwlhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgJmFtcDtkc3QtJmd0O2Fub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLSZndDthbm9uX3ZtYTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3JtYXAuY2AuIEl0JiMzOTtzIGEgcHJldHR5IGZvY3VzZWQgbW9kaWZpY2F0aW9uLCByaWdodCBpbiB0aGUgYGFub25fdm1hX2Nsb25lYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhpczogdGhleSYjMzk7dmUgc3dhcHBlZCB0aGUgYGFub25fdm1hYCBiZWluZyBsb2NrZWQuIFByZXZpb3VzbHksIGl0IHdhcyBgc3JjLSZndDthbm9uX3ZtYWAsIGFuZCBub3cgaXQmIzM5O3MgYGFjdGl2ZV9hbm9uX3ZtYWAuIFRoaXMgaXMgYSBjb3JlIGNoYW5nZSDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSB0b3VjaGluZyB0aGUgaGVhcnQgb2YgaG93IGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhcyBhcmUgaGFuZGxlZC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGBybWFwYCBzdWJzeXN0ZW0sIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHdlIHVuZGVyc3RhbmQgdGhpcy4gSXQmIzM5O3Mgc3VidGxlLCBidXQgdGhlc2Uga2luZHMgb2YgY2hhbmdlcyBjYW4gaGF2ZSBmYXItcmVhY2hpbmcgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBhbm9uX3ZtYV9jbG9uZWAgaW4gYG1tL3JtYXAuY2AgaXRzZWxmLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5ICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCB3aGF0IHRoZSBvcmlnaW5hbCBpbnRlbnQgd2FzLCBhbmQgaG93IHRoaXMgbmV3IGxvY2sgYWZmZWN0cyBjb25jdXJyZW5jeSBhbmQgZGF0YSBpbnRlZ3JpdHkgaW4gdGhpcyBwYXJ0aWN1bGFyIGFyZWEuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9jbG9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTIzNC1cbm1tL3JtYXAuYzoyMzU6c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG5tbS9ybWFwLmMtMjM2LVx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4tLVxubW0vcm1hcC5jLTI5Mi0vKipcbm1tL3JtYXAuYzoyOTM6ICogYW5vbl92bWFfY2xvbmUgLSBFc3RhYmxpc2hlcyBuZXcgYW5vbl92bWFfY2hhaW4gb2JqZWN0cyBpbiBAZHN0IGxpbmtpbmcgdG9cbm1tL3JtYXAuYy0yOTQtICogYWxsIG9mIHRoZSBhbm9uX3ZtYSBvYmplY3RzIGNvbnRhaW5lZCB3aXRoaW4gQHNyYyBhbm9uX3ZtYV9jaGFpbiYjMzk7cy5cbi0tXG5tbS9ybWFwLmMtMzE5LSAqL1xubW0vcm1hcC5jOjMyMDppbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxubW0vcm1hcC5jLTMyMS1cdFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbi0tXG5tbS9ybWFwLmMtMzI1LVxubW0vcm1hcC5jOjMyNjpcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xubW0vcm1hcC5jLTMyNy1cbi0tXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXG4tLVxubW0vcm1hcC5jLTQwMy1cdCAqL1xubW0vcm1hcC5jOjQwNDpcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XG5tbS9ybWFwLmMtNDA1LVx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cbi0tXG5tbS9ybWFwLmMtNDQ0LS8qXG5tbS9ybWFwLmM6NDQ1OiAqIEluIHRoZSB1bmZvcnR1bmF0ZSBjYXNlIG9mIGFub25fdm1hX2Nsb25lKCkgZmFpbGluZyB0byBhbGxvY2F0ZSBtZW1vcnkgd2Vcbm1tL3JtYXAuYy00NDYtICogaGF2ZSB0byBjbGVhbiB0aGluZ3MgdXAuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgYW5vbl92bWFfY2xvbmVgIC0gQSBEZWVwIERpdmUqKgoKUmlnaHQsIGBhbm9uX3ZtYV9jbG9uZWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBpc24mIzM5O3QgaXQ/IEkga25vdyBJJiMzOTt2ZSBzZWVuIGl0IGNhbGxlZCBmcm9tIGBhbm9uX3ZtYV9mb3JrYCwgYnV0IEkgc3VzcGVjdCBpdCBwb3BzIHVwIGluIG90aGVyIGNydWNpYWwgYXJlYXMgdG9vLiBHaXZlbiBpdHMgY2VudHJhbCByb2xlLCBJIG5lZWQgdG8gZ2V0IGEgZnVsbCBoYW5kbGUgb24gdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIHRoZSBvcGVyYXRpb25zIHRoYXQgdHJpZ2dlciBpdCB3aWxsIHJlYWxseSB1bmxvY2sgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhIGNsb25pbmcgcHJvY2VzcyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzEwOlx0ICogSW4gYWxsIGNhc2VzIG90aGVyIHRoYW4gZm9yayB0aGlzIGlzIHNpbXBseSBhIGR1cGxpY2F0aW9uLiBGb3JrIGFkZGl0aW9uYWxseVxuIDMxMTpcdCAqIGFkZHMgYSBuZXcgYWN0aXZlIGFub25fdm1hLlxuIDMxMjpcdCAqXG4gMzEzOlx0ICogT05MWSBpbiB0aGUgY2FzZSBvZiBmb3JrIGRvIHdlIHRyeSB0byAmIzM5O3JldXNlJiMzOTsgZXhpc3RpbmcgYW5vbl92bWEmIzM5O3MgaW4gYW5cbiAzMTQ6XHQgKiBhbm9uX3ZtYSBoaWVyYXJjaHksIHJldXNpbmcgYW5vbl92bWEmIzM5O3Mgd2hpY2ggaGF2ZSBubyBWTUEgYXNzb2NpYXRlZCB3aXRoIHRoZW1cbiAzMTU6XHQgKiBidXQgZG8gaGF2ZSBhIHNpbmdsZSBjaGlsZC4gVGhpcyBpcyB0byBhdm9pZCB3YXN0ZSBvZiBtZW1vcnkgd2hlbiByZXBlYXRlZGx5XG4gMzE2Olx0ICogZm9ya2luZy5cbiAzMTc6XHQgKlxuIDMxODpcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLlxuIDMxOTpcdCAqL1xuIDMyMDpcdGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMzIxOlx0XHRcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXG4gMzIyOlx0e1xuIDMyMzpcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpwYXZjO1xuIDMyNDpcdFx0c3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWE7XG4gMzI1Olx0XG4gMzI2Olx0XHRjaGVja19hbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgb3BlcmF0aW9uKTtcbiAzMjc6XHRcbiAzMjg6XHRcdGlmICghYWN0aXZlX2Fub25fdm1hKVxuIDMyOTpcdFx0XHRyZXR1cm4gMDtcbiAzMzA6XHRcbiAzMzE6XHRcdC8qXG4gMzMyOlx0XHQgKiBBbGxvY2F0ZSBBVkNzLiBXZSBkb24mIzM5O3QgbmVlZCBhbiBhbm9uX3ZtYSBsb2NrIGZvciB0aGlzIGFzIHdlXG4gMzMzOlx0XHQgKiBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZ1xuIDMzNDpcdFx0ICogYW5vbl92bWEgc3RhdGlzdGljcy5cbiAzMzU6XHRcdCAqXG4gMzM2Olx0XHQgKiBFaXRoZXIgc3JjLCBkc3QgaGF2ZSB0aGUgc2FtZSBtbSBmb3Igd2hpY2ggd2UgaG9sZCBhbiBleGNsdXNpdmUgbW1hcFxuIDMzNzpcdFx0ICogd3JpdGUgbG9jaywgb3Igd2UgYXJlIGZvcmtpbmcgYW5kIHdlIGhvbGQgaXQgb24gc3JjLVx1MDAzZXZtX21tIGFuZCBkc3QgaXNcbiAzMzg6XHRcdCAqIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byBvdGhlciB0aHJlYWRzIHNvIHRoZXJlJiMzOTtzIG5vIHBvc3NpYmxpaXR5IG9mIHRoZVxuIDMzOTpcdFx0ICogdW5saW5rZWQgQVZDJiMzOTtzIGJlaW5nIG9ic2VydmVkIHlldC5cbiAzNDA6XHRcdCAqL1xuIDM0MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwYXZjLCBcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gMzQyOlx0XHRcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xuIDM0MzpcdFx0XHRpZiAoIWF2YylcbiAzNDQ6XHRcdFx0XHRnb3RvIGVub21lbV9mYWlsdXJlO1xuIDM0NTpcdFxuIDM0NjpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtXHUwMDNlYW5vbl92bWEpO1xuIDM0NzpcdFx0fVxuIDM0ODpcdFxuIDM0OTpcdFx0LypcbiAzNTA6XHRcdCAqIE5vdyBsaW5rIHRoZSBhbm9uX3ZtYSYjMzk7cyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLlxuIDM1MTpcdFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSYjMzk7cyBzaGFyZSB0aGUgc2FtZSByb290LlxuIDM1MjpcdFx0ICovXG4gMzUzOlx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gMzU0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gMzU1Olx0XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXHUwMDNlYW5vbl92bWE7XG4gMzU2Olx0XG4gMzU3Olx0XHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG4gMzU4Olx0XHRcdGlmIChvcGVyYXRpb24gPT0gVk1BX09QX0ZPUkspXG4gMzU5Olx0XHRcdFx0bWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7XG4gMzYwOlx0XHR9XG4gMzYxOlx0XG4gMzYyOlx0XHRpZiAob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLKVxuIDM2MzpcdFx0XHRkc3QtXHUwMDNlYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOztcbiAzNjQ6XHRcbiAzNjU6XHRcdGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuIDM2NjpcdFx0cmV0dXJuIDA7XG4gMzY3Olx0XG4gMzY4Olx0IGVub21lbV9mYWlsdXJlOlxuIDM2OTpcdFx0Y2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhkc3QpO1xuIDM3MDpcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzcxOlx0fVxuIDM3MjpcdFxuIDM3MzpcdC8qXG4gMzc0Olx0ICogQXR0YWNoIHZtYSB0byBpdHMgb3duIGFub25fdm1hLCBhcyB3ZWxsIGFzIHRvIHRoZSBhbm9uX3ZtYXMgdGhhdFxuIDM3NTpcdCAqIHRoZSBjb3JyZXNwb25kaW5nIFZNQSBpbiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8uXG4gMzc2Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuXG4gMzc3Olx0ICovXG4gMzc4Olx0aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbiAzNzk6XHR7XG4gMzgwOlx0XHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcbiAzODE6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7XG4gMzgyOlx0XHRpbnQgcmM7XG4gMzgzOlx0XG4gMzg0Olx0XHQvKiBEb24mIzM5O3QgYm90aGVyIGlmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgbm8gYW5vbl92bWEgaGVyZS4gKi9cbiAzODU6XHRcdGlmICghcHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiAzODY6XHRcdFx0cmV0dXJuIDA7XG4gMzg3Olx0XG4gMzg4Olx0XHQvKiBEcm9wIGluaGVyaXRlZCBhbm9uX3ZtYSwgd2UmIzM5O2xsIHJldXNlIGV4aXN0aW5nIG9yIGFsbG9jYXRlIG5ldy4gKi9cbiAzODk6XHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG4gMzkwOlx0XG4gMzkxOlx0XHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XG4gMzkyOlx0XHRpZiAoIWFub25fdm1hKVxuIDM5MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzOTQ6XHRcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xuIDM5NTpcdFx0aWYgKCFhdmMpIHtcbiAzOTY6XHRcdFx0cHV0X2Fub25fdm1hKGFub25fdm1hKTtcbiAzOTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzk4Olx0XHR9XG4gMzk5Olx0XG4gNDAwOlx0XHQvKlxuIDQwMTpcdFx0ICogRmlyc3QsIGF0dGFjaCB0aGUgbmV3IFZNQSB0byB0aGUgcGFyZW50IFZNQSYjMzk7cyBhbm9uX3ZtYXMsXG4gNDAyOlx0XHQgKiBzbyBybWFwIGNhbiBmaW5kIG5vbi1DT1dlZCBwYWdlcyBpbiBjaGlsZCBwcm9jZXNzZXMuXG4gNDAzOlx0XHQgKi9cbiA0MDQ6XHRcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XG4gNDA1Olx0XHQvKiBBbiBlcnJvciBhcm9zZSBvciBhbiBleGlzdGluZyBhbm9uX3ZtYSB3YXMgcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqL1xuIDQwNjpcdFx0aWYgKHJjIHx8IHZtYS1cdTAwM2Vhbm9uX3ZtYSkge1xuIDQwNzpcdFx0XHRwdXRfYW5vbl92bWEoYW5vbl92bWEpO1xuIDQwODpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gNDA5Olx0XHRcdHJldHVybiByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBBbm9uX1ZNQSBMb2NrIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYSBjaGFuZ2UgZnJvbSBsb2NraW5nIGFuZCB1bmxvY2tpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgIHRvIHVzaW5nIGBhY3RpdmVfYW5vbl92bWFgOgoKYGBgYwotCWFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSk7CiYjNDM7CWFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTsKYGBgCgphbmQgbGF0ZXI6CgpgYGBjCi0JYW5vbl92bWFfdW5sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpOwomIzQzOwlhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTsKYGBgCgpJbml0aWFsbHksIGBhY3RpdmVfYW5vbl92bWFgIGlzIHNldCB0byBgc3JjLSZndDthbm9uX3ZtYWA6CgpgYGBjCglzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy0mZ3Q7YW5vbl92bWE7CmBgYAoKTXkgZmlyc3QgdGhvdWdodCBpcywgYXJlIHRoZXNlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50PyBJZiBgc3JjLSZndDthbm9uX3ZtYWAgKmRvZXNuJiMzOTt0KiBjaGFuZ2UgYmV0d2VlbiB0aGUgbG9jayBhbmQgdW5sb2NrIGNhbGxzLCB0aGlzIGlzIGp1c3QgYSBjbGVhbnVwLiBJdCBtaWdodCBiZSBnb29kIHByYWN0aWNlIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUsIGJ1dCBpdCYjMzk7cyBub3QgYSBmdW5jdGlvbmFsIGRpZmZlcmVuY2UuCgpIb3dldmVyLCB0aGUgcXVlc3Rpb24gaXMsICpjYW4qIGBzcmMtJmd0O2Fub25fdm1hYCBjaGFuZ2U/IFRoZSBjb2RlIGNvbW1lbnRzIHN1Z2dlc3QgdGhhdCB0aGUgZnVuY3Rpb24gaG9sZHMgYW4gZXhjbHVzaXZlIG1tYXAgd3JpdGUgbG9jayBpbiBtYW55IGNhc2VzLiBJZiB3ZSBoYXZlIHRoYXQgZXhjbHVzaXZlIGxvY2ssIGBzcmMtJmd0O2Fub25fdm1hYCAqc2hvdWxkbiYjMzk7dCogYmUgbW9kaWZpZWQgYnkgYW5vdGhlciB0aHJlYWQuIEl0IGV4cGxpY2l0bHkgbWVudGlvbnMgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBlaXRoZXIgYHNyY2AsIGBkc3RgIG9yIHRoZSBmb3JrIGNhc2UuCgpCdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gV2hhdCBpZiBgc3JjYCBpdHNlbGYgaXMgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCBjaGFuZ2VzIGBzcmMtJmd0O2Fub25fdm1hYD8gVGhlIGxhdGVyIHVzZSBvZiBgYWN0aXZlX2Fub25fdm1hYCBpbiB0aGUgYHVubG9ja2AgY2FsbCwgd2hpbGUgYHNyYy0mZ3Q7YW5vbl92bWFgIGluIGBsb2NrYCB3b3VsZCBiZSBhIHJlYWwgcHJvYmxlbS4gU28gdGhpcyBpcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLgoKSSYjMzk7bSBzZWVpbmcgdGhhdCBgYW5vbl92bWFfY2xvbmVgIGlzIGNhbGxlZCB3aXRoIGBkc3RgIGFuZCBgc3JjYC4gSW4gdGhlIGZvcmsgY2FzZSwgSSBiZWxpZXZlIGBzcmNgIGlzIGBwdm1hYCBhbmQgYGRzdGAgaXMgYHZtYWAuIEl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgYHB2bWEtJmd0O2Fub25fdm1hYCBjb3VsZCBiZSBtb2RpZmllZCBoZXJlLCBidXQgYmVjYXVzZSB3ZSBob2xkIHRoZSBtbWFwIGxvY2ssIHRoYXQgZG9lc24mIzM5O3Qgc2VlbSBwb3NzaWJsZS4gQWxzbywgSSBkb24mIzM5O3Qgc2VlIGFueSBtb2RpZmljYXRpb24gb2YgYHNyYy0mZ3Q7YW5vbl92bWFgIGl0c2VsZiB3aXRoaW4gdGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24uCgpTbywgaXQgKmxvb2tzKiBsaWtlIHRoaXMgaXMgcHJvYmFibHkgYSBjbGVhbnVwLiBCdXQgSSBzaG91bGQgY29uZmlybSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBgYW5vbl92bWFfbG9ja193cml0ZWAgZm9yIHNhZmV0eSBhbmQgdGhhdCBgYW5vbl92bWFfbG9ja193cml0ZWAgaXMgdXNpbmcgcG9pbnRlcnMsIGJlY2F1c2UgdGhhdCB3b3VsZCBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHNhZmUgY2xlYW51cCBhbmQgdGhlIGFkZHJlc3MgY2Fubm90IGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9sb2NrX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDAyMz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwNzEtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6NDA3MjpcdFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XG5tbS9odWdlX21lbW9yeS5jLTQwNzMtXHRcdG1hcHBpbmcgPSBOVUxMO1xuLS1cbm1tL2ludGVybmFsLmg9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbi0tXG5tbS9pbnRlcm5hbC5oLTIxNy1cbm1tL2ludGVybmFsLmg6MjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG5tbS9pbnRlcm5hbC5oLTIxOS17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTg5NT1zdGF0aWMgdm9pZCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9jb3B5X2ZhaWxlZChwdGVfdCAqcHRlLFxuLS1cbm1tL2todWdlcGFnZWQuYy05MDUtXHQgKiBwYWdlcy4gU2luY2UgcGFnZXMgYXJlIHN0aWxsIGlzb2xhdGVkIGFuZCBsb2NrZWQgaGVyZSxcbm1tL2todWdlcGFnZWQuYzo5MDY6XHQgKiBhY3F1aXJpbmcgYW5vbl92bWFfbG9ja193cml0ZSBpcyB1bm5lY2Vzc2FyeS5cbm1tL2todWdlcGFnZWQuYy05MDctXHQgKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTI3OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTM0OS1cbm1tL2todWdlcGFnZWQuYzoxMzUwOlx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xubW0va2h1Z2VwYWdlZC5jLTEzNTEtXHRhbm9uX3ZtYV9sb2NrZWQgPSB0cnVlO1xuLS1cbm1tL21yZW1hcC5jPTE0Mz1zdGF0aWMgdm9pZCB0YWtlX3JtYXBfbG9ja3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbXJlbWFwLmMtMTQ3LVx0aWYgKHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbm1tL21yZW1hcC5jOjE0ODpcdFx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xubW0vbXJlbWFwLmMtMTQ5LX1cbi0tXG5tbS9ybWFwLmM9MTEwPXN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG4tLVxubW0vcm1hcC5jLTEzMi1cdGlmIChyd3NlbV9pc19sb2NrZWQoXHUwMDI2YW5vbl92bWEtXHUwMDNlcm9vdC1cdTAwM2Vyd3NlbSkpIHtcbm1tL3JtYXAuYzoxMzM6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xubW0vcm1hcC5jLTEzNC1cdFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTtcbi0tXG5tbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTIwNy1cbm1tL3JtYXAuYzoyMDg6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcbm1tL3JtYXAuYy0yMDktXHQvKiBwYWdlX3RhYmxlX2xvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IHRocmVhZHMgKi9cbi0tXG5tbS9ybWFwLmM9MzIwPWludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vcm1hcC5jLTM1Mi1cdCAqL1xubW0vcm1hcC5jOjM1MzpcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbm1tL3JtYXAuYy0zNTQtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4tLVxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxuLS1cbm1tL3JtYXAuYy00MzUtXHQvKiBOb3cgbGV0IHJtYXAgc2VlIGl0LiAqL1xubW0vcm1hcC5jOjQzNjpcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xubW0vcm1hcC5jLTQzNy1cdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG4tLVxubW0vcm1hcC5jPTQ3OT12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTQ5Mi1cbm1tL3JtYXAuYzo0OTM6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5tbS9ybWFwLmMtNDk0LVxuLS1cbm1tL3JtYXAuYz02MzM9c3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtNjg5LVx0XHQgKiBhbmQgYmFpbCAtLSBjYW4mIzM5O3Qgc2ltcGx5IHVzZSBwdXRfYW5vbl92bWEoKSBiZWNhdXNlXG5tbS9ybWFwLmM6NjkwOlx0XHQgKiB3ZSYjMzk7bGwgZGVhZGxvY2sgb24gdGhlIGFub25fdm1hX2xvY2tfd3JpdGUoKSByZWN1cnNpb24uXG5tbS9ybWFwLmMtNjkxLVx0XHQgKi9cbi0tXG5tbS92bWEuYz0yOTE9c3RhdGljIHZvaWQgdm1hX3ByZXBhcmUoc3RydWN0IHZtYV9wcmVwYXJlICp2cClcbi0tXG5tbS92bWEuYy0zMTMtXHRpZiAodnAtXHUwMDNlYW5vbl92bWEpIHtcbm1tL3ZtYS5jOjMxNDpcdFx0YW5vbl92bWFfbG9ja193cml0ZSh2cC1cdTAwM2Vhbm9uX3ZtYSk7XG5tbS92bWEuYy0zMTUtXHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfcHJlX3VwZGF0ZV92bWEodnAtXHUwMDNldm1hKTtcbi0tXG5tbS92bWEuYz0zMTE3PWludCBleHBhbmRfdXB3YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL3ZtYS5jLTMxNjUtXHQvKiBXZSB1cGRhdGUgdGhlIGFub24gVk1BIHRyZWUuICovXG5tbS92bWEuYzozMTY2Olx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xubW0vdm1hLmMtMzE2Ny1cbi0tXG5tbS92bWEuYz0zMjAzPWludCBleHBhbmRfZG93bndhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4tLVxubW0vdm1hLmMtMzI0NC1cdC8qIFdlIHVwZGF0ZSB0aGUgYW5vbiBWTUEgdHJlZS4gKi9cbm1tL3ZtYS5jOjMyNDU6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG5tbS92bWEuYy0zMjQ2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIFNuaXBwZXQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc29tZXRoaW5nIHNlZW1zIHJlZHVuZGFudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpczoKCmBgYGMKc3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSBzcmMtJmd0O2Fub25fdm1hOwphbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpOwpgYGAKCkl0IGxvb2tzIGxpa2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMganVzdCBhIGNvcHkgb2YgYHNyYy0mZ3Q7YW5vbl92bWFgLCBhbmQgdGhlbiB0aGUgdmVyeSBzYW1lIHZhbHVlIGlzIHBhc3NlZCB0byBgYW5vbl92bWFfbG9ja193cml0ZWAuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzLCBhcmUgdGhlc2UgdHdvIGNhbGxzIGFjdHVhbGx5IHRoZSBzYW1lPyBJbiBvdGhlciB3b3JkcywgaXMgdGhlcmUgYW55IHNpdHVhdGlvbiB3aGVyZSBldmFsdWF0aW5nIGBzcmMtJmd0O2Fub25fdm1hYCBjb3VsZCByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgKmxhdGVyKj8KCkxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIGBzcmNgIGlzIGEgcG9pbnRlciB0byBgc3RydWN0IHZtX2FyZWFfc3RydWN0YC4gIGBzcmMtJmd0O2Fub25fdm1hYCBpcyBzaW1wbHkgYSBkaXJlY3QgZmllbGQgYWNjZXNzLiBUaGVyZSYjMzk7cyBubyBmYW5jeSBmdW5jdGlvbiBjYWxsIG9yIHNpZGUgZWZmZWN0IHRoYXQgY291bGQgYWx0ZXIgdGhlIHZhbHVlICpkdXJpbmcqIGV4ZWN1dGlvbi4gVGhlIG9ubHkgd2F5IHRoZSB2YWx1ZSBvZiBgc3JjLSZndDthbm9uX3ZtYWAgY291bGQgY2hhbmdlIGlzIGlmIGBzcmNgIGl0c2VsZiBnZXRzIG1vZGlmaWVkLgoKQWxyaWdodCwgc28gbGV0JiMzOTtzIGxvb2sgZm9yIHRoYXQsIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZToKCmBgYGMKCWxpc3RfZm9yX2VhY2hfZW50cnkocGF2YywgJmFtcDtzcmMtJmd0O2Fub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewoJCWF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpOwoJCWlmICghYXZjKQoJCQlnb3RvIGVub21lbV9mYWlsdXJlOwoKCQlhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtJmd0O2Fub25fdm1hKTsKCX0KYGBgCgpJIHNlZSBhIGxvb3AgaXRlcmF0aW5nIHRocm91Z2ggYHNyYy0mZ3Q7YW5vbl92bWFfY2hhaW5gLiBIb3dldmVyLCAqYHNyY2AgaXRzZWxmKiBpc24mIzM5O3QgbW9kaWZpZWQgaW5zaWRlIHRoaXMgbG9vcC4gU28sIHRoYXQmIzM5O3Mgbm90IHRoZSBpc3N1ZS4gVGhlIGNvZGUgbWFuaXB1bGF0ZXMgYGRzdGAgYW5kIGEgZmV3IG90aGVyIHBvaW50ZXJzLCBidXQgbm90IGBzcmNgLgoKT2theSwgc28gaXQgcmVhbGx5IGRvZXMgc2VlbSBsaWtlIHRoZSBmaXJzdCBsaW5lIGlzIHNpbXBseSByZWR1bmRhbnQuIFRoaXMgbG9va3MgbGlrZSBhIGNsZWFudXAgcGF0Y2guIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbG9vayBhdCB0aGUgY29tbWl0IG1lc3NhZ2UsIGlmIHBvc3NpYmxlLCBvciBzZWFyY2ggZm9yIGl0IHRvIGNvbmZpcm0gbXkgaHVuY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2xvY2tfd3JpdGVcXChhY3RpdmVfYW5vbl92bWFcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9ybWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYy0zNTItXHQgKi9cbm1tL3JtYXAuYzozNTM6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMzU0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xuLS1cbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy00OTItXG5tbS9ybWFwLmM6NDkzOlx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xubW0vcm1hcC5jLTQ5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhbm9uX3ZtYWAgTG9jayBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGlzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCB2ZXJzdXMgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgc2l0dWF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlmIGBzcmMtJmd0O2Fub25fdm1hYCAqaXMqIHRoZSBzYW1lIGFzIGBhY3RpdmVfYW5vbl92bWFgLCB0aGVuIHRoaXMgaXMganVzdCBhIGNvc21ldGljIGNoYW5nZSDigJMgbm90IGltcGFjdGZ1bC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS4KClRoZSBjb21tZW50IGlzIGhlbHBmdWw6IGl0IHN0YXRlcyB0aGF0IHdlICpkb24mIzM5O3QqIG5lZWQgdGhlIGBhbm9uX3ZtYWAgbG9jayB3aGVuIGFsbG9jYXRpbmcgQVZDcyBiZWNhdXNlIHdlIGFyZW4mIzM5O3QgdG91Y2hpbmcgdGhlIHJidHJlZSBvciBjaGFuZ2luZyBzdGF0aXN0aWNzLiBJdCBnb2VzIG9uIHRvIHNheSB0aGF0IGVpdGhlciBgc3JjYCBhbmQgYGRzdGAgc2hhcmUgYW4gYG1tYCBhbmQgd2UgaGF2ZSBhbiBleGNsdXNpdmUgbW1hcCB3cml0ZSBsb2NrLCAqb3IqIHdlJiMzOTtyZSBmb3JraW5nIGFuZCB3ZSBob2xkIHRoZSB3cml0ZSBsb2NrIG9uIGBzcmMtJmd0O3ZtX21tYCBhbmQgYGRzdGAgaXNuJiMzOTt0IGFjY2Vzc2libGUgeWV0LiBUaGlzIG1lYW5zLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHdpdGggdGhlIGV4Y2x1c2l2ZSBtbWFwIHdyaXRlIGxvY2ssIGBzcmMtJmd0O2Fub25fdm1hYCBzaG91bGQgKm5vdCogYmUgY29uY3VycmVudGx5IG1vZGlmaWVkLgoKQnV0LCBoYW5nIG9uLi4uIHdoYXQgYWJvdXQgYGNoZWNrX2Fub25fdm1hX2Nsb25lYD8gQ291bGQgdGhhdCBiZSBtZXNzaW5nIHdpdGggYHNyYy0mZ3Q7YW5vbl92bWFgIGluIGEgd2F5IEkmIzM5O20gbm90IHNlZWluZz8gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2Fub25fdm1hX2Nsb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtMjM0LVxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbm1tL3JtYXAuYy0yMzYtXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYy0zMjUtXG5tbS9ybWFwLmM6MzI2Olx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XG5tbS9ybWFwLmMtMzI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzLCBzcGVjaWZpY2FsbHkgdGhlIGNsb25pbmcgcHJvY2Vzcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGxpa2VseSBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGNydWNpYWwgZm9yIHRoaW5ncyBsaWtlIGBmb3JrKClgIG9yIG90aGVyIGNvcHktb24td3JpdGUgbWVjaGFuaXNtcy4gVGhlIGZvY3VzIG9uICYjMzQ7YW5vbnltb3VzJiMzNDsgYXJlYXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbm90IGJhY2tlZCBieSBhIGZpbGUgb24gZGlzaywgbGlrZSB0aGUgcHJvZ3JhbSYjMzk7cyBoZWFwLCBzdGFjaywgb3IgcGVyaGFwcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4KClNvLCBJIHN1c3BlY3QgdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IGFuZCBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gdGhlc2UgYW5vbnltb3VzIFZNQXMgYXJlIGR1cGxpY2F0ZWQuIFdlIG5lZWQgdG8gYXZvaWQgY29uZmxpY3RzLCBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSAoZXNwZWNpYWxseSB3aXRoIGNvcHktb24td3JpdGUpLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB0b3VjaGluZyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9ucy4gSXQgaGFzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBuZXcgcHJvY2VzcyBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGNvcnJ1cHQgdGhlIGRhdGEgb2YgdGhlIG9yaWdpbmFsIHByb2Nlc3MuIEl0IHdvdWxkIG5lZWQgdG8gY29uc2lkZXIgdGhpbmdzIGxpa2UgdGhlIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykgdGhhdCBwb2ludCB0byB0aGVzZSBtZW1vcnkgcmVnaW9ucywgZW5zdXJpbmcgdGhleSYjMzk7cmUgcHJvcGVybHkgZHVwbGljYXRlZCBvciwgbW9yZSBsaWtlbHksIG1hcmtlZCBhcyBjb3B5LW9uLXdyaXRlLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucy4gQW5kIGl0IHdvdWxkIG5lZWQgdG8gY29vcmRpbmF0ZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHJvdXRpbmVzLiBBbnkgb3RoZXIgZGV0YWlscyBhcmUgbGlrZWx5IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvciBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gZGlnIGluIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMwOlx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gMjMxOlx0IG91dF9lbm9tZW06XG4gMjMyOlx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMzM6XHR9XG4gMjM0Olx0XG4gMjM1Olx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjM2Olx0XHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMjM3Olx0XHRcdFx0XHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAyMzg6XHR7XG4gMjM5Olx0XHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXG4gMjQwOlx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKTtcbiAyNDE6XHRcdC8qIElmIG5vdCBhIGZvcmsgdGhlbiBtdXN0IGJlIG9uIHNhbWUgbW0uICovXG4gMjQyOlx0XHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNldm1fbW0gIT0gc3JjLVx1MDAzZXZtX21tKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdC8qIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gZG8gc3JjLVx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXG4gMjQ1Olx0XHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2c3JjLVx1MDAzZWFub25fdm1hX2NoYWluKSk7XG4gMjQ2Olx0XHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgZHN0LVx1MDAzZWFub25fdm1hKTtcbiAyNDc6XHRcdC8qIFdlIGFyZSBlc3RhYmxpc2hpbmcgYSBuZXcgYW5vbl92bWFfY2hhaW4uICovXG4gMjQ4Olx0XHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluKSk7XG4gMjQ5Olx0XHQvKlxuIDI1MDpcdFx0ICogT24gZm9yaywgZHN0LVx1MDAzZWFub25fdm1hIGlzIHNldCBOVUxMICh0ZW1wb3JhcmlseSkuIE90aGVyd2lzZSwgYW5vbl92bWFcbiAyNTE6XHRcdCAqIG11c3QgYmUgdGhlIHNhbWUgYWNyb3NzIGRzdCBhbmQgc3JjLlxuIDI1MjpcdFx0ICovXG4gMjUzOlx0XHRWTV9XQVJOX09OX09OQ0UoZHN0LVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNlYW5vbl92bWEgIT0gc3JjLVx1MDAzZWFub25fdm1hKTtcbiAyNTQ6XHRcdC8qXG4gMjU1Olx0XHQgKiBFc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIGFib3ZlIC0gaWYgbm90IGEgbm8tb3AsIHdlIHNob3VsZCBleHBlY3RcbiAyNTY6XHRcdCAqIGRzdC1cdTAwM2Vhbm9uX3ZtYSB0byBiZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGEgZm9yay5cbiAyNTc6XHRcdCAqL1xuIDI1ODpcdFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSyBcdTAwMjZcdTAwMjYgc3JjLVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNlxuIDI1OTpcdFx0XHRcdCFkc3QtXHUwMDNlYW5vbl92bWEpO1xuIDI2MDpcdFx0LyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi9cbiAyNjE6XHRcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gPT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiAyNjI6XHRcdFx0XHQhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcbiAyNjM6XHQjaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIDI2NDpcdFx0LyogT25seSBtZXJnaW5nIGFuIHVuZmF1bHRlZCBWTUEgbGVhdmVzIHRoZSBkZXN0aW5hdGlvbiBhdHRhY2hlZC4gKi9cbiAyNjU6XHRcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiAyNjY6XHRcdFx0XHR2bWFfaXNfYXR0YWNoZWQoZHN0KSk7XG4gMjY3Olx0I2VuZGlmXG4gMjY4Olx0fVxuIDI2OTpcdFxuIDI3MDpcdHN0YXRpYyB2b2lkIG1heWJlX3JldXNlX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxuIDI3MTpcdFx0XHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxuIDI3MjpcdHtcbiAyNzM6XHRcdC8qIElmIGFscmVhZHkgcG9wdWxhdGVkLCBub3RoaW5nIHRvIGRvLiovXG4gMjc0Olx0XHRpZiAoZHN0LVx1MDAzZWFub25fdm1hKVxuIDI3NTpcdFx0XHRyZXR1cm47XG4gMjc2Olx0XG4gMjc3Olx0XHQvKlxuIDI3ODpcdFx0ICogV2UgcmV1c2UgYW4gYW5vbl92bWEgaWYgYW55IGxpbmtpbmcgVk1BcyB3ZXJlIHVubWFwcGVkIGFuZCBpdCBoYXNcbiAyNzk6XHRcdCAqIG9ubHkgYSBzaW5nbGUgY2hpbGQgYXQgbW9zdC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjYKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogNjgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFub25fdm1hX2Nsb25lYCBQYXRjaDogQSBDb3NtZXRpYyBVbmRlcnRha2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGVuc3VyZSBgc3JjLSZndDthbm9uX3ZtYWAgaXNuJiMzOTt0IGFsdGVyZWQgZHVyaW5nIHRoZSBgYW5vbl92bWFfY2xvbmVgIHByb2Nlc3MsIG91dHNpZGUgb2YgdGhlIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgY2FsbC4gVGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLSZndDt2bV9tbWAgZG9lcyBwcmV2ZW50IGV4dGVybmFsIG1vZGlmaWNhdGlvbnMsIHdoaWNoIG1ha2VzIGBzcmMtJmd0O2Fub25fdm1hYCBlZmZlY3RpdmVseSBjb25zdGFudCB0aHJvdWdob3V0LiBUaGUgcGF0Y2gmIzM5O3MgY2hhbmdlIGZyb20gYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSlgIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIHNlZW1lZCBwdXJlbHkgY29zbWV0aWMsIGdpdmVuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtJmd0O2Fub25fdm1hYCBhbmQgbmVpdGhlciBhcHBlYXIgdG8gYmUgbW9kaWZpZWQgc3Vic2VxdWVudGx5LgoKSSB0aGVuIHBlcmZvcm1lZCBhIGRlZXBlciBjaGVjaywgZm9jdXNpbmcgb24gdGhlIGNvcmUgbG9naWMgd2l0aGluIGBhbm9uX3ZtYV9jbG9uZWAuIFRoZSBhbGxvY2F0aW9uIG9mIGBhbm9uX3ZtYV9jaGFpbmAgc3RydWN0dXJlcyBhbmQgdGhlaXIgYXNzaWdubWVudCwgd2l0aGluIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgbG9vcCwgZG9lc24mIzM5O3QgdG91Y2ggb3IgbW9kaWZ5IGBhY3RpdmVfYW5vbl92bWFgLiBUaGVyZWZvcmUsIHRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiBgYWN0aXZlX2Fub25fdm1hYCByZW1haW5zIHVuY2hhbmdlZCB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24uCgpUaGlzIG1lYW5zIGl0ICppcyogYSBwdXJlbHkgY29zbWV0aWMgY2xlYW51cC4gVGhlIHJlYXNvbiBpcyBsaWtlbHkgZm9yIGNvbnNpc3RlbmN5LCB0byBoYXZlIGEgbmFtZWQgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgdXNlZCBjb25zaXN0ZW50bHkgd2l0aCB0aGUgcGFpcmVkIHVubG9jayBgYW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLgoKR2l2ZW4gdGhhdCB0aGlzIGNoYW5nZSBoYXMgbm8gaW1wYWN0IG9uIGV4ZWN1dGlvbiBmbG93LCBhbmQgaXMgb25seSBhIHN0eWxpc3RpYyBpbXByb3ZlbWVudCwgaXQmIzM5O3Mgc2FmZSB0byBzYXkgdGhhdCB0aGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsbHkgaW5lcnQuIFRoZXJlZm9yZSwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBzcGVuZCB0aW1lIGZ1enppbmcgdGhpcyBzcGVjaWZpYyBwYXRjaC4KV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGBzcmMtXHUwMDNlYW5vbl92bWFgIHdpdGggYGFjdGl2ZV9hbm9uX3ZtYWAgaW4gYSBjYWxsIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKClgLiBTaW5jZSBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBhbmQgbmVpdGhlciB2YXJpYWJsZSBpcyBtb2RpZmllZCBiZWZvcmUgdGhlIGxvY2sgaXMgYWNxdWlyZWQsIHRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2xlYW51cCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgc3Vic2VxdWVudCBgYW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGNhbGwuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgc3JjLVx1MDAzZWFub25fdm1hYCB3aXRoIGBhY3RpdmVfYW5vbl92bWFgIGluIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZSgpYC4gU2luY2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgdG8gYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24gYW5kIG5laXRoZXIgdmFyaWFibGUgaXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLCB0aGlzIGlzIGEgcHVyZWx5IGNvc21ldGljIGNsZWFudXAgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIHN1YnNlcXVlbnQgYGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCBjYWxsLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDY6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE4OjM5LjI3NjE4NzAzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjUwNTA1MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHNyYy1cXHUwMDNlYW5vbl92bWFgIHdpdGggYGFjdGl2ZV9hbm9uX3ZtYWAgaW4gYSBjYWxsIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKClgLiBTaW5jZSBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24gYW5kIG5laXRoZXIgdmFyaWFibGUgaXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLCB0aGlzIGlzIGEgcHVyZWx5IGNvc21ldGljIGNsZWFudXAgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIHN1YnNlcXVlbnQgYGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCBjYWxsLiBJdCBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6MzkuMjc2MjA5Njc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1MDQ3MDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTc1NTdhNjlmMGRiZmRmMmE0ZDYwN2E4NjY3YWYzODJkMzVjNTVjNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNjoxODozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCAxYzc3ZDVkYzA2ZTlmLi5mM2ZhZGZiNjljN2YyIDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC0zNTAsNyArMzUwLDcgQEAgaW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gXFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cXG4gXFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSdzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXFxuIFxcdCAqL1xcbi1cXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cXHUwMDNlYW5vbl92bWEpO1xcbitcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiBcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLVxcdTAwM2Vhbm9uX3ZtYTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE4OjQwLjcwMjIwMDk4MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ1ODI0NDcyMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgd2l0aCBgYWN0aXZlX2Fub25fdm1hYCBpbiBhIGNhbGwgdG8gYGFub25fdm1hX2xvY2tfd3JpdGUoKWAuIFNpbmNlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXFx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbiBhbmQgbmVpdGhlciB2YXJpYWJsZSBpcyBtb2RpZmllZCBiZWZvcmUgdGhlIGxvY2sgaXMgYWNxdWlyZWQsIHRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2xlYW51cCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgc3Vic2VxdWVudCBgYW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGNhbGwuIEl0IGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNzU1N2E2OWYwZGJmZGYyYTRkNjA3YTg2NjdhZjM4MmQzNWM1NWM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDY6MTg6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFjNzdkNWRjMDZlOWYuLmYzZmFkZmI2OWM3ZjIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTM1MCw3ICszNTAsNyBAQCBpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuIFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cbiBcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEncyBzaGFyZSB0aGUgc2FtZSByb290LlxuIFx0ICovXG4tXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSk7XG4rXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gXHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXHUwMDNlYW5vbl92bWE7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNjoxODo0MC43MDIyMDMxMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc4OTkwOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN1YnRsZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9ybWFwLmNgLiBJdCdzIGEgcHJldHR5IGZvY3VzZWQgbW9kaWZpY2F0aW9uLCByaWdodCBpbiB0aGUgYGFub25fdm1hX2Nsb25lYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhpczogdGhleSd2ZSBzd2FwcGVkIHRoZSBgYW5vbl92bWFgIGJlaW5nIGxvY2tlZC4gUHJldmlvdXNseSwgaXQgd2FzIGBzcmMtXHUwMDNlYW5vbl92bWFgLCBhbmQgbm93IGl0J3MgYGFjdGl2ZV9hbm9uX3ZtYWAuIFRoaXMgaXMgYSBjb3JlIGNoYW5nZSDigJMgaXQncyBkZWZpbml0ZWx5IHRvdWNoaW5nIHRoZSBoZWFydCBvZiBob3cgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzIGFyZSBoYW5kbGVkLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBgcm1hcGAgc3Vic3lzdGVtLCBzbyBpdCdzIGNyaXRpY2FsIHdlIHVuZGVyc3RhbmQgdGhpcy4gSXQncyBzdWJ0bGUsIGJ1dCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzIGNhbiBoYXZlIGZhci1yZWFjaGluZyBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBkaXZlIGludG8gYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCBpdHNlbGYuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUsIHdoYXQgdGhlIG9yaWdpbmFsIGludGVudCB3YXMsIGFuZCBob3cgdGhpcyBuZXcgbG9jayBhZmZlY3RzIGNvbmN1cnJlbmN5IGFuZCBkYXRhIGludGVncml0eSBpbiB0aGlzIHBhcnRpY3VsYXIgYXJlYS4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE4OjQ1LjA4MTE5ODQwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDIxODQwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9jbG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ybWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTIzNC1cXG5tbS9ybWFwLmM6MjM1OnN0YXRpYyB2b2lkIGNoZWNrX2Fub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxcbm1tL3JtYXAuYy0yMzYtXFx0XFx0XFx0XFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jPTI5MD1zdGF0aWMgdm9pZCBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4tLVxcbm1tL3JtYXAuYy0yOTItLyoqXFxubW0vcm1hcC5jOjI5MzogKiBhbm9uX3ZtYV9jbG9uZSAtIEVzdGFibGlzaGVzIG5ldyBhbm9uX3ZtYV9jaGFpbiBvYmplY3RzIGluIEBkc3QgbGlua2luZyB0b1xcbm1tL3JtYXAuYy0yOTQtICogYWxsIG9mIHRoZSBhbm9uX3ZtYSBvYmplY3RzIGNvbnRhaW5lZCB3aXRoaW4gQHNyYyBhbm9uX3ZtYV9jaGFpbidzLlxcbi0tXFxubW0vcm1hcC5jLTMxOS0gKi9cXG5tbS9ybWFwLmM6MzIwOmludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxubW0vcm1hcC5jLTMyMS1cXHRcXHQgICBlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKVxcbi0tXFxubW0vcm1hcC5jLTMyNS1cXG5tbS9ybWFwLmM6MzI2OlxcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xcbm1tL3JtYXAuYy0zMjctXFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtNDAzLVxcdCAqL1xcbm1tL3JtYXAuYzo0MDQ6XFx0cmMgPSBhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEsIFZNQV9PUF9GT1JLKTtcXG5tbS9ybWFwLmMtNDA1LVxcdC8qIEFuIGVycm9yIGFyb3NlIG9yIGFuIGV4aXN0aW5nIGFub25fdm1hIHdhcyByZXVzZWQsIGFsbCBkb25lIHRoZW4uICovXFxuLS1cXG5tbS9ybWFwLmMtNDQ0LS8qXFxubW0vcm1hcC5jOjQ0NTogKiBJbiB0aGUgdW5mb3J0dW5hdGUgY2FzZSBvZiBhbm9uX3ZtYV9jbG9uZSgpIGZhaWxpbmcgdG8gYWxsb2NhdGUgbWVtb3J5IHdlXFxubW0vcm1hcC5jLTQ0Ni0gKiBoYXZlIHRvIGNsZWFuIHRoaW5ncyB1cC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6NDUuMTYxNDIzMzcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMjkyOTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBhbm9uX3ZtYV9jbG9uZWAgLSBBIERlZXAgRGl2ZSoqXG5cblJpZ2h0LCBgYW5vbl92bWFfY2xvbmVgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBpc24ndCBpdD8gSSBrbm93IEkndmUgc2VlbiBpdCBjYWxsZWQgZnJvbSBgYW5vbl92bWFfZm9ya2AsIGJ1dCBJIHN1c3BlY3QgaXQgcG9wcyB1cCBpbiBvdGhlciBjcnVjaWFsIGFyZWFzIHRvby4gR2l2ZW4gaXRzIGNlbnRyYWwgcm9sZSwgSSBuZWVkIHRvIGdldCBhIGZ1bGwgaGFuZGxlIG9uIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIHRoaXMgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQncyBjYWxsZWQgYW5kIHRoZSBvcGVyYXRpb25zIHRoYXQgdHJpZ2dlciBpdCB3aWxsIHJlYWxseSB1bmxvY2sgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhIGNsb25pbmcgcHJvY2VzcyBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6NDguNjk0MzU1MDQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzEwOlxcdCAqIEluIGFsbCBjYXNlcyBvdGhlciB0aGFuIGZvcmsgdGhpcyBpcyBzaW1wbHkgYSBkdXBsaWNhdGlvbi4gRm9yayBhZGRpdGlvbmFsbHlcXG4gMzExOlxcdCAqIGFkZHMgYSBuZXcgYWN0aXZlIGFub25fdm1hLlxcbiAzMTI6XFx0ICpcXG4gMzEzOlxcdCAqIE9OTFkgaW4gdGhlIGNhc2Ugb2YgZm9yayBkbyB3ZSB0cnkgdG8gJ3JldXNlJyBleGlzdGluZyBhbm9uX3ZtYSdzIGluIGFuXFxuIDMxNDpcXHQgKiBhbm9uX3ZtYSBoaWVyYXJjaHksIHJldXNpbmcgYW5vbl92bWEncyB3aGljaCBoYXZlIG5vIFZNQSBhc3NvY2lhdGVkIHdpdGggdGhlbVxcbiAzMTU6XFx0ICogYnV0IGRvIGhhdmUgYSBzaW5nbGUgY2hpbGQuIFRoaXMgaXMgdG8gYXZvaWQgd2FzdGUgb2YgbWVtb3J5IHdoZW4gcmVwZWF0ZWRseVxcbiAzMTY6XFx0ICogZm9ya2luZy5cXG4gMzE3OlxcdCAqXFxuIDMxODpcXHQgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZmFpbHVyZS5cXG4gMzE5OlxcdCAqL1xcbiAzMjA6XFx0aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gMzIxOlxcdFxcdFxcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuIDMyMjpcXHR7XFxuIDMyMzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywgKnBhdmM7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cXHUwMDNlYW5vbl92bWE7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRpZiAoIWFjdGl2ZV9hbm9uX3ZtYSlcXG4gMzI5OlxcdFxcdFxcdHJldHVybiAwO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHQvKlxcbiAzMzI6XFx0XFx0ICogQWxsb2NhdGUgQVZDcy4gV2UgZG9uJ3QgbmVlZCBhbiBhbm9uX3ZtYSBsb2NrIGZvciB0aGlzIGFzIHdlXFxuIDMzMzpcXHRcXHQgKiBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZ1xcbiAzMzQ6XFx0XFx0ICogYW5vbl92bWEgc3RhdGlzdGljcy5cXG4gMzM1OlxcdFxcdCAqXFxuIDMzNjpcXHRcXHQgKiBFaXRoZXIgc3JjLCBkc3QgaGF2ZSB0aGUgc2FtZSBtbSBmb3Igd2hpY2ggd2UgaG9sZCBhbiBleGNsdXNpdmUgbW1hcFxcbiAzMzc6XFx0XFx0ICogd3JpdGUgbG9jaywgb3Igd2UgYXJlIGZvcmtpbmcgYW5kIHdlIGhvbGQgaXQgb24gc3JjLVxcdTAwM2V2bV9tbSBhbmQgZHN0IGlzXFxuIDMzODpcXHRcXHQgKiBub3QgeWV0IGFjY2Vzc2libGUgdG8gb3RoZXIgdGhyZWFkcyBzbyB0aGVyZSdzIG5vIHBvc3NpYmxpaXR5IG9mIHRoZVxcbiAzMzk6XFx0XFx0ICogdW5saW5rZWQgQVZDJ3MgYmVpbmcgb2JzZXJ2ZWQgeWV0LlxcbiAzNDA6XFx0XFx0ICovXFxuIDM0MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFxcdTAwMjZzcmMtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiAzNDI6XFx0XFx0XFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XFxuIDM0MzpcXHRcXHRcXHRpZiAoIWF2YylcXG4gMzQ0OlxcdFxcdFxcdFxcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbihkc3QsIGF2YywgcGF2Yy1cXHUwMDNlYW5vbl92bWEpO1xcbiAzNDc6XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHQvKlxcbiAzNTA6XFx0XFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cXG4gMzUxOlxcdFxcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEncyBzaGFyZSB0aGUgc2FtZSByb290LlxcbiAzNTI6XFx0XFx0ICovXFxuIDM1MzpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIDM1NDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcXHUwMDI2ZHN0LVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcXG4gMzU1OlxcdFxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXFx1MDAzZWFub25fdm1hO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRcXHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcmJfcm9vdCk7XFxuIDM1ODpcXHRcXHRcXHRpZiAob3BlcmF0aW9uID09IFZNQV9PUF9GT1JLKVxcbiAzNTk6XFx0XFx0XFx0XFx0bWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7XFxuIDM2MDpcXHRcXHR9XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdGlmIChvcGVyYXRpb24gIT0gVk1BX09QX0ZPUkspXFxuIDM2MzpcXHRcXHRcXHRkc3QtXFx1MDAzZWFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcXG4gMzY0OlxcdFxcbiAzNjU6XFx0XFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIDM2NjpcXHRcXHRyZXR1cm4gMDtcXG4gMzY3OlxcdFxcbiAzNjg6XFx0IGVub21lbV9mYWlsdXJlOlxcbiAzNjk6XFx0XFx0Y2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhkc3QpO1xcbiAzNzA6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM3MTpcXHR9XFxuIDM3MjpcXHRcXG4gMzczOlxcdC8qXFxuIDM3NDpcXHQgKiBBdHRhY2ggdm1hIHRvIGl0cyBvd24gYW5vbl92bWEsIGFzIHdlbGwgYXMgdG8gdGhlIGFub25fdm1hcyB0aGF0XFxuIDM3NTpcXHQgKiB0aGUgY29ycmVzcG9uZGluZyBWTUEgaW4gdGhlIHBhcmVudCBwcm9jZXNzIGlzIGF0dGFjaGVkIHRvLlxcbiAzNzY6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuXFxuIDM3NzpcXHQgKi9cXG4gMzc4OlxcdGludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuIDM3OTpcXHR7XFxuIDM4MDpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcXG4gMzgxOlxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7XFxuIDM4MjpcXHRcXHRpbnQgcmM7XFxuIDM4MzpcXHRcXG4gMzg0OlxcdFxcdC8qIERvbid0IGJvdGhlciBpZiB0aGUgcGFyZW50IHByb2Nlc3MgaGFzIG5vIGFub25fdm1hIGhlcmUuICovXFxuIDM4NTpcXHRcXHRpZiAoIXB2bWEtXFx1MDAzZWFub25fdm1hKVxcbiAzODY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXFxuIDM4OTpcXHRcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0YW5vbl92bWEgPSBhbm9uX3ZtYV9hbGxvYygpO1xcbiAzOTI6XFx0XFx0aWYgKCFhbm9uX3ZtYSlcXG4gMzkzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzOTQ6XFx0XFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XFxuIDM5NTpcXHRcXHRpZiAoIWF2Yykge1xcbiAzOTY6XFx0XFx0XFx0cHV0X2Fub25fdm1hKGFub25fdm1hKTtcXG4gMzk3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzOTg6XFx0XFx0fVxcbiAzOTk6XFx0XFxuIDQwMDpcXHRcXHQvKlxcbiA0MDE6XFx0XFx0ICogRmlyc3QsIGF0dGFjaCB0aGUgbmV3IFZNQSB0byB0aGUgcGFyZW50IFZNQSdzIGFub25fdm1hcyxcXG4gNDAyOlxcdFxcdCAqIHNvIHJtYXAgY2FuIGZpbmQgbm9uLUNPV2VkIHBhZ2VzIGluIGNoaWxkIHByb2Nlc3Nlcy5cXG4gNDAzOlxcdFxcdCAqL1xcbiA0MDQ6XFx0XFx0cmMgPSBhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEsIFZNQV9PUF9GT1JLKTtcXG4gNDA1OlxcdFxcdC8qIEFuIGVycm9yIGFyb3NlIG9yIGFuIGV4aXN0aW5nIGFub25fdm1hIHdhcyByZXVzZWQsIGFsbCBkb25lIHRoZW4uICovXFxuIDQwNjpcXHRcXHRpZiAocmMgfHwgdm1hLVxcdTAwM2Vhbm9uX3ZtYSkge1xcbiA0MDc6XFx0XFx0XFx0cHV0X2Fub25fdm1hKGFub25fdm1hKTtcXG4gNDA4OlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTtcXG4gNDA5OlxcdFxcdFxcdHJldHVybiByYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6NDguNjk0NTk0MzExWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcwMzY1NjkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgQW5vbl9WTUEgTG9jayBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhIGNoYW5nZSBmcm9tIGxvY2tpbmcgYW5kIHVubG9ja2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCB0byB1c2luZyBgYWN0aXZlX2Fub25fdm1hYDpcblxuYGBgY1xuLVx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuK1x0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuYGBgXG5cbmFuZCBsYXRlcjpcblxuYGBgY1xuLVx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSk7XG4rXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbmBgYFxuXG5Jbml0aWFsbHksIGBhY3RpdmVfYW5vbl92bWFgIGlzIHNldCB0byBgc3JjLVx1MDAzZWFub25fdm1hYDpcblxuYGBgY1xuXHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbmBgYFxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQ/IElmIGBzcmMtXHUwMDNlYW5vbl92bWFgICpkb2Vzbid0KiBjaGFuZ2UgYmV0d2VlbiB0aGUgbG9jayBhbmQgdW5sb2NrIGNhbGxzLCB0aGlzIGlzIGp1c3QgYSBjbGVhbnVwLiBJdCBtaWdodCBiZSBnb29kIHByYWN0aWNlIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUsIGJ1dCBpdCdzIG5vdCBhIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZS5cblxuSG93ZXZlciwgdGhlIHF1ZXN0aW9uIGlzLCAqY2FuKiBgc3JjLVx1MDAzZWFub25fdm1hYCBjaGFuZ2U/IFRoZSBjb2RlIGNvbW1lbnRzIHN1Z2dlc3QgdGhhdCB0aGUgZnVuY3Rpb24gaG9sZHMgYW4gZXhjbHVzaXZlIG1tYXAgd3JpdGUgbG9jayBpbiBtYW55IGNhc2VzLiBJZiB3ZSBoYXZlIHRoYXQgZXhjbHVzaXZlIGxvY2ssIGBzcmMtXHUwMDNlYW5vbl92bWFgICpzaG91bGRuJ3QqIGJlIG1vZGlmaWVkIGJ5IGFub3RoZXIgdGhyZWFkLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gZWl0aGVyIGBzcmNgLCBgZHN0YCBvciB0aGUgZm9yayBjYXNlLlxuXG5CdXQgSSBuZWVkIHRvIGJlICpzdXJlKi4gV2hhdCBpZiBgc3JjYCBpdHNlbGYgaXMgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCBjaGFuZ2VzIGBzcmMtXHUwMDNlYW5vbl92bWFgPyBUaGUgbGF0ZXIgdXNlIG9mIGBhY3RpdmVfYW5vbl92bWFgIGluIHRoZSBgdW5sb2NrYCBjYWxsLCB3aGlsZSBgc3JjLVx1MDAzZWFub25fdm1hYCBpbiBgbG9ja2Agd291bGQgYmUgYSByZWFsIHByb2JsZW0uIFNvIHRoaXMgaXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC5cblxuSSdtIHNlZWluZyB0aGF0IGBhbm9uX3ZtYV9jbG9uZWAgaXMgY2FsbGVkIHdpdGggYGRzdGAgYW5kIGBzcmNgLiBJbiB0aGUgZm9yayBjYXNlLCBJIGJlbGlldmUgYHNyY2AgaXMgYHB2bWFgIGFuZCBgZHN0YCBpcyBgdm1hYC4gSXQncyBwb3NzaWJsZSB0aGF0IGBwdm1hLVx1MDAzZWFub25fdm1hYCBjb3VsZCBiZSBtb2RpZmllZCBoZXJlLCBidXQgYmVjYXVzZSB3ZSBob2xkIHRoZSBtbWFwIGxvY2ssIHRoYXQgZG9lc24ndCBzZWVtIHBvc3NpYmxlLiBBbHNvLCBJIGRvbid0IHNlZSBhbnkgbW9kaWZpY2F0aW9uIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgIGl0c2VsZiB3aXRoaW4gdGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24uXG5cblNvLCBpdCAqbG9va3MqIGxpa2UgdGhpcyBpcyBwcm9iYWJseSBhIGNsZWFudXAuIEJ1dCBJIHNob3VsZCBjb25maXJtIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBmb3Igc2FmZXR5IGFuZCB0aGF0IGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBpcyB1c2luZyBwb2ludGVycywgYmVjYXVzZSB0aGF0IHdvdWxkIGNvbmZpcm0gdGhhdCB0aGlzIGlzIGEgc2FmZSBjbGVhbnVwIGFuZCB0aGUgYWRkcmVzcyBjYW5ub3QgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTg6NTguMzk4MjU0NDU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTMzNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFub25fdm1hX2xvY2tfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9NDAyMz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3MS1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo0MDcyOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3My1cXHRcXHRtYXBwaW5nID0gTlVMTDtcXG4tLVxcbm1tL2ludGVybmFsLmg9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcXG4tLVxcbm1tL2ludGVybmFsLmgtMjE3LVxcbm1tL2ludGVybmFsLmg6MjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxubW0vaW50ZXJuYWwuaC0yMTkte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTg5NT1zdGF0aWMgdm9pZCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9jb3B5X2ZhaWxlZChwdGVfdCAqcHRlLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTkwNS1cXHQgKiBwYWdlcy4gU2luY2UgcGFnZXMgYXJlIHN0aWxsIGlzb2xhdGVkIGFuZCBsb2NrZWQgaGVyZSxcXG5tbS9raHVnZXBhZ2VkLmM6OTA2OlxcdCAqIGFjcXVpcmluZyBhbm9uX3ZtYV9sb2NrX3dyaXRlIGlzIHVubmVjZXNzYXJ5Llxcbm1tL2todWdlcGFnZWQuYy05MDctXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTI3OD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzQ5LVxcbm1tL2todWdlcGFnZWQuYzoxMzUwOlxcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0va2h1Z2VwYWdlZC5jLTEzNTEtXFx0YW5vbl92bWFfbG9ja2VkID0gdHJ1ZTtcXG4tLVxcbm1tL21yZW1hcC5jPTE0Mz1zdGF0aWMgdm9pZCB0YWtlX3JtYXBfbG9ja3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tcmVtYXAuYy0xNDctXFx0aWYgKHZtYS1cXHUwMDNlYW5vbl92bWEpXFxubW0vbXJlbWFwLmM6MTQ4OlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0vbXJlbWFwLmMtMTQ5LX1cXG4tLVxcbm1tL3JtYXAuYz0xMTA9c3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2ZyZWUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcXG4tLVxcbm1tL3JtYXAuYy0xMzItXFx0aWYgKHJ3c2VtX2lzX2xvY2tlZChcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJvb3QtXFx1MDAzZXJ3c2VtKSkge1xcbm1tL3JtYXAuYzoxMzM6XFx0XFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XFxubW0vcm1hcC5jLTEzNC1cXHRcXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYW5vbl92bWEpO1xcbi0tXFxubW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTIwNy1cXG5tbS9ybWFwLmM6MjA4OlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0yMDktXFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXFxuLS1cXG5tbS9ybWFwLmM9MzIwPWludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9ybWFwLmMtMzUyLVxcdCAqL1xcbm1tL3JtYXAuYzozNTM6XFx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0zNTQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXFx1MDAyNmRzdC1cXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtNDM1LVxcdC8qIE5vdyBsZXQgcm1hcCBzZWUgaXQuICovXFxubW0vcm1hcC5jOjQzNjpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcXG5tbS9ybWFwLmMtNDM3LVxcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXFx1MDAyNmFub25fdm1hLVxcdTAwM2VyYl9yb290KTtcXG4tLVxcbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTQ5Mi1cXG5tbS9ybWFwLmM6NDkzOlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG5tbS9ybWFwLmMtNDk0LVxcbi0tXFxubW0vcm1hcC5jPTYzMz1zdHJ1Y3QgYW5vbl92bWEgKmZvbGlvX2xvY2tfYW5vbl92bWFfcmVhZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTY4OS1cXHRcXHQgKiBhbmQgYmFpbCAtLSBjYW4ndCBzaW1wbHkgdXNlIHB1dF9hbm9uX3ZtYSgpIGJlY2F1c2VcXG5tbS9ybWFwLmM6NjkwOlxcdFxcdCAqIHdlJ2xsIGRlYWRsb2NrIG9uIHRoZSBhbm9uX3ZtYV9sb2NrX3dyaXRlKCkgcmVjdXJzaW9uLlxcbm1tL3JtYXAuYy02OTEtXFx0XFx0ICovXFxuLS1cXG5tbS92bWEuYz0yOTE9c3RhdGljIHZvaWQgdm1hX3ByZXBhcmUoc3RydWN0IHZtYV9wcmVwYXJlICp2cClcXG4tLVxcbm1tL3ZtYS5jLTMxMy1cXHRpZiAodnAtXFx1MDAzZWFub25fdm1hKSB7XFxubW0vdm1hLmM6MzE0OlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUodnAtXFx1MDAzZWFub25fdm1hKTtcXG5tbS92bWEuYy0zMTUtXFx0XFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9wcmVfdXBkYXRlX3ZtYSh2cC1cXHUwMDNldm1hKTtcXG4tLVxcbm1tL3ZtYS5jPTMxMTc9aW50IGV4cGFuZF91cHdhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5tbS92bWEuYy0zMTY1LVxcdC8qIFdlIHVwZGF0ZSB0aGUgYW5vbiBWTUEgdHJlZS4gKi9cXG5tbS92bWEuYzozMTY2OlxcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0vdm1hLmMtMzE2Ny1cXG4tLVxcbm1tL3ZtYS5jPTMyMDM9aW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL3ZtYS5jLTMyNDQtXFx0LyogV2UgdXBkYXRlIHRoZSBhbm9uIFZNQSB0cmVlLiAqL1xcbm1tL3ZtYS5jOjMyNDU6XFx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG5tbS92bWEuYy0zMjQ2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNjoxODo1OC40Njc3OTIwNzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc1ODcyMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBTbmlwcGV0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcgc2VlbXMgcmVkdW5kYW50LiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoaXM6XG5cbmBgYGNcbnN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gc3JjLVx1MDAzZWFub25fdm1hO1xuYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuYGBgXG5cbkl0IGxvb2tzIGxpa2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMganVzdCBhIGNvcHkgb2YgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAsIGFuZCB0aGVuIHRoZSB2ZXJ5IHNhbWUgdmFsdWUgaXMgcGFzc2VkIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYC4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGFyZSB0aGVzZSB0d28gY2FsbHMgYWN0dWFsbHkgdGhlIHNhbWU/IEluIG90aGVyIHdvcmRzLCBpcyB0aGVyZSBhbnkgc2l0dWF0aW9uIHdoZXJlIGV2YWx1YXRpbmcgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgY291bGQgcmV0dXJuIGEgZGlmZmVyZW50IHZhbHVlICpsYXRlcio/XG5cbkxldCdzIHRoaW5rIHRoaXMgdGhyb3VnaC4gYHNyY2AgaXMgYSBwb2ludGVyIHRvIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgLiAgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgc2ltcGx5IGEgZGlyZWN0IGZpZWxkIGFjY2Vzcy4gVGhlcmUncyBubyBmYW5jeSBmdW5jdGlvbiBjYWxsIG9yIHNpZGUgZWZmZWN0IHRoYXQgY291bGQgYWx0ZXIgdGhlIHZhbHVlICpkdXJpbmcqIGV4ZWN1dGlvbi4gVGhlIG9ubHkgd2F5IHRoZSB2YWx1ZSBvZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjb3VsZCBjaGFuZ2UgaXMgaWYgYHNyY2AgaXRzZWxmIGdldHMgbW9kaWZpZWQuXG5cbkFscmlnaHQsIHNvIGxldCdzIGxvb2sgZm9yIHRoYXQsIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZTpcblxuYGBgY1xuXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFx1MDAyNnNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcblx0XHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcblx0XHRpZiAoIWF2Yylcblx0XHRcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XG5cblx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtXHUwMDNlYW5vbl92bWEpO1xuXHR9XG5gYGBcblxuSSBzZWUgYSBsb29wIGl0ZXJhdGluZyB0aHJvdWdoIGBzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW5gLiBIb3dldmVyLCAqYHNyY2AgaXRzZWxmKiBpc24ndCBtb2RpZmllZCBpbnNpZGUgdGhpcyBsb29wLiBTbywgdGhhdCdzIG5vdCB0aGUgaXNzdWUuIFRoZSBjb2RlIG1hbmlwdWxhdGVzIGBkc3RgIGFuZCBhIGZldyBvdGhlciBwb2ludGVycywgYnV0IG5vdCBgc3JjYC5cblxuT2theSwgc28gaXQgcmVhbGx5IGRvZXMgc2VlbSBsaWtlIHRoZSBmaXJzdCBsaW5lIGlzIHNpbXBseSByZWR1bmRhbnQuIFRoaXMgbG9va3MgbGlrZSBhIGNsZWFudXAgcGF0Y2guIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbG9vayBhdCB0aGUgY29tbWl0IG1lc3NhZ2UsIGlmIHBvc3NpYmxlLCBvciBzZWFyY2ggZm9yIGl0IHRvIGNvbmZpcm0gbXkgaHVuY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTk6MDYuMDQzNjY2Mjc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODI4MTY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9sb2NrX3dyaXRlXFxcXChhY3RpdmVfYW5vbl92bWFcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9ybWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jLTM1Mi1cXHQgKi9cXG5tbS9ybWFwLmM6MzUzOlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG5tbS9ybWFwLmMtMzU0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbi0tXFxubW0vcm1hcC5jPTQ3OT12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtNDkyLVxcbm1tL3JtYXAuYzo0OTM6XFx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xcbm1tL3JtYXAuYy00OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE5OjA2LjE0MTk1NDM0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjkyNTg4NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGFub25fdm1hYCBMb2NrIFVzYWdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGlzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIHZlcnN1cyBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgKmlzKiB0aGUgc2FtZSBhcyBgYWN0aXZlX2Fub25fdm1hYCwgdGhlbiB0aGlzIGlzIGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2Ug4oCTIG5vdCBpbXBhY3RmdWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBzcmMtXHUwMDNlYW5vbl92bWFgIGNvdWxkIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS5cblxuVGhlIGNvbW1lbnQgaXMgaGVscGZ1bDogaXQgc3RhdGVzIHRoYXQgd2UgKmRvbid0KiBuZWVkIHRoZSBgYW5vbl92bWFgIGxvY2sgd2hlbiBhbGxvY2F0aW5nIEFWQ3MgYmVjYXVzZSB3ZSBhcmVuJ3QgdG91Y2hpbmcgdGhlIHJidHJlZSBvciBjaGFuZ2luZyBzdGF0aXN0aWNzLiBJdCBnb2VzIG9uIHRvIHNheSB0aGF0IGVpdGhlciBgc3JjYCBhbmQgYGRzdGAgc2hhcmUgYW4gYG1tYCBhbmQgd2UgaGF2ZSBhbiBleGNsdXNpdmUgbW1hcCB3cml0ZSBsb2NrLCAqb3IqIHdlJ3JlIGZvcmtpbmcgYW5kIHdlIGhvbGQgdGhlIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAgYW5kIGBkc3RgIGlzbid0IGFjY2Vzc2libGUgeWV0LiBUaGlzIG1lYW5zLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHdpdGggdGhlIGV4Y2x1c2l2ZSBtbWFwIHdyaXRlIGxvY2ssIGBzcmMtXHUwMDNlYW5vbl92bWFgIHNob3VsZCAqbm90KiBiZSBjb25jdXJyZW50bHkgbW9kaWZpZWQuXG5cbkJ1dCwgaGFuZyBvbi4uLiB3aGF0IGFib3V0IGBjaGVja19hbm9uX3ZtYV9jbG9uZWA/IENvdWxkIHRoYXQgYmUgbWVzc2luZyB3aXRoIGBzcmMtXHUwMDNlYW5vbl92bWFgIGluIGEgd2F5IEknbSBub3Qgc2VlaW5nPyBUaGlzIG5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNjoxOToxMS44MzQ1NjEwNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MDQwODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2Fub25fdm1hX2Nsb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3JtYXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMjM0LVxcbm1tL3JtYXAuYzoyMzU6c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXFxubW0vcm1hcC5jLTIzNi1cXHRcXHRcXHRcXHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9ybWFwLmM9MzIwPWludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9ybWFwLmMtMzI1LVxcbm1tL3JtYXAuYzozMjY6XFx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XFxubW0vcm1hcC5jLTMyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDY6MTk6MTEuOTAyNjA4MzE2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjI4MzY2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24uIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhcywgc3BlY2lmaWNhbGx5IHRoZSBjbG9uaW5nIHByb2Nlc3MuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBjcnVjaWFsIGZvciB0aGluZ3MgbGlrZSBgZm9yaygpYCBvciBvdGhlciBjb3B5LW9uLXdyaXRlIG1lY2hhbmlzbXMuIFRoZSBmb2N1cyBvbiBcImFub255bW91c1wiIGFyZWFzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbm90IGJhY2tlZCBieSBhIGZpbGUgb24gZGlzaywgbGlrZSB0aGUgcHJvZ3JhbSdzIGhlYXAsIHN0YWNrLCBvciBwZXJoYXBzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLlxuXG5TbywgSSBzdXNwZWN0IHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IGFuZCBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gdGhlc2UgYW5vbnltb3VzIFZNQXMgYXJlIGR1cGxpY2F0ZWQuIFdlIG5lZWQgdG8gYXZvaWQgY29uZmxpY3RzLCBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSAoZXNwZWNpYWxseSB3aXRoIGNvcHktb24td3JpdGUpLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB0b3VjaGluZyB0aGUgc2FtZSBtZW1vcnkgcmVnaW9ucy4gSXQgaGFzIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBuZXcgcHJvY2VzcyBkb2Vzbid0IGluYWR2ZXJ0ZW50bHkgY29ycnVwdCB0aGUgZGF0YSBvZiB0aGUgb3JpZ2luYWwgcHJvY2Vzcy4gSXQgd291bGQgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSB0aGF0IHBvaW50IHRvIHRoZXNlIG1lbW9yeSByZWdpb25zLCBlbnN1cmluZyB0aGV5J3JlIHByb3Blcmx5IGR1cGxpY2F0ZWQgb3IsIG1vcmUgbGlrZWx5LCBtYXJrZWQgYXMgY29weS1vbi13cml0ZSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMuIEFuZCBpdCB3b3VsZCBuZWVkIHRvIGNvb3JkaW5hdGUgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiByb3V0aW5lcy4gQW55IG90aGVyIGRldGFpbHMgYXJlIGxpa2VseSBpbiB0aGUgaW1wbGVtZW50YXRpb24gb3Igc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIGRpZyBpbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUxMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE5OjE1Ljc2NTQ0NzM0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcm1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMDpcXHRcXHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XFxuIDIzMTpcXHQgb3V0X2Vub21lbTpcXG4gMjMyOlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gMjM3OlxcdFxcdFxcdFxcdFxcdCBlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKVxcbiAyMzg6XFx0e1xcbiAyMzk6XFx0XFx0LyogVGhlIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLiAqL1xcbiAyNDA6XFx0XFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHNyYy1cXHUwMDNldm1fbW0pO1xcbiAyNDE6XFx0XFx0LyogSWYgbm90IGEgZm9yayB0aGVuIG11c3QgYmUgb24gc2FtZSBtbS4gKi9cXG4gMjQyOlxcdFxcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX0ZPUksgXFx1MDAyNlxcdTAwMjYgZHN0LVxcdTAwM2V2bV9tbSAhPSBzcmMtXFx1MDAzZXZtX21tKTtcXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0LyogSWYgd2UgaGF2ZSBhbnl0aGluZyB0byBkbyBzcmMtXFx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXFxuIDI0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cXHUwMDNlYW5vbl92bWEgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnNyYy1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcXG4gMjQ2OlxcdFxcdFZNX1dBUk5fT05fT05DRSghc3JjLVxcdTAwM2Vhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBkc3QtXFx1MDAzZWFub25fdm1hKTtcXG4gMjQ3OlxcdFxcdC8qIFdlIGFyZSBlc3RhYmxpc2hpbmcgYSBuZXcgYW5vbl92bWFfY2hhaW4uICovXFxuIDI0ODpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRzdC1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcXG4gMjQ5OlxcdFxcdC8qXFxuIDI1MDpcXHRcXHQgKiBPbiBmb3JrLCBkc3QtXFx1MDAzZWFub25fdm1hIGlzIHNldCBOVUxMICh0ZW1wb3JhcmlseSkuIE90aGVyd2lzZSwgYW5vbl92bWFcXG4gMjUxOlxcdFxcdCAqIG11c3QgYmUgdGhlIHNhbWUgYWNyb3NzIGRzdCBhbmQgc3JjLlxcbiAyNTI6XFx0XFx0ICovXFxuIDI1MzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0LVxcdTAwM2Vhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBkc3QtXFx1MDAzZWFub25fdm1hICE9IHNyYy1cXHUwMDNlYW5vbl92bWEpO1xcbiAyNTQ6XFx0XFx0LypcXG4gMjU1OlxcdFxcdCAqIEVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gYWJvdmUgLSBpZiBub3QgYSBuby1vcCwgd2Ugc2hvdWxkIGV4cGVjdFxcbiAyNTY6XFx0XFx0ICogZHN0LVxcdTAwM2Vhbm9uX3ZtYSB0byBiZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGEgZm9yay5cXG4gMjU3OlxcdFxcdCAqL1xcbiAyNTg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSyBcXHUwMDI2XFx1MDAyNiBzcmMtXFx1MDAzZWFub25fdm1hIFxcdTAwMjZcXHUwMDI2XFxuIDI1OTpcXHRcXHRcXHRcXHQhZHN0LVxcdTAwM2Vhbm9uX3ZtYSk7XFxuIDI2MDpcXHRcXHQvKiBGb3IgdGhlIGFub25fdm1hIHRvIGJlIGNvbXBhdGlibGUsIGl0IGNhbiBvbmx5IGJlIHNpbmd1bGFyLiAqL1xcbiAyNjE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiA9PSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFxcdTAwMjZcXHUwMDI2XFxuIDI2MjpcXHRcXHRcXHRcXHQhbGlzdF9pc19zaW5ndWxhcihcXHUwMDI2c3JjLVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbikpO1xcbiAyNjM6XFx0I2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gMjY0OlxcdFxcdC8qIE9ubHkgbWVyZ2luZyBhbiB1bmZhdWx0ZWQgVk1BIGxlYXZlcyB0aGUgZGVzdGluYXRpb24gYXR0YWNoZWQuICovXFxuIDI2NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9NRVJHRV9VTkZBVUxURUQgXFx1MDAyNlxcdTAwMjZcXG4gMjY2OlxcdFxcdFxcdFxcdHZtYV9pc19hdHRhY2hlZChkc3QpKTtcXG4gMjY3OlxcdCNlbmRpZlxcbiAyNjg6XFx0fVxcbiAyNjk6XFx0XFxuIDI3MDpcXHRzdGF0aWMgdm9pZCBtYXliZV9yZXVzZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4gMjcxOlxcdFxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuIDI3MjpcXHR7XFxuIDI3MzpcXHRcXHQvKiBJZiBhbHJlYWR5IHBvcHVsYXRlZCwgbm90aGluZyB0byBkby4qL1xcbiAyNzQ6XFx0XFx0aWYgKGRzdC1cXHUwMDNlYW5vbl92bWEpXFxuIDI3NTpcXHRcXHRcXHRyZXR1cm47XFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdC8qXFxuIDI3ODpcXHRcXHQgKiBXZSByZXVzZSBhbiBhbm9uX3ZtYSBpZiBhbnkgbGlua2luZyBWTUFzIHdlcmUgdW5tYXBwZWQgYW5kIGl0IGhhc1xcbiAyNzk6XFx0XFx0ICogb25seSBhIHNpbmdsZSBjaGlsZCBhdCBtb3N0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNjoxOToxNS43NjU2MTY3MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NjEwMTk5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYW5vbl92bWFfY2xvbmVgIFBhdGNoOiBBIENvc21ldGljIFVuZGVydGFraW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGVuc3VyZSBgc3JjLVx1MDAzZWFub25fdm1hYCBpc24ndCBhbHRlcmVkIGR1cmluZyB0aGUgYGFub25fdm1hX2Nsb25lYCBwcm9jZXNzLCBvdXRzaWRlIG9mIHRoZSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGNhbGwuIFRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAgZG9lcyBwcmV2ZW50IGV4dGVybmFsIG1vZGlmaWNhdGlvbnMsIHdoaWNoIG1ha2VzIGBzcmMtXHUwMDNlYW5vbl92bWFgIGVmZmVjdGl2ZWx5IGNvbnN0YW50IHRocm91Z2hvdXQuIFRoZSBwYXRjaCdzIGNoYW5nZSBmcm9tIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIHNlZW1lZCBwdXJlbHkgY29zbWV0aWMsIGdpdmVuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCBuZWl0aGVyIGFwcGVhciB0byBiZSBtb2RpZmllZCBzdWJzZXF1ZW50bHkuXG5cbkkgdGhlbiBwZXJmb3JtZWQgYSBkZWVwZXIgY2hlY2ssIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgLiBUaGUgYWxsb2NhdGlvbiBvZiBgYW5vbl92bWFfY2hhaW5gIHN0cnVjdHVyZXMgYW5kIHRoZWlyIGFzc2lnbm1lbnQsIHdpdGhpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AsIGRvZXNuJ3QgdG91Y2ggb3IgbW9kaWZ5IGBhY3RpdmVfYW5vbl92bWFgLiBUaGVyZWZvcmUsIHRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiBgYWN0aXZlX2Fub25fdm1hYCByZW1haW5zIHVuY2hhbmdlZCB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbi5cblxuVGhpcyBtZWFucyBpdCAqaXMqIGEgcHVyZWx5IGNvc21ldGljIGNsZWFudXAuIFRoZSByZWFzb24gaXMgbGlrZWx5IGZvciBjb25zaXN0ZW5jeSwgdG8gaGF2ZSBhIG5hbWVkIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIHVzZWQgY29uc2lzdGVudGx5IHdpdGggdGhlIHBhaXJlZCB1bmxvY2sgYGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi5cblxuR2l2ZW4gdGhhdCB0aGlzIGNoYW5nZSBoYXMgbm8gaW1wYWN0IG9uIGV4ZWN1dGlvbiBmbG93LCBhbmQgaXMgb25seSBhIHN0eWxpc3RpYyBpbXByb3ZlbWVudCwgaXQncyBzYWZlIHRvIHNheSB0aGF0IHRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBpbmVydC4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIG5lZWQgdG8gc3BlbmQgdGltZSBmdXp6aW5nIHRoaXMgc3BlY2lmaWMgcGF0Y2guXG5Xb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY2LCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE5OjI2LjUyNjYzOTY1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzcmMtXFx1MDAzZWFub25fdm1hYCB3aXRoIGBhY3RpdmVfYW5vbl92bWFgIGluIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZSgpYC4gU2luY2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgdG8gYHNyYy1cXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBuZWl0aGVyIHZhcmlhYmxlIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjbGVhbnVwIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdWJzZXF1ZW50IGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgY2FsbC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGBzcmMtXFx1MDAzZWFub25fdm1hYCB3aXRoIGBhY3RpdmVfYW5vbl92bWFgIGluIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZSgpYC4gU2luY2UgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgdG8gYHNyYy1cXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uIGFuZCBuZWl0aGVyIHZhcmlhYmxlIGlzIG1vZGlmaWVkIGJlZm9yZSB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyBjbGVhbnVwIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBzdWJzZXF1ZW50IGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgY2FsbC4gSXQgZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA2OjE5OjI2LjUyNjY3NTcxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cjwl[1] Phase: Running StartedAt: 2026-08-17 06:19:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cjwl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-17 06:19:37 +0000 UTC FinishedAt: 2026-08-17 06:19:41 +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,}