Name: series-workflow6l6qs Phase: Succeeded StartedAt: 2026-07-27 14:47:22 +0000 UTC FinishedAt: 2026-07-27 20:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[0] Phase: Succeeded StartedAt: 2026-07-27 14:47:22 +0000 UTC FinishedAt: 2026-07-27 15:27:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 14:47:22 +0000 UTC FinishedAt: 2026-07-27 15:27:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "4df5ac1e975032ffeef732e3f34f9096e20a0c2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_PARTITION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "4df5ac1e975032ffeef732e3f34f9096e20a0c2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_PARTITION" ], "series_id": "27725e92-41cc-4d0e-a58b-1547ddc758bc" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "efi_partition" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QQVJUSVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfcGFydGl0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMgKEdQVCksIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB0byBlbnN1cmUgdGhlIHN0YXJ0aW5nIExCQSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgTEJBLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIHBhcnNpbmcgZGlzayBwYXJ0aXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzI0NTFlNmU4M2RkOTBiZWQ5NmMzZmM1NmY5ODAxOTRlN2QzMTg5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDE1OjI1OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmMgYi9ibG9jay9wYXJ0aXRpb25zL2VmaS5jXG5pbmRleCA5ODY1ZDU5MDkzZmFjMC4uMDAwMjE5YTY5N2U0MzAgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2VmaS5jXG5AQCAtNDYxLDcgJiM0Mzs0NjEsOCBAQCBpc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKVxuIHtcbiBcdGlmICgoIWVmaV9ndWlkY21wKHB0ZS1cdTAwM2VwYXJ0aXRpb25fdHlwZV9ndWlkLCBOVUxMX0dVSUQpKSB8fFxuIFx0ICAgIGxlNjRfdG9fY3B1KHB0ZS1cdTAwM2VzdGFydGluZ19sYmEpIFx1MDAzZSBsYXN0bGJhICAgICAgICAgfHxcbi1cdCAgICBsZTY0X3RvX2NwdShwdGUtXHUwMDNlZW5kaW5nX2xiYSkgICBcdTAwM2UgbGFzdGxiYSlcbiYjNDM7XHQgICAgbGU2NF90b19jcHUocHRlLVx1MDAzZWVuZGluZ19sYmEpICAgXHUwMDNlIGxhc3RsYmEgICAgICAgICB8fFxuJiM0MztcdCAgICBsZTY0X3RvX2NwdShwdGUtXHUwMDNlc3RhcnRpbmdfbGJhKSBcdTAwM2UgbGU2NF90b19jcHUocHRlLVx1MDAzZWVuZGluZ19sYmEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAxO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RUZJX1BBUlRJVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VmaV9wYXJ0aXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIEVGSSBwYXJ0aXRpb24gdGFibGUgZW50cmllcyAoR1BUKSwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgc3RhcnRpbmcgTEJBIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBMQkEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gcGFyc2luZyBkaXNrIHBhcnRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjQ1MWU2ZTgzZGQ5MGJlZDk2YzNmYzU2Zjk4MDE5NGU3ZDMxODkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMTU6MjU6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuYwppbmRleCA5ODY1ZDU5MDkzZmFjMC4uMDAwMjE5YTY5N2U0MzAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9lZmkuYwpAQCAtNDYxLDcgJiM0Mzs0NjEsOCBAQCBpc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKQogewogCWlmICgoIWVmaV9ndWlkY21wKHB0ZS0mZ3Q7cGFydGl0aW9uX3R5cGVfZ3VpZCwgTlVMTF9HVUlEKSkgfHwKIAkgICAgbGU2NF90b19jcHUocHRlLSZndDtzdGFydGluZ19sYmEpICZndDsgbGFzdGxiYSAgICAgICAgIHx8Ci0JICAgIGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7ZW5kaW5nX2xiYSkgICAmZ3Q7IGxhc3RsYmEpCiYjNDM7CSAgICBsZTY0X3RvX2NwdShwdGUtJmd0O2VuZGluZ19sYmEpICAgJmd0OyBsYXN0bGJhICAgICAgICAgfHwKJiM0MzsJICAgIGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7c3RhcnRpbmdfbGJhKSAmZ3Q7IGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7ZW5kaW5nX2xiYSkpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRUZJIFBhcnRpdGlvbiBUYWJsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGlzX3B0ZV92YWxpZGAgZnVuY3Rpb24gd2l0aGluIGBibG9jay9wYXJ0aXRpb25zL2VmaS5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFkZGl0aW9uLCBhIGNoZWNrIG9uIHRoZSBwYXJ0aXRpb24gZW50cnkmIzM5O3MgTEJBczogYGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7c3RhcnRpbmdfbGJhKSAmZ3Q7IGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7ZW5kaW5nX2xiYSlgLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIHRpZ2h0ZW5pbmcgdXAgdGhlIEVGSSBwYXJ0aXRpb24gdGFibGUgcGFyc2luZy4gV2UmIzM5O3JlIG5vdyBleHBsaWNpdGx5IGludmFsaWRhdGluZyBhbnkgcGFydGl0aW9uIGVudHJ5IHdoZXJlIHRoZSBzdGFydCBMQkEgaXMgKmdyZWF0ZXIqIHRoYW4gdGhlIGVuZCBMQkEuIFRoYXTigJlzIGEgZ29vZCBjYXRjaCwgYSBjcml0aWNhbCBkYXRhIGludGVncml0eSBjaGVjay4gSW52YWxpZCBlbnRyaWVzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIGRvd24gdGhlIGxpbmUsIHNvIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGdldCB0byB0aGUgZnV6emluZy4KCkdpdmVuIHRoYXQgdGhpcyB0b3VjaGVzIHBhcnRpdGlvbiB0YWJsZSBwYXJzaW5nLCBJIG5lZWQgdG8gZ2V0IHRoZSBjb25maWcgb3B0aW9ucyBhbmQgZm9jdXMgc3ltYm9scy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZmlsZSBpbiBxdWVzdGlvbiBpcyBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AsIHNvIEkmIzM5O2xsIGNoZWNrIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgIG9yIHBvc3NpYmx5IGp1c3QgYGJsb2NrL0tjb25maWdgIGZvciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiBwbGF5IGhlcmUgYW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCB0aGUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlZmkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX0lCTV9QQVJUSVRJT04pICYjNDM7PSBpYm0ub1xuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfRUZJX1BBUlRJVElPTikgJiM0Mzs9IGVmaS5vXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19LQVJNQV9QQVJUSVRJT04pICYjNDM7PSBrYXJtYS5vXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00LSAqXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjU6ICogaHR0cDovL3d3dy51ZWZpLm9yZy9zcGVjcy9cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNi0gKiBodHRwOi8vd3d3LmludGVsLmNvbS90ZWNobm9sb2d5L2VmaS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSBteXNlbGY6CgoqKkRpdmluZyBpbnRvIHRoZSBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBFRklfUEFSVElUSU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdlJiMzOTtyZSBmb2N1c2VkIG9uLiYjMzQ7IE5vdywgYmVmb3JlIEkganVtcCBpbnRvIGltcGxlbWVudGluZyBvciBhbmFseXppbmcgYW55dGhpbmcgc3BlY2lmaWMgYWJvdXQgaXQsIEkgbmVlZCB0byBrbm93IHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIG9yIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9ucyBvciB1bmRlcmx5aW5nIHN5c3RlbXMgdGhhdCBtdXN0IGJlIGluIHBsYWNlIG9yIGVuYWJsZWQgZm9yIGBFRklfUEFSVElUSU9OYCB0byBmdW5jdGlvbiBjb3JyZWN0bHksIG9yIGV2ZW4gZm9yIGl0IHRvICptZWFuKiBzb21ldGhpbmcgaW4gdGhlIGZpcnN0IHBsYWNlPyBUaW1lIHRvIGludmVzdGlnYXRlIGFuZCBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25zdHJhaW50cyBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGluIGNvbnRleHQsIHNvIGxldCYjMzk7cyBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFRklfUEFSVElUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZz0yNDM9Y29uZmlnIEtBUk1BX1BBUlRJVElPTlxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy0yNDktXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWc6MjUwOmNvbmZpZyBFRklfUEFSVElUSU9OXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtFRkkgR1VJRCBQYXJ0aXRpb24gc3VwcG9ydFwmIzM0OyBpZiBQQVJUSVRJT05fQURWQU5DRURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBCbG9jayBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbnMgYXJlIGNvbmZpZ3VyZWQuIEkgcmVjYWxsIHRoZXJlIHdhcyBhIHNwZWNpZmljIEtjb25maWcgZmlsZSB0aGF0IGhhbmRsZXMgYSBsb3Qgb2YgdGhlIGxvdy1sZXZlbCBzZXR0aW5ncywgYW5kIEkgdGhpbmsgaXQmIzM5O3Mgd2l0aGluIHRoZSBgYmxvY2svcGFydGl0aW9ucy9gIGRpcmVjdG9yeS4gTGV0IG1lIGNoZWNrLi4uIEFoIHllcywgaGVyZSBpdCBpcyAtIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgLiBBbmQgbGluZSAyNTAuLi4gTGV0JiMzOTtzIHRha2UgYSBsb29rIHRoZXJlLCB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaG9vayBmb3IgdGhlIGtleSBmZWF0dXJlIGlzLiBIb3BlZnVsbHkgdGhhdCBsaW5lIHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgYW5kIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCBpcyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0XHRkZXBlbmRzIG9uIFBBUlRJVElPTl9BRFZBTkNFRFxuIDI0NjpcdFx0aGVscFxuIDI0NzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIG1vdW50IHRoZSBSaW8gS2FybWEgTVAzIHBsYXllciwgYXMgaXRcbiAyNDg6XHRcdCAgdXNlcyBhIHByb3ByaWV0YXJ5IHBhcnRpdGlvbiB0YWJsZS5cbiAyNDk6XHRcbiAyNTA6XHRjb25maWcgRUZJX1BBUlRJVElPTlxuIDI1MTpcdFx0Ym9vbCBcJiMzNDtFRkkgR1VJRCBQYXJ0aXRpb24gc3VwcG9ydFwmIzM0OyBpZiBQQVJUSVRJT05fQURWQU5DRURcbiAyNTI6XHRcdGRlZmF1bHQgeVxuIDI1MzpcdFx0c2VsZWN0IENSQzMyXG4gMjU0Olx0XHRoZWxwXG4gMjU1Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGhhcmQgZGlza3MgdW5kZXIgTGludXggd2hpY2hcbiAyNTY6XHRcdCAgd2VyZSBwYXJ0aXRpb25lZCB1c2luZyBFRkkgR1BULlxuIDI1NzpcdFxuIDI1ODpcdGNvbmZpZyBTWVNWNjhfUEFSVElUSU9OXG4gMjU5Olx0XHRib29sIFwmIzM0O1NZU1Y2OCBwYXJ0aXRpb24gdGFibGUgc3VwcG9ydFwmIzM0OyBpZiBQQVJUSVRJT05fQURWQU5DRURcbiAyNjA6XHRcdGRlZmF1bHQgeSBpZiBWTUVcbiAyNjE6XHRcdGhlbHBcbiAyNjI6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIGhhcmQgZGlza1xuIDI2MzpcdFx0ICBwYXJ0aXRpb24gdGFibGUgZm9ybWF0IHVzZWQgYnkgTW90b3JvbGEgRGVsdGEgbWFjaGluZXMgKHVzaW5nXG4gMjY0Olx0XHQgIHN5c3Y2OCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIEVGSSBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbiBhbmQgVmVyaWZpY2F0aW9uKioKClJpZ2h0LCBzbyBgRUZJX1BBUlRJVElPTmAgaXMgdGhlIGRlZmluaW5nIGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhhdCBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbnRvIHRoZSBjb250ZXh0IOKAkyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEVGSSBwYXJ0aXRpb25zLiBBbmQsIGltcG9ydGFudGx5LCB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBzZWxlY3RpbmcgYENSQzMyYC4gVGhhdCB0ZWxscyBtZSB0aGUgc3lzdGVtIHByb2JhYmx5IHVzZXMgQ1JDMzIgY2hlY2tzdW1zIGZvciBpbnRlZ3JpdHkgY2hlY2tzLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHRoaXMga2luZCBvZiBwYXJ0aXRpb24gc3RydWN0dXJlLgoKTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdW5kZXIgdGhlIG1pY3Jvc2NvcGUgaXMgYGlzX3B0ZV92YWxpZGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCwgYXMgaXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gaXRzIG93biB0cmFuc2xhdGlvbiB1bml0LCBzcGVjaWZpY2FsbHkgYGJsb2NrL3BhcnRpdGlvbnMvZWZpLmNgLiBUaGF0IGltcGxpZXMgd2UgYXJlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGludm9sdmVkIHdpdGggdmVyaWZ5aW5nIHRoZSBQYXJ0aXRpb24gVGFibGUgRW50cnkgKFBURSkgdmFsaWRpdHkgb24gYW4gRUZJIGRpc2suIE5vdywgbGV0JiMzOTtzIHNlZSBleGFjdGx5IHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQuIFdoZXJlIGV4YWN0bHkgYXJlIHRoZXkgY2FsbGluZyBgaXNfcHRlX3ZhbGlkYD8gVGhlIHBsYWNlcyBpdCYjMzk7cyBjYWxsZWQgZnJvbSB3aWxsIHByb3ZpZGUgdGhlIGNyaXRpY2FsIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19wdGVfdmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2VmaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MzM0PXN0YXRpYyBpbnQgaXNfZ3B0X3ZhbGlkKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHU2NCBsYmEsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NTItLyoqXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ1MzogKiBpc19wdGVfdmFsaWQoKSAtIHRlc3RzIG9uZSBQVEUgZm9yIHZhbGlkaXR5XG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ1NC0gKiBAcHRlOnB0ZSB0byBjaGVja1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NDU5PXN0YXRpYyBpbmxpbmUgaW50XG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ2MDppc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NjEte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NzEzPWludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzQtXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjczNTpcdFx0aWYgKCFpc19wdGVfdmFsaWQoXHUwMDI2cHRlc1tpXSwgbGFzdF9sYmEoc3RhdGUtXHUwMDNlZGlzaykpKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzYtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNwZWNpYWxpc3Q6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRUZJIFBhcnRpdGlvbiBQYXJzaW5nKioKCkFscmlnaHQsIHNvIHRoZSBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBgZWZpX3BhcnRpdGlvbmAsIHdoaWNoIGlzIHRvIGJlIGV4cGVjdGVkLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgRUZJIHBhcnRpdGlvbiBwYXJzaW5nIHByb2Nlc3Mg4oCTIHRoZSBwbGFjZSB3aGVyZSBpdCBhbGwgYmVnaW5zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjb25maXJtIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGNvcmUgZnVuY3Rpb24uIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgdmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgYGVmaV9wYXJ0aXRpb25gLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCB0YWtpbmcgdGhlIGNvcnJlY3QgYXJndW1lbnRzLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3Mgc2V0IHVwIHRvIGhhbmRsZSB0aGUgc3RydWN0dXJlIGFuZCBsYXlvdXQgb2YgdGhlc2UgRUZJIHBhcnRpdGlvbnMgcHJvcGVybHkuIE5vIHBvaW50IGNvbnRpbnVpbmcgZG93biB0aGUgcmFiYml0IGhvbGUgaWYgdGhlIGZvdW5kYXRpb24gaXMgc2hha3ksIHJpZ2h0PyBMZXQmIzM5O3MgY2hlY2sgdGhhdCBzaWduYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VmaV9wYXJ0aXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2VmaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmM9Njc4PXN0YXRpYyB2b2lkIHV0ZjE2X2xlX3RvXzdiaXQoY29uc3QgX19sZTE2ICppbiwgdW5zaWduZWQgaW50IHNpemUsIHU4ICpvdXQpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02OTQtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjY5NTogKiBlZmlfcGFydGl0aW9uIC0gc2NhbiBmb3IgR1BUIHBhcnRpdGlvbnNcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjk2LSAqIEBzdGF0ZTogZGlzayBwYXJzZWQgcGFydGl0aW9uc1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzEyLSAqL1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo3MTM6aW50IGVmaV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzE0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgUG90ZW50aWFsIERlcGVuZGVuY2llcyBvZiBgZWZpX3BhcnRpdGlvbmAqKgoKQWxyaWdodCwgbXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgZWZpX3BhcnRpdGlvbmAuIEkmIzM5O3ZlIHF1aWNrbHkgaWRlbnRpZmllZCB0aGF0IGFzIHRoZSBrZXkgc3ltYm9sLiBOb3csIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlICpvdGhlciogZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRvcGljLCBzbyBJJiMzOTttIGltbWVkaWF0ZWx5IGNoZWNraW5nIGZvciBvdGhlciByZWxhdGVkIHN5bWJvbHMuIEkga25vdyBgaXNfcHRlX3ZhbGlkYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgaW5saW5lLCBtZWFuaW5nIGl0JiMzOTtzIHVubGlrZWx5IHRvIGJlIGEgc2VwYXJhdGUsIGV4cG9ydGVkIHN5bWJvbCB0aGF0IHdvdWxkIHNob3cgdXAuIEkmIzM5O3ZlIGFsc28gbm90ZWQgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXMgYEVGSV9QQVJUSVRJT05gLiBJJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaGFzIGZ1cnRoZXIgaW1wbGljYXRpb25zLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYEVGSV9QQVJUSVRJT05gIGFuZCBpdHMgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQsIHNvIEkmIzM5O20gY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgS2NvbmZpZyBmaWxlIGlzIGluY2x1ZGVkIGNvbmRpdGlvbmFsbHkuIERlcGVuZGluZyBvbiBob3cgaXQmIzM5O3MgaGFuZGxlZCwgdGhpcyBjb3VsZCBzaWduaWZpY2FudGx5IGFsdGVyIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gc2VlIHdoYXQgb3RoZXIgY29uZGl0aW9ucyBtaWdodCBnYXRlIHRoZSBpbmNsdXNpb24gb2YgYEVGSV9QQVJUSVRJT05gIGluIHRoZSBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MjAyPWNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcbi0tXG5ibG9jay9LY29uZmlnLTIxMS1cbmJsb2NrL0tjb25maWc6MjEyOnNvdXJjZSBcJiMzNDtibG9jay9wYXJ0aXRpb25zL0tjb25maWdcJiMzNDtcbmJsb2NrL0tjb25maWctMjEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTI1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtjb25maWcgRGVwZW5kZW5jeSBpbiB0aGUgQmxvY2sgU3Vic3lzdGVtKioKCkFscmlnaHQsIGxldCBtZSBxdWlja2x5IHJ1biB0aHJvdWdoIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYC4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cCDigJMgaXQmIzM5O3MgaW5jbHVkZWQgZGlyZWN0bHkgaW4gYGJsb2NrL0tjb25maWdgLiBUaGF0IHVzdWFsbHkgc3VnZ2VzdHMgYSBwcmV0dHkgdGlnaHQgY291cGxpbmcsIHJpZ2h0PyBOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIHN0cnVjdHVyZS4gSXMgdGhpcyBhIHRvcC1sZXZlbCBtZW51IHRoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBvciBpcyBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYCBjb25kaXRpb25hbGx5IGluY2x1ZGVkIHVuZGVyIGFuIGBpZmAgc3RhdGVtZW50PyBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBJIHdpbGwgaGF2ZSBhIGNvbmRpdGlvbmFsLiBJZiB0aGUgbWVudSBpcyBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgdGhpcyBpcyBpbXBvcnRhbnQsIEkgd2lsbCBuZWVkIHRvIGNoZWNrIHRob3NlLiBUaGlzIHRlbGxzIG1lIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgY29uZGl0aW9uLiBJIGtub3cgSSBoYXZlIGEgbG90IG9mIHdvcmsgdG8gZG8sIGJ1dCB0aGlzIGlzIHRoZSBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwNTpcdFx0c2VsZWN0IENSWVBUT1xuIDIwNjpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuIDIwNzpcdFx0aGVscFxuIDIwODpcdFx0ICBFbmFibGluZyB0aGlzIGxldHMgdGhlIGJsb2NrIGxheWVyIGhhbmRsZSBpbmxpbmUgZW5jcnlwdGlvblxuIDIwOTpcdFx0ICBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIGtlcm5lbCBjcnlwdG8gQVBJIHdoZW4gaW5saW5lXG4gMjEwOlx0XHQgIGVuY3J5cHRpb24gaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuXG4gMjExOlx0XG4gMjEyOlx0c291cmNlIFwmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1wmIzM0O1xuIDIxMzpcdFxuIDIxNDpcdGNvbmZpZyBCTEtfUE1cbiAyMTU6XHRcdGRlZl9ib29sIFBNXG4gMjE2Olx0XG4gMjE3Olx0IyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXG4gMjE4Olx0Y29uZmlnIEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEXG4gMjE5Olx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzODAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0IG1lIHNlZS4gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHBhcnRpdGlvbiB0eXBlcyBhcmUgaGFuZGxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gQWgsIHJpZ2h0ISBMZXQmIzM5O3Mgc2VlLi4uICpXYWl0IGEgbWludXRlLi4uKiBUaGUgYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AgZmlsZSwgdGhlIG9uZSBJIHN1c3BlY3RlZCwgKmFjdHVhbGx5KiBzdGFydHMgd2l0aCBhIGBtZW51ICYjMzQ7UGFydGl0aW9uIFR5cGVzJiMzNDtgIGRlZmluaXRpb24uIE5vdCBqdXN0IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgd2hvbGUgKiptZW51KiogZGVkaWNhdGVkIHRvIHBhcnRpdGlvbiB0eXBlcyEgVGhpcyBtZWFucyB0aGF0IHRoZXJlJiMzOTtzIGEgaGlnaGVyIGxldmVsIG9mIG9yZ2FuaXphdGlvbiBhbmQgcG90ZW50aWFsIG9wdGlvbnMgYXJvdW5kIGNvbmZpZ3VyaW5nIHBhcnRpdGlvbiBzdXBwb3J0IHRoYW4gSSBpbml0aWFsbHkgYW50aWNpcGF0ZWQuIEl0JiMzOTtzIGEgc3RydWN0dXJlZCBncm91cGluZywgc3VnZ2VzdGluZyB0aGVyZSYjMzk7cyBhIGRlbGliZXJhdGUgY2F0ZWdvcml6YXRpb24gb2YgYXZhaWxhYmxlIHBhcnRpdGlvbiBmb3JtYXRzLiBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgcHJvYmFibHkgbWFueSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0byBzdXBwb3J0IHNwZWNpZmljIHR5cGVzIG9mIHBhcnRpdGlvbnMuIEludGVyZXN0aW5nLCBpdCBtZWFucyB0aGVyZSBhcmUgbWFueSBwYXJ0aXRpb24gdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgYWxzbyBzdWdnZXN0cyBhIG1vZHVsYXIgYXBwcm9hY2ggdG8gcGFydGl0aW9uIHN1cHBvcnQgd2l0aGluIHRoZSBrZXJuZWwsIHJhdGhlciB0aGFuIGEgbW9ub2xpdGhpYyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhpcyBtZW51IHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgcGFydGl0aW9uIHR5cGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoZSBwYXJ0aXRpb24gc3Vic3lzdGVtIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBQYXJ0aXRpb24gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51IFwmIzM0O1BhcnRpdGlvbiBUeXBlc1wmIzM0O1xuICAgNjpcdFxuICAgNzpcdGNvbmZpZyBQQVJUSVRJT05fQURWQU5DRURcbiAgIDg6XHRcdGJvb2wgXCYjMzQ7QWR2YW5jZWQgcGFydGl0aW9uIHNlbGVjdGlvblwmIzM0O1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXG4gIDExOlx0XHQgIHdlcmUgcGFydGl0aW9uZWQgdW5kZXIgYW4gb3BlcmF0aW5nIHN5c3RlbSBydW5uaW5nIG9uIGEgZGlmZmVyZW50XG4gIDEyOlx0XHQgIGFyY2hpdGVjdHVyZSB0aGFuIHlvdXIgTGludXggc3lzdGVtLlxuICAxMzpcdFxuICAxNDpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE1Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg2MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVGSSBQYXJ0aXRpb25pbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgRUZJX1BBUlRJVElPTmAgaXMgYSBib29sZWFuLCBhbmQgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBQQVJUSVRJT05fQURWQU5DRURgIGlzIHNlbGVjdGVkLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhbHJlYWR5IHNldCB1cCB0aGUgd2F5IEkmIzM5O2QgZXhwZWN0IGZvciBtb3N0IG1vZGVybiBzeXN0ZW1zLiBCdXQgaWYgSSB3YW50IHRvIGV4cGxpY2l0bHkgZW5zdXJlIEVGSSBHVUlEIHBhcnRpdGlvbiBzdXBwb3J0LCBJIGNhbiBqdXN0IGluY2x1ZGUgYEVGSV9QQVJUSVRJT05gIGluIHRoZSBjb25maWcuCgpIbW0sIHdhaXQuLi4gc2luY2UgYEVGSV9QQVJUSVRJT05gIGRlYWxzIHdpdGggcGFydGl0aW9uaW5nLCBkb2VzbiYjMzk7dCBpdCByZXF1aXJlIHRoZSBibG9jayBsYXllcj8gT2YgY291cnNlLCB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlcyBibG9jayBkZXZpY2VzIGFuZCBwYXJ0aXRpb25pbmcgZGVhbHMgd2l0aCBibG9jayBkZXZpY2VzLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgQkxPQ0tgIGlzIGEgcHJlcmVxdWlzaXRlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgYmxvY2svS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEJsb2NrIGxheWVyIGNvcmUgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIEJMT0NLXG4gICA2Olx0ICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbiAgIDc6XHQgICAgICAgZGVmYXVsdCB5XG4gICA4Olx0ICAgICAgIHNlbGVjdCBGU19JT01BUFxuICAgOTpcdCAgICAgICBzZWxlY3QgU0JJVE1BUFxuICAxMDpcdCAgICAgICBoZWxwXG4gIDExOlx0XHQgUHJvdmlkZSBibG9jayBsYXllciBzdXBwb3J0IGZvciB0aGUga2VybmVsLlxuICAxMjpcdFxuICAxMzpcdFx0IERpc2FibGUgdGhpcyBvcHRpb24gdG8gcmVtb3ZlIHRoZSBibG9jayBsYXllciBzdXBwb3J0IGZyb20gdGhlXG4gIDE0Olx0XHQga2VybmVsLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZXMuXG4gIDE1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFRkkgUGFydGl0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgYEJMT0NLYCBjbGVhcmx5IGFkZHJlc3NlcyBzb21ldGhpbmcgaW1wb3J0YW50LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZWVkIHRvIGVuYWJsZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUga2V5IHN5bWJvbCBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYGVmaV9wYXJ0aXRpb25gLiBUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHBhdGNoIGJvaWxzIGRvd24gdG8gaW1wcm92aW5nIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMsIHNwZWNpZmljYWxseSBmb3IgR1BULiBJdCYjMzk7cyBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrIHRvIHByZXZlbnQgYW4gaW52YWxpZCBzdGF0ZSB3aGVyZSB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIChMQkEpIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZW5kaW5nIExCQS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGVjayB3aXRoaW4gdGhlIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIGFuZCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgZGlzayBwYXJ0aXRpb24gcGFyc2luZy4KCkJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIHRob3VnaCwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYGVmaV9wYXJ0aXRpb25gIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGFmZmVjdGVkIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYGlzX3B0ZV92YWxpZGAgaXMgY2FsbGVkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gV2UgZG9uJiMzOTt0IHdhbnQgYW55IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19wdGVfdmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2VmaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MzM0PXN0YXRpYyBpbnQgaXNfZ3B0X3ZhbGlkKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHU2NCBsYmEsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NTItLyoqXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ1MzogKiBpc19wdGVfdmFsaWQoKSAtIHRlc3RzIG9uZSBQVEUgZm9yIHZhbGlkaXR5XG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ1NC0gKiBAcHRlOnB0ZSB0byBjaGVja1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NDU5PXN0YXRpYyBpbmxpbmUgaW50XG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ2MDppc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NjEte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NzEzPWludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzQtXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjczNTpcdFx0aWYgKCFpc19wdGVfdmFsaWQoXHUwMDI2cHRlc1tpXSwgbGFzdF9sYmEoc3RhdGUtXHUwMDNlZGlzaykpKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzYtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTkKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOYXJyb3dpbmcgdGhlIEZvY3VzOiBFRkkgUGFydGl0aW9uaW5nKioKCkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGlzb2xhdGVkIHdpdGhpbiB0aGUgYGVmaV9wYXJ0aXRpb25gIGNvbnRleHQsIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpczogdGhlIHByb2JsZW0gKkkqIGFtIHdyZXN0bGluZyB3aXRoIGlzIGNvbmZpbmVkIHRvIHRoZSBFRkkgcGFydGl0aW9uIGhhbmRsaW5nLiBUaGlzIGltbWVkaWF0ZWx5IHJlc3RyaWN0cyB0aGUgc2NvcGUgYW5kIGFsbG93cyBtZSB0byBhcHBseSBhbGwgbXkgcHJpb3Iga25vd2xlZGdlIGFib3V0IEVGSSBwYXJ0aXRpb25pbmcgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllci4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgaXTigJlzIHdvcnRoIHJldmlld2luZyB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVzaWRlIHdpdGggYGVmaV9wYXJ0aXRpb25gIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvYnZpb3VzIGludGVncmF0aW9uIHBvaW50cywgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgb3IgcmVsYXRlZCBsb2dpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZS4gQSBxdWljayBzY2FuIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIGNvdWxkIHZlcnkgd2VsbCB5aWVsZCBpbnNpZ2h0IHRoYXQgcHJvdmlkZXMgYW4gZWFzaWVyLCBtb3JlIG9idmlvdXMgc29sdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2Etel9BLVowLTldJiM0MzsgKSpbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9lZmkuYz05OD1zdGF0aWMgaW50IF9faW5pdFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo5OTpmb3JjZV9ncHRfZm4oY2hhciAqc3RyKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMDAte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMTAzLX1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MTA0Ol9fc2V0dXAoXCYjMzQ7Z3B0XCYjMzQ7LCBmb3JjZV9ncHRfZm4pO1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMDUtXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYz0xMTk9c3RhdGljIGlubGluZSB1MzJcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MTIwOmVmaV9jcmMzMihjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMjEte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMTMzLSAqL1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxMzQ6c3RhdGljIHU2NCBsYXN0X2xiYShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMTM1LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEzOS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MTQwOnN0YXRpYyBpbmxpbmUgaW50IHBtYnJfcGFydF92YWxpZChncHRfbWJyX3JlY29yZCAqcGFydClcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMTQxLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTE3MS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MTcyOnN0YXRpYyBpbnQgaXNfcG1icl92YWxpZChsZWdhY3lfbWJyICptYnIsIHNlY3Rvcl90IHRvdGFsX3NlY3RvcnMpXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTE3My17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0yMzMtICovXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjIzNDpzdGF0aWMgc2l6ZV90IHJlYWRfbGJhKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTIzNS1cdFx0ICAgICAgIHU2NCBsYmEsIHU4ICpidWZmZXIsIHNpemVfdCBjb3VudClcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTMwNT1zdGF0aWMgZ3B0X2hlYWRlciAqYWxsb2NfcmVhZF9ncHRfaGVhZGVyKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0zMzMtICovXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjMzNDpzdGF0aWMgaW50IGlzX2dwdF92YWxpZChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCB1NjQgbGJhLFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0zMzUtXHRcdFx0Z3B0X2hlYWRlciAqKmdwdCwgZ3B0X2VudHJ5ICoqcHRlcylcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTQ1OT1zdGF0aWMgaW5saW5lIGludFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0NjA6aXNfcHRlX3ZhbGlkKGNvbnN0IGdwdF9lbnRyeSAqcHRlLCBjb25zdCB1NjQgbGFzdGxiYSlcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNDYxLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTQ4MD1zdGF0aWMgdm9pZFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0ODE6Y29tcGFyZV9ncHRzKGdwdF9oZWFkZXIgKnBncHQsIGdwdF9oZWFkZXIgKmFncHQsIHU2NCBsYXN0bGJhKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00ODIte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNTgwLSAqL1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo1ODE6c3RhdGljIGludCBmaW5kX3ZhbGlkX2dwdChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBncHRfaGVhZGVyICoqZ3B0LFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy01ODItXHRcdFx0ICBncHRfZW50cnkgKipwdGVzKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjc3LSAqL1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo2Nzg6c3RhdGljIHZvaWQgdXRmMTZfbGVfdG9fN2JpdChjb25zdCBfX2xlMTYgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dClcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjc5LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxMi0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NzEzOmludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBFRkkgUGFydGl0aW9uIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGVmaV9wYXJ0aXRpb25gIHN0cnVjdHVyZS4gTXkgcHJpbWFyeSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciB0aGlzIGBlZmlfcGFydGl0aW9uYCBpcyBhY3R1YWxseSBhIHB1YmxpY2x5IGF2YWlsYWJsZSwgZXhwb3J0ZWQgZW50aXR5IG9yIGlmIGl0JiMzOTtzIG1vcmUgb2YgYW4gaW50ZXJuYWwgc3RydWN0dXJlLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBvZiBpbmZsdWVuY2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyAqdXNlZCouIElzIGl0IGRpcmVjdGx5IGVtYmVkZGVkIHdpdGhpbiBsYXJnZXIsIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/IElzIGl0IHJlZmVyZW5jZWQgYnkgcG9pbnRlcnM/IFVuZGVyc3RhbmRpbmcgaXRzIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgc3RydWN0dXJlcyB3aWxsIGlsbHVtaW5hdGUgaXRzIGZ1bmN0aW9uIGFuZCBzaWduaWZpY2FuY2UgaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1hcCBvdXQgaXRzICYjMzQ7ZmFtaWx5IHRyZWUmIzM0OyB3aXRoaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VmaV9wYXJ0aXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2NoZWNrLmg9NTY9aW50IGNtZGxpbmVfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpO1xuYmxvY2svcGFydGl0aW9ucy9jaGVjay5oOjU3OmludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpO1xuYmxvY2svcGFydGl0aW9ucy9jaGVjay5oLTU4LWludCBpYm1fcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0xNz1zdGF0aWMgaW50ICgqY29uc3QgY2hlY2tfcGFydFtdKShzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKikgPSB7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTEtI2lmZGVmIENPTkZJR19FRklfUEFSVElUSU9OXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo1MjpcdGVmaV9wYXJ0aXRpb24sXHRcdC8qIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBtc2RvcyAqL1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTMtI2VuZGlmXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYz02Nzg9c3RhdGljIHZvaWQgdXRmMTZfbGVfdG9fN2JpdChjb25zdCBfX2xlMTYgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dClcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTY5NC0vKipcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6Njk1OiAqIGVmaV9wYXJ0aXRpb24gLSBzY2FuIGZvciBHUFQgcGFydGl0aW9uc1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02OTYtICogQHN0YXRlOiBkaXNrIHBhcnNlZCBwYXJ0aXRpb25zXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MTItICovXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjcxMzppbnQgZWZpX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDb25maXJtaW5nIEVGSSBQYXJ0aXRpb24gSGFuZGxpbmcgYW5kIERlcGVuZGVuY2llcyoqCgpSaWdodCwgKmVmaV9wYXJ0aXRpb24qIGlzIGluZGVlZCBwcmVzZW50IHdpdGhpbiB0aGUgKmNoZWNrX3BhcnQqIGFycmF5LCBpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiBUaGlzIGNvbmZpcm1zIHRoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IHN5bWJvbCBmb3IgcGFydGl0aW9uIGNoZWNrcy4KCk5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGZ1cnRoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgcmVjYWxsIHRoYXQgYEVGSV9QQVJUSVRJT05gIGhhcyBhIGRlcGVuZGVuY3kgb24gYFBBUlRJVElPTl9BRFZBTkNFRGAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhhdC4gVGhpcyBsaWtlbHkgaW1wYWN0cyB0aGUgZW5hYmxlbWVudCBvciBiZWhhdmlvciBvZiBgRUZJX1BBUlRJVElPTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJUSVRJT05fQURWQU5DRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTU9bWVudSBcJiMzNDtQYXJ0aXRpb24gVHlwZXNcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy02LVxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjc6Y29uZmlnIFBBUlRJVElPTl9BRFZBTkNFRFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTgtXHRib29sIFwmIzM0O0FkdmFuY2VkIHBhcnRpdGlvbiBzZWxlY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIGFzIHRob3VnaCBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIEVGSSBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgdG8gZW5hYmxlIGBQQVJUSVRJT05fQURWQU5DRURgLiBUaGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGZvciBtb3JlIGNvbXBsZXggcGFydGl0aW9uIHNldHVwcy4gVGhlbiBJIHNlZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIGlzIGEgYm9vbGVhbiwgYW5kIGl0cyBkZWZpbml0aW9uIGhhcyBhIGNydWNpYWwgY29uZGl0aW9uYWw6ICYjMzQ7aWYgUEFSVElUSU9OX0FEVkFOQ0VEJiMzNDsuIFRoaXMgbWVhbnMgaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXMgZGlzYWJsZWQsIGBFRklfUEFSVElUSU9OYCBpcyBlZmZlY3RpdmVseSBoaWRkZW4gZnJvbSB0aGUgdXNlciwgZXZlbiB0aG91Z2ggaXRzIGBkZWZhdWx0IHlgIGlzIHByZXNlbnQuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IGRlZmF1bHQgdmFsdWUgaXMgYHlgISBUaGF0IG1lYW5zIGV2ZW4gaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXNuJiMzOTt0IGV4cGxpY2l0bHkgc2V0LCBgRUZJX1BBUlRJVElPTmAgd2lsbCBzdGlsbCBiZSBjb21waWxlZCAqaW50byogdGhlIGtlcm5lbCB3aXRoIGEgZGVmYXVsdCBvZiB5ZXMsIGlmIHRoZSBicm9hZGVyIGFkdmFuY2VkIHBhcnRpdGlvbmluZyBmZWF0dXJlIGlzbiYjMzk7dCBzZWxlY3RlZC4gVGhlIHZpc2libGUgVUkgZWxlbWVudCBpcyBzdGlsbCBoaWRkZW4sIGJ1dCB0aGUgY29kZSBtYXkgc3RpbGwgYmUgYWN0aXZlLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZSwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYCBmaWxlIGFuZCBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoZSBgRUZJX1BBUlRJVElPTmAgZGVmaW5pdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlbmRlZCB1c2FnZSBvZiB0aGlzIHNldHRpbmcuIFRoaXMgd2hvbGUgdGhpbmcgc21lbGxzIGxpa2UgYSBmZWF0dXJlIGZsYWcgd2l0aCBhIHByZS1zZXQgZGVmYXVsdCAtIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBmZWF0dXJlcyBhcmUgaW1wYWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdGRlcGVuZHMgb24gUEFSVElUSU9OX0FEVkFOQ0VEXG4gMjQ2Olx0XHRoZWxwXG4gMjQ3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gbW91bnQgdGhlIFJpbyBLYXJtYSBNUDMgcGxheWVyLCBhcyBpdFxuIDI0ODpcdFx0ICB1c2VzIGEgcHJvcHJpZXRhcnkgcGFydGl0aW9uIHRhYmxlLlxuIDI0OTpcdFxuIDI1MDpcdGNvbmZpZyBFRklfUEFSVElUSU9OXG4gMjUxOlx0XHRib29sIFwmIzM0O0VGSSBHVUlEIFBhcnRpdGlvbiBzdXBwb3J0XCYjMzQ7IGlmIFBBUlRJVElPTl9BRFZBTkNFRFxuIDI1MjpcdFx0ZGVmYXVsdCB5XG4gMjUzOlx0XHRzZWxlY3QgQ1JDMzJcbiAyNTQ6XHRcdGhlbHBcbiAyNTU6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgaGFyZCBkaXNrcyB1bmRlciBMaW51eCB3aGljaFxuIDI1NjpcdFx0ICB3ZXJlIHBhcnRpdGlvbmVkIHVzaW5nIEVGSSBHUFQuXG4gMjU3Olx0XG4gMjU4Olx0Y29uZmlnIFNZU1Y2OF9QQVJUSVRJT05cbiAyNTk6XHRcdGJvb2wgXCYjMzQ7U1lTVjY4IHBhcnRpdGlvbiB0YWJsZSBzdXBwb3J0XCYjMzQ7IGlmIFBBUlRJVElPTl9BRFZBTkNFRFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTgxCgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyB0aGF0IGBib29sICYjMzQ7RUZJIEdVSUQgUGFydGl0aW9uIHN1cHBvcnQmIzM0OyBpZiBQQVJUSVRJT05fQURWQU5DRURgIG1lYW50IGl0JiMzOTtzICpjb25kaXRpb25hbGx5KiBlbmFibGVkLCBidXQgdGhlIGBkZWZhdWx0IHlgIG92ZXJyaWRlcyB0aGF0OyBpdCYjMzk7cyBhbHdheXMgb24gdW5sZXNzIGBQQVJUSVRJT05fQURWQU5DRURgIGlzIHNwZWNpZmljYWxseSAqZGlzYWJsZWQqLiBTbywgc2V0dGluZyBgRUZJX1BBUlRJVElPTmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGV2ZW4gaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXNuJiMzOTt0IHNwZWNpZmllZC4gSXQgc2VlbXMgcmVkdW5kYW50IHRvIGluY2x1ZGUgYFBBUlRJVElPTl9BRFZBTkNFRGAgaGVyZS4gSW4gZmFjdCwgaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXNuJiMzOTt0IGV2ZW4gZGVmaW5lZCwgYEVGSV9QQVJUSVRJT05gIGlzIHN0aWxsIGB5YCBieSBkZWZhdWx0LiBXZSBqdXN0IG5lZWQgdG8gZGVmaW5lIGBFRklfUEFSVElUSU9OYC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgQkxPQ0tgIGFuZCBgQ1JDMzJgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYWxvbmcgd2l0aCB0aGUgcGFydGl0aW9uIHNjaGVtZSBpbiBxdWVzdGlvbi4KClRoZXJlZm9yZSwgbXkgc2ltcGxpZmllZCBjb25maWd1cmF0aW9uIHNob3VsZCBqdXN0IGJlIGBFRklfUEFSVElUSU9OYCwgd2hpY2ggaXMgdGhlIGtleSBoZXJlLiBUaGUgZm9jdXMgc3ltYm9sIGlzIGBlZmlfcGFydGl0aW9uYCwgdGhhdCYjMzk7cyB0aGUgcG9pbnQgb2YgaW50ZXJlc3QuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBjb25maWd1cmF0aW9uIGJhc2VkIG9uIG15IGZpbmRpbmdzOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYCAtIFRoaXMgaXMgY2xlYXJseSBhIGNoYW5nZSB0byBwYXJ0aXRpb24gcGFyc2luZywgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbJiMzNDtlZmlfcGFydGl0aW9uJiMzNDtdYCAtIFRoaXMgaXMgdGhlIGNlbnRyYWwgYXNwZWN0IG9mIHRoZSBuZXcgdmFsaWRhdGlvbi4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgWyYjMzQ7RUZJX1BBUlRJVElPTiYjMzQ7XWAgLSBUaGlzIGVuYWJsZXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LgoqICAgKipSZWFzb25pbmc6KiogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIEVGSSBwYXJ0aXRpb24gdGFibGUgZW50cmllcyAoR1BUKSwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgc3RhcnRpbmcgTEJBIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBMQkEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gcGFyc2luZyBkaXNrIHBhcnRpdGlvbnMuJiMzNDsKCkkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudCwgc28gbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QQVJUSVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfcGFydGl0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMgKEdQVCksIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB0byBlbnN1cmUgdGhlIHN0YXJ0aW5nIExCQSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgTEJBLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIHBhcnNpbmcgZGlzayBwYXJ0aXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUEFSVElUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX3BhcnRpdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgRUZJIHBhcnRpdGlvbiB0YWJsZSBlbnRyaWVzIChHUFQpLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzdGFydGluZyBMQkEgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgZW5kaW5nIExCQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgd2hlbiBwYXJzaW5nIGRpc2sgcGFydGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI1OjU1LjY5MjM5NDcxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1ODM1NjUwMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QQVJUSVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIEVGSSBwYXJ0aXRpb24gdGFibGUgZW50cmllcyAoR1BUKSwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgc3RhcnRpbmcgTEJBIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBMQkEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gcGFyc2luZyBkaXNrIHBhcnRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI1OjU1LjY5MjQwMjUzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExMjQyODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzI0NTFlNmU4M2RkOTBiZWQ5NmMzZmM1NmY5ODAxOTRlN2QzMTg5M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNToyNTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xcbmluZGV4IDk4NjVkNTkwOTNmYWMwLi4wMDAyMTlhNjk3ZTQzMCAxMDA2NDRcXG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jXFxuKysrIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xcbkBAIC00NjEsNyArNDYxLDggQEAgaXNfcHRlX3ZhbGlkKGNvbnN0IGdwdF9lbnRyeSAqcHRlLCBjb25zdCB1NjQgbGFzdGxiYSlcXG4ge1xcbiBcXHRpZiAoKCFlZmlfZ3VpZGNtcChwdGUtXFx1MDAzZXBhcnRpdGlvbl90eXBlX2d1aWQsIE5VTExfR1VJRCkpIHx8XFxuIFxcdCAgICBsZTY0X3RvX2NwdShwdGUtXFx1MDAzZXN0YXJ0aW5nX2xiYSkgXFx1MDAzZSBsYXN0bGJhICAgICAgICAgfHxcXG4tXFx0ICAgIGxlNjRfdG9fY3B1KHB0ZS1cXHUwMDNlZW5kaW5nX2xiYSkgICBcXHUwMDNlIGxhc3RsYmEpXFxuK1xcdCAgICBsZTY0X3RvX2NwdShwdGUtXFx1MDAzZWVuZGluZ19sYmEpICAgXFx1MDAzZSBsYXN0bGJhICAgICAgICAgfHxcXG4rXFx0ICAgIGxlNjRfdG9fY3B1KHB0ZS1cXHUwMDNlc3RhcnRpbmdfbGJhKSBcXHUwMDNlIGxlNjRfdG9fY3B1KHB0ZS1cXHUwMDNlZW5kaW5nX2xiYSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gMTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNTo1Ni4xMDQzMjA1NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTQyMzcxNjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUEFSVElUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZWZpX3BhcnRpdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMgKEdQVCksIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB0byBlbnN1cmUgdGhlIHN0YXJ0aW5nIExCQSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgTEJBLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIHBhcnNpbmcgZGlzayBwYXJ0aXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjQ1MWU2ZTgzZGQ5MGJlZDk2YzNmYzU2Zjk4MDE5NGU3ZDMxODkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTU6MjU6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xuaW5kZXggOTg2NWQ1OTA5M2ZhYzAuLjAwMDIxOWE2OTdlNDMwIDEwMDY0NFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xuKysrIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xuQEAgLTQ2MSw3ICs0NjEsOCBAQCBpc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKVxuIHtcbiBcdGlmICgoIWVmaV9ndWlkY21wKHB0ZS1cdTAwM2VwYXJ0aXRpb25fdHlwZV9ndWlkLCBOVUxMX0dVSUQpKSB8fFxuIFx0ICAgIGxlNjRfdG9fY3B1KHB0ZS1cdTAwM2VzdGFydGluZ19sYmEpIFx1MDAzZSBsYXN0bGJhICAgICAgICAgfHxcbi1cdCAgICBsZTY0X3RvX2NwdShwdGUtXHUwMDNlZW5kaW5nX2xiYSkgICBcdTAwM2UgbGFzdGxiYSlcbitcdCAgICBsZTY0X3RvX2NwdShwdGUtXHUwMDNlZW5kaW5nX2xiYSkgICBcdTAwM2UgbGFzdGxiYSAgICAgICAgIHx8XG4rXHQgICAgbGU2NF90b19jcHUocHRlLVx1MDAzZXN0YXJ0aW5nX2xiYSkgXHUwMDNlIGxlNjRfdG9fY3B1KHB0ZS1cdTAwM2VlbmRpbmdfbGJhKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNTo1Ni4xMDQzMjE5OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA2Njg5MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRUZJIFBhcnRpdGlvbiBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBpc19wdGVfdmFsaWRgIGZ1bmN0aW9uIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFkZGl0aW9uLCBhIGNoZWNrIG9uIHRoZSBwYXJ0aXRpb24gZW50cnkncyBMQkFzOiBgbGU2NF90b19jcHUocHRlLVx1MDAzZXN0YXJ0aW5nX2xiYSkgXHUwMDNlIGxlNjRfdG9fY3B1KHB0ZS1cdTAwM2VlbmRpbmdfbGJhKWAuIEZ1bmN0aW9uYWxseSwgaXQncyB0aWdodGVuaW5nIHVwIHRoZSBFRkkgcGFydGl0aW9uIHRhYmxlIHBhcnNpbmcuIFdlJ3JlIG5vdyBleHBsaWNpdGx5IGludmFsaWRhdGluZyBhbnkgcGFydGl0aW9uIGVudHJ5IHdoZXJlIHRoZSBzdGFydCBMQkEgaXMgKmdyZWF0ZXIqIHRoYW4gdGhlIGVuZCBMQkEuIFRoYXTigJlzIGEgZ29vZCBjYXRjaCwgYSBjcml0aWNhbCBkYXRhIGludGVncml0eSBjaGVjay4gSW52YWxpZCBlbnRyaWVzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIGRvd24gdGhlIGxpbmUsIHNvIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGdldCB0byB0aGUgZnV6emluZy5cblxuR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgcGFydGl0aW9uIHRhYmxlIHBhcnNpbmcsIEkgbmVlZCB0byBnZXQgdGhlIGNvbmZpZyBvcHRpb25zIGFuZCBmb2N1cyBzeW1ib2xzLiBMZXQncyBzZWUuLi4gdGhlIGZpbGUgaW4gcXVlc3Rpb24gaXMgYGJsb2NrL3BhcnRpdGlvbnMvZWZpLmNgLCBzbyBJJ2xsIGNoZWNrIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgIG9yIHBvc3NpYmx5IGp1c3QgYGJsb2NrL0tjb25maWdgIGZvciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHBsYXkgaGVyZSBhbmQgaG93IHRoaXMgbWlnaHQgaW1wYWN0IHRoZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MDAuNzExMDEzMDM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODMzMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmaS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX0lCTV9QQVJUSVRJT04pICs9IGlibS5vXFxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfRUZJX1BBUlRJVElPTikgKz0gZWZpLm9cXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19LQVJNQV9QQVJUSVRJT04pICs9IGthcm1hLm9cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNC0gKlxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NTogKiBodHRwOi8vd3d3LnVlZmkub3JnL3NwZWNzL1xcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNi0gKiBodHRwOi8vd3d3LmludGVsLmNvbS90ZWNobm9sb2d5L2VmaS9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MDAuNzY4ODUzNjQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NjkwODI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGxpa2UgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgRUZJX1BBUlRJVElPTmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdlJ3JlIGZvY3VzZWQgb24uXCIgTm93LCBiZWZvcmUgSSBqdW1wIGludG8gaW1wbGVtZW50aW5nIG9yIGFuYWx5emluZyBhbnl0aGluZyBzcGVjaWZpYyBhYm91dCBpdCwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHVuZGVybHlpbmcgc3lzdGVtcyB0aGF0IG11c3QgYmUgaW4gcGxhY2Ugb3IgZW5hYmxlZCBmb3IgYEVGSV9QQVJUSVRJT05gIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgb3IgZXZlbiBmb3IgaXQgdG8gKm1lYW4qIHNvbWV0aGluZyBpbiB0aGUgZmlyc3QgcGxhY2U/IFRpbWUgdG8gaW52ZXN0aWdhdGUgYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnN0cmFpbnRzIGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbmZpZ3VyYXRpb24gaW4gY29udGV4dCwgc28gbGV0J3MgY2hlY2sgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjA0LjA0NTc2NTU3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODgxMzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRUZJX1BBUlRJVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTI0Mz1jb25maWcgS0FSTUFfUEFSVElUSU9OXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjQ5LVxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZzoyNTA6Y29uZmlnIEVGSV9QQVJUSVRJT05cXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkVGSSBHVUlEIFBhcnRpdGlvbiBzdXBwb3J0XFxcIiBpZiBQQVJUSVRJT05fQURWQU5DRURcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MDQuMTA0NTg0MTI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MjI1NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBCbG9jayBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBibG9jayBkZXZpY2UgcGFydGl0aW9ucyBhcmUgY29uZmlndXJlZC4gSSByZWNhbGwgdGhlcmUgd2FzIGEgc3BlY2lmaWMgS2NvbmZpZyBmaWxlIHRoYXQgaGFuZGxlcyBhIGxvdCBvZiB0aGUgbG93LWxldmVsIHNldHRpbmdzLCBhbmQgSSB0aGluayBpdCdzIHdpdGhpbiB0aGUgYGJsb2NrL3BhcnRpdGlvbnMvYCBkaXJlY3RvcnkuIExldCBtZSBjaGVjay4uLiBBaCB5ZXMsIGhlcmUgaXQgaXMgLSBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYC4gQW5kIGxpbmUgMjUwLi4uIExldCdzIHRha2UgYSBsb29rIHRoZXJlLCB0aGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBob29rIGZvciB0aGUga2V5IGZlYXR1cmUgaXMuIEhvcGVmdWxseSB0aGF0IGxpbmUgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBhbmQgSSBjYW4gZmlndXJlIG91dCB3aGF0IGlzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MDcuNDY2ODQyODY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRcXHRkZXBlbmRzIG9uIFBBUlRJVElPTl9BRFZBTkNFRFxcbiAyNDY6XFx0XFx0aGVscFxcbiAyNDc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIG1vdW50IHRoZSBSaW8gS2FybWEgTVAzIHBsYXllciwgYXMgaXRcXG4gMjQ4OlxcdFxcdCAgdXNlcyBhIHByb3ByaWV0YXJ5IHBhcnRpdGlvbiB0YWJsZS5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0Y29uZmlnIEVGSV9QQVJUSVRJT05cXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkVGSSBHVUlEIFBhcnRpdGlvbiBzdXBwb3J0XFxcIiBpZiBQQVJUSVRJT05fQURWQU5DRURcXG4gMjUyOlxcdFxcdGRlZmF1bHQgeVxcbiAyNTM6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDI1NDpcXHRcXHRoZWxwXFxuIDI1NTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGhhcmQgZGlza3MgdW5kZXIgTGludXggd2hpY2hcXG4gMjU2OlxcdFxcdCAgd2VyZSBwYXJ0aXRpb25lZCB1c2luZyBFRkkgR1BULlxcbiAyNTc6XFx0XFxuIDI1ODpcXHRjb25maWcgU1lTVjY4X1BBUlRJVElPTlxcbiAyNTk6XFx0XFx0Ym9vbCBcXFwiU1lTVjY4IHBhcnRpdGlvbiB0YWJsZSBzdXBwb3J0XFxcIiBpZiBQQVJUSVRJT05fQURWQU5DRURcXG4gMjYwOlxcdFxcdGRlZmF1bHQgeSBpZiBWTUVcXG4gMjYxOlxcdFxcdGhlbHBcXG4gMjYyOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIGhhcmQgZGlza1xcbiAyNjM6XFx0XFx0ICBwYXJ0aXRpb24gdGFibGUgZm9ybWF0IHVzZWQgYnkgTW90b3JvbGEgRGVsdGEgbWFjaGluZXMgKHVzaW5nXFxuIDI2NDpcXHRcXHQgIHN5c3Y2OCkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjA3LjQ2NjkxNzQyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODczOTE4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIEVGSSBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbiBhbmQgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIGBFRklfUEFSVElUSU9OYCBpcyB0aGUgZGVmaW5pbmcgY29uZmlndXJhdGlvbiBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IGNsdWVzIG1lIGludG8gdGhlIGNvbnRleHQg4oCTIHdlJ3JlIGRlYWxpbmcgd2l0aCBFRkkgcGFydGl0aW9ucy4gQW5kLCBpbXBvcnRhbnRseSwgdGhpcyBjb25maWd1cmF0aW9uIGlzIGFsc28gc2VsZWN0aW5nIGBDUkMzMmAuIFRoYXQgdGVsbHMgbWUgdGhlIHN5c3RlbSBwcm9iYWJseSB1c2VzIENSQzMyIGNoZWNrc3VtcyBmb3IgaW50ZWdyaXR5IGNoZWNrcywgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGtpbmQgb2YgcGFydGl0aW9uIHN0cnVjdHVyZS5cblxuTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdW5kZXIgdGhlIG1pY3Jvc2NvcGUgaXMgYGlzX3B0ZV92YWxpZGAuIEl0J3Mgc3RhdGljLCB3aGljaCBpcyBnb29kLCBhcyBpdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byBpdHMgb3duIHRyYW5zbGF0aW9uIHVuaXQsIHNwZWNpZmljYWxseSBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AuIFRoYXQgaW1wbGllcyB3ZSBhcmUgbG9va2luZyBhdCBzb21ldGhpbmcgaW52b2x2ZWQgd2l0aCB2ZXJpZnlpbmcgdGhlIFBhcnRpdGlvbiBUYWJsZSBFbnRyeSAoUFRFKSB2YWxpZGl0eSBvbiBhbiBFRkkgZGlzay4gTm93LCBsZXQncyBzZWUgZXhhY3RseSB3aGVyZSBpdCBpcyBiZWluZyB1c2VkLiBXaGVyZSBleGFjdGx5IGFyZSB0aGV5IGNhbGxpbmcgYGlzX3B0ZV92YWxpZGA/IFRoZSBwbGFjZXMgaXQncyBjYWxsZWQgZnJvbSB3aWxsIHByb3ZpZGUgdGhlIGNyaXRpY2FsIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjoxMC43NTQzMTMyMTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzU2MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX3B0ZV92YWxpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9wYXJ0aXRpb25zL2VmaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MzM0PXN0YXRpYyBpbnQgaXNfZ3B0X3ZhbGlkKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHU2NCBsYmEsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ1Mi0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ1MzogKiBpc19wdGVfdmFsaWQoKSAtIHRlc3RzIG9uZSBQVEUgZm9yIHZhbGlkaXR5XFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NTQtICogQHB0ZTpwdGUgdG8gY2hlY2tcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NDU5PXN0YXRpYyBpbmxpbmUgaW50XFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0NjA6aXNfcHRlX3ZhbGlkKGNvbnN0IGdwdF9lbnRyeSAqcHRlLCBjb25zdCB1NjQgbGFzdGxiYSlcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ2MS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTcxMz1pbnQgZWZpX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzQtXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo3MzU6XFx0XFx0aWYgKCFpc19wdGVfdmFsaWQoXFx1MDAyNnB0ZXNbaV0sIGxhc3RfbGJhKHN0YXRlLVxcdTAwM2VkaXNrKSkpXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzYtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjEwLjgxMzY3NTA1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc4NDE5ODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzcGVjaWFsaXN0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRUZJIFBhcnRpdGlvbiBQYXJzaW5nKipcblxuQWxyaWdodCwgc28gdGhlIGNhbGwgb3JpZ2luYXRlcyBmcm9tIGBlZmlfcGFydGl0aW9uYCwgd2hpY2ggaXMgdG8gYmUgZXhwZWN0ZWQuIFRoYXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIEVGSSBwYXJ0aXRpb24gcGFyc2luZyBwcm9jZXNzIOKAkyB0aGUgcGxhY2Ugd2hlcmUgaXQgYWxsIGJlZ2lucy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY29uZmlybSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBjb3JlIGZ1bmN0aW9uLiBMZXQncyBkZWx2ZSBpbiBhbmQgdmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgYGVmaV9wYXJ0aXRpb25gLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgYW5kIHRha2luZyB0aGUgY29ycmVjdCBhcmd1bWVudHMuIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIHNldCB1cCB0byBoYW5kbGUgdGhlIHN0cnVjdHVyZSBhbmQgbGF5b3V0IG9mIHRoZXNlIEVGSSBwYXJ0aXRpb25zIHByb3Blcmx5LiBObyBwb2ludCBjb250aW51aW5nIGRvd24gdGhlIHJhYmJpdCBob2xlIGlmIHRoZSBmb3VuZGF0aW9uIGlzIHNoYWt5LCByaWdodD8gTGV0J3MgY2hlY2sgdGhhdCBzaWduYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjoxNC41OTIwOTc3NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDA5Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmaV9wYXJ0aXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svcGFydGl0aW9ucy9lZmkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL2VmaS5jPTY3OD1zdGF0aWMgdm9pZCB1dGYxNl9sZV90b183Yml0KGNvbnN0IF9fbGUxNiAqaW4sIHVuc2lnbmVkIGludCBzaXplLCB1OCAqb3V0KVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02OTQtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo2OTU6ICogZWZpX3BhcnRpdGlvbiAtIHNjYW4gZm9yIEdQVCBwYXJ0aXRpb25zXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02OTYtICogQHN0YXRlOiBkaXNrIHBhcnNlZCBwYXJ0aXRpb25zXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxMi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjcxMzppbnQgZWZpX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MTQuNjUzMTEzNDY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTkxMjIzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgUG90ZW50aWFsIERlcGVuZGVuY2llcyBvZiBgZWZpX3BhcnRpdGlvbmAqKlxuXG5BbHJpZ2h0LCBteSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBlZmlfcGFydGl0aW9uYC4gSSd2ZSBxdWlja2x5IGlkZW50aWZpZWQgdGhhdCBhcyB0aGUga2V5IHN5bWJvbC4gTm93LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSAqb3RoZXIqIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b3BpYywgc28gSSdtIGltbWVkaWF0ZWx5IGNoZWNraW5nIGZvciBvdGhlciByZWxhdGVkIHN5bWJvbHMuIEkga25vdyBgaXNfcHRlX3ZhbGlkYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgaW5saW5lLCBtZWFuaW5nIGl0J3MgdW5saWtlbHkgdG8gYmUgYSBzZXBhcmF0ZSwgZXhwb3J0ZWQgc3ltYm9sIHRoYXQgd291bGQgc2hvdyB1cC4gSSd2ZSBhbHNvIG5vdGVkIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRpcmVjdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlzIGBFRklfUEFSVElUSU9OYC4gSSd2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaGFzIGZ1cnRoZXIgaW1wbGljYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgRUZJX1BBUlRJVElPTmAgYW5kIGl0cyBzdXJyb3VuZGluZyBlbnZpcm9ubWVudCwgc28gSSdtIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXMuIEkga25vdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgd2l0aGluIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0IEtjb25maWcgZmlsZSBpcyBpbmNsdWRlZCBjb25kaXRpb25hbGx5LiBEZXBlbmRpbmcgb24gaG93IGl0J3MgaGFuZGxlZCwgdGhpcyBjb3VsZCBzaWduaWZpY2FudGx5IGFsdGVyIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gc2VlIHdoYXQgb3RoZXIgY29uZGl0aW9ucyBtaWdodCBnYXRlIHRoZSBpbmNsdXNpb24gb2YgYEVGSV9QQVJUSVRJT05gIGluIHRoZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MTguNDcyMjM4Mjg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM5MzIyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZSBcXFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0yMDI9Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xcbi0tXFxuYmxvY2svS2NvbmZpZy0yMTEtXFxuYmxvY2svS2NvbmZpZzoyMTI6c291cmNlIFxcXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWdcXFwiXFxuYmxvY2svS2NvbmZpZy0yMTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjE5LjgxMTU2ODQ1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM2OTI1MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBEZXBlbmRlbmN5IGluIHRoZSBCbG9jayBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBydW4gdGhyb3VnaCB0aGlzLiBJJ20gbG9va2luZyBhdCBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYC4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cCDigJMgaXQncyBpbmNsdWRlZCBkaXJlY3RseSBpbiBgYmxvY2svS2NvbmZpZ2AuIFRoYXQgdXN1YWxseSBzdWdnZXN0cyBhIHByZXR0eSB0aWdodCBjb3VwbGluZywgcmlnaHQ/IE5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgc3RydWN0dXJlLiBJcyB0aGlzIGEgdG9wLWxldmVsIG1lbnUgdGhhdCBJJ20gbG9va2luZyBhdCwgb3IgaXMgYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AgY29uZGl0aW9uYWxseSBpbmNsdWRlZCB1bmRlciBhbiBgaWZgIHN0YXRlbWVudD8gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgSSB3aWxsIGhhdmUgYSBjb25kaXRpb25hbC4gSWYgdGhlIG1lbnUgaXMgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBiYXNlZCBvbiBvdGhlciBjb25maWd1cmF0aW9ucywgSSBrbm93IHRoaXMgaXMgaW1wb3J0YW50LCBJIHdpbGwgbmVlZCB0byBjaGVjayB0aG9zZS4gVGhpcyB0ZWxscyBtZSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGNvbmRpdGlvbi4gSSBrbm93IEkgaGF2ZSBhIGxvdCBvZiB3b3JrIHRvIGRvLCBidXQgdGhpcyBpcyB0aGUgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjIzLjA0ODQ5NTk1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuIDIwNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXFxuIDIwNzpcXHRcXHRoZWxwXFxuIDIwODpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlIGlubGluZSBlbmNyeXB0aW9uXFxuIDIwOTpcXHRcXHQgIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUga2VybmVsIGNyeXB0byBBUEkgd2hlbiBpbmxpbmVcXG4gMjEwOlxcdFxcdCAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC5cXG4gMjExOlxcdFxcbiAyMTI6XFx0c291cmNlIFxcXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWdcXFwiXFxuIDIxMzpcXHRcXG4gMjE0OlxcdGNvbmZpZyBCTEtfUE1cXG4gMjE1OlxcdFxcdGRlZl9ib29sIFBNXFxuIDIxNjpcXHRcXG4gMjE3OlxcdCMgZG8gbm90IHVzZSBpbiBuZXcgY29kZVxcbiAyMTg6XFx0Y29uZmlnIEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEXFxuIDIxOTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjIzLjA0ODU2MTIzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAxNjgwNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQgbWUgc2VlLiBJJ20gZGlnZ2luZyBpbnRvIGhvdyBwYXJ0aXRpb24gdHlwZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGlzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEFoLCByaWdodCEgTGV0J3Mgc2VlLi4uICpXYWl0IGEgbWludXRlLi4uKiBUaGUgYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AgZmlsZSwgdGhlIG9uZSBJIHN1c3BlY3RlZCwgKmFjdHVhbGx5KiBzdGFydHMgd2l0aCBhIGBtZW51IFwiUGFydGl0aW9uIFR5cGVzXCJgIGRlZmluaXRpb24uIE5vdCBqdXN0IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgd2hvbGUgKiptZW51KiogZGVkaWNhdGVkIHRvIHBhcnRpdGlvbiB0eXBlcyEgVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBoaWdoZXIgbGV2ZWwgb2Ygb3JnYW5pemF0aW9uIGFuZCBwb3RlbnRpYWwgb3B0aW9ucyBhcm91bmQgY29uZmlndXJpbmcgcGFydGl0aW9uIHN1cHBvcnQgdGhhbiBJIGluaXRpYWxseSBhbnRpY2lwYXRlZC4gSXQncyBhIHN0cnVjdHVyZWQgZ3JvdXBpbmcsIHN1Z2dlc3RpbmcgdGhlcmUncyBhIGRlbGliZXJhdGUgY2F0ZWdvcml6YXRpb24gb2YgYXZhaWxhYmxlIHBhcnRpdGlvbiBmb3JtYXRzLiBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgcHJvYmFibHkgbWFueSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0byBzdXBwb3J0IHNwZWNpZmljIHR5cGVzIG9mIHBhcnRpdGlvbnMuIEludGVyZXN0aW5nLCBpdCBtZWFucyB0aGVyZSBhcmUgbWFueSBwYXJ0aXRpb24gdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgYWxzbyBzdWdnZXN0cyBhIG1vZHVsYXIgYXBwcm9hY2ggdG8gcGFydGl0aW9uIHN1cHBvcnQgd2l0aGluIHRoZSBrZXJuZWwsIHJhdGhlciB0aGFuIGEgbW9ub2xpdGhpYyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhpcyBtZW51IHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgcGFydGl0aW9uIHR5cGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoZSBwYXJ0aXRpb24gc3Vic3lzdGVtIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjoyOC44NTAyNDQ2NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQYXJ0aXRpb24gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudSBcXFwiUGFydGl0aW9uIFR5cGVzXFxcIlxcbiAgIDY6XFx0XFxuICAgNzpcXHRjb25maWcgUEFSVElUSU9OX0FEVkFOQ0VEXFxuICAgODpcXHRcXHRib29sIFxcXCJBZHZhbmNlZCBwYXJ0aXRpb24gc2VsZWN0aW9uXFxcIlxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXFxuICAxMTpcXHRcXHQgIHdlcmUgcGFydGl0aW9uZWQgdW5kZXIgYW4gb3BlcmF0aW5nIHN5c3RlbSBydW5uaW5nIG9uIGEgZGlmZmVyZW50XFxuICAxMjpcXHRcXHQgIGFyY2hpdGVjdHVyZSB0aGFuIHlvdXIgTGludXggc3lzdGVtLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gd29uJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTU6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjI4Ljg1MDMxNzE2N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM2MDY3MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVGSSBQYXJ0aXRpb25pbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBFRklfUEFSVElUSU9OYCBpcyBhIGJvb2xlYW4sIGFuZCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBgUEFSVElUSU9OX0FEVkFOQ0VEYCBpcyBzZWxlY3RlZC4gVGhhdCBtZWFucyBpdCdzIGxpa2VseSBhbHJlYWR5IHNldCB1cCB0aGUgd2F5IEknZCBleHBlY3QgZm9yIG1vc3QgbW9kZXJuIHN5c3RlbXMuIEJ1dCBpZiBJIHdhbnQgdG8gZXhwbGljaXRseSBlbnN1cmUgRUZJIEdVSUQgcGFydGl0aW9uIHN1cHBvcnQsIEkgY2FuIGp1c3QgaW5jbHVkZSBgRUZJX1BBUlRJVElPTmAgaW4gdGhlIGNvbmZpZy5cblxuSG1tLCB3YWl0Li4uIHNpbmNlIGBFRklfUEFSVElUSU9OYCBkZWFscyB3aXRoIHBhcnRpdGlvbmluZywgZG9lc24ndCBpdCByZXF1aXJlIHRoZSBibG9jayBsYXllcj8gT2YgY291cnNlLCB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlcyBibG9jayBkZXZpY2VzIGFuZCBwYXJ0aXRpb25pbmcgZGVhbHMgd2l0aCBibG9jayBkZXZpY2VzLCBzbyBpdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGBCTE9DS2AgaXMgYSBwcmVyZXF1aXNpdGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGJsb2NrL0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjMzLjE4NjM4NjkzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBCbG9jayBsYXllciBjb3JlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdG1lbnVjb25maWcgQkxPQ0tcXG4gICA2OlxcdCAgICAgICBib29sIFxcXCJFbmFibGUgdGhlIGJsb2NrIGxheWVyXFxcIiBpZiBFWFBFUlRcXG4gICA3OlxcdCAgICAgICBkZWZhdWx0IHlcXG4gICA4OlxcdCAgICAgICBzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdCAgICAgICBzZWxlY3QgU0JJVE1BUFxcbiAgMTA6XFx0ICAgICAgIGhlbHBcXG4gIDExOlxcdFxcdCBQcm92aWRlIGJsb2NrIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBrZXJuZWwuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCBEaXNhYmxlIHRoaXMgb3B0aW9uIHRvIHJlbW92ZSB0aGUgYmxvY2sgbGF5ZXIgc3VwcG9ydCBmcm9tIHRoZVxcbiAgMTQ6XFx0XFx0IGtlcm5lbC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBlbWJlZGRlZCBkZXZpY2VzLlxcbiAgMTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjMzLjE4NjQ1MTQ1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwMDUxMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRUZJIFBhcnRpdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgYEJMT0NLYCBjbGVhcmx5IGFkZHJlc3NlcyBzb21ldGhpbmcgaW1wb3J0YW50LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZWVkIHRvIGVuYWJsZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUga2V5IHN5bWJvbCBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYGVmaV9wYXJ0aXRpb25gLiBUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHBhdGNoIGJvaWxzIGRvd24gdG8gaW1wcm92aW5nIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMsIHNwZWNpZmljYWxseSBmb3IgR1BULiBJdCdzIGFkZGluZyBhIGNydWNpYWwgY2hlY2sgdG8gcHJldmVudCBhbiBpbnZhbGlkIHN0YXRlIHdoZXJlIHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgKExCQSkgaXMgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgTEJBLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGNoZWNrIHdpdGhpbiB0aGUgYmxvY2sgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyBkaXNrIHBhcnRpdGlvbiBwYXJzaW5nLlxuXG5CZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCB0aG91Z2gsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBlZmlfcGFydGl0aW9uYCBpcyB0aGUgb25seSBmdW5jdGlvbiBhZmZlY3RlZCBoZXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYGlzX3B0ZV92YWxpZGAgaXMgY2FsbGVkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gV2UgZG9uJ3Qgd2FudCBhbnkgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjozNy40NDY1MDQ1NThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjkzNDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19wdGVfdmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svcGFydGl0aW9ucy9lZmkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL2VmaS5jPTMzND1zdGF0aWMgaW50IGlzX2dwdF92YWxpZChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCB1NjQgbGJhLFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NTItLyoqXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0NTM6ICogaXNfcHRlX3ZhbGlkKCkgLSB0ZXN0cyBvbmUgUFRFIGZvciB2YWxpZGl0eVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNDU0LSAqIEBwdGU6cHRlIHRvIGNoZWNrXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTQ1OT1zdGF0aWMgaW5saW5lIGludFxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NDYwOmlzX3B0ZV92YWxpZChjb25zdCBncHRfZW50cnkgKnB0ZSwgY29uc3QgdTY0IGxhc3RsYmEpXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NjEte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYz03MTM9aW50IGVmaV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzM0LVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NzM1OlxcdFxcdGlmICghaXNfcHRlX3ZhbGlkKFxcdTAwMjZwdGVzW2ldLCBsYXN0X2xiYShzdGF0ZS1cXHUwMDNlZGlzaykpKVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzM2LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjozNy43ODM0NDQ3NTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwMDA3MTMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmFycm93aW5nIHRoZSBGb2N1czogRUZJIFBhcnRpdGlvbmluZyoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGlzb2xhdGVkIHdpdGhpbiB0aGUgYGVmaV9wYXJ0aXRpb25gIGNvbnRleHQsIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpczogdGhlIHByb2JsZW0gKkkqIGFtIHdyZXN0bGluZyB3aXRoIGlzIGNvbmZpbmVkIHRvIHRoZSBFRkkgcGFydGl0aW9uIGhhbmRsaW5nLiBUaGlzIGltbWVkaWF0ZWx5IHJlc3RyaWN0cyB0aGUgc2NvcGUgYW5kIGFsbG93cyBtZSB0byBhcHBseSBhbGwgbXkgcHJpb3Iga25vd2xlZGdlIGFib3V0IEVGSSBwYXJ0aXRpb25pbmcgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllci4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgaXTigJlzIHdvcnRoIHJldmlld2luZyB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVzaWRlIHdpdGggYGVmaV9wYXJ0aXRpb25gIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IG9idmlvdXMgaW50ZWdyYXRpb24gcG9pbnRzLCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciByZWxhdGVkIGxvZ2ljIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlLiBBIHF1aWNrIHNjYW4gb2YgcmVsYXRlZCBmdW5jdGlvbnMgY291bGQgdmVyeSB3ZWxsIHlpZWxkIGluc2lnaHQgdGhhdCBwcm92aWRlcyBhbiBlYXNpZXIsIG1vcmUgb2J2aW91cyBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxOSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjQyLjY4MzUxODMzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3ODYzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihbYS16X0EtWjAtOV0rICkqW2Etel9BLVowLTldK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvZWZpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svcGFydGl0aW9ucy9lZmkuYz05OD1zdGF0aWMgaW50IF9faW5pdFxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6OTk6Zm9yY2VfZ3B0X2ZuKGNoYXIgKnN0cilcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEwMC17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEwMy19XFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxMDQ6X19zZXR1cChcXFwiZ3B0XFxcIiwgZm9yY2VfZ3B0X2ZuKTtcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEwNS1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MTE5PXN0YXRpYyBpbmxpbmUgdTMyXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxMjA6ZWZpX2NyYzMyKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMjEte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMzMtICovXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxMzQ6c3RhdGljIHU2NCBsYXN0X2xiYShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEzNS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEzOS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjE0MDpzdGF0aWMgaW5saW5lIGludCBwbWJyX3BhcnRfdmFsaWQoZ3B0X21icl9yZWNvcmQgKnBhcnQpXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xNDEte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xNzEtICovXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxNzI6c3RhdGljIGludCBpc19wbWJyX3ZhbGlkKGxlZ2FjeV9tYnIgKm1iciwgc2VjdG9yX3QgdG90YWxfc2VjdG9ycylcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTE3My17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTIzMy0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjIzNDpzdGF0aWMgc2l6ZV90IHJlYWRfbGJhKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0yMzUtXFx0XFx0ICAgICAgIHU2NCBsYmEsIHU4ICpidWZmZXIsIHNpemVfdCBjb3VudClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MzA1PXN0YXRpYyBncHRfaGVhZGVyICphbGxvY19yZWFkX2dwdF9oZWFkZXIoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMzMzLSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MzM0OnN0YXRpYyBpbnQgaXNfZ3B0X3ZhbGlkKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHU2NCBsYmEsXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0zMzUtXFx0XFx0XFx0Z3B0X2hlYWRlciAqKmdwdCwgZ3B0X2VudHJ5ICoqcHRlcylcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NDU5PXN0YXRpYyBpbmxpbmUgaW50XFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0NjA6aXNfcHRlX3ZhbGlkKGNvbnN0IGdwdF9lbnRyeSAqcHRlLCBjb25zdCB1NjQgbGFzdGxiYSlcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ2MS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTQ4MD1zdGF0aWMgdm9pZFxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NDgxOmNvbXBhcmVfZ3B0cyhncHRfaGVhZGVyICpwZ3B0LCBncHRfaGVhZGVyICphZ3B0LCB1NjQgbGFzdGxiYSlcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ4Mi17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTU4MC0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjU4MTpzdGF0aWMgaW50IGZpbmRfdmFsaWRfZ3B0KHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIGdwdF9oZWFkZXIgKipncHQsXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy01ODItXFx0XFx0XFx0ICBncHRfZW50cnkgKipwdGVzKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02NzctICovXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo2Nzg6c3RhdGljIHZvaWQgdXRmMTZfbGVfdG9fN2JpdChjb25zdCBfX2xlMTYgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dClcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTY3OS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxMi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjcxMzppbnQgZWZpX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6NDIuNzQ0MzA4OTQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjM4MjQ4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEVGSSBQYXJ0aXRpb24gU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGVmaV9wYXJ0aXRpb25gIHN0cnVjdHVyZS4gTXkgcHJpbWFyeSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB3aGV0aGVyIHRoaXMgYGVmaV9wYXJ0aXRpb25gIGlzIGFjdHVhbGx5IGEgcHVibGljbHkgYXZhaWxhYmxlLCBleHBvcnRlZCBlbnRpdHkgb3IgaWYgaXQncyBtb3JlIG9mIGFuIGludGVybmFsIHN0cnVjdHVyZS4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBvZiBpbmZsdWVuY2UuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaG93IGl0J3MgKnVzZWQqLiBJcyBpdCBkaXJlY3RseSBlbWJlZGRlZCB3aXRoaW4gbGFyZ2VyLCBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBJcyBpdCByZWZlcmVuY2VkIGJ5IHBvaW50ZXJzPyBVbmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHN0cnVjdHVyZXMgd2lsbCBpbGx1bWluYXRlIGl0cyBmdW5jdGlvbiBhbmQgc2lnbmlmaWNhbmNlIGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIG1hcCBvdXQgaXRzIFwiZmFtaWx5IHRyZWVcIiB3aXRoaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjo0Ni4xMDgxMzYxNThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjY0MzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZmlfcGFydGl0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvY2hlY2suaD01Nj1pbnQgY21kbGluZV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XFxuYmxvY2svcGFydGl0aW9ucy9jaGVjay5oOjU3OmludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY2hlY2suaC01OC1pbnQgaWJtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKik7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0xNz1zdGF0aWMgaW50ICgqY29uc3QgY2hlY2tfcGFydFtdKShzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKikgPSB7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01MS0jaWZkZWYgQ09ORklHX0VGSV9QQVJUSVRJT05cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo1MjpcXHRlZmlfcGFydGl0aW9uLFxcdFxcdC8qIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBtc2RvcyAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTUzLSNlbmRpZlxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYz02Nzg9c3RhdGljIHZvaWQgdXRmMTZfbGVfdG9fN2JpdChjb25zdCBfX2xlMTYgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjk0LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6Njk1OiAqIGVmaV9wYXJ0aXRpb24gLSBzY2FuIGZvciBHUFQgcGFydGl0aW9uc1xcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjk2LSAqIEBzdGF0ZTogZGlzayBwYXJzZWQgcGFydGl0aW9uc1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MTItICovXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo3MTM6aW50IGVmaV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjQ2LjQxNDc4NjIxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ2MjYxOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkNvbmZpcm1pbmcgRUZJIFBhcnRpdGlvbiBIYW5kbGluZyBhbmQgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsICplZmlfcGFydGl0aW9uKiBpcyBpbmRlZWQgcHJlc2VudCB3aXRoaW4gdGhlICpjaGVja19wYXJ0KiBhcnJheSwgaW4gYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gVGhpcyBjb25maXJtcyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IHN5bWJvbCBmb3IgcGFydGl0aW9uIGNoZWNrcy5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbid0IGFueSBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIHJlY2FsbCB0aGF0IGBFRklfUEFSVElUSU9OYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBQQVJUSVRJT05fQURWQU5DRURgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoYXQuIFRoaXMgbGlrZWx5IGltcGFjdHMgdGhlIGVuYWJsZW1lbnQgb3IgYmVoYXZpb3Igb2YgYEVGSV9QQVJUSVRJT05gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjQwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6NTAuMzYxMDUwOTM1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAyODI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFSVElUSU9OX0FEVkFOQ0VEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWc9NT1tZW51IFxcXCJQYXJ0aXRpb24gVHlwZXNcXFwiXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTYtXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjc6Y29uZmlnIFBBUlRJVElPTl9BRFZBTkNFRFxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy04LVxcdGJvb2wgXFxcIkFkdmFuY2VkIHBhcnRpdGlvbiBzZWxlY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjUwLjQzODA4NTY3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzI4Njg3Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBsb2dpYywgYXMgdGhvdWdoIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgdG8gZW5hYmxlIGBQQVJUSVRJT05fQURWQU5DRURgLiBUaGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGZvciBtb3JlIGNvbXBsZXggcGFydGl0aW9uIHNldHVwcy4gVGhlbiBJIHNlZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIGlzIGEgYm9vbGVhbiwgYW5kIGl0cyBkZWZpbml0aW9uIGhhcyBhIGNydWNpYWwgY29uZGl0aW9uYWw6IFwiaWYgUEFSVElUSU9OX0FEVkFOQ0VEXCIuIFRoaXMgbWVhbnMgaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXMgZGlzYWJsZWQsIGBFRklfUEFSVElUSU9OYCBpcyBlZmZlY3RpdmVseSBoaWRkZW4gZnJvbSB0aGUgdXNlciwgZXZlbiB0aG91Z2ggaXRzIGBkZWZhdWx0IHlgIGlzIHByZXNlbnQuXG5cbkhvbGQgb24gYSBzZWNvbmQsIHRoYXQgZGVmYXVsdCB2YWx1ZSBpcyBgeWAhIFRoYXQgbWVhbnMgZXZlbiBpZiBgUEFSVElUSU9OX0FEVkFOQ0VEYCBpc24ndCBleHBsaWNpdGx5IHNldCwgYEVGSV9QQVJUSVRJT05gIHdpbGwgc3RpbGwgYmUgY29tcGlsZWQgKmludG8qIHRoZSBrZXJuZWwgd2l0aCBhIGRlZmF1bHQgb2YgeWVzLCBpZiB0aGUgYnJvYWRlciBhZHZhbmNlZCBwYXJ0aXRpb25pbmcgZmVhdHVyZSBpc24ndCBzZWxlY3RlZC4gVGhlIHZpc2libGUgVUkgZWxlbWVudCBpcyBzdGlsbCBoaWRkZW4sIGJ1dCB0aGUgY29kZSBtYXkgc3RpbGwgYmUgYWN0aXZlLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBoZXJlLCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgIGZpbGUgYW5kIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhlIGBFRklfUEFSVElUSU9OYCBkZWZpbml0aW9uLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZW5kZWQgdXNhZ2Ugb2YgdGhpcyBzZXR0aW5nLiBUaGlzIHdob2xlIHRoaW5nIHNtZWxscyBsaWtlIGEgZmVhdHVyZSBmbGFnIHdpdGggYSBwcmUtc2V0IGRlZmF1bHQgLSBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZmVhdHVyZXMgYXJlIGltcGFjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQ0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6NTQuNzY2Nzc1NTQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFx0ZGVwZW5kcyBvbiBQQVJUSVRJT05fQURWQU5DRURcXG4gMjQ2OlxcdFxcdGhlbHBcXG4gMjQ3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byBtb3VudCB0aGUgUmlvIEthcm1hIE1QMyBwbGF5ZXIsIGFzIGl0XFxuIDI0ODpcXHRcXHQgIHVzZXMgYSBwcm9wcmlldGFyeSBwYXJ0aXRpb24gdGFibGUuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdGNvbmZpZyBFRklfUEFSVElUSU9OXFxuIDI1MTpcXHRcXHRib29sIFxcXCJFRkkgR1VJRCBQYXJ0aXRpb24gc3VwcG9ydFxcXCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEXFxuIDI1MjpcXHRcXHRkZWZhdWx0IHlcXG4gMjUzOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAyNTQ6XFx0XFx0aGVscFxcbiAyNTU6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXFxuIDI1NjpcXHRcXHQgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgRUZJIEdQVC5cXG4gMjU3OlxcdFxcbiAyNTg6XFx0Y29uZmlnIFNZU1Y2OF9QQVJUSVRJT05cXG4gMjU5OlxcdFxcdGJvb2wgXFxcIlNZU1Y2OCBwYXJ0aXRpb24gdGFibGUgc3VwcG9ydFxcXCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjU0Ljc2Njg0MDQ4N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njc5OTI5NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIHRoYXQgYGJvb2wgXCJFRkkgR1VJRCBQYXJ0aXRpb24gc3VwcG9ydFwiIGlmIFBBUlRJVElPTl9BRFZBTkNFRGAgbWVhbnQgaXQncyAqY29uZGl0aW9uYWxseSogZW5hYmxlZCwgYnV0IHRoZSBgZGVmYXVsdCB5YCBvdmVycmlkZXMgdGhhdDsgaXQncyBhbHdheXMgb24gdW5sZXNzIGBQQVJUSVRJT05fQURWQU5DRURgIGlzIHNwZWNpZmljYWxseSAqZGlzYWJsZWQqLiBTbywgc2V0dGluZyBgRUZJX1BBUlRJVElPTmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGV2ZW4gaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXNuJ3Qgc3BlY2lmaWVkLiBJdCBzZWVtcyByZWR1bmRhbnQgdG8gaW5jbHVkZSBgUEFSVElUSU9OX0FEVkFOQ0VEYCBoZXJlLiBJbiBmYWN0LCBpZiBgUEFSVElUSU9OX0FEVkFOQ0VEYCBpc24ndCBldmVuIGRlZmluZWQsIGBFRklfUEFSVElUSU9OYCBpcyBzdGlsbCBgeWAgYnkgZGVmYXVsdC4gV2UganVzdCBuZWVkIHRvIGRlZmluZSBgRUZJX1BBUlRJVElPTmAuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGF0IHBsYXkgaGVyZS4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBCTE9DS2AgYW5kIGBDUkMzMmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBwYXJ0aXRpb24gc2NoZW1lIGluIHF1ZXN0aW9uLlxuXG5UaGVyZWZvcmUsIG15IHNpbXBsaWZpZWQgY29uZmlndXJhdGlvbiBzaG91bGQganVzdCBiZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4gVGhlIGZvY3VzIHN5bWJvbCBpcyBgZWZpX3BhcnRpdGlvbmAsIHRoYXQncyB0aGUgcG9pbnQgb2YgaW50ZXJlc3QuXG5cbkFscmlnaHQsIGxldCdzIHN1bW1hcml6ZSB0aGUgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBteSBmaW5kaW5nczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYCAtIFRoaXMgaXMgY2xlYXJseSBhIGNoYW5nZSB0byBwYXJ0aXRpb24gcGFyc2luZywgc28gaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJlZmlfcGFydGl0aW9uXCJdYCAtIFRoaXMgaXMgdGhlIGNlbnRyYWwgYXNwZWN0IG9mIHRoZSBuZXcgdmFsaWRhdGlvbi5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIkVGSV9QQVJUSVRJT05cIl1gIC0gVGhpcyBlbmFibGVzIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eS5cbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgRUZJIHBhcnRpdGlvbiB0YWJsZSBlbnRyaWVzIChHUFQpLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzdGFydGluZyBMQkEgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgZW5kaW5nIExCQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgd2hlbiBwYXJzaW5nIGRpc2sgcGFydGl0aW9ucy5cIlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudCwgc28gbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTgxLCJPdXRwdXRUb2tlbnMiOjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6Mjc6MDEuNDQ2NzcyMDU4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyNjE2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QQVJUSVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIEVGSSBwYXJ0aXRpb24gdGFibGUgZW50cmllcyAoR1BUKSwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgc3RhcnRpbmcgTEJBIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBMQkEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gcGFyc2luZyBkaXNrIHBhcnRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRUZJX1BBUlRJVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9wYXJ0aXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgRUZJIHBhcnRpdGlvbiB0YWJsZSBlbnRyaWVzIChHUFQpLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzdGFydGluZyBMQkEgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgZW5kaW5nIExCQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgd2hlbiBwYXJzaW5nIGRpc2sgcGFydGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 14:47:22 +0000 UTC FinishedAt: 2026-07-27 15:27:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "4df5ac1e975032ffeef732e3f34f9096e20a0c2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_PARTITION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "4df5ac1e975032ffeef732e3f34f9096e20a0c2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_PARTITION" ], "series_id": "27725e92-41cc-4d0e-a58b-1547ddc758bc" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "efi_partition" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QQVJUSVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfcGFydGl0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMgKEdQVCksIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB0byBlbnN1cmUgdGhlIHN0YXJ0aW5nIExCQSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgTEJBLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIHBhcnNpbmcgZGlzayBwYXJ0aXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzI0NTFlNmU4M2RkOTBiZWQ5NmMzZmM1NmY5ODAxOTRlN2QzMTg5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDE1OjI1OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmMgYi9ibG9jay9wYXJ0aXRpb25zL2VmaS5jXG5pbmRleCA5ODY1ZDU5MDkzZmFjMC4uMDAwMjE5YTY5N2U0MzAgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2VmaS5jXG5AQCAtNDYxLDcgJiM0Mzs0NjEsOCBAQCBpc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKVxuIHtcbiBcdGlmICgoIWVmaV9ndWlkY21wKHB0ZS1cdTAwM2VwYXJ0aXRpb25fdHlwZV9ndWlkLCBOVUxMX0dVSUQpKSB8fFxuIFx0ICAgIGxlNjRfdG9fY3B1KHB0ZS1cdTAwM2VzdGFydGluZ19sYmEpIFx1MDAzZSBsYXN0bGJhICAgICAgICAgfHxcbi1cdCAgICBsZTY0X3RvX2NwdShwdGUtXHUwMDNlZW5kaW5nX2xiYSkgICBcdTAwM2UgbGFzdGxiYSlcbiYjNDM7XHQgICAgbGU2NF90b19jcHUocHRlLVx1MDAzZWVuZGluZ19sYmEpICAgXHUwMDNlIGxhc3RsYmEgICAgICAgICB8fFxuJiM0MztcdCAgICBsZTY0X3RvX2NwdShwdGUtXHUwMDNlc3RhcnRpbmdfbGJhKSBcdTAwM2UgbGU2NF90b19jcHUocHRlLVx1MDAzZWVuZGluZ19sYmEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAxO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RUZJX1BBUlRJVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VmaV9wYXJ0aXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIEVGSSBwYXJ0aXRpb24gdGFibGUgZW50cmllcyAoR1BUKSwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgc3RhcnRpbmcgTEJBIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBMQkEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gcGFyc2luZyBkaXNrIHBhcnRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjQ1MWU2ZTgzZGQ5MGJlZDk2YzNmYzU2Zjk4MDE5NGU3ZDMxODkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMTU6MjU6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuYwppbmRleCA5ODY1ZDU5MDkzZmFjMC4uMDAwMjE5YTY5N2U0MzAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9lZmkuYwpAQCAtNDYxLDcgJiM0Mzs0NjEsOCBAQCBpc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKQogewogCWlmICgoIWVmaV9ndWlkY21wKHB0ZS0mZ3Q7cGFydGl0aW9uX3R5cGVfZ3VpZCwgTlVMTF9HVUlEKSkgfHwKIAkgICAgbGU2NF90b19jcHUocHRlLSZndDtzdGFydGluZ19sYmEpICZndDsgbGFzdGxiYSAgICAgICAgIHx8Ci0JICAgIGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7ZW5kaW5nX2xiYSkgICAmZ3Q7IGxhc3RsYmEpCiYjNDM7CSAgICBsZTY0X3RvX2NwdShwdGUtJmd0O2VuZGluZ19sYmEpICAgJmd0OyBsYXN0bGJhICAgICAgICAgfHwKJiM0MzsJICAgIGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7c3RhcnRpbmdfbGJhKSAmZ3Q7IGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7ZW5kaW5nX2xiYSkpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTExCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRUZJIFBhcnRpdGlvbiBUYWJsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYGlzX3B0ZV92YWxpZGAgZnVuY3Rpb24gd2l0aGluIGBibG9jay9wYXJ0aXRpb25zL2VmaS5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFkZGl0aW9uLCBhIGNoZWNrIG9uIHRoZSBwYXJ0aXRpb24gZW50cnkmIzM5O3MgTEJBczogYGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7c3RhcnRpbmdfbGJhKSAmZ3Q7IGxlNjRfdG9fY3B1KHB0ZS0mZ3Q7ZW5kaW5nX2xiYSlgLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIHRpZ2h0ZW5pbmcgdXAgdGhlIEVGSSBwYXJ0aXRpb24gdGFibGUgcGFyc2luZy4gV2UmIzM5O3JlIG5vdyBleHBsaWNpdGx5IGludmFsaWRhdGluZyBhbnkgcGFydGl0aW9uIGVudHJ5IHdoZXJlIHRoZSBzdGFydCBMQkEgaXMgKmdyZWF0ZXIqIHRoYW4gdGhlIGVuZCBMQkEuIFRoYXTigJlzIGEgZ29vZCBjYXRjaCwgYSBjcml0aWNhbCBkYXRhIGludGVncml0eSBjaGVjay4gSW52YWxpZCBlbnRyaWVzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIGRvd24gdGhlIGxpbmUsIHNvIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGdldCB0byB0aGUgZnV6emluZy4KCkdpdmVuIHRoYXQgdGhpcyB0b3VjaGVzIHBhcnRpdGlvbiB0YWJsZSBwYXJzaW5nLCBJIG5lZWQgdG8gZ2V0IHRoZSBjb25maWcgb3B0aW9ucyBhbmQgZm9jdXMgc3ltYm9scy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZmlsZSBpbiBxdWVzdGlvbiBpcyBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AsIHNvIEkmIzM5O2xsIGNoZWNrIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgIG9yIHBvc3NpYmx5IGp1c3QgYGJsb2NrL0tjb25maWdgIGZvciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiBwbGF5IGhlcmUgYW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCB0aGUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlZmkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX0lCTV9QQVJUSVRJT04pICYjNDM7PSBpYm0ub1xuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfRUZJX1BBUlRJVElPTikgJiM0Mzs9IGVmaS5vXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19LQVJNQV9QQVJUSVRJT04pICYjNDM7PSBrYXJtYS5vXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00LSAqXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjU6ICogaHR0cDovL3d3dy51ZWZpLm9yZy9zcGVjcy9cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNi0gKiBodHRwOi8vd3d3LmludGVsLmNvbS90ZWNobm9sb2d5L2VmaS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSBteXNlbGY6CgoqKkRpdmluZyBpbnRvIHRoZSBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBFRklfUEFSVElUSU9OYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdlJiMzOTtyZSBmb2N1c2VkIG9uLiYjMzQ7IE5vdywgYmVmb3JlIEkganVtcCBpbnRvIGltcGxlbWVudGluZyBvciBhbmFseXppbmcgYW55dGhpbmcgc3BlY2lmaWMgYWJvdXQgaXQsIEkgbmVlZCB0byBrbm93IHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIG9yIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9ucyBvciB1bmRlcmx5aW5nIHN5c3RlbXMgdGhhdCBtdXN0IGJlIGluIHBsYWNlIG9yIGVuYWJsZWQgZm9yIGBFRklfUEFSVElUSU9OYCB0byBmdW5jdGlvbiBjb3JyZWN0bHksIG9yIGV2ZW4gZm9yIGl0IHRvICptZWFuKiBzb21ldGhpbmcgaW4gdGhlIGZpcnN0IHBsYWNlPyBUaW1lIHRvIGludmVzdGlnYXRlIGFuZCBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb25zdHJhaW50cyBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb25maWd1cmF0aW9uIGluIGNvbnRleHQsIHNvIGxldCYjMzk7cyBjaGVjayBpdHMgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFRklfUEFSVElUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZz0yNDM9Y29uZmlnIEtBUk1BX1BBUlRJVElPTlxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy0yNDktXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWc6MjUwOmNvbmZpZyBFRklfUEFSVElUSU9OXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtFRkkgR1VJRCBQYXJ0aXRpb24gc3VwcG9ydFwmIzM0OyBpZiBQQVJUSVRJT05fQURWQU5DRURcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBCbG9jayBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbnMgYXJlIGNvbmZpZ3VyZWQuIEkgcmVjYWxsIHRoZXJlIHdhcyBhIHNwZWNpZmljIEtjb25maWcgZmlsZSB0aGF0IGhhbmRsZXMgYSBsb3Qgb2YgdGhlIGxvdy1sZXZlbCBzZXR0aW5ncywgYW5kIEkgdGhpbmsgaXQmIzM5O3Mgd2l0aGluIHRoZSBgYmxvY2svcGFydGl0aW9ucy9gIGRpcmVjdG9yeS4gTGV0IG1lIGNoZWNrLi4uIEFoIHllcywgaGVyZSBpdCBpcyAtIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgLiBBbmQgbGluZSAyNTAuLi4gTGV0JiMzOTtzIHRha2UgYSBsb29rIHRoZXJlLCB0aGF0JiMzOTtzIHByb2JhYmx5IHdoZXJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaG9vayBmb3IgdGhlIGtleSBmZWF0dXJlIGlzLiBIb3BlZnVsbHkgdGhhdCBsaW5lIHdpbGwgZ2l2ZSBtZSBzb21lIGluc2lnaHQgYW5kIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCBpcyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ1Olx0XHRkZXBlbmRzIG9uIFBBUlRJVElPTl9BRFZBTkNFRFxuIDI0NjpcdFx0aGVscFxuIDI0NzpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIG1vdW50IHRoZSBSaW8gS2FybWEgTVAzIHBsYXllciwgYXMgaXRcbiAyNDg6XHRcdCAgdXNlcyBhIHByb3ByaWV0YXJ5IHBhcnRpdGlvbiB0YWJsZS5cbiAyNDk6XHRcbiAyNTA6XHRjb25maWcgRUZJX1BBUlRJVElPTlxuIDI1MTpcdFx0Ym9vbCBcJiMzNDtFRkkgR1VJRCBQYXJ0aXRpb24gc3VwcG9ydFwmIzM0OyBpZiBQQVJUSVRJT05fQURWQU5DRURcbiAyNTI6XHRcdGRlZmF1bHQgeVxuIDI1MzpcdFx0c2VsZWN0IENSQzMyXG4gMjU0Olx0XHRoZWxwXG4gMjU1Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGhhcmQgZGlza3MgdW5kZXIgTGludXggd2hpY2hcbiAyNTY6XHRcdCAgd2VyZSBwYXJ0aXRpb25lZCB1c2luZyBFRkkgR1BULlxuIDI1NzpcdFxuIDI1ODpcdGNvbmZpZyBTWVNWNjhfUEFSVElUSU9OXG4gMjU5Olx0XHRib29sIFwmIzM0O1NZU1Y2OCBwYXJ0aXRpb24gdGFibGUgc3VwcG9ydFwmIzM0OyBpZiBQQVJUSVRJT05fQURWQU5DRURcbiAyNjA6XHRcdGRlZmF1bHQgeSBpZiBWTUVcbiAyNjE6XHRcdGhlbHBcbiAyNjI6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIGhhcmQgZGlza1xuIDI2MzpcdFx0ICBwYXJ0aXRpb24gdGFibGUgZm9ybWF0IHVzZWQgYnkgTW90b3JvbGEgRGVsdGEgbWFjaGluZXMgKHVzaW5nXG4gMjY0Olx0XHQgIHN5c3Y2OCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIEVGSSBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbiBhbmQgVmVyaWZpY2F0aW9uKioKClJpZ2h0LCBzbyBgRUZJX1BBUlRJVElPTmAgaXMgdGhlIGRlZmluaW5nIGNvbmZpZ3VyYXRpb24gaGVyZS4gVGhhdCBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbnRvIHRoZSBjb250ZXh0IOKAkyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEVGSSBwYXJ0aXRpb25zLiBBbmQsIGltcG9ydGFudGx5LCB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBzZWxlY3RpbmcgYENSQzMyYC4gVGhhdCB0ZWxscyBtZSB0aGUgc3lzdGVtIHByb2JhYmx5IHVzZXMgQ1JDMzIgY2hlY2tzdW1zIGZvciBpbnRlZ3JpdHkgY2hlY2tzLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIHRoaXMga2luZCBvZiBwYXJ0aXRpb24gc3RydWN0dXJlLgoKTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdW5kZXIgdGhlIG1pY3Jvc2NvcGUgaXMgYGlzX3B0ZV92YWxpZGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgZ29vZCwgYXMgaXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gaXRzIG93biB0cmFuc2xhdGlvbiB1bml0LCBzcGVjaWZpY2FsbHkgYGJsb2NrL3BhcnRpdGlvbnMvZWZpLmNgLiBUaGF0IGltcGxpZXMgd2UgYXJlIGxvb2tpbmcgYXQgc29tZXRoaW5nIGludm9sdmVkIHdpdGggdmVyaWZ5aW5nIHRoZSBQYXJ0aXRpb24gVGFibGUgRW50cnkgKFBURSkgdmFsaWRpdHkgb24gYW4gRUZJIGRpc2suIE5vdywgbGV0JiMzOTtzIHNlZSBleGFjdGx5IHdoZXJlIGl0IGlzIGJlaW5nIHVzZWQuIFdoZXJlIGV4YWN0bHkgYXJlIHRoZXkgY2FsbGluZyBgaXNfcHRlX3ZhbGlkYD8gVGhlIHBsYWNlcyBpdCYjMzk7cyBjYWxsZWQgZnJvbSB3aWxsIHByb3ZpZGUgdGhlIGNyaXRpY2FsIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19wdGVfdmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2VmaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MzM0PXN0YXRpYyBpbnQgaXNfZ3B0X3ZhbGlkKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHU2NCBsYmEsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NTItLyoqXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ1MzogKiBpc19wdGVfdmFsaWQoKSAtIHRlc3RzIG9uZSBQVEUgZm9yIHZhbGlkaXR5XG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ1NC0gKiBAcHRlOnB0ZSB0byBjaGVja1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NDU5PXN0YXRpYyBpbmxpbmUgaW50XG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ2MDppc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NjEte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NzEzPWludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzQtXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjczNTpcdFx0aWYgKCFpc19wdGVfdmFsaWQoXHUwMDI2cHRlc1tpXSwgbGFzdF9sYmEoc3RhdGUtXHUwMDNlZGlzaykpKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzYtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNwZWNpYWxpc3Q6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRUZJIFBhcnRpdGlvbiBQYXJzaW5nKioKCkFscmlnaHQsIHNvIHRoZSBjYWxsIG9yaWdpbmF0ZXMgZnJvbSBgZWZpX3BhcnRpdGlvbmAsIHdoaWNoIGlzIHRvIGJlIGV4cGVjdGVkLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgRUZJIHBhcnRpdGlvbiBwYXJzaW5nIHByb2Nlc3Mg4oCTIHRoZSBwbGFjZSB3aGVyZSBpdCBhbGwgYmVnaW5zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjb25maXJtIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGNvcmUgZnVuY3Rpb24uIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgdmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgYGVmaV9wYXJ0aXRpb25gLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCB0YWtpbmcgdGhlIGNvcnJlY3QgYXJndW1lbnRzLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3Mgc2V0IHVwIHRvIGhhbmRsZSB0aGUgc3RydWN0dXJlIGFuZCBsYXlvdXQgb2YgdGhlc2UgRUZJIHBhcnRpdGlvbnMgcHJvcGVybHkuIE5vIHBvaW50IGNvbnRpbnVpbmcgZG93biB0aGUgcmFiYml0IGhvbGUgaWYgdGhlIGZvdW5kYXRpb24gaXMgc2hha3ksIHJpZ2h0PyBMZXQmIzM5O3MgY2hlY2sgdGhhdCBzaWduYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VmaV9wYXJ0aXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2VmaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmM9Njc4PXN0YXRpYyB2b2lkIHV0ZjE2X2xlX3RvXzdiaXQoY29uc3QgX19sZTE2ICppbiwgdW5zaWduZWQgaW50IHNpemUsIHU4ICpvdXQpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02OTQtLyoqXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjY5NTogKiBlZmlfcGFydGl0aW9uIC0gc2NhbiBmb3IgR1BUIHBhcnRpdGlvbnNcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjk2LSAqIEBzdGF0ZTogZGlzayBwYXJzZWQgcGFydGl0aW9uc1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzEyLSAqL1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo3MTM6aW50IGVmaV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzE0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgUG90ZW50aWFsIERlcGVuZGVuY2llcyBvZiBgZWZpX3BhcnRpdGlvbmAqKgoKQWxyaWdodCwgbXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgZWZpX3BhcnRpdGlvbmAuIEkmIzM5O3ZlIHF1aWNrbHkgaWRlbnRpZmllZCB0aGF0IGFzIHRoZSBrZXkgc3ltYm9sLiBOb3csIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlICpvdGhlciogZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRvcGljLCBzbyBJJiMzOTttIGltbWVkaWF0ZWx5IGNoZWNraW5nIGZvciBvdGhlciByZWxhdGVkIHN5bWJvbHMuIEkga25vdyBgaXNfcHRlX3ZhbGlkYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgaW5saW5lLCBtZWFuaW5nIGl0JiMzOTtzIHVubGlrZWx5IHRvIGJlIGEgc2VwYXJhdGUsIGV4cG9ydGVkIHN5bWJvbCB0aGF0IHdvdWxkIHNob3cgdXAuIEkmIzM5O3ZlIGFsc28gbm90ZWQgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXMgYEVGSV9QQVJUSVRJT05gLiBJJiMzOTt2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaGFzIGZ1cnRoZXIgaW1wbGljYXRpb25zLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYEVGSV9QQVJUSVRJT05gIGFuZCBpdHMgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQsIHNvIEkmIzM5O20gY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCB3aXRoaW4gYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgS2NvbmZpZyBmaWxlIGlzIGluY2x1ZGVkIGNvbmRpdGlvbmFsbHkuIERlcGVuZGluZyBvbiBob3cgaXQmIzM5O3MgaGFuZGxlZCwgdGhpcyBjb3VsZCBzaWduaWZpY2FudGx5IGFsdGVyIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gc2VlIHdoYXQgb3RoZXIgY29uZGl0aW9ucyBtaWdodCBnYXRlIHRoZSBpbmNsdXNpb24gb2YgYEVGSV9QQVJUSVRJT05gIGluIHRoZSBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9MjAyPWNvbmZpZyBCTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0tcbi0tXG5ibG9jay9LY29uZmlnLTIxMS1cbmJsb2NrL0tjb25maWc6MjEyOnNvdXJjZSBcJiMzNDtibG9jay9wYXJ0aXRpb25zL0tjb25maWdcJiMzNDtcbmJsb2NrL0tjb25maWctMjEzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTI1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtjb25maWcgRGVwZW5kZW5jeSBpbiB0aGUgQmxvY2sgU3Vic3lzdGVtKioKCkFscmlnaHQsIGxldCBtZSBxdWlja2x5IHJ1biB0aHJvdWdoIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYC4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cCDigJMgaXQmIzM5O3MgaW5jbHVkZWQgZGlyZWN0bHkgaW4gYGJsb2NrL0tjb25maWdgLiBUaGF0IHVzdWFsbHkgc3VnZ2VzdHMgYSBwcmV0dHkgdGlnaHQgY291cGxpbmcsIHJpZ2h0PyBOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIHN0cnVjdHVyZS4gSXMgdGhpcyBhIHRvcC1sZXZlbCBtZW51IHRoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBvciBpcyBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYCBjb25kaXRpb25hbGx5IGluY2x1ZGVkIHVuZGVyIGFuIGBpZmAgc3RhdGVtZW50PyBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBJIHdpbGwgaGF2ZSBhIGNvbmRpdGlvbmFsLiBJZiB0aGUgbWVudSBpcyBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLCBJIGtub3cgdGhpcyBpcyBpbXBvcnRhbnQsIEkgd2lsbCBuZWVkIHRvIGNoZWNrIHRob3NlLiBUaGlzIHRlbGxzIG1lIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgY29uZGl0aW9uLiBJIGtub3cgSSBoYXZlIGEgbG90IG9mIHdvcmsgdG8gZG8sIGJ1dCB0aGlzIGlzIHRoZSBmaXJzdCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwNTpcdFx0c2VsZWN0IENSWVBUT1xuIDIwNjpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuIDIwNzpcdFx0aGVscFxuIDIwODpcdFx0ICBFbmFibGluZyB0aGlzIGxldHMgdGhlIGJsb2NrIGxheWVyIGhhbmRsZSBpbmxpbmUgZW5jcnlwdGlvblxuIDIwOTpcdFx0ICBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIGtlcm5lbCBjcnlwdG8gQVBJIHdoZW4gaW5saW5lXG4gMjEwOlx0XHQgIGVuY3J5cHRpb24gaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuXG4gMjExOlx0XG4gMjEyOlx0c291cmNlIFwmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1wmIzM0O1xuIDIxMzpcdFxuIDIxNDpcdGNvbmZpZyBCTEtfUE1cbiAyMTU6XHRcdGRlZl9ib29sIFBNXG4gMjE2Olx0XG4gMjE3Olx0IyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXG4gMjE4Olx0Y29uZmlnIEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEXG4gMjE5Olx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzODAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0IG1lIHNlZS4gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHBhcnRpdGlvbiB0eXBlcyBhcmUgaGFuZGxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gQWgsIHJpZ2h0ISBMZXQmIzM5O3Mgc2VlLi4uICpXYWl0IGEgbWludXRlLi4uKiBUaGUgYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AgZmlsZSwgdGhlIG9uZSBJIHN1c3BlY3RlZCwgKmFjdHVhbGx5KiBzdGFydHMgd2l0aCBhIGBtZW51ICYjMzQ7UGFydGl0aW9uIFR5cGVzJiMzNDtgIGRlZmluaXRpb24uIE5vdCBqdXN0IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgd2hvbGUgKiptZW51KiogZGVkaWNhdGVkIHRvIHBhcnRpdGlvbiB0eXBlcyEgVGhpcyBtZWFucyB0aGF0IHRoZXJlJiMzOTtzIGEgaGlnaGVyIGxldmVsIG9mIG9yZ2FuaXphdGlvbiBhbmQgcG90ZW50aWFsIG9wdGlvbnMgYXJvdW5kIGNvbmZpZ3VyaW5nIHBhcnRpdGlvbiBzdXBwb3J0IHRoYW4gSSBpbml0aWFsbHkgYW50aWNpcGF0ZWQuIEl0JiMzOTtzIGEgc3RydWN0dXJlZCBncm91cGluZywgc3VnZ2VzdGluZyB0aGVyZSYjMzk7cyBhIGRlbGliZXJhdGUgY2F0ZWdvcml6YXRpb24gb2YgYXZhaWxhYmxlIHBhcnRpdGlvbiBmb3JtYXRzLiBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgcHJvYmFibHkgbWFueSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0byBzdXBwb3J0IHNwZWNpZmljIHR5cGVzIG9mIHBhcnRpdGlvbnMuIEludGVyZXN0aW5nLCBpdCBtZWFucyB0aGVyZSBhcmUgbWFueSBwYXJ0aXRpb24gdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgYWxzbyBzdWdnZXN0cyBhIG1vZHVsYXIgYXBwcm9hY2ggdG8gcGFydGl0aW9uIHN1cHBvcnQgd2l0aGluIHRoZSBrZXJuZWwsIHJhdGhlciB0aGFuIGEgbW9ub2xpdGhpYyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhpcyBtZW51IHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgcGFydGl0aW9uIHR5cGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoZSBwYXJ0aXRpb24gc3Vic3lzdGVtIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBQYXJ0aXRpb24gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51IFwmIzM0O1BhcnRpdGlvbiBUeXBlc1wmIzM0O1xuICAgNjpcdFxuICAgNzpcdGNvbmZpZyBQQVJUSVRJT05fQURWQU5DRURcbiAgIDg6XHRcdGJvb2wgXCYjMzQ7QWR2YW5jZWQgcGFydGl0aW9uIHNlbGVjdGlvblwmIzM0O1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXG4gIDExOlx0XHQgIHdlcmUgcGFydGl0aW9uZWQgdW5kZXIgYW4gb3BlcmF0aW5nIHN5c3RlbSBydW5uaW5nIG9uIGEgZGlmZmVyZW50XG4gIDEyOlx0XHQgIGFyY2hpdGVjdHVyZSB0aGFuIHlvdXIgTGludXggc3lzdGVtLlxuICAxMzpcdFxuICAxNDpcdFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE1Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg2MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVGSSBQYXJ0aXRpb25pbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgRUZJX1BBUlRJVElPTmAgaXMgYSBib29sZWFuLCBhbmQgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBQQVJUSVRJT05fQURWQU5DRURgIGlzIHNlbGVjdGVkLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhbHJlYWR5IHNldCB1cCB0aGUgd2F5IEkmIzM5O2QgZXhwZWN0IGZvciBtb3N0IG1vZGVybiBzeXN0ZW1zLiBCdXQgaWYgSSB3YW50IHRvIGV4cGxpY2l0bHkgZW5zdXJlIEVGSSBHVUlEIHBhcnRpdGlvbiBzdXBwb3J0LCBJIGNhbiBqdXN0IGluY2x1ZGUgYEVGSV9QQVJUSVRJT05gIGluIHRoZSBjb25maWcuCgpIbW0sIHdhaXQuLi4gc2luY2UgYEVGSV9QQVJUSVRJT05gIGRlYWxzIHdpdGggcGFydGl0aW9uaW5nLCBkb2VzbiYjMzk7dCBpdCByZXF1aXJlIHRoZSBibG9jayBsYXllcj8gT2YgY291cnNlLCB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlcyBibG9jayBkZXZpY2VzIGFuZCBwYXJ0aXRpb25pbmcgZGVhbHMgd2l0aCBibG9jayBkZXZpY2VzLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgQkxPQ0tgIGlzIGEgcHJlcmVxdWlzaXRlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgYmxvY2svS2NvbmZpZ2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEJsb2NrIGxheWVyIGNvcmUgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIEJMT0NLXG4gICA2Olx0ICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbiAgIDc6XHQgICAgICAgZGVmYXVsdCB5XG4gICA4Olx0ICAgICAgIHNlbGVjdCBGU19JT01BUFxuICAgOTpcdCAgICAgICBzZWxlY3QgU0JJVE1BUFxuICAxMDpcdCAgICAgICBoZWxwXG4gIDExOlx0XHQgUHJvdmlkZSBibG9jayBsYXllciBzdXBwb3J0IGZvciB0aGUga2VybmVsLlxuICAxMjpcdFxuICAxMzpcdFx0IERpc2FibGUgdGhpcyBvcHRpb24gdG8gcmVtb3ZlIHRoZSBibG9jayBsYXllciBzdXBwb3J0IGZyb20gdGhlXG4gIDE0Olx0XHQga2VybmVsLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZXMuXG4gIDE1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFRkkgUGFydGl0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgYEJMT0NLYCBjbGVhcmx5IGFkZHJlc3NlcyBzb21ldGhpbmcgaW1wb3J0YW50LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZWVkIHRvIGVuYWJsZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUga2V5IHN5bWJvbCBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYGVmaV9wYXJ0aXRpb25gLiBUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHBhdGNoIGJvaWxzIGRvd24gdG8gaW1wcm92aW5nIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMsIHNwZWNpZmljYWxseSBmb3IgR1BULiBJdCYjMzk7cyBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrIHRvIHByZXZlbnQgYW4gaW52YWxpZCBzdGF0ZSB3aGVyZSB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIChMQkEpIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZW5kaW5nIExCQS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGVjayB3aXRoaW4gdGhlIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIGFuZCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgZGlzayBwYXJ0aXRpb24gcGFyc2luZy4KCkJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIHRob3VnaCwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYGVmaV9wYXJ0aXRpb25gIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGFmZmVjdGVkIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgYGlzX3B0ZV92YWxpZGAgaXMgY2FsbGVkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gV2UgZG9uJiMzOTt0IHdhbnQgYW55IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19wdGVfdmFsaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2VmaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MzM0PXN0YXRpYyBpbnQgaXNfZ3B0X3ZhbGlkKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHU2NCBsYmEsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NTItLyoqXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ1MzogKiBpc19wdGVfdmFsaWQoKSAtIHRlc3RzIG9uZSBQVEUgZm9yIHZhbGlkaXR5XG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ1NC0gKiBAcHRlOnB0ZSB0byBjaGVja1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NDU5PXN0YXRpYyBpbmxpbmUgaW50XG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ2MDppc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NjEte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NzEzPWludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzQtXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjczNTpcdFx0aWYgKCFpc19wdGVfdmFsaWQoXHUwMDI2cHRlc1tpXSwgbGFzdF9sYmEoc3RhdGUtXHUwMDNlZGlzaykpKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzYtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTkKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipOYXJyb3dpbmcgdGhlIEZvY3VzOiBFRkkgUGFydGl0aW9uaW5nKioKCkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGlzb2xhdGVkIHdpdGhpbiB0aGUgYGVmaV9wYXJ0aXRpb25gIGNvbnRleHQsIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpczogdGhlIHByb2JsZW0gKkkqIGFtIHdyZXN0bGluZyB3aXRoIGlzIGNvbmZpbmVkIHRvIHRoZSBFRkkgcGFydGl0aW9uIGhhbmRsaW5nLiBUaGlzIGltbWVkaWF0ZWx5IHJlc3RyaWN0cyB0aGUgc2NvcGUgYW5kIGFsbG93cyBtZSB0byBhcHBseSBhbGwgbXkgcHJpb3Iga25vd2xlZGdlIGFib3V0IEVGSSBwYXJ0aXRpb25pbmcgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllci4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgaXTigJlzIHdvcnRoIHJldmlld2luZyB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVzaWRlIHdpdGggYGVmaV9wYXJ0aXRpb25gIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIGFueSBvYnZpb3VzIGludGVncmF0aW9uIHBvaW50cywgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgb3IgcmVsYXRlZCBsb2dpYyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZS4gQSBxdWljayBzY2FuIG9mIHJlbGF0ZWQgZnVuY3Rpb25zIGNvdWxkIHZlcnkgd2VsbCB5aWVsZCBpbnNpZ2h0IHRoYXQgcHJvdmlkZXMgYW4gZWFzaWVyLCBtb3JlIG9idmlvdXMgc29sdXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oW2Etel9BLVowLTldJiM0MzsgKSpbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9lZmkuYz05OD1zdGF0aWMgaW50IF9faW5pdFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo5OTpmb3JjZV9ncHRfZm4oY2hhciAqc3RyKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMDAte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMTAzLX1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MTA0Ol9fc2V0dXAoXCYjMzQ7Z3B0XCYjMzQ7LCBmb3JjZV9ncHRfZm4pO1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMDUtXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYz0xMTk9c3RhdGljIGlubGluZSB1MzJcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MTIwOmVmaV9jcmMzMihjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMjEte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMTMzLSAqL1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxMzQ6c3RhdGljIHU2NCBsYXN0X2xiYShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMTM1LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEzOS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MTQwOnN0YXRpYyBpbmxpbmUgaW50IHBtYnJfcGFydF92YWxpZChncHRfbWJyX3JlY29yZCAqcGFydClcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMTQxLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTE3MS0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MTcyOnN0YXRpYyBpbnQgaXNfcG1icl92YWxpZChsZWdhY3lfbWJyICptYnIsIHNlY3Rvcl90IHRvdGFsX3NlY3RvcnMpXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTE3My17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0yMzMtICovXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjIzNDpzdGF0aWMgc2l6ZV90IHJlYWRfbGJhKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTIzNS1cdFx0ICAgICAgIHU2NCBsYmEsIHU4ICpidWZmZXIsIHNpemVfdCBjb3VudClcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTMwNT1zdGF0aWMgZ3B0X2hlYWRlciAqYWxsb2NfcmVhZF9ncHRfaGVhZGVyKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0zMzMtICovXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjMzNDpzdGF0aWMgaW50IGlzX2dwdF92YWxpZChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCB1NjQgbGJhLFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0zMzUtXHRcdFx0Z3B0X2hlYWRlciAqKmdwdCwgZ3B0X2VudHJ5ICoqcHRlcylcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTQ1OT1zdGF0aWMgaW5saW5lIGludFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0NjA6aXNfcHRlX3ZhbGlkKGNvbnN0IGdwdF9lbnRyeSAqcHRlLCBjb25zdCB1NjQgbGFzdGxiYSlcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNDYxLXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTQ4MD1zdGF0aWMgdm9pZFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0ODE6Y29tcGFyZV9ncHRzKGdwdF9oZWFkZXIgKnBncHQsIGdwdF9oZWFkZXIgKmFncHQsIHU2NCBsYXN0bGJhKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00ODIte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNTgwLSAqL1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo1ODE6c3RhdGljIGludCBmaW5kX3ZhbGlkX2dwdChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBncHRfaGVhZGVyICoqZ3B0LFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy01ODItXHRcdFx0ICBncHRfZW50cnkgKipwdGVzKVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjc3LSAqL1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo2Nzg6c3RhdGljIHZvaWQgdXRmMTZfbGVfdG9fN2JpdChjb25zdCBfX2xlMTYgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dClcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjc5LXtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxMi0gKi9cbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NzEzOmludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBFRkkgUGFydGl0aW9uIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGVmaV9wYXJ0aXRpb25gIHN0cnVjdHVyZS4gTXkgcHJpbWFyeSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgd2hldGhlciB0aGlzIGBlZmlfcGFydGl0aW9uYCBpcyBhY3R1YWxseSBhIHB1YmxpY2x5IGF2YWlsYWJsZSwgZXhwb3J0ZWQgZW50aXR5IG9yIGlmIGl0JiMzOTtzIG1vcmUgb2YgYW4gaW50ZXJuYWwgc3RydWN0dXJlLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBvZiBpbmZsdWVuY2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGhvdyBpdCYjMzk7cyAqdXNlZCouIElzIGl0IGRpcmVjdGx5IGVtYmVkZGVkIHdpdGhpbiBsYXJnZXIsIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXM/IElzIGl0IHJlZmVyZW5jZWQgYnkgcG9pbnRlcnM/IFVuZGVyc3RhbmRpbmcgaXRzIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgc3RydWN0dXJlcyB3aWxsIGlsbHVtaW5hdGUgaXRzIGZ1bmN0aW9uIGFuZCBzaWduaWZpY2FuY2UgaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gRXNzZW50aWFsbHksIEkmIzM5O20gdHJ5aW5nIHRvIG1hcCBvdXQgaXRzICYjMzQ7ZmFtaWx5IHRyZWUmIzM0OyB3aXRoaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VmaV9wYXJ0aXRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9wYXJ0aXRpb25zL2NoZWNrLmg9NTY9aW50IGNtZGxpbmVfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpO1xuYmxvY2svcGFydGl0aW9ucy9jaGVjay5oOjU3OmludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpO1xuYmxvY2svcGFydGl0aW9ucy9jaGVjay5oLTU4LWludCBpYm1fcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0xNz1zdGF0aWMgaW50ICgqY29uc3QgY2hlY2tfcGFydFtdKShzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKikgPSB7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTEtI2lmZGVmIENPTkZJR19FRklfUEFSVElUSU9OXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo1MjpcdGVmaV9wYXJ0aXRpb24sXHRcdC8qIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBtc2RvcyAqL1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNTMtI2VuZGlmXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYz02Nzg9c3RhdGljIHZvaWQgdXRmMTZfbGVfdG9fN2JpdChjb25zdCBfX2xlMTYgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dClcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTY5NC0vKipcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6Njk1OiAqIGVmaV9wYXJ0aXRpb24gLSBzY2FuIGZvciBHUFQgcGFydGl0aW9uc1xuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02OTYtICogQHN0YXRlOiBkaXNrIHBhcnNlZCBwYXJ0aXRpb25zXG4tLVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MTItICovXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjcxMzppbnQgZWZpX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDb25maXJtaW5nIEVGSSBQYXJ0aXRpb24gSGFuZGxpbmcgYW5kIERlcGVuZGVuY2llcyoqCgpSaWdodCwgKmVmaV9wYXJ0aXRpb24qIGlzIGluZGVlZCBwcmVzZW50IHdpdGhpbiB0aGUgKmNoZWNrX3BhcnQqIGFycmF5LCBpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiBUaGlzIGNvbmZpcm1zIHRoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IHN5bWJvbCBmb3IgcGFydGl0aW9uIGNoZWNrcy4KCk5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGZ1cnRoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgcmVjYWxsIHRoYXQgYEVGSV9QQVJUSVRJT05gIGhhcyBhIGRlcGVuZGVuY3kgb24gYFBBUlRJVElPTl9BRFZBTkNFRGAuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhhdC4gVGhpcyBsaWtlbHkgaW1wYWN0cyB0aGUgZW5hYmxlbWVudCBvciBiZWhhdmlvciBvZiBgRUZJX1BBUlRJVElPTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQVJUSVRJT05fQURWQU5DRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTU9bWVudSBcJiMzNDtQYXJ0aXRpb24gVHlwZXNcJiMzNDtcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy02LVxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjc6Y29uZmlnIFBBUlRJVElPTl9BRFZBTkNFRFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTgtXHRib29sIFwmIzM0O0FkdmFuY2VkIHBhcnRpdGlvbiBzZWxlY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIGFzIHRob3VnaCBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRXhhbWluaW5nIEVGSSBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgdG8gZW5hYmxlIGBQQVJUSVRJT05fQURWQU5DRURgLiBUaGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGZvciBtb3JlIGNvbXBsZXggcGFydGl0aW9uIHNldHVwcy4gVGhlbiBJIHNlZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIGlzIGEgYm9vbGVhbiwgYW5kIGl0cyBkZWZpbml0aW9uIGhhcyBhIGNydWNpYWwgY29uZGl0aW9uYWw6ICYjMzQ7aWYgUEFSVElUSU9OX0FEVkFOQ0VEJiMzNDsuIFRoaXMgbWVhbnMgaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXMgZGlzYWJsZWQsIGBFRklfUEFSVElUSU9OYCBpcyBlZmZlY3RpdmVseSBoaWRkZW4gZnJvbSB0aGUgdXNlciwgZXZlbiB0aG91Z2ggaXRzIGBkZWZhdWx0IHlgIGlzIHByZXNlbnQuCgpIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IGRlZmF1bHQgdmFsdWUgaXMgYHlgISBUaGF0IG1lYW5zIGV2ZW4gaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXNuJiMzOTt0IGV4cGxpY2l0bHkgc2V0LCBgRUZJX1BBUlRJVElPTmAgd2lsbCBzdGlsbCBiZSBjb21waWxlZCAqaW50byogdGhlIGtlcm5lbCB3aXRoIGEgZGVmYXVsdCBvZiB5ZXMsIGlmIHRoZSBicm9hZGVyIGFkdmFuY2VkIHBhcnRpdGlvbmluZyBmZWF0dXJlIGlzbiYjMzk7dCBzZWxlY3RlZC4gVGhlIHZpc2libGUgVUkgZWxlbWVudCBpcyBzdGlsbCBoaWRkZW4sIGJ1dCB0aGUgY29kZSBtYXkgc3RpbGwgYmUgYWN0aXZlLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZSwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYCBmaWxlIGFuZCBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoZSBgRUZJX1BBUlRJVElPTmAgZGVmaW5pdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbnRlbmRlZCB1c2FnZSBvZiB0aGlzIHNldHRpbmcuIFRoaXMgd2hvbGUgdGhpbmcgc21lbGxzIGxpa2UgYSBmZWF0dXJlIGZsYWcgd2l0aCBhIHByZS1zZXQgZGVmYXVsdCAtIEkgbmVlZCB0byBzZWUgd2hhdCBvdGhlciBmZWF0dXJlcyBhcmUgaW1wYWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHRcdGRlcGVuZHMgb24gUEFSVElUSU9OX0FEVkFOQ0VEXG4gMjQ2Olx0XHRoZWxwXG4gMjQ3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gbW91bnQgdGhlIFJpbyBLYXJtYSBNUDMgcGxheWVyLCBhcyBpdFxuIDI0ODpcdFx0ICB1c2VzIGEgcHJvcHJpZXRhcnkgcGFydGl0aW9uIHRhYmxlLlxuIDI0OTpcdFxuIDI1MDpcdGNvbmZpZyBFRklfUEFSVElUSU9OXG4gMjUxOlx0XHRib29sIFwmIzM0O0VGSSBHVUlEIFBhcnRpdGlvbiBzdXBwb3J0XCYjMzQ7IGlmIFBBUlRJVElPTl9BRFZBTkNFRFxuIDI1MjpcdFx0ZGVmYXVsdCB5XG4gMjUzOlx0XHRzZWxlY3QgQ1JDMzJcbiAyNTQ6XHRcdGhlbHBcbiAyNTU6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgaGFyZCBkaXNrcyB1bmRlciBMaW51eCB3aGljaFxuIDI1NjpcdFx0ICB3ZXJlIHBhcnRpdGlvbmVkIHVzaW5nIEVGSSBHUFQuXG4gMjU3Olx0XG4gMjU4Olx0Y29uZmlnIFNZU1Y2OF9QQVJUSVRJT05cbiAyNTk6XHRcdGJvb2wgXCYjMzQ7U1lTVjY4IHBhcnRpdGlvbiB0YWJsZSBzdXBwb3J0XCYjMzQ7IGlmIFBBUlRJVElPTl9BRFZBTkNFRFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTgxCgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyB0aGF0IGBib29sICYjMzQ7RUZJIEdVSUQgUGFydGl0aW9uIHN1cHBvcnQmIzM0OyBpZiBQQVJUSVRJT05fQURWQU5DRURgIG1lYW50IGl0JiMzOTtzICpjb25kaXRpb25hbGx5KiBlbmFibGVkLCBidXQgdGhlIGBkZWZhdWx0IHlgIG92ZXJyaWRlcyB0aGF0OyBpdCYjMzk7cyBhbHdheXMgb24gdW5sZXNzIGBQQVJUSVRJT05fQURWQU5DRURgIGlzIHNwZWNpZmljYWxseSAqZGlzYWJsZWQqLiBTbywgc2V0dGluZyBgRUZJX1BBUlRJVElPTmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGV2ZW4gaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXNuJiMzOTt0IHNwZWNpZmllZC4gSXQgc2VlbXMgcmVkdW5kYW50IHRvIGluY2x1ZGUgYFBBUlRJVElPTl9BRFZBTkNFRGAgaGVyZS4gSW4gZmFjdCwgaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXNuJiMzOTt0IGV2ZW4gZGVmaW5lZCwgYEVGSV9QQVJUSVRJT05gIGlzIHN0aWxsIGB5YCBieSBkZWZhdWx0LiBXZSBqdXN0IG5lZWQgdG8gZGVmaW5lIGBFRklfUEFSVElUSU9OYC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgQkxPQ0tgIGFuZCBgQ1JDMzJgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYWxvbmcgd2l0aCB0aGUgcGFydGl0aW9uIHNjaGVtZSBpbiBxdWVzdGlvbi4KClRoZXJlZm9yZSwgbXkgc2ltcGxpZmllZCBjb25maWd1cmF0aW9uIHNob3VsZCBqdXN0IGJlIGBFRklfUEFSVElUSU9OYCwgd2hpY2ggaXMgdGhlIGtleSBoZXJlLiBUaGUgZm9jdXMgc3ltYm9sIGlzIGBlZmlfcGFydGl0aW9uYCwgdGhhdCYjMzk7cyB0aGUgcG9pbnQgb2YgaW50ZXJlc3QuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBjb25maWd1cmF0aW9uIGJhc2VkIG9uIG15IGZpbmRpbmdzOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYCAtIFRoaXMgaXMgY2xlYXJseSBhIGNoYW5nZSB0byBwYXJ0aXRpb24gcGFyc2luZywgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbJiMzNDtlZmlfcGFydGl0aW9uJiMzNDtdYCAtIFRoaXMgaXMgdGhlIGNlbnRyYWwgYXNwZWN0IG9mIHRoZSBuZXcgdmFsaWRhdGlvbi4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgWyYjMzQ7RUZJX1BBUlRJVElPTiYjMzQ7XWAgLSBUaGlzIGVuYWJsZXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5LgoqICAgKipSZWFzb25pbmc6KiogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIEVGSSBwYXJ0aXRpb24gdGFibGUgZW50cmllcyAoR1BUKSwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgc3RhcnRpbmcgTEJBIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBMQkEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gcGFyc2luZyBkaXNrIHBhcnRpdGlvbnMuJiMzNDsKCkkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudCwgc28gbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTU6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QQVJUSVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfcGFydGl0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMgKEdQVCksIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB0byBlbnN1cmUgdGhlIHN0YXJ0aW5nIExCQSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgTEJBLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIHBhcnNpbmcgZGlzayBwYXJ0aXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUEFSVElUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX3BhcnRpdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgRUZJIHBhcnRpdGlvbiB0YWJsZSBlbnRyaWVzIChHUFQpLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzdGFydGluZyBMQkEgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgZW5kaW5nIExCQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgd2hlbiBwYXJzaW5nIGRpc2sgcGFydGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI1OjU1LjY5MjM5NDcxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1ODM1NjUwMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QQVJUSVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIEVGSSBwYXJ0aXRpb24gdGFibGUgZW50cmllcyAoR1BUKSwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgc3RhcnRpbmcgTEJBIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBMQkEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gcGFyc2luZyBkaXNrIHBhcnRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI1OjU1LjY5MjQwMjUzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDExMjQyODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzI0NTFlNmU4M2RkOTBiZWQ5NmMzZmM1NmY5ODAxOTRlN2QzMTg5M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxNToyNTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xcbmluZGV4IDk4NjVkNTkwOTNmYWMwLi4wMDAyMTlhNjk3ZTQzMCAxMDA2NDRcXG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jXFxuKysrIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xcbkBAIC00NjEsNyArNDYxLDggQEAgaXNfcHRlX3ZhbGlkKGNvbnN0IGdwdF9lbnRyeSAqcHRlLCBjb25zdCB1NjQgbGFzdGxiYSlcXG4ge1xcbiBcXHRpZiAoKCFlZmlfZ3VpZGNtcChwdGUtXFx1MDAzZXBhcnRpdGlvbl90eXBlX2d1aWQsIE5VTExfR1VJRCkpIHx8XFxuIFxcdCAgICBsZTY0X3RvX2NwdShwdGUtXFx1MDAzZXN0YXJ0aW5nX2xiYSkgXFx1MDAzZSBsYXN0bGJhICAgICAgICAgfHxcXG4tXFx0ICAgIGxlNjRfdG9fY3B1KHB0ZS1cXHUwMDNlZW5kaW5nX2xiYSkgICBcXHUwMDNlIGxhc3RsYmEpXFxuK1xcdCAgICBsZTY0X3RvX2NwdShwdGUtXFx1MDAzZWVuZGluZ19sYmEpICAgXFx1MDAzZSBsYXN0bGJhICAgICAgICAgfHxcXG4rXFx0ICAgIGxlNjRfdG9fY3B1KHB0ZS1cXHUwMDNlc3RhcnRpbmdfbGJhKSBcXHUwMDNlIGxlNjRfdG9fY3B1KHB0ZS1cXHUwMDNlZW5kaW5nX2xiYSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gMTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNTo1Ni4xMDQzMjA1NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2NTQyMzcxNjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUEFSVElUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZWZpX3BhcnRpdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMgKEdQVCksIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB0byBlbnN1cmUgdGhlIHN0YXJ0aW5nIExCQSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgTEJBLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgYmxvY2sgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIHBhcnNpbmcgZGlzayBwYXJ0aXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjQ1MWU2ZTgzZGQ5MGJlZDk2YzNmYzU2Zjk4MDE5NGU3ZDMxODkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTU6MjU6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9ibG9jay9wYXJ0aXRpb25zL2VmaS5jIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xuaW5kZXggOTg2NWQ1OTA5M2ZhYzAuLjAwMDIxOWE2OTdlNDMwIDEwMDY0NFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xuKysrIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuY1xuQEAgLTQ2MSw3ICs0NjEsOCBAQCBpc19wdGVfdmFsaWQoY29uc3QgZ3B0X2VudHJ5ICpwdGUsIGNvbnN0IHU2NCBsYXN0bGJhKVxuIHtcbiBcdGlmICgoIWVmaV9ndWlkY21wKHB0ZS1cdTAwM2VwYXJ0aXRpb25fdHlwZV9ndWlkLCBOVUxMX0dVSUQpKSB8fFxuIFx0ICAgIGxlNjRfdG9fY3B1KHB0ZS1cdTAwM2VzdGFydGluZ19sYmEpIFx1MDAzZSBsYXN0bGJhICAgICAgICAgfHxcbi1cdCAgICBsZTY0X3RvX2NwdShwdGUtXHUwMDNlZW5kaW5nX2xiYSkgICBcdTAwM2UgbGFzdGxiYSlcbitcdCAgICBsZTY0X3RvX2NwdShwdGUtXHUwMDNlZW5kaW5nX2xiYSkgICBcdTAwM2UgbGFzdGxiYSAgICAgICAgIHx8XG4rXHQgICAgbGU2NF90b19jcHUocHRlLVx1MDAzZXN0YXJ0aW5nX2xiYSkgXHUwMDNlIGxlNjRfdG9fY3B1KHB0ZS1cdTAwM2VlbmRpbmdfbGJhKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNTo1Ni4xMDQzMjE5OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA2Njg5MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRUZJIFBhcnRpdGlvbiBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBpc19wdGVfdmFsaWRgIGZ1bmN0aW9uIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFkZGl0aW9uLCBhIGNoZWNrIG9uIHRoZSBwYXJ0aXRpb24gZW50cnkncyBMQkFzOiBgbGU2NF90b19jcHUocHRlLVx1MDAzZXN0YXJ0aW5nX2xiYSkgXHUwMDNlIGxlNjRfdG9fY3B1KHB0ZS1cdTAwM2VlbmRpbmdfbGJhKWAuIEZ1bmN0aW9uYWxseSwgaXQncyB0aWdodGVuaW5nIHVwIHRoZSBFRkkgcGFydGl0aW9uIHRhYmxlIHBhcnNpbmcuIFdlJ3JlIG5vdyBleHBsaWNpdGx5IGludmFsaWRhdGluZyBhbnkgcGFydGl0aW9uIGVudHJ5IHdoZXJlIHRoZSBzdGFydCBMQkEgaXMgKmdyZWF0ZXIqIHRoYW4gdGhlIGVuZCBMQkEuIFRoYXTigJlzIGEgZ29vZCBjYXRjaCwgYSBjcml0aWNhbCBkYXRhIGludGVncml0eSBjaGVjay4gSW52YWxpZCBlbnRyaWVzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHByb2JsZW1zIGRvd24gdGhlIGxpbmUsIHNvIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGdldCB0byB0aGUgZnV6emluZy5cblxuR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgcGFydGl0aW9uIHRhYmxlIHBhcnNpbmcsIEkgbmVlZCB0byBnZXQgdGhlIGNvbmZpZyBvcHRpb25zIGFuZCBmb2N1cyBzeW1ib2xzLiBMZXQncyBzZWUuLi4gdGhlIGZpbGUgaW4gcXVlc3Rpb24gaXMgYGJsb2NrL3BhcnRpdGlvbnMvZWZpLmNgLCBzbyBJJ2xsIGNoZWNrIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgIG9yIHBvc3NpYmx5IGp1c3QgYGJsb2NrL0tjb25maWdgIGZvciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHBsYXkgaGVyZSBhbmQgaG93IHRoaXMgbWlnaHQgaW1wYWN0IHRoZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MDAuNzExMDEzMDM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3ODMzMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmaS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX0lCTV9QQVJUSVRJT04pICs9IGlibS5vXFxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfRUZJX1BBUlRJVElPTikgKz0gZWZpLm9cXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19LQVJNQV9QQVJUSVRJT04pICs9IGthcm1hLm9cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNC0gKlxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NTogKiBodHRwOi8vd3d3LnVlZmkub3JnL3NwZWNzL1xcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNi0gKiBodHRwOi8vd3d3LmludGVsLmNvbS90ZWNobm9sb2d5L2VmaS9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MDAuNzY4ODUzNjQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NjkwODI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGxpa2UgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgRUZJX1BBUlRJVElPTmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdlJ3JlIGZvY3VzZWQgb24uXCIgTm93LCBiZWZvcmUgSSBqdW1wIGludG8gaW1wbGVtZW50aW5nIG9yIGFuYWx5emluZyBhbnl0aGluZyBzcGVjaWZpYyBhYm91dCBpdCwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgb3IgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIHVuZGVybHlpbmcgc3lzdGVtcyB0aGF0IG11c3QgYmUgaW4gcGxhY2Ugb3IgZW5hYmxlZCBmb3IgYEVGSV9QQVJUSVRJT05gIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgb3IgZXZlbiBmb3IgaXQgdG8gKm1lYW4qIHNvbWV0aGluZyBpbiB0aGUgZmlyc3QgcGxhY2U/IFRpbWUgdG8gaW52ZXN0aWdhdGUgYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnN0cmFpbnRzIGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNvbmZpZ3VyYXRpb24gaW4gY29udGV4dCwgc28gbGV0J3MgY2hlY2sgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjA0LjA0NTc2NTU3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODgxMzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRUZJX1BBUlRJVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnPTI0Mz1jb25maWcgS0FSTUFfUEFSVElUSU9OXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjQ5LVxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZzoyNTA6Y29uZmlnIEVGSV9QQVJUSVRJT05cXG5ibG9jay9wYXJ0aXRpb25zL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkVGSSBHVUlEIFBhcnRpdGlvbiBzdXBwb3J0XFxcIiBpZiBQQVJUSVRJT05fQURWQU5DRURcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MDQuMTA0NTg0MTI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MjI1NjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBCbG9jayBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBibG9jayBkZXZpY2UgcGFydGl0aW9ucyBhcmUgY29uZmlndXJlZC4gSSByZWNhbGwgdGhlcmUgd2FzIGEgc3BlY2lmaWMgS2NvbmZpZyBmaWxlIHRoYXQgaGFuZGxlcyBhIGxvdCBvZiB0aGUgbG93LWxldmVsIHNldHRpbmdzLCBhbmQgSSB0aGluayBpdCdzIHdpdGhpbiB0aGUgYGJsb2NrL3BhcnRpdGlvbnMvYCBkaXJlY3RvcnkuIExldCBtZSBjaGVjay4uLiBBaCB5ZXMsIGhlcmUgaXQgaXMgLSBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYC4gQW5kIGxpbmUgMjUwLi4uIExldCdzIHRha2UgYSBsb29rIHRoZXJlLCB0aGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBob29rIGZvciB0aGUga2V5IGZlYXR1cmUgaXMuIEhvcGVmdWxseSB0aGF0IGxpbmUgd2lsbCBnaXZlIG1lIHNvbWUgaW5zaWdodCBhbmQgSSBjYW4gZmlndXJlIG91dCB3aGF0IGlzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MDcuNDY2ODQyODY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRcXHRkZXBlbmRzIG9uIFBBUlRJVElPTl9BRFZBTkNFRFxcbiAyNDY6XFx0XFx0aGVscFxcbiAyNDc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIG1vdW50IHRoZSBSaW8gS2FybWEgTVAzIHBsYXllciwgYXMgaXRcXG4gMjQ4OlxcdFxcdCAgdXNlcyBhIHByb3ByaWV0YXJ5IHBhcnRpdGlvbiB0YWJsZS5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0Y29uZmlnIEVGSV9QQVJUSVRJT05cXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkVGSSBHVUlEIFBhcnRpdGlvbiBzdXBwb3J0XFxcIiBpZiBQQVJUSVRJT05fQURWQU5DRURcXG4gMjUyOlxcdFxcdGRlZmF1bHQgeVxcbiAyNTM6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDI1NDpcXHRcXHRoZWxwXFxuIDI1NTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGhhcmQgZGlza3MgdW5kZXIgTGludXggd2hpY2hcXG4gMjU2OlxcdFxcdCAgd2VyZSBwYXJ0aXRpb25lZCB1c2luZyBFRkkgR1BULlxcbiAyNTc6XFx0XFxuIDI1ODpcXHRjb25maWcgU1lTVjY4X1BBUlRJVElPTlxcbiAyNTk6XFx0XFx0Ym9vbCBcXFwiU1lTVjY4IHBhcnRpdGlvbiB0YWJsZSBzdXBwb3J0XFxcIiBpZiBQQVJUSVRJT05fQURWQU5DRURcXG4gMjYwOlxcdFxcdGRlZmF1bHQgeSBpZiBWTUVcXG4gMjYxOlxcdFxcdGhlbHBcXG4gMjYyOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIGhhcmQgZGlza1xcbiAyNjM6XFx0XFx0ICBwYXJ0aXRpb24gdGFibGUgZm9ybWF0IHVzZWQgYnkgTW90b3JvbGEgRGVsdGEgbWFjaGluZXMgKHVzaW5nXFxuIDI2NDpcXHRcXHQgIHN5c3Y2OCkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjA3LjQ2NjkxNzQyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODczOTE4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIEVGSSBQYXJ0aXRpb24gQ29uZmlndXJhdGlvbiBhbmQgVmVyaWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIGBFRklfUEFSVElUSU9OYCBpcyB0aGUgZGVmaW5pbmcgY29uZmlndXJhdGlvbiBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IGNsdWVzIG1lIGludG8gdGhlIGNvbnRleHQg4oCTIHdlJ3JlIGRlYWxpbmcgd2l0aCBFRkkgcGFydGl0aW9ucy4gQW5kLCBpbXBvcnRhbnRseSwgdGhpcyBjb25maWd1cmF0aW9uIGlzIGFsc28gc2VsZWN0aW5nIGBDUkMzMmAuIFRoYXQgdGVsbHMgbWUgdGhlIHN5c3RlbSBwcm9iYWJseSB1c2VzIENSQzMyIGNoZWNrc3VtcyBmb3IgaW50ZWdyaXR5IGNoZWNrcywgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIGZvciB0aGlzIGtpbmQgb2YgcGFydGl0aW9uIHN0cnVjdHVyZS5cblxuTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdW5kZXIgdGhlIG1pY3Jvc2NvcGUgaXMgYGlzX3B0ZV92YWxpZGAuIEl0J3Mgc3RhdGljLCB3aGljaCBpcyBnb29kLCBhcyBpdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byBpdHMgb3duIHRyYW5zbGF0aW9uIHVuaXQsIHNwZWNpZmljYWxseSBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AuIFRoYXQgaW1wbGllcyB3ZSBhcmUgbG9va2luZyBhdCBzb21ldGhpbmcgaW52b2x2ZWQgd2l0aCB2ZXJpZnlpbmcgdGhlIFBhcnRpdGlvbiBUYWJsZSBFbnRyeSAoUFRFKSB2YWxpZGl0eSBvbiBhbiBFRkkgZGlzay4gTm93LCBsZXQncyBzZWUgZXhhY3RseSB3aGVyZSBpdCBpcyBiZWluZyB1c2VkLiBXaGVyZSBleGFjdGx5IGFyZSB0aGV5IGNhbGxpbmcgYGlzX3B0ZV92YWxpZGA/IFRoZSBwbGFjZXMgaXQncyBjYWxsZWQgZnJvbSB3aWxsIHByb3ZpZGUgdGhlIGNyaXRpY2FsIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjoxMC43NTQzMTMyMTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzU2MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX3B0ZV92YWxpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9wYXJ0aXRpb25zL2VmaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MzM0PXN0YXRpYyBpbnQgaXNfZ3B0X3ZhbGlkKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHU2NCBsYmEsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ1Mi0vKipcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjQ1MzogKiBpc19wdGVfdmFsaWQoKSAtIHRlc3RzIG9uZSBQVEUgZm9yIHZhbGlkaXR5XFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NTQtICogQHB0ZTpwdGUgdG8gY2hlY2tcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NDU5PXN0YXRpYyBpbmxpbmUgaW50XFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0NjA6aXNfcHRlX3ZhbGlkKGNvbnN0IGdwdF9lbnRyeSAqcHRlLCBjb25zdCB1NjQgbGFzdGxiYSlcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ2MS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTcxMz1pbnQgZWZpX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzQtXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo3MzU6XFx0XFx0aWYgKCFpc19wdGVfdmFsaWQoXFx1MDAyNnB0ZXNbaV0sIGxhc3RfbGJhKHN0YXRlLVxcdTAwM2VkaXNrKSkpXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MzYtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjEwLjgxMzY3NTA1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc4NDE5ODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzcGVjaWFsaXN0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRUZJIFBhcnRpdGlvbiBQYXJzaW5nKipcblxuQWxyaWdodCwgc28gdGhlIGNhbGwgb3JpZ2luYXRlcyBmcm9tIGBlZmlfcGFydGl0aW9uYCwgd2hpY2ggaXMgdG8gYmUgZXhwZWN0ZWQuIFRoYXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIEVGSSBwYXJ0aXRpb24gcGFyc2luZyBwcm9jZXNzIOKAkyB0aGUgcGxhY2Ugd2hlcmUgaXQgYWxsIGJlZ2lucy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gY29uZmlybSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBjb3JlIGZ1bmN0aW9uLiBMZXQncyBkZWx2ZSBpbiBhbmQgdmVyaWZ5IHRoZSBzaWduYXR1cmUgb2YgYGVmaV9wYXJ0aXRpb25gLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgYW5kIHRha2luZyB0aGUgY29ycmVjdCBhcmd1bWVudHMuIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIHNldCB1cCB0byBoYW5kbGUgdGhlIHN0cnVjdHVyZSBhbmQgbGF5b3V0IG9mIHRoZXNlIEVGSSBwYXJ0aXRpb25zIHByb3Blcmx5LiBObyBwb2ludCBjb250aW51aW5nIGRvd24gdGhlIHJhYmJpdCBob2xlIGlmIHRoZSBmb3VuZGF0aW9uIGlzIHNoYWt5LCByaWdodD8gTGV0J3MgY2hlY2sgdGhhdCBzaWduYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjoxNC41OTIwOTc3NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDA5Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVmaV9wYXJ0aXRpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svcGFydGl0aW9ucy9lZmkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL2VmaS5jPTY3OD1zdGF0aWMgdm9pZCB1dGYxNl9sZV90b183Yml0KGNvbnN0IF9fbGUxNiAqaW4sIHVuc2lnbmVkIGludCBzaXplLCB1OCAqb3V0KVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02OTQtLyoqXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo2OTU6ICogZWZpX3BhcnRpdGlvbiAtIHNjYW4gZm9yIEdQVCBwYXJ0aXRpb25zXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02OTYtICogQHN0YXRlOiBkaXNrIHBhcnNlZCBwYXJ0aXRpb25zXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxMi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjcxMzppbnQgZWZpX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MTQuNjUzMTEzNDY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTkxMjIzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgUG90ZW50aWFsIERlcGVuZGVuY2llcyBvZiBgZWZpX3BhcnRpdGlvbmAqKlxuXG5BbHJpZ2h0LCBteSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBlZmlfcGFydGl0aW9uYC4gSSd2ZSBxdWlja2x5IGlkZW50aWZpZWQgdGhhdCBhcyB0aGUga2V5IHN5bWJvbC4gTm93LCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSAqb3RoZXIqIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b3BpYywgc28gSSdtIGltbWVkaWF0ZWx5IGNoZWNraW5nIGZvciBvdGhlciByZWxhdGVkIHN5bWJvbHMuIEkga25vdyBgaXNfcHRlX3ZhbGlkYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMgaW5saW5lLCBtZWFuaW5nIGl0J3MgdW5saWtlbHkgdG8gYmUgYSBzZXBhcmF0ZSwgZXhwb3J0ZWQgc3ltYm9sIHRoYXQgd291bGQgc2hvdyB1cC4gSSd2ZSBhbHNvIG5vdGVkIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRpcmVjdGx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlzIGBFRklfUEFSVElUSU9OYC4gSSd2ZSBnb3QgdG8gZGV0ZXJtaW5lIGlmIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaGFzIGZ1cnRoZXIgaW1wbGljYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgRUZJX1BBUlRJVElPTmAgYW5kIGl0cyBzdXJyb3VuZGluZyBlbnZpcm9ubWVudCwgc28gSSdtIGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXMuIEkga25vdyB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgd2l0aGluIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGF0IEtjb25maWcgZmlsZSBpcyBpbmNsdWRlZCBjb25kaXRpb25hbGx5LiBEZXBlbmRpbmcgb24gaG93IGl0J3MgaGFuZGxlZCwgdGhpcyBjb3VsZCBzaWduaWZpY2FudGx5IGFsdGVyIG15IGFuYWx5c2lzLiBJIGhhdmUgdG8gc2VlIHdoYXQgb3RoZXIgY29uZGl0aW9ucyBtaWdodCBnYXRlIHRoZSBpbmNsdXNpb24gb2YgYEVGSV9QQVJUSVRJT05gIGluIHRoZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6MTguNDcyMjM4Mjg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM5MzIyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZSBcXFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZz0yMDI9Y29uZmlnIEJMS19JTkxJTkVfRU5DUllQVElPTl9GQUxMQkFDS1xcbi0tXFxuYmxvY2svS2NvbmZpZy0yMTEtXFxuYmxvY2svS2NvbmZpZzoyMTI6c291cmNlIFxcXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWdcXFwiXFxuYmxvY2svS2NvbmZpZy0yMTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjE5LjgxMTU2ODQ1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM2OTI1MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS2NvbmZpZyBEZXBlbmRlbmN5IGluIHRoZSBCbG9jayBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQgbWUgcXVpY2tseSBydW4gdGhyb3VnaCB0aGlzLiBJJ20gbG9va2luZyBhdCBgYmxvY2svcGFydGl0aW9ucy9LY29uZmlnYC4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cCDigJMgaXQncyBpbmNsdWRlZCBkaXJlY3RseSBpbiBgYmxvY2svS2NvbmZpZ2AuIFRoYXQgdXN1YWxseSBzdWdnZXN0cyBhIHByZXR0eSB0aWdodCBjb3VwbGluZywgcmlnaHQ/IE5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgc3RydWN0dXJlLiBJcyB0aGlzIGEgdG9wLWxldmVsIG1lbnUgdGhhdCBJJ20gbG9va2luZyBhdCwgb3IgaXMgYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AgY29uZGl0aW9uYWxseSBpbmNsdWRlZCB1bmRlciBhbiBgaWZgIHN0YXRlbWVudD8gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgSSB3aWxsIGhhdmUgYSBjb25kaXRpb25hbC4gSWYgdGhlIG1lbnUgaXMgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBiYXNlZCBvbiBvdGhlciBjb25maWd1cmF0aW9ucywgSSBrbm93IHRoaXMgaXMgaW1wb3J0YW50LCBJIHdpbGwgbmVlZCB0byBjaGVjayB0aG9zZS4gVGhpcyB0ZWxscyBtZSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGNvbmRpdGlvbi4gSSBrbm93IEkgaGF2ZSBhIGxvdCBvZiB3b3JrIHRvIGRvLCBidXQgdGhpcyBpcyB0aGUgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjIzLjA0ODQ5NTk1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuIDIwNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXFxuIDIwNzpcXHRcXHRoZWxwXFxuIDIwODpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgbGV0cyB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlIGlubGluZSBlbmNyeXB0aW9uXFxuIDIwOTpcXHRcXHQgIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUga2VybmVsIGNyeXB0byBBUEkgd2hlbiBpbmxpbmVcXG4gMjEwOlxcdFxcdCAgZW5jcnlwdGlvbiBoYXJkd2FyZSBpcyBub3QgcHJlc2VudC5cXG4gMjExOlxcdFxcbiAyMTI6XFx0c291cmNlIFxcXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWdcXFwiXFxuIDIxMzpcXHRcXG4gMjE0OlxcdGNvbmZpZyBCTEtfUE1cXG4gMjE1OlxcdFxcdGRlZl9ib29sIFBNXFxuIDIxNjpcXHRcXG4gMjE3OlxcdCMgZG8gbm90IHVzZSBpbiBuZXcgY29kZVxcbiAyMTg6XFx0Y29uZmlnIEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEXFxuIDIxOTpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjIzLjA0ODU2MTIzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODAxNjgwNjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQgbWUgc2VlLiBJJ20gZGlnZ2luZyBpbnRvIGhvdyBwYXJ0aXRpb24gdHlwZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGlzIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEFoLCByaWdodCEgTGV0J3Mgc2VlLi4uICpXYWl0IGEgbWludXRlLi4uKiBUaGUgYGJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ2AgZmlsZSwgdGhlIG9uZSBJIHN1c3BlY3RlZCwgKmFjdHVhbGx5KiBzdGFydHMgd2l0aCBhIGBtZW51IFwiUGFydGl0aW9uIFR5cGVzXCJgIGRlZmluaXRpb24uIE5vdCBqdXN0IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgd2hvbGUgKiptZW51KiogZGVkaWNhdGVkIHRvIHBhcnRpdGlvbiB0eXBlcyEgVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBoaWdoZXIgbGV2ZWwgb2Ygb3JnYW5pemF0aW9uIGFuZCBwb3RlbnRpYWwgb3B0aW9ucyBhcm91bmQgY29uZmlndXJpbmcgcGFydGl0aW9uIHN1cHBvcnQgdGhhbiBJIGluaXRpYWxseSBhbnRpY2lwYXRlZC4gSXQncyBhIHN0cnVjdHVyZWQgZ3JvdXBpbmcsIHN1Z2dlc3RpbmcgdGhlcmUncyBhIGRlbGliZXJhdGUgY2F0ZWdvcml6YXRpb24gb2YgYXZhaWxhYmxlIHBhcnRpdGlvbiBmb3JtYXRzLiBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgcHJvYmFibHkgbWFueSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0byBzdXBwb3J0IHNwZWNpZmljIHR5cGVzIG9mIHBhcnRpdGlvbnMuIEludGVyZXN0aW5nLCBpdCBtZWFucyB0aGVyZSBhcmUgbWFueSBwYXJ0aXRpb24gdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgYWxzbyBzdWdnZXN0cyBhIG1vZHVsYXIgYXBwcm9hY2ggdG8gcGFydGl0aW9uIHN1cHBvcnQgd2l0aGluIHRoZSBrZXJuZWwsIHJhdGhlciB0aGFuIGEgbW9ub2xpdGhpYyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhpcyBtZW51IHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgcGFydGl0aW9uIHR5cGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoZSBwYXJ0aXRpb24gc3Vic3lzdGVtIVxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjoyOC44NTAyNDQ2NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svcGFydGl0aW9ucy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQYXJ0aXRpb24gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudSBcXFwiUGFydGl0aW9uIFR5cGVzXFxcIlxcbiAgIDY6XFx0XFxuICAgNzpcXHRjb25maWcgUEFSVElUSU9OX0FEVkFOQ0VEXFxuICAgODpcXHRcXHRib29sIFxcXCJBZHZhbmNlZCBwYXJ0aXRpb24gc2VsZWN0aW9uXFxcIlxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXFxuICAxMTpcXHRcXHQgIHdlcmUgcGFydGl0aW9uZWQgdW5kZXIgYW4gb3BlcmF0aW5nIHN5c3RlbSBydW5uaW5nIG9uIGEgZGlmZmVyZW50XFxuICAxMjpcXHRcXHQgIGFyY2hpdGVjdHVyZSB0aGFuIHlvdXIgTGludXggc3lzdGVtLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gd29uJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTU6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjI4Ljg1MDMxNzE2N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM2MDY3MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVGSSBQYXJ0aXRpb25pbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBFRklfUEFSVElUSU9OYCBpcyBhIGJvb2xlYW4sIGFuZCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBgUEFSVElUSU9OX0FEVkFOQ0VEYCBpcyBzZWxlY3RlZC4gVGhhdCBtZWFucyBpdCdzIGxpa2VseSBhbHJlYWR5IHNldCB1cCB0aGUgd2F5IEknZCBleHBlY3QgZm9yIG1vc3QgbW9kZXJuIHN5c3RlbXMuIEJ1dCBpZiBJIHdhbnQgdG8gZXhwbGljaXRseSBlbnN1cmUgRUZJIEdVSUQgcGFydGl0aW9uIHN1cHBvcnQsIEkgY2FuIGp1c3QgaW5jbHVkZSBgRUZJX1BBUlRJVElPTmAgaW4gdGhlIGNvbmZpZy5cblxuSG1tLCB3YWl0Li4uIHNpbmNlIGBFRklfUEFSVElUSU9OYCBkZWFscyB3aXRoIHBhcnRpdGlvbmluZywgZG9lc24ndCBpdCByZXF1aXJlIHRoZSBibG9jayBsYXllcj8gT2YgY291cnNlLCB0aGUgYmxvY2sgbGF5ZXIgaGFuZGxlcyBibG9jayBkZXZpY2VzIGFuZCBwYXJ0aXRpb25pbmcgZGVhbHMgd2l0aCBibG9jayBkZXZpY2VzLCBzbyBpdCdzIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGBCTE9DS2AgaXMgYSBwcmVyZXF1aXNpdGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGJsb2NrL0tjb25maWdgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjMzLjE4NjM4NjkzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBCbG9jayBsYXllciBjb3JlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdG1lbnVjb25maWcgQkxPQ0tcXG4gICA2OlxcdCAgICAgICBib29sIFxcXCJFbmFibGUgdGhlIGJsb2NrIGxheWVyXFxcIiBpZiBFWFBFUlRcXG4gICA3OlxcdCAgICAgICBkZWZhdWx0IHlcXG4gICA4OlxcdCAgICAgICBzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdCAgICAgICBzZWxlY3QgU0JJVE1BUFxcbiAgMTA6XFx0ICAgICAgIGhlbHBcXG4gIDExOlxcdFxcdCBQcm92aWRlIGJsb2NrIGxheWVyIHN1cHBvcnQgZm9yIHRoZSBrZXJuZWwuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCBEaXNhYmxlIHRoaXMgb3B0aW9uIHRvIHJlbW92ZSB0aGUgYmxvY2sgbGF5ZXIgc3VwcG9ydCBmcm9tIHRoZVxcbiAgMTQ6XFx0XFx0IGtlcm5lbC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBlbWJlZGRlZCBkZXZpY2VzLlxcbiAgMTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjMzLjE4NjQ1MTQ1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwMDUxMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRUZJIFBhcnRpdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgYEJMT0NLYCBjbGVhcmx5IGFkZHJlc3NlcyBzb21ldGhpbmcgaW1wb3J0YW50LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBuZWVkIHRvIGVuYWJsZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUga2V5IHN5bWJvbCBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYGVmaV9wYXJ0aXRpb25gLiBUaGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIHBhdGNoIGJvaWxzIGRvd24gdG8gaW1wcm92aW5nIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBFRkkgcGFydGl0aW9uIHRhYmxlIGVudHJpZXMsIHNwZWNpZmljYWxseSBmb3IgR1BULiBJdCdzIGFkZGluZyBhIGNydWNpYWwgY2hlY2sgdG8gcHJldmVudCBhbiBpbnZhbGlkIHN0YXRlIHdoZXJlIHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgKExCQSkgaXMgZ3JlYXRlciB0aGFuIHRoZSBlbmRpbmcgTEJBLiBUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGNoZWNrIHdpdGhpbiB0aGUgYmxvY2sgcGFydGl0aW9uIHBhcnNpbmcgbG9naWMgYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyBkaXNrIHBhcnRpdGlvbiBwYXJzaW5nLlxuXG5CZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCB0aG91Z2gsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBlZmlfcGFydGl0aW9uYCBpcyB0aGUgb25seSBmdW5jdGlvbiBhZmZlY3RlZCBoZXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYGlzX3B0ZV92YWxpZGAgaXMgY2FsbGVkIGFueXdoZXJlIGVsc2Ugd2l0aGluIHRoZSBjb2RlYmFzZS4gV2UgZG9uJ3Qgd2FudCBhbnkgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjozNy40NDY1MDQ1NThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjkzNDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19wdGVfdmFsaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svcGFydGl0aW9ucy9lZmkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL2VmaS5jPTMzND1zdGF0aWMgaW50IGlzX2dwdF92YWxpZChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCB1NjQgbGJhLFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NTItLyoqXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0NTM6ICogaXNfcHRlX3ZhbGlkKCkgLSB0ZXN0cyBvbmUgUFRFIGZvciB2YWxpZGl0eVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNDU0LSAqIEBwdGU6cHRlIHRvIGNoZWNrXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTQ1OT1zdGF0aWMgaW5saW5lIGludFxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NDYwOmlzX3B0ZV92YWxpZChjb25zdCBncHRfZW50cnkgKnB0ZSwgY29uc3QgdTY0IGxhc3RsYmEpXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy00NjEte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYz03MTM9aW50IGVmaV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzM0LVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NzM1OlxcdFxcdGlmICghaXNfcHRlX3ZhbGlkKFxcdTAwMjZwdGVzW2ldLCBsYXN0X2xiYShzdGF0ZS1cXHUwMDNlZGlzaykpKVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzM2LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjozNy43ODM0NDQ3NTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwMDA3MTMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmFycm93aW5nIHRoZSBGb2N1czogRUZJIFBhcnRpdGlvbmluZyoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGlzb2xhdGVkIHdpdGhpbiB0aGUgYGVmaV9wYXJ0aXRpb25gIGNvbnRleHQsIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpczogdGhlIHByb2JsZW0gKkkqIGFtIHdyZXN0bGluZyB3aXRoIGlzIGNvbmZpbmVkIHRvIHRoZSBFRkkgcGFydGl0aW9uIGhhbmRsaW5nLiBUaGlzIGltbWVkaWF0ZWx5IHJlc3RyaWN0cyB0aGUgc2NvcGUgYW5kIGFsbG93cyBtZSB0byBhcHBseSBhbGwgbXkgcHJpb3Iga25vd2xlZGdlIGFib3V0IEVGSSBwYXJ0aXRpb25pbmcgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBibG9jayBsYXllci4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgaXTigJlzIHdvcnRoIHJldmlld2luZyB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVzaWRlIHdpdGggYGVmaV9wYXJ0aXRpb25gIHdpdGhpbiBgYmxvY2svcGFydGl0aW9ucy9lZmkuY2AuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlbid0IG92ZXJsb29rZWQgYW55IG9idmlvdXMgaW50ZWdyYXRpb24gcG9pbnRzLCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciByZWxhdGVkIGxvZ2ljIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlLiBBIHF1aWNrIHNjYW4gb2YgcmVsYXRlZCBmdW5jdGlvbnMgY291bGQgdmVyeSB3ZWxsIHlpZWxkIGluc2lnaHQgdGhhdCBwcm92aWRlcyBhbiBlYXNpZXIsIG1vcmUgb2J2aW91cyBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkxOSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjQyLjY4MzUxODMzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3ODYzOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihbYS16X0EtWjAtOV0rICkqW2Etel9BLVowLTldK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvZWZpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svcGFydGl0aW9ucy9lZmkuYz05OD1zdGF0aWMgaW50IF9faW5pdFxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6OTk6Zm9yY2VfZ3B0X2ZuKGNoYXIgKnN0cilcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEwMC17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEwMy19XFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxMDQ6X19zZXR1cChcXFwiZ3B0XFxcIiwgZm9yY2VfZ3B0X2ZuKTtcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEwNS1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MTE5PXN0YXRpYyBpbmxpbmUgdTMyXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxMjA6ZWZpX2NyYzMyKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMjEte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xMzMtICovXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxMzQ6c3RhdGljIHU2NCBsYXN0X2xiYShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEzNS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTEzOS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjE0MDpzdGF0aWMgaW5saW5lIGludCBwbWJyX3BhcnRfdmFsaWQoZ3B0X21icl9yZWNvcmQgKnBhcnQpXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xNDEte1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0xNzEtICovXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzoxNzI6c3RhdGljIGludCBpc19wbWJyX3ZhbGlkKGxlZ2FjeV9tYnIgKm1iciwgc2VjdG9yX3QgdG90YWxfc2VjdG9ycylcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTE3My17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTIzMy0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjIzNDpzdGF0aWMgc2l6ZV90IHJlYWRfbGJhKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0yMzUtXFx0XFx0ICAgICAgIHU2NCBsYmEsIHU4ICpidWZmZXIsIHNpemVfdCBjb3VudClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9MzA1PXN0YXRpYyBncHRfaGVhZGVyICphbGxvY19yZWFkX2dwdF9oZWFkZXIoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSxcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtMzMzLSAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6MzM0OnN0YXRpYyBpbnQgaXNfZ3B0X3ZhbGlkKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHU2NCBsYmEsXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy0zMzUtXFx0XFx0XFx0Z3B0X2hlYWRlciAqKmdwdCwgZ3B0X2VudHJ5ICoqcHRlcylcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM9NDU5PXN0YXRpYyBpbmxpbmUgaW50XFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo0NjA6aXNfcHRlX3ZhbGlkKGNvbnN0IGdwdF9lbnRyeSAqcHRlLCBjb25zdCB1NjQgbGFzdGxiYSlcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ2MS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jPTQ4MD1zdGF0aWMgdm9pZFxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6NDgxOmNvbXBhcmVfZ3B0cyhncHRfaGVhZGVyICpwZ3B0LCBncHRfaGVhZGVyICphZ3B0LCB1NjQgbGFzdGxiYSlcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTQ4Mi17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTU4MC0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjU4MTpzdGF0aWMgaW50IGZpbmRfdmFsaWRfZ3B0KHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIGdwdF9oZWFkZXIgKipncHQsXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy01ODItXFx0XFx0XFx0ICBncHRfZW50cnkgKipwdGVzKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy02NzctICovXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo2Nzg6c3RhdGljIHZvaWQgdXRmMTZfbGVfdG9fN2JpdChjb25zdCBfX2xlMTYgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dClcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTY3OS17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxMi0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jOjcxMzppbnQgZWZpX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNzE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6NDIuNzQ0MzA4OTQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjM4MjQ4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIEVGSSBQYXJ0aXRpb24gU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYGVmaV9wYXJ0aXRpb25gIHN0cnVjdHVyZS4gTXkgcHJpbWFyeSBmb2N1cyBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB3aGV0aGVyIHRoaXMgYGVmaV9wYXJ0aXRpb25gIGlzIGFjdHVhbGx5IGEgcHVibGljbHkgYXZhaWxhYmxlLCBleHBvcnRlZCBlbnRpdHkgb3IgaWYgaXQncyBtb3JlIG9mIGFuIGludGVybmFsIHN0cnVjdHVyZS4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSBvZiBpbmZsdWVuY2UuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaG93IGl0J3MgKnVzZWQqLiBJcyBpdCBkaXJlY3RseSBlbWJlZGRlZCB3aXRoaW4gbGFyZ2VyLCBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBJcyBpdCByZWZlcmVuY2VkIGJ5IHBvaW50ZXJzPyBVbmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHN0cnVjdHVyZXMgd2lsbCBpbGx1bWluYXRlIGl0cyBmdW5jdGlvbiBhbmQgc2lnbmlmaWNhbmNlIGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIG1hcCBvdXQgaXRzIFwiZmFtaWx5IHRyZWVcIiB3aXRoaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxNToyNjo0Ni4xMDgxMzYxNThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjY0MzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlZmlfcGFydGl0aW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvY2hlY2suaD01Nj1pbnQgY21kbGluZV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSk7XFxuYmxvY2svcGFydGl0aW9ucy9jaGVjay5oOjU3OmludCBlZmlfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY2hlY2suaC01OC1pbnQgaWJtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKik7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0xNz1zdGF0aWMgaW50ICgqY29uc3QgY2hlY2tfcGFydFtdKShzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKikgPSB7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy01MS0jaWZkZWYgQ09ORklHX0VGSV9QQVJUSVRJT05cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo1MjpcXHRlZmlfcGFydGl0aW9uLFxcdFxcdC8qIHRoaXMgbXVzdCBjb21lIGJlZm9yZSBtc2RvcyAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTUzLSNlbmRpZlxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYz02Nzg9c3RhdGljIHZvaWQgdXRmMTZfbGVfdG9fN2JpdChjb25zdCBfX2xlMTYgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTggKm91dClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjk0LS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmM6Njk1OiAqIGVmaV9wYXJ0aXRpb24gLSBzY2FuIGZvciBHUFQgcGFydGl0aW9uc1xcbmJsb2NrL3BhcnRpdGlvbnMvZWZpLmMtNjk2LSAqIEBzdGF0ZTogZGlzayBwYXJzZWQgcGFydGl0aW9uc1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYy03MTItICovXFxuYmxvY2svcGFydGl0aW9ucy9lZmkuYzo3MTM6aW50IGVmaV9wYXJ0aXRpb24oc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG5ibG9jay9wYXJ0aXRpb25zL2VmaS5jLTcxNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjQ2LjQxNDc4NjIxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ2MjYxOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkNvbmZpcm1pbmcgRUZJIFBhcnRpdGlvbiBIYW5kbGluZyBhbmQgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsICplZmlfcGFydGl0aW9uKiBpcyBpbmRlZWQgcHJlc2VudCB3aXRoaW4gdGhlICpjaGVja19wYXJ0KiBhcnJheSwgaW4gYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gVGhpcyBjb25maXJtcyB0aGF0IHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IHN5bWJvbCBmb3IgcGFydGl0aW9uIGNoZWNrcy5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbid0IGFueSBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIHJlY2FsbCB0aGF0IGBFRklfUEFSVElUSU9OYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBQQVJUSVRJT05fQURWQU5DRURgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRoYXQuIFRoaXMgbGlrZWx5IGltcGFjdHMgdGhlIGVuYWJsZW1lbnQgb3IgYmVoYXZpb3Igb2YgYEVGSV9QQVJUSVRJT05gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjQwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6NTAuMzYxMDUwOTM1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAyODI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEFSVElUSU9OX0FEVkFOQ0VEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9wYXJ0aXRpb25zL0tjb25maWc9NT1tZW51IFxcXCJQYXJ0aXRpb24gVHlwZXNcXFwiXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnLTYtXFxuYmxvY2svcGFydGl0aW9ucy9LY29uZmlnOjc6Y29uZmlnIFBBUlRJVElPTl9BRFZBTkNFRFxcbmJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZy04LVxcdGJvb2wgXFxcIkFkdmFuY2VkIHBhcnRpdGlvbiBzZWxlY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjUwLjQzODA4NTY3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzI4Njg3Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBsb2dpYywgYXMgdGhvdWdoIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBpbXB1bHNlIGhlcmUgaXMgdG8gZW5hYmxlIGBQQVJUSVRJT05fQURWQU5DRURgLiBUaGF0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGZvciBtb3JlIGNvbXBsZXggcGFydGl0aW9uIHNldHVwcy4gVGhlbiBJIHNlZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIGlzIGEgYm9vbGVhbiwgYW5kIGl0cyBkZWZpbml0aW9uIGhhcyBhIGNydWNpYWwgY29uZGl0aW9uYWw6IFwiaWYgUEFSVElUSU9OX0FEVkFOQ0VEXCIuIFRoaXMgbWVhbnMgaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXMgZGlzYWJsZWQsIGBFRklfUEFSVElUSU9OYCBpcyBlZmZlY3RpdmVseSBoaWRkZW4gZnJvbSB0aGUgdXNlciwgZXZlbiB0aG91Z2ggaXRzIGBkZWZhdWx0IHlgIGlzIHByZXNlbnQuXG5cbkhvbGQgb24gYSBzZWNvbmQsIHRoYXQgZGVmYXVsdCB2YWx1ZSBpcyBgeWAhIFRoYXQgbWVhbnMgZXZlbiBpZiBgUEFSVElUSU9OX0FEVkFOQ0VEYCBpc24ndCBleHBsaWNpdGx5IHNldCwgYEVGSV9QQVJUSVRJT05gIHdpbGwgc3RpbGwgYmUgY29tcGlsZWQgKmludG8qIHRoZSBrZXJuZWwgd2l0aCBhIGRlZmF1bHQgb2YgeWVzLCBpZiB0aGUgYnJvYWRlciBhZHZhbmNlZCBwYXJ0aXRpb25pbmcgZmVhdHVyZSBpc24ndCBzZWxlY3RlZC4gVGhlIHZpc2libGUgVUkgZWxlbWVudCBpcyBzdGlsbCBoaWRkZW4sIGJ1dCB0aGUgY29kZSBtYXkgc3RpbGwgYmUgYWN0aXZlLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBoZXJlLCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBibG9jay9wYXJ0aXRpb25zL0tjb25maWdgIGZpbGUgYW5kIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb2YgdGhlIGBFRklfUEFSVElUSU9OYCBkZWZpbml0aW9uLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZW5kZWQgdXNhZ2Ugb2YgdGhpcyBzZXR0aW5nLiBUaGlzIHdob2xlIHRoaW5nIHNtZWxscyBsaWtlIGEgZmVhdHVyZSBmbGFnIHdpdGggYSBwcmUtc2V0IGRlZmF1bHQgLSBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgZmVhdHVyZXMgYXJlIGltcGFjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTQ0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6MjY6NTQuNzY2Nzc1NTQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL3BhcnRpdGlvbnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFx0ZGVwZW5kcyBvbiBQQVJUSVRJT05fQURWQU5DRURcXG4gMjQ2OlxcdFxcdGhlbHBcXG4gMjQ3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd291bGQgbGlrZSB0byBtb3VudCB0aGUgUmlvIEthcm1hIE1QMyBwbGF5ZXIsIGFzIGl0XFxuIDI0ODpcXHRcXHQgIHVzZXMgYSBwcm9wcmlldGFyeSBwYXJ0aXRpb24gdGFibGUuXFxuIDI0OTpcXHRcXG4gMjUwOlxcdGNvbmZpZyBFRklfUEFSVElUSU9OXFxuIDI1MTpcXHRcXHRib29sIFxcXCJFRkkgR1VJRCBQYXJ0aXRpb24gc3VwcG9ydFxcXCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEXFxuIDI1MjpcXHRcXHRkZWZhdWx0IHlcXG4gMjUzOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAyNTQ6XFx0XFx0aGVscFxcbiAyNTU6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoXFxuIDI1NjpcXHRcXHQgIHdlcmUgcGFydGl0aW9uZWQgdXNpbmcgRUZJIEdQVC5cXG4gMjU3OlxcdFxcbiAyNTg6XFx0Y29uZmlnIFNZU1Y2OF9QQVJUSVRJT05cXG4gMjU5OlxcdFxcdGJvb2wgXFxcIlNZU1Y2OCBwYXJ0aXRpb24gdGFibGUgc3VwcG9ydFxcXCIgaWYgUEFSVElUSU9OX0FEVkFOQ0VEXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE1OjI2OjU0Ljc2Njg0MDQ4N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njc5OTI5NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFRkkgUGFydGl0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIHRoYXQgYGJvb2wgXCJFRkkgR1VJRCBQYXJ0aXRpb24gc3VwcG9ydFwiIGlmIFBBUlRJVElPTl9BRFZBTkNFRGAgbWVhbnQgaXQncyAqY29uZGl0aW9uYWxseSogZW5hYmxlZCwgYnV0IHRoZSBgZGVmYXVsdCB5YCBvdmVycmlkZXMgdGhhdDsgaXQncyBhbHdheXMgb24gdW5sZXNzIGBQQVJUSVRJT05fQURWQU5DRURgIGlzIHNwZWNpZmljYWxseSAqZGlzYWJsZWQqLiBTbywgc2V0dGluZyBgRUZJX1BBUlRJVElPTmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIGV2ZW4gaWYgYFBBUlRJVElPTl9BRFZBTkNFRGAgaXNuJ3Qgc3BlY2lmaWVkLiBJdCBzZWVtcyByZWR1bmRhbnQgdG8gaW5jbHVkZSBgUEFSVElUSU9OX0FEVkFOQ0VEYCBoZXJlLiBJbiBmYWN0LCBpZiBgUEFSVElUSU9OX0FEVkFOQ0VEYCBpc24ndCBldmVuIGRlZmluZWQsIGBFRklfUEFSVElUSU9OYCBpcyBzdGlsbCBgeWAgYnkgZGVmYXVsdC4gV2UganVzdCBuZWVkIHRvIGRlZmluZSBgRUZJX1BBUlRJVElPTmAuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIGF0IHBsYXkgaGVyZS4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBCTE9DS2AgYW5kIGBDUkMzMmAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBwYXJ0aXRpb24gc2NoZW1lIGluIHF1ZXN0aW9uLlxuXG5UaGVyZWZvcmUsIG15IHNpbXBsaWZpZWQgY29uZmlndXJhdGlvbiBzaG91bGQganVzdCBiZSBgRUZJX1BBUlRJVElPTmAsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4gVGhlIGZvY3VzIHN5bWJvbCBpcyBgZWZpX3BhcnRpdGlvbmAsIHRoYXQncyB0aGUgcG9pbnQgb2YgaW50ZXJlc3QuXG5cbkFscmlnaHQsIGxldCdzIHN1bW1hcml6ZSB0aGUgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBteSBmaW5kaW5nczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIGB0cnVlYCAtIFRoaXMgaXMgY2xlYXJseSBhIGNoYW5nZSB0byBwYXJ0aXRpb24gcGFyc2luZywgc28gaXQncyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJlZmlfcGFydGl0aW9uXCJdYCAtIFRoaXMgaXMgdGhlIGNlbnRyYWwgYXNwZWN0IG9mIHRoZSBuZXcgdmFsaWRhdGlvbi5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIkVGSV9QQVJUSVRJT05cIl1gIC0gVGhpcyBlbmFibGVzIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eS5cbiogICAqKlJlYXNvbmluZzoqKiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgRUZJIHBhcnRpdGlvbiB0YWJsZSBlbnRyaWVzIChHUFQpLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzdGFydGluZyBMQkEgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgZW5kaW5nIExCQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgd2hlbiBwYXJzaW5nIGRpc2sgcGFydGl0aW9ucy5cIlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudCwgc28gbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTgxLCJPdXRwdXRUb2tlbnMiOjk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTU6Mjc6MDEuNDQ2NzcyMDU4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyNjE2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QQVJUSVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIEVGSSBwYXJ0aXRpb24gdGFibGUgZW50cmllcyAoR1BUKSwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgc3RhcnRpbmcgTEJBIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBMQkEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBibG9jayBwYXJ0aXRpb24gcGFyc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gcGFyc2luZyBkaXNrIHBhcnRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRUZJX1BBUlRJVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9wYXJ0aXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgRUZJIHBhcnRpdGlvbiB0YWJsZSBlbnRyaWVzIChHUFQpLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBzdGFydGluZyBMQkEgaXMgbm90IGdyZWF0ZXIgdGhhbiB0aGUgZW5kaW5nIExCQS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGJsb2NrIHBhcnRpdGlvbiBwYXJzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgd2hlbiBwYXJzaW5nIGRpc2sgcGFydGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[1] Phase: Succeeded StartedAt: 2026-07-27 15:27:12 +0000 UTC FinishedAt: 2026-07-27 15:27:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 15:27:12 +0000 UTC FinishedAt: 2026-07-27 15:27:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2] Phase: Succeeded StartedAt: 2026-07-27 15:27:12 +0000 UTC FinishedAt: 2026-07-27 20:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 15:27:12 +0000 UTC FinishedAt: 2026-07-27 20:21:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 15:27:12 +0000 UTC FinishedAt: 2026-07-27 15:27:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 15:27:12 +0000 UTC FinishedAt: 2026-07-27 15:27:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-convert-artifact-777583699/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 15:27:23 +0000 UTC FinishedAt: 2026-07-27 16:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 15:27:23 +0000 UTC FinishedAt: 2026-07-27 16:13:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*583e5203-a12f-4792-a330-ae7eec37b35a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-convert-artifact-777583699/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "1ff50e2a-15ff-4d47-9b10-4be9f87be265", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-4266147713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 15:27:23 +0000 UTC FinishedAt: 2026-07-27 16:12:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*583e5203-a12f-4792-a330-ae7eec37b35a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-convert-artifact-777583699/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "1ff50e2a-15ff-4d47-9b10-4be9f87be265", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-4266147713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 16:13:08 +0000 UTC FinishedAt: 2026-07-27 16:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 16:13:08 +0000 UTC FinishedAt: 2026-07-27 16:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 16:13:08 +0000 UTC FinishedAt: 2026-07-27 16:13:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 16:13:08 +0000 UTC FinishedAt: 2026-07-27 16:13:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-convert-artifact-2948132938/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 16:13:18 +0000 UTC FinishedAt: 2026-07-27 16:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 16:13:18 +0000 UTC FinishedAt: 2026-07-27 16:15:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1ff50e2a-15ff-4d47-9b10-4be9f87be265,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-4266147713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 16:15:22 +0000 UTC FinishedAt: 2026-07-27 16:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 16:15:22 +0000 UTC FinishedAt: 2026-07-27 16:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 16:15:22 +0000 UTC FinishedAt: 2026-07-27 17:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 16:15:22 +0000 UTC FinishedAt: 2026-07-27 17:15:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*583e5203-a12f-4792-a330-ae7eec37b35a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-convert-artifact-2948132938/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "59e3844d-fda4-41f2-93cc-a1d86dc4441d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-3776009326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 16:15:22 +0000 UTC FinishedAt: 2026-07-27 17:15:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*583e5203-a12f-4792-a330-ae7eec37b35a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-convert-artifact-2948132938/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "59e3844d-fda4-41f2-93cc-a1d86dc4441d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-3776009326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 17:15:41 +0000 UTC FinishedAt: 2026-07-27 17:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 17:15:41 +0000 UTC FinishedAt: 2026-07-27 17:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 17:15:41 +0000 UTC FinishedAt: 2026-07-27 17:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 17:15:41 +0000 UTC FinishedAt: 2026-07-27 17:18:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*59e3844d-fda4-41f2-93cc-a1d86dc4441d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-3776009326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 17:18:13 +0000 UTC FinishedAt: 2026-07-27 20:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 17:18:13 +0000 UTC FinishedAt: 2026-07-27 20:21:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1ff50e2a-15ff-4d47-9b10-4be9f87be265,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*59e3844d-fda4-41f2-93cc-a1d86dc4441d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-4266147713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-3776009326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 17:18:13 +0000 UTC FinishedAt: 2026-07-27 17:18:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 17:18:13 +0000 UTC FinishedAt: 2026-07-27 17:18:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-convert-artifact-3393973215/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 17:18:13 +0000 UTC FinishedAt: 2026-07-27 17:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 17:18:13 +0000 UTC FinishedAt: 2026-07-27 17:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 17:18:13 +0000 UTC FinishedAt: 2026-07-27 17:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 17:18:23 +0000 UTC FinishedAt: 2026-07-27 20:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6l6qs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["efi_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4df5ac1e975032ffeef732e3f34f9096e20a0c2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_PARTITION"],"series_id":"27725e92-41cc-4d0e-a58b-1547ddc758bc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 17:18:23 +0000 UTC FinishedAt: 2026-07-27 20:21:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1ff50e2a-15ff-4d47-9b10-4be9f87be265,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*59e3844d-fda4-41f2-93cc-a1d86dc4441d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-4266147713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-build-action-3776009326/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6l6qs/series-workflow6l6qs-convert-artifact-3393973215/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}