Name: series-workflowm6sfq Phase: Succeeded StartedAt: 2026-08-13 17:39:48 +0000 UTC FinishedAt: 2026-08-13 21:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[0] Phase: Succeeded StartedAt: 2026-08-13 17:39:48 +0000 UTC FinishedAt: 2026-08-13 17:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 17:39:48 +0000 UTC FinishedAt: 2026-08-13 17:59:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "272022b2-9bf2-4579-94d9-31c17c964860" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "generic_map_update_batch", "generic_map_lookup_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYGNwdWAgdmFsdWUgZXh0cmFjdGVkIGZyb20gYGZsYWdzYCBpbiBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AuIEl0IGNoYW5nZXMgdGhlIGNoZWNrIGZyb20gYGNwdSBcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKClgIHRvIGBjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KWAuIFRoaXMgaXMgYSBib3VuZHMvdmFsaWRpdHkgY2hlY2sgdGhhdCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzYWdlIG9mIGludmFsaWQgQ1BVIElEcywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gKG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCB0byBjb3JyZWN0bHkgdmFsaWRhdGUgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgIGluc3RlYWQgb2YgYG51bV9wb3NzaWJsZV9jcHVzKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgKGUuZy4sIGBCUEZfTUFQX0xPT0tVUF9FTEVNYCwgYEJQRl9NQVBfVVBEQVRFX0VMRU1gLCBhbmQgYmF0Y2ggb3BlcmF0aW9ucykuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgQ1BVIHZhbGlkYXRpb24gbG9naWMgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MjU4MDdkYjBhOTM3NzkxM2UwOWQyMjFmZTE2MjRmOWU1MDI5Yjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTc6NTc6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDc3MTlmNjUyODQ0NTYuLjM1M2YxM2JiMDY2ZDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtNDIwMiw3ICYjNDM7NDIwMiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGZsYWdzLCB1NjQgYWxsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdGNwdSA9IGZsYWdzIFx1MDAzZVx1MDAzZSAzMjtcbi1cdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSBcdTAwMjZcdTAwMjYgY3B1IFx1MDAzZT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSlcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AgdG8gY29ycmVjdGx5IHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIHVzaW5nIGBucl9jcHVfaWRzYCBhbmQgYGNwdV9wb3NzaWJsZSgpYCBpbnN0ZWFkIG9mIGBudW1fcG9zc2libGVfY3B1cygpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucyBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIChlLmcuLCBgQlBGX01BUF9MT09LVVBfRUxFTWAsIGBCUEZfTUFQX1VQREFURV9FTEVNYCwgYW5kIGJhdGNoIG9wZXJhdGlvbnMpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IENQVSB2YWxpZGF0aW9uIGxvZ2ljIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI1ODA3ZGIwYTkzNzc5MTNlMDlkMjIxZmUxNjI0ZjllNTAyOWI5NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE3OjU3OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggNzcxOWY2NTI4NDQ1Ni4uMzUzZjEzYmIwNjZkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oCkBAIC00MjAyLDcgJiM0Mzs0MjAyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgYnBmX21hcF9jaGVja19vcF9mbGFncyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsIHU2NCBhbGwKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWNwdSA9IGZsYWdzICZndDsmZ3Q7IDMyOwotCQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0NQVSkgJmFtcDsmYW1wOyBjcHUgJmd0Oz0gbnVtX3Bvc3NpYmxlX2NwdXMoKSkKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQ1BVKSAmYW1wOyZhbXA7IChjcHUgJmd0Oz0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSkpKQogCQkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIE1hcCBPcGVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuIFRoZSBjb3JlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIENQVSB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgbWFwIG9wZXJhdGlvbiBmbGFncyBjaGVjay4gSW5zdGVhZCBvZiBqdXN0IHZlcmlmeWluZyBgY3B1YCBhZ2FpbnN0IGBudW1fcG9zc2libGVfY3B1cygpYCwgaXQmIzM5O3Mgbm93IGNoZWNraW5nIGFnYWluc3QgYG5yX2NwdV9pZHNgIGFuZCB1c2luZyBgY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFmZmVjdGluZyBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggQ1BVLXNwZWNpZmljIGRhdGEgd2l0aGluIG1hcHMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgdXNhZ2Ugb2YgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGl0c2VsZi4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyBjYWxsZWQgZnJvbT8gV2hhdCBwYXJ0cyBvZiB0aGUgQlBGIHN1YnN5c3RlbSByZWx5IG9uIHRoaXMgdmFsaWRhdGlvbiwgYW5kIGhvdyBtaWdodCB0aGlzIHN1YnRsZSBzaGlmdCBhZmZlY3QgdGhlaXIgYmVoYXZpb3I/IEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgYW5kIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBtYXAgdHlwZXMgdGhhdCBjb3VsZCBiZSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZSBpbiB0aGUgdmFsaWRhdGlvbiBsb2dpYy4gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9jaGVja19vcF9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTQxNzI9c3RhdGljIGlubGluZSBib29sIGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDE4NC1cbmluY2x1ZGUvbGludXgvYnBmLmg6NDE4NTpzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbG93ZWRfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQxODYte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE3NzM9X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3OTktXHRcdGFsbG93ZWRfZmxhZ3MgfD0gQlBGX0ZfQ1BVO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTgwMDpcdHJldCA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBlbGVtX21hcF9mbGFncywgYWxsb3dlZF9mbGFncyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xODAxLVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTg4PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk0Olx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGZsYWdzLCBCUEZfRl9MT0NLKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTUtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNDU9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNjItXHRlbGVtX21hcF9mbGFncyA9IGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncztcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNjM6XHRyZXQgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgZWxlbV9tYXBfZmxhZ3MsIEJQRl9GX0xPQ0spO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzI2NC1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTc4Mj1zdGF0aWMgaW50IG1hcF9sb29rdXBfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xODAwLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTgwMTpcdGVyciA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBhdHRyLVx1MDAzZWZsYWdzLCBCUEZfRl9MT0NLIHwgQlBGX0ZfQ1BVKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE4MDItXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTE4NDQ9c3RhdGljIGludCBtYXBfdXBkYXRlX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE4NjUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxODY2Olx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXHUwMDNlZmxhZ3MsIH4wKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE4NjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIwNjI9aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA3MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwNzI6XHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA3My1cdFx0XHRcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMTIwPWludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTMxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEzMjpcdGVyciA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBhdHRyLVx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MsIEJQRl9GX0xPQ0sgfCBCUEZfRl9DUFUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEzMy1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCUEYgTWFwIE9wZXJhdGlvbiBGbGFncyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyDigJMgaXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgY3JpdGljYWwgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGNoZWNrIGhlcmUuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gaXRzIGltcG9ydGFuY2UuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGBzdGF0aWMgaW5saW5lYCwgc28gdGhlcmUmIzM5O3Mgbm8gdW5pcXVlIHN5bWJvbCBhZGRyZXNzIHRvIHRhcmdldCBkaXJlY3RseS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgY2FsbCBpdC4KCkxldCBtZSBzZWXigKYgdGhlIGNhbGxlcnMgYXJlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYG1hcF9sb29rdXBfZWxlbWAsIGBtYXBfdXBkYXRlX2VsZW1gLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBSaWdodCwgZ290IGl0LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgaWYgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIGFyZSBhbHNvIHN0YXRpYy4gQWhhLCB0aGV5IGFyZTsgdGhleSYjMzk7cmUgZGVmaW5lZCBhcyBgc3RhdGljYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLgoKV2FpdCBhIG1pbnV0ZSwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRob3NlIGFyZSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgZmlsZS4gT2theSwgbGV0JiMzOTtzIGhlYWQgb3ZlciB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MjAwNj1pbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA2MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwNjI6aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYzLVx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBtZXRob2RpY2FsIGFwcHJvYWNoLCBhcyBJJiMzOTtkIGV4cGVjdC4gVGhlIG5hbWUgc3VnZ2VzdHMgYSBiYXRjaCBwcm9jZXNzaW5nIGFwcHJvYWNoIHRvIG1hcCBsb29rdXBzLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBXaGF0IGtpbmQgb2YgbWFwPyBJcyBpdCBhIHN0YW5kYXJkIGhhc2htYXAsIGEgdHJpZSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgd2Ugc2hvdWxkIGJlIGxvb2tpbmcgZm9yLCBwYXJ0aWN1bGFybHkgdW5kZXIgdmFyeWluZyBiYXRjaCBzaXplcz8gTWVtb3J5IG92ZXJoZWFkIGZvciB0aGUgYmF0Y2ggb3BlcmF0aW9uIGlzIGFsc28gYW4gb2J2aW91cyBjb25jZXJuIOKAkyBpcyBpdCBvcHRpbWl6ZWQsIG9yIGRvZXMgdGhlIGJhdGNoaW5nIGludHJvZHVjZSBzaWduaWZpY2FudCBtZW1vcnkgYm90dGxlbmVja3M/IEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBtaXNzaW5nIGtleXMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBBbnkgdXNlIG9mIHBhcmFsbGVsaXNtIG9yIHZlY3Rvcml6YXRpb24gd2l0aGluIHRoaXMgcm91dGluZSB3aWxsIGFsc28gYmUgb2YgcGFydGljdWxhciBpbnRlcmVzdCwgY29uc2lkZXJpbmcgdGhpcyBpcyBhICYjMzQ7YmF0Y2gmIzM0OyBvcGVyYXRpb24sIHRoYXQgd291bGQgYmUgdGhlIGJlc3Qgb3V0Y29tZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgZGVhZGxvY2tzIGFzIGEgcmVzdWx0IG9mIGNvbmN1cnJlbmN5LiBGaW5hbGx5LCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHdoYXQgYWJvdXQgY2FjaGUgY29oZXJlbmN5IGFuZCBmYWxzZSBzaGFyaW5nPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTIwNjI9aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjExOS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIxMjA6aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyMS1cdFx0XHRcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyB3b3Jrcy4gIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgYmF0Y2hlZCBsb29rdXBzIGFuZCBkZWxldGlvbnMgd2l0aGluIHRoZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIOKAkyBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmluZyBvbiBhIGZldyBrZXkgYXJlYXMgSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUuCgoqICAgKipDb25jdXJyZW5jeToqKiBJcyB0aGlzIGRlc2lnbmVkIHdpdGggYW55IGxldmVsIG9mIGNvbmN1cnJlbmN5IGluIG1pbmQ/IEJhdGNoZWQgb3BlcmF0aW9ucyBvZnRlbiBoaW50IGF0IGEgbmVlZCBmb3IgdGhyZWFkIHNhZmV0eSwgb3IgYXQgbGVhc3QgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24uIEkgd2FudCB0byBjaGVjayBmb3IgbG9ja3MsIGF0b21pYyBvcGVyYXRpb25zLCBvciBhbnkgb3RoZXIgbWVjaGFuaXNtcyB0aGF0IHByZXZlbnQgZGF0YSByYWNlcy4gSWYgbm90LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBleHRlcm5hbCBndWFyYW50ZWVzLCBvciBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGlmIHRob3NlIGd1YXJhbnRlZXMgYXJlIGxhY2tpbmcuCgoqICAgKipJdGVyYXRpb24gJmFtcDsgS2V5IEhhbmRsaW5nOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsb29rdXAvZGVsZXRlIHJlcXVlc3RzPyBXaGF0JiMzOTtzIHRoZSBkYXRhIHN0cnVjdHVyZSBiZWluZyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgYmF0Y2g/IElzIGl0IHVzaW5nIGEgc2ltcGxlIGFycmF5LCBhIGxpbmtlZCBsaXN0LCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXlzIGFyZSBoYW5kbGVkIHRvIGFzc2VzcyBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFueSBwZXIta2V5IG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgaWYgbm90IHdlbGwtb3B0aW1pemVkLCBjYW4gYWRkIHNpZ25pZmljYW50IG92ZXJoZWFkLiBUaGUgYWN0dWFsICYjMzQ7bG9va3VwIGFuZCBkZWxldGUmIzM0OyBpdHNlbGYgaXMgZ2VuZXJhbGx5IHByZXR0eSBxdWljaywgaXQmIzM5O3MgdGhlIGl0ZXJhdGlvbiB0aGF0JiMzOTtzIHRoZSBraWxsZXIuCgoqICAgKipFcnJvciBIYW5kbGluZyBhbmQgQXRvbWljaXR5OioqIFdoYXQgaGFwcGVucyBpZiBzb21lIG9mIHRoZSBsb29rdXBzL2RlbGV0ZXMgc3VjY2VlZCBhbmQgb3RoZXJzIGZhaWw/IElzIHRoZXJlIGFueSBhdG9taWNpdHkgZ3VhcmFudGVlPyBEb2VzIGl0IGFsbG93IGZvciBwYXJ0aWFsIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgdG8gc2lnbmFsIGVycm9ycz8gIEEgcGFydGlhbCBmYWlsdXJlIGNvdWxkIGxlYWQgdG8gY29ycnVwdGlvbiBzbyBJIG5lZWQgdG8ga25vdyBob3cgaXQmIzM5O3MgaGFuZGxlZC4KCiogICAqKlBlcmZvcm1hbmNlIE9wdGltaXphdGlvbjoqKiBBcmUgdGhlcmUgYW55IG9idmlvdXMgb3B0aW1pemF0aW9ucywgc3VjaCBhcyB1c2luZyBTSU1EIGluc3RydWN0aW9ucyBvciBjYWNoZS1jb25zY2lvdXMgYWNjZXNzIHBhdHRlcm5zPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYWxnb3JpdGhtaWMgY29tcGxleGl0aWVzIChxdWFkcmF0aWMgY29tcGxleGl0eSBhbnlvbmU/KSBhbmQgd2hldGhlciB0aGlzIGZ1bmN0aW9uIHV0aWxpemVzIGFueSBzcGVjaWFsIGRhdGEgc3RydWN0dXJlcy4KClRoaXMgaW5pdGlhbCBwcm9iaW5nIHdpbGwgZGlyZWN0IG1lIHRvIHRoZSBob3RzcG90cyBmb3IgcmV2aWV3OiB0aGUgbG9vcCwgbWVtb3J5IGJhcnJpZXJzLCBlcnJvciBzdGF0dXMsIGFuZCBhbnkgc3BlY2lhbCBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbG9uZyB0aGUgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTE3NzI9c3RhdGljIGludFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTc3MzpfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzc0LVx0XHRcdFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxND1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTYte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxNzpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxOC1cdFx0XHRcdFx0XHQgIGZhbHNlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDIyPWh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMjUte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjAyNjpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI3LVx0XHRcdFx0XHRcdCAgZmFsc2UsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzE9aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzMte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjAzNDpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzNS1cdFx0XHRcdFx0XHQgIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzOT1odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDIte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0MzpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDQ0LVx0XHRcdFx0XHRcdCAgZmFsc2UsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDQ4PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1MS17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDUyOlx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDUzLVx0XHRcdFx0XHRcdCAgdHJ1ZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA1Nz1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2MC17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDYxOlx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjItXHRcdFx0XHRcdFx0ICB0cnVlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDY2PWh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2OC17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY5Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDcwLVx0XHRcdFx0XHRcdCAgdHJ1ZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNzQ9aHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA3Ny17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDc4Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzktXHRcdFx0XHRcdFx0ICB0cnVlLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJhdGNoIExvb2t1cCBhbmQgRGVsZXRlIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYmF0Y2ggZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG5vbi1zdGF0aWMgb25lcy4gSSBzZWUgYSBwYXR0ZXJuIGhlcmU6IGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCB0aGVuIHRoZSBzYW1lIHNldCBvZiBmdW5jdGlvbnMsIGJ1dCBwcmVmaXhlZCB3aXRoIGBscnVgLCB3aGljaCBJIGFzc3VtZSBhcmUgTFJVIHZhcmlhbnRzOiBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgIGV0Yy4KCkNsZWFybHksIHdlJiMzOTt2ZSBnb3QgcGVyLUNQVSBhbmQgbm9uLXBlci1DUFUgdmVyc2lvbnMsIGFuZCBhbHNvIGxvb2t1cC1vbmx5IHZlcnN1cyBsb29rdXAtYW5kLWRlbGV0ZSB2YXJpYXRpb25zIGZvciBib3RoIHN0YW5kYXJkIGFuZCBMUlUgaGFzaCB0YWJsZXMuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgc2V0IG9mIG9wdGltaXphdGlvbnMgYW5kIGZlYXR1cmVzLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGlubmVyIHdvcmtpbmdzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBvdXQgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBzaW5jZSB0aGF0IHNvdW5kcyBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdG8gZXhhbWluZSBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MzIzNT1zdGF0aWMgdTY0IHJodGFiX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQ0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzI0NTpzdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQ2LVx0XHRcdFx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM4MT1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4My17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzg0Olx0cmV0dXJuIF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzODUtfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMzODc9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4OS17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzkwOlx0cmV0dXJuIF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVsdmluZyBpbnRvIHRoZSBNYXBwaW5nIE9wZXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3RhdGljIGhlcmUsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBtYXBwaW5nIG9wZXJhdGlvbnMuIFRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZSwgYXMgaXQmIzM5O3MgdGhlIHNwZWNpZmljIHJvdXRpbmUgcmVzcG9uc2libGUgZm9yIGxvb2t1cHMgKmFuZCogZGVsZXRpb25zIHdpdGhpbiB0aGUgbWFwIHN0cnVjdHVyZS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXNzaWdubWVudHMgd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgc3BlY2lmaWMgb3BlcmF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTI5NzQ9c3RhdGljIGxvbmcgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTg3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk4ODpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5ODkte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MTU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMy1cdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI0Olx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI1LVx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEJhdGNoIE9wZXJhdGlvbnMgaW4gR2VuZXJpYyBNYXBzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBiYXRjaCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZXNlIGdlbmVyaWMgbWFwIGltcGxlbWVudGF0aW9ucy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gbWluaW1pemUgb3ZlcmhlYWQgYW5kIG1heGltaXplIHRocm91Z2hwdXQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgY2xvc2UgbG9vayBhdCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IGVmZmljaWVudGx5IHRoZXkgaGFuZGxlIG11bHRpcGxlIGtleS12YWx1ZSBwYWlycyBzaW11bHRhbmVvdXNseS4KCkkmIzM5O20gdGhpbmtpbmc6CiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1c2VkPyBBcmUgd2UgdGFsa2luZyBoYXNoIHRhYmxlcywgYmFsYW5jZWQgdHJlZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgd2lsbCBkaWN0YXRlIHRoZSB0aGVvcmV0aWNhbCBiZXN0IGFuZCB3b3JzdC1jYXNlIHBlcmZvcm1hbmNlIGJvdW5kcywgYW5kIGhvdyB0aGF0IGlzIGFmZmVjdGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBiYXRjaGVzLgoqICAgKipDb25jdXJyZW5jeToqKiBJcyB0aGVyZSBhbnkgaW50ZXJuYWwgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gZ29pbmcgb24gd2l0aGluIHRoZXNlIGJhdGNoIGZ1bmN0aW9ucz8gQXJlIHRoZSBvcGVyYXRpb25zIHRocmVhZC1zYWZlPyBIb3cgZG9lcyB0aGUgY29uY3VycmVuY3kgbW9kZWwgYWZmZWN0IHNjYWxhYmlsaXR5LCBhbmQgaXMgaXQgYSBib3R0bGVuZWNrPwoqICAgKipNZW1vcnkgQWNjZXNzIFBhdHRlcm5zOioqIEhvdyBhcmUga2V5cyBhbmQgdmFsdWVzIGJlaW5nIGFjY2Vzc2VkIGluIG1lbW9yeT8gQXJlIHRoZSBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBjYWNoZSBsb2NhbGl0eT8gRG8gdGhleSBleGhpYml0IGdvb2Qgc3BhdGlhbCBhbmQgdGVtcG9yYWwgbG9jYWxpdHksIG9yIGFyZSB3ZSBleHBlcmllbmNpbmcgY2FjaGUgbWlzc2VzPwoqICAgKipJdGVyYXRvciBVc2FnZToqKiBBcmUgdGhlIGJhdGNoIG9wZXJhdGlvbnMgdXNpbmcgaXRlcmF0b3JzIGVmZmVjdGl2ZWx5PyBIb3cgYXJlIHRoZSBpdGVyYXRvcnMgYmVpbmcgaGFuZGxlZCBpbiB0aGVzZSBvcGVyYXRpb25zLCBhbmQgaG93IG1pZ2h0IHRoYXQgYWZmZWN0IHRoZSBzcGVlZCBvZiBwcm9jZXNzaW5nPyBJcyB0aGVyZSBhbnkgcmVkdW5kYW50IGl0ZXJhdG9yIGNyZWF0aW9uIG9yIGludmFsaWRhdGlvbj8KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGFyZSBlcnJvcnMgaGFuZGxlZCBpbiBiYXRjaCBvcGVyYXRpb25zPyBEbyBpbmRpdmlkdWFsIGZhaWx1cmVzIGNhdXNlIHRoZSBlbnRpcmUgYmF0Y2ggdG8gZmFpbCwgb3IgYXJlIHRoZXJlIG1lY2hhbmlzbXMgZm9yIGhhbmRsaW5nIGluZGl2aWR1YWwgZXJyb3JzIGFuZCByZXBvcnRpbmcgdGhlbSBlZmZlY3RpdmVseT8KClVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kOgoqICAgV2hhdCBpcyB0aGUgY29tcHV0YXRpb25hbCBjb21wbGV4aXR5IG9mIHRoZXNlIGJhdGNoIG9wZXJhdGlvbnMgKGJvdGggdGltZSBhbmQgc3BhY2UpPwoqICAgV2hhdCBhcmUgdGhlIHByYWN0aWNhbCBwZXJmb3JtYW5jZSBsaW1pdHM/CiogICBBcmUgdGhlcmUgYW55IG9idmlvdXMgb3B0aW1pemF0aW9ucywgc3VjaCBhcyBiZXR0ZXIgdXNlIG9mIHZlY3Rvcml6YXRpb24sIHByZWZldGNoaW5nLCBvciBiYXRjaGluZyBzdHJhdGVnaWVzPwoKSSYjMzk7bSBzdGFydGluZyBoZXJlIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCB0aGVuIEkgd2lsbCBtb3ZlIG9uIHRvIGxvb2tpbmcgYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI3Njc9aW50ICBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3NjktXHRcdFx0ICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cik7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3NzA6aW50ICBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzcxLVx0XHRcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04MDE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTgxNy1cdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjgxODpcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTgxOS1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTgyNz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg0MC1cdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg0MTpcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg0Mi1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE0NDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTQ1NS1cdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NTY6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDU3LVx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxLVx0Lm1hcF91cGRhdGVfYmF0Y2ggPVx0XHRcdFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjpcdGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcdFx0XFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzLVx0Lm1hcF9kZWxldGVfYmF0Y2ggPVx0XHRcdFxcXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODMtXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODQ6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODUtXHQubWFwX2RlbGV0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDA2PWludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA2MjppbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjMtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgTWFwIE9wZXJhdGlvbnMqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gaG93IHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYXJlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2UgdXNlIGZvciBtYXAgdXBkYXRlcyBhbmQgbG9va3Vwcy4gRXNzZW50aWFsbHksIHRoZXkgYXJlIHRoZSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gTm93LCBsb29raW5nIGEgbGl0dGxlIGRlZXBlciwgSSBzZWUgdGhhdCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIGFyZSB0aGUgcHJpbWFyeSBzeXNjYWxsIGhhbmRsZXJzLiBUaGVzZSBhcmUgd2hhdCB3ZSB1bHRpbWF0ZWx5IGNhbGwgZm9yIHRoZSBgQlBGX01BUF9MT09LVVBfRUxFTWAgYW5kIGBCUEZfTUFQX1VQREFURV9FTEVNYCBvcGVyYXRpb25zLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBob2xkIG9uLi4uIEkmIzM5O20gbm90aWNpbmcgdGhhdCBgbWFwX2xvb2t1cF9lbGVtYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLCBzbyBpdCBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzICpzdGlsbCogYmVpbmcgY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhhdCB3b3JrczsgdGhlIHZpc2liaWxpdHkgcnVsZXMgYXJlIHBsYXlpbmcgdHJpY2tzIG9uIG1lIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXBfbG9va3VwX2VsZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz0zMDk9c3RhdGljIGludCBicGZfbWFwX2NvcHlfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjgtXHR9IGVsc2UgaWYgKElTX0ZEX0FSUkFZKG1hcCkgfHwgSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjk6XHRcdGVyciA9IGJwZl9mZF9hcnJheV9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMzMC1cdH0gZWxzZSBpZiAoSVNfRkRfSEFTSChtYXApKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMzE6XHRcdGVyciA9IGJwZl9mZF9odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSwgdmFsdWUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzMyLVx0fSBlbHNlIGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVkpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDItXHRcdHJjdV9yZWFkX2xvY2soKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0MzpcdFx0aWYgKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5KVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ0Olx0XHRcdHB0ciA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5KG1hcCwga2V5KTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NS1cdFx0ZWxzZVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ2Olx0XHRcdHB0ciA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0Ny1cdFx0aWYgKElTX0VSUihwdHIpKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTc2OD1zdGF0aWMgdm9pZCAqX19fYnBmX2NvcHlfa2V5KGJwZnB0cl90IHVrZXksIHU2NCBrZXlfc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNzgxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTc4MjpzdGF0aWMgaW50IG1hcF9sb29rdXBfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE3ODMte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTctXHRjYXNlIEJQRl9NQVBfTE9PS1VQX0VMRU06XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzk4Olx0XHRlcnIgPSBtYXBfbG9va3VwX2VsZW0oXHUwMDI2YXR0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIHBvcHMgb3V0LiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdC4gVGhlbiBJIHNlZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGNhbGwgZ3JhcGg6IGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCBhbmQsIG9mIGNvdXJzZSwgdGhlIGJpZyBvbmUsIGBfX3N5c19icGZgLCB3aGljaCBpcyB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCBhbmQgYWN0dWFsbHkgKmNhbGxzKiB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLgoKTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0bywgY2FuIEkgbGV2ZXJhZ2UgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGluIGFueSB3YXk/IFRoZXkgc2VlbSBsaWtlIHRoZXkgY291bGQgYmUgdXNlZnVsLiBBbmQgdGhlbiwgd2FpdCwgdGhlcmUmIzM5O3MgYSB3aG9sZSBmYW1pbHkgb2YgYmF0Y2ggbG9va3VwIGZ1bmN0aW9ucyBmb3IgaGFzaCB0YWJsZXM6IGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGFuZCB0aGUgcmVndWxhciBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgcGx1cyB0aGUgTFJVIHZhcmlhdGlvbnMuIFBsZW50eSBvZiBvcHRpb25zLgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGdvdHRhIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZDsgaXTigJlzIGVzc2VudGlhbCB0byBlbnN1cmUgZXZlcnl0aGluZyYjMzk7cyBldmVuIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQ2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBTeXNjYWxsKioKCk9rYXksIHNvIHRoZSBwbGFuIGlzIGRlZmluaXRlbHkgdG8gZW5hYmxlIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O3ZlIHJlLXJldmlld2VkIHRoYXQgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGEgc29saWQgZml4IGZvciB0aGUgYEJQRl9GX0NQVWAgZmxhZyB2YWxpZGF0aW9uLiBUaGF0IGNoYW5nZSBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuCgpNeSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcgYXJlIGdvaW5nIHRvIGJlIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gVGhlc2UgbG9vayBsaWtlIHByaW1lIGxvY2F0aW9ucyBmb3IgY2F0Y2hpbmcgaXNzdWVzLiBXaGlsZSBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0IEkmIzM5O20gYWxzbyBnb2luZyB0byBjb25zaWRlciBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCBhcyBhIGZ1enppbmcgdGFyZ2V0LgoKSSYjMzk7bSBwYXVzaW5nIHRvIGNvbnNpZGVyIGBfX3N5c19icGZgIGZvciBhIG1vbWVudC4gSXQmIzM5O3MgYSBodWdlbHkgaW1wb3J0YW50IHN5c2NhbGwsIGFuZCBhIG5hdHVyYWwgdGFyZ2V0LCBidXQgaXRzIGhpZ2ggdHJhZmZpYyBtZWFucyBoZWF2eSBmdXp6aW5nIG9mIGl0IG1pZ2h0IHNrZXcgdGhlIHJlc3VsdHMuIEkgdGhpbmsgSSYjMzk7bGwgZm9jdXMgb24gdGhlIGJhdGNoIG9wZXJhdGlvbnMgZmlyc3QsIHRoZW4gbG9vcCBiYWNrIHRvIGZ1enogYF9fc3lzX2JwZmAgYXQgYSByZWR1Y2VkIHJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h0YWJfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDMwPXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzE6aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzMi1cdFx0ICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ1PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM4MTpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgyLVx0XHRcdFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBIYXNoaW5nIEZ1bmN0aW9ucyBhbmQgRGF0YSBTdHJ1Y3R1cmVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaGFzaCB0YWJsZSBsb29rdXBzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHRoYXQgbWVhbnMgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoaXMgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0uIFNpbmNlIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBhIGdsb2JhbCBlbnRyeSBwb2ludCwgSSBzaG91bGQgbG9vayBhdCB3aGF0IHVzZXMgaXQuIEdpdmVuIHRoZSBuYW1lcywgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYSBoZWxwZXIgcm91dGluZSwgb3IgcG9zc2libHkgYW4gb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIGxvb2t1cCBmdW5jdGlvbiBmYW1pbHkuIExldCYjMzk7cyBzZWUuLi4gc2luY2UgSSBhbSBsb29raW5nIGF0IGxvb2t1cCByb3V0aW5lcywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCBhbmQgc2VlIGlmIHRoZXkgaGF2ZSBhbnkgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoaXMgY29udGV4dCB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSByZWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTIwMTM9c3RhdGljIGludFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxNDpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNS1cdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIFN0YXRpYyBEYXRhIFN0cnVjdHVyZXMqKgoKRGFtbiBpdCwgSSB3YXMgdG9vIHF1aWNrIG9uIHRoZSBkcmF3IHdpdGggdGhhdCBsYXN0IGdyZXAgcmVzdWx0LiBFdmVyeXRoaW5nJiMzOTtzIGxvb2tpbmcgc3VzcGljaW91c2x5IHN0YXRpYzsgSSBqdW1wZWQgdGhlIGd1bi4gVGltZSB0byByZXZpc2l0IHRob3NlIGJhdGNoIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBjb250ZXh0IGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMgaW4gZGV0YWlsLiBJdOKAmXMgbGlrZWx5IHRoZSBpc3N1ZSBpc27igJl0IHdoZXJlIEkgaW5pdGlhbGx5IHRob3VnaHQuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUsIHRyYWNpbmcgdGhyb3VnaCB0aGVpciBiZWhhdmlvciBpbiB0aGlzIG5ldyBsaWdodC4gVGhlcmUmIzM5O3MgYSBmdW5kYW1lbnRhbCBtaXN1bmRlcnN0YW5kaW5nIHNvbWV3aGVyZSwgYW5kIGl0JiMzOTtzIGJ1cmllZCBpbiB0aGUgaW50ZXJhY3Rpb24gb2YgdGhvc2UgdHdvIGJhdGNoIG9wZXJhdGlvbnMuIE5lZWQgdG8gZ28gYmFjayB0byB0aGUgY29kZSBhbmQgYXBwcm9hY2ggdGhpcyB3aXRoIGZyZXNoIGV5ZXMsIGNhcmVmdWxseSBhbmFseXppbmcgdGhlIHN0YXRlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDA2PWludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA2MjppbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjMtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTEKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZvY3VzIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBNYXAgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgaGVyZSYjMzk7cyBteSBjdXJyZW50IHRoaW5raW5nLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAgYXJlIGluZGVlZCB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNhbGxpbmcgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgLCBiZXNpZGVzIHRoZSAmIzM0O2hvdCBwYXRoJiMzNDsgb25lcyBsaWtlIGBfX3N5c19icGZgLiBJIGhhZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYmVjYXVzZSBgbWFwX2xvb2t1cF9lbGVtYCBhbmQgYG1hcF91cGRhdGVfZWxlbWAgYXJlIGNhbGxlZCBmcm9tIGBfX3N5c19icGZgLCBidXQgdGhhdCYjMzk7cyBleHBlY3RlZC4gTm8gb3RoZXIgZW50cnkgcG9pbnRzIHNlZW0gcmVsZXZhbnQuIEkgbG9va2VkIGludG8gYGJwZl9tYXBfdXBkYXRlX3ZhbHVlYCBhbmQgc3R1ZmYgbGlrZSBgYnBmX2ZkX2FycmF5X21hcF9sb29rdXBfZWxlbWAsIGJ1dCB0aG9zZSBkb24mIzM5O3Qgc2VlbSB0byB0cmlnZ2VyIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYC4KClRoZXJlZm9yZSwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoYXQgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSB0aGUgc3Ryb25nZXN0IGNhbmRpZGF0ZXMgZm9yIG15ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsg4oCTIHRoZXkmIzM5O3JlIHRoZSBtb3N0IGRpcmVjdCwgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgSSBjYW4gdGFyZ2V0LgoKTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYEJQRl9TWVNDQUxMYC4gSSBoYWQgdG8gY2hlY2ssIGJ1dCB0aGlzIGFsbCBmYWxscyB1bmRlciB0aGUgY29yZSBCUEYgc3lzY2FsbCBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGIG1hcHMuIFllcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBlbmFibGluZyBgQlBGX1NZU0NBTExgIGlzIHRoZSAqb25seSogbmVjZXNzYXJ5IGNvbmZpZyBmb3IgZnV6emluZy4KCk15IHJlYXNvbmluZyBib2lscyBkb3duIHRvIHRoaXM6IFRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIHRvIHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIG1vcmUgcm9idXN0bHkgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgdGhyb3VnaCB0aGUgYmF0Y2ggb3BlcmF0aW9ucyBJJiMzOTt2ZSBpZGVudGlmaWVkLCBhbmQgZnJvbSB0aGUgbW9yZSBiYXNpYyBsb29rdXBzLiBTbywgZnV6emluZyBpcyBjcml0aWNhbCBoZXJlIHRvIGVuc3VyZSB0aGlzIG5ldyBDUFUgdmFsaWRhdGlvbiB3b3JrcyBjb3JyZWN0bHkgYW5kIHRoYXQgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KClNvLCBpbiBzdW1tYXJ5OgoKKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAKKiAgICoqRW5hYmxlIENvbmZpZ3M6KiogYEJQRl9TWVNDQUxMYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfbG9va3VwX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCB0byBjb3JyZWN0bHkgdmFsaWRhdGUgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgIGluc3RlYWQgb2YgYG51bV9wb3NzaWJsZV9jcHVzKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgKGUuZy4sIGBCUEZfTUFQX0xPT0tVUF9FTEVNYCwgYEJQRl9NQVBfVVBEQVRFX0VMRU1gLCBhbmQgYmF0Y2ggb3BlcmF0aW9ucykuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgQ1BVIHZhbGlkYXRpb24gbG9naWMgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AgdG8gY29ycmVjdGx5IHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIHVzaW5nIGBucl9jcHVfaWRzYCBhbmQgYGNwdV9wb3NzaWJsZSgpYCBpbnN0ZWFkIG9mIGBudW1fcG9zc2libGVfY3B1cygpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucyBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIChlLmcuLCBgQlBGX01BUF9MT09LVVBfRUxFTWAsIGBCUEZfTUFQX1VQREFURV9FTEVNYCwgYW5kIGJhdGNoIG9wZXJhdGlvbnMpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IENQVSB2YWxpZGF0aW9uIGxvZ2ljIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYGNwdWAgdmFsdWUgZXh0cmFjdGVkIGZyb20gYGZsYWdzYCBpbiBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AuIEl0IGNoYW5nZXMgdGhlIGNoZWNrIGZyb20gYGNwdSBcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKClgIHRvIGBjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KWAuIFRoaXMgaXMgYSBib3VuZHMvdmFsaWRpdHkgY2hlY2sgdGhhdCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzYWdlIG9mIGludmFsaWQgQ1BVIElEcywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gKG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcyNTgwN2RiMGE5Mzc3OTEzZTA5ZDIyMWZlMTYyNGY5ZTUwMjliOTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNzo1NzoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oCmluZGV4IDc3MTlmNjUyODQ0NTYuLjM1M2YxM2JiMDY2ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtNDIwMiw3ICYjNDM7NDIwMiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGZsYWdzLCB1NjQgYWxsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQljcHUgPSBmbGFncyAmZ3Q7Jmd0OyAzMjsKLQkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9DUFUpICZhbXA7JmFtcDsgY3B1ICZndDs9IG51bV9wb3NzaWJsZV9jcHVzKCkpCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0NQVSkgJmFtcDsmYW1wOyAoY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpKSkKIAkJCXJldHVybiAtRVJBTkdFOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMQoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIE1hcCBDUFUgVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGZ1bmN0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGlnaHRlbmluZyB0aGUgYm91bmRzIGNoZWNrIG9uIHRoZSBgY3B1YCB2YWx1ZSBleHRyYWN0ZWQgZnJvbSB0aGUgYGZsYWdzYCBhcmd1bWVudC4gIFByZXZpb3VzbHksIGl0IGp1c3QgY2hlY2tlZCBpZiB0aGUgQ1BVIElEIHdhcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBwb3NzaWJsZSBDUFVzIChgbnVtX3Bvc3NpYmxlX2NwdXMoKWApLiBOb3csIGl0IGluY2x1ZGVzIGFuIGFkZGl0aW9uYWwgY2hlY2s6ICBgY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpYC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gc3RlcC4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIGBjcHVgIHZhbHVlIGlzICpib3RoKiB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlIChsZXNzIHRoYW4gYG5yX2NwdV9pZHNgKSBhbmQgYWN0dWFsbHkgcmVwcmVzZW50cyBhIHBvc3NpYmxlIENQVSBvbiB0aGUgc3lzdGVtICh1c2luZyBgY3B1X3Bvc3NpYmxlKClgKS4gVGhpcyBmaXhlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHdoZXJlIGFuIG91dC1vZi1ib3VuZHMgb3Igbm9uLWV4aXN0ZW50IENQVSBJRCBjb3VsZCBiZSB1c2VkLCB3aGljaCwgYXMgdGhleSBtZW50aW9uLCBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGFuZCBvdGhlciBwcm9ibGVtcywgdGhvdWdoIHRoZXNlIGFjY2Vzc2VzIGFyZSBjYXVnaHQgYnkgS0FTQU4uCgpJJiMzOTttIGNvbmZpZGVudCB0aGlzIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJdCYjMzk7cyBzdHJpY3RseSBhIHZhbGlkYXRpb24gbG9naWMgY2hhbmdlLCByZWZpbmluZyB0aGUgZXhpc3RpbmcgYm91bmRzIGNoZWNrLiBXZSYjMzk7cmUgKnByZXZlbnRpbmcqIHBvdGVudGlhbCBpc3N1ZXMsIG5vdCBjcmVhdGluZyBuZXcgb25lcy4gVGhlIGxvZ2ljIGlzOiBnZXQgdGhlIENQVSBpZCwgYW5kIGNoZWNrIGlmIGl0IGlzIGVpdGhlciBvdXQgb2YgdGhlIHRvdGFsIENQVSBJRCBudW1iZXJzLCAqb3IqIGlmIHRoZSBJRCBpcyBub3QgcG9zc2libGUuIElmIGVpdGhlciBpcyB0cnVlLCB0aGVuIHJldHVybiBhbiBlcnJvci4KClRoZSBjb2RlIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IGBjcHUgPSBmbGFncyAmZ3Q7Jmd0OyAzMjtgIHRoZW4gdGhlIGNoZWNrIGBpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0NQVSkgJmFtcDsmYW1wOyAoY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpKSkgeyByZXR1cm4gLUVSQU5HRTsgfWAuIENsZWFuIGFuZCBjb25jaXNlLCBmb2N1c2luZyBleGNsdXNpdmVseSBvbiBpbnB1dCB2YWxpZGF0aW9uLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgKnB1cmVseSogdmFsaWRhdGlvbiBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYW5kIGltcHJvdmluZyByb2J1c3RuZXNzLCBhbmQgKm5vdCogaW50cm9kdWNpbmcgYW55IG1lbW9yeSBoYXphcmRzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGhlcmUuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgcHJvdGVjdGluZyBhZ2FpbnN0IGEgcmFuZ2Ugb2YgaW5jb3JyZWN0IHZhbHVlcyB0aGF0IHdvdWxkIGNhdXNlIGFuIGVycm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBjcHVgIHZhbHVlIGV4dHJhY3RlZCBmcm9tIGBmbGFnc2AgaW4gYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgLiBJdCBjaGFuZ2VzIHRoZSBjaGVjayBmcm9tIGBjcHUgXHUwMDNlPSBudW1fcG9zc2libGVfY3B1cygpYCB0byBgY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgYm91bmRzL3ZhbGlkaXR5IGNoZWNrIHRoYXQgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2FnZSBvZiBpbnZhbGlkIENQVSBJRHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIChvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgY3B1YCB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBgZmxhZ3NgIGluIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYC4gSXQgY2hhbmdlcyB0aGUgY2hlY2sgZnJvbSBgY3B1IFx1MDAzZT0gbnVtX3Bvc3NpYmxlX2NwdXMoKWAgdG8gYGNwdSBcdTAwM2U9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpYC4gVGhpcyBpcyBhIGJvdW5kcy92YWxpZGl0eSBjaGVjayB0aGF0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNhZ2Ugb2YgaW52YWxpZCBDUFUgSURzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiAob3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTc6MTMuODUwNDA5MjU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5Nzc0MTAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgY3B1YCB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBgZmxhZ3NgIGluIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYC4gSXQgY2hhbmdlcyB0aGUgY2hlY2sgZnJvbSBgY3B1IFxcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKClgIHRvIGBjcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgYm91bmRzL3ZhbGlkaXR5IGNoZWNrIHRoYXQgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2FnZSBvZiBpbnZhbGlkIENQVSBJRHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIChvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCB0byBjb3JyZWN0bHkgdmFsaWRhdGUgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgIGluc3RlYWQgb2YgYG51bV9wb3NzaWJsZV9jcHVzKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgKGUuZy4sIGBCUEZfTUFQX0xPT0tVUF9FTEVNYCwgYEJQRl9NQVBfVVBEQVRFX0VMRU1gLCBhbmQgYmF0Y2ggb3BlcmF0aW9ucykuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgQ1BVIHZhbGlkYXRpb24gbG9naWMgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTc6MTMuODUwNDE2NDY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQxMDYzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MjU4MDdkYjBhOTM3NzkxM2UwOWQyMjFmZTE2MjRmOWU1MDI5Yjk3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDE3OjU3OjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uMzUzZjEzYmIwNjZkMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC00MjAyLDcgKzQyMDIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdGNwdSA9IGZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbi1cXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSBcXHUwMDI2XFx1MDAyNiBjcHUgXFx1MDAzZT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSlcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0NQVSkgXFx1MDAyNlxcdTAwMjYgKGNwdSBcXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzoxNC4yNjU1MzMzODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4Njk1OTI0NjkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIHRvIGNvcnJlY3RseSB2YWxpZGF0ZSB0aGUgYEJQRl9GX0NQVWAgZmxhZyB1c2luZyBgbnJfY3B1X2lkc2AgYW5kIGBjcHVfcG9zc2libGUoKWAgaW5zdGVhZCBvZiBgbnVtX3Bvc3NpYmxlX2NwdXMoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCAoZS5nLiwgYEJQRl9NQVBfTE9PS1VQX0VMRU1gLCBgQlBGX01BUF9VUERBVEVfRUxFTWAsIGFuZCBiYXRjaCBvcGVyYXRpb25zKS4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIG5ldyBDUFUgdmFsaWRhdGlvbiBsb2dpYyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjU4MDdkYjBhOTM3NzkxM2UwOWQyMjFmZTE2MjRmOWU1MDI5Yjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTc6NTc6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uMzUzZjEzYmIwNjZkMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC00MjAyLDcgKzQyMDIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRjcHUgPSBmbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4tXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IGNwdSBcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKCkpXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzoxNC4yNjU1MzQ4NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkyNDc3OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBNYXAgT3BlcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgbW9kaWZ5aW5nIHRoZSBDUFUgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIG1hcCBvcGVyYXRpb24gZmxhZ3MgY2hlY2suIEluc3RlYWQgb2YganVzdCB2ZXJpZnlpbmcgYGNwdWAgYWdhaW5zdCBgbnVtX3Bvc3NpYmxlX2NwdXMoKWAsIGl0J3Mgbm93IGNoZWNraW5nIGFnYWluc3QgYG5yX2NwdV9pZHNgIGFuZCB1c2luZyBgY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFmZmVjdGluZyBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggQ1BVLXNwZWNpZmljIGRhdGEgd2l0aGluIG1hcHMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgdXNhZ2Ugb2YgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGl0c2VsZi4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyBjYWxsZWQgZnJvbT8gV2hhdCBwYXJ0cyBvZiB0aGUgQlBGIHN1YnN5c3RlbSByZWx5IG9uIHRoaXMgdmFsaWRhdGlvbiwgYW5kIGhvdyBtaWdodCB0aGlzIHN1YnRsZSBzaGlmdCBhZmZlY3QgdGhlaXIgYmVoYXZpb3I/IEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIGFuZCBjb25zaWRlciB0aGUgc3BlY2lmaWMgbWFwIHR5cGVzIHRoYXQgY291bGQgYmUgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UgaW4gdGhlIHZhbGlkYXRpb24gbG9naWMuIFRpbWUgdG8gZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTc6MTguMjU4MDE1ODA2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzMxNTI5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcF9jaGVja19vcF9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD00MTcyPXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDE4NC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQxODU6c3RhdGljIGlubGluZSBpbnQgYnBmX21hcF9jaGVja19vcF9mbGFncyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsIHU2NCBhbGxvd2VkX2ZsYWdzKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDE4Ni17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzczPV9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3OTktXFx0XFx0YWxsb3dlZF9mbGFncyB8PSBCUEZfRl9DUFU7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTgwMDpcXHRyZXQgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgZWxlbV9tYXBfZmxhZ3MsIGFsbG93ZWRfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE4MDEtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5ODg9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTkzLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTQ6XFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGZsYWdzLCBCUEZfRl9MT0NLKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk1LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ1PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNjItXFx0ZWxlbV9tYXBfZmxhZ3MgPSBhdHRyLVxcdTAwM2ViYXRjaC5lbGVtX2ZsYWdzO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNjM6XFx0cmV0ID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGVsZW1fbWFwX2ZsYWdzLCBCUEZfRl9MT0NLKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjY0LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xNzgyPXN0YXRpYyBpbnQgbWFwX2xvb2t1cF9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTgwMC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxODAxOlxcdGVyciA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBhdHRyLVxcdTAwM2VmbGFncywgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTgwMi1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTg0ND1zdGF0aWMgaW50IG1hcF91cGRhdGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xODY1LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE4NjY6XFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXFx1MDAzZWZsYWdzLCB+MCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTg2Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjA2Mj1pbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNzEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA3MjpcXHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDczLVxcdFxcdFxcdFxcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIxMjA9aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEzMS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMTMyOlxcdGVyciA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBhdHRyLVxcdTAwM2ViYXRjaC5lbGVtX2ZsYWdzLCBCUEZfRl9MT0NLIHwgQlBGX0ZfQ1BVKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTMzLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjIwLjA5MTE3NTQ1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDI4ODQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIE1hcCBPcGVyYXRpb24gRmxhZ3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIOKAkyBpdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBhIGNyaXRpY2FsIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCBjaGVjayBoZXJlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyBpbXBvcnRhbmNlLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBgc3RhdGljIGlubGluZWAsIHNvIHRoZXJlJ3Mgbm8gdW5pcXVlIHN5bWJvbCBhZGRyZXNzIHRvIHRhcmdldCBkaXJlY3RseS4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBjYWxsIGl0LlxuXG5MZXQgbWUgc2Vl4oCmIHRoZSBjYWxsZXJzIGFyZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBtYXBfbG9va3VwX2VsZW1gLCBgbWFwX3VwZGF0ZV9lbGVtYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gUmlnaHQsIGdvdCBpdC5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBpZiBgbWFwX2xvb2t1cF9lbGVtYCBhbmQgYG1hcF91cGRhdGVfZWxlbWAgYXJlIGFsc28gc3RhdGljLiBBaGEsIHRoZXkgYXJlOyB0aGV5J3JlIGRlZmluZWQgYXMgYHN0YXRpY2AgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC5cblxuV2FpdCBhIG1pbnV0ZSwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRob3NlIGFyZSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgZmlsZS4gT2theSwgbGV0J3MgaGVhZCBvdmVyIHRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzoyNS4xMzQwNjE1OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5NTcwMTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MjAwNj1pbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwNjI6aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA2My1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzoyNy44Mjk3Njg0MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM3ODU1MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIG1ldGhvZGljYWwgYXBwcm9hY2gsIGFzIEknZCBleHBlY3QuIFRoZSBuYW1lIHN1Z2dlc3RzIGEgYmF0Y2ggcHJvY2Vzc2luZyBhcHByb2FjaCB0byBtYXAgbG9va3Vwcywgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmV3IHF1ZXN0aW9ucy4gV2hhdCBraW5kIG9mIG1hcD8gSXMgaXQgYSBzdGFuZGFyZCBoYXNobWFwLCBhIHRyaWUsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBXaGF0IGFyZSB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHdlIHNob3VsZCBiZSBsb29raW5nIGZvciwgcGFydGljdWxhcmx5IHVuZGVyIHZhcnlpbmcgYmF0Y2ggc2l6ZXM/IE1lbW9yeSBvdmVyaGVhZCBmb3IgdGhlIGJhdGNoIG9wZXJhdGlvbiBpcyBhbHNvIGFuIG9idmlvdXMgY29uY2VybiDigJMgaXMgaXQgb3B0aW1pemVkLCBvciBkb2VzIHRoZSBiYXRjaGluZyBpbnRyb2R1Y2Ugc2lnbmlmaWNhbnQgbWVtb3J5IGJvdHRsZW5lY2tzPyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBtaXNzaW5nIGtleXMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBBbnkgdXNlIG9mIHBhcmFsbGVsaXNtIG9yIHZlY3Rvcml6YXRpb24gd2l0aGluIHRoaXMgcm91dGluZSB3aWxsIGFsc28gYmUgb2YgcGFydGljdWxhciBpbnRlcmVzdCwgY29uc2lkZXJpbmcgdGhpcyBpcyBhIFwiYmF0Y2hcIiBvcGVyYXRpb24sIHRoYXQgd291bGQgYmUgdGhlIGJlc3Qgb3V0Y29tZS4gSSdsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSBkZWFkbG9ja3MgYXMgYSByZXN1bHQgb2YgY29uY3VycmVuY3kuIEZpbmFsbHksIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgd2hhdCBhYm91dCBjYWNoZSBjb2hlcmVuY3kgYW5kIGZhbHNlIHNoYXJpbmc/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzozMS4zNjc2MjU2NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMzIyNzczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MjA2Mj1pbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIxMTktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEyMDppbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyMS1cXHRcXHRcXHRcXHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjMzLjk5MDg2MzAyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjQ5MjI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyB3b3Jrcy4gIEknbSBhc3N1bWluZyB0aGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBiYXRjaGVkIGxvb2t1cHMgYW5kIGRlbGV0aW9ucyB3aXRoaW4gdGhlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24g4oCTIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyaW5nIG9uIGEgZmV3IGtleSBhcmVhcyBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZS5cblxuKiAgICoqQ29uY3VycmVuY3k6KiogSXMgdGhpcyBkZXNpZ25lZCB3aXRoIGFueSBsZXZlbCBvZiBjb25jdXJyZW5jeSBpbiBtaW5kPyBCYXRjaGVkIG9wZXJhdGlvbnMgb2Z0ZW4gaGludCBhdCBhIG5lZWQgZm9yIHRocmVhZCBzYWZldHksIG9yIGF0IGxlYXN0IGNhcmVmdWwgc3luY2hyb25pemF0aW9uLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucywgb3IgYW55IG90aGVyIG1lY2hhbmlzbXMgdGhhdCBwcmV2ZW50IGRhdGEgcmFjZXMuIElmIG5vdCwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBleHRlcm5hbCBndWFyYW50ZWVzLCBvciBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGlmIHRob3NlIGd1YXJhbnRlZXMgYXJlIGxhY2tpbmcuXG5cbiogICAqKkl0ZXJhdGlvbiBcdTAwMjYgS2V5IEhhbmRsaW5nOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsb29rdXAvZGVsZXRlIHJlcXVlc3RzPyBXaGF0J3MgdGhlIGRhdGEgc3RydWN0dXJlIGJlaW5nIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBiYXRjaD8gSXMgaXQgdXNpbmcgYSBzaW1wbGUgYXJyYXksIGEgbGlua2VkIGxpc3QsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/ICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtleXMgYXJlIGhhbmRsZWQgdG8gYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gQW55IHBlci1rZXkgb3BlcmF0aW9ucywgZXNwZWNpYWxseSBpZiBub3Qgd2VsbC1vcHRpbWl6ZWQsIGNhbiBhZGQgc2lnbmlmaWNhbnQgb3ZlcmhlYWQuIFRoZSBhY3R1YWwgXCJsb29rdXAgYW5kIGRlbGV0ZVwiIGl0c2VsZiBpcyBnZW5lcmFsbHkgcHJldHR5IHF1aWNrLCBpdCdzIHRoZSBpdGVyYXRpb24gdGhhdCdzIHRoZSBraWxsZXIuXG5cbiogICAqKkVycm9yIEhhbmRsaW5nIGFuZCBBdG9taWNpdHk6KiogV2hhdCBoYXBwZW5zIGlmIHNvbWUgb2YgdGhlIGxvb2t1cHMvZGVsZXRlcyBzdWNjZWVkIGFuZCBvdGhlcnMgZmFpbD8gSXMgdGhlcmUgYW55IGF0b21pY2l0eSBndWFyYW50ZWU/IERvZXMgaXQgYWxsb3cgZm9yIHBhcnRpYWwgc3VjY2Vzc2VzIGFuZCBmYWlsdXJlcywgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgdXNlZCB0byBzaWduYWwgZXJyb3JzPyAgQSBwYXJ0aWFsIGZhaWx1cmUgY291bGQgbGVhZCB0byBjb3JydXB0aW9uIHNvIEkgbmVlZCB0byBrbm93IGhvdyBpdCdzIGhhbmRsZWQuXG5cbiogICAqKlBlcmZvcm1hbmNlIE9wdGltaXphdGlvbjoqKiBBcmUgdGhlcmUgYW55IG9idmlvdXMgb3B0aW1pemF0aW9ucywgc3VjaCBhcyB1c2luZyBTSU1EIGluc3RydWN0aW9ucyBvciBjYWNoZS1jb25zY2lvdXMgYWNjZXNzIHBhdHRlcm5zPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYWxnb3JpdGhtaWMgY29tcGxleGl0aWVzIChxdWFkcmF0aWMgY29tcGxleGl0eSBhbnlvbmU/KSBhbmQgd2hldGhlciB0aGlzIGZ1bmN0aW9uIHV0aWxpemVzIGFueSBzcGVjaWFsIGRhdGEgc3RydWN0dXJlcy5cblxuVGhpcyBpbml0aWFsIHByb2Jpbmcgd2lsbCBkaXJlY3QgbWUgdG8gdGhlIGhvdHNwb3RzIGZvciByZXZpZXc6IHRoZSBsb29wLCBtZW1vcnkgYmFycmllcnMsIGVycm9yIHN0YXR1cywgYW5kIGFueSBzcGVjaWFsIG9wdGltaXphdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWxvbmcgdGhlIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjM4Ljg1NTc4NzQ0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODI2Njk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzcyPXN0YXRpYyBpbnRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzczOl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzc0LVxcdFxcdFxcdFxcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxND1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNi17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxNzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE4LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyMj1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMjUte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMjY6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI3LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzMT1odGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDMzLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDM0OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzUtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzOT1odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0Mi17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0MzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDQtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0OD1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1MS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA1MjpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDUzLVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDU3PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjAte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNjE6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYyLVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDY2PWh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDY4LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY5OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDc0PWh0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA3Ny17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA3ODpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzktXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjQwLjQxNDA2NTg2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg4NjcyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCYXRjaCBMb29rdXAgYW5kIERlbGV0ZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBiYXRjaCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgbm9uLXN0YXRpYyBvbmVzLiBJIHNlZSBhIHBhdHRlcm4gaGVyZTogYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIHRoZW4gdGhlIHNhbWUgc2V0IG9mIGZ1bmN0aW9ucywgYnV0IHByZWZpeGVkIHdpdGggYGxydWAsIHdoaWNoIEkgYXNzdW1lIGFyZSBMUlUgdmFyaWFudHM6IGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaGAgZXRjLlxuXG5DbGVhcmx5LCB3ZSd2ZSBnb3QgcGVyLUNQVSBhbmQgbm9uLXBlci1DUFUgdmVyc2lvbnMsIGFuZCBhbHNvIGxvb2t1cC1vbmx5IHZlcnN1cyBsb29rdXAtYW5kLWRlbGV0ZSB2YXJpYXRpb25zIGZvciBib3RoIHN0YW5kYXJkIGFuZCBMUlUgaGFzaCB0YWJsZXMuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBzZXQgb2Ygb3B0aW1pemF0aW9ucyBhbmQgZmVhdHVyZXMuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBpbm5lciB3b3JraW5ncy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBvdXQgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBzaW5jZSB0aGF0IHNvdW5kcyBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdG8gZXhhbWluZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1Nzo0NC4xMDI3NDEzNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTMzODU4MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTMyMzU9c3RhdGljIHU2NCByaHRhYl9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQ0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNDU6c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNDYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM4MT1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgzLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzg0OlxcdHJldHVybiBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4NS19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzg3PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4OS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5MDpcXHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjQ1LjcxNjEzNTY0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA3OTM4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBNYXBwaW5nIE9wZXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHN0YXRpYyBoZXJlLCBidXQgaXQncyBhc3NpZ25lZCB0byBtYXBwaW5nIG9wZXJhdGlvbnMuIFRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUsIGFzIGl0J3MgdGhlIHNwZWNpZmljIHJvdXRpbmUgcmVzcG9uc2libGUgZm9yIGxvb2t1cHMgKmFuZCogZGVsZXRpb25zIHdpdGhpbiB0aGUgbWFwIHN0cnVjdHVyZS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXNzaWdubWVudHMgd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgc3BlY2lmaWMgb3BlcmF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1Nzo0OS4wMjQwNzc0ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjY4MDE1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTI5NzQ9c3RhdGljIGxvbmcgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5ODctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk4ODpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTg5LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MTU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTIzLVxcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyNDpcXHQubWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI1LVxcdC5tYXBfdXBkYXRlX2VsZW0gPSByaHRhYl9tYXBfdXBkYXRlX2VsZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjUwLjY5MDg4NDM3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzIxNTE1MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBCYXRjaCBPcGVyYXRpb25zIGluIEdlbmVyaWMgTWFwcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBiYXRjaCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZXNlIGdlbmVyaWMgbWFwIGltcGxlbWVudGF0aW9ucy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gbWluaW1pemUgb3ZlcmhlYWQgYW5kIG1heGltaXplIHRocm91Z2hwdXQuIExldCdzIHN0YXJ0IHdpdGggYSBjbG9zZSBsb29rIGF0IGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gSSBuZWVkIHRvIGFzc2VzcyBob3cgZWZmaWNpZW50bHkgdGhleSBoYW5kbGUgbXVsdGlwbGUga2V5LXZhbHVlIHBhaXJzIHNpbXVsdGFuZW91c2x5LlxuXG5JJ20gdGhpbmtpbmc6XG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gQXJlIHdlIHRhbGtpbmcgaGFzaCB0YWJsZXMsIGJhbGFuY2VkIHRyZWVzLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlIHdpbGwgZGljdGF0ZSB0aGUgdGhlb3JldGljYWwgYmVzdCBhbmQgd29yc3QtY2FzZSBwZXJmb3JtYW5jZSBib3VuZHMsIGFuZCBob3cgdGhhdCBpcyBhZmZlY3RlZCBieSB0aGUgc2l6ZSBvZiB0aGUgYmF0Y2hlcy5cbiogICAqKkNvbmN1cnJlbmN5OioqIElzIHRoZXJlIGFueSBpbnRlcm5hbCBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiBnb2luZyBvbiB3aXRoaW4gdGhlc2UgYmF0Y2ggZnVuY3Rpb25zPyBBcmUgdGhlIG9wZXJhdGlvbnMgdGhyZWFkLXNhZmU/IEhvdyBkb2VzIHRoZSBjb25jdXJyZW5jeSBtb2RlbCBhZmZlY3Qgc2NhbGFiaWxpdHksIGFuZCBpcyBpdCBhIGJvdHRsZW5lY2s/XG4qICAgKipNZW1vcnkgQWNjZXNzIFBhdHRlcm5zOioqIEhvdyBhcmUga2V5cyBhbmQgdmFsdWVzIGJlaW5nIGFjY2Vzc2VkIGluIG1lbW9yeT8gQXJlIHRoZSBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBjYWNoZSBsb2NhbGl0eT8gRG8gdGhleSBleGhpYml0IGdvb2Qgc3BhdGlhbCBhbmQgdGVtcG9yYWwgbG9jYWxpdHksIG9yIGFyZSB3ZSBleHBlcmllbmNpbmcgY2FjaGUgbWlzc2VzP1xuKiAgICoqSXRlcmF0b3IgVXNhZ2U6KiogQXJlIHRoZSBiYXRjaCBvcGVyYXRpb25zIHVzaW5nIGl0ZXJhdG9ycyBlZmZlY3RpdmVseT8gSG93IGFyZSB0aGUgaXRlcmF0b3JzIGJlaW5nIGhhbmRsZWQgaW4gdGhlc2Ugb3BlcmF0aW9ucywgYW5kIGhvdyBtaWdodCB0aGF0IGFmZmVjdCB0aGUgc3BlZWQgb2YgcHJvY2Vzc2luZz8gSXMgdGhlcmUgYW55IHJlZHVuZGFudCBpdGVyYXRvciBjcmVhdGlvbiBvciBpbnZhbGlkYXRpb24/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgYXJlIGVycm9ycyBoYW5kbGVkIGluIGJhdGNoIG9wZXJhdGlvbnM/IERvIGluZGl2aWR1YWwgZmFpbHVyZXMgY2F1c2UgdGhlIGVudGlyZSBiYXRjaCB0byBmYWlsLCBvciBhcmUgdGhlcmUgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgaW5kaXZpZHVhbCBlcnJvcnMgYW5kIHJlcG9ydGluZyB0aGVtIGVmZmVjdGl2ZWx5P1xuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZDpcbiogICBXaGF0IGlzIHRoZSBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgb2YgdGhlc2UgYmF0Y2ggb3BlcmF0aW9ucyAoYm90aCB0aW1lIGFuZCBzcGFjZSk/XG4qICAgV2hhdCBhcmUgdGhlIHByYWN0aWNhbCBwZXJmb3JtYW5jZSBsaW1pdHM/XG4qICAgQXJlIHRoZXJlIGFueSBvYnZpb3VzIG9wdGltaXphdGlvbnMsIHN1Y2ggYXMgYmV0dGVyIHVzZSBvZiB2ZWN0b3JpemF0aW9uLCBwcmVmZXRjaGluZywgb3IgYmF0Y2hpbmcgc3RyYXRlZ2llcz9cblxuSSdtIHN0YXJ0aW5nIGhlcmUgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHRoZW4gSSB3aWxsIG1vdmUgb24gdG8gbG9va2luZyBhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjU1LjQxMjQwMTg5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODgyNTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9Mjc2Nz1pbnQgIGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzY5LVxcdFxcdFxcdCAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjc3MDppbnQgIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzcxLVxcdFxcdFxcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTgwMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04MTctXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjgxODpcXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODE5LVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODI3PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NDAtXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg0MTpcXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODQyLVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTQ0ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfb2ZfbWFwc19tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NTUtXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NTY6XFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NTctXFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEtXFx0Lm1hcF91cGRhdGVfYmF0Y2ggPVxcdFxcdFxcdFxcXFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjpcXHRnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFx0XFx0XFxcXFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzLVxcdC5tYXBfZGVsZXRlX2JhdGNoID1cXHRcXHRcXHRcXFxcXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9Nzc1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB0cmllX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNzgzLVxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODQ6XFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4NS1cXHQubWFwX2RlbGV0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIwMDY9aW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA2MS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMDYyOmludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjMtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTc6NTcuMTUxMjMyOTA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDc2MTM1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQlBGIE1hcCBPcGVyYXRpb25zKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gaG93IHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYXJlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2UgdXNlIGZvciBtYXAgdXBkYXRlcyBhbmQgbG9va3Vwcy4gRXNzZW50aWFsbHksIHRoZXkgYXJlIHRoZSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gTm93LCBsb29raW5nIGEgbGl0dGxlIGRlZXBlciwgSSBzZWUgdGhhdCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIGFyZSB0aGUgcHJpbWFyeSBzeXNjYWxsIGhhbmRsZXJzLiBUaGVzZSBhcmUgd2hhdCB3ZSB1bHRpbWF0ZWx5IGNhbGwgZm9yIHRoZSBgQlBGX01BUF9MT09LVVBfRUxFTWAgYW5kIGBCUEZfTUFQX1VQREFURV9FTEVNYCBvcGVyYXRpb25zLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBob2xkIG9uLi4uIEknbSBub3RpY2luZyB0aGF0IGBtYXBfbG9va3VwX2VsZW1gIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcsIHNvIGl0IGlzIGRlY2xhcmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQncyAqc3RpbGwqIGJlaW5nIGNhbGxlZCBmcm9tIGBfX3N5c19icGZgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoYXQgd29ya3M7IHRoZSB2aXNpYmlsaXR5IHJ1bGVzIGFyZSBwbGF5aW5nIHRyaWNrcyBvbiBtZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODowMC43NTg4NDg3MjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTYyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9sb29rdXBfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz0zMDk9c3RhdGljIGludCBicGZfbWFwX2NvcHlfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyOC1cXHR9IGVsc2UgaWYgKElTX0ZEX0FSUkFZKG1hcCkgfHwgSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI5OlxcdFxcdGVyciA9IGJwZl9mZF9hcnJheV9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzAtXFx0fSBlbHNlIGlmIChJU19GRF9IQVNIKG1hcCkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMzE6XFx0XFx0ZXJyID0gYnBmX2ZkX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5LCB2YWx1ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzMyLVxcdH0gZWxzZSBpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkVVU0VQT1JUX1NPQ0tBUlJBWSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQyLVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDM6XFx0XFx0aWYgKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbG9va3VwX2VsZW1fc3lzX29ubHkpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ0OlxcdFxcdFxcdHB0ciA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbG9va3VwX2VsZW1fc3lzX29ubHkobWFwLCBrZXkpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NS1cXHRcXHRlbHNlXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ2OlxcdFxcdFxcdHB0ciA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0Ny1cXHRcXHRpZiAoSVNfRVJSKHB0cikpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTE3Njg9c3RhdGljIHZvaWQgKl9fX2JwZl9jb3B5X2tleShicGZwdHJfdCB1a2V5LCB1NjQga2V5X3NpemUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNzgxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE3ODI6c3RhdGljIGludCBtYXBfbG9va3VwX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTc4My17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTctXFx0Y2FzZSBCUEZfTUFQX0xPT0tVUF9FTEVNOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTg6XFx0XFx0ZXJyID0gbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODowMC44MDgwMTgxMzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MDc4NDk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHRoZSBzdGF0aWMgbmF0dXJlIG9mIGBtYXBfbG9va3VwX2VsZW1gIGFuZCBgbWFwX3VwZGF0ZV9lbGVtYCBwb3BzIG91dC4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0LiBUaGVuIEkgc2VlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgY2FsbCBncmFwaDogYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFuZCwgb2YgY291cnNlLCB0aGUgYmlnIG9uZSwgYF9fc3lzX2JwZmAsIHdoaWNoIGlzIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGFuZCBhY3R1YWxseSAqY2FsbHMqIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8sIGNhbiBJIGxldmVyYWdlIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCBpbiBhbnkgd2F5PyBUaGV5IHNlZW0gbGlrZSB0aGV5IGNvdWxkIGJlIHVzZWZ1bC4gQW5kIHRoZW4sIHdhaXQsIHRoZXJlJ3MgYSB3aG9sZSBmYW1pbHkgb2YgYmF0Y2ggbG9va3VwIGZ1bmN0aW9ucyBmb3IgaGFzaCB0YWJsZXM6IGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGFuZCB0aGUgcmVndWxhciBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgcGx1cyB0aGUgTFJVIHZhcmlhdGlvbnMuIFBsZW50eSBvZiBvcHRpb25zLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgZ290dGEgY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQ7IGl04oCZcyBlc3NlbnRpYWwgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcncyBldmVuIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODowNi40ODg4MDczMzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDMzNDA2MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjA4LjI5MjE1NDIwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDUzOTM3NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBTeXNjYWxsKipcblxuT2theSwgc28gdGhlIHBsYW4gaXMgZGVmaW5pdGVseSB0byBlbmFibGUgYEJQRl9TWVNDQUxMYC4gSSd2ZSByZS1yZXZpZXdlZCB0aGF0IHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBhIHNvbGlkIGZpeCBmb3IgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdmFsaWRhdGlvbi4gVGhhdCBjaGFuZ2UgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcgYXJlIGdvaW5nIHRvIGJlIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gVGhlc2UgbG9vayBsaWtlIHByaW1lIGxvY2F0aW9ucyBmb3IgY2F0Y2hpbmcgaXNzdWVzLiBXaGlsZSBJJ20gdGhpbmtpbmcgYWJvdXQgaXQgSSdtIGFsc28gZ29pbmcgdG8gY29uc2lkZXIgYGh0YWJfbWFwX2xvb2t1cF9iYXRjaGAgYXMgYSBmdXp6aW5nIHRhcmdldC5cblxuSSdtIHBhdXNpbmcgdG8gY29uc2lkZXIgYF9fc3lzX2JwZmAgZm9yIGEgbW9tZW50LiBJdCdzIGEgaHVnZWx5IGltcG9ydGFudCBzeXNjYWxsLCBhbmQgYSBuYXR1cmFsIHRhcmdldCwgYnV0IGl0cyBoaWdoIHRyYWZmaWMgbWVhbnMgaGVhdnkgZnV6emluZyBvZiBpdCBtaWdodCBza2V3IHRoZSByZXN1bHRzLiBJIHRoaW5rIEknbGwgZm9jdXMgb24gdGhlIGJhdGNoIG9wZXJhdGlvbnMgZmlyc3QsIHRoZW4gbG9vcCBiYWNrIHRvIGZ1enogYF9fc3lzX2JwZmAgYXQgYSByZWR1Y2VkIHJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjE3Ljc0NjA5NDE4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MDgxOTA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzA9c3RhdGljIGludFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzE6aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzItXFx0XFx0ICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNDU9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4MC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzgxOnN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgyLVxcdFxcdFxcdFxcdCAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTg6MTkuNTE2OTE5NzEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTU3NjY3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBIYXNoaW5nIEZ1bmN0aW9ucyBhbmQgRGF0YSBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhhc2ggdGFibGUgbG9va3Vwcy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYGh0YWJfbWFwX2xvb2t1cF9iYXRjaGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIGl0J3Mgc2NvcGVkIHRvIHRoaXMgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0uIFNpbmNlIGl0J3MgcHJvYmFibHkgbm90IGEgZ2xvYmFsIGVudHJ5IHBvaW50LCBJIHNob3VsZCBsb29rIGF0IHdoYXQgdXNlcyBpdC4gR2l2ZW4gdGhlIG5hbWVzLCBpdCdzIHZlcnkgbGlrZWx5IGEgaGVscGVyIHJvdXRpbmUsIG9yIHBvc3NpYmx5IGFuIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGxhcmdlciBsb29rdXAgZnVuY3Rpb24gZmFtaWx5LiBMZXQncyBzZWUuLi4gc2luY2UgSSBhbSBsb29raW5nIGF0IGxvb2t1cCByb3V0aW5lcywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCBhbmQgc2VlIGlmIHRoZXkgaGF2ZSBhbnkgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoaXMgY29udGV4dCB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSByZWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjIyLjg3MjY4OTc2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzA4OTQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDEzPXN0YXRpYyBpbnRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDE0Omh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNS1cXHRcXHRcXHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjI0LjYyNTc4NTA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzQ4MjAwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBTdGF0aWMgRGF0YSBTdHJ1Y3R1cmVzKipcblxuRGFtbiBpdCwgSSB3YXMgdG9vIHF1aWNrIG9uIHRoZSBkcmF3IHdpdGggdGhhdCBsYXN0IGdyZXAgcmVzdWx0LiBFdmVyeXRoaW5nJ3MgbG9va2luZyBzdXNwaWNpb3VzbHkgc3RhdGljOyBJIGp1bXBlZCB0aGUgZ3VuLiBUaW1lIHRvIHJldmlzaXQgdGhvc2UgYmF0Y2ggb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbiBkZXRhaWwuIEl04oCZcyBsaWtlbHkgdGhlIGlzc3VlIGlzbuKAmXQgd2hlcmUgSSBpbml0aWFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgdHJhY2luZyB0aHJvdWdoIHRoZWlyIGJlaGF2aW9yIGluIHRoaXMgbmV3IGxpZ2h0LiBUaGVyZSdzIGEgZnVuZGFtZW50YWwgbWlzdW5kZXJzdGFuZGluZyBzb21ld2hlcmUsIGFuZCBpdCdzIGJ1cmllZCBpbiB0aGUgaW50ZXJhY3Rpb24gb2YgdGhvc2UgdHdvIGJhdGNoIG9wZXJhdGlvbnMuIE5lZWQgdG8gZ28gYmFjayB0byB0aGUgY29kZSBhbmQgYXBwcm9hY2ggdGhpcyB3aXRoIGZyZXNoIGV5ZXMsIGNhcmVmdWxseSBhbmFseXppbmcgdGhlIHN0YXRlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODoyOS4xMDA2MDgwNjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mjc2NDA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MjAwNj1pbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwNjI6aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA2My1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODozMC45MjgyNTkxODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMTc5MTIzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbiBmb3IgQlBGIE1hcCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgaGVyZSdzIG15IGN1cnJlbnQgdGhpbmtpbmcuIEkndmUgY29uZmlybWVkIHRoYXQgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSBpbmRlZWQgdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsaW5nIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCwgYmVzaWRlcyB0aGUgXCJob3QgcGF0aFwiIG9uZXMgbGlrZSBgX19zeXNfYnBmYC4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGJlY2F1c2UgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIGFyZSBjYWxsZWQgZnJvbSBgX19zeXNfYnBmYCwgYnV0IHRoYXQncyBleHBlY3RlZC4gTm8gb3RoZXIgZW50cnkgcG9pbnRzIHNlZW0gcmVsZXZhbnQuIEkgbG9va2VkIGludG8gYGJwZl9tYXBfdXBkYXRlX3ZhbHVlYCBhbmQgc3R1ZmYgbGlrZSBgYnBmX2ZkX2FycmF5X21hcF9sb29rdXBfZWxlbWAsIGJ1dCB0aG9zZSBkb24ndCBzZWVtIHRvIHRyaWdnZXIgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgLlxuXG5UaGVyZWZvcmUsIEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSB0aGUgc3Ryb25nZXN0IGNhbmRpZGF0ZXMgZm9yIG15IFwiRm9jdXNTeW1ib2xzXCIg4oCTIHRoZXkncmUgdGhlIG1vc3QgZGlyZWN0LCBub24tc3RhdGljIGVudHJ5IHBvaW50cyBJIGNhbiB0YXJnZXQuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCBJJ20gdGhpbmtpbmcgYWJvdXQgYEJQRl9TWVNDQUxMYC4gSSBoYWQgdG8gY2hlY2ssIGJ1dCB0aGlzIGFsbCBmYWxscyB1bmRlciB0aGUgY29yZSBCUEYgc3lzY2FsbCBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYgbWFwcy4gWWVzLCBJJ20gY29uZmlkZW50IHRoYXQgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgZm9yIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBib2lscyBkb3duIHRvIHRoaXM6IFRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIHRvIHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIG1vcmUgcm9idXN0bHkgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgdGhyb3VnaCB0aGUgYmF0Y2ggb3BlcmF0aW9ucyBJJ3ZlIGlkZW50aWZpZWQsIGFuZCBmcm9tIHRoZSBtb3JlIGJhc2ljIGxvb2t1cHMuIFNvLCBmdXp6aW5nIGlzIGNyaXRpY2FsIGhlcmUgdG8gZW5zdXJlIHRoaXMgbmV3IENQVSB2YWxpZGF0aW9uIHdvcmtzIGNvcnJlY3RseSBhbmQgdGhhdCBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYFxuKiAgICoqRW5hYmxlIENvbmZpZ3M6KiogYEJQRl9TWVNDQUxMYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1MSwiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTg6NDEuMTQ2MTc0MDM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2MDM4NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AgdG8gY29ycmVjdGx5IHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIHVzaW5nIGBucl9jcHVfaWRzYCBhbmQgYGNwdV9wb3NzaWJsZSgpYCBpbnN0ZWFkIG9mIGBudW1fcG9zc2libGVfY3B1cygpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucyBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIChlLmcuLCBgQlBGX01BUF9MT09LVVBfRUxFTWAsIGBCUEZfTUFQX1VQREFURV9FTEVNYCwgYW5kIGJhdGNoIG9wZXJhdGlvbnMpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IENQVSB2YWxpZGF0aW9uIGxvZ2ljIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCB0byBjb3JyZWN0bHkgdmFsaWRhdGUgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgIGluc3RlYWQgb2YgYG51bV9wb3NzaWJsZV9jcHVzKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgKGUuZy4sIGBCUEZfTUFQX0xPT0tVUF9FTEVNYCwgYEJQRl9NQVBfVVBEQVRFX0VMRU1gLCBhbmQgYmF0Y2ggb3BlcmF0aW9ucykuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgQ1BVIHZhbGlkYXRpb24gbG9naWMgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTg6NDEuMjI0NzgzNDA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAzMDIzMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTg6NDEuMjI1MjY0OTU4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc2MDI1Mzc4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYGNwdWAgdmFsdWUgZXh0cmFjdGVkIGZyb20gYGZsYWdzYCBpbiBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AuIEl0IGNoYW5nZXMgdGhlIGNoZWNrIGZyb20gYGNwdSBcXHUwMDNlPSBudW1fcG9zc2libGVfY3B1cygpYCB0byBgY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpYC4gVGhpcyBpcyBhIGJvdW5kcy92YWxpZGl0eSBjaGVjayB0aGF0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNhZ2Ugb2YgaW52YWxpZCBDUFUgSURzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiAob3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjU4MDdkYjBhOTM3NzkxM2UwOWQyMjFmZTE2MjRmOWU1MDI5Yjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTc6NTc6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uMzUzZjEzYmIwNjZkMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC00MjAyLDcgKzQyMDIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRjcHUgPSBmbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4tXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IGNwdSBcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKCkpXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODo0MS4yMjUyNjU3NThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYwMjUxODIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgTWFwIENQVSBWYWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGZ1bmN0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuIFNwZWNpZmljYWxseSwgaXQncyB0aWdodGVuaW5nIHRoZSBib3VuZHMgY2hlY2sgb24gdGhlIGBjcHVgIHZhbHVlIGV4dHJhY3RlZCBmcm9tIHRoZSBgZmxhZ3NgIGFyZ3VtZW50LiAgUHJldmlvdXNseSwgaXQganVzdCBjaGVja2VkIGlmIHRoZSBDUFUgSUQgd2FzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIENQVXMgKGBudW1fcG9zc2libGVfY3B1cygpYCkuIE5vdywgaXQgaW5jbHVkZXMgYW4gYWRkaXRpb25hbCBjaGVjazogIGBjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KWAuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gc3RlcC4gSXQncyBkZXNpZ25lZCB0byBlbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQgYGNwdWAgdmFsdWUgaXMgKmJvdGgqIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UgKGxlc3MgdGhhbiBgbnJfY3B1X2lkc2ApIGFuZCBhY3R1YWxseSByZXByZXNlbnRzIGEgcG9zc2libGUgQ1BVIG9uIHRoZSBzeXN0ZW0gKHVzaW5nIGBjcHVfcG9zc2libGUoKWApLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYW4gb3V0LW9mLWJvdW5kcyBvciBub24tZXhpc3RlbnQgQ1BVIElEIGNvdWxkIGJlIHVzZWQsIHdoaWNoLCBhcyB0aGV5IG1lbnRpb24sIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYW5kIG90aGVyIHByb2JsZW1zLCB0aG91Z2ggdGhlc2UgYWNjZXNzZXMgYXJlIGNhdWdodCBieSBLQVNBTi5cblxuSSdtIGNvbmZpZGVudCB0aGlzIGlzbid0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0J3Mgc3RyaWN0bHkgYSB2YWxpZGF0aW9uIGxvZ2ljIGNoYW5nZSwgcmVmaW5pbmcgdGhlIGV4aXN0aW5nIGJvdW5kcyBjaGVjay4gV2UncmUgKnByZXZlbnRpbmcqIHBvdGVudGlhbCBpc3N1ZXMsIG5vdCBjcmVhdGluZyBuZXcgb25lcy4gVGhlIGxvZ2ljIGlzOiBnZXQgdGhlIENQVSBpZCwgYW5kIGNoZWNrIGlmIGl0IGlzIGVpdGhlciBvdXQgb2YgdGhlIHRvdGFsIENQVSBJRCBudW1iZXJzLCAqb3IqIGlmIHRoZSBJRCBpcyBub3QgcG9zc2libGUuIElmIGVpdGhlciBpcyB0cnVlLCB0aGVuIHJldHVybiBhbiBlcnJvci5cblxuVGhlIGNvZGUgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYGNwdSA9IGZsYWdzIFx1MDAzZVx1MDAzZSAzMjtgIHRoZW4gdGhlIGNoZWNrIGBpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9DUFUpIFx1MDAyNlx1MDAyNiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSkpKSB7IHJldHVybiAtRVJBTkdFOyB9YC4gQ2xlYW4gYW5kIGNvbmNpc2UsIGZvY3VzaW5nIGV4Y2x1c2l2ZWx5IG9uIGlucHV0IHZhbGlkYXRpb24uXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBhICpwdXJlbHkqIHZhbGlkYXRpb24gY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCBpbXByb3Zpbmcgcm9idXN0bmVzcywgYW5kICpub3QqIGludHJvZHVjaW5nIGFueSBtZW1vcnkgaGF6YXJkcywgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGhlcmUuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgcHJvdGVjdGluZyBhZ2FpbnN0IGEgcmFuZ2Ugb2YgaW5jb3JyZWN0IHZhbHVlcyB0aGF0IHdvdWxkIGNhdXNlIGFuIGVycm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAxLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjQ4LjgyNzc4NzEyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgY3B1YCB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBgZmxhZ3NgIGluIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYC4gSXQgY2hhbmdlcyB0aGUgY2hlY2sgZnJvbSBgY3B1IFxcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKClgIHRvIGBjcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgYm91bmRzL3ZhbGlkaXR5IGNoZWNrIHRoYXQgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2FnZSBvZiBpbnZhbGlkIENQVSBJRHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIChvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYGNwdWAgdmFsdWUgZXh0cmFjdGVkIGZyb20gYGZsYWdzYCBpbiBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AuIEl0IGNoYW5nZXMgdGhlIGNoZWNrIGZyb20gYGNwdSBcXHUwMDNlPSBudW1fcG9zc2libGVfY3B1cygpYCB0byBgY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpYC4gVGhpcyBpcyBhIGJvdW5kcy92YWxpZGl0eSBjaGVjayB0aGF0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNhZ2Ugb2YgaW52YWxpZCBDUFUgSURzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiAob3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 17:39:48 +0000 UTC FinishedAt: 2026-08-13 17:58:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "a13307e97d5c54b65720bb71fa379960ded1e51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "272022b2-9bf2-4579-94d9-31c17c964860" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "generic_map_update_batch", "generic_map_lookup_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYGNwdWAgdmFsdWUgZXh0cmFjdGVkIGZyb20gYGZsYWdzYCBpbiBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AuIEl0IGNoYW5nZXMgdGhlIGNoZWNrIGZyb20gYGNwdSBcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKClgIHRvIGBjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KWAuIFRoaXMgaXMgYSBib3VuZHMvdmFsaWRpdHkgY2hlY2sgdGhhdCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzYWdlIG9mIGludmFsaWQgQ1BVIElEcywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gKG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCB0byBjb3JyZWN0bHkgdmFsaWRhdGUgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgIGluc3RlYWQgb2YgYG51bV9wb3NzaWJsZV9jcHVzKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgKGUuZy4sIGBCUEZfTUFQX0xPT0tVUF9FTEVNYCwgYEJQRl9NQVBfVVBEQVRFX0VMRU1gLCBhbmQgYmF0Y2ggb3BlcmF0aW9ucykuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgQ1BVIHZhbGlkYXRpb24gbG9naWMgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MjU4MDdkYjBhOTM3NzkxM2UwOWQyMjFmZTE2MjRmOWU1MDI5Yjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTc6NTc6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDc3MTlmNjUyODQ0NTYuLjM1M2YxM2JiMDY2ZDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtNDIwMiw3ICYjNDM7NDIwMiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGZsYWdzLCB1NjQgYWxsXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdGNwdSA9IGZsYWdzIFx1MDAzZVx1MDAzZSAzMjtcbi1cdFx0aWYgKChmbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSBcdTAwMjZcdTAwMjYgY3B1IFx1MDAzZT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSlcbiYjNDM7XHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AgdG8gY29ycmVjdGx5IHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIHVzaW5nIGBucl9jcHVfaWRzYCBhbmQgYGNwdV9wb3NzaWJsZSgpYCBpbnN0ZWFkIG9mIGBudW1fcG9zc2libGVfY3B1cygpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucyBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIChlLmcuLCBgQlBGX01BUF9MT09LVVBfRUxFTWAsIGBCUEZfTUFQX1VQREFURV9FTEVNYCwgYW5kIGJhdGNoIG9wZXJhdGlvbnMpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IENQVSB2YWxpZGF0aW9uIGxvZ2ljIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI1ODA3ZGIwYTkzNzc5MTNlMDlkMjIxZmUxNjI0ZjllNTAyOWI5NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE3OjU3OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgKaW5kZXggNzcxOWY2NTI4NDQ1Ni4uMzUzZjEzYmIwNjZkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZi5oCkBAIC00MjAyLDcgJiM0Mzs0MjAyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgYnBmX21hcF9jaGVja19vcF9mbGFncyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsIHU2NCBhbGwKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWNwdSA9IGZsYWdzICZndDsmZ3Q7IDMyOwotCQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0NQVSkgJmFtcDsmYW1wOyBjcHUgJmd0Oz0gbnVtX3Bvc3NpYmxlX2NwdXMoKSkKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgQlBGX0ZfQ1BVKSAmYW1wOyZhbXA7IChjcHUgJmd0Oz0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSkpKQogCQkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIE1hcCBPcGVyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuIFRoZSBjb3JlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIENQVSB2YWxpZGF0aW9uIHdpdGhpbiB0aGUgbWFwIG9wZXJhdGlvbiBmbGFncyBjaGVjay4gSW5zdGVhZCBvZiBqdXN0IHZlcmlmeWluZyBgY3B1YCBhZ2FpbnN0IGBudW1fcG9zc2libGVfY3B1cygpYCwgaXQmIzM5O3Mgbm93IGNoZWNraW5nIGFnYWluc3QgYG5yX2NwdV9pZHNgIGFuZCB1c2luZyBgY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFmZmVjdGluZyBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggQ1BVLXNwZWNpZmljIGRhdGEgd2l0aGluIG1hcHMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgdXNhZ2Ugb2YgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGl0c2VsZi4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyBjYWxsZWQgZnJvbT8gV2hhdCBwYXJ0cyBvZiB0aGUgQlBGIHN1YnN5c3RlbSByZWx5IG9uIHRoaXMgdmFsaWRhdGlvbiwgYW5kIGhvdyBtaWdodCB0aGlzIHN1YnRsZSBzaGlmdCBhZmZlY3QgdGhlaXIgYmVoYXZpb3I/IEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMgYW5kIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBtYXAgdHlwZXMgdGhhdCBjb3VsZCBiZSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZSBpbiB0aGUgdmFsaWRhdGlvbiBsb2dpYy4gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9jaGVja19vcF9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTQxNzI9c3RhdGljIGlubGluZSBib29sIGJwZl9tYXBfc3VwcG9ydHNfY3B1X2ZsYWdzKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNDE4NC1cbmluY2x1ZGUvbGludXgvYnBmLmg6NDE4NTpzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbG93ZWRfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTQxODYte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE3NzM9X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3OTktXHRcdGFsbG93ZWRfZmxhZ3MgfD0gQlBGX0ZfQ1BVO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTgwMDpcdHJldCA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBlbGVtX21hcF9mbGFncywgYWxsb3dlZF9mbGFncyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xODAxLVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTg4PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTk0Olx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGZsYWdzLCBCUEZfRl9MT0NLKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTUtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNDU9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNjItXHRlbGVtX21hcF9mbGFncyA9IGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncztcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNjM6XHRyZXQgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgZWxlbV9tYXBfZmxhZ3MsIEJQRl9GX0xPQ0spO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzI2NC1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTc4Mj1zdGF0aWMgaW50IG1hcF9sb29rdXBfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xODAwLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTgwMTpcdGVyciA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBhdHRyLVx1MDAzZWZsYWdzLCBCUEZfRl9MT0NLIHwgQlBGX0ZfQ1BVKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE4MDItXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTE4NDQ9c3RhdGljIGludCBtYXBfdXBkYXRlX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE4NjUtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxODY2Olx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXHUwMDNlZmxhZ3MsIH4wKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE4NjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIwNjI9aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA3MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwNzI6XHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA3My1cdFx0XHRcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMTIwPWludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTMxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEzMjpcdGVyciA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBhdHRyLVx1MDAzZWJhdGNoLmVsZW1fZmxhZ3MsIEJQRl9GX0xPQ0sgfCBCUEZfRl9DUFUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEzMy1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCUEYgTWFwIE9wZXJhdGlvbiBGbGFncyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyDigJMgaXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgY3JpdGljYWwgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGNoZWNrIGhlcmUuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gaXRzIGltcG9ydGFuY2UuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGBzdGF0aWMgaW5saW5lYCwgc28gdGhlcmUmIzM5O3Mgbm8gdW5pcXVlIHN5bWJvbCBhZGRyZXNzIHRvIHRhcmdldCBkaXJlY3RseS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgY2FsbCBpdC4KCkxldCBtZSBzZWXigKYgdGhlIGNhbGxlcnMgYXJlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYG1hcF9sb29rdXBfZWxlbWAsIGBtYXBfdXBkYXRlX2VsZW1gLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBSaWdodCwgZ290IGl0LgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgaWYgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIGFyZSBhbHNvIHN0YXRpYy4gQWhhLCB0aGV5IGFyZTsgdGhleSYjMzk7cmUgZGVmaW5lZCBhcyBgc3RhdGljYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLgoKV2FpdCBhIG1pbnV0ZSwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRob3NlIGFyZSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgZmlsZS4gT2theSwgbGV0JiMzOTtzIGhlYWQgb3ZlciB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9MjAwNj1pbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA2MS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwNjI6aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYzLVx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBtZXRob2RpY2FsIGFwcHJvYWNoLCBhcyBJJiMzOTtkIGV4cGVjdC4gVGhlIG5hbWUgc3VnZ2VzdHMgYSBiYXRjaCBwcm9jZXNzaW5nIGFwcHJvYWNoIHRvIG1hcCBsb29rdXBzLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zLiBXaGF0IGtpbmQgb2YgbWFwPyBJcyBpdCBhIHN0YW5kYXJkIGhhc2htYXAsIGEgdHJpZSwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgd2Ugc2hvdWxkIGJlIGxvb2tpbmcgZm9yLCBwYXJ0aWN1bGFybHkgdW5kZXIgdmFyeWluZyBiYXRjaCBzaXplcz8gTWVtb3J5IG92ZXJoZWFkIGZvciB0aGUgYmF0Y2ggb3BlcmF0aW9uIGlzIGFsc28gYW4gb2J2aW91cyBjb25jZXJuIOKAkyBpcyBpdCBvcHRpbWl6ZWQsIG9yIGRvZXMgdGhlIGJhdGNoaW5nIGludHJvZHVjZSBzaWduaWZpY2FudCBtZW1vcnkgYm90dGxlbmVja3M/IEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBtaXNzaW5nIGtleXMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBBbnkgdXNlIG9mIHBhcmFsbGVsaXNtIG9yIHZlY3Rvcml6YXRpb24gd2l0aGluIHRoaXMgcm91dGluZSB3aWxsIGFsc28gYmUgb2YgcGFydGljdWxhciBpbnRlcmVzdCwgY29uc2lkZXJpbmcgdGhpcyBpcyBhICYjMzQ7YmF0Y2gmIzM0OyBvcGVyYXRpb24sIHRoYXQgd291bGQgYmUgdGhlIGJlc3Qgb3V0Y29tZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgZGVhZGxvY2tzIGFzIGEgcmVzdWx0IG9mIGNvbmN1cnJlbmN5LiBGaW5hbGx5LCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHdoYXQgYWJvdXQgY2FjaGUgY29oZXJlbmN5IGFuZCBmYWxzZSBzaGFyaW5nPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTIwNjI9aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjExOS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIxMjA6aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyMS1cdFx0XHRcdCAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyB3b3Jrcy4gIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgYmF0Y2hlZCBsb29rdXBzIGFuZCBkZWxldGlvbnMgd2l0aGluIHRoZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIOKAkyBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmluZyBvbiBhIGZldyBrZXkgYXJlYXMgSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUuCgoqICAgKipDb25jdXJyZW5jeToqKiBJcyB0aGlzIGRlc2lnbmVkIHdpdGggYW55IGxldmVsIG9mIGNvbmN1cnJlbmN5IGluIG1pbmQ/IEJhdGNoZWQgb3BlcmF0aW9ucyBvZnRlbiBoaW50IGF0IGEgbmVlZCBmb3IgdGhyZWFkIHNhZmV0eSwgb3IgYXQgbGVhc3QgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24uIEkgd2FudCB0byBjaGVjayBmb3IgbG9ja3MsIGF0b21pYyBvcGVyYXRpb25zLCBvciBhbnkgb3RoZXIgbWVjaGFuaXNtcyB0aGF0IHByZXZlbnQgZGF0YSByYWNlcy4gSWYgbm90LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBleHRlcm5hbCBndWFyYW50ZWVzLCBvciBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGlmIHRob3NlIGd1YXJhbnRlZXMgYXJlIGxhY2tpbmcuCgoqICAgKipJdGVyYXRpb24gJmFtcDsgS2V5IEhhbmRsaW5nOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsb29rdXAvZGVsZXRlIHJlcXVlc3RzPyBXaGF0JiMzOTtzIHRoZSBkYXRhIHN0cnVjdHVyZSBiZWluZyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgYmF0Y2g/IElzIGl0IHVzaW5nIGEgc2ltcGxlIGFycmF5LCBhIGxpbmtlZCBsaXN0LCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkPyAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXlzIGFyZSBoYW5kbGVkIHRvIGFzc2VzcyBwb3RlbnRpYWwgYm90dGxlbmVja3MuIEFueSBwZXIta2V5IG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgaWYgbm90IHdlbGwtb3B0aW1pemVkLCBjYW4gYWRkIHNpZ25pZmljYW50IG92ZXJoZWFkLiBUaGUgYWN0dWFsICYjMzQ7bG9va3VwIGFuZCBkZWxldGUmIzM0OyBpdHNlbGYgaXMgZ2VuZXJhbGx5IHByZXR0eSBxdWljaywgaXQmIzM5O3MgdGhlIGl0ZXJhdGlvbiB0aGF0JiMzOTtzIHRoZSBraWxsZXIuCgoqICAgKipFcnJvciBIYW5kbGluZyBhbmQgQXRvbWljaXR5OioqIFdoYXQgaGFwcGVucyBpZiBzb21lIG9mIHRoZSBsb29rdXBzL2RlbGV0ZXMgc3VjY2VlZCBhbmQgb3RoZXJzIGZhaWw/IElzIHRoZXJlIGFueSBhdG9taWNpdHkgZ3VhcmFudGVlPyBEb2VzIGl0IGFsbG93IGZvciBwYXJ0aWFsIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMsIGFuZCB3aGF0IG1lY2hhbmlzbXMgYXJlIHVzZWQgdG8gc2lnbmFsIGVycm9ycz8gIEEgcGFydGlhbCBmYWlsdXJlIGNvdWxkIGxlYWQgdG8gY29ycnVwdGlvbiBzbyBJIG5lZWQgdG8ga25vdyBob3cgaXQmIzM5O3MgaGFuZGxlZC4KCiogICAqKlBlcmZvcm1hbmNlIE9wdGltaXphdGlvbjoqKiBBcmUgdGhlcmUgYW55IG9idmlvdXMgb3B0aW1pemF0aW9ucywgc3VjaCBhcyB1c2luZyBTSU1EIGluc3RydWN0aW9ucyBvciBjYWNoZS1jb25zY2lvdXMgYWNjZXNzIHBhdHRlcm5zPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYWxnb3JpdGhtaWMgY29tcGxleGl0aWVzIChxdWFkcmF0aWMgY29tcGxleGl0eSBhbnlvbmU/KSBhbmQgd2hldGhlciB0aGlzIGZ1bmN0aW9uIHV0aWxpemVzIGFueSBzcGVjaWFsIGRhdGEgc3RydWN0dXJlcy4KClRoaXMgaW5pdGlhbCBwcm9iaW5nIHdpbGwgZGlyZWN0IG1lIHRvIHRoZSBob3RzcG90cyBmb3IgcmV2aWV3OiB0aGUgbG9vcCwgbWVtb3J5IGJhcnJpZXJzLCBlcnJvciBzdGF0dXMsIGFuZCBhbnkgc3BlY2lhbCBvcHRpbWl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbG9uZyB0aGUgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTE3NzI9c3RhdGljIGludFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTc3MzpfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzc0LVx0XHRcdFx0ICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxND1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTYte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxNzpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxOC1cdFx0XHRcdFx0XHQgIGZhbHNlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDIyPWh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMjUte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjAyNjpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI3LVx0XHRcdFx0XHRcdCAgZmFsc2UsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzE9aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzMte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjAzNDpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzNS1cdFx0XHRcdFx0XHQgIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzOT1odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDIte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0MzpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDQ0LVx0XHRcdFx0XHRcdCAgZmFsc2UsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDQ4PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1MS17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDUyOlx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDUzLVx0XHRcdFx0XHRcdCAgdHJ1ZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA1Nz1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2MC17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDYxOlx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjItXHRcdFx0XHRcdFx0ICB0cnVlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDY2PWh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2OC17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY5Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDcwLVx0XHRcdFx0XHRcdCAgdHJ1ZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNzQ9aHRhYl9scnVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA3Ny17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDc4Olx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzktXHRcdFx0XHRcdFx0ICB0cnVlLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJhdGNoIExvb2t1cCBhbmQgRGVsZXRlIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYmF0Y2ggZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG5vbi1zdGF0aWMgb25lcy4gSSBzZWUgYSBwYXR0ZXJuIGhlcmU6IGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCB0aGVuIHRoZSBzYW1lIHNldCBvZiBmdW5jdGlvbnMsIGJ1dCBwcmVmaXhlZCB3aXRoIGBscnVgLCB3aGljaCBJIGFzc3VtZSBhcmUgTFJVIHZhcmlhbnRzOiBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgIGV0Yy4KCkNsZWFybHksIHdlJiMzOTt2ZSBnb3QgcGVyLUNQVSBhbmQgbm9uLXBlci1DUFUgdmVyc2lvbnMsIGFuZCBhbHNvIGxvb2t1cC1vbmx5IHZlcnN1cyBsb29rdXAtYW5kLWRlbGV0ZSB2YXJpYXRpb25zIGZvciBib3RoIHN0YW5kYXJkIGFuZCBMUlUgaGFzaCB0YWJsZXMuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgc2V0IG9mIG9wdGltaXphdGlvbnMgYW5kIGZlYXR1cmVzLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGlubmVyIHdvcmtpbmdzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBvdXQgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBzaW5jZSB0aGF0IHNvdW5kcyBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdG8gZXhhbWluZSBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MzIzNT1zdGF0aWMgdTY0IHJodGFiX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQ0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzI0NTpzdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQ2LVx0XHRcdFx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM4MT1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4My17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzg0Olx0cmV0dXJuIF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzODUtfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMzODc9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4OS17XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzkwOlx0cmV0dXJuIF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVsdmluZyBpbnRvIHRoZSBNYXBwaW5nIE9wZXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3RhdGljIGhlcmUsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBtYXBwaW5nIG9wZXJhdGlvbnMuIFRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZSwgYXMgaXQmIzM5O3MgdGhlIHNwZWNpZmljIHJvdXRpbmUgcmVzcG9uc2libGUgZm9yIGxvb2t1cHMgKmFuZCogZGVsZXRpb25zIHdpdGhpbiB0aGUgbWFwIHN0cnVjdHVyZS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXNzaWdubWVudHMgd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgc3BlY2lmaWMgb3BlcmF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTI5NzQ9c3RhdGljIGxvbmcgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTg3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk4ODpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5ODkte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MTU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMy1cdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTI0Olx0Lm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI1LVx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIEJhdGNoIE9wZXJhdGlvbnMgaW4gR2VuZXJpYyBNYXBzKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBiYXRjaCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZXNlIGdlbmVyaWMgbWFwIGltcGxlbWVudGF0aW9ucy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gbWluaW1pemUgb3ZlcmhlYWQgYW5kIG1heGltaXplIHRocm91Z2hwdXQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgY2xvc2UgbG9vayBhdCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEkgbmVlZCB0byBhc3Nlc3MgaG93IGVmZmljaWVudGx5IHRoZXkgaGFuZGxlIG11bHRpcGxlIGtleS12YWx1ZSBwYWlycyBzaW11bHRhbmVvdXNseS4KCkkmIzM5O20gdGhpbmtpbmc6CiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB1c2VkPyBBcmUgd2UgdGFsa2luZyBoYXNoIHRhYmxlcywgYmFsYW5jZWQgdHJlZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgd2lsbCBkaWN0YXRlIHRoZSB0aGVvcmV0aWNhbCBiZXN0IGFuZCB3b3JzdC1jYXNlIHBlcmZvcm1hbmNlIGJvdW5kcywgYW5kIGhvdyB0aGF0IGlzIGFmZmVjdGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBiYXRjaGVzLgoqICAgKipDb25jdXJyZW5jeToqKiBJcyB0aGVyZSBhbnkgaW50ZXJuYWwgbG9ja2luZyBvciBzeW5jaHJvbml6YXRpb24gZ29pbmcgb24gd2l0aGluIHRoZXNlIGJhdGNoIGZ1bmN0aW9ucz8gQXJlIHRoZSBvcGVyYXRpb25zIHRocmVhZC1zYWZlPyBIb3cgZG9lcyB0aGUgY29uY3VycmVuY3kgbW9kZWwgYWZmZWN0IHNjYWxhYmlsaXR5LCBhbmQgaXMgaXQgYSBib3R0bGVuZWNrPwoqICAgKipNZW1vcnkgQWNjZXNzIFBhdHRlcm5zOioqIEhvdyBhcmUga2V5cyBhbmQgdmFsdWVzIGJlaW5nIGFjY2Vzc2VkIGluIG1lbW9yeT8gQXJlIHRoZSBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBjYWNoZSBsb2NhbGl0eT8gRG8gdGhleSBleGhpYml0IGdvb2Qgc3BhdGlhbCBhbmQgdGVtcG9yYWwgbG9jYWxpdHksIG9yIGFyZSB3ZSBleHBlcmllbmNpbmcgY2FjaGUgbWlzc2VzPwoqICAgKipJdGVyYXRvciBVc2FnZToqKiBBcmUgdGhlIGJhdGNoIG9wZXJhdGlvbnMgdXNpbmcgaXRlcmF0b3JzIGVmZmVjdGl2ZWx5PyBIb3cgYXJlIHRoZSBpdGVyYXRvcnMgYmVpbmcgaGFuZGxlZCBpbiB0aGVzZSBvcGVyYXRpb25zLCBhbmQgaG93IG1pZ2h0IHRoYXQgYWZmZWN0IHRoZSBzcGVlZCBvZiBwcm9jZXNzaW5nPyBJcyB0aGVyZSBhbnkgcmVkdW5kYW50IGl0ZXJhdG9yIGNyZWF0aW9uIG9yIGludmFsaWRhdGlvbj8KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IGFyZSBlcnJvcnMgaGFuZGxlZCBpbiBiYXRjaCBvcGVyYXRpb25zPyBEbyBpbmRpdmlkdWFsIGZhaWx1cmVzIGNhdXNlIHRoZSBlbnRpcmUgYmF0Y2ggdG8gZmFpbCwgb3IgYXJlIHRoZXJlIG1lY2hhbmlzbXMgZm9yIGhhbmRsaW5nIGluZGl2aWR1YWwgZXJyb3JzIGFuZCByZXBvcnRpbmcgdGhlbSBlZmZlY3RpdmVseT8KClVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kOgoqICAgV2hhdCBpcyB0aGUgY29tcHV0YXRpb25hbCBjb21wbGV4aXR5IG9mIHRoZXNlIGJhdGNoIG9wZXJhdGlvbnMgKGJvdGggdGltZSBhbmQgc3BhY2UpPwoqICAgV2hhdCBhcmUgdGhlIHByYWN0aWNhbCBwZXJmb3JtYW5jZSBsaW1pdHM/CiogICBBcmUgdGhlcmUgYW55IG9idmlvdXMgb3B0aW1pemF0aW9ucywgc3VjaCBhcyBiZXR0ZXIgdXNlIG9mIHZlY3Rvcml6YXRpb24sIHByZWZldGNoaW5nLCBvciBiYXRjaGluZyBzdHJhdGVnaWVzPwoKSSYjMzk7bSBzdGFydGluZyBoZXJlIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCB0aGVuIEkgd2lsbCBtb3ZlIG9uIHRvIGxvb2tpbmcgYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI3Njc9aW50ICBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3NjktXHRcdFx0ICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cik7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3NzA6aW50ICBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzcxLVx0XHRcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04MDE9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTgxNy1cdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjgxODpcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTgxOS1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTgyNz1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcGVyY3B1X2FycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg0MC1cdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg0MTpcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg0Mi1cdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTE0NDQ9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X29mX21hcHNfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTQ1NS1cdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NTY6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNDU3LVx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxLVx0Lm1hcF91cGRhdGVfYmF0Y2ggPVx0XHRcdFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjpcdGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcdFx0XFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzLVx0Lm1hcF9kZWxldGVfYmF0Y2ggPVx0XHRcdFxcXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODMtXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODQ6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODUtXHQubWFwX2RlbGV0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDA2PWludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA2MjppbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjMtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgTWFwIE9wZXJhdGlvbnMqKgoKT2theSwgbGV0IG1lIGJyZWFrIGRvd24gaG93IHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYXJlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2UgdXNlIGZvciBtYXAgdXBkYXRlcyBhbmQgbG9va3Vwcy4gRXNzZW50aWFsbHksIHRoZXkgYXJlIHRoZSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gTm93LCBsb29raW5nIGEgbGl0dGxlIGRlZXBlciwgSSBzZWUgdGhhdCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIGFyZSB0aGUgcHJpbWFyeSBzeXNjYWxsIGhhbmRsZXJzLiBUaGVzZSBhcmUgd2hhdCB3ZSB1bHRpbWF0ZWx5IGNhbGwgZm9yIHRoZSBgQlBGX01BUF9MT09LVVBfRUxFTWAgYW5kIGBCUEZfTUFQX1VQREFURV9FTEVNYCBvcGVyYXRpb25zLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBob2xkIG9uLi4uIEkmIzM5O20gbm90aWNpbmcgdGhhdCBgbWFwX2xvb2t1cF9lbGVtYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLCBzbyBpdCBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzICpzdGlsbCogYmVpbmcgY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhhdCB3b3JrczsgdGhlIHZpc2liaWxpdHkgcnVsZXMgYXJlIHBsYXlpbmcgdHJpY2tzIG9uIG1lIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXBfbG9va3VwX2VsZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz0zMDk9c3RhdGljIGludCBicGZfbWFwX2NvcHlfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMjgtXHR9IGVsc2UgaWYgKElTX0ZEX0FSUkFZKG1hcCkgfHwgSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMjk6XHRcdGVyciA9IGJwZl9mZF9hcnJheV9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMzMC1cdH0gZWxzZSBpZiAoSVNfRkRfSEFTSChtYXApKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMzE6XHRcdGVyciA9IGJwZl9mZF9odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSwgdmFsdWUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzMyLVx0fSBlbHNlIGlmIChtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVkpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDItXHRcdHJjdV9yZWFkX2xvY2soKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0MzpcdFx0aWYgKG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5KVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ0Olx0XHRcdHB0ciA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5KG1hcCwga2V5KTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NS1cdFx0ZWxzZVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ2Olx0XHRcdHB0ciA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0Ny1cdFx0aWYgKElTX0VSUihwdHIpKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTc2OD1zdGF0aWMgdm9pZCAqX19fYnBmX2NvcHlfa2V5KGJwZnB0cl90IHVrZXksIHU2NCBrZXlfc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNzgxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTc4MjpzdGF0aWMgaW50IG1hcF9sb29rdXBfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE3ODMte1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzNTQ9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTctXHRjYXNlIEJQRl9NQVBfTE9PS1VQX0VMRU06XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzk4Olx0XHRlcnIgPSBtYXBfbG9va3VwX2VsZW0oXHUwMDI2YXR0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIHBvcHMgb3V0LiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdC4gVGhlbiBJIHNlZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGNhbGwgZ3JhcGg6IGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCBhbmQsIG9mIGNvdXJzZSwgdGhlIGJpZyBvbmUsIGBfX3N5c19icGZgLCB3aGljaCBpcyB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCBhbmQgYWN0dWFsbHkgKmNhbGxzKiB0aG9zZSBzdGF0aWMgZnVuY3Rpb25zLgoKTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0bywgY2FuIEkgbGV2ZXJhZ2UgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGluIGFueSB3YXk/IFRoZXkgc2VlbSBsaWtlIHRoZXkgY291bGQgYmUgdXNlZnVsLiBBbmQgdGhlbiwgd2FpdCwgdGhlcmUmIzM5O3MgYSB3aG9sZSBmYW1pbHkgb2YgYmF0Y2ggbG9va3VwIGZ1bmN0aW9ucyBmb3IgaGFzaCB0YWJsZXM6IGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGFuZCB0aGUgcmVndWxhciBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgcGx1cyB0aGUgTFJVIHZhcmlhdGlvbnMuIFBsZW50eSBvZiBvcHRpb25zLgoKTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGdvdHRhIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZDsgaXTigJlzIGVzc2VudGlhbCB0byBlbnN1cmUgZXZlcnl0aGluZyYjMzk7cyBldmVuIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQ2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBTeXNjYWxsKioKCk9rYXksIHNvIHRoZSBwbGFuIGlzIGRlZmluaXRlbHkgdG8gZW5hYmxlIGBCUEZfU1lTQ0FMTGAuIEkmIzM5O3ZlIHJlLXJldmlld2VkIHRoYXQgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIGEgc29saWQgZml4IGZvciB0aGUgYEJQRl9GX0NQVWAgZmxhZyB2YWxpZGF0aW9uLiBUaGF0IGNoYW5nZSBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIHRob3JvdWdoIGZ1enppbmcuCgpNeSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcgYXJlIGdvaW5nIHRvIGJlIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gVGhlc2UgbG9vayBsaWtlIHByaW1lIGxvY2F0aW9ucyBmb3IgY2F0Y2hpbmcgaXNzdWVzLiBXaGlsZSBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0IEkmIzM5O20gYWxzbyBnb2luZyB0byBjb25zaWRlciBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCBhcyBhIGZ1enppbmcgdGFyZ2V0LgoKSSYjMzk7bSBwYXVzaW5nIHRvIGNvbnNpZGVyIGBfX3N5c19icGZgIGZvciBhIG1vbWVudC4gSXQmIzM5O3MgYSBodWdlbHkgaW1wb3J0YW50IHN5c2NhbGwsIGFuZCBhIG5hdHVyYWwgdGFyZ2V0LCBidXQgaXRzIGhpZ2ggdHJhZmZpYyBtZWFucyBoZWF2eSBmdXp6aW5nIG9mIGl0IG1pZ2h0IHNrZXcgdGhlIHJlc3VsdHMuIEkgdGhpbmsgSSYjMzk7bGwgZm9jdXMgb24gdGhlIGJhdGNoIG9wZXJhdGlvbnMgZmlyc3QsIHRoZW4gbG9vcCBiYWNrIHRvIGZ1enogYF9fc3lzX2JwZmAgYXQgYSByZWR1Y2VkIHJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h0YWJfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDMwPXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzE6aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzMi1cdFx0ICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ1PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM4MTpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgyLVx0XHRcdFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBIYXNoaW5nIEZ1bmN0aW9ucyBhbmQgRGF0YSBTdHJ1Y3R1cmVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaGFzaCB0YWJsZSBsb29rdXBzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIHRoYXQgbWVhbnMgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoaXMgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0uIFNpbmNlIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBhIGdsb2JhbCBlbnRyeSBwb2ludCwgSSBzaG91bGQgbG9vayBhdCB3aGF0IHVzZXMgaXQuIEdpdmVuIHRoZSBuYW1lcywgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYSBoZWxwZXIgcm91dGluZSwgb3IgcG9zc2libHkgYW4gb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgbGFyZ2VyIGxvb2t1cCBmdW5jdGlvbiBmYW1pbHkuIExldCYjMzk7cyBzZWUuLi4gc2luY2UgSSBhbSBsb29raW5nIGF0IGxvb2t1cCByb3V0aW5lcywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCBhbmQgc2VlIGlmIHRoZXkgaGF2ZSBhbnkgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoaXMgY29udGV4dCB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSByZWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTIwMTM9c3RhdGljIGludFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxNDpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNS1cdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIFN0YXRpYyBEYXRhIFN0cnVjdHVyZXMqKgoKRGFtbiBpdCwgSSB3YXMgdG9vIHF1aWNrIG9uIHRoZSBkcmF3IHdpdGggdGhhdCBsYXN0IGdyZXAgcmVzdWx0LiBFdmVyeXRoaW5nJiMzOTtzIGxvb2tpbmcgc3VzcGljaW91c2x5IHN0YXRpYzsgSSBqdW1wZWQgdGhlIGd1bi4gVGltZSB0byByZXZpc2l0IHRob3NlIGJhdGNoIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBjb250ZXh0IGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMgaW4gZGV0YWlsLiBJdOKAmXMgbGlrZWx5IHRoZSBpc3N1ZSBpc27igJl0IHdoZXJlIEkgaW5pdGlhbGx5IHRob3VnaHQuIEkgbmVlZCB0byBiZSBtZXRob2RpY2FsIGhlcmUsIHRyYWNpbmcgdGhyb3VnaCB0aGVpciBiZWhhdmlvciBpbiB0aGlzIG5ldyBsaWdodC4gVGhlcmUmIzM5O3MgYSBmdW5kYW1lbnRhbCBtaXN1bmRlcnN0YW5kaW5nIHNvbWV3aGVyZSwgYW5kIGl0JiMzOTtzIGJ1cmllZCBpbiB0aGUgaW50ZXJhY3Rpb24gb2YgdGhvc2UgdHdvIGJhdGNoIG9wZXJhdGlvbnMuIE5lZWQgdG8gZ28gYmFjayB0byB0aGUgY29kZSBhbmQgYXBwcm9hY2ggdGhpcyB3aXRoIGZyZXNoIGV5ZXMsIGNhcmVmdWxseSBhbmFseXppbmcgdGhlIHN0YXRlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz0yMDA2PWludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA2MjppbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjMtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NTEKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZvY3VzIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb24gZm9yIEJQRiBNYXAgVmFsaWRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgaGVyZSYjMzk7cyBteSBjdXJyZW50IHRoaW5raW5nLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAgYXJlIGluZGVlZCB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNhbGxpbmcgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgLCBiZXNpZGVzIHRoZSAmIzM0O2hvdCBwYXRoJiMzNDsgb25lcyBsaWtlIGBfX3N5c19icGZgLiBJIGhhZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYmVjYXVzZSBgbWFwX2xvb2t1cF9lbGVtYCBhbmQgYG1hcF91cGRhdGVfZWxlbWAgYXJlIGNhbGxlZCBmcm9tIGBfX3N5c19icGZgLCBidXQgdGhhdCYjMzk7cyBleHBlY3RlZC4gTm8gb3RoZXIgZW50cnkgcG9pbnRzIHNlZW0gcmVsZXZhbnQuIEkgbG9va2VkIGludG8gYGJwZl9tYXBfdXBkYXRlX3ZhbHVlYCBhbmQgc3R1ZmYgbGlrZSBgYnBmX2ZkX2FycmF5X21hcF9sb29rdXBfZWxlbWAsIGJ1dCB0aG9zZSBkb24mIzM5O3Qgc2VlbSB0byB0cmlnZ2VyIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYC4KClRoZXJlZm9yZSwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoYXQgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSB0aGUgc3Ryb25nZXN0IGNhbmRpZGF0ZXMgZm9yIG15ICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsg4oCTIHRoZXkmIzM5O3JlIHRoZSBtb3N0IGRpcmVjdCwgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgSSBjYW4gdGFyZ2V0LgoKTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYEJQRl9TWVNDQUxMYC4gSSBoYWQgdG8gY2hlY2ssIGJ1dCB0aGlzIGFsbCBmYWxscyB1bmRlciB0aGUgY29yZSBCUEYgc3lzY2FsbCBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggQlBGIG1hcHMuIFllcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBlbmFibGluZyBgQlBGX1NZU0NBTExgIGlzIHRoZSAqb25seSogbmVjZXNzYXJ5IGNvbmZpZyBmb3IgZnV6emluZy4KCk15IHJlYXNvbmluZyBib2lscyBkb3duIHRvIHRoaXM6IFRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIHRvIHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIG1vcmUgcm9idXN0bHkgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgdGhyb3VnaCB0aGUgYmF0Y2ggb3BlcmF0aW9ucyBJJiMzOTt2ZSBpZGVudGlmaWVkLCBhbmQgZnJvbSB0aGUgbW9yZSBiYXNpYyBsb29rdXBzLiBTbywgZnV6emluZyBpcyBjcml0aWNhbCBoZXJlIHRvIGVuc3VyZSB0aGlzIG5ldyBDUFUgdmFsaWRhdGlvbiB3b3JrcyBjb3JyZWN0bHkgYW5kIHRoYXQgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KClNvLCBpbiBzdW1tYXJ5OgoKKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAKKiAgICoqRW5hYmxlIENvbmZpZ3M6KiogYEJQRl9TWVNDQUxMYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfbG9va3VwX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCB0byBjb3JyZWN0bHkgdmFsaWRhdGUgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgIGluc3RlYWQgb2YgYG51bV9wb3NzaWJsZV9jcHVzKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgKGUuZy4sIGBCUEZfTUFQX0xPT0tVUF9FTEVNYCwgYEJQRl9NQVBfVVBEQVRFX0VMRU1gLCBhbmQgYmF0Y2ggb3BlcmF0aW9ucykuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgQ1BVIHZhbGlkYXRpb24gbG9naWMgd29ya3MgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AgdG8gY29ycmVjdGx5IHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIHVzaW5nIGBucl9jcHVfaWRzYCBhbmQgYGNwdV9wb3NzaWJsZSgpYCBpbnN0ZWFkIG9mIGBudW1fcG9zc2libGVfY3B1cygpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucyBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIChlLmcuLCBgQlBGX01BUF9MT09LVVBfRUxFTWAsIGBCUEZfTUFQX1VQREFURV9FTEVNYCwgYW5kIGJhdGNoIG9wZXJhdGlvbnMpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IENQVSB2YWxpZGF0aW9uIGxvZ2ljIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE3OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYGNwdWAgdmFsdWUgZXh0cmFjdGVkIGZyb20gYGZsYWdzYCBpbiBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AuIEl0IGNoYW5nZXMgdGhlIGNoZWNrIGZyb20gYGNwdSBcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKClgIHRvIGBjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KWAuIFRoaXMgaXMgYSBib3VuZHMvdmFsaWRpdHkgY2hlY2sgdGhhdCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzYWdlIG9mIGludmFsaWQgQ1BVIElEcywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gKG91dC1vZi1ib3VuZHMpIG9yIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDcyNTgwN2RiMGE5Mzc3OTEzZTA5ZDIyMWZlMTYyNGY5ZTUwMjliOTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxNzo1NzoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oCmluZGV4IDc3MTlmNjUyODQ0NTYuLjM1M2YxM2JiMDY2ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtNDIwMiw3ICYjNDM7NDIwMiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3Moc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0IGZsYWdzLCB1NjQgYWxsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQljcHUgPSBmbGFncyAmZ3Q7Jmd0OyAzMjsKLQkJaWYgKChmbGFncyAmYW1wOyBCUEZfRl9DUFUpICZhbXA7JmFtcDsgY3B1ICZndDs9IG51bV9wb3NzaWJsZV9jcHVzKCkpCiYjNDM7CQlpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0NQVSkgJmFtcDsmYW1wOyAoY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpKSkKIAkJCXJldHVybiAtRVJBTkdFOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMQoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIE1hcCBDUFUgVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGZ1bmN0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGlnaHRlbmluZyB0aGUgYm91bmRzIGNoZWNrIG9uIHRoZSBgY3B1YCB2YWx1ZSBleHRyYWN0ZWQgZnJvbSB0aGUgYGZsYWdzYCBhcmd1bWVudC4gIFByZXZpb3VzbHksIGl0IGp1c3QgY2hlY2tlZCBpZiB0aGUgQ1BVIElEIHdhcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBwb3NzaWJsZSBDUFVzIChgbnVtX3Bvc3NpYmxlX2NwdXMoKWApLiBOb3csIGl0IGluY2x1ZGVzIGFuIGFkZGl0aW9uYWwgY2hlY2s6ICBgY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpYC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gc3RlcC4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3ZpZGVkIGBjcHVgIHZhbHVlIGlzICpib3RoKiB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlIChsZXNzIHRoYW4gYG5yX2NwdV9pZHNgKSBhbmQgYWN0dWFsbHkgcmVwcmVzZW50cyBhIHBvc3NpYmxlIENQVSBvbiB0aGUgc3lzdGVtICh1c2luZyBgY3B1X3Bvc3NpYmxlKClgKS4gVGhpcyBmaXhlcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHdoZXJlIGFuIG91dC1vZi1ib3VuZHMgb3Igbm9uLWV4aXN0ZW50IENQVSBJRCBjb3VsZCBiZSB1c2VkLCB3aGljaCwgYXMgdGhleSBtZW50aW9uLCBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIGFuZCBvdGhlciBwcm9ibGVtcywgdGhvdWdoIHRoZXNlIGFjY2Vzc2VzIGFyZSBjYXVnaHQgYnkgS0FTQU4uCgpJJiMzOTttIGNvbmZpZGVudCB0aGlzIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBJdCYjMzk7cyBzdHJpY3RseSBhIHZhbGlkYXRpb24gbG9naWMgY2hhbmdlLCByZWZpbmluZyB0aGUgZXhpc3RpbmcgYm91bmRzIGNoZWNrLiBXZSYjMzk7cmUgKnByZXZlbnRpbmcqIHBvdGVudGlhbCBpc3N1ZXMsIG5vdCBjcmVhdGluZyBuZXcgb25lcy4gVGhlIGxvZ2ljIGlzOiBnZXQgdGhlIENQVSBpZCwgYW5kIGNoZWNrIGlmIGl0IGlzIGVpdGhlciBvdXQgb2YgdGhlIHRvdGFsIENQVSBJRCBudW1iZXJzLCAqb3IqIGlmIHRoZSBJRCBpcyBub3QgcG9zc2libGUuIElmIGVpdGhlciBpcyB0cnVlLCB0aGVuIHJldHVybiBhbiBlcnJvci4KClRoZSBjb2RlIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IGBjcHUgPSBmbGFncyAmZ3Q7Jmd0OyAzMjtgIHRoZW4gdGhlIGNoZWNrIGBpZiAoKGZsYWdzICZhbXA7IEJQRl9GX0NQVSkgJmFtcDsmYW1wOyAoY3B1ICZndDs9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpKSkgeyByZXR1cm4gLUVSQU5HRTsgfWAuIENsZWFuIGFuZCBjb25jaXNlLCBmb2N1c2luZyBleGNsdXNpdmVseSBvbiBpbnB1dCB2YWxpZGF0aW9uLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgKnB1cmVseSogdmFsaWRhdGlvbiBjaGFuZ2UsIGFpbWVkIGF0IHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYW5kIGltcHJvdmluZyByb2J1c3RuZXNzLCBhbmQgKm5vdCogaW50cm9kdWNpbmcgYW55IG1lbW9yeSBoYXphcmRzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGhlcmUuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgcHJvdGVjdGluZyBhZ2FpbnN0IGEgcmFuZ2Ugb2YgaW5jb3JyZWN0IHZhbHVlcyB0aGF0IHdvdWxkIGNhdXNlIGFuIGVycm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgdGhlIGBjcHVgIHZhbHVlIGV4dHJhY3RlZCBmcm9tIGBmbGFnc2AgaW4gYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgLiBJdCBjaGFuZ2VzIHRoZSBjaGVjayBmcm9tIGBjcHUgXHUwMDNlPSBudW1fcG9zc2libGVfY3B1cygpYCB0byBgY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgYm91bmRzL3ZhbGlkaXR5IGNoZWNrIHRoYXQgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2FnZSBvZiBpbnZhbGlkIENQVSBJRHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIChvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgY3B1YCB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBgZmxhZ3NgIGluIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYC4gSXQgY2hhbmdlcyB0aGUgY2hlY2sgZnJvbSBgY3B1IFx1MDAzZT0gbnVtX3Bvc3NpYmxlX2NwdXMoKWAgdG8gYGNwdSBcdTAwM2U9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpYC4gVGhpcyBpcyBhIGJvdW5kcy92YWxpZGl0eSBjaGVjayB0aGF0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNhZ2Ugb2YgaW52YWxpZCBDUFUgSURzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiAob3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTc6MTMuODUwNDA5MjU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5Nzc0MTAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgY3B1YCB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBgZmxhZ3NgIGluIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYC4gSXQgY2hhbmdlcyB0aGUgY2hlY2sgZnJvbSBgY3B1IFxcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKClgIHRvIGBjcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgYm91bmRzL3ZhbGlkaXR5IGNoZWNrIHRoYXQgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2FnZSBvZiBpbnZhbGlkIENQVSBJRHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIChvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCB0byBjb3JyZWN0bHkgdmFsaWRhdGUgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgIGluc3RlYWQgb2YgYG51bV9wb3NzaWJsZV9jcHVzKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgKGUuZy4sIGBCUEZfTUFQX0xPT0tVUF9FTEVNYCwgYEJQRl9NQVBfVVBEQVRFX0VMRU1gLCBhbmQgYmF0Y2ggb3BlcmF0aW9ucykuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgQ1BVIHZhbGlkYXRpb24gbG9naWMgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTc6MTMuODUwNDE2NDY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQxMDYzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MjU4MDdkYjBhOTM3NzkxM2UwOWQyMjFmZTE2MjRmOWU1MDI5Yjk3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDEzIDE3OjU3OjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uMzUzZjEzYmIwNjZkMCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbkBAIC00MjAyLDcgKzQyMDIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdGNwdSA9IGZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbi1cXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSBcXHUwMDI2XFx1MDAyNiBjcHUgXFx1MDAzZT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSlcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEJQRl9GX0NQVSkgXFx1MDAyNlxcdTAwMjYgKGNwdSBcXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzoxNC4yNjU1MzMzODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4Njk1OTI0NjkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIHRvIGNvcnJlY3RseSB2YWxpZGF0ZSB0aGUgYEJQRl9GX0NQVWAgZmxhZyB1c2luZyBgbnJfY3B1X2lkc2AgYW5kIGBjcHVfcG9zc2libGUoKWAgaW5zdGVhZCBvZiBgbnVtX3Bvc3NpYmxlX2NwdXMoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCAoZS5nLiwgYEJQRl9NQVBfTE9PS1VQX0VMRU1gLCBgQlBGX01BUF9VUERBVEVfRUxFTWAsIGFuZCBiYXRjaCBvcGVyYXRpb25zKS4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIG5ldyBDUFUgdmFsaWRhdGlvbiBsb2dpYyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjU4MDdkYjBhOTM3NzkxM2UwOWQyMjFmZTE2MjRmOWU1MDI5Yjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTc6NTc6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uMzUzZjEzYmIwNjZkMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC00MjAyLDcgKzQyMDIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRjcHUgPSBmbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4tXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IGNwdSBcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKCkpXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzoxNC4yNjU1MzQ4NTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkyNDc3OTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBNYXAgT3BlcmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgbW9kaWZ5aW5nIHRoZSBDUFUgdmFsaWRhdGlvbiB3aXRoaW4gdGhlIG1hcCBvcGVyYXRpb24gZmxhZ3MgY2hlY2suIEluc3RlYWQgb2YganVzdCB2ZXJpZnlpbmcgYGNwdWAgYWdhaW5zdCBgbnVtX3Bvc3NpYmxlX2NwdXMoKWAsIGl0J3Mgbm93IGNoZWNraW5nIGFnYWluc3QgYG5yX2NwdV9pZHNgIGFuZCB1c2luZyBgY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGFmZmVjdGluZyBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggQ1BVLXNwZWNpZmljIGRhdGEgd2l0aGluIG1hcHMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgdXNhZ2Ugb2YgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGl0c2VsZi4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyBjYWxsZWQgZnJvbT8gV2hhdCBwYXJ0cyBvZiB0aGUgQlBGIHN1YnN5c3RlbSByZWx5IG9uIHRoaXMgdmFsaWRhdGlvbiwgYW5kIGhvdyBtaWdodCB0aGlzIHN1YnRsZSBzaGlmdCBhZmZlY3QgdGhlaXIgYmVoYXZpb3I/IEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzIGFuZCBjb25zaWRlciB0aGUgc3BlY2lmaWMgbWFwIHR5cGVzIHRoYXQgY291bGQgYmUgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UgaW4gdGhlIHZhbGlkYXRpb24gbG9naWMuIFRpbWUgdG8gZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTc6MTguMjU4MDE1ODA2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzMxNTI5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX21hcF9jaGVja19vcF9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD00MTcyPXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX3N1cHBvcnRzX2NwdV9mbGFncyhlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDE4NC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjQxODU6c3RhdGljIGlubGluZSBpbnQgYnBmX21hcF9jaGVja19vcF9mbGFncyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgZmxhZ3MsIHU2NCBhbGxvd2VkX2ZsYWdzKVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNDE4Ni17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzczPV9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3OTktXFx0XFx0YWxsb3dlZF9mbGFncyB8PSBCUEZfRl9DUFU7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTgwMDpcXHRyZXQgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgZWxlbV9tYXBfZmxhZ3MsIGFsbG93ZWRfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE4MDEtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5ODg9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTkzLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTQ6XFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGZsYWdzLCBCUEZfRl9MT0NLKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk1LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ1PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNjItXFx0ZWxlbV9tYXBfZmxhZ3MgPSBhdHRyLVxcdTAwM2ViYXRjaC5lbGVtX2ZsYWdzO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNjM6XFx0cmV0ID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGVsZW1fbWFwX2ZsYWdzLCBCUEZfRl9MT0NLKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjY0LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xNzgyPXN0YXRpYyBpbnQgbWFwX2xvb2t1cF9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTgwMC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxODAxOlxcdGVyciA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBhdHRyLVxcdTAwM2VmbGFncywgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTgwMi1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTg0ND1zdGF0aWMgaW50IG1hcF91cGRhdGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xODY1LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE4NjY6XFx0ZXJyID0gYnBmX21hcF9jaGVja19vcF9mbGFncyhtYXAsIGF0dHItXFx1MDAzZWZsYWdzLCB+MCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTg2Ny1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjA2Mj1pbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNzEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA3MjpcXHRlcnIgPSBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKG1hcCwgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDczLVxcdFxcdFxcdFxcdCAgICAgQlBGX0ZfTE9DSyB8IEJQRl9GX0NQVSB8IEJQRl9GX0FMTF9DUFVTKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIxMjA9aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEzMS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMTMyOlxcdGVyciA9IGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3MobWFwLCBhdHRyLVxcdTAwM2ViYXRjaC5lbGVtX2ZsYWdzLCBCUEZfRl9MT0NLIHwgQlBGX0ZfQ1BVKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTMzLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjIwLjA5MTE3NTQ1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDI4ODQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIE1hcCBPcGVyYXRpb24gRmxhZ3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHNwb3R0ZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIOKAkyBpdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBhIGNyaXRpY2FsIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCBjaGVjayBoZXJlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIGl0cyBpbXBvcnRhbmNlLiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBgc3RhdGljIGlubGluZWAsIHNvIHRoZXJlJ3Mgbm8gdW5pcXVlIHN5bWJvbCBhZGRyZXNzIHRvIHRhcmdldCBkaXJlY3RseS4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBjYWxsIGl0LlxuXG5MZXQgbWUgc2Vl4oCmIHRoZSBjYWxsZXJzIGFyZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBtYXBfbG9va3VwX2VsZW1gLCBgbWFwX3VwZGF0ZV9lbGVtYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gUmlnaHQsIGdvdCBpdC5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBpZiBgbWFwX2xvb2t1cF9lbGVtYCBhbmQgYG1hcF91cGRhdGVfZWxlbWAgYXJlIGFsc28gc3RhdGljLiBBaGEsIHRoZXkgYXJlOyB0aGV5J3JlIGRlZmluZWQgYXMgYHN0YXRpY2AgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC5cblxuV2FpdCBhIG1pbnV0ZSwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRob3NlIGFyZSBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgZmlsZS4gT2theSwgbGV0J3MgaGVhZCBvdmVyIHRvIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzoyNS4xMzQwNjE1OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5NTcwMTIxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MjAwNj1pbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwNjI6aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA2My1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzoyNy44Mjk3Njg0MjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM3ODU1MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIG1ldGhvZGljYWwgYXBwcm9hY2gsIGFzIEknZCBleHBlY3QuIFRoZSBuYW1lIHN1Z2dlc3RzIGEgYmF0Y2ggcHJvY2Vzc2luZyBhcHByb2FjaCB0byBtYXAgbG9va3Vwcywgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmV3IHF1ZXN0aW9ucy4gV2hhdCBraW5kIG9mIG1hcD8gSXMgaXQgYSBzdGFuZGFyZCBoYXNobWFwLCBhIHRyaWUsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBXaGF0IGFyZSB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHdlIHNob3VsZCBiZSBsb29raW5nIGZvciwgcGFydGljdWxhcmx5IHVuZGVyIHZhcnlpbmcgYmF0Y2ggc2l6ZXM/IE1lbW9yeSBvdmVyaGVhZCBmb3IgdGhlIGJhdGNoIG9wZXJhdGlvbiBpcyBhbHNvIGFuIG9idmlvdXMgY29uY2VybiDigJMgaXMgaXQgb3B0aW1pemVkLCBvciBkb2VzIHRoZSBiYXRjaGluZyBpbnRyb2R1Y2Ugc2lnbmlmaWNhbnQgbWVtb3J5IGJvdHRsZW5lY2tzPyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBtaXNzaW5nIGtleXMgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBBbnkgdXNlIG9mIHBhcmFsbGVsaXNtIG9yIHZlY3Rvcml6YXRpb24gd2l0aGluIHRoaXMgcm91dGluZSB3aWxsIGFsc28gYmUgb2YgcGFydGljdWxhciBpbnRlcmVzdCwgY29uc2lkZXJpbmcgdGhpcyBpcyBhIFwiYmF0Y2hcIiBvcGVyYXRpb24sIHRoYXQgd291bGQgYmUgdGhlIGJlc3Qgb3V0Y29tZS4gSSdsbCBiZSBsb29raW5nIGZvciBwb3NzaWJsZSBkZWFkbG9ja3MgYXMgYSByZXN1bHQgb2YgY29uY3VycmVuY3kuIEZpbmFsbHksIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgd2hhdCBhYm91dCBjYWNoZSBjb2hlcmVuY3kgYW5kIGZhbHNlIHNoYXJpbmc/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1NzozMS4zNjc2MjU2NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMzIyNzczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MjA2Mj1pbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIxMTktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEyMDppbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyMS1cXHRcXHRcXHRcXHQgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjMzLjk5MDg2MzAyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjQ5MjI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyB0aGluZyB3b3Jrcy4gIEknbSBhc3N1bWluZyB0aGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBiYXRjaGVkIGxvb2t1cHMgYW5kIGRlbGV0aW9ucyB3aXRoaW4gdGhlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24g4oCTIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgY2VudGVyaW5nIG9uIGEgZmV3IGtleSBhcmVhcyBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZS5cblxuKiAgICoqQ29uY3VycmVuY3k6KiogSXMgdGhpcyBkZXNpZ25lZCB3aXRoIGFueSBsZXZlbCBvZiBjb25jdXJyZW5jeSBpbiBtaW5kPyBCYXRjaGVkIG9wZXJhdGlvbnMgb2Z0ZW4gaGludCBhdCBhIG5lZWQgZm9yIHRocmVhZCBzYWZldHksIG9yIGF0IGxlYXN0IGNhcmVmdWwgc3luY2hyb25pemF0aW9uLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucywgb3IgYW55IG90aGVyIG1lY2hhbmlzbXMgdGhhdCBwcmV2ZW50IGRhdGEgcmFjZXMuIElmIG5vdCwgSSdtIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBleHRlcm5hbCBndWFyYW50ZWVzLCBvciBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGlmIHRob3NlIGd1YXJhbnRlZXMgYXJlIGxhY2tpbmcuXG5cbiogICAqKkl0ZXJhdGlvbiBcdTAwMjYgS2V5IEhhbmRsaW5nOioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaXRlcmF0ZSB0aHJvdWdoIHRoZSBsb29rdXAvZGVsZXRlIHJlcXVlc3RzPyBXaGF0J3MgdGhlIGRhdGEgc3RydWN0dXJlIGJlaW5nIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBiYXRjaD8gSXMgaXQgdXNpbmcgYSBzaW1wbGUgYXJyYXksIGEgbGlua2VkIGxpc3QsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/ICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtleXMgYXJlIGhhbmRsZWQgdG8gYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gQW55IHBlci1rZXkgb3BlcmF0aW9ucywgZXNwZWNpYWxseSBpZiBub3Qgd2VsbC1vcHRpbWl6ZWQsIGNhbiBhZGQgc2lnbmlmaWNhbnQgb3ZlcmhlYWQuIFRoZSBhY3R1YWwgXCJsb29rdXAgYW5kIGRlbGV0ZVwiIGl0c2VsZiBpcyBnZW5lcmFsbHkgcHJldHR5IHF1aWNrLCBpdCdzIHRoZSBpdGVyYXRpb24gdGhhdCdzIHRoZSBraWxsZXIuXG5cbiogICAqKkVycm9yIEhhbmRsaW5nIGFuZCBBdG9taWNpdHk6KiogV2hhdCBoYXBwZW5zIGlmIHNvbWUgb2YgdGhlIGxvb2t1cHMvZGVsZXRlcyBzdWNjZWVkIGFuZCBvdGhlcnMgZmFpbD8gSXMgdGhlcmUgYW55IGF0b21pY2l0eSBndWFyYW50ZWU/IERvZXMgaXQgYWxsb3cgZm9yIHBhcnRpYWwgc3VjY2Vzc2VzIGFuZCBmYWlsdXJlcywgYW5kIHdoYXQgbWVjaGFuaXNtcyBhcmUgdXNlZCB0byBzaWduYWwgZXJyb3JzPyAgQSBwYXJ0aWFsIGZhaWx1cmUgY291bGQgbGVhZCB0byBjb3JydXB0aW9uIHNvIEkgbmVlZCB0byBrbm93IGhvdyBpdCdzIGhhbmRsZWQuXG5cbiogICAqKlBlcmZvcm1hbmNlIE9wdGltaXphdGlvbjoqKiBBcmUgdGhlcmUgYW55IG9idmlvdXMgb3B0aW1pemF0aW9ucywgc3VjaCBhcyB1c2luZyBTSU1EIGluc3RydWN0aW9ucyBvciBjYWNoZS1jb25zY2lvdXMgYWNjZXNzIHBhdHRlcm5zPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYWxnb3JpdGhtaWMgY29tcGxleGl0aWVzIChxdWFkcmF0aWMgY29tcGxleGl0eSBhbnlvbmU/KSBhbmQgd2hldGhlciB0aGlzIGZ1bmN0aW9uIHV0aWxpemVzIGFueSBzcGVjaWFsIGRhdGEgc3RydWN0dXJlcy5cblxuVGhpcyBpbml0aWFsIHByb2Jpbmcgd2lsbCBkaXJlY3QgbWUgdG8gdGhlIGhvdHNwb3RzIGZvciByZXZpZXc6IHRoZSBsb29wLCBtZW1vcnkgYmFycmllcnMsIGVycm9yIHN0YXR1cywgYW5kIGFueSBzcGVjaWFsIG9wdGltaXphdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWxvbmcgdGhlIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjM4Ljg1NTc4NzQ0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODI2Njk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzcyPXN0YXRpYyBpbnRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzczOl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzc0LVxcdFxcdFxcdFxcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAxND1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNi17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAxNzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE4LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyMj1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMjUte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMjY6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI3LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzMT1odGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDMzLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDM0OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzUtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAzOT1odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0Mi17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA0MzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDQtXFx0XFx0XFx0XFx0XFx0XFx0ICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0OD1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1MS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA1MjpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDUzLVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDU3PWh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjAte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNjE6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYyLVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgdHJ1ZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDY2PWh0YWJfbHJ1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDY4LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDY5OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzAtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCBmYWxzZSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDc0PWh0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA3Ny17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA3ODpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzktXFx0XFx0XFx0XFx0XFx0XFx0ICB0cnVlLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjQwLjQxNDA2NTg2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg4NjcyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCYXRjaCBMb29rdXAgYW5kIERlbGV0ZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBiYXRjaCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgbm9uLXN0YXRpYyBvbmVzLiBJIHNlZSBhIHBhdHRlcm4gaGVyZTogYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIHRoZW4gdGhlIHNhbWUgc2V0IG9mIGZ1bmN0aW9ucywgYnV0IHByZWZpeGVkIHdpdGggYGxydWAsIHdoaWNoIEkgYXNzdW1lIGFyZSBMUlUgdmFyaWFudHM6IGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaGAgZXRjLlxuXG5DbGVhcmx5LCB3ZSd2ZSBnb3QgcGVyLUNQVSBhbmQgbm9uLXBlci1DUFUgdmVyc2lvbnMsIGFuZCBhbHNvIGxvb2t1cC1vbmx5IHZlcnN1cyBsb29rdXAtYW5kLWRlbGV0ZSB2YXJpYXRpb25zIGZvciBib3RoIHN0YW5kYXJkIGFuZCBMUlUgaGFzaCB0YWJsZXMuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBzZXQgb2Ygb3B0aW1pemF0aW9ucyBhbmQgZmVhdHVyZXMuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBpbm5lciB3b3JraW5ncy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBvdXQgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBzaW5jZSB0aGF0IHNvdW5kcyBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgdG8gZXhhbWluZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjExOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1Nzo0NC4xMDI3NDEzNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTMzODU4MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTMyMzU9c3RhdGljIHU2NCByaHRhYl9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQ0LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyNDU6c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNDYtXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM4MT1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgzLXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzg0OlxcdHJldHVybiBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4NS19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzg3PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4OS17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM5MDpcXHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjQ1LjcxNjEzNTY0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA3OTM4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBNYXBwaW5nIE9wZXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHN0YXRpYyBoZXJlLCBidXQgaXQncyBhc3NpZ25lZCB0byBtYXBwaW5nIG9wZXJhdGlvbnMuIFRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUsIGFzIGl0J3MgdGhlIHNwZWNpZmljIHJvdXRpbmUgcmVzcG9uc2libGUgZm9yIGxvb2t1cHMgKmFuZCogZGVsZXRpb25zIHdpdGhpbiB0aGUgbWFwIHN0cnVjdHVyZS4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXNzaWdubWVudHMgd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgc3BlY2lmaWMgb3BlcmF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1Nzo0OS4wMjQwNzc0ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjY4MDE1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTI5NzQ9c3RhdGljIGxvbmcgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5ODctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk4ODpzdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTg5LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM1MTU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTIzLVxcdC5tYXBfbG9va3VwX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUyNDpcXHQubWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTI1LVxcdC5tYXBfdXBkYXRlX2VsZW0gPSByaHRhYl9tYXBfdXBkYXRlX2VsZW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjUwLjY5MDg4NDM3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzIxNTE1MTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBCYXRjaCBPcGVyYXRpb25zIGluIEdlbmVyaWMgTWFwcyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBiYXRjaCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZXNlIGdlbmVyaWMgbWFwIGltcGxlbWVudGF0aW9ucy4gVGhlIGdvYWwsIGFzIGFsd2F5cywgaXMgdG8gbWluaW1pemUgb3ZlcmhlYWQgYW5kIG1heGltaXplIHRocm91Z2hwdXQuIExldCdzIHN0YXJ0IHdpdGggYSBjbG9zZSBsb29rIGF0IGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gSSBuZWVkIHRvIGFzc2VzcyBob3cgZWZmaWNpZW50bHkgdGhleSBoYW5kbGUgbXVsdGlwbGUga2V5LXZhbHVlIHBhaXJzIHNpbXVsdGFuZW91c2x5LlxuXG5JJ20gdGhpbmtpbmc6XG4qICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgdXNlZD8gQXJlIHdlIHRhbGtpbmcgaGFzaCB0YWJsZXMsIGJhbGFuY2VkIHRyZWVzLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgZnVuZGFtZW50YWwgc3RydWN0dXJlIHdpbGwgZGljdGF0ZSB0aGUgdGhlb3JldGljYWwgYmVzdCBhbmQgd29yc3QtY2FzZSBwZXJmb3JtYW5jZSBib3VuZHMsIGFuZCBob3cgdGhhdCBpcyBhZmZlY3RlZCBieSB0aGUgc2l6ZSBvZiB0aGUgYmF0Y2hlcy5cbiogICAqKkNvbmN1cnJlbmN5OioqIElzIHRoZXJlIGFueSBpbnRlcm5hbCBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiBnb2luZyBvbiB3aXRoaW4gdGhlc2UgYmF0Y2ggZnVuY3Rpb25zPyBBcmUgdGhlIG9wZXJhdGlvbnMgdGhyZWFkLXNhZmU/IEhvdyBkb2VzIHRoZSBjb25jdXJyZW5jeSBtb2RlbCBhZmZlY3Qgc2NhbGFiaWxpdHksIGFuZCBpcyBpdCBhIGJvdHRsZW5lY2s/XG4qICAgKipNZW1vcnkgQWNjZXNzIFBhdHRlcm5zOioqIEhvdyBhcmUga2V5cyBhbmQgdmFsdWVzIGJlaW5nIGFjY2Vzc2VkIGluIG1lbW9yeT8gQXJlIHRoZSBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBjYWNoZSBsb2NhbGl0eT8gRG8gdGhleSBleGhpYml0IGdvb2Qgc3BhdGlhbCBhbmQgdGVtcG9yYWwgbG9jYWxpdHksIG9yIGFyZSB3ZSBleHBlcmllbmNpbmcgY2FjaGUgbWlzc2VzP1xuKiAgICoqSXRlcmF0b3IgVXNhZ2U6KiogQXJlIHRoZSBiYXRjaCBvcGVyYXRpb25zIHVzaW5nIGl0ZXJhdG9ycyBlZmZlY3RpdmVseT8gSG93IGFyZSB0aGUgaXRlcmF0b3JzIGJlaW5nIGhhbmRsZWQgaW4gdGhlc2Ugb3BlcmF0aW9ucywgYW5kIGhvdyBtaWdodCB0aGF0IGFmZmVjdCB0aGUgc3BlZWQgb2YgcHJvY2Vzc2luZz8gSXMgdGhlcmUgYW55IHJlZHVuZGFudCBpdGVyYXRvciBjcmVhdGlvbiBvciBpbnZhbGlkYXRpb24/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBIb3cgYXJlIGVycm9ycyBoYW5kbGVkIGluIGJhdGNoIG9wZXJhdGlvbnM/IERvIGluZGl2aWR1YWwgZmFpbHVyZXMgY2F1c2UgdGhlIGVudGlyZSBiYXRjaCB0byBmYWlsLCBvciBhcmUgdGhlcmUgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgaW5kaXZpZHVhbCBlcnJvcnMgYW5kIHJlcG9ydGluZyB0aGVtIGVmZmVjdGl2ZWx5P1xuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZDpcbiogICBXaGF0IGlzIHRoZSBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgb2YgdGhlc2UgYmF0Y2ggb3BlcmF0aW9ucyAoYm90aCB0aW1lIGFuZCBzcGFjZSk/XG4qICAgV2hhdCBhcmUgdGhlIHByYWN0aWNhbCBwZXJmb3JtYW5jZSBsaW1pdHM/XG4qICAgQXJlIHRoZXJlIGFueSBvYnZpb3VzIG9wdGltaXphdGlvbnMsIHN1Y2ggYXMgYmV0dGVyIHVzZSBvZiB2ZWN0b3JpemF0aW9uLCBwcmVmZXRjaGluZywgb3IgYmF0Y2hpbmcgc3RyYXRlZ2llcz9cblxuSSdtIHN0YXJ0aW5nIGhlcmUgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHRoZW4gSSB3aWxsIG1vdmUgb24gdG8gbG9va2luZyBhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU3OjU1LjQxMjQwMTg5OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczODgyNTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9Mjc2Nz1pbnQgIGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzY5LVxcdFxcdFxcdCAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjc3MDppbnQgIGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxuaW5jbHVkZS9saW51eC9icGYuaC0yNzcxLVxcdFxcdFxcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTgwMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04MTctXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjgxODpcXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODE5LVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9ODI3PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBwZXJjcHVfYXJyYXlfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NDAtXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg0MTpcXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtODQyLVxcdC5tYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MgPSBtYXBfc2V0X2Zvcl9lYWNoX2NhbGxiYWNrX2FyZ3MsXFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTQ0ND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfb2ZfbWFwc19tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NTUtXFx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE0NTY6XFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTE0NTctXFx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEtXFx0Lm1hcF91cGRhdGVfYmF0Y2ggPVxcdFxcdFxcdFxcXFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjpcXHRnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFx0XFx0XFxcXFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzLVxcdC5tYXBfZGVsZXRlX2JhdGNoID1cXHRcXHRcXHRcXFxcXFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmM9Nzc1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyB0cmllX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2xwbV90cmllLmMtNzgzLVxcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODQ6XFx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4NS1cXHQubWFwX2RlbGV0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIwMDY9aW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA2MS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMDYyOmludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjMtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTc6NTcuMTUxMjMyOTA3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDc2MTM1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQlBGIE1hcCBPcGVyYXRpb25zKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gaG93IHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9ucyBhcmUgc3RydWN0dXJlZC4gRnJvbSBteSB1bmRlcnN0YW5kaW5nLCB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYXJlIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgd2UgdXNlIGZvciBtYXAgdXBkYXRlcyBhbmQgbG9va3Vwcy4gRXNzZW50aWFsbHksIHRoZXkgYXJlIHRoZSBiYXRjaCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4gTm93LCBsb29raW5nIGEgbGl0dGxlIGRlZXBlciwgSSBzZWUgdGhhdCB3aXRoaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIGFyZSB0aGUgcHJpbWFyeSBzeXNjYWxsIGhhbmRsZXJzLiBUaGVzZSBhcmUgd2hhdCB3ZSB1bHRpbWF0ZWx5IGNhbGwgZm9yIHRoZSBgQlBGX01BUF9MT09LVVBfRUxFTWAgYW5kIGBCUEZfTUFQX1VQREFURV9FTEVNYCBvcGVyYXRpb25zLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBob2xkIG9uLi4uIEknbSBub3RpY2luZyB0aGF0IGBtYXBfbG9va3VwX2VsZW1gIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcsIHNvIGl0IGlzIGRlY2xhcmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQncyAqc3RpbGwqIGJlaW5nIGNhbGxlZCBmcm9tIGBfX3N5c19icGZgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoYXQgd29ya3M7IHRoZSB2aXNpYmlsaXR5IHJ1bGVzIGFyZSBwbGF5aW5nIHRyaWNrcyBvbiBtZSFcblxuXG4iLCJJbnB1dFRva2VucyI6ODc3NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODowMC43NTg4NDg3MjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTYyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcF9sb29rdXBfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz0zMDk9c3RhdGljIGludCBicGZfbWFwX2NvcHlfdmFsdWUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMyOC1cXHR9IGVsc2UgaWYgKElTX0ZEX0FSUkFZKG1hcCkgfHwgSVNfRkRfUFJPR19BUlJBWShtYXApKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzI5OlxcdFxcdGVyciA9IGJwZl9mZF9hcnJheV9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXksIHZhbHVlKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMzAtXFx0fSBlbHNlIGlmIChJU19GRF9IQVNIKG1hcCkpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMzE6XFx0XFx0ZXJyID0gYnBmX2ZkX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5LCB2YWx1ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzMyLVxcdH0gZWxzZSBpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkVVU0VQT1JUX1NPQ0tBUlJBWSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQyLVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDM6XFx0XFx0aWYgKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbG9va3VwX2VsZW1fc3lzX29ubHkpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ0OlxcdFxcdFxcdHB0ciA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbG9va3VwX2VsZW1fc3lzX29ubHkobWFwLCBrZXkpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NS1cXHRcXHRlbHNlXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ2OlxcdFxcdFxcdHB0ciA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0Ny1cXHRcXHRpZiAoSVNfRVJSKHB0cikpIHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTE3Njg9c3RhdGljIHZvaWQgKl9fX2JwZl9jb3B5X2tleShicGZwdHJfdCB1a2V5LCB1NjQga2V5X3NpemUpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNzgxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE3ODI6c3RhdGljIGludCBtYXBfbG9va3VwX2VsZW0odW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTc4My17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzU0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzOTctXFx0Y2FzZSBCUEZfTUFQX0xPT0tVUF9FTEVNOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzOTg6XFx0XFx0ZXJyID0gbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZhdHRyKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02Mzk5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODowMC44MDgwMTgxMzZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MDc4NDk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHRoZSBzdGF0aWMgbmF0dXJlIG9mIGBtYXBfbG9va3VwX2VsZW1gIGFuZCBgbWFwX3VwZGF0ZV9lbGVtYCBwb3BzIG91dC4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0LiBUaGVuIEkgc2VlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUgY2FsbCBncmFwaDogYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFuZCwgb2YgY291cnNlLCB0aGUgYmlnIG9uZSwgYF9fc3lzX2JwZmAsIHdoaWNoIGlzIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50IGFuZCBhY3R1YWxseSAqY2FsbHMqIHRob3NlIHN0YXRpYyBmdW5jdGlvbnMuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8sIGNhbiBJIGxldmVyYWdlIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCBpbiBhbnkgd2F5PyBUaGV5IHNlZW0gbGlrZSB0aGV5IGNvdWxkIGJlIHVzZWZ1bC4gQW5kIHRoZW4sIHdhaXQsIHRoZXJlJ3MgYSB3aG9sZSBmYW1pbHkgb2YgYmF0Y2ggbG9va3VwIGZ1bmN0aW9ucyBmb3IgaGFzaCB0YWJsZXM6IGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGFuZCB0aGUgcmVndWxhciBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgcGx1cyB0aGUgTFJVIHZhcmlhdGlvbnMuIFBsZW50eSBvZiBvcHRpb25zLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgZ290dGEgY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQ7IGl04oCZcyBlc3NlbnRpYWwgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcncyBldmVuIGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODowNi40ODg4MDczMzNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDMzNDA2MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjA4LjI5MjE1NDIwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDUzOTM3NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEJQRiBTeXNjYWxsKipcblxuT2theSwgc28gdGhlIHBsYW4gaXMgZGVmaW5pdGVseSB0byBlbmFibGUgYEJQRl9TWVNDQUxMYC4gSSd2ZSByZS1yZXZpZXdlZCB0aGF0IHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBhIHNvbGlkIGZpeCBmb3IgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdmFsaWRhdGlvbi4gVGhhdCBjaGFuZ2UgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcgYXJlIGdvaW5nIHRvIGJlIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gVGhlc2UgbG9vayBsaWtlIHByaW1lIGxvY2F0aW9ucyBmb3IgY2F0Y2hpbmcgaXNzdWVzLiBXaGlsZSBJJ20gdGhpbmtpbmcgYWJvdXQgaXQgSSdtIGFsc28gZ29pbmcgdG8gY29uc2lkZXIgYGh0YWJfbWFwX2xvb2t1cF9iYXRjaGAgYXMgYSBmdXp6aW5nIHRhcmdldC5cblxuSSdtIHBhdXNpbmcgdG8gY29uc2lkZXIgYF9fc3lzX2JwZmAgZm9yIGEgbW9tZW50LiBJdCdzIGEgaHVnZWx5IGltcG9ydGFudCBzeXNjYWxsLCBhbmQgYSBuYXR1cmFsIHRhcmdldCwgYnV0IGl0cyBoaWdoIHRyYWZmaWMgbWVhbnMgaGVhdnkgZnV6emluZyBvZiBpdCBtaWdodCBza2V3IHRoZSByZXN1bHRzLiBJIHRoaW5rIEknbGwgZm9jdXMgb24gdGhlIGJhdGNoIG9wZXJhdGlvbnMgZmlyc3QsIHRoZW4gbG9vcCBiYWNrIHRvIGZ1enogYF9fc3lzX2JwZmAgYXQgYSByZWR1Y2VkIHJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjE3Ljc0NjA5NDE4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MDgxOTA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzA9c3RhdGljIGludFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzE6aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzItXFx0XFx0ICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyNDU9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM4MC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzgxOnN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgyLVxcdFxcdFxcdFxcdCAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTg6MTkuNTE2OTE5NzEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTU3NjY3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBIYXNoaW5nIEZ1bmN0aW9ucyBhbmQgRGF0YSBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhhc2ggdGFibGUgbG9va3Vwcy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYGh0YWJfbWFwX2xvb2t1cF9iYXRjaGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1lYW5zIGl0J3Mgc2NvcGVkIHRvIHRoaXMgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0uIFNpbmNlIGl0J3MgcHJvYmFibHkgbm90IGEgZ2xvYmFsIGVudHJ5IHBvaW50LCBJIHNob3VsZCBsb29rIGF0IHdoYXQgdXNlcyBpdC4gR2l2ZW4gdGhlIG5hbWVzLCBpdCdzIHZlcnkgbGlrZWx5IGEgaGVscGVyIHJvdXRpbmUsIG9yIHBvc3NpYmx5IGFuIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIGxhcmdlciBsb29rdXAgZnVuY3Rpb24gZmFtaWx5LiBMZXQncyBzZWUuLi4gc2luY2UgSSBhbSBsb29raW5nIGF0IGxvb2t1cCByb3V0aW5lcywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoYCBhbmQgc2VlIGlmIHRoZXkgaGF2ZSBhbnkgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoaXMgY29udGV4dCB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSByZWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjIyLjg3MjY4OTc2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzA4OTQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2JhdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDEzPXN0YXRpYyBpbnRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDE0Omh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNS1cXHRcXHRcXHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjI0LjYyNTc4NTA0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzQ4MjAwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRlYnVnZ2luZyBTdGF0aWMgRGF0YSBTdHJ1Y3R1cmVzKipcblxuRGFtbiBpdCwgSSB3YXMgdG9vIHF1aWNrIG9uIHRoZSBkcmF3IHdpdGggdGhhdCBsYXN0IGdyZXAgcmVzdWx0LiBFdmVyeXRoaW5nJ3MgbG9va2luZyBzdXNwaWNpb3VzbHkgc3RhdGljOyBJIGp1bXBlZCB0aGUgZ3VuLiBUaW1lIHRvIHJldmlzaXQgdGhvc2UgYmF0Y2ggb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucyBpbiBkZXRhaWwuIEl04oCZcyBsaWtlbHkgdGhlIGlzc3VlIGlzbuKAmXQgd2hlcmUgSSBpbml0aWFsbHkgdGhvdWdodC4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwgaGVyZSwgdHJhY2luZyB0aHJvdWdoIHRoZWlyIGJlaGF2aW9yIGluIHRoaXMgbmV3IGxpZ2h0LiBUaGVyZSdzIGEgZnVuZGFtZW50YWwgbWlzdW5kZXJzdGFuZGluZyBzb21ld2hlcmUsIGFuZCBpdCdzIGJ1cmllZCBpbiB0aGUgaW50ZXJhY3Rpb24gb2YgdGhvc2UgdHdvIGJhdGNoIG9wZXJhdGlvbnMuIE5lZWQgdG8gZ28gYmFjayB0byB0aGUgY29kZSBhbmQgYXBwcm9hY2ggdGhpcyB3aXRoIGZyZXNoIGV5ZXMsIGNhcmVmdWxseSBhbmFseXppbmcgdGhlIHN0YXRlIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODoyOS4xMDA2MDgwNjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mjc2NDA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9MjAwNj1pbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDYxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwNjI6aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjA2My1cXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODozMC45MjgyNTkxODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMTc5MTIzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRm9jdXMgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbiBmb3IgQlBGIE1hcCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgaGVyZSdzIG15IGN1cnJlbnQgdGhpbmtpbmcuIEkndmUgY29uZmlybWVkIHRoYXQgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSBpbmRlZWQgdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsaW5nIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCwgYmVzaWRlcyB0aGUgXCJob3QgcGF0aFwiIG9uZXMgbGlrZSBgX19zeXNfYnBmYC4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGJlY2F1c2UgYG1hcF9sb29rdXBfZWxlbWAgYW5kIGBtYXBfdXBkYXRlX2VsZW1gIGFyZSBjYWxsZWQgZnJvbSBgX19zeXNfYnBmYCwgYnV0IHRoYXQncyBleHBlY3RlZC4gTm8gb3RoZXIgZW50cnkgcG9pbnRzIHNlZW0gcmVsZXZhbnQuIEkgbG9va2VkIGludG8gYGJwZl9tYXBfdXBkYXRlX3ZhbHVlYCBhbmQgc3R1ZmYgbGlrZSBgYnBmX2ZkX2FycmF5X21hcF9sb29rdXBfZWxlbWAsIGJ1dCB0aG9zZSBkb24ndCBzZWVtIHRvIHRyaWdnZXIgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgLlxuXG5UaGVyZWZvcmUsIEknbSBwcmV0dHkgY29uZmlkZW50IHRoYXQgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGFyZSB0aGUgc3Ryb25nZXN0IGNhbmRpZGF0ZXMgZm9yIG15IFwiRm9jdXNTeW1ib2xzXCIg4oCTIHRoZXkncmUgdGhlIG1vc3QgZGlyZWN0LCBub24tc3RhdGljIGVudHJ5IHBvaW50cyBJIGNhbiB0YXJnZXQuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uLCBJJ20gdGhpbmtpbmcgYWJvdXQgYEJQRl9TWVNDQUxMYC4gSSBoYWQgdG8gY2hlY2ssIGJ1dCB0aGlzIGFsbCBmYWxscyB1bmRlciB0aGUgY29yZSBCUEYgc3lzY2FsbCBmdW5jdGlvbmFsaXR5LCBlc3BlY2lhbGx5IHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYgbWFwcy4gWWVzLCBJJ20gY29uZmlkZW50IHRoYXQgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCBpcyB0aGUgKm9ubHkqIG5lY2Vzc2FyeSBjb25maWcgZm9yIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBib2lscyBkb3duIHRvIHRoaXM6IFRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIHRvIHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIG1vcmUgcm9idXN0bHkgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgbWFwIG9wZXJhdGlvbnMgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgdGhyb3VnaCB0aGUgYmF0Y2ggb3BlcmF0aW9ucyBJJ3ZlIGlkZW50aWZpZWQsIGFuZCBmcm9tIHRoZSBtb3JlIGJhc2ljIGxvb2t1cHMuIFNvLCBmdXp6aW5nIGlzIGNyaXRpY2FsIGhlcmUgdG8gZW5zdXJlIHRoaXMgbmV3IENQVSB2YWxpZGF0aW9uIHdvcmtzIGNvcnJlY3RseSBhbmQgdGhhdCBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cblNvLCBpbiBzdW1tYXJ5OlxuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYFxuKiAgICoqRW5hYmxlIENvbmZpZ3M6KiogYEJQRl9TWVNDQUxMYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1MSwiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTg6NDEuMTQ2MTc0MDM2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2MDM4NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AgdG8gY29ycmVjdGx5IHZhbGlkYXRlIHRoZSBgQlBGX0ZfQ1BVYCBmbGFnIHVzaW5nIGBucl9jcHVfaWRzYCBhbmQgYGNwdV9wb3NzaWJsZSgpYCBpbnN0ZWFkIG9mIGBudW1fcG9zc2libGVfY3B1cygpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBtYXAgb3BlcmF0aW9ucyBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIChlLmcuLCBgQlBGX01BUF9MT09LVVBfRUxFTWAsIGBCUEZfTUFQX1VQREFURV9FTEVNYCwgYW5kIGJhdGNoIG9wZXJhdGlvbnMpLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IENQVSB2YWxpZGF0aW9uIGxvZ2ljIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYCB0byBjb3JyZWN0bHkgdmFsaWRhdGUgdGhlIGBCUEZfRl9DUFVgIGZsYWcgdXNpbmcgYG5yX2NwdV9pZHNgIGFuZCBgY3B1X3Bvc3NpYmxlKClgIGluc3RlYWQgb2YgYG51bV9wb3NzaWJsZV9jcHVzKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIG1hcCBvcGVyYXRpb25zIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgKGUuZy4sIGBCUEZfTUFQX0xPT0tVUF9FTEVNYCwgYEJQRl9NQVBfVVBEQVRFX0VMRU1gLCBhbmQgYmF0Y2ggb3BlcmF0aW9ucykuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgQ1BVIHZhbGlkYXRpb24gbG9naWMgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTg6NDEuMjI0NzgzNDA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAzMDIzMzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTc6NTg6NDEuMjI1MjY0OTU4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc2MDI1Mzc4NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYGNwdWAgdmFsdWUgZXh0cmFjdGVkIGZyb20gYGZsYWdzYCBpbiBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AuIEl0IGNoYW5nZXMgdGhlIGNoZWNrIGZyb20gYGNwdSBcXHUwMDNlPSBudW1fcG9zc2libGVfY3B1cygpYCB0byBgY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpYC4gVGhpcyBpcyBhIGJvdW5kcy92YWxpZGl0eSBjaGVjayB0aGF0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNhZ2Ugb2YgaW52YWxpZCBDUFUgSURzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiAob3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjU4MDdkYjBhOTM3NzkxM2UwOWQyMjFmZTE2MjRmOWU1MDI5Yjk3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTc6NTc6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzcxOWY2NTI4NDQ1Ni4uMzUzZjEzYmIwNjZkMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC00MjAyLDcgKzQyMDIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfbWFwX2NoZWNrX29wX2ZsYWdzKHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCBmbGFncywgdTY0IGFsbFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0XHRjcHUgPSBmbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4tXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IGNwdSBcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKCkpXG4rXHRcdGlmICgoZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkgXHUwMDI2XHUwMDI2IChjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSkpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxNzo1ODo0MS4yMjUyNjU3NThaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYwMjUxODIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgTWFwIENQVSBWYWxpZGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGUgYGJwZl9tYXBfY2hlY2tfb3BfZmxhZ3NgIGZ1bmN0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuIFNwZWNpZmljYWxseSwgaXQncyB0aWdodGVuaW5nIHRoZSBib3VuZHMgY2hlY2sgb24gdGhlIGBjcHVgIHZhbHVlIGV4dHJhY3RlZCBmcm9tIHRoZSBgZmxhZ3NgIGFyZ3VtZW50LiAgUHJldmlvdXNseSwgaXQganVzdCBjaGVja2VkIGlmIHRoZSBDUFUgSUQgd2FzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIENQVXMgKGBudW1fcG9zc2libGVfY3B1cygpYCkuIE5vdywgaXQgaW5jbHVkZXMgYW4gYWRkaXRpb25hbCBjaGVjazogIGBjcHUgXHUwMDNlPSBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KWAuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gc3RlcC4gSXQncyBkZXNpZ25lZCB0byBlbnN1cmUgdGhhdCB0aGUgcHJvdmlkZWQgYGNwdWAgdmFsdWUgaXMgKmJvdGgqIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2UgKGxlc3MgdGhhbiBgbnJfY3B1X2lkc2ApIGFuZCBhY3R1YWxseSByZXByZXNlbnRzIGEgcG9zc2libGUgQ1BVIG9uIHRoZSBzeXN0ZW0gKHVzaW5nIGBjcHVfcG9zc2libGUoKWApLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYW4gb3V0LW9mLWJvdW5kcyBvciBub24tZXhpc3RlbnQgQ1BVIElEIGNvdWxkIGJlIHVzZWQsIHdoaWNoLCBhcyB0aGV5IG1lbnRpb24sIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgYW5kIG90aGVyIHByb2JsZW1zLCB0aG91Z2ggdGhlc2UgYWNjZXNzZXMgYXJlIGNhdWdodCBieSBLQVNBTi5cblxuSSdtIGNvbmZpZGVudCB0aGlzIGlzbid0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0J3Mgc3RyaWN0bHkgYSB2YWxpZGF0aW9uIGxvZ2ljIGNoYW5nZSwgcmVmaW5pbmcgdGhlIGV4aXN0aW5nIGJvdW5kcyBjaGVjay4gV2UncmUgKnByZXZlbnRpbmcqIHBvdGVudGlhbCBpc3N1ZXMsIG5vdCBjcmVhdGluZyBuZXcgb25lcy4gVGhlIGxvZ2ljIGlzOiBnZXQgdGhlIENQVSBpZCwgYW5kIGNoZWNrIGlmIGl0IGlzIGVpdGhlciBvdXQgb2YgdGhlIHRvdGFsIENQVSBJRCBudW1iZXJzLCAqb3IqIGlmIHRoZSBJRCBpcyBub3QgcG9zc2libGUuIElmIGVpdGhlciBpcyB0cnVlLCB0aGVuIHJldHVybiBhbiBlcnJvci5cblxuVGhlIGNvZGUgaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYGNwdSA9IGZsYWdzIFx1MDAzZVx1MDAzZSAzMjtgIHRoZW4gdGhlIGNoZWNrIGBpZiAoKGZsYWdzIFx1MDAyNiBCUEZfRl9DUFUpIFx1MDAyNlx1MDAyNiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSkpKSB7IHJldHVybiAtRVJBTkdFOyB9YC4gQ2xlYW4gYW5kIGNvbmNpc2UsIGZvY3VzaW5nIGV4Y2x1c2l2ZWx5IG9uIGlucHV0IHZhbGlkYXRpb24uXG5cbkdpdmVuIHRoYXQgdGhpcyBpcyBhICpwdXJlbHkqIHZhbGlkYXRpb24gY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCBpbXByb3Zpbmcgcm9idXN0bmVzcywgYW5kICpub3QqIGludHJvZHVjaW5nIGFueSBtZW1vcnkgaGF6YXJkcywgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGhlcmUuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgcHJvdGVjdGluZyBhZ2FpbnN0IGEgcmFuZ2Ugb2YgaW5jb3JyZWN0IHZhbHVlcyB0aGF0IHdvdWxkIGNhdXNlIGFuIGVycm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAxLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE3OjU4OjQ4LjgyNzc4NzEyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIHRoZSBgY3B1YCB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBgZmxhZ3NgIGluIGBicGZfbWFwX2NoZWNrX29wX2ZsYWdzYC4gSXQgY2hhbmdlcyB0aGUgY2hlY2sgZnJvbSBgY3B1IFxcdTAwM2U9IG51bV9wb3NzaWJsZV9jcHVzKClgIHRvIGBjcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X3Bvc3NpYmxlKGNwdSlgLiBUaGlzIGlzIGEgYm91bmRzL3ZhbGlkaXR5IGNoZWNrIHRoYXQgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2FnZSBvZiBpbnZhbGlkIENQVSBJRHMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIChvdXQtb2YtYm91bmRzKSBvciBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciB0aGUgYGNwdWAgdmFsdWUgZXh0cmFjdGVkIGZyb20gYGZsYWdzYCBpbiBgYnBmX21hcF9jaGVja19vcF9mbGFnc2AuIEl0IGNoYW5nZXMgdGhlIGNoZWNrIGZyb20gYGNwdSBcXHUwMDNlPSBudW1fcG9zc2libGVfY3B1cygpYCB0byBgY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpYC4gVGhpcyBpcyBhIGJvdW5kcy92YWxpZGl0eSBjaGVjayB0aGF0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNhZ2Ugb2YgaW52YWxpZCBDUFUgSURzLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQVNBTiAob3V0LW9mLWJvdW5kcykgb3Igc3RhbmRhcmQga2VybmVsIGNoZWNrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[1] Phase: Succeeded StartedAt: 2026-08-13 17:59:00 +0000 UTC FinishedAt: 2026-08-13 17:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 17:59:00 +0000 UTC FinishedAt: 2026-08-13 17:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2] Phase: Succeeded StartedAt: 2026-08-13 17:59:00 +0000 UTC FinishedAt: 2026-08-13 21:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 17:59:00 +0000 UTC FinishedAt: 2026-08-13 21:45:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 17:59:00 +0000 UTC FinishedAt: 2026-08-13 17:59:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 17:59:00 +0000 UTC FinishedAt: 2026-08-13 17:59:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowm6sfq/series-workflowm6sfq-convert-artifact-164600247/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 17:59:11 +0000 UTC FinishedAt: 2026-08-13 18:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 17:59:11 +0000 UTC FinishedAt: 2026-08-13 18:15:43 +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:*fb2730d3-2a92-4505-907e-b1c215b378b2,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-workflowm6sfq/series-workflowm6sfq-convert-artifact-164600247/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": "ca9fa8cb-dfe2-4267-8bde-2ddd3d4aa6d1", "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-workflowm6sfq/series-workflowm6sfq-build-action-854915341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 17:59:11 +0000 UTC FinishedAt: 2026-08-13 18:15:31 +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:*fb2730d3-2a92-4505-907e-b1c215b378b2,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-workflowm6sfq/series-workflowm6sfq-convert-artifact-164600247/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": "ca9fa8cb-dfe2-4267-8bde-2ddd3d4aa6d1", "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-workflowm6sfq/series-workflowm6sfq-build-action-854915341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 18:15:43 +0000 UTC FinishedAt: 2026-08-13 18:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 18:15:43 +0000 UTC FinishedAt: 2026-08-13 18:15:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 18:15:43 +0000 UTC FinishedAt: 2026-08-13 18:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 18:15:43 +0000 UTC FinishedAt: 2026-08-13 18:15:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowm6sfq/series-workflowm6sfq-convert-artifact-979128038/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 18:15:53 +0000 UTC FinishedAt: 2026-08-13 18:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 18:15:53 +0000 UTC FinishedAt: 2026-08-13 18:18:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca9fa8cb-dfe2-4267-8bde-2ddd3d4aa6d1,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-workflowm6sfq/series-workflowm6sfq-build-action-854915341/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-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 18:18:21 +0000 UTC FinishedAt: 2026-08-13 18:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 18:18:21 +0000 UTC FinishedAt: 2026-08-13 18:18:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 18:18:21 +0000 UTC FinishedAt: 2026-08-13 18:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 18:18:21 +0000 UTC FinishedAt: 2026-08-13 18:39:10 +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:*fb2730d3-2a92-4505-907e-b1c215b378b2,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-workflowm6sfq/series-workflowm6sfq-convert-artifact-979128038/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": "c5715b0c-0ec6-41d2-b4ae-5beaddc50ee1", "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-workflowm6sfq/series-workflowm6sfq-build-action-724894890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 18:18:21 +0000 UTC FinishedAt: 2026-08-13 18:39:00 +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:*fb2730d3-2a92-4505-907e-b1c215b378b2,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-workflowm6sfq/series-workflowm6sfq-convert-artifact-979128038/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": "c5715b0c-0ec6-41d2-b4ae-5beaddc50ee1", "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-workflowm6sfq/series-workflowm6sfq-build-action-724894890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 18:39:10 +0000 UTC FinishedAt: 2026-08-13 18:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 18:39:10 +0000 UTC FinishedAt: 2026-08-13 18:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 18:39:10 +0000 UTC FinishedAt: 2026-08-13 18:41:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 18:39:10 +0000 UTC FinishedAt: 2026-08-13 18:41:16 +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:*c5715b0c-0ec6-41d2-b4ae-5beaddc50ee1,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-workflowm6sfq/series-workflowm6sfq-build-action-724894890/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-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 18:41:26 +0000 UTC FinishedAt: 2026-08-13 21:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 18:41:26 +0000 UTC FinishedAt: 2026-08-13 21:45:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"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:*ca9fa8cb-dfe2-4267-8bde-2ddd3d4aa6d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5715b0c-0ec6-41d2-b4ae-5beaddc50ee1,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-workflowm6sfq/series-workflowm6sfq-build-action-854915341/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-workflowm6sfq/series-workflowm6sfq-build-action-724894890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 18:41:26 +0000 UTC FinishedAt: 2026-08-13 18:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 18:41:26 +0000 UTC FinishedAt: 2026-08-13 18:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"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-workflowm6sfq/series-workflowm6sfq-convert-artifact-1738265131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 18:41:26 +0000 UTC FinishedAt: 2026-08-13 18:41:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 18:41:26 +0000 UTC FinishedAt: 2026-08-13 18:41:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 18:41:26 +0000 UTC FinishedAt: 2026-08-13 18:41:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 18:41:36 +0000 UTC FinishedAt: 2026-08-13 21:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm6sfq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_update_batch","generic_map_lookup_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13307e97d5c54b65720bb71fa379960ded1e51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"272022b2-9bf2-4579-94d9-31c17c964860","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 18:41:36 +0000 UTC FinishedAt: 2026-08-13 21:45:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca9fa8cb-dfe2-4267-8bde-2ddd3d4aa6d1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c5715b0c-0ec6-41d2-b4ae-5beaddc50ee1,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-workflowm6sfq/series-workflowm6sfq-build-action-854915341/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-workflowm6sfq/series-workflowm6sfq-build-action-724894890/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-workflowm6sfq/series-workflowm6sfq-convert-artifact-1738265131/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,}