Name: series-workflowztqnb Phase: Succeeded StartedAt: 2026-09-09 06:06:48 +0000 UTC FinishedAt: 2026-09-09 10:20:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[0] Phase: Succeeded StartedAt: 2026-09-09 06:06:48 +0000 UTC FinishedAt: 2026-09-09 06:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 06:06:48 +0000 UTC FinishedAt: 2026-09-09 06:40:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_ALGO", "XFRM_USER", "CRYPTO_ARIA", "CRYPTO_CBC", "CRYPTO_CTR", "INET_ESP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_ALGO", "XFRM_USER", "CRYPTO_ARIA", "CRYPTO_CBC", "CRYPTO_CTR", "INET_ESP" ], "series_id": "a49722ce-3cc2-4498-a52c-99353afc7a6a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_ealg_get_byname", "xfrm_find_algo", "xfrm_probe_algs", "attach_crypt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9BTEdPJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtDUllQVE9fQVJJQSYjMzQ7LAogICAgJiMzNDtDUllQVE9fQ0JDJiMzNDssCiAgICAmIzM0O0NSWVBUT19DVFImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2VhbGdfZ2V0X2J5bmFtZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2ZpbmRfYWxnbyYjMzQ7LAogICAgJiMzNDt4ZnJtX3Byb2JlX2FsZ3MmIzM0OywKICAgICYjMzQ7YXR0YWNoX2NyeXB0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWVyZWx5IHJlZ2lzdGVycyB0d28gZXhpc3RpbmcgY2lwaGVyIHN1aXRlcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcbi0gVGhlIGFkZGVkIGVudHJpZXMgYXJlIHN0YXRpYyBgc3RydWN0IHhmcm1fYWxnb19kZXNjYCBkZWZpbml0aW9ucyBpbiBgLmRhdGFgIC8gYC5yb2RhdGFgIHdoZXJlIHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuXG4tIE5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24sIHN0YWNrIHZhcmlhYmxlIGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc3VyZSwgb3IgbmV0bGluayAvIGBjb3B5X3RvX3VzZXJgIGRhdGEgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxuLSBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBBUklBIGNpcGhlciBhbGdvcml0aG1zIChcJiMzNDtjYmMoYXJpYSlcJiMzNDsgYW5kIFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OykgdG8gdGhlIFhGUk0gZW5jcnlwdGlvbiBhbGdvcml0aG0gcmVnaXN0cnkgKGVhbGdfbGlzdCkuIFRoaXMgZW5hYmxlcyB1c2VyLXNwYWNlIHZpYSBYRlJNIE5ldGxpbmsgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBJUHNlYyBTQXMgd2l0aCBBUklBIGVuY3J5cHRpb24sIGV4ZXJjaXNpbmcgdGhlIGNyeXB0byBzdWJzeXN0ZW0gYW5kIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYTUzZDZlY2RlMjU4Y2FjMDA0NGI1ZTlmMGU5MjZkYzAzMzU5MmU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNjozODo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jXG5pbmRleCA3MDQzNDQ5NWYyM2Y1Li4xNmM3MGRjMWE0MjY4IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fYWxnby5jXG5AQCAtNTEyLDYgJiM0Mzs1MTIsMzQgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBlYWxnX2xpc3RbXSA9IHtcbiBcdFx0LnNhZGJfYWxnX21heGJpdHMgPSAyNTZcbiBcdH1cbiB9LFxuJiM0Mzt7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtjYmMoYXJpYSlcJiMzNDssXG4mIzQzO1x0LmNvbXBhdCA9IFwmIzM0O2FyaWFcJiMzNDssXG4mIzQzO1xuJiM0MztcdC51aW5mbyA9IHtcbiYjNDM7XHRcdC5lbmNyID0ge1xuJiM0MztcdFx0XHQuZ2VuaXYgPSBcJiMzNDtlY2hhaW5pdlwmIzM0OyxcbiYjNDM7XHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbiYjNDM7XHRcdFx0LmRlZmtleWJpdHMgPSAyNTYsXG4mIzQzO1x0XHR9XG4mIzQzO1x0fSxcbiYjNDM7XG4mIzQzO1x0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4mIzQzO30sXG4mIzQzO3tcbiYjNDM7XHQubmFtZSA9IFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OyxcbiYjNDM7XHQuY29tcGF0ID0gXCYjMzQ7YXJpYVwmIzM0OyxcbiYjNDM7XG4mIzQzO1x0LnVpbmZvID0ge1xuJiM0MztcdFx0LmVuY3IgPSB7XG4mIzQzO1x0XHRcdC5nZW5pdiA9IFwmIzM0O3NlcWl2XCYjMzQ7LFxuJiM0MztcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuJiM0MztcdFx0XHQuZGVma2V5Yml0cyA9IDE2MCxcbiYjNDM7XHRcdH1cbiYjNDM7XHR9LFxuJiM0MztcbiYjNDM7XHQucGZrZXlfc3VwcG9ydGVkID0gMCxcbiYjNDM7fSxcbiB7XG4gXHQubmFtZSA9IFwmIzM0O2NiYyh0d29maXNoKVwmIzM0OyxcbiBcdC5jb21wYXQgPSBcJiMzNDt0d29maXNoXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9BTEdPJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtDUllQVE9fQVJJQSYjMzQ7LAogICAgJiMzNDtDUllQVE9fQ0JDJiMzNDssCiAgICAmIzM0O0NSWVBUT19DVFImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2VhbGdfZ2V0X2J5bmFtZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2ZpbmRfYWxnbyYjMzQ7LAogICAgJiMzNDt4ZnJtX3Byb2JlX2FsZ3MmIzM0OywKICAgICYjMzQ7YXR0YWNoX2NyeXB0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIHRvIHRoZSBYRlJNIGVuY3J5cHRpb24gYWxnb3JpdGhtIHJlZ2lzdHJ5IChlYWxnX2xpc3QpLiBUaGlzIGVuYWJsZXMgdXNlci1zcGFjZSB2aWEgWEZSTSBOZXRsaW5rIGludGVyZmFjZSB0byBjb25maWd1cmUgSVBzZWMgU0FzIHdpdGggQVJJQSBlbmNyeXB0aW9uLCBleGVyY2lzaW5nIHRoZSBjcnlwdG8gc3Vic3lzdGVtIGFuZCBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2E1M2Q2ZWNkZTI1OGNhYzAwNDRiNWU5ZjBlOTI2ZGMwMzM1OTJlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDY6Mzg6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCmluZGV4IDcwNDM0NDk1ZjIzZjUuLjE2YzcwZGMxYTQyNjggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC01MTIsNiAmIzQzOzUxMiwzNCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGVhbGdfbGlzdFtdID0gewogCQkuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NgogCX0KIH0sCiYjNDM7ewomIzQzOwkubmFtZSA9ICYjMzQ7Y2JjKGFyaWEpJiMzNDssCiYjNDM7CS5jb21wYXQgPSAmIzM0O2FyaWEmIzM0OywKJiM0MzsKJiM0MzsJLnVpbmZvID0gewomIzQzOwkJLmVuY3IgPSB7CiYjNDM7CQkJLmdlbml2ID0gJiMzNDtlY2hhaW5pdiYjMzQ7LAomIzQzOwkJCS5ibG9ja2JpdHMgPSAxMjgsCiYjNDM7CQkJLmRlZmtleWJpdHMgPSAyNTYsCiYjNDM7CQl9CiYjNDM7CX0sCiYjNDM7CiYjNDM7CS5wZmtleV9zdXBwb3J0ZWQgPSAwLAomIzQzO30sCiYjNDM7ewomIzQzOwkubmFtZSA9ICYjMzQ7cmZjMzY4NihjdHIoYXJpYSkpJiMzNDssCiYjNDM7CS5jb21wYXQgPSAmIzM0O2FyaWEmIzM0OywKJiM0MzsKJiM0MzsJLnVpbmZvID0gewomIzQzOwkJLmVuY3IgPSB7CiYjNDM7CQkJLmdlbml2ID0gJiMzNDtzZXFpdiYjMzQ7LAomIzQzOwkJCS5ibG9ja2JpdHMgPSAxMjgsCiYjNDM7CQkJLmRlZmtleWJpdHMgPSAxNjAsCiYjNDM7CQl9CiYjNDM7CX0sCiYjNDM7CiYjNDM7CS5wZmtleV9zdXBwb3J0ZWQgPSAwLAomIzQzO30sCiB7CiAJLm5hbWUgPSAmIzM0O2NiYyh0d29maXNoKSYjMzQ7LAogCS5jb21wYXQgPSAmIzM0O3R3b2Zpc2gmIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWxnb3JpdGhtIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBiZWluZyBpbnRyb2R1Y2VkIHRvIHRoZSBjb2RlYmFzZS4gVGhlIHBhdGNoIGlzIGFkZGluZyAmIzM0O2NiYyhhcmlhKSYjMzQ7IGFuZCAmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKSYjMzQ7IHRvIHRoZSBgZWFsZ19saXN0YCBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgLiBSaWdodCBhd2F5LCBteSBicmFpbiBzdGFydHMgdG8gY2h1cm4sIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyBgZWFsZ19saXN0YCByZXNpZGUgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1dGlsaXplZCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBpdC4gU28sIEkmIzM5O20gdGhpbmtpbmcgYSBxdWljayBzZWFyY2ggZm9yIGBlYWxnX2xpc3RgIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgY29uZmxpY3RzLiBJJiMzOTtsbCBwcm9iYWJseSByZWFjaCBmb3IgYSBncmVwcGVyLCBvciBtYXliZSBhIHF1aWNrIGByZWFkLWZpbGVgIGluIHRoZSBrZXJuZWwgc291cmNlLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZlZWwgbGlrZSBhdCB0aGUgbW9tZW50LCB0byBnZXQgdGhhdCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VhbGdfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2FsZ28uYz0xNzU9c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBhYWxnX2xpc3RbXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy0zNDYtXG5uZXQveGZybS94ZnJtX2FsZ28uYzozNDc6c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBlYWxnX2xpc3RbXSA9IHtcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTM0OC17XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmM9NjQ1PXN0YXRpYyBpbmxpbmUgaW50IGVhbGdfZW50cmllcyh2b2lkKVxubmV0L3hmcm0veGZybV9hbGdvLmMtNjQ2LXtcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY0NzpcdHJldHVybiBBUlJBWV9TSVpFKGVhbGdfbGlzdCk7XG5uZXQveGZybS94ZnJtX2FsZ28uYy02NDgtfVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTY2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fYWFsZ19saXN0ID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3Mi1cbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY3MzpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fZWFsZ19saXN0ID0ge1xubmV0L3hmcm0veGZybV9hbGdvLmMtNjc0LVx0LmZpbmQgPSBjcnlwdG9faGFzX3NrY2lwaGVyLFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njc1Olx0LmFsZ3MgPSBlYWxnX2xpc3QsXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NzY6XHQuZW50cmllcyA9IEFSUkFZX1NJWkUoZWFsZ19saXN0KSxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3Ny19O1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTcyNj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI3LXtcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjcyODpcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXG5uZXQveGZybS94ZnJtX2FsZ28uYy03MjktXHRcdFx0ICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylhbGdfaWQsIDEpO1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTc1Nj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwcm9iZSlcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1Ny17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3NTg6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX25hbWVfbWF0Y2gsIG5hbWUsXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTktXHRcdFx0ICAgICAgcHJvYmUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTgwNj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZHgodW5zaWduZWQgaW50IGlkeClcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy04MTAtXG5uZXQveGZybS94ZnJtX2FsZ28uYzo4MTE6XHRyZXR1cm4gXHUwMDI2ZWFsZ19saXN0W2lkeF07XG5uZXQveGZybS94ZnJtX2FsZ28uYy04MTItfVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTgyMD12b2lkIHhmcm1fcHJvYmVfYWxncyh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jLTgzMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVhbGdfZW50cmllcygpOyBpJiM0MzsmIzQzOykge1xubmV0L3hmcm0veGZybV9hbGdvLmM6ODMzOlx0XHRzdGF0dXMgPSBjcnlwdG9faGFzX3NrY2lwaGVyKGVhbGdfbGlzdFtpXS5uYW1lLCAwLCAwKTtcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzNDpcdFx0aWYgKGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgIT0gc3RhdHVzKVxubmV0L3hmcm0veGZybV9hbGdvLmM6ODM1Olx0XHRcdGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgPSBzdGF0dXM7XG5uZXQveGZybS94ZnJtX2FsZ28uYy04MzYtXHR9XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmM9ODU3PWludCB4ZnJtX2NvdW50X3Bma2V5X2VuY19zdXBwb3J0ZWQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy04NjEtXHRmb3IgKGkgPSAwLCBuID0gMDsgaSBcdTAwM2MgZWFsZ19lbnRyaWVzKCk7IGkmIzQzOyYjNDM7KVxubmV0L3hmcm0veGZybV9hbGdvLmM6ODYyOlx0XHRpZiAoZWFsZ19saXN0W2ldLmF2YWlsYWJsZSBcdTAwMjZcdTAwMjYgZWFsZ19saXN0W2ldLnBma2V5X3N1cHBvcnRlZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTg2My1cdFx0XHRuJiM0MzsmIzQzOztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiB0aGlua2luZywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gQWxnb3JpdGhtIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBYRlJNIGFsZ29yaXRobXMgYXJlIGJlaW5nIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gYG5ldC94ZnJtL3hmcm1fYWxnby5jYCDigJMgdGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBjaXBoZXIgc3R1ZmYuIEkmIzM5O20gZm9jdXNpbmcgb24gbGluZXMgNTAwLTU1MDsgSSBoYXZlIGEgaHVuY2ggdGhhdCB3aXRoaW4gdGhhdCByYW5nZSBJJiMzOTtsbCBmaW5kIHNvbWUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb3IgaGFuZGxpbmcgbG9naWMgdGhhdCYjMzk7bGwgaWxsdW1pbmF0ZSBob3cgdGhlc2UgYWxnb3JpdGhtcyBhcmUgaW50ZWdyYXRlZC4gSXQmIzM5O3MgdGltZSB0byBwYXJzZSB0aGUgZGV0YWlscyBvZiB0aGUgY29kZSEKCkJleW9uZCB0aGUgY29kZSwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIGluZmx1ZW5jaW5nIHRoZSBhdmFpbGFiaWxpdHkgYW5kIGJlaGF2aW9yIG9mIFhGUk0gYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBBUklBIGNpcGhlci4gVGhhdCB3aWxsIGxpa2VseSBwb2ludCB0b3dhcmRzIGJ1aWxkLXRpbWUgZGVjaXNpb25zIHRoYXQgaW1wYWN0IHRoZSBmdW5jdGlvbmFsaXR5IG9yIGRlcGVuZGVuY2llcyBvZiBYRlJNLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9hbGdvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0XHRcdC5nZW5pdiA9IFwmIzM0O2VjaGFpbml2XCYjMzQ7LFxuIDUwMTpcdFx0XHRcdC5ibG9ja2JpdHMgPSAxMjgsXG4gNTAyOlx0XHRcdFx0LmRlZmtleWJpdHMgPSAxMjgsXG4gNTAzOlx0XHRcdH1cbiA1MDQ6XHRcdH0sXG4gNTA1Olx0XG4gNTA2Olx0XHQucGZrZXlfc3VwcG9ydGVkID0gMSxcbiA1MDc6XHRcbiA1MDg6XHRcdC5kZXNjID0ge1xuIDUwOTpcdFx0XHQuc2FkYl9hbGdfaWQgPSBTQURCX1hfRUFMR19DQU1FTExJQUNCQyxcbiA1MTA6XHRcdFx0LnNhZGJfYWxnX2l2bGVuID0gOCxcbiA1MTE6XHRcdFx0LnNhZGJfYWxnX21pbmJpdHMgPSAxMjgsXG4gNTEyOlx0XHRcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XG4gNTEzOlx0XHR9XG4gNTE0Olx0fSxcbiA1MTU6XHR7XG4gNTE2Olx0XHQubmFtZSA9IFwmIzM0O2NiYyhhcmlhKVwmIzM0OyxcbiA1MTc6XHRcdC5jb21wYXQgPSBcJiMzNDthcmlhXCYjMzQ7LFxuIDUxODpcdFxuIDUxOTpcdFx0LnVpbmZvID0ge1xuIDUyMDpcdFx0XHQuZW5jciA9IHtcbiA1MjE6XHRcdFx0XHQuZ2VuaXYgPSBcJiMzNDtlY2hhaW5pdlwmIzM0OyxcbiA1MjI6XHRcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuIDUyMzpcdFx0XHRcdC5kZWZrZXliaXRzID0gMjU2LFxuIDUyNDpcdFx0XHR9XG4gNTI1Olx0XHR9LFxuIDUyNjpcdFxuIDUyNzpcdFx0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4gNTI4Olx0fSxcbiA1Mjk6XHR7XG4gNTMwOlx0XHQubmFtZSA9IFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OyxcbiA1MzE6XHRcdC5jb21wYXQgPSBcJiMzNDthcmlhXCYjMzQ7LFxuIDUzMjpcdFxuIDUzMzpcdFx0LnVpbmZvID0ge1xuIDUzNDpcdFx0XHQuZW5jciA9IHtcbiA1MzU6XHRcdFx0XHQuZ2VuaXYgPSBcJiMzNDtzZXFpdlwmIzM0OyxcbiA1MzY6XHRcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuIDUzNzpcdFx0XHRcdC5kZWZrZXliaXRzID0gMTYwLFxuIDUzODpcdFx0XHR9XG4gNTM5Olx0XHR9LFxuIDU0MDpcdFxuIDU0MTpcdFx0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4gNTQyOlx0fSxcbiA1NDM6XHR7XG4gNTQ0Olx0XHQubmFtZSA9IFwmIzM0O2NiYyh0d29maXNoKVwmIzM0OyxcbiA1NDU6XHRcdC5jb21wYXQgPSBcJiMzNDt0d29maXNoXCYjMzQ7LFxuIDU0NjpcdFxuIDU0NzpcdFx0LnVpbmZvID0ge1xuIDU0ODpcdFx0XHQuZW5jciA9IHtcbiA1NDk6XHRcdFx0XHQuZ2VuaXYgPSBcJiMzNDtlY2hhaW5pdlwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgaW50bywgZnJvbSBhIGtlcm5lbC1sZXZlbCBYRlJNIGVuY3J5cHRpb24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIFhGUk0gRW5jcnlwdGlvbiBBbGdvcml0aG0gVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgeGZybV9lYWxnX2dldF9ieW5hbWVgIGZ1bmN0aW9uIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFhGUk0gKElQc2VjKSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxpZmVjeWNsZSBvZiBlbmNyeXB0aW9uIGFsZ29yaXRobXMuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQsIGFuZCB3aGF0IGlzIGl0cyByb2xlPyYjMzQ7IEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSBjb25uZWN0aW9ucywgYW5kIHRoZSBjYWxsIHNpdGVzLgoKVGhlIGNyaXRpY2FsIHRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIGhvdyB0aGVzZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgYXJlIGludGVncmF0ZWQsIGF0IGEgbG93IGxldmVsLiBJIHNlZSB0aGF0IFhGUk0gdXNlcyAqeGZybSBzdGF0ZXMqLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIHRoZW0gaW4gZGVwdGguIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBuZXRsaW5rIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgYFhGUk1fTVNHX05FV1NBYCwgYXMgdGhpcyBpcyBhIGtleSBhcmVhIGZvciBhZGRpbmcgYW5kIGNvbmZpZ3VyaW5nIHNlY3VyaXR5IGFzc29jaWF0aW9ucy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBsZWFkIGZvciB3aGVyZSBhbiBlbmNyeXB0aW9uIGFsZ29yaXRobSB3b3VsZCBiZSBzZWxlY3RlZC4gVGhlbiwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBzdGF0ZSBpcyBjb25zdHJ1Y3RlZC4gVGhlIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAgZnVuY3Rpb24gaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdCBoZXJlLiBGaW5hbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkgcHJvdG9jb2wuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG1zIHNlbGVjdGVkIGFyZSBzcGVjaWZpY2FsbHkgdXNlZCB3aXRoaW4gdGhlIEVTUCBpbXBsZW1lbnRhdGlvbiwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIGRhdGEgZ2V0cyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRlZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnJvbSBpbnN0YW50aWF0aW9uIHRvIHVzZSwgdG8gY29tcGxldGUgdGhlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2VhbGdfZ2V0X2J5bmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2tleS9hZl9rZXkuYz03NzY9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3Bma2V5X3hmcm1fc3RhdGUybXNnKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtODc2LVx0aWYgKHgtXHUwMDNlZWFsZykge1xubmV0L2tleS9hZl9rZXkuYzo4Nzc6XHRcdHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYSA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHgtXHUwMDNlZWFsZy1cdTAwM2VhbGdfbmFtZSwgMCk7XG5uZXQva2V5L2FmX2tleS5jLTg3OC1cdFx0c2EtXHUwMDNlc2FkYl9zYV9lbmNyeXB0ID0gKGEgXHUwMDI2XHUwMDI2IGEtXHUwMDNlcGZrZXlfc3VwcG9ydGVkKSA/XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmM9NzU0PUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fYWFsZ19nZXRfYnluYW1lKTtcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1NS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc1NjpzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwcm9iZSlcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1Ny17XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmMtNzYwLX1cbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc2MTpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2VhbGdfZ2V0X2J5bmFtZSk7XG5uZXQveGZybS94ZnJtX2FsZ28uYy03NjItXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NjI1PXN0YXRpYyBpbnQgYXR0YWNoX2NyeXB0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmxhdHRyICpydGEsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNjM1LVxubmV0L3hmcm0veGZybV91c2VyLmM6NjM2Olx0YWxnbyA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHVhbGctXHUwMDNlYWxnX25hbWUsIDEpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNjM3LVx0aWYgKCFhbGdvKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBcmlhIEVuY3J5cHRpb24gaW4gWEZSTSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgQXJpYSBlbmNyeXB0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gSSBzZWUgYGF0dGFjaF9jcnlwdGAgaW4gdGhhdCBmaWxlLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgeGZybV9lYWxnX2dldF9ieW5hbWVgLiBNeSBtZW50YWwgcm9hZG1hcCBub3cgaXMgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCB3aGVuIGEgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBpcyBjcmVhdGVkIHVzaW5nIGVpdGhlciBgY2JjKGFyaWEpYCBvciBgcmZjMzY4NihjdHIoYXJpYSkpYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBzZXRzIHRoaXMgdXAuIFNvLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBhdHRhY2hfY3J5cHRgIGJlaGF2ZXMgdW5kZXIgdGhvc2Ugc2NlbmFyaW9zLCBhbmQgdGhlbiBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRvIHNlZSB3aGF0IGhhcHBlbnMgaW4gcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgZXNwX2luaXRfc3RhdGVgLCBhbmQgYW55IG90aGVyIGNydWNpYWwgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBsaWZlY3ljbGUgb2YgYW4gQXJpYS1iYXNlZCBTQSB3aXRoaW4gWEZSTS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXR0YWNoX2NyeXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTU5Nz1zdGF0aWMgaW50IGF0dGFjaF9vbmVfYWxnbyhzdHJ1Y3QgeGZybV9hbGdvICoqYWxncHAsIHU4ICpwcm9wcyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MjQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MjU6c3RhdGljIGludCBhdHRhY2hfY3J5cHQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBubGF0dHIgKnJ0YSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYyNi1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9OTA3PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk0Ny1cdH1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjk0ODpcdGlmICgoZXJyID0gYXR0YWNoX2NyeXB0KHgsIGF0dHJzW1hGUk1BX0FMR19DUllQVF0sIGV4dGFjaykpKVxubmV0L3hmcm0veGZybV91c2VyLmMtOTQ5LVx0XHRnb3RvIGVycm9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBgeGZybV91c2VyLmNgIHRvIEFuYWx5emUgYGF0dGFjaF9jcnlwdGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGNyeXB0byBtb2R1bGVzIGFyZSBiZWluZyBhdHRhY2hlZCB3aXRoaW4gdGhlIFhGUk0gZnJhbWV3b3JrLCBhbmQgYGF0dGFjaF9jcnlwdGAgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBsaW5raW5nIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0gdG8gYSBzZWN1cml0eSBwb2xpY3kgb3IgYSB0cmFuc2Zvcm0uIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSBJJiMzOTttIHJpZ2h0LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIGNhc2UsIGJ1dCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdXNhZ2UgYW5kIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdXNlci1zcGFjZSBjb25maWd1cmF0aW9ucyB3aXRoIGtlcm5lbC1zcGFjZSB0cmFuc2Zvcm1hdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMDpcdFx0c3Ryc2NweShwLVx1MDAzZWFsZ19uYW1lLCBhbGdvLVx1MDAzZW5hbWUpO1xuIDYyMTpcdFx0KmFsZ3BwID0gcDtcbiA2MjI6XHRcdHJldHVybiAwO1xuIDYyMzpcdH1cbiA2MjQ6XHRcbiA2MjU6XHRzdGF0aWMgaW50IGF0dGFjaF9jcnlwdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5sYXR0ciAqcnRhLFxuIDYyNjpcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA2Mjc6XHR7XG4gNjI4Olx0XHRzdHJ1Y3QgeGZybV9hbGdvICpwLCAqdWFsZztcbiA2Mjk6XHRcdHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYWxnbztcbiA2MzA6XHRcbiA2MzE6XHRcdGlmICghcnRhKVxuIDYzMjpcdFx0XHRyZXR1cm4gMDtcbiA2MzM6XHRcbiA2MzQ6XHRcdHVhbGcgPSBubGFfZGF0YShydGEpO1xuIDYzNTpcdFxuIDYzNjpcdFx0YWxnbyA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHVhbGctXHUwMDNlYWxnX25hbWUsIDEpO1xuIDYzNzpcdFx0aWYgKCFhbGdvKSB7XG4gNjM4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7UmVxdWVzdGVkIENSWVBUIGFsZ29yaXRobSBub3QgZm91bmRcJiMzNDspO1xuIDYzOTpcdFx0XHRyZXR1cm4gLUVOT1NZUztcbiA2NDA6XHRcdH1cbiA2NDE6XHRcdHgtXHUwMDNlcHJvcHMuZWFsZ28gPSBhbGdvLVx1MDAzZWRlc2Muc2FkYl9hbGdfaWQ7XG4gNjQyOlx0XG4gNjQzOlx0XHRwID0ga21lbWR1cCh1YWxnLCB4ZnJtX2FsZ19sZW4odWFsZyksIEdGUF9LRVJORUwpO1xuIDY0NDpcdFx0aWYgKCFwKVxuIDY0NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2NDY6XHRcbiA2NDc6XHRcdHN0cnNjcHkocC1cdTAwM2VhbGdfbmFtZSwgYWxnby1cdTAwM2VuYW1lKTtcbiA2NDg6XHRcdHgtXHUwMDNlZWFsZyA9IHA7XG4gNjQ5Olx0XHR4LVx1MDAzZWdlbml2ID0gYWxnby1cdTAwM2V1aW5mby5lbmNyLmdlbml2O1xuIDY1MDpcdFx0cmV0dXJuIDA7XG4gNjUxOlx0fVxuIDY1MjpcdFxuIDY1MzpcdHN0YXRpYyBpbnQgYXR0YWNoX2F1dGgoc3RydWN0IHhmcm1fYWxnb19hdXRoICoqYWxncHAsIHU4ICpwcm9wcyxcbiA2NTQ6XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKnJ0YSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY1NTpcdHtcbiA2NTY6XHRcdHN0cnVjdCB4ZnJtX2FsZ28gKnVhbGc7XG4gNjU3Olx0XHRzdHJ1Y3QgeGZybV9hbGdvX2F1dGggKnA7XG4gNjU4Olx0XHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmFsZ287XG4gNjU5Olx0XG4gNjYwOlx0XHRpZiAoIXJ0YSlcbiA2NjE6XHRcdFx0cmV0dXJuIDA7XG4gNjYyOlx0XG4gNjYzOlx0XHR1YWxnID0gbmxhX2RhdGEocnRhKTtcbiA2NjQ6XHRcbiA2NjU6XHRcdGFsZ28gPSB4ZnJtX2FhbGdfZ2V0X2J5bmFtZSh1YWxnLVx1MDAzZWFsZ19uYW1lLCAxKTtcbiA2NjY6XHRcdGlmICghYWxnbykge1xuIDY2NzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1JlcXVlc3RlZCBBVVRIIGFsZ29yaXRobSBub3QgZm91bmRcJiMzNDspO1xuIDY2ODpcdFx0XHRyZXR1cm4gLUVOT1NZUztcbiA2Njk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byBBUklBIENpcGhlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgQVJJQSBjaXBoZXIgaXMgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbCBidWlsZC4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIHN0cnVjdHVyZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIGZvciBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzIHRvICYjMzQ7QVJJQSYjMzQ7IHdpdGhpbiB0aGUgYGNyeXB0by9gIGRpcmVjdG9yeSwgbmF0dXJhbGx5LCBidXQgYWxzbywgZ2l2ZW4gaXRzIHVzZSBpbiBuZXR3b3JrIHNlY3VyaXR5LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGV4cGxvcmUgdGhlIGBuZXQveGZybS9gIGRpcmVjdG9yeS4gVGhlcmUgbWlnaHQgYmUgc29tZSBBUklBLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaGlkaW5nIGluIHRoZXJlLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGVtcGxveWVkIGZvciBJUHNlYyBvciBzaW1pbGFyIHByb3RvY29scy4gSSYjMzk7bGwgZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRob3NlIGRpcmVjdG9yaWVzIGFuZCBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb25maWd1cmF0aW9uIGlzIHN0YXRpY2FsbHkgY29tcGlsZWQsIG1vZHVsYXJpemVkLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGtleSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDUllQVE9fQVJJQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc9NTE2PUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZzo1MTc6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZy01MTgtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZz00NzE9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo0NzI6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctNDczLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZz00OTQ9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnOjQ5NTpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnLTQ5Ni1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc9NDYzPUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZzo0NjQ6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZy00NjUtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnPTQ3Mz1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NDc0OkNPTkZJR19DUllQVE9fQVJJQT1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctNDc1LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc9NDkyPUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NDkzOkNPTkZJR19DUllQVE9fQVJJQT1tXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnLTQ5NC1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc9NTc5PUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZzo1ODA6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy01ODEtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc9NDYzPUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjQ2NDpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctNDY1LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnPTQ2ND1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZzo0NjU6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnLTQ2Ni1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnPTQ4Mj1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnOjQ4MzpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZy00ODQtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc9NDYxPUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjQ2MjpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctNDYzLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZz00NjE9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnOjQ2MjpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnLTQ2My1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9Nzc4PUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo3Nzk6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy03ODAtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTc2Mj1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6NzYzOkNPTkZJR19DUllQVE9fQVJJQT1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctNzY0LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnPTIzOT1jb25maWcgQ1JZUFRPX1RXT0ZJU0hfQVZYX1g4Nl82NFxuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI1NS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI1Njpjb25maWcgQ1JZUFRPX0FSSUFfQUVTTklfQVZYX1g4Nl82NFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjU3LVx0dHJpc3RhdGUgXCYjMzQ7Q2lwaGVyczogQVJJQSB3aXRoIG1vZGVzOiBFQ0IsIENUUiAoQUVTLU5JL0FWWC9HRk5JKVwmIzM0O1xuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI2MC1cdHNlbGVjdCBDUllQVE9fQUxHQVBJXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyNjE6XHRzZWxlY3QgQ1JZUFRPX0FSSUFcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI2Mi1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yNzItXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyNzM6Y29uZmlnIENSWVBUT19BUklBX0FFU05JX0FWWDJfWDg2XzY0XG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yNzQtXHR0cmlzdGF0ZSBcJiMzNDtDaXBoZXJzOiBBUklBIHdpdGggbW9kZXM6IEVDQiwgQ1RSIChBRVMtTkkvQVZYMi9HRk5JKVwmIzM0O1xuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI3Ny1cdHNlbGVjdCBDUllQVE9fQUxHQVBJXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyNzg6XHRzZWxlY3QgQ1JZUFRPX0FSSUFcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI3OTpcdHNlbGVjdCBDUllQVE9fQVJJQV9BRVNOSV9BVlhfWDg2XzY0XG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yODAtXHRoZWxwXG4tLVxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjkwLVxuYXJjaC94ODYvY3J5cHRvL0tjb25maWc6MjkxOmNvbmZpZyBDUllQVE9fQVJJQV9HRk5JX0FWWDUxMl9YODZfNjRcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI5Mi1cdHRyaXN0YXRlIFwmIzM0O0NpcGhlcnM6IEFSSUEgd2l0aCBtb2RlczogRUNCLCBDVFIgKEFWWDUxMi9HRk5JKVwmIzM0O1xuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI5NS1cdHNlbGVjdCBDUllQVE9fQUxHQVBJXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyOTY6XHRzZWxlY3QgQ1JZUFRPX0FSSUFcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI5NzpcdHNlbGVjdCBDUllQVE9fQVJJQV9BRVNOSV9BVlhfWDg2XzY0XG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyOTg6XHRzZWxlY3QgQ1JZUFRPX0FSSUFfQUVTTklfQVZYMl9YODZfNjRcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI5OS1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGU9NTQ9c200LWFlc25pLWF2eDIteDg2XzY0LXkgOj0gc200LWFlc25pLWF2eDItYXNtXzY0Lm8gc200X2Flc25pX2F2eDJfZ2x1ZS5vXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUtNTUtXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGU6NTY6b2JqLSQoQ09ORklHX0NSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjQpICYjNDM7PSBhcmlhLWFlc25pLWF2eC14ODZfNjQub1xuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTU3LWFyaWEtYWVzbmktYXZ4LXg4Nl82NC15IDo9IGFyaWEtYWVzbmktYXZ4LWFzbV82NC5vIGFyaWFfYWVzbmlfYXZ4X2dsdWUub1xuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTU4LVxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19DUllQVE9fQVJJQV9BRVNOSV9BVlgyX1g4Nl82NCkgJiM0Mzs9IGFyaWEtYWVzbmktYXZ4Mi14ODZfNjQub1xuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTYwLWFyaWEtYWVzbmktYXZ4Mi14ODZfNjQteSA6PSBhcmlhLWFlc25pLWF2eDItYXNtXzY0Lm8gYXJpYV9hZXNuaV9hdngyX2dsdWUub1xuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTYxLVxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19DUllQVE9fQVJJQV9HRk5JX0FWWDUxMl9YODZfNjQpICYjNDM7PSBhcmlhLWdmbmktYXZ4NTEyLXg4Nl82NC5vXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUtNjMtYXJpYS1nZm5pLWF2eDUxMi14ODZfNjQteSA6PSBhcmlhLWdmbmktYXZ4NTEyLWFzbV82NC5vIGFyaWFfZ2ZuaV9hdng1MTJfZ2x1ZS5vXG4tLVxuYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzLmM9MzQ9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jLTEyNC1cdE9GRlNFVChUU1Nfc3AyLCB0c3Nfc3RydWN0LCB4ODZfdHNzLnNwMik7XG5hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHMuYzoxMjU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjQpXG5hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHMuYy0xMjYtXHQvKiBPZmZzZXQgZm9yIGZpZWxkcyBpbiBhcmlhX2N0eCAqL1xuLS1cbmNyeXB0by9LY29uZmlnPTM4OD1jb25maWcgQ1JZUFRPX0FOVUJJU1xuLS1cbmNyeXB0by9LY29uZmlnLTQwMS1cbmNyeXB0by9LY29uZmlnOjQwMjpjb25maWcgQ1JZUFRPX0FSSUFcbmNyeXB0by9LY29uZmlnLTQwMy1cdHRyaXN0YXRlIFwmIzM0O0FSSUFcJiMzNDtcbi0tXG5jcnlwdG8vTWFrZWZpbGU9MTQzPW9iai0kKENPTkZJR19DUllQVE9fU0VFRCkgJiM0Mzs9IHNlZWQub1xuY3J5cHRvL01ha2VmaWxlOjE0NDpvYmotJChDT05GSUdfQ1JZUFRPX0FSSUEpICYjNDM7PSBhcmlhX2dlbmVyaWMub1xuY3J5cHRvL01ha2VmaWxlLTE0NS1vYmotJChDT05GSUdfQ1JZUFRPX0NIQUNIQTIwKSAmIzQzOz0gY2hhY2hhLm9cbi0tXG5pbmNsdWRlL2NyeXB0by9hcmlhLmgtMTctXG5pbmNsdWRlL2NyeXB0by9hcmlhLmg6MTg6I2lmbmRlZiBfQ1JZUFRPX0FSSUFfSFxuaW5jbHVkZS9jcnlwdG8vYXJpYS5oOjE5OiNkZWZpbmUgX0NSWVBUT19BUklBX0hcbmluY2x1ZGUvY3J5cHRvL2FyaWEuaC0yMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTk9Q09ORklHX0NBTl9WWENBTj1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnOjEwOkNPTkZJR19DUllQVE9fQVJJQT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTExLUNPTkZJR19DUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNT1tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpczoKCioqSW52ZXN0aWdhdGluZyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgY291cGxlIG9mIGFyZWFzIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgY3J5cHRvL0tjb25maWc6NDAyYCDigJMgdGhhdCYjMzk7cyBsaWtlbHkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBzZWN0aW9uIHdpdGhpbiB0aGUgY3J5cHRvZ3JhcGhpYyBzdWJzeXN0ZW0g4oCTIGFuZCBhbHNvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGUgYnVpbGQgb3IgaW5jbHVzaW9uIG9mIGNlcnRhaW4gY3J5cHRvZ3JhcGh5IGZlYXR1cmVzIGFuZCBob3cgdGhlIFhGUk0gKElQc2VjIGZyYW1ld29yaykgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIHRoZW0uIElzIHRoZXJlIGEgZGVwZW5kZW5jeSBjaGFpbj8gRG8gc3BlY2lmaWMgY3J5cHRvIGFsZ29yaXRobXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBjZXJ0YWluIFhGUk0gZmVhdHVyZXMgdG8gZnVuY3Rpb24/IEkgbmVlZCB0byBhbmFseXplIHRob3NlIEtjb25maWcgZW50cmllcywgcG90ZW50aWFsbHkgY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBjcm9zcy1yZWZlcmVuY2luZyB0aGVtLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgYXJlIGxpbmtlZCBmb3IgY29uZmlndXJhdGlvbiBwdXJwb3Nlcy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyB3aGVyZSBteSBhc3N1bXB0aW9ucyBtaWdodCBiZSBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7Y3J5cHRvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0ICBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiA0MDE6XHRcbiA0MDI6XHRjb25maWcgQ1JZUFRPX0FSSUFcbiA0MDM6XHRcdHRyaXN0YXRlIFwmIzM0O0FSSUFcJiMzNDtcbiA0MDQ6XHRcdHNlbGVjdCBDUllQVE9fQUxHQVBJXG4gNDA1Olx0XHRoZWxwXG4gNDA2Olx0XHQgIEFSSUEgY2lwaGVyIGFsZ29yaXRobSAoUkZDNTc5NClcbiA0MDc6XHRcbiA0MDg6XHRcdCAgQVJJQSBpcyBhIHN0YW5kYXJkIGVuY3J5cHRpb24gYWxnb3JpdGhtIG9mIHRoZSBSZXB1YmxpYyBvZiBLb3JlYS5cbiA0MDk6XHRcdCAgVGhlIEFSSUEgc3BlY2lmaWVzIHRocmVlIGtleSBzaXplcyBhbmQgcm91bmRzLlxuIDQxMDpcdFx0ICAxMjgtYml0OiAxMiByb3VuZHMuXG4gNDExOlx0XHQgIDE5Mi1iaXQ6IDE0IHJvdW5kcy5cbiA0MTI6XHRcdCAgMjU2LWJpdDogMTYgcm91bmRzLlxuIDQxMzpcdFxuIDQxNDpcdFx0ICBTZWU6XG4gNDE1Olx0XHQgIGh0dHBzOi8vc2VlZC5raXNhLm9yLmtyL2tpc2EvYWxnb3JpdGhtL0Vnb3ZBcmlhSW5mby5kb1xuIDQxNjpcdFxuIDQxNzpcdGNvbmZpZyBDUllQVE9fQkxPV0ZJU0hcbiA0MTg6XHRcdHRyaXN0YXRlIFwmIzM0O0Jsb3dmaXNoXCYjMzQ7XG4gNDE5Olx0XHRzZWxlY3QgQ1JZUFRPX0FMR0FQSVxuIDQyMDpcdFx0c2VsZWN0IENSWVBUT19CTE9XRklTSF9DT01NT05cbiA0MjE6XHRcdGhlbHBcbiA0MjI6XHRcdCAgQmxvd2Zpc2ggY2lwaGVyIGFsZ29yaXRobSwgYnkgQnJ1Y2UgU2NobmVpZXJcbiA0MjM6XHRcbiA0MjQ6XHRcdCAgVGhpcyBpcyBhIHZhcmlhYmxlIGtleSBsZW5ndGggY2lwaGVyIHdoaWNoIGNhbiB1c2Uga2V5cyBmcm9tIDMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqWEZSTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIGZhY2luZywgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29tcG9uZW50cyBhcmUgYmVpbmcgYXNzZW1ibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlIGlzIGdvaW5nIHRvIGJlIG15IHByaW1hcnkgcmVzb3VyY2UgZm9yIHRoYXQuIEl0IGhvbGRzIHRoZSBrZXkgdG8gdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbGwgdGhlICYjMzQ7aWYgdGhpcywgdGhlbiB0aGF0JiMzNDsgbG9naWMgdGhhdCBkaWN0YXRlcyB3aGljaCBYRlJNIGZlYXR1cmVzIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl04oCZbGwgZ2l2ZSBtZSB0aGUga25vYnMgYW5kIGRpYWxzLiBUaGVuLCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGBuZXQveGZybS9NYWtlZmlsZWAsIG5hdHVyYWxseS4gSSBuZWVkIHRvIHNlZSBob3cgdGhvc2UgY29uZmlndXJhdGlvbiBjaG9pY2VzIGFyZSAqYWN0dWFsbHkqIHRyYW5zbGF0ZWQgaW50byBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIGhvdyB0aGUgaW5kaXZpZHVhbCBYRlJNIG1vZHVsZXMgYW5kIG9iamVjdHMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBvcmdhbml6ZWQuIFRoYXQgTWFrZWZpbGUgd2lsbCBzaG93IG1lIHRoZSBidWlsZCBwcm9jZXNzJiMzOTtzIGRhbmNlLiBXaXRoIHRoZXNlIHR3bywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFhGUk1cbiAgIDY6XHRcdGJvb2xcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IEdST19DRUxMU1xuICAgOTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxuICAxMjpcdFx0Ym9vbFxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBYRlJNX0FMR09cbiAgMTU6XHRcdHRyaXN0YXRlXG4gIDE2Olx0XHRzZWxlY3QgWEZSTVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT1xuICAxODpcdFx0c2VsZWN0IENSWVBUT19BRUFEXG4gIDE5Olx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hcbiAgMjA6XHRcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcbiAgMjE6XHRcbiAgMjI6XHRpZiBJTkVUXG4gIDIzOlx0Y29uZmlnIFhGUk1fVVNFUlxuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuICAyNTpcdFx0c2VsZWN0IFhGUk1fQUxHT1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gIDI4Olx0XHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbiAgMzM6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbiAgMzQ6XHRcdGRlcGVuZHMgb24gWEZSTV9VU0VSIFx1MDAyNlx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXHUwMDI2XHUwMDI2IFxcXG4gIDM1Olx0XHRcdEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcbiAgMzY6XHRcdHNlbGVjdCBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXG4gIDM3Olx0XHRoZWxwXG4gIDM4Olx0XHQgIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBJUHNlY1xuICAzOTpcdFx0ICB1c2VkIGJ5IGNvbXBhdGlibGUgTGludXggYXBwbGljYXRpb25zLlxuICA0MDpcdFxuICA0MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBYRlJNX0lOVEVSRkFDRVxuICA0NDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gWEZSTSBcdTAwMjZcdTAwMjYgSVBWNlxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIHByb3ZpZGVzIGEgdmlydHVhbCBpbnRlcmZhY2UgdG8gcm91dGUgSVBzZWMgdHJhZmZpYy5cbiAgNDg6XHRcbiAgNDk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIE1ha2VmaWxlOgoKKipEaWdnaW5nIGludG8gdGhlIFhGUk0gQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHhmcm1fYWxnby5vYCBpcyBjb25zdHJ1Y3RlZCB3aXRoaW4gdGhlIGBuZXQveGZybWAgZGlyZWN0b3J5LiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGxvY2F0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZ292ZXJuIGl0cyBjb21waWxhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIGZpbGVzIGludm9sdmVkLCBhbnkgcmVxdWlyZWQgY29tcGlsZXIgZmxhZ3MsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGxpYnJhcmllcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29tbW9uIE1ha2VmaWxlIGNvbnN0cnVjdHMgbGlrZSBgJChvYmotbSlgLCBgJChjYylgLCBgJChLQlVJTERfQ0ZMQUdTKWAsIGFuZCBkZXBlbmRlbmN5IGRlY2xhcmF0aW9ucyAoZS5nLiwgYHhmcm1fYWxnby5vOiBzb21lX3NvdXJjZS5jIHNvbWVfaGVhZGVyLmhgKS4gVWx0aW1hdGVseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBjb21waWxhdGlvbiBzdGVwcyB0byBlbnN1cmUgSSBncmFzcCBob3cgdGhpcyBzcGVjaWZpYyBvYmplY3QgZmlsZSBmaXRzIGludG8gdGhlIGxhcmdlciBYRlJNIGZyYW1ld29yay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IG1vZHVsZSBkZXBlbmRlbmNpZXMgb3IgbGlua2luZyBhZ2FpbnN0IG90aGVyIG9iamVjdCBmaWxlcy4gQW55IHNwZWNpYWwgY29tcGlsZXIgb3B0aW9ucyBhcmUgYWxzbyBhIHBvaW50IG9mIGludGVyZXN0LCBhcyB0aGVzZSBtaWdodCBwcm92aWRlIGNsdWVzIHRvIHRoZSBvcHRpbWl6YXRpb24gb3IgZmVhdHVyZSByZXF1aXJlbWVudHMgb2YgdGhpcyBwYXJ0aWN1bGFyIFhGUk0gYWxnb3JpdGhtIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIFhGUk0gc3Vic3lzdGVtLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHR4ZnJtX2ludGVyZmFjZS0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlX2NvcmUub1xuICAgNzpcdFxuICAgODpcdGlmZXEgKCQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSxtKVxuICAgOTpcdHhmcm1faW50ZXJmYWNlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICYjNDM7PSB4ZnJtX2ludGVyZmFjZV9icGYub1xuICAxMDpcdGVsc2UgaWZlcSAoJChDT05GSUdfWEZSTV9JTlRFUkZBQ0UpLHkpXG4gIDExOlx0eGZybV9pbnRlcmZhY2UtJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX2ludGVyZmFjZV9icGYub1xuICAxMjpcdGVuZGlmXG4gIDEzOlx0XG4gIDE0Olx0b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXG4gIDE1Olx0XHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG4gIDE2Olx0XHRcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXG4gIDE3Olx0XHRcdCAgICAgIHhmcm1fbmF0X2tlZXBhbGl2ZS5vXG4gIDE4Olx0b2JqLSQoQ09ORklHX1hGUk1fU1RBVElTVElDUykgJiM0Mzs9IHhmcm1fcHJvYy5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX1hGUk1fQUxHTykgJiM0Mzs9IHhmcm1fYWxnby5vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgJiM0Mzs9IHhmcm1fdXNlci5vXG4gIDIxOlx0b2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICYjNDM7PSB4ZnJtX2NvbXBhdC5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX1hGUk1fSVBDT01QKSAmIzQzOz0geGZybV9pcGNvbXAub1xuICAyMzpcdG9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xuICAyNTpcdG9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSAmIzQzOz0gZXNwaW50Y3Aub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHNlYy9YRlJNIGFuZCB0aGUgQVJJQSBDaXBoZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBzZWVpbmcgYSBjbHVzdGVyIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfWEZSTV9BTEdPYCwgYENPTkZJR19YRlJNX1VTRVJgLCBgQ09ORklHX0NSWVBUT19BUklBYCwgYENPTkZJR19DUllQVE9fQ0JDYCwgYENPTkZJR19DUllQVE9fQ1RSYCwgYENPTkZJR19JTkVUX0VTUGAsIGV0Yy4gVGhlc2UgYXJlIGFsbCBwb2ludGluZyB0b3dhcmQgYW4gSVBzZWMvWEZSTSBzZXR1cCwgc3BlY2lmaWNhbGx5IGludm9sdmluZyB0aGUgQVJJQSBjaXBoZXIuIE15IGZvY3VzIGlzIHdoYXQgaGFwcGVucyB3aGVuIHN5emthbGxlciwgdGhlIGZ1enplciwgdHJpZXMgdG8gY29uZmlndXJlIHRoaXMuCgpFc3NlbnRpYWxseSwgdXNlciBzcGFjZSwgdGhyb3VnaCBzeXprYWxsZXIsIGlzIHNlbmRpbmcgbmV0bGluayBtZXNzYWdlcyAoYFhGUk1fTVNHX05FV1NBYCwgYFhGUk1fTVNHX1VQRFNBYCwgZXRjLikgdG8gdGhlIGtlcm5lbC4gVGhlc2UgbWVzc2FnZXMgc3BlY2lmeSBzZWN1cml0eSBhc3NvY2lhdGlvbnMgKFNBcyksIGFuZCBjcnVjaWFsbHksIHRoZXkgaW5jbHVkZSB0aGUgYFhGUk1BX0FMR19DUllQVGAgYXR0cmlidXRlLiBUaGUgZnV6emVyIGxpa2VseSBzcGVjaWZpZXMgYWxnb3JpdGhtIG5hbWVzIGxpa2UgYCYjMzQ7Y2JjKGFyaWEpJiMzNDtgIG9yIGAmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKSYjMzQ7YCBvciBqdXN0IGAmIzM0O2FyaWEmIzM0O2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGludGVyZXN0aW5nIHBhcnQsIHJpZ2h0PwoKVGhlIGtlcm5lbCwgaW4gYHhmcm1fdXNlci5jYCwgdXNlcyB0aGUgYGF0dGFjaF9jcnlwdGAgZnVuY3Rpb24gdG8gbWFrZSBzZW5zZSBvZiB0aGlzLiBUaGlzIGZ1bmN0aW9uIHRoZW4gY2FsbHMgYHhmcm1fZWFsZ19nZXRfYnluYW1lYCwgd2hpY2ggaHVudHMgdGhyb3VnaCBgeGZybV9lYWxnX2xpc3RgIGxvb2tpbmcgZm9yIGEgc3VpdGFibGUgYWxnb3JpdGhtLiBUaGlzIGlzIGltcG9ydGFudDogdGhlIGxpc3QgKnNob3VsZCogbm93IGNvbnRhaW4gZW50cmllcyBmb3IgYCYjMzQ7Y2JjKGFyaWEpJiMzNDtgIGFuZCBgJiMzNDtyZmMzNjg2KGN0cihhcmlhKSkmIzM0O2AuIElmIGl0IGRvZXNuJiMzOTt0LCB3ZSBoYXZlIGEgcHJvYmxlbS4KClRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgaW4gYGVzcF9pbml0X3N0YXRlYCwgbG9jYXRlZCBpbiBgbmV0L2lwdjQvZXNwNC5jYCBvciBgbmV0L2lwdjYvZXNwNi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGFsbG9jYXRlIHRoZSBza2NpcGhlciBvciBjcnlwdG8gdHJhbnNmb3JtLiBJdCBhbHNvIGluaXRpYWxpemVzIHRoZSBJViBnZW5lcmF0b3IsIHVzaW5nIGBlY2hhaW5pdmAgb3IgYHNlcWl2YC4gRmluYWxseSwgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIG5ldHdvcmsgcGFja2V0cyBoYXBwZW5zIHVzaW5nIEVTUCAoYHhmcm00X291dHB1dGAsIGB4ZnJtNl9vdXRwdXRgLCBgZXNwX291dHB1dGAsIGFuZCBzbyBvbikuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSAqcmVxdWlyZW1lbnRzKi4gRm9yIGBjYmMoYXJpYSlgIHRvIGJlIHN1Y2Nlc3NmdWxseSBpbnN0YW50aWF0ZWQsIHRoZSBrZXJuZWwgKm11c3QqIGhhdmUgYENSWVBUT19DQkNgIGFuZCBgQ1JZUFRPX0FSSUFgIGVuYWJsZWQuIFNpbWlsYXJseSwgYHJmYzM2ODYoY3RyKGFyaWEpKWAgcmVxdWlyZXMgYENSWVBUT19DVFJgLCBgQ1JZUFRPX1NFUUlWYCBvciBgQ1JZUFRPX0VDSEFJTklWYCwgYW5kIGBDUllQVE9fQVJJQWAuIE5hdHVyYWxseSwgYFhGUk1fVVNFUmAsIGBYRlJNX0FMR09gLCBhbmQgZWl0aGVyIGBJTkVUX0VTUGAgb3IgYElORVQ2X0VTUGAgbmVlZCB0byBiZSBlbmFibGVkIHRvby4gSXQgc2VlbXMgYmFzaWMsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSYjMzk7bGwgY2hlY2sgdGhlIEdpdCBsb2cgZm9yIHRoZSBjb21taXQgaW50cm9kdWNpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGUgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvciYjMzk7cyBpbnRlbnQgYXJlIGVzc2VudGlhbCBmb3IgbXkgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBhZGRlZCwgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGUsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUklBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBBbGdvcml0aG0gTG9va3VwKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGxvb2tzIHVwIGFuZCB1c2VzIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHhmcm1fYWxnby5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9ucyBmb3IgYHhmcm1fZWFsZ19nZXRfYnluYW1lYCBhbmQgYHhmcm1fZmluZF9hbGdvYC4gVGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zOyBvbmUgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuIGFsZ29yaXRobSBieSBpdHMgbmFtZSwgYW5kIHRoZSBvdGhlciBwcm9iYWJseSBoYW5kbGVzIHRoZSBicm9hZGVyIHNlYXJjaCBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGFsZ29yaXRobSBzZWxlY3Rpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBob2xkIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGFsZ29yaXRobSByZWdpc3RyYXRpb24sIGxvb2t1cHMsIGFuZCBwb3RlbnRpYWxseSBldmVuIGNhY2hpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2ZpbmRfYWxnbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2FsZ28uYz02Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fbGlzdCB4ZnJtX2NhbGdfbGlzdCA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy02ODQtXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2ODU6c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9maW5kX2FsZ28oXG5uZXQveGZybS94ZnJtX2FsZ28uYy02ODYtXHRjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgKmFsZ29fbGlzdCxcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MTk9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyMC17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3MjE6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9hYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzIyLVx0XHRcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MjY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyNy17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3Mjg6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI5LVx0XHRcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MzM9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2NhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTczNC17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3MzU6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9jYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzM2LVx0XHRcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NDk9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTAte1xubmV0L3hmcm0veGZybV9hbGdvLmM6NzUxOlx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fYWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzUyLVx0XHRcdCAgICAgIHByb2JlKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTcte1xubmV0L3hmcm0veGZybV9hbGdvLmM6NzU4Olx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU5LVx0XHRcdCAgICAgIHByb2JlKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NjM9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2NhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NjQte1xubmV0L3hmcm0veGZybV9hbGdvLmM6NzY1Olx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fY2FsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzY2LVx0XHRcdCAgICAgIHByb2JlKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03ODU9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FlYWRfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgaWN2X2xlbiwgaW50IHByb2JlKVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc5MS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc5MjpcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcdTAwMjZ4ZnJtX2FlYWRfbGlzdCwgeGZybV9hZWFkX25hbWVfbWF0Y2gsIFx1MDAyNmRhdGEsXG5uZXQveGZybS94ZnJtX2FsZ28uYy03OTMtXHRcdFx0ICAgICAgcHJvYmUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY1MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGB4ZnJtX2ZpbmRfYWxnb2AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHhmcm1fZmluZF9hbGdvYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGxpa2VseSBhcm91bmQgdGhlIGVmZmljaWVuY3kgb2YgdGhlIHNlYXJjaC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIG9wdGltaXplZCwgb3IgKmlmKiBpdCYjMzk7cyBvcHRpbWl6ZWQsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHN1c2NlcHRpYmxlIHRvIGFueSBkZW5pYWwtb2Ytc2VydmljZSB2ZWN0b3JzIHJlbGF0ZWQgdG8gcG9vcmx5IGNvbnN0cnVjdGVkIHNlY3VyaXR5IHBvbGljaWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBhbGdvcml0aG0gdGFibGVzIGFyZSBvcmdhbml6ZWQsIHRoZSBzZWFyY2gga2V5IHVzZWQsIGFuZCBob3cgY29sbGlzaW9ucyBhcmUgaGFuZGxlZC4gSXMgdGhlcmUgYSBjYWNoaW5nIG1lY2hhbmlzbT8gRG9lcyBpdCBpdGVyYXRlIGxpbmVhcmx5IG9yIHV0aWxpemUgc29tZSBmb3JtIG9mIGhhc2hpbmcgb3IgYSBtb3JlIGFkdmFuY2VkIGRhdGEgc3RydWN0dXJlPyBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBpc24mIzM5O3QgcHJvcGVybHkgcHJvdGVjdGVkIGJ5IGxvY2tzLiBGdXJ0aGVyLCBJIHdpbGwgbG9vayB0byBzZWUgaWYgaXQgbWFrZXMgdXNlIG9mIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYW5kIGlmIGl0IGhhcyBhbnkgZmFsbGJhY2tzLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB3ZWFrbmVzc2VzIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkIGluIGEgcmVhbC13b3JsZCBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2FsZ28uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjgwOlx0XHQuZmluZCA9IGNyeXB0b19oYXNfYWNvbXAsXG4gNjgxOlx0XHQuYWxncyA9IGNhbGdfbGlzdCxcbiA2ODI6XHRcdC5lbnRyaWVzID0gQVJSQVlfU0laRShjYWxnX2xpc3QpLFxuIDY4MzpcdH07XG4gNjg0Olx0XG4gNjg1Olx0c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9maW5kX2FsZ28oXG4gNjg2Olx0XHRjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgKmFsZ29fbGlzdCxcbiA2ODc6XHRcdGludCBtYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmVudHJ5LCBjb25zdCB2b2lkICpkYXRhKSxcbiA2ODg6XHRcdGNvbnN0IHZvaWQgKmRhdGEsIGludCBwcm9iZSlcbiA2ODk6XHR7XG4gNjkwOlx0XHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmxpc3QgPSBhbGdvX2xpc3QtXHUwMDNlYWxncztcbiA2OTE6XHRcdGludCBpLCBzdGF0dXM7XG4gNjkyOlx0XG4gNjkzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhbGdvX2xpc3QtXHUwMDNlZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiA2OTQ6XHRcdFx0aWYgKCFtYXRjaChsaXN0ICYjNDM7IGksIGRhdGEpKVxuIDY5NTpcdFx0XHRcdGNvbnRpbnVlO1xuIDY5NjpcdFxuIDY5NzpcdFx0XHRpZiAobGlzdFtpXS5hdmFpbGFibGUpXG4gNjk4Olx0XHRcdFx0cmV0dXJuIFx1MDAyNmxpc3RbaV07XG4gNjk5Olx0XG4gNzAwOlx0XHRcdGlmICghcHJvYmUpXG4gNzAxOlx0XHRcdFx0YnJlYWs7XG4gNzAyOlx0XG4gNzAzOlx0XHRcdHN0YXR1cyA9IGFsZ29fbGlzdC1cdTAwM2VmaW5kKGxpc3RbaV0ubmFtZSwgMCwgMCk7XG4gNzA0Olx0XHRcdGlmICghc3RhdHVzKVxuIDcwNTpcdFx0XHRcdGJyZWFrO1xuIDcwNjpcdFxuIDcwNzpcdFx0XHRsaXN0W2ldLmF2YWlsYWJsZSA9IHN0YXR1cztcbiA3MDg6XHRcdFx0cmV0dXJuIFx1MDAyNmxpc3RbaV07XG4gNzA5Olx0XHR9XG4gNzEwOlx0XHRyZXR1cm4gTlVMTDtcbiA3MTE6XHR9XG4gNzEyOlx0XG4gNzEzOlx0c3RhdGljIGludCB4ZnJtX2FsZ19pZF9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmVudHJ5LFxuIDcxNDpcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqZGF0YSlcbiA3MTU6XHR7XG4gNzE2Olx0XHRyZXR1cm4gZW50cnktXHUwMDNlZGVzYy5zYWRiX2FsZ19pZCA9PSAodW5zaWduZWQgbG9uZylkYXRhO1xuIDcxNzpcdH1cbiA3MTg6XHRcbiA3MTk6XHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxuIDcyMDpcdHtcbiA3MjE6XHRcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcdTAwMjZ4ZnJtX2FhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXG4gNzIyOlx0XHRcdFx0ICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylhbGdfaWQsIDEpO1xuIDcyMzpcdH1cbiA3MjQ6XHRFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2FhbGdfZ2V0X2J5aWQpO1xuIDcyNTpcdFxuIDcyNjpcdHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9lYWxnX2dldF9ieWlkKGludCBhbGdfaWQpXG4gNzI3Olx0e1xuIDcyODpcdFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19pZF9tYXRjaCxcbiA3Mjk6XHRcdFx0XHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzAyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBFbmNyeXB0aW9uIEFsZ29yaXRobSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgdGhlIGZ1enppbmcgd29ydGhpbmVzcyBvZiB0aGlzIHBhdGNoLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGNvbXBvbmVudHMgYW5kIGVudHJ5IHBvaW50cy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYGNiYyhhcmlhKWAgYW5kIGByZmMzNjg2KGN0cihhcmlhKSlgIGVuY3J5cHRpb24gYWxnb3JpdGhtcywgcmVnaXN0ZXJpbmcgdGhlbSBpbiBgZWFsZ19saXN0YC4gVGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgcmVnaXN0cmF0aW9uIGFyZSBgeGZybV9lYWxnX2dldF9ieW5hbWVgLCBgeGZybV9wcm9iZV9hbGdzYCwgYGF0dGFjaF9jcnlwdGAsIGFuZCBgeGZybV9zdGF0ZV9jb25zdHJ1Y3RgLiBJIG5lZWQgdG8gYnJvYWRlbiBteSBzY29wZSBiZXlvbmQgdGhvc2UgZW50cnkgcG9pbnRzLgoKSSYjMzk7bGwgbm93IGV4cGFuZCBteSBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGFsbCB0b3VjaHBvaW50cyByZWxhdGVkIHRvIGB4ZnJtX2FsZ29gIGFuZCBBUklBIGVuY3J5cHRpb24gd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhhdCBpbmNsdWRlcyBjaGVja2luZyBgY3J5cHRvX2FyaWFgIGFuZCwgaW1wb3J0YW50bHksIHRoZSBvcHRpbWl6ZWQgeDg2IHZhcmlhbnRzIGxpa2UgYENSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjRgLCBgQ1JZUFRPX0FSSUFfQUVTTklfQVZYMl9YODZfNjRgLCBhbmQgYENSWVBUT19BUklBX0dGTklfQVZYNTEyX1g4Nl82NGAuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IEkgaGF2ZSBjb3JyZWN0IHNldHRpbmdzIGZvciBgQ1JZUFRPX0NCQ2AsIGBDUllQVE9fQ1RSYCwgYFhGUk1gLCBgWEZSTV9BTEdPYCwgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGFuZCBgSU5FVDZfRVNQYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgY2hhbmdlIGEgZ29vZCBmdXp6aW5nIHRhcmdldD8gTGV0JiMzOTtzIGNoZWNrOgoKMS4gICoqUmVhY2hhYmlsaXR5OioqIFRoZSBjb2RlIHJlc2lkZXMgaW4gYG5ldC94ZnJtL3hmcm1fYWxnby5jYC4gSXQgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBOZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhlIFhGUk0gbmV0bGluayBBUEkgb3IgcGZrZXksIHdoaWNoIGlzIGhlYXZpbHkgbGV2ZXJhZ2VkIGJ5IHN5emthbGxlci4gVGhlIHByZXNlbmNlIG9mIGBzeXpfbmV0bGlua194ZnJtKmAgb3Igc29ja2V0IG5ldGxpbmsgbWVzc2FnZXMgaW5kaWNhdGVzIHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgaGFzIGV4Y2VsbGVudCBjb3ZlcmFnZS4KMi4gICoqRnVuY3Rpb25hbGl0eToqKiBUaGlzIHBhdGNoIGFkZHMgdHdvIG5ldyBjaXBoZXIgYWxnb3JpdGhtcyB0byBYRlJNLCBhbGxvd2luZyB1c2Vyc3BhY2UgY29uZmlndXJhdGlvbiBvZiBYRlJNIHN0YXRlcyB1c2luZyBgY2JjKGFyaWEpYCBhbmQgYHJmYzM2ODYoY3RyKGFyaWEpKWAsIGluY2x1ZGluZyBzcGVjaWZpYyBrZXkgc2l6ZXMsIElWIGdlbmVyYXRvcnMsIGFuZCBibG9jayBzaXplcy4gVGhhdCYjMzk7cyBnb29kIGNvbXBsZXhpdHkgZm9yIGZ1enppbmcuCjMuICAqKkltcGFjdDoqKiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IElQc2VjIGFuZCB0aGUgY3J5cHRvZ3JhcGhpYyBpbnRlcmZhY2UuIFRoaXMgaXMgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBzZWN1cml0eSBmbGF3cyBoZXJlIGFyZSBoaWdoLWltcGFjdC4KNC4gICoqQ29uY2x1c2lvbjoqKiBCYXNlZCBvbiBhbGwgdGhlc2UgcG9pbnRzLCB0aGlzIGlzIGRlZmluaXRlbHkgYSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgc2l0dWF0aW9uLiBJJiMzOTtkIG5lZWQgdG8gcHJpb3JpdGl6ZSB0aGlzLgoKRmluYWxseSwgSSYjMzk7bGwgY2FyZWZ1bGx5IHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIGBYRlJNX0FMR09gLCBgWEZSTV9VU0VSYCwgYENSWVBUT19BUklBYCwgYENSWVBUT19DQkNgLCBgQ1JZUFRPX0NUUmAsIGFuZCBlaXRoZXIgYElORVRfRVNQYCAob3IgcG90ZW50aWFsbHkgYElORVRfRVNQX09GRkxPQURgKSBvciBgSU5FVDZfRVNQYCBlbmFibGVkLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBpbiBgbmV0L2lwdjRgIGFuZCBgbmV0L2lwdjZgIHRvIGVuc3VyZSB0aGUgRVNQIG9wdGlvbnMgYXJlIGNvcnJlY3RseSBzZXQuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCB0byBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVF9FU1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBJUHNlYyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSB3aXRoaW4gdGhlIElQdjQgc3RhY2suIFRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gSVB2NCBuZXR3b3JraW5nLCBhbmQgaXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdG8gaG9sZCB0aGUgc2V0dGluZyBJJiMzOTttIGxvb2tpbmcgZm9yLCBgSU5FVF9FU1BgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIHByb2JhYmx5IGd1ZXNzIHRoYXQmIzM5O3Mgd2hlcmUgaXQgaXMsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYmVzdCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgaW4gdGhlIGNvbmZpZyBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgbmVlZGVkIGFsZ29yaXRobXMgd2hlbiBhdmFpbGFibGUuXG4gMzUxOlx0XG4gMzUyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMzUzOlx0XG4gMzU0Olx0Y29uZmlnIElORVRfRVNQXG4gMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4gMzU2Olx0XHRzZWxlY3QgWEZSTV9FU1BcbiAzNTc6XHRcdGhlbHBcbiAzNTg6XHRcdCAgU3VwcG9ydCBmb3IgSVBzZWMgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpLlxuIDM1OTpcdFxuIDM2MDpcdFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXG4gMzYxOlx0XHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXG4gMzYyOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcbiAzNjM6XHRcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91JiMzOTtsbCBuZWVkIHRvIGVuYWJsZVxuIDM2NDpcdFx0ICB0aGVtIGluIHRoZSBjcnlwdG8gQVBJLiAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBhY2NlbGVyYXRlZFxuIDM2NTpcdFx0ICBpbXBsZW1lbnRhdGlvbnMgb2YgYW55IG5lZWRlZCBhbGdvcml0aG1zIHdoZW4gYXZhaWxhYmxlLlxuIDM2NjpcdFxuIDM2NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDM2ODpcdFxuIDM2OTpcdGNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4gMzcwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbiAzNzE6XHRcdGRlcGVuZHMgb24gSU5FVF9FU1BcbiAzNzI6XHRcdHNlbGVjdCBYRlJNX09GRkxPQURcbiAzNzM6XHRcdGRlZmF1bHQgblxuIDM3NDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc1MQoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWEZSTSBDcnlwdG8gQWxnb3JpdGhtIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTt2ZSBjb3ZlcmVkIG91ciBiYXNlcyBvbiB0aGUgWEZSTSBjcnlwdG8gYWxnb3JpdGhtIHNldHVwLiBJJiMzOTttIGdvaW5nIGJhY2sgdG8gYG5ldC94ZnJtL0tjb25maWdgIGZvciBhIGZpbmFsIGxvb2stc2VlIGF0IHRoZSBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fQUxHT2AgZGVwZW5kZW5jaWVzLiBZZXAsIGBYRlJNX1VTRVJgIHN0aWxsIHByb3Blcmx5IHNlbGVjdHMgYFhGUk1fQUxHT2AsIHdoaWNoIGluIHR1cm4gdHJpZ2dlcnMgdGhlIGNvbXBpbGF0aW9uIG9mIGB4ZnJtX2FsZ28uY2AuIEdvb2QuIFRoYXTigJlzIHNvbGlkLgoKTm93LCBsZXQmIzM5O3MgbWVudGFsbHkgd2FsayB0aHJvdWdoIHRob3NlIGtleSBzeW1ib2xzIGFnYWluLCBqdXN0IHRvIGJlIGNlcnRhaW46IGB4ZnJtX2VhbGdfZ2V0X2J5bmFtZWAsIGB4ZnJtX2ZpbmRfYWxnb2AsIGB4ZnJtX3Byb2JlX2FsZ3NgLCBhbmQgYGF0dGFjaF9jcnlwdGAuIFJpZ2h0LCByaWdodC4gVGhlc2UgYXJlbiYjMzk7dCBleGFjdGx5IHViaXF1aXRvdXM7IHRoZXkmIzM5O3JlIGFsbCBwcmV0dHkgY2xlYXJseSB0aWVkIHRvIHRoZSBYRlJNIGNyeXB0byBhbGdvcml0aG0gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgc2V0dXAgcGhhc2UuIFRoZXkmIzM5O3JlIG5vdCBnb2luZyB0byBiZSBpbiBhbnkgaG90IHBhdGhzLiBBcyBJIHJlY2FsbCwgdGhleSYjMzk7cmUgb25seSBpbnZva2VkIGR1cmluZyBYRlJNIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgY29uZmlndXJhdGlvbiwgdHlwaWNhbGx5IHRocm91Z2ggYSBOZXRsaW5rIGBYRlJNX01TR19ORVdTQWAgbWVzc2FnZS4gVGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50LgoKT2theSwgbGV04oCZcyByZXZpc2l0IHRoZSBgRW5hYmxlQ29uZmlnc2Agb25lIGxhc3QgdGltZSB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudDogd2UgbmVlZCBgWEZSTWAsIGBYRlJNX0FMR09gLCBgWEZSTV9VU0VSYCwgYENSWVBUT19BUklBYCwgYENSWVBUT19DQkNgLCBgQ1JZUFRPX0NUUmAsIGFuZCBgSU5FVF9FU1BgLiBZZXAsIHRob3NlIGFyZSBhbGwgcHJlc2VudCBhbmQgYWNjb3VudGVkIGZvci4gVGhleSBhcmUgYWxsIGNvcnJlY3QgYW5kIEkgY2FuIGRlZmVuZCB0aGVpciBpbmNsdXNpb24gd2l0aG91dCBhbnkgaXNzdWVzLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBldmVyeXRoaW5nLiBJdCBhbGwgY2hlY2tzIG91dC4gVGltZSB0byBtYWtlIHRoZSBmaW5hbCBjYWxsIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTSYjMzQ7LAogICAgJiMzNDtYRlJNX0FMR08mIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0NSWVBUT19BUklBJiMzNDssCiAgICAmIzM0O0NSWVBUT19DQkMmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0NUUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZWFsZ19nZXRfYnluYW1lJiMzNDssCiAgICAmIzM0O3hmcm1fZmluZF9hbGdvJiMzNDssCiAgICAmIzM0O3hmcm1fcHJvYmVfYWxncyYjMzQ7LAogICAgJiMzNDthdHRhY2hfY3J5cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBBUklBIGNpcGhlciBhbGdvcml0aG1zIChcJiMzNDtjYmMoYXJpYSlcJiMzNDsgYW5kIFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OykgdG8gdGhlIFhGUk0gZW5jcnlwdGlvbiBhbGdvcml0aG0gcmVnaXN0cnkgKGVhbGdfbGlzdCkuIFRoaXMgZW5hYmxlcyB1c2VyLXNwYWNlIHZpYSBYRlJNIE5ldGxpbmsgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBJUHNlYyBTQXMgd2l0aCBBUklBIGVuY3J5cHRpb24sIGV4ZXJjaXNpbmcgdGhlIGNyeXB0byBzdWJzeXN0ZW0gYW5kIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9BTEdPJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtDUllQVE9fQVJJQSYjMzQ7LAogICAgJiMzNDtDUllQVE9fQ0JDJiMzNDssCiAgICAmIzM0O0NSWVBUT19DVFImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2VhbGdfZ2V0X2J5bmFtZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2ZpbmRfYWxnbyYjMzQ7LAogICAgJiMzNDt4ZnJtX3Byb2JlX2FsZ3MmIzM0OywKICAgICYjMzQ7YXR0YWNoX2NyeXB0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIHRvIHRoZSBYRlJNIGVuY3J5cHRpb24gYWxnb3JpdGhtIHJlZ2lzdHJ5IChlYWxnX2xpc3QpLiBUaGlzIGVuYWJsZXMgdXNlci1zcGFjZSB2aWEgWEZSTSBOZXRsaW5rIGludGVyZmFjZSB0byBjb25maWd1cmUgSVBzZWMgU0FzIHdpdGggQVJJQSBlbmNyeXB0aW9uLCBleGVyY2lzaW5nIHRoZSBjcnlwdG8gc3Vic3lzdGVtIGFuZCBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWVyZWx5IHJlZ2lzdGVycyB0d28gZXhpc3RpbmcgY2lwaGVyIHN1aXRlcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcbi0gVGhlIGFkZGVkIGVudHJpZXMgYXJlIHN0YXRpYyBgc3RydWN0IHhmcm1fYWxnb19kZXNjYCBkZWZpbml0aW9ucyBpbiBgLmRhdGFgIC8gYC5yb2RhdGFgIHdoZXJlIHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuXG4tIE5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24sIHN0YWNrIHZhcmlhYmxlIGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc3VyZSwgb3IgbmV0bGluayAvIGBjb3B5X3RvX3VzZXJgIGRhdGEgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxuLSBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNhNTNkNmVjZGUyNThjYWMwMDQ0YjVlOWYwZTkyNmRjMDMzNTkyZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA2OjM4OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uYwppbmRleCA3MDQzNDQ5NWYyM2Y1Li4xNmM3MGRjMWE0MjY4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2FsZ28uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2FsZ28uYwpAQCAtNTEyLDYgJiM0Mzs1MTIsMzQgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBlYWxnX2xpc3RbXSA9IHsKIAkJLnNhZGJfYWxnX21heGJpdHMgPSAyNTYKIAl9CiB9LAomIzQzO3sKJiM0MzsJLm5hbWUgPSAmIzM0O2NiYyhhcmlhKSYjMzQ7LAomIzQzOwkuY29tcGF0ID0gJiMzNDthcmlhJiMzNDssCiYjNDM7CiYjNDM7CS51aW5mbyA9IHsKJiM0MzsJCS5lbmNyID0gewomIzQzOwkJCS5nZW5pdiA9ICYjMzQ7ZWNoYWluaXYmIzM0OywKJiM0MzsJCQkuYmxvY2tiaXRzID0gMTI4LAomIzQzOwkJCS5kZWZrZXliaXRzID0gMjU2LAomIzQzOwkJfQomIzQzOwl9LAomIzQzOwomIzQzOwkucGZrZXlfc3VwcG9ydGVkID0gMCwKJiM0Mzt9LAomIzQzO3sKJiM0MzsJLm5hbWUgPSAmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKSYjMzQ7LAomIzQzOwkuY29tcGF0ID0gJiMzNDthcmlhJiMzNDssCiYjNDM7CiYjNDM7CS51aW5mbyA9IHsKJiM0MzsJCS5lbmNyID0gewomIzQzOwkJCS5nZW5pdiA9ICYjMzQ7c2VxaXYmIzM0OywKJiM0MzsJCQkuYmxvY2tiaXRzID0gMTI4LAomIzQzOwkJCS5kZWZrZXliaXRzID0gMTYwLAomIzQzOwkJfQomIzQzOwl9LAomIzQzOwomIzQzOwkucGZrZXlfc3VwcG9ydGVkID0gMCwKJiM0Mzt9LAogewogCS5uYW1lID0gJiMzNDtjYmModHdvZmlzaCkmIzM0OywKIAkuY29tcGF0ID0gJiMzNDt0d29maXNoJiMzNDssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgZm9yIEFSSUEgQ2lwaGVyIEFsZ29yaXRobSBQYXRjaD8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIEFSSUEgY2lwaGVyIGFsZ29yaXRobXMsIHNwZWNpZmljYWxseSBgY2JjKGFyaWEpYCBhbmQgYHJmYzM2ODYoY3RyKGFyaWEpKWAsIHRvIGB4ZnJtX2FsZ28uY2AuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBldmFsdWF0aW5nIHRoZSBMaW51eCBrZXJuZWwgc2FuaXRpemVyIHN1aXRhYmlsaXR5IGhlcmUsIGZvY3VzaW5nIG9uIEtBU0FOIHZlcnN1cyBLTVNBTiBmb3IgYSBwYXRjaC4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJlbmlnbiBkZWZlbnNpdmUgc2VjdXJpdHkgYW5hbHlzaXMgb3IgUUEgdGFzaywgcGF0Y2ggZXZhbHVhdGlvbjsgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYW55IGFjdGl2ZSBleHBsb2l0IGdlbmVyYXRpb24gb3IgbWFsaWNpb3VzIGNvZGUuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIFRoaXMgcGF0Y2gganVzdCBzZWVtcyB0byBiZSBhZGRpbmcgdHdvIGVudHJpZXMgdG8gdGhlIGBlYWxnX2xpc3RgIGFycmF5IHdpdGhpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgLiBUaW1lIHRvIGdyYWIgdGhhdCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTEyLCBhbmQgY2hlY2sgb3V0IHdoYXQmIzM5O3MgYWxyZWFkeSB0aGVyZS4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQgbG9va3MgbGlrZS4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIHJpc2tzLiBNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGFuZCB3aGV0aGVyIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHdpbGwgaGluZ2Ugb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhpc3RpbmcgY29kZSBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhhdCB0aGUgYWRkZWQgYWxnb3JpdGhtcyBtaWdodCBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fYWxnby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdFx0XHQuZ2VuaXYgPSBcJiMzNDtlY2hhaW5pdlwmIzM0OyxcbiA1MDE6XHRcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuIDUwMjpcdFx0XHRcdC5kZWZrZXliaXRzID0gMTI4LFxuIDUwMzpcdFx0XHR9XG4gNTA0Olx0XHR9LFxuIDUwNTpcdFxuIDUwNjpcdFx0LnBma2V5X3N1cHBvcnRlZCA9IDEsXG4gNTA3Olx0XG4gNTA4Olx0XHQuZGVzYyA9IHtcbiA1MDk6XHRcdFx0LnNhZGJfYWxnX2lkID0gU0FEQl9YX0VBTEdfQ0FNRUxMSUFDQkMsXG4gNTEwOlx0XHRcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXG4gNTExOlx0XHRcdC5zYWRiX2FsZ19taW5iaXRzID0gMTI4LFxuIDUxMjpcdFx0XHQuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NlxuIDUxMzpcdFx0fVxuIDUxNDpcdH0sXG4gNTE1Olx0e1xuIDUxNjpcdFx0Lm5hbWUgPSBcJiMzNDtjYmMoYXJpYSlcJiMzNDssXG4gNTE3Olx0XHQuY29tcGF0ID0gXCYjMzQ7YXJpYVwmIzM0OyxcbiA1MTg6XHRcbiA1MTk6XHRcdC51aW5mbyA9IHtcbiA1MjA6XHRcdFx0LmVuY3IgPSB7XG4gNTIxOlx0XHRcdFx0Lmdlbml2ID0gXCYjMzQ7ZWNoYWluaXZcJiMzNDssXG4gNTIyOlx0XHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbiA1MjM6XHRcdFx0XHQuZGVma2V5Yml0cyA9IDI1NixcbiA1MjQ6XHRcdFx0fVxuIDUyNTpcdFx0fSxcbiA1MjY6XHRcbiA1Mjc6XHRcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxuIDUyODpcdH0sXG4gNTI5Olx0e1xuIDUzMDpcdFx0Lm5hbWUgPSBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDssXG4gNTMxOlx0XHQuY29tcGF0ID0gXCYjMzQ7YXJpYVwmIzM0OyxcbiA1MzI6XHRcbiA1MzM6XHRcdC51aW5mbyA9IHtcbiA1MzQ6XHRcdFx0LmVuY3IgPSB7XG4gNTM1Olx0XHRcdFx0Lmdlbml2ID0gXCYjMzQ7c2VxaXZcJiMzNDssXG4gNTM2Olx0XHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbiA1Mzc6XHRcdFx0XHQuZGVma2V5Yml0cyA9IDE2MCxcbiA1Mzg6XHRcdFx0fVxuIDUzOTpcdFx0fSxcbiA1NDA6XHRcbiA1NDE6XHRcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxuIDU0MjpcdH0sXG4gNTQzOlx0e1xuIDU0NDpcdFx0Lm5hbWUgPSBcJiMzNDtjYmModHdvZmlzaClcJiMzNDssXG4gNTQ1Olx0XHQuY29tcGF0ID0gXCYjMzQ7dHdvZmlzaFwmIzM0OyxcbiA1NDY6XHRcbiA1NDc6XHRcdC51aW5mbyA9IHtcbiA1NDg6XHRcdFx0LmVuY3IgPSB7XG4gNTQ5Olx0XHRcdFx0Lmdlbml2ID0gXCYjMzQ7ZWNoYWluaXZcJiMzNDssXG4gNTUwOlx0XHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbiA1NTE6XHRcdFx0XHQuZGVma2V5Yml0cyA9IDEyOCxcbiA1NTI6XHRcdFx0fVxuIDU1MzpcdFx0fSxcbiA1NTQ6XHRcbiA1NTU6XHRcdC5wZmtleV9zdXBwb3J0ZWQgPSAxLFxuIDU1NjpcdFxuIDU1NzpcdFx0LmRlc2MgPSB7XG4gNTU4Olx0XHRcdC5zYWRiX2FsZ19pZCA9IFNBREJfWF9FQUxHX1RXT0ZJU0hDQkMsXG4gNTU5Olx0XHRcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBBbGdvcml0aG0gVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYHhmcm1fYWxnb19kZXNjYCBoZXJlLCBhbmQgSSYjMzk7bSBwYXJ0aWN1bGFybHkgY3VyaW91cyBpZiB0aGVyZSBhcmUgb3RoZXIsIHJlbGF0ZWQgYWxnb3JpdGhtcyBpbiB0aGUgYGVhbGdfbGlzdGAuIEl0IHNlZW1zIGxpa2UgYSBkZWVwZXIgZGl2ZSBpbnRvIGBuZXQveGZybS94ZnJtX2FsZ28uY2AgaXMgaW4gb3JkZXIuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHJlYWRpbmcgdGhyb3VnaCB0aGUgY29kZSB0aGVyZSBtb3JlIGNsb3NlbHkuIE9yLCBhIHF1aWNrIGdyZXAgZm9yIGBlYWxnX2xpc3RgIG1pZ2h0IGdpdmUgbWUgc29tZSB1c2VmdWwgY2x1ZXMgYW5kIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBJIGNhbiB1bmNvdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlYWxnX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9hbGdvLmM9MTc1PXN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgYWFsZ19saXN0W10gPSB7XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmMtMzQ2LVxubmV0L3hmcm0veGZybV9hbGdvLmM6MzQ3OnN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgZWFsZ19saXN0W10gPSB7XG5uZXQveGZybS94ZnJtX2FsZ28uYy0zNDgte1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTY0NT1zdGF0aWMgaW5saW5lIGludCBlYWxnX2VudHJpZXModm9pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY0Ni17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NDc6XHRyZXR1cm4gQVJSQVlfU0laRShlYWxnX2xpc3QpO1xubmV0L3hmcm0veGZybV9hbGdvLmMtNjQ4LX1cbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz02Njc9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fbGlzdCB4ZnJtX2FhbGdfbGlzdCA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NzItXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NzM6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fbGlzdCB4ZnJtX2VhbGdfbGlzdCA9IHtcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3NC1cdC5maW5kID0gY3J5cHRvX2hhc19za2NpcGhlcixcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY3NTpcdC5hbGdzID0gZWFsZ19saXN0LFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njc2Olx0LmVudHJpZXMgPSBBUlJBWV9TSVpFKGVhbGdfbGlzdCksXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NzctfTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MjY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyNy17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3Mjg6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI5LVx0XHRcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTcte1xubmV0L3hmcm0veGZybV9hbGdvLmM6NzU4Olx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU5LVx0XHRcdCAgICAgIHByb2JlKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz04MDY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWR4KHVuc2lnbmVkIGludCBpZHgpXG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmMtODEwLVxubmV0L3hmcm0veGZybV9hbGdvLmM6ODExOlx0cmV0dXJuIFx1MDAyNmVhbGdfbGlzdFtpZHhdO1xubmV0L3hmcm0veGZybV9hbGdvLmMtODEyLX1cbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz04MjA9dm9pZCB4ZnJtX3Byb2JlX2FsZ3Modm9pZClcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy04MzItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlYWxnX2VudHJpZXMoKTsgaSYjNDM7JiM0MzspIHtcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzMzpcdFx0c3RhdHVzID0gY3J5cHRvX2hhc19za2NpcGhlcihlYWxnX2xpc3RbaV0ubmFtZSwgMCwgMCk7XG5uZXQveGZybS94ZnJtX2FsZ28uYzo4MzQ6XHRcdGlmIChlYWxnX2xpc3RbaV0uYXZhaWxhYmxlICE9IHN0YXR1cylcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzNTpcdFx0XHRlYWxnX2xpc3RbaV0uYXZhaWxhYmxlID0gc3RhdHVzO1xubmV0L3hmcm0veGZybV9hbGdvLmMtODM2LVx0fVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTg1Nz1pbnQgeGZybV9jb3VudF9wZmtleV9lbmNfc3VwcG9ydGVkKHZvaWQpXG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmMtODYxLVx0Zm9yIChpID0gMCwgbiA9IDA7IGkgXHUwMDNjIGVhbGdfZW50cmllcygpOyBpJiM0MzsmIzQzOylcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjg2MjpcdFx0aWYgKGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgXHUwMDI2XHUwMDI2IGVhbGdfbGlzdFtpXS5wZmtleV9zdXBwb3J0ZWQpXG5uZXQveGZybS94ZnJtX2FsZ28uYy04NjMtXHRcdFx0biYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcmlhIEVuY3J5cHRpb24gSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCBhcmUgbGlzdGVkIGFzIHN0YXRpYyBlbnRyaWVzIHdpdGhpbiBgZWFsZ19saXN0YC4gVGhpcyBpcyBhIHN0YXRpYyBhcnJheSwgcmVzaWRpbmcgaW4gc3RhdGljIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhlIEMgc3RhbmRhcmQgbWFuZGF0ZXMgdGhhdCB1bmluaXRpYWxpemVkIGZpZWxkcyB3aWxsIGJlIHplcm9lZCBieSB0aGUgY29tcGlsZXIuIFRoZXNlIGVudHJpZXMgYXJlIHJlZ2lzdGVyaW5nIHN0YW5kYXJkIHNrY2lwaGVyIGVuY3J5cHRpb24gYWxnb3JpdGhtcyBmb3IgWEZSTS9JUHNlYywgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuCgpUaGUgZmFjdCB0aGF0IGBwZmtleV9zdXBwb3J0ZWQgPSAwYCBpcyBjcnVjaWFsLiBUaGlzIG1lYW5zIHRoZXNlIGFsZ29yaXRobXMgYXJlbiYjMzk7dCBleHBvc2VkIHRocm91Z2ggUEZfS0VZIGRpcmVjdGx5OyBpbnN0ZWFkLCB0aGV5IGFyZSBvbmx5IGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgWEZSTV9NU0dfKiBjYWxscywgYmFzZWQgb24gbmFtZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBhbSBJIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBhcmlhIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMsIG9yIGlzIHRoaXMganVzdCBzdHJhaWdodGZvcndhcmQgY29uZmlndXJhdGlvbiBhbmQgdGFibGUgcG9wdWxhdGlvbj8KCkhvbGQgb24uLi4gSSBiZWxpZXZlIEkgaGF2ZSBhbiBhbnN3ZXIuIFRoZSAmIzM0O2FyaWEmIzM0OyBjcnlwdG8gbW9kdWxlIGFscmVhZHkgc2VlbXMgdG8gZXhpc3QsIHNwZWNpZmljYWxseSBpbiBgY3J5cHRvL2FyaWEqLmNgIG9yIHBvc3NpYmx5IHRoZSBnZW5lcmljIHZlcnNpb24sIGBjcnlwdG8vYXJpYV9nZW5lcmljLmNgLiBOb3cgSSBuZWVkIHRvIGRpdmUgaW50byB0aG9zZSBmaWxlcyB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGlzc3VlcyBoaWRpbmcgdGhlcmUsIGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiB0aGUgYGNyeXB0by9hcmlhKmAgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyaWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtjcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2NyeXB0by9LY29uZmlnPTM4OD1jb25maWcgQ1JZUFRPX0FOVUJJU1xuLS1cbmNyeXB0by9LY29uZmlnLTM5NC1cbmNyeXB0by9LY29uZmlnOjM5NTpcdCAgQW51YmlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb21cbmNyeXB0by9LY29uZmlnLTM5Ni1cdCAgMTI4IGJpdHMgdG8gMzIwIGJpdHMgaW4gbGVuZ3RoLiAgSXQgd2FzIGV2YWx1YXRlZCBhcyBhIGVudHJhbnRcbi0tXG5jcnlwdG8vS2NvbmZpZz00MTc9Y29uZmlnIENSWVBUT19CTE9XRklTSFxuLS1cbmNyeXB0by9LY29uZmlnLTQyMy1cbmNyeXB0by9LY29uZmlnOjQyNDpcdCAgVGhpcyBpcyBhIHZhcmlhYmxlIGtleSBsZW5ndGggY2lwaGVyIHdoaWNoIGNhbiB1c2Uga2V5cyBmcm9tIDMyXG5jcnlwdG8vS2NvbmZpZy00MjUtXHQgIGJpdHMgdG8gNDQ4IGJpdHMgaW4gbGVuZ3RoLiAgSXQmIzM5O3MgZmFzdCwgc2ltcGxlIGFuZCBzcGVjaWZpY2FsbHlcbi0tXG5jcnlwdG8vS2NvbmZpZz02Njc9Y29uZmlnIENSWVBUT19DVFNcbi0tXG5jcnlwdG8vS2NvbmZpZy02NzEtXHRoZWxwXG5jcnlwdG8vS2NvbmZpZzo2NzI6XHQgIENCQy1DUzMgdmFyaWFudCBvZiBDVFMgKENpcGhlciBUZXh0IFN0ZWFsaW5nKSAoTklTVFxuY3J5cHRvL0tjb25maWctNjczLVx0ICBBZGRlbmR1bSB0byBTUDgwMC0zOEEgKE9jdG9iZXIgMjAxMCkpXG4tLVxuY3J5cHRvL0tjb25maWc9NzE3PWNvbmZpZyBDUllQVE9fWENUUlxuLS1cbmNyeXB0by9LY29uZmlnLTcyMy1cbmNyeXB0by9LY29uZmlnOjcyNDpcdCAgVGhpcyBibG9ja2NpcGhlciBtb2RlIGlzIGEgdmFyaWFudCBvZiBDVFIgbW9kZSB1c2luZyBYT1JzIGFuZCBsaXR0bGUtZW5kaWFuXG5jcnlwdG8vS2NvbmZpZy03MjUtXHQgIGFkZGl0aW9uIHJhdGhlciB0aGFuIGJpZy1lbmRpYW4gYXJpdGhtZXRpYy5cbi0tXG5jcnlwdG8vS2NvbmZpZz0xMTM4PWNob2ljZVxuLS1cbmNyeXB0by9LY29uZmlnLTExNDUtXHQgIHRvIHRoYXQgY2FjaGUgaXMgbWVhc3VyZWQuIFRoZSBjbG9zZXIgdGhlIGNhY2hlIGlzIHRvIHRoZSBDUFVcbmNyeXB0by9LY29uZmlnOjExNDY6XHQgIHRoZSBsZXNzIHZhcmlhdGlvbnMgYXJlIG1lYXN1cmVkIGFuZCB0aHVzIHRoZSBsZXNzIGVudHJvcHkgaXNcbmNyeXB0by9LY29uZmlnLTExNDctXHQgIG9idGFpbmVkLiBUaHVzLCBpZiB0aGUgbWVtb3J5IHNpemUgZml0cyBpbnRvIHRoZSBMMSBjYWNoZSwgdGhlXG4tLVxuY3J5cHRvL01ha2VmaWxlPTE0Mz1vYmotJChDT05GSUdfQ1JZUFRPX1NFRUQpICYjNDM7PSBzZWVkLm9cbmNyeXB0by9NYWtlZmlsZToxNDQ6b2JqLSQoQ09ORklHX0NSWVBUT19BUklBKSAmIzQzOz0gYXJpYV9nZW5lcmljLm9cbmNyeXB0by9NYWtlZmlsZS0xNDUtb2JqLSQoQ09ORklHX0NSWVBUT19DSEFDSEEyMCkgJiM0Mzs9IGNoYWNoYS5vXG4tLVxuY3J5cHRvL2FkaWFudHVtLmMtNDYtLypcbmNyeXB0by9hZGlhbnR1bS5jOjQ3OiAqIFRoZSBzcGVjaWZpY2F0aW9uIGFsbG93cyB2YXJpYWJsZS1sZW5ndGggdHdlYWtzLCBidXQgTGludXgmIzM5O3MgY3J5cHRvIEFQSVxuY3J5cHRvL2FkaWFudHVtLmMtNDgtICogY3VycmVudGx5IG9ubHkgYWxsb3dzIGFsZ29yaXRobXMgdG8gc3VwcG9ydCBhIHNpbmdsZSBsZW5ndGguICBUaGUgXCYjMzQ7bmF0dXJhbFwmIzM0O1xuLS1cbmNyeXB0by9hZXMuYz04OTk9c3RhdGljIGludCBjcnlwdG9fYWVzX2NjbV9pbml0KHN0cnVjdCBhZXNfY2NtX2N0eCAqY3R4LFxuLS1cbmNyeXB0by9hZXMuYy05MDctXHQvKlxuY3J5cHRvL2Flcy5jOjkwODpcdCAqIENDTSBhY2NlcHRzIGEgdmFyaWFibGUtbGVuZ3RoIG5vbmNlIGJldHdlZW4gNyBhbmQgMTMgYnl0ZXNcbmNyeXB0by9hZXMuYy05MDktXHQgKiBpbmNsdXNpdmVseSwgd2hpbGUgY3J5cHRvX2FlYWQgYXNzdW1lcyBhIGZpeGVkLWxlbmd0aCBJVi4gIFRoaXMgaXNcbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTYtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTc6I2luY2x1ZGUgXHUwMDNjY3J5cHRvL2FyaWEuaFx1MDAzZVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jPTIwPXN0YXRpYyBjb25zdCB1MzIga2V5X3JjWzIwXSA9IHtcbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjctXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjg6c3RhdGljIHZvaWQgYXJpYV9zZXRfZW5jcnlwdF9rZXkoc3RydWN0IGFyaWFfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjktXHRcdFx0XHQgdW5zaWduZWQgaW50IGtleV9sZW4pXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTQ3LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjQ4Olx0YXJpYV9zdWJzdF9kaWZmX29kZChcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy00OS1cbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtODEtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6ODI6XHRhcmlhX3N1YnN0X2RpZmZfZXZlbihcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy04My1cbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtOTgtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6OTk6XHRhcmlhX3N1YnN0X2RpZmZfb2RkKFx1MDAyNnJlZzAsIFx1MDAyNnJlZzEsIFx1MDAyNnJlZzIsIFx1MDAyNnJlZzMpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEwMC1cbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTA1LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEwNjpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHcwLCB3MSwgMTkpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEwNy1cdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMDg6XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MSwgdzIsIDE5KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMDktXHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTEwOlx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzIsIHczLCAxOSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTExLVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjExMjpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHczLCB3MCwgMTkpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTExMy1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMTQtXHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTE1Olx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzAsIHcxLCAzMSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTE2LVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjExNzpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHcxLCB3MiwgMzEpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTExOC1cdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMTk6XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MiwgdzMsIDMxKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjAtXHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTIxOlx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzMsIHcwLCAzMSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTIyLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEyMy1cdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMjQ6XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDY3KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjUtXHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTI2Olx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCA2Nyk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTI3LVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEyODpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgNjcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEyOS1cdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMzA6XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MywgdzAsIDY3KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMzEtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTMyLVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEzMzpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHcwLCB3MSwgOTcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEzNC1cdGlmIChrZXlfbGVuIFx1MDAzZSAxNikge1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEzNS1cdFx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEzNjpcdFx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCA5Nyk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTM3LVx0XHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTM4Olx0XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MiwgdzMsIDk3KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMzktXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0MS1cdFx0XHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTQyOlx0XHRcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHczLCB3MCwgOTcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0My1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNDQtXHRcdFx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE0NTpcdFx0XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDEwOSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTQ2LVx0XHR9XG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0OS1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNTA6c3RhdGljIHZvaWQgYXJpYV9zZXRfZGVjcnlwdF9rZXkoc3RydWN0IGFyaWFfY3R4ICpjdHgpXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTUxLXtcbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTU5LVx0Zm9yIChpID0gMTsgaSBcdTAwM2MgY3R4LVx1MDAzZXJvdW5kczsgaSYjNDM7JiM0MzspIHtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjA6XHRcdGN0eC1cdTAwM2VkZWNfa2V5W2ldWzBdID0gYXJpYV9tKGN0eC1cdTAwM2VlbmNfa2V5W2N0eC1cdTAwM2Vyb3VuZHMgLSBpXVswXSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTYxOlx0XHRjdHgtXHUwMDNlZGVjX2tleVtpXVsxXSA9IGFyaWFfbShjdHgtXHUwMDNlZW5jX2tleVtjdHgtXHUwMDNlcm91bmRzIC0gaV1bMV0pO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE2MjpcdFx0Y3R4LVx1MDAzZWRlY19rZXlbaV1bMl0gPSBhcmlhX20oY3R4LVx1MDAzZWVuY19rZXlbY3R4LVx1MDAzZXJvdW5kcyAtIGldWzJdKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjM6XHRcdGN0eC1cdTAwM2VkZWNfa2V5W2ldWzNdID0gYXJpYV9tKGN0eC1cdTAwM2VlbmNfa2V5W2N0eC1cdTAwM2Vyb3VuZHMgLSBpXVszXSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTY0LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE2NTpcdFx0YXJpYV9kaWZmX3dvcmQoXHUwMDI2Y3R4LVx1MDAzZWRlY19rZXlbaV1bMF0sIFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzFdLFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE2Ni1cdFx0XHQgICAgICAgXHUwMDI2Y3R4LVx1MDAzZWRlY19rZXlbaV1bMl0sIFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzNdKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjc6XHRcdGFyaWFfZGlmZl9ieXRlKFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzFdLFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE2OC1cdFx0XHQgICAgICAgXHUwMDI2Y3R4LVx1MDAzZWRlY19rZXlbaV1bMl0sIFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzNdKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjk6XHRcdGFyaWFfZGlmZl93b3JkKFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzBdLCBcdTAwMjZjdHgtXHUwMDNlZGVjX2tleVtpXVsxXSxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNzAtXHRcdFx0ICAgICAgIFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzJdLCBcdTAwMjZjdHgtXHUwMDNlZGVjX2tleVtpXVszXSk7XG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE3My1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNzQ6aW50IGFyaWFfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbilcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNzUte1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE3NjpcdHN0cnVjdCBhcmlhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNzctXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE4Ny1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxODg6XHRhcmlhX3NldF9lbmNyeXB0X2tleShjdHgsIGluX2tleSwga2V5X2xlbik7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTg5Olx0YXJpYV9zZXRfZGVjcnlwdF9rZXkoY3R4KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xOTAtXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE5Mi19XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTkzOkVYUE9SVF9TWU1CT0xfR1BMKGFyaWFfc2V0X2tleSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTk0LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE5NTpzdGF0aWMgdm9pZCBfX2FyaWFfY3J5cHQoc3RydWN0IGFyaWFfY3R4ICpjdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbixcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xOTYtXHRcdFx0IHUzMiBrZXlbXVtBUklBX1JEX0tFWV9XT1JEU10pXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIwNy1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMDg6XHRhcmlhX2FkZF9yb3VuZF9rZXkoa2V5W3JraWR4XSwgXHUwMDI2cmVnMCwgXHUwMDI2cmVnMSwgXHUwMDI2cmVnMiwgXHUwMDI2cmVnMyk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjA5LVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIxMC1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTE6XHRhcmlhX3N1YnN0X2RpZmZfb2RkKFx1MDAyNnJlZzAsIFx1MDAyNnJlZzEsIFx1MDAyNnJlZzIsIFx1MDAyNnJlZzMpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjIxMjpcdGFyaWFfYWRkX3JvdW5kX2tleShrZXlbcmtpZHhdLCBcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yMTMtXHRya2lkeCYjNDM7JiM0Mzs7XG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIxNS1cdHdoaWxlICgocm91bmRzIC09IDIpIFx1MDAzZSAwKSB7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjE2Olx0XHRhcmlhX3N1YnN0X2RpZmZfZXZlbihcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTc6XHRcdGFyaWFfYWRkX3JvdW5kX2tleShrZXlbcmtpZHhdLCBcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yMTgtXHRcdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yMTktXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjIwOlx0XHRhcmlhX3N1YnN0X2RpZmZfb2RkKFx1MDAyNnJlZzAsIFx1MDAyNnJlZzEsIFx1MDAyNnJlZzIsIFx1MDAyNnJlZzMpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjIyMTpcdFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFx1MDAyNnJlZzAsIFx1MDAyNnJlZzEsIFx1MDAyNnJlZzIsIFx1MDAyNnJlZzMpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIyMi1cdFx0cmtpZHgmIzQzOyYjNDM7O1xuLS1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNDctXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjQ4OnZvaWQgYXJpYV9lbmNyeXB0KHZvaWQgKl9jdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNDkte1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI1MDpcdHN0cnVjdCBhcmlhX2N0eCAqY3R4ID0gKHN0cnVjdCBhcmlhX2N0eCAqKV9jdHg7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjUxLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI1MjpcdF9fYXJpYV9jcnlwdChjdHgsIG91dCwgaW4sIGN0eC1cdTAwM2VlbmNfa2V5KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNTMtfVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI1NDpFWFBPUlRfU1lNQk9MX0dQTChhcmlhX2VuY3J5cHQpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI1NS1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNTY6dm9pZCBhcmlhX2RlY3J5cHQodm9pZCAqX2N0eCwgdTggKm91dCwgY29uc3QgdTggKmluKVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI1Ny17XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjU4Olx0c3RydWN0IGFyaWFfY3R4ICpjdHggPSAoc3RydWN0IGFyaWFfY3R4ICopX2N0eDtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNTktXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjYwOlx0X19hcmlhX2NyeXB0KGN0eCwgb3V0LCBpbiwgY3R4LVx1MDAzZWRlY19rZXkpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2MS19XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjYyOkVYUE9SVF9TWU1CT0xfR1BMKGFyaWFfZGVjcnlwdCk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjYzLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2NDpzdGF0aWMgdm9pZCBfX2FyaWFfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjY1LXtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNjY6XHRzdHJ1Y3QgYXJpYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjY3LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2ODpcdF9fYXJpYV9jcnlwdChjdHgsIG91dCwgaW4sIGN0eC1cdTAwM2VlbmNfa2V5KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNjktfVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI3MC1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzE6c3RhdGljIHZvaWQgX19hcmlhX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI3Mi17XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjczOlx0c3RydWN0IGFyaWFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI3NC1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzU6XHRfX2FyaWFfY3J5cHQoY3R4LCBvdXQsIGluLCBjdHgtXHUwMDNlZGVjX2tleSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjc2LX1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNzctXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjc4OnN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhcmlhX2FsZyA9IHtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzk6XHQuY3JhX25hbWVcdFx0PVx0XCYjMzQ7YXJpYVwmIzM0OyxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyODA6XHQuY3JhX2RyaXZlcl9uYW1lXHQ9XHRcJiMzNDthcmlhLWdlbmVyaWNcJiMzNDssXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjgxLVx0LmNyYV9wcmlvcml0eVx0XHQ9XHQxMDAsXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI4My1cdC5jcmFfYmxvY2tzaXplXHRcdD1cdEFSSUFfQkxPQ0tfU0laRSxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyODQ6XHQuY3JhX2N0eHNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCBhcmlhX2N0eCksXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjg1LVx0LmNyYV9tb2R1bGVcdFx0PVx0VEhJU19NT0RVTEUsXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI4OS1cdFx0XHQuY2lhX21heF9rZXlzaXplXHQ9XHRBUklBX01BWF9LRVlfU0laRSxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyOTA6XHRcdFx0LmNpYV9zZXRrZXlcdFx0PVx0YXJpYV9zZXRfa2V5LFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5MTpcdFx0XHQuY2lhX2VuY3J5cHRcdFx0PVx0X19hcmlhX2VuY3J5cHQsXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjkyOlx0XHRcdC5jaWFfZGVjcnlwdFx0XHQ9XHRfX2FyaWFfZGVjcnlwdFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI5My1cdFx0fVxuLS1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yOTYtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjk3OnN0YXRpYyBpbnQgX19pbml0IGFyaWFfaW5pdCh2b2lkKVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI5OC17XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjk5Olx0cmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoXHUwMDI2YXJpYV9hbGcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwMC19XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzAxLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMwMjpzdGF0aWMgdm9pZCBfX2V4aXQgYXJpYV9maW5pKHZvaWQpXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzAzLXtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzozMDQ6XHRjcnlwdG9fdW5yZWdpc3Rlcl9hbGcoXHUwMDI2YXJpYV9hbGcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwNS19XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzA2LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMwNzptb2R1bGVfaW5pdChhcmlhX2luaXQpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMwODptb2R1bGVfZXhpdChhcmlhX2ZpbmkpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwOS1cbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM9MzEyPU1PRFVMRV9BVVRIT1IoXCYjMzQ7VGFlaGVlIFlvbyBcdTAwM2NhcDQyMDA3M0BnbWFpbC5jb21cdTAwM2VcJiMzNDspO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMxMzpNT0RVTEVfQUxJQVNfQ1JZUFRPKFwmIzM0O2FyaWFcJiMzNDspO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMxNDpNT0RVTEVfQUxJQVNfQ1JZUFRPKFwmIzM0O2FyaWEtZ2VuZXJpY1wmIzM0Oyk7XG4tLVxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzNy5hc24xPTc3PVNpZ25lckluZm8gOjo9IFNFUVVFTkNFIHtcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMS03OC1cdHZlcnNpb25cdFx0XHRJTlRFR0VSICh7IHBrY3M3X25vdGVfc2lnbmVyaW5mb192ZXJzaW9uIH0pLFxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzNy5hc24xOjc5Olx0c2lkXHRcdFx0U2lnbmVySWRlbnRpZmllciwgLS0gQ01TIHZhcmlhbnQsIG5vdCBQS0NTIzdcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMS04MC1cdGRpZ2VzdEFsZ29yaXRobVx0XHREaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyICh7IHBrY3M3X3NpZ19ub3RlX2RpZ2VzdF9hbGdvIH0pLFxuLS1cbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczdfdHJ1c3QuYz0yMj1zdGF0aWMgaW50IHBrY3M3X3ZhbGlkYXRlX3RydXN0X29uZShzdHJ1Y3QgcGtjczdfbWVzc2FnZSAqcGtjczcsXG4tLVxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzN190cnVzdC5jLTU0LVx0XHRcdCAqIGlzIGFwcGFyZW50bHkgdGhlIHNhbWUgYXMgb25lIHdlIGFscmVhZHkgdHJ1c3QuXG5jcnlwdG8vYXN5bW1ldHJpY19rZXlzL3BrY3M3X3RydXN0LmM6NTU6XHRcdFx0ICogVmVyaWZ5IHRoYXQgdGhlIHRydXN0ZWQgdmFyaWFudCBjYW4gYWxzbyB2YWxpZGF0ZVxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzN190cnVzdC5jLTU2LVx0XHRcdCAqIHRoZSBzaWduYXR1cmUgb24gdGhlIGRlc2NlbmRhbnQuXG4tLVxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzOC5hc24xLTctLS1cbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczguYXNuMTo4Oi0tIFRoaXMgaXMgdGhlIHVuZW5jcnlwdGVkIHZhcmlhbnRcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczguYXNuMS05LS0tXG4tLVxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz02NDM9c3RhdGljIHZvaWQgY2FtZWxsaWFfc2V0dXAyNTYoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1MzIgKnN1YmtleSlcbi0tXG5jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jLTY0Ni1cdHUzMiBrcmxsLCBrcmxyLCBrcnJsLCBrcnJyOyAgICAvKiByaWdodCBoYWxmIG9mIGtleSAqL1xuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYzo2NDc6XHR1MzIgaWwsIGlyLCB0MCwgdDEsIHcwLCB3MTsgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqL1xuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYy02NDgtXHR1MzIgc3ViTFszNF07XG4tLVxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz04NDM9c3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZW5jcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgbWF4KVxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYy04NDQte1xuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYzo4NDU6XHR1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqL1xuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYy04NDYtXG4tLVxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz04OTg9c3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZGVjcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgaSlcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtODk5LXtcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmM6OTAwOlx0dTMyIGlsLCBpciwgdDAsIHQxOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi9cbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtOTAxLVxuLS1cbmNyeXB0by9oY3RyMi5jLTI3LS8qXG5jcnlwdG8vaGN0cjIuYzoyODogKiBUaGUgc3BlY2lmaWNhdGlvbiBhbGxvd3MgdmFyaWFibGUtbGVuZ3RoIHR3ZWFrcywgYnV0IExpbnV4JiMzOTtzIGNyeXB0byBBUElcbmNyeXB0by9oY3RyMi5jLTI5LSAqIGN1cnJlbnRseSBvbmx5IGFsbG93cyBhbGdvcml0aG1zIHRvIHN1cHBvcnQgYSBzaW5nbGUgbGVuZ3RoLiAgVGhlIFwmIzM0O25hdHVyYWxcJiMzNDtcbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jPTcwPXZvaWQgamVudF96ZnJlZSh2b2lkICpwdHIpXG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYy03Ni0gKiBPYnRhaW4gYSBoaWdoLXJlc29sdXRpb24gdGltZSBzdGFtcCB2YWx1ZS4gVGhlIHRpbWUgc3RhbXAgaXMgdXNlZCB0byBtZWFzdXJlXG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jOjc3OiAqIHRoZSBleGVjdXRpb24gdGltZSBvZiBhIGdpdmVuIGNvZGUgcGF0aCBhbmQgaXRzIHZhcmlhdGlvbnMuIEhlbmNlLCB0aGUgdGltZVxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYy03OC0gKiBzdGFtcCBtdXN0IGhhdmUgYSBzdWZmaWNpZW50bHkgaGlnaCByZXNvbHV0aW9uLlxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LXRlc3RpbmcuYz0yNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqamVudF9yYXdfZGVidWdmc19yb290ID0gTlVMTDtcbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS10ZXN0aW5nLmMtMzAtLypcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LXRlc3RpbmcuYzozMTogKiBib290IHZhcmlhYmxlOlxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jLTMyLSAqIDAgPT1cdTAwM2UgTm8gYm9vdCB0ZXN0LCBnYXRoZXJpbmcgb2YgcnVudGltZSBkYXRhIGFsbG93ZWRcbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTY0PXN0cnVjdCByYW5kX2RhdGEge1xuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtMTE2LSNkZWZpbmUgSkVOVF9FTk9NT05PVE9OSUNcdDMgLyogVGltZXIgaXMgbm90IG1vbm90b25pYyBpbmNyZWFzaW5nICovXG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjExNzojZGVmaW5lIEpFTlRfRVZBUlZBUlx0XHQ1IC8qIFRpbWVyIGRvZXMgbm90IHByb2R1Y2UgdmFyaWF0aW9ucyBvZlxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzoxMTg6XHRcdFx0XHQgICAqIHZhcmlhdGlvbnMgKDJuZCBkZXJpdmF0aW9uIG9mIHRpbWUgaXNcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtMTE5LVx0XHRcdFx0ICAgKiB6ZXJvKS4gKi9cbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTQyMj1zdGF0aWMgdm9pZCBqZW50X2NvbmRpdGlvbl9kYXRhKHN0cnVjdCByYW5kX2RhdGEgKmVjLCBfX3U2NCB0aW1lLCBpbnQgc3R1Y2spXG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDEtLypcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NDQyOiAqIE1lbW9yeSBBY2Nlc3Mgbm9pc2Ugc291cmNlIC0tIHRoaXMgaXMgYSBub2lzZSBzb3VyY2UgYmFzZWQgb24gdmFyaWF0aW9ucyBpblxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDMtICpcdFx0XHRcdCBtZW1vcnkgYWNjZXNzIHRpbWVzXG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDUtICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtZW1vcnkgYWNjZXNzZXMgd2hpY2ggd2lsbCBhZGQgdG8gdGhlIHRpbWluZ1xuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo0NDY6ICogdmFyaWF0aW9ucyBkdWUgdG8gYW4gdW5rbm93biBhbW91bnQgb2YgQ1BVIHdhaXQgc3RhdGVzIHRoYXQgbmVlZCB0byBiZVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDctICogYWRkZWQgd2hlbiBhY2Nlc3NpbmcgbWVtb3J5LiBUaGUgbWVtb3J5IHNpemUgc2hvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBMMVxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNDUxLSAqIHNsb3dlciB0aGFuIGFjY2Vzc2luZyBDUFUgcmVnaXN0ZXJzLiBUaGVyZWZvcmUsIEwxIGFjY2Vzc2VzIG9ubHkgYWRkIG1pbmltYWxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NDUyOiAqIHZhcmlhdGlvbnMgYXMgdGhlIENQVSBoYXMgaGFyZGx5IHRvIHdhaXQuIFN0YXJ0aW5nIHdpdGggTDIsIHNpZ25pZmljYW50XG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjQ1MzogKiB2YXJpYXRpb25zIGFyZSBhZGRlZCBiZWNhdXNlIEwyIHR5cGljYWxseSBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIENQVSBhbnkgbW9yZVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NTQtICogYW5kIHRoZXJlZm9yZSBhIHdpZGVyIHJhbmdlIG9mIENQVSB3YWl0IHN0YXRlcyBpcyBuZWNlc3NhcnkgZm9yIGFjY2Vzc2VzLlxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM9NTE5PXN0YXRpYyBpbnQgamVudF9tZWFzdXJlX2ppdHRlcihzdHJ1Y3QgcmFuZF9kYXRhICplYywgX191NjQgKnJldF9jdXJyZW50X2RlbHRhKVxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNTI0LVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo1MjU6XHQvKiBJbnZva2Ugb25lIG5vaXNlIHNvdXJjZSBiZWZvcmUgdGltZSBtZWFzdXJlbWVudCB0byBhZGQgdmFyaWF0aW9ucyAqL1xuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MjYtXHRqZW50X21lbWFjY2VzcyhlYywgMCk7XG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MjktXHQgKiBHZXQgdGltZSBzdGFtcCBhbmQgY2FsY3VsYXRlIHRpbWUgZGVsdGEgdG8gcHJldmlvdXNcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NTMwOlx0ICogaW52b2NhdGlvbiB0byBtZWFzdXJlIHRoZSB0aW1pbmcgdmFyaWF0aW9uc1xuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MzEtXHQgKi9cbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTY1ND1zdHJ1Y3QgcmFuZF9kYXRhICpqZW50X2VudHJvcHlfY29sbGVjdG9yX2FsbG9jKHVuc2lnbmVkIGludCBvc3IsXG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy02NjQtXHRpZiAoIShmbGFncyBcdTAwMjYgSkVOVF9ESVNBQkxFX01FTU9SWV9BQ0NFU1MpKSB7XG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjY2NTpcdFx0LyogQWxsb2NhdGUgbWVtb3J5IGZvciBhZGRpbmcgdmFyaWF0aW9ucyBiYXNlZCBvbiBtZW1vcnlcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNjY2LVx0XHQgKiBhY2Nlc3Ncbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTcwND1pbnQgamVudF9lbnRyb3B5X2luaXQodW5zaWduZWQgaW50IG9zciwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNzgzLVx0XHQvKlxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo3ODQ6XHRcdCAqIHVwIHRvIGhlcmUgd2UgZGlkIG5vdCBtb2RpZnkgYW55IHZhcmlhYmxlIHRoYXQgd2lsbCBiZVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy03ODUtXHRcdCAqIGV2YWx1YXRlZCBsYXRlciwgYnV0IHdlIGFscmVhZHkgcGVyZm9ybWVkIHNvbWUgd29yay4gVGh1cyB3ZVxuLS1cbmNyeXB0by9zZXJwZW50X2dlbmVyaWMuYy0yMjQtICogYm90aCBnY2MgYW5kIGNsYW5nIGhhdmUgbWlzb3B0aW1pemVkIHRoaXMgZnVuY3Rpb24gaW4gdGhlIHBhc3QsXG5jcnlwdG8vc2VycGVudF9nZW5lcmljLmM6MjI1OiAqIHByb2R1Y2luZyBob3JyaWJsZSBvYmplY3QgY29kZSBmcm9tIHNwaWxsaW5nIHRlbXBvcmFyeSB2YXJpYWJsZXNcbmNyeXB0by9zZXJwZW50X2dlbmVyaWMuYy0yMjYtICogb24gdGhlIHN0YWNrLiBGb3JjaW5nIHRoaXMgcGFydCBvdXQgb2YgbGluZSBhdm9pZHMgdGhhdC5cbi0tXG5jcnlwdG8vdGNyeXB0LmM9MTQ1OD1zdGF0aWMgaW50IGRvX3Rlc3QoY29uc3QgY2hhciAqYWxnLCB1MzIgdHlwZSwgdTMyIG1hc2ssIGludCBtLCB1MzIgbnVtX21iKVxuLS1cbmNyeXB0by90Y3J5cHQuYy0xNjg3LVx0Y2FzZSA1ODpcbmNyeXB0by90Y3J5cHQuYzoxNjg4Olx0XHRyZXQgPSBtaW4ocmV0LCB0Y3J5cHRfdGVzdChcJiMzNDtnY20oYXJpYSlcJiMzNDspKTtcbmNyeXB0by90Y3J5cHQuYy0xNjg5LVx0XHRicmVhaztcbi0tXG5jcnlwdG8vdGNyeXB0LmMtMTgyNy1cdGNhc2UgMTkyOlxuY3J5cHRvL3RjcnlwdC5jOjE4Mjg6XHRcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFwmIzM0O2VjYihhcmlhKVwmIzM0OykpO1xuY3J5cHRvL3RjcnlwdC5jOjE4Mjk6XHRcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFwmIzM0O2NiYyhhcmlhKVwmIzM0OykpO1xuY3J5cHRvL3RjcnlwdC5jOjE4MzA6XHRcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFwmIzM0O2N0cihhcmlhKVwmIzM0OykpO1xuY3J5cHRvL3RjcnlwdC5jLTE4MzEtXHRcdGJyZWFrO1xuLS1cbmNyeXB0by90Y3J5cHQuYy0yMTYxLVx0Y2FzZSAyMjc6XG5jcnlwdG8vdGNyeXB0LmM6MjE2MjpcdFx0dGVzdF9jaXBoZXJfc3BlZWQoXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjE2My1cdFx0XHRcdCAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xuY3J5cHRvL3RjcnlwdC5jOjIxNjQ6XHRcdHRlc3RfY2lwaGVyX3NwZWVkKFwmIzM0O2VjYihhcmlhKVwmIzM0OywgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxuY3J5cHRvL3RjcnlwdC5jLTIxNjUtXHRcdFx0XHQgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyMTY2Olx0XHR0ZXN0X2NpcGhlcl9zcGVlZChcJiMzNDtjYmMoYXJpYSlcJiMzNDssIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCxcbmNyeXB0by90Y3J5cHQuYy0yMTY3LVx0XHRcdFx0ICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XG5jcnlwdG8vdGNyeXB0LmM6MjE2ODpcdFx0dGVzdF9jaXBoZXJfc3BlZWQoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7LCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjE2OS1cdFx0XHRcdCAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xuY3J5cHRvL3RjcnlwdC5jOjIxNzA6XHRcdHRlc3RfY2lwaGVyX3NwZWVkKFwmIzM0O2N0cihhcmlhKVwmIzM0OywgRU5DUllQVCwgc2VjLCBOVUxMLCAwLFxuY3J5cHRvL3RjcnlwdC5jLTIxNzEtXHRcdFx0XHQgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyMTcyOlx0XHR0ZXN0X2NpcGhlcl9zcGVlZChcJiMzNDtjdHIoYXJpYSlcJiMzNDssIERFQ1JZUFQsIHNlYywgTlVMTCwgMCxcbmNyeXB0by90Y3J5cHQuYy0yMTczLVx0XHRcdFx0ICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XG4tLVxuY3J5cHRvL3RjcnlwdC5jLTIxNzYtXHRjYXNlIDIyODpcbmNyeXB0by90Y3J5cHQuYzoyMTc3Olx0XHR0ZXN0X2FlYWRfc3BlZWQoXCYjMzQ7Z2NtKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsXG5jcnlwdG8vdGNyeXB0LmMtMjE3OC1cdFx0XHRcdE5VTEwsIDAsIDE2LCA4LCBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XG5jcnlwdG8vdGNyeXB0LmM6MjE3OTpcdFx0dGVzdF9hZWFkX3NwZWVkKFwmIzM0O2djbShhcmlhKVwmIzM0OywgREVDUllQVCwgc2VjLFxuY3J5cHRvL3RjcnlwdC5jLTIxODAtXHRcdFx0XHROVUxMLCAwLCAxNiwgOCwgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xuLS1cbmNyeXB0by90Y3J5cHQuYy0yMTgzLVx0Y2FzZSAyMjk6XG5jcnlwdG8vdGNyeXB0LmM6MjE4NDpcdFx0dGVzdF9tYl9hZWFkX3NwZWVkKFwmIzM0O2djbShhcmlhKVwmIzM0OywgRU5DUllQVCwgc2VjLCBOVUxMLCAwLCAxNiwgOCxcbmNyeXB0by90Y3J5cHQuYy0yMTg1LVx0XHRcdFx0ICAgc3BlZWRfdGVtcGxhdGVfMTYsIG51bV9tYik7XG5jcnlwdG8vdGNyeXB0LmM6MjE4NjpcdFx0dGVzdF9tYl9hZWFkX3NwZWVkKFwmIzM0O2djbShhcmlhKVwmIzM0OywgREVDUllQVCwgc2VjLCBOVUxMLCAwLCAxNiwgOCxcbmNyeXB0by90Y3J5cHQuYy0yMTg3LVx0XHRcdFx0ICAgc3BlZWRfdGVtcGxhdGVfMTYsIG51bV9tYik7XG4tLVxuY3J5cHRvL3RjcnlwdC5jLTI1NjktXHRjYXNlIDUxOTpcbmNyeXB0by90Y3J5cHQuYzoyNTcwOlx0XHR0ZXN0X2FjaXBoZXJfc3BlZWQoXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjU3MS1cdFx0XHRcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyNTcyOlx0XHR0ZXN0X2FjaXBoZXJfc3BlZWQoXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjU3My1cdFx0XHRcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyNTc0Olx0XHR0ZXN0X2FjaXBoZXJfc3BlZWQoXCYjMzQ7Y3RyKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjU3NS1cdFx0XHRcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyNTc2Olx0XHR0ZXN0X2FjaXBoZXJfc3BlZWQoXCYjMzQ7Y3RyKGFyaWEpXCYjMzQ7LCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjU3Ny1cdFx0XHRcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbi0tXG5jcnlwdG8vdGNyeXB0LmMtMjc3My1cdGNhc2UgNjEwOlxuY3J5cHRvL3RjcnlwdC5jOjI3NzQ6XHRcdHRlc3RfbWJfc2tjaXBoZXJfc3BlZWQoXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjc3NS1cdFx0XHRcdCAgICAgICBzcGVlZF90ZW1wbGF0ZV8xNl8zMiwgbnVtX21iKTtcbmNyeXB0by90Y3J5cHQuYzoyNzc2Olx0XHR0ZXN0X21iX3NrY2lwaGVyX3NwZWVkKFwmIzM0O2VjYihhcmlhKVwmIzM0OywgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxuY3J5cHRvL3RjcnlwdC5jLTI3NzctXHRcdFx0XHQgICAgICAgc3BlZWRfdGVtcGxhdGVfMTZfMzIsIG51bV9tYik7XG5jcnlwdG8vdGNyeXB0LmM6Mjc3ODpcdFx0dGVzdF9tYl9za2NpcGhlcl9zcGVlZChcJiMzNDtjdHIoYXJpYSlcJiMzNDssIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCxcbmNyeXB0by90Y3J5cHQuYy0yNzc5LVx0XHRcdFx0ICAgICAgIHNwZWVkX3RlbXBsYXRlXzE2XzMyLCBudW1fbWIpO1xuY3J5cHRvL3RjcnlwdC5jOjI3ODA6XHRcdHRlc3RfbWJfc2tjaXBoZXJfc3BlZWQoXCYjMzQ7Y3RyKGFyaWEpXCYjMzQ7LCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjc4MS1cdFx0XHRcdCAgICAgICBzcGVlZF90ZW1wbGF0ZV8xNl8zMiwgbnVtX21iKTtcbi0tXG5jcnlwdG8vdGVzdG1nci5jPTQwNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjIGFsZ190ZXN0X2Rlc2NzW10gPSB7XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQwLVx0fSwge1xuY3J5cHRvL3Rlc3RtZ3IuYzo0MzQxOlx0XHQuYWxnID0gXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7LFxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQyLVx0XHQudGVzdCA9IGFsZ190ZXN0X3NrY2lwaGVyLFxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQzLVx0XHQuc3VpdGUgPSB7XG5jcnlwdG8vdGVzdG1nci5jOjQzNDQ6XHRcdFx0LmNpcGhlciA9IF9fVkVDUyhhcmlhX2NiY190dl90ZW1wbGF0ZSlcbmNyeXB0by90ZXN0bWdyLmMtNDM0NS1cdFx0fSxcbi0tXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTMtXHR9LCB7XG5jcnlwdG8vdGVzdG1nci5jOjQ1MTQ6XHRcdC5hbGcgPSBcJiMzNDtjdHIoYXJpYSlcJiMzNDssXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTUtXHRcdC50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTYtXHRcdC5zdWl0ZSA9IHtcbmNyeXB0by90ZXN0bWdyLmM6NDUxNzpcdFx0XHQuY2lwaGVyID0gX19WRUNTKGFyaWFfY3RyX3R2X3RlbXBsYXRlKVxuY3J5cHRvL3Rlc3RtZ3IuYy00NTE4LVx0XHR9XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc0LVx0fSwge1xuY3J5cHRvL3Rlc3RtZ3IuYzo0Njc1Olx0XHQuYWxnID0gXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LFxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc2LVx0XHQudGVzdCA9IGFsZ190ZXN0X3NrY2lwaGVyLFxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc3LVx0XHQuc3VpdGUgPSB7XG5jcnlwdG8vdGVzdG1nci5jOjQ2Nzg6XHRcdFx0LmNpcGhlciA9IF9fVkVDUyhhcmlhX3R2X3RlbXBsYXRlKVxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc5LVx0XHR9XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuYy00ODk4LVx0fSwge1xuY3J5cHRvL3Rlc3RtZ3IuYzo0ODk5Olx0XHQuYWxnID0gXCYjMzQ7Z2NtKGFyaWEpXCYjMzQ7LFxuY3J5cHRvL3Rlc3RtZ3IuYzo0OTAwOlx0XHQuZ2VuZXJpY19kcml2ZXIgPSBcJiMzNDtnY21fYmFzZShjdHIoYXJpYS1nZW5lcmljKSxnaGFzaC1saWIpXCYjMzQ7LFxuY3J5cHRvL3Rlc3RtZ3IuYy00OTAxLVx0XHQudGVzdCA9IGFsZ190ZXN0X2FlYWQsXG5jcnlwdG8vdGVzdG1nci5jLTQ5MDItXHRcdC5zdWl0ZSA9IHtcbmNyeXB0by90ZXN0bWdyLmM6NDkwMzpcdFx0XHQuYWVhZCA9IF9fVkVDUyhhcmlhX2djbV90dl90ZW1wbGF0ZSlcbmNyeXB0by90ZXN0bWdyLmMtNDkwNC1cdFx0fVxuLS1cbmNyeXB0by90ZXN0bWdyLmg9MjYyODE9c3RhdGljIGNvbnN0IHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBzZWVkX3R2X3RlbXBsYXRlW10gPSB7XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuaC0yNjMyMS0gKi9cbmNyeXB0by90ZXN0bWdyLmg6MjYzMjI6c3RhdGljIGNvbnN0IHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBhcmlhX3R2X3RlbXBsYXRlW10gPSB7XG5jcnlwdG8vdGVzdG1nci5oLTI2MzIzLVx0e1xuLS1cbmNyeXB0by90ZXN0bWdyLmgtMjYzNTUtXG5jcnlwdG8vdGVzdG1nci5oOjI2MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYXJpYV9jYmNfdHZfdGVtcGxhdGVbXSA9IHtcbmNyeXB0by90ZXN0bWdyLmgtMjYzNTctXHR7XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuaC0yNzI1OS1cbmNyeXB0by90ZXN0bWdyLmg6MjcyNjA6c3RhdGljIGNvbnN0IHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBhcmlhX2N0cl90dl90ZW1wbGF0ZVtdID0ge1xuY3J5cHRvL3Rlc3RtZ3IuaC0yNzI2MS1cdHtcbi0tXG5jcnlwdG8vdGVzdG1nci5oLTI4MTYzLVxuY3J5cHRvL3Rlc3RtZ3IuaDoyODE2NDpzdGF0aWMgY29uc3Qgc3RydWN0IGFlYWRfdGVzdHZlYyBhcmlhX2djbV90dl90ZW1wbGF0ZVtdID0ge1xuY3J5cHRvL3Rlc3RtZ3IuaC0yODE2NS1cdHtcbi0tXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYz0xMDk9c3RhdGljIGNvbnN0IHUzMiBtZHNbNF1bMjU2XSA9IHtcbi0tXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYy0zMTMtICogZnJvbSB0aGUgVHdvZmlzaCBwYXBlci4gIEkmIzM5O3ZlIG9ubHkgaW5jbHVkZWQgdGhlIHRhYmxlIGVudHJpZXMgSSBhY3R1YWxseVxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmM6MzE0OiAqIG5lZWQ7IEkgbmV2ZXIgZG8gYSBsb29rdXAgb24gYSB2YXJpYWJsZSBpbnB1dCBvZiB6ZXJvIGFuZCB0aGUgYmlnZ2VzdFxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmM6MzE1OiAqIGV4cG9uZW50cyBJJiMzOTtsbCBldmVyIHNlZSBhcmUgMjU0ICh2YXJpYWJsZSkgYW5kIDIzNyAoY29uc3RhbnQpLCBzbyB0aGV5JiMzOTtsbFxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmMtMzE2LSAqIG5ldmVyIHN1bSB0byBtb3JlIHRoYW4gNDkxLlx0SSYjMzk7bSByZXBlYXRpbmcgcGFydCBvZiB0aGUgZXhwX3RvX3BvbHkgdGFibGVcbi0tXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYy0zMTgtICogU2luY2UgSSBrbm93IG15IGNvbnN0YW50IG9wZXJhbmRzIGFyZSBuZXZlciB6ZXJvLCBJIG9ubHkgaGF2ZSB0byB3b3JyeVxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmM6MzE5OiAqIGFib3V0IHplcm8gdmFsdWVzIGluIHRoZSB2YXJpYWJsZSBvcGVyYW5kLCBhbmQgSSBkbyBpdCB3aXRoIGEgc2ltcGxlXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYy0zMjAtICogY29uZGl0aW9uYWwgYnJhbmNoLlx0SSBrbm93IGNvbmRpdGlvbmFscyBhcmUgZXhwZW5zaXZlLCBidXQgSSBjb3VsZG4mIzM5O3Rcbi0tXG5jcnlwdG8vdHdvZmlzaF9nZW5lcmljLmMtODAtICogYW5kIHNpbXVsdGFuZW91c2x5IHBlcmZvcm0gdGhlIHdoaXRlbmluZyBzdGVwLiAgSU5QQUNLIHBhY2tzIHdvcmRcbmNyeXB0by90d29maXNoX2dlbmVyaWMuYzo4MTogKiBudW1iZXIgbiBpbnRvIHRoZSB2YXJpYWJsZSBuYW1lZCBieSB4LCB1c2luZyB3aGl0ZW5pbmcgc3Via2V5IG51bWJlciBtLlxuY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jOjgyOiAqIE9VVFVOUEFDSyB1bnBhY2tzIHdvcmQgbnVtYmVyIG4gZnJvbSB0aGUgdmFyaWFibGUgbmFtZWQgYnkgeCwgdXNpbmdcbmNyeXB0by90d29maXNoX2dlbmVyaWMuYy04My0gKiB3aGl0ZW5pbmcgc3Via2V5IG51bWJlciBtLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ4NAoJCQkJCQkJb3V0cHV0OiAyNzIKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIGFkZGluZyBzdGF0aWMgYWxnb3JpdGhtIGRlZmluaXRpb25zIOKAkyBzcGVjaWZpY2FsbHkgZm9yIGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCDigJMgdG8gdGhlIGBlYWxnX2xpc3RgIHRhYmxlIHdpdGhpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLCB3cml0dGVuLCBvciBsZWFrZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBoZXJlLgoKRmlyc3QsIEkgZXhhbWluZWQgYHhmcm1fYWxnb19kZXNjYC4gSXQmIzM5O3MgYSBzdGF0aWMgc3RydWN0dXJlLCB3aGljaCBpcyBnb29kLiBCZWNhdXNlIGl0JiMzOTtzIHN0YXRpYywgdGhlIGNvbXBpbGVyIHdpbGwgaGFuZGxlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYW55IHVuc3BlY2lmaWVkIGZpZWxkcy4gVGhhdCYjMzk7cyBhIGh1Z2Ugd2luLCBlbGltaW5hdGluZyBhIGNvbW1vbiBzb3VyY2Ugb2YgYnVncyByaWdodCBvZmYgdGhlIGJhdC4gU28gZmFyLCBzbyBnb29kLgoKTmV4dCwgSSBsb29rZWQgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbnMsIHVzZXJzcGFjZSBjb3BpZXMsIG9yIGFueSBuZXcgdW5pbml0aWFsaXplZCBkYXRhIHBhdGhzIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgYW5hbHlzaXMgc2hvd3MgdGhhdCB0aGVyZSBhcmVu4oCZdCBhbnkuIFRoaXMgcGF0Y2ggKml0c2VsZiogZG9lc24mIzM5O3QgdG91Y2ggYW55IG9mIHRoZSBleGlzdGluZyBidWZmZXIgaGFuZGxpbmcgb3IgcG9pbnRlciBhcml0aG1ldGljIGluIGB4ZnJtX2FsZ28uY2AuIEl0JiMzOTtzIGp1c3QgcG9wdWxhdGluZyB0aGUgdGFibGUuICBUaGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMuIEZ1cnRoZXJtb3JlLCB0aGUgYWxnb3JpdGhtcyB0aGVtc2VsdmVzIOKAkyBgYXJpYWAsIGFuZCB0aGUgdGVtcGxhdGVzIGxpa2UgYGVjaGFpbml2YCwgYHNlcWl2YCwgYHJmYzM2ODZgLCBgY3RyYCwgYW5kIGBjYmNgIOKAkyBhcmUgYWxsIHByZS1leGlzdGluZyBzdGFuZGFyZCBjcnlwdG8gZHJpdmVycyBhbmQgdGVtcGxhdGVzIHdpdGhpbiB0aGUgY3J5cHRvIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCB0aGUgb3JpZ2luIG9mIGFueSBzdWNoIHJpc2tzLgoKU2luY2UgZXhpc3RpbmcgWEZSTSBzdGF0ZXMgY29uZmlndXJlZCB3aXRoIHRoZXNlIGFsZ29yaXRobXMgdXNlIGFsbG9jYXRlZCBza2NpcGhlciB0ZW1wbGF0ZXMsIHRoZXJlIGlzIG5vIHJlYWwgY2hhbmdlIHRoYXQgd291bGQgb3BlbiB0aGlzIHVwLgoKQmVjYXVzZSBvZiB0aGlzLCBJIGJlbGlldmUgaXQmIzM5O3MgdmVyeSB1bmxpa2VseSB0aGF0IGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHdpbGwgYXJpc2UgZnJvbSB0aGlzIGFkZGl0aW9uLiBTaW5jZSB0aGVyZSYjMzk7cyBubyBjb2RlIHRoYXQgd291bGQgaW52b2x2ZSBhIGNvcHkgdG8gdXNlciwgdGhlcmUgc2hvdWxkIGJlIG5vIG9wcG9ydHVuaXR5IGZvciBhbiBpbmZvLWxlYWsuCgpOb3csIGNvbmNlcm5pbmcgaW5zdHJ1bWVudGF0aW9uIGFuZCB0ZXN0aW5nLCBJIHRoaW5rIEtBU0FOIGFscmVhZHkgYWRlcXVhdGVseSBoYW5kbGVzIHRoZSBtZW1vcnkgYWNjZXNzIGlzc3VlcywgYnVmZmVyIGJvdW5kcyBlcnJvcnMsIGV0Yy4sIHRoYXQgbWlnaHQgYXJpc2Ugd2hlbiB0aGVzZSBhbGdvcml0aG1zIGFyZSB1c2VkIGluIFhGUk0uIFRoZXJlZm9yZSwgdGhlIGFkZGl0aW9uIG9mIEtNU0FOIGlzbiYjMzk7dCB3YXJyYW50ZWQgaGVyZS4KClN1bW1hcml6aW5nIG15IHJlYXNvbmluZzoKCjEuICAqKldoYXQmIzM5O3MgYmVpbmcgYWRkZWQqKjogV2UmIzM5O3JlIGp1c3QgYWRkaW5nIHRoZSBuZXcgY2lwaGVyIHN1aXRlcyB0byBhIHN0YXRpYyB0YWJsZS4KMi4gICoqU3RhdGljIGluaXRpYWxpemF0aW9uKio6IFRoZSB0YWJsZSBlbnRyaWVzIGFyZSBzdGF0aWMgYHhmcm1fYWxnb19kZXNjYCBzdHJ1Y3RzLCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4KMy4gICoqTm8gcmlzayBpbnRyb2R1Y2VkKio6IE5vIG5ldyBoZWFwIG9yIHN0YWNrLCBzaXplIGNhbGN1bGF0aW9ucywgY29udHJvbCBmbG93IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLgo0LiAgKipLQVNBTiBhZGVxdWFjeSoqOiBLQVNBTiBhbHJlYWR5IGFkZHJlc3NlcyBtZW1vcnkgYm91bmRzIGFuZCB2YWxpZGl0eSBpc3N1ZXMgZHVyaW5nIFhGUk0gYW5kIGNyeXB0byBvcGVyYXRpb25zLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LgoKU28sIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtZXJlbHkgcmVnaXN0ZXJzIHR3byBleGlzdGluZyBjaXBoZXIgc3VpdGVzIChcJiMzNDtjYmMoYXJpYSlcJiMzNDsgYW5kIFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OykgaW50byB0aGUgc3RhdGljIGBlYWxnX2xpc3RgIHRhYmxlIGluIGBuZXQveGZybS94ZnJtX2FsZ28uY2AgdG8gZW5hYmxlIHRoZWlyIHVzZSBpbiBYRlJNL0lQc2VjLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBcdTAwMjYgSW5mby1sZWFrIEFuYWx5c2lzOlxuLSBUaGUgYWRkZWQgZW50cmllcyBhcmUgc3RhdGljIGBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2NgIGRlZmluaXRpb25zIGluIGAuZGF0YWAgLyBgLnJvZGF0YWAgd2hlcmUgdW5zcGVjaWZpZWQgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci5cbi0gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiwgc3RhY2sgdmFyaWFibGUgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zdXJlLCBvciBuZXRsaW5rIC8gYGNvcHlfdG9fdXNlcmAgZGF0YSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG4tIE5vIGNvbnRyb2wgZmxvdyBvciBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY2hhbmdlZCB0aGF0IGNvdWxkIGNhdXNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBjaXBoZXIgY29udGV4dHMsIHNrY2lwaGVyIGNyeXB0byBvcGVyYXRpb25zLCBvciBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIChvdXQtb2YtYm91bmRzIGFjY2VzcywgYnVmZmVyIG92ZXJydW5zLCB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXG4tIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWVyZWx5IHJlZ2lzdGVycyB0d28gZXhpc3RpbmcgY2lwaGVyIHN1aXRlcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcbi0gVGhlIGFkZGVkIGVudHJpZXMgYXJlIHN0YXRpYyBgc3RydWN0IHhmcm1fYWxnb19kZXNjYCBkZWZpbml0aW9ucyBpbiBgLmRhdGFgIC8gYC5yb2RhdGFgIHdoZXJlIHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuXG4tIE5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24sIHN0YWNrIHZhcmlhYmxlIGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc3VyZSwgb3IgbmV0bGluayAvIGBjb3B5X3RvX3VzZXJgIGRhdGEgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxuLSBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzg6NTEuNjAzMzYzNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNTEwMjk5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9BTEdPXCIsXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIkNSWVBUT19BUklBXCIsXG4gICAgXCJDUllQVE9fQ0JDXCIsXG4gICAgXCJDUllQVE9fQ1RSXCIsXG4gICAgXCJJTkVUX0VTUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZWFsZ19nZXRfYnluYW1lXCIsXG4gICAgXCJ4ZnJtX2ZpbmRfYWxnb1wiLFxuICAgIFwieGZybV9wcm9iZV9hbGdzXCIsXG4gICAgXCJhdHRhY2hfY3J5cHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1lcmVseSByZWdpc3RlcnMgdHdvIGV4aXN0aW5nIGNpcGhlciBzdWl0ZXMgKFxcXCJjYmMoYXJpYSlcXFwiIGFuZCBcXFwicmZjMzY4NihjdHIoYXJpYSkpXFxcIikgaW50byB0aGUgc3RhdGljIGBlYWxnX2xpc3RgIHRhYmxlIGluIGBuZXQveGZybS94ZnJtX2FsZ28uY2AgdG8gZW5hYmxlIHRoZWlyIHVzZSBpbiBYRlJNL0lQc2VjLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFxcdTAwMjYgSW5mby1sZWFrIEFuYWx5c2lzOlxcbi0gVGhlIGFkZGVkIGVudHJpZXMgYXJlIHN0YXRpYyBgc3RydWN0IHhmcm1fYWxnb19kZXNjYCBkZWZpbml0aW9ucyBpbiBgLmRhdGFgIC8gYC5yb2RhdGFgIHdoZXJlIHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuXFxuLSBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLCBzdGFjayB2YXJpYWJsZSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcgZXhwb3N1cmUsIG9yIG5ldGxpbmsgLyBgY29weV90b191c2VyYCBkYXRhIHRyYW5zZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIE5vIGNvbnRyb2wgZmxvdyBvciBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY2hhbmdlZCB0aGF0IGNvdWxkIGNhdXNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBjaXBoZXIgY29udGV4dHMsIHNrY2lwaGVyIGNyeXB0byBvcGVyYXRpb25zLCBvciBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIChvdXQtb2YtYm91bmRzIGFjY2VzcywgYnVmZmVyIG92ZXJydW5zLCB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXFxuLSBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEFSSUEgY2lwaGVyIGFsZ29yaXRobXMgKFxcXCJjYmMoYXJpYSlcXFwiIGFuZCBcXFwicmZjMzY4NihjdHIoYXJpYSkpXFxcIikgdG8gdGhlIFhGUk0gZW5jcnlwdGlvbiBhbGdvcml0aG0gcmVnaXN0cnkgKGVhbGdfbGlzdCkuIFRoaXMgZW5hYmxlcyB1c2VyLXNwYWNlIHZpYSBYRlJNIE5ldGxpbmsgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBJUHNlYyBTQXMgd2l0aCBBUklBIGVuY3J5cHRpb24sIGV4ZXJjaXNpbmcgdGhlIGNyeXB0byBzdWJzeXN0ZW0gYW5kIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM4OjUxLjYwMzM2OTU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA3ODUyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYTUzZDZlY2RlMjU4Y2FjMDA0NGI1ZTlmMGU5MjZkYzAzMzU5MmU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDY6Mzg6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uY1xcbmluZGV4IDcwNDM0NDk1ZjIzZjUuLjE2YzcwZGMxYTQyNjggMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2FsZ28uY1xcbkBAIC01MTIsNiArNTEyLDM0IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgZWFsZ19saXN0W10gPSB7XFxuIFxcdFxcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XFxuIFxcdH1cXG4gfSxcXG4re1xcbitcXHQubmFtZSA9IFxcXCJjYmMoYXJpYSlcXFwiLFxcbitcXHQuY29tcGF0ID0gXFxcImFyaWFcXFwiLFxcbitcXG4rXFx0LnVpbmZvID0ge1xcbitcXHRcXHQuZW5jciA9IHtcXG4rXFx0XFx0XFx0Lmdlbml2ID0gXFxcImVjaGFpbml2XFxcIixcXG4rXFx0XFx0XFx0LmJsb2NrYml0cyA9IDEyOCxcXG4rXFx0XFx0XFx0LmRlZmtleWJpdHMgPSAyNTYsXFxuK1xcdFxcdH1cXG4rXFx0fSxcXG4rXFxuK1xcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxcbit9LFxcbit7XFxuK1xcdC5uYW1lID0gXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIsXFxuK1xcdC5jb21wYXQgPSBcXFwiYXJpYVxcXCIsXFxuK1xcbitcXHQudWluZm8gPSB7XFxuK1xcdFxcdC5lbmNyID0ge1xcbitcXHRcXHRcXHQuZ2VuaXYgPSBcXFwic2VxaXZcXFwiLFxcbitcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbitcXHRcXHRcXHQuZGVma2V5Yml0cyA9IDE2MCxcXG4rXFx0XFx0fVxcbitcXHR9LFxcbitcXG4rXFx0LnBma2V5X3N1cHBvcnRlZCA9IDAsXFxuK30sXFxuIHtcXG4gXFx0Lm5hbWUgPSBcXFwiY2JjKHR3b2Zpc2gpXFxcIixcXG4gXFx0LmNvbXBhdCA9IFxcXCJ0d29maXNoXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzg6NTIuMTk0NzgzODY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MzIxNTYzNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNXCIsXG4gICAgXCJYRlJNX0FMR09cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiQ1JZUFRPX0FSSUFcIixcbiAgICBcIkNSWVBUT19DQkNcIixcbiAgICBcIkNSWVBUT19DVFJcIixcbiAgICBcIklORVRfRVNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9lYWxnX2dldF9ieW5hbWVcIixcbiAgICBcInhmcm1fZmluZF9hbGdvXCIsXG4gICAgXCJ4ZnJtX3Byb2JlX2FsZ3NcIixcbiAgICBcImF0dGFjaF9jcnlwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXFxcImNiYyhhcmlhKVxcXCIgYW5kIFxcXCJyZmMzNjg2KGN0cihhcmlhKSlcXFwiKSB0byB0aGUgWEZSTSBlbmNyeXB0aW9uIGFsZ29yaXRobSByZWdpc3RyeSAoZWFsZ19saXN0KS4gVGhpcyBlbmFibGVzIHVzZXItc3BhY2UgdmlhIFhGUk0gTmV0bGluayBpbnRlcmZhY2UgdG8gY29uZmlndXJlIElQc2VjIFNBcyB3aXRoIEFSSUEgZW5jcnlwdGlvbiwgZXhlcmNpc2luZyB0aGUgY3J5cHRvIHN1YnN5c3RlbSBhbmQgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYTUzZDZlY2RlMjU4Y2FjMDA0NGI1ZTlmMGU5MjZkYzAzMzU5MmU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNjozODo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fYWxnby5jIGIvbmV0L3hmcm0veGZybV9hbGdvLmNcbmluZGV4IDcwNDM0NDk1ZjIzZjUuLjE2YzcwZGMxYTQyNjggMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2FsZ28uY1xuKysrIGIvbmV0L3hmcm0veGZybV9hbGdvLmNcbkBAIC01MTIsNiArNTEyLDM0IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgZWFsZ19saXN0W10gPSB7XG4gXHRcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XG4gXHR9XG4gfSxcbit7XG4rXHQubmFtZSA9IFwiY2JjKGFyaWEpXCIsXG4rXHQuY29tcGF0ID0gXCJhcmlhXCIsXG4rXG4rXHQudWluZm8gPSB7XG4rXHRcdC5lbmNyID0ge1xuK1x0XHRcdC5nZW5pdiA9IFwiZWNoYWluaXZcIixcbitcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuK1x0XHRcdC5kZWZrZXliaXRzID0gMjU2LFxuK1x0XHR9XG4rXHR9LFxuK1xuK1x0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4rfSxcbit7XG4rXHQubmFtZSA9IFwicmZjMzY4NihjdHIoYXJpYSkpXCIsXG4rXHQuY29tcGF0ID0gXCJhcmlhXCIsXG4rXG4rXHQudWluZm8gPSB7XG4rXHRcdC5lbmNyID0ge1xuK1x0XHRcdC5nZW5pdiA9IFwic2VxaXZcIixcbitcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuK1x0XHRcdC5kZWZrZXliaXRzID0gMTYwLFxuK1x0XHR9XG4rXHR9LFxuK1xuK1x0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4rfSxcbiB7XG4gXHQubmFtZSA9IFwiY2JjKHR3b2Zpc2gpXCIsXG4gXHQuY29tcGF0ID0gXCJ0d29maXNoXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozODo1Mi4xOTQ4MDY4MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUyNjAxNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFsZ29yaXRobSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYmVpbmcgaW50cm9kdWNlZCB0byB0aGUgY29kZWJhc2UuIFRoZSBwYXRjaCBpcyBhZGRpbmcgXCJjYmMoYXJpYSlcIiBhbmQgXCJyZmMzNjg2KGN0cihhcmlhKSlcIiB0byB0aGUgYGVhbGdfbGlzdGAgaW4gYG5ldC94ZnJtL3hmcm1fYWxnby5jYC4gUmlnaHQgYXdheSwgbXkgYnJhaW4gc3RhcnRzIHRvIGNodXJuLCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyBgZWFsZ19saXN0YCByZXNpZGUgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHV0aWxpemVkIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGl0LiBTbywgSSdtIHRoaW5raW5nIGEgcXVpY2sgc2VhcmNoIGZvciBgZWFsZ19saXN0YCBpcyBkZWZpbml0ZWx5IGluIG9yZGVyLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgY29uZmxpY3RzLiBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBhIGdyZXBwZXIsIG9yIG1heWJlIGEgcXVpY2sgYHJlYWQtZmlsZWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIGRlcGVuZGluZyBvbiB3aGF0IEkgZmVlbCBsaWtlIGF0IHRoZSBtb21lbnQsIHRvIGdldCB0aGF0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjEyLjcyMDgyMzgyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzQ2NTY0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFsZ19saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2FsZ28uYz0xNzU9c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBhYWxnX2xpc3RbXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTM0Ni1cXG5uZXQveGZybS94ZnJtX2FsZ28uYzozNDc6c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBlYWxnX2xpc3RbXSA9IHtcXG5uZXQveGZybS94ZnJtX2FsZ28uYy0zNDgte1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NjQ1PXN0YXRpYyBpbmxpbmUgaW50IGVhbGdfZW50cmllcyh2b2lkKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY0Ni17XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NjQ3OlxcdHJldHVybiBBUlJBWV9TSVpFKGVhbGdfbGlzdCk7XFxubmV0L3hmcm0veGZybV9hbGdvLmMtNjQ4LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTY2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fYWFsZ19saXN0ID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNjcyLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY3MzpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fZWFsZ19saXN0ID0ge1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3NC1cXHQuZmluZCA9IGNyeXB0b19oYXNfc2tjaXBoZXIsXFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njc1OlxcdC5hbGdzID0gZWFsZ19saXN0LFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY3NjpcXHQuZW50cmllcyA9IEFSUkFZX1NJWkUoZWFsZ19saXN0KSxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NzctfTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTcyNj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyNy17XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzI4OlxcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcXHUwMDI2eGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyOS1cXHRcXHRcXHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU3LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3NTg6XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfbmFtZV9tYXRjaCwgbmFtZSxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTktXFx0XFx0XFx0ICAgICAgcHJvYmUpO1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9ODA2PXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9lYWxnX2dldF9ieWlkeCh1bnNpZ25lZCBpbnQgaWR4KVxcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtODEwLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgxMTpcXHRyZXR1cm4gXFx1MDAyNmVhbGdfbGlzdFtpZHhdO1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTgxMi19XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz04MjA9dm9pZCB4ZnJtX3Byb2JlX2FsZ3Modm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTgzMi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZWFsZ19lbnRyaWVzKCk7IGkrKykge1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzMzpcXHRcXHRzdGF0dXMgPSBjcnlwdG9faGFzX3NrY2lwaGVyKGVhbGdfbGlzdFtpXS5uYW1lLCAwLCAwKTtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo4MzQ6XFx0XFx0aWYgKGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgIT0gc3RhdHVzKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzNTpcXHRcXHRcXHRlYWxnX2xpc3RbaV0uYXZhaWxhYmxlID0gc3RhdHVzO1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTgzNi1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz04NTc9aW50IHhmcm1fY291bnRfcGZrZXlfZW5jX3N1cHBvcnRlZCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtODYxLVxcdGZvciAoaSA9IDAsIG4gPSAwOyBpIFxcdTAwM2MgZWFsZ19lbnRyaWVzKCk7IGkrKylcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo4NjI6XFx0XFx0aWYgKGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgXFx1MDAyNlxcdTAwMjYgZWFsZ19saXN0W2ldLnBma2V5X3N1cHBvcnRlZClcXG5uZXQveGZybS94ZnJtX2FsZ28uYy04NjMtXFx0XFx0XFx0bisrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOToxMy4wOTU1MDA0ODNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTczMTM2NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiB0aGlua2luZywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBBbGdvcml0aG0gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBYRlJNIGFsZ29yaXRobXMgYXJlIGJlaW5nIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byBgbmV0L3hmcm0veGZybV9hbGdvLmNgIOKAkyB0aGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgY2lwaGVyIHN0dWZmLiBJJ20gZm9jdXNpbmcgb24gbGluZXMgNTAwLTU1MDsgSSBoYXZlIGEgaHVuY2ggdGhhdCB3aXRoaW4gdGhhdCByYW5nZSBJJ2xsIGZpbmQgc29tZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvciBoYW5kbGluZyBsb2dpYyB0aGF0J2xsIGlsbHVtaW5hdGUgaG93IHRoZXNlIGFsZ29yaXRobXMgYXJlIGludGVncmF0ZWQuIEl0J3MgdGltZSB0byBwYXJzZSB0aGUgZGV0YWlscyBvZiB0aGUgY29kZSFcblxuQmV5b25kIHRoZSBjb2RlLCBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSB3YW50IHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2YgWEZSTSBhbmQsIHNwZWNpZmljYWxseSwgdGhlIEFSSUEgY2lwaGVyLiBUaGF0IHdpbGwgbGlrZWx5IHBvaW50IHRvd2FyZHMgYnVpbGQtdGltZSBkZWNpc2lvbnMgdGhhdCBpbXBhY3QgdGhlIGZ1bmN0aW9uYWxpdHkgb3IgZGVwZW5kZW5jaWVzIG9mIFhGUk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOToxNi4wNjg2OTM2NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9hbGdvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdFxcdFxcdC5nZW5pdiA9IFxcXCJlY2hhaW5pdlxcXCIsXFxuIDUwMTpcXHRcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbiA1MDI6XFx0XFx0XFx0XFx0LmRlZmtleWJpdHMgPSAxMjgsXFxuIDUwMzpcXHRcXHRcXHR9XFxuIDUwNDpcXHRcXHR9LFxcbiA1MDU6XFx0XFxuIDUwNjpcXHRcXHQucGZrZXlfc3VwcG9ydGVkID0gMSxcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LmRlc2MgPSB7XFxuIDUwOTpcXHRcXHRcXHQuc2FkYl9hbGdfaWQgPSBTQURCX1hfRUFMR19DQU1FTExJQUNCQyxcXG4gNTEwOlxcdFxcdFxcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXFxuIDUxMTpcXHRcXHRcXHQuc2FkYl9hbGdfbWluYml0cyA9IDEyOCxcXG4gNTEyOlxcdFxcdFxcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XFxuIDUxMzpcXHRcXHR9XFxuIDUxNDpcXHR9LFxcbiA1MTU6XFx0e1xcbiA1MTY6XFx0XFx0Lm5hbWUgPSBcXFwiY2JjKGFyaWEpXFxcIixcXG4gNTE3OlxcdFxcdC5jb21wYXQgPSBcXFwiYXJpYVxcXCIsXFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdC51aW5mbyA9IHtcXG4gNTIwOlxcdFxcdFxcdC5lbmNyID0ge1xcbiA1MjE6XFx0XFx0XFx0XFx0Lmdlbml2ID0gXFxcImVjaGFpbml2XFxcIixcXG4gNTIyOlxcdFxcdFxcdFxcdC5ibG9ja2JpdHMgPSAxMjgsXFxuIDUyMzpcXHRcXHRcXHRcXHQuZGVma2V5Yml0cyA9IDI1NixcXG4gNTI0OlxcdFxcdFxcdH1cXG4gNTI1OlxcdFxcdH0sXFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxcbiA1Mjg6XFx0fSxcXG4gNTI5OlxcdHtcXG4gNTMwOlxcdFxcdC5uYW1lID0gXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIsXFxuIDUzMTpcXHRcXHQuY29tcGF0ID0gXFxcImFyaWFcXFwiLFxcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHQudWluZm8gPSB7XFxuIDUzNDpcXHRcXHRcXHQuZW5jciA9IHtcXG4gNTM1OlxcdFxcdFxcdFxcdC5nZW5pdiA9IFxcXCJzZXFpdlxcXCIsXFxuIDUzNjpcXHRcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbiA1Mzc6XFx0XFx0XFx0XFx0LmRlZmtleWJpdHMgPSAxNjAsXFxuIDUzODpcXHRcXHRcXHR9XFxuIDUzOTpcXHRcXHR9LFxcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHQucGZrZXlfc3VwcG9ydGVkID0gMCxcXG4gNTQyOlxcdH0sXFxuIDU0MzpcXHR7XFxuIDU0NDpcXHRcXHQubmFtZSA9IFxcXCJjYmModHdvZmlzaClcXFwiLFxcbiA1NDU6XFx0XFx0LmNvbXBhdCA9IFxcXCJ0d29maXNoXFxcIixcXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0LnVpbmZvID0ge1xcbiA1NDg6XFx0XFx0XFx0LmVuY3IgPSB7XFxuIDU0OTpcXHRcXHRcXHRcXHQuZ2VuaXYgPSBcXFwiZWNoYWluaXZcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOToxNi4wNjg4ODQ0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NDg4NzY1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGludG8sIGZyb20gYSBrZXJuZWwtbGV2ZWwgWEZSTSBlbmNyeXB0aW9uIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIFhGUk0gRW5jcnlwdGlvbiBBbGdvcml0aG0gVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGB4ZnJtX2VhbGdfZ2V0X2J5bmFtZWAgZnVuY3Rpb24gaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwncyBYRlJNIChJUHNlYykgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxpZmVjeWNsZSBvZiBlbmNyeXB0aW9uIGFsZ29yaXRobXMuIEknbSB0aGlua2luZywgXCJXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgYW5kIHdoYXQgaXMgaXRzIHJvbGU/XCIgSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29ubmVjdGlvbnMsIGFuZCB0aGUgY2FsbCBzaXRlcy5cblxuVGhlIGNyaXRpY2FsIHRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIGhvdyB0aGVzZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgYXJlIGludGVncmF0ZWQsIGF0IGEgbG93IGxldmVsLiBJIHNlZSB0aGF0IFhGUk0gdXNlcyAqeGZybSBzdGF0ZXMqLCBhbmQgSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlbSBpbiBkZXB0aC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGludGVyYWN0aW9uIHdpdGggbmV0bGluayBtZXNzYWdlcywgc3BlY2lmaWNhbGx5IGBYRlJNX01TR19ORVdTQWAsIGFzIHRoaXMgaXMgYSBrZXkgYXJlYSBmb3IgYWRkaW5nIGFuZCBjb25maWd1cmluZyBzZWN1cml0eSBhc3NvY2lhdGlvbnMuIFRoYXQncyBhIHN0cm9uZyBsZWFkIGZvciB3aGVyZSBhbiBlbmNyeXB0aW9uIGFsZ29yaXRobSB3b3VsZCBiZSBzZWxlY3RlZC4gVGhlbiwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBzdGF0ZSBpcyBjb25zdHJ1Y3RlZC4gVGhlIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAgZnVuY3Rpb24gaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdCBoZXJlLiBGaW5hbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKSBwcm90b2NvbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgc2VsZWN0ZWQgYXJlIHNwZWNpZmljYWxseSB1c2VkIHdpdGhpbiB0aGUgRVNQIGltcGxlbWVudGF0aW9uLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBkYXRhIGdldHMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZyb20gaW5zdGFudGlhdGlvbiB0byB1c2UsIHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjIzLjcxNzc2MzI3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzExNTg3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9lYWxnX2dldF9ieW5hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQva2V5L2FmX2tleS5jPTc3Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fcGZrZXlfeGZybV9zdGF0ZTJtc2coY29uc3Qgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQva2V5L2FmX2tleS5jLTg3Ni1cXHRpZiAoeC1cXHUwMDNlZWFsZykge1xcbm5ldC9rZXkvYWZfa2V5LmM6ODc3OlxcdFxcdHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYSA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHgtXFx1MDAzZWVhbGctXFx1MDAzZWFsZ19uYW1lLCAwKTtcXG5uZXQva2V5L2FmX2tleS5jLTg3OC1cXHRcXHRzYS1cXHUwMDNlc2FkYl9zYV9lbmNyeXB0ID0gKGEgXFx1MDAyNlxcdTAwMjYgYS1cXHUwMDNlcGZrZXlfc3VwcG9ydGVkKSA/XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTQ9RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9hYWxnX2dldF9ieW5hbWUpO1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1NS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3NTY6c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc2MC19XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzYxOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fZWFsZ19nZXRfYnluYW1lKTtcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NjItXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz02MjU9c3RhdGljIGludCBhdHRhY2hfY3J5cHQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBubGF0dHIgKnJ0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYzNS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MzY6XFx0YWxnbyA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHVhbGctXFx1MDAzZWFsZ19uYW1lLCAxKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MzctXFx0aWYgKCFhbGdvKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjI0LjA4ODkyOTEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA3OTEwMzY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQXJpYSBFbmNyeXB0aW9uIGluIFhGUk0qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBBcmlhIGVuY3J5cHRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFhGUk0gZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJIHNlZSBgYXR0YWNoX2NyeXB0YCBpbiB0aGF0IGZpbGUsIGFuZCBpdCdzIGNhbGxpbmcgYHhmcm1fZWFsZ19nZXRfYnluYW1lYC4gTXkgbWVudGFsIHJvYWRtYXAgbm93IGlzIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggd2hlbiBhIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgaXMgY3JlYXRlZCB1c2luZyBlaXRoZXIgYGNiYyhhcmlhKWAgb3IgYHJmYzM2ODYoY3RyKGFyaWEpKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gc2V0cyB0aGlzIHVwLiBTbywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgYXR0YWNoX2NyeXB0YCBiZWhhdmVzIHVuZGVyIHRob3NlIHNjZW5hcmlvcywgYW5kIHRoZW4gSSdsbCB0cmFjZSB0aHJvdWdoIHRvIHNlZSB3aGF0IGhhcHBlbnMgaW4gcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgZXNwX2luaXRfc3RhdGVgLCBhbmQgYW55IG90aGVyIGNydWNpYWwgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBsaWZlY3ljbGUgb2YgYW4gQXJpYS1iYXNlZCBTQSB3aXRoaW4gWEZSTS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjI3LjE2ODAzODE5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwNjU3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXR0YWNoX2NyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz01OTc9c3RhdGljIGludCBhdHRhY2hfb25lX2FsZ28oc3RydWN0IHhmcm1fYWxnbyAqKmFsZ3BwLCB1OCAqcHJvcHMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MjQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NjI1OnN0YXRpYyBpbnQgYXR0YWNoX2NyeXB0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmxhdHRyICpydGEsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjI2LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk0Ny1cXHR9XFxubmV0L3hmcm0veGZybV91c2VyLmM6OTQ4OlxcdGlmICgoZXJyID0gYXR0YWNoX2NyeXB0KHgsIGF0dHJzW1hGUk1BX0FMR19DUllQVF0sIGV4dGFjaykpKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk0OS1cXHRcXHRnb3RvIGVycm9yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOToyNy4yNDkxMTI4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQzNTkzOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX3VzZXIuY2AgdG8gQW5hbHl6ZSBgYXR0YWNoX2NyeXB0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjcnlwdG8gbW9kdWxlcyBhcmUgYmVpbmcgYXR0YWNoZWQgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yaywgYW5kIGBhdHRhY2hfY3J5cHRgIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2Agc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gR2l2ZW4gdGhlIG5hbWUsIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBsaW5raW5nIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0gdG8gYSBzZWN1cml0eSBwb2xpY3kgb3IgYSB0cmFuc2Zvcm0uIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIEknbSByaWdodC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIGNhc2UsIGJ1dCBsZXQncyBjb25maXJtIHRoZSB1c2FnZSBhbmQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIHdpdGgga2VybmVsLXNwYWNlIHRyYW5zZm9ybWF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjI5LjA5MjcwOTYyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA5NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjIwOlxcdFxcdHN0cnNjcHkocC1cXHUwMDNlYWxnX25hbWUsIGFsZ28tXFx1MDAzZW5hbWUpO1xcbiA2MjE6XFx0XFx0KmFsZ3BwID0gcDtcXG4gNjIyOlxcdFxcdHJldHVybiAwO1xcbiA2MjM6XFx0fVxcbiA2MjQ6XFx0XFxuIDYyNTpcXHRzdGF0aWMgaW50IGF0dGFjaF9jcnlwdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5sYXR0ciAqcnRhLFxcbiA2MjY6XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA2Mjc6XFx0e1xcbiA2Mjg6XFx0XFx0c3RydWN0IHhmcm1fYWxnbyAqcCwgKnVhbGc7XFxuIDYyOTpcXHRcXHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmFsZ287XFxuIDYzMDpcXHRcXG4gNjMxOlxcdFxcdGlmICghcnRhKVxcbiA2MzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdHVhbGcgPSBubGFfZGF0YShydGEpO1xcbiA2MzU6XFx0XFxuIDYzNjpcXHRcXHRhbGdvID0geGZybV9lYWxnX2dldF9ieW5hbWUodWFsZy1cXHUwMDNlYWxnX25hbWUsIDEpO1xcbiA2Mzc6XFx0XFx0aWYgKCFhbGdvKSB7XFxuIDYzODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXF1ZXN0ZWQgQ1JZUFQgYWxnb3JpdGhtIG5vdCBmb3VuZFxcXCIpO1xcbiA2Mzk6XFx0XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDY0MDpcXHRcXHR9XFxuIDY0MTpcXHRcXHR4LVxcdTAwM2Vwcm9wcy5lYWxnbyA9IGFsZ28tXFx1MDAzZWRlc2Muc2FkYl9hbGdfaWQ7XFxuIDY0MjpcXHRcXG4gNjQzOlxcdFxcdHAgPSBrbWVtZHVwKHVhbGcsIHhmcm1fYWxnX2xlbih1YWxnKSwgR0ZQX0tFUk5FTCk7XFxuIDY0NDpcXHRcXHRpZiAoIXApXFxuIDY0NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0c3Ryc2NweShwLVxcdTAwM2VhbGdfbmFtZSwgYWxnby1cXHUwMDNlbmFtZSk7XFxuIDY0ODpcXHRcXHR4LVxcdTAwM2VlYWxnID0gcDtcXG4gNjQ5OlxcdFxcdHgtXFx1MDAzZWdlbml2ID0gYWxnby1cXHUwMDNldWluZm8uZW5jci5nZW5pdjtcXG4gNjUwOlxcdFxcdHJldHVybiAwO1xcbiA2NTE6XFx0fVxcbiA2NTI6XFx0XFxuIDY1MzpcXHRzdGF0aWMgaW50IGF0dGFjaF9hdXRoKHN0cnVjdCB4ZnJtX2FsZ29fYXV0aCAqKmFsZ3BwLCB1OCAqcHJvcHMsXFxuIDY1NDpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqcnRhLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY1NTpcXHR7XFxuIDY1NjpcXHRcXHRzdHJ1Y3QgeGZybV9hbGdvICp1YWxnO1xcbiA2NTc6XFx0XFx0c3RydWN0IHhmcm1fYWxnb19hdXRoICpwO1xcbiA2NTg6XFx0XFx0c3RydWN0IHhmcm1fYWxnb19kZXNjICphbGdvO1xcbiA2NTk6XFx0XFxuIDY2MDpcXHRcXHRpZiAoIXJ0YSlcXG4gNjYxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA2NjI6XFx0XFxuIDY2MzpcXHRcXHR1YWxnID0gbmxhX2RhdGEocnRhKTtcXG4gNjY0OlxcdFxcbiA2NjU6XFx0XFx0YWxnbyA9IHhmcm1fYWFsZ19nZXRfYnluYW1lKHVhbGctXFx1MDAzZWFsZ19uYW1lLCAxKTtcXG4gNjY2OlxcdFxcdGlmICghYWxnbykge1xcbiA2Njc6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUmVxdWVzdGVkIEFVVEggYWxnb3JpdGhtIG5vdCBmb3VuZFxcXCIpO1xcbiA2Njg6XFx0XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDY2OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjI5LjA5Mjk4MzgzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzAzNzk5NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipEZWx2aW5nIGludG8gQVJJQSBDaXBoZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgQVJJQSBjaXBoZXIgaXMgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbCBidWlsZC4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIHN0cnVjdHVyZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIEtjb25maWcgZmlsZXMuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayBmb3IgY29tcGlsZS10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzIHRvIFwiQVJJQVwiIHdpdGhpbiB0aGUgYGNyeXB0by9gIGRpcmVjdG9yeSwgbmF0dXJhbGx5LCBidXQgYWxzbywgZ2l2ZW4gaXRzIHVzZSBpbiBuZXR3b3JrIHNlY3VyaXR5LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGV4cGxvcmUgdGhlIGBuZXQveGZybS9gIGRpcmVjdG9yeS4gVGhlcmUgbWlnaHQgYmUgc29tZSBBUklBLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaGlkaW5nIGluIHRoZXJlLCBlc3BlY2lhbGx5IGlmIGl0J3MgZW1wbG95ZWQgZm9yIElQc2VjIG9yIHNpbWlsYXIgcHJvdG9jb2xzLiBJJ2xsIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aG9zZSBkaXJlY3RvcmllcyBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLiBMZXQncyBzZWUgaWYgdGhpcyBjb25maWd1cmF0aW9uIGlzIHN0YXRpY2FsbHkgY29tcGlsZWQsIG1vZHVsYXJpemVkLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGtleSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTozMy43OTY4MDA5NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODI5NDUyNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1JZUFRPX0FSSUFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTUxNj1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjUxNzpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZy01MTgtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnPTQ3MT1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo0NzI6Q09ORklHX0NSWVBUT19BUklBPW1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnLTQ3My1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZz00OTQ9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZzo0OTU6Q09ORklHX0NSWVBUT19BUklBPW1cXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWctNDk2LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTQ2Mz1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjQ2NDpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZy00NjUtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9NDczPUNPTkZJR19DUllQVE9fQU5VQklTPW1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NDc0OkNPTkZJR19DUllQVE9fQVJJQT1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnLTQ3NS1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc9NDkyPUNPTkZJR19DUllQVE9fQU5VQklTPW1cXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnOjQ5MzpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctNDk0LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTU3OT1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjU4MDpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy01ODEtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz00NjM9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjQ2NDpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnLTQ2NS1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnPTQ2ND1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc6NDY1OkNPTkZJR19DUllQVE9fQVJJQT1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWctNDY2LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz00ODI9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6NDgzOkNPTkZJR19DUllQVE9fQVJJQT1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZy00ODQtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz00NjE9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjQ2MjpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnLTQ2My1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZz00NjE9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo0NjI6Q09ORklHX0NSWVBUT19BUklBPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWctNDYzLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTc3OD1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjc3OTpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy03ODAtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9NzYyPUNPTkZJR19DUllQVE9fQU5VQklTPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6NzYzOkNPTkZJR19DUllQVE9fQVJJQT1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTc2NC1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnPTIzOT1jb25maWcgQ1JZUFRPX1RXT0ZJU0hfQVZYX1g4Nl82NFxcbi0tXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjU1LVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI1Njpjb25maWcgQ1JZUFRPX0FSSUFfQUVTTklfQVZYX1g4Nl82NFxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI1Ny1cXHR0cmlzdGF0ZSBcXFwiQ2lwaGVyczogQVJJQSB3aXRoIG1vZGVzOiBFQ0IsIENUUiAoQUVTLU5JL0FWWC9HRk5JKVxcXCJcXG4tLVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI2MC1cXHRzZWxlY3QgQ1JZUFRPX0FMR0FQSVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI2MTpcXHRzZWxlY3QgQ1JZUFRPX0FSSUFcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yNjItXFx0aGVscFxcbi0tXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjcyLVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI3Mzpjb25maWcgQ1JZUFRPX0FSSUFfQUVTTklfQVZYMl9YODZfNjRcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yNzQtXFx0dHJpc3RhdGUgXFxcIkNpcGhlcnM6IEFSSUEgd2l0aCBtb2RlczogRUNCLCBDVFIgKEFFUy1OSS9BVlgyL0dGTkkpXFxcIlxcbi0tXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjc3LVxcdHNlbGVjdCBDUllQVE9fQUxHQVBJXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWc6Mjc4OlxcdHNlbGVjdCBDUllQVE9fQVJJQVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI3OTpcXHRzZWxlY3QgQ1JZUFRPX0FSSUFfQUVTTklfQVZYX1g4Nl82NFxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI4MC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yOTAtXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWc6MjkxOmNvbmZpZyBDUllQVE9fQVJJQV9HRk5JX0FWWDUxMl9YODZfNjRcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yOTItXFx0dHJpc3RhdGUgXFxcIkNpcGhlcnM6IEFSSUEgd2l0aCBtb2RlczogRUNCLCBDVFIgKEFWWDUxMi9HRk5JKVxcXCJcXG4tLVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI5NS1cXHRzZWxlY3QgQ1JZUFRPX0FMR0FQSVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI5NjpcXHRzZWxlY3QgQ1JZUFRPX0FSSUFcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyOTc6XFx0c2VsZWN0IENSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjRcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyOTg6XFx0c2VsZWN0IENSWVBUT19BUklBX0FFU05JX0FWWDJfWDg2XzY0XFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjk5LVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2NyeXB0by9NYWtlZmlsZT01ND1zbTQtYWVzbmktYXZ4Mi14ODZfNjQteSA6PSBzbTQtYWVzbmktYXZ4Mi1hc21fNjQubyBzbTRfYWVzbmlfYXZ4Ml9nbHVlLm9cXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUtNTUtXFxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19DUllQVE9fQVJJQV9BRVNOSV9BVlhfWDg2XzY0KSArPSBhcmlhLWFlc25pLWF2eC14ODZfNjQub1xcbmFyY2gveDg2L2NyeXB0by9NYWtlZmlsZS01Ny1hcmlhLWFlc25pLWF2eC14ODZfNjQteSA6PSBhcmlhLWFlc25pLWF2eC1hc21fNjQubyBhcmlhX2Flc25pX2F2eF9nbHVlLm9cXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUtNTgtXFxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19DUllQVE9fQVJJQV9BRVNOSV9BVlgyX1g4Nl82NCkgKz0gYXJpYS1hZXNuaS1hdngyLXg4Nl82NC5vXFxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTYwLWFyaWEtYWVzbmktYXZ4Mi14ODZfNjQteSA6PSBhcmlhLWFlc25pLWF2eDItYXNtXzY0Lm8gYXJpYV9hZXNuaV9hdngyX2dsdWUub1xcbmFyY2gveDg2L2NyeXB0by9NYWtlZmlsZS02MS1cXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGU6NjI6b2JqLSQoQ09ORklHX0NSWVBUT19BUklBX0dGTklfQVZYNTEyX1g4Nl82NCkgKz0gYXJpYS1nZm5pLWF2eDUxMi14ODZfNjQub1xcbmFyY2gveDg2L2NyeXB0by9NYWtlZmlsZS02My1hcmlhLWdmbmktYXZ4NTEyLXg4Nl82NC15IDo9IGFyaWEtZ2ZuaS1hdng1MTItYXNtXzY0Lm8gYXJpYV9nZm5pX2F2eDUxMl9nbHVlLm9cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jPTM0PXN0YXRpYyB2b2lkIF9fdXNlZCBjb21tb24odm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jLTEyNC1cXHRPRkZTRVQoVFNTX3NwMiwgdHNzX3N0cnVjdCwgeDg2X3Rzcy5zcDIpO1xcbmFyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jOjEyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQ1JZUFRPX0FSSUFfQUVTTklfQVZYX1g4Nl82NClcXG5hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHMuYy0xMjYtXFx0LyogT2Zmc2V0IGZvciBmaWVsZHMgaW4gYXJpYV9jdHggKi9cXG4tLVxcbmNyeXB0by9LY29uZmlnPTM4OD1jb25maWcgQ1JZUFRPX0FOVUJJU1xcbi0tXFxuY3J5cHRvL0tjb25maWctNDAxLVxcbmNyeXB0by9LY29uZmlnOjQwMjpjb25maWcgQ1JZUFRPX0FSSUFcXG5jcnlwdG8vS2NvbmZpZy00MDMtXFx0dHJpc3RhdGUgXFxcIkFSSUFcXFwiXFxuLS1cXG5jcnlwdG8vTWFrZWZpbGU9MTQzPW9iai0kKENPTkZJR19DUllQVE9fU0VFRCkgKz0gc2VlZC5vXFxuY3J5cHRvL01ha2VmaWxlOjE0NDpvYmotJChDT05GSUdfQ1JZUFRPX0FSSUEpICs9IGFyaWFfZ2VuZXJpYy5vXFxuY3J5cHRvL01ha2VmaWxlLTE0NS1vYmotJChDT05GSUdfQ1JZUFRPX0NIQUNIQTIwKSArPSBjaGFjaGEub1xcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYXJpYS5oLTE3LVxcbmluY2x1ZGUvY3J5cHRvL2FyaWEuaDoxODojaWZuZGVmIF9DUllQVE9fQVJJQV9IXFxuaW5jbHVkZS9jcnlwdG8vYXJpYS5oOjE5OiNkZWZpbmUgX0NSWVBUT19BUklBX0hcXG5pbmNsdWRlL2NyeXB0by9hcmlhLmgtMjAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTk9Q09ORklHX0NBTl9WWENBTj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzoxMDpDT05GSUdfQ1JZUFRPX0FSSUE9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctMTEtQ09ORklHX0NSWVBUT19DSEFDSEEyMFBPTFkxMzA1PW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6MzYuMzc5NzUyNzE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzUxNzYwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgY291cGxlIG9mIGFyZWFzIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBjcnlwdG8vS2NvbmZpZzo0MDJgIOKAkyB0aGF0J3MgbGlrZWx5IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3Igc2VjdGlvbiB3aXRoaW4gdGhlIGNyeXB0b2dyYXBoaWMgc3Vic3lzdGVtIOKAkyBhbmQgYWxzbyB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUuIEknbSBwcm9iYWJseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGUgYnVpbGQgb3IgaW5jbHVzaW9uIG9mIGNlcnRhaW4gY3J5cHRvZ3JhcGh5IGZlYXR1cmVzIGFuZCBob3cgdGhlIFhGUk0gKElQc2VjIGZyYW1ld29yaykgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIHRoZW0uIElzIHRoZXJlIGEgZGVwZW5kZW5jeSBjaGFpbj8gRG8gc3BlY2lmaWMgY3J5cHRvIGFsZ29yaXRobXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBjZXJ0YWluIFhGUk0gZmVhdHVyZXMgdG8gZnVuY3Rpb24/IEkgbmVlZCB0byBhbmFseXplIHRob3NlIEtjb25maWcgZW50cmllcywgcG90ZW50aWFsbHkgY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBjcm9zcy1yZWZlcmVuY2luZyB0aGVtLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgYXJlIGxpbmtlZCBmb3IgY29uZmlndXJhdGlvbiBwdXJwb3Nlcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHdoZXJlIG15IGFzc3VtcHRpb25zIG1pZ2h0IGJlIG9mZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTozOC41MTQ5MzA5MTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImNyeXB0by9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHQgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxcbiA0MDE6XFx0XFxuIDQwMjpcXHRjb25maWcgQ1JZUFRPX0FSSUFcXG4gNDAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBUklBXFxcIlxcbiA0MDQ6XFx0XFx0c2VsZWN0IENSWVBUT19BTEdBUElcXG4gNDA1OlxcdFxcdGhlbHBcXG4gNDA2OlxcdFxcdCAgQVJJQSBjaXBoZXIgYWxnb3JpdGhtIChSRkM1Nzk0KVxcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHQgIEFSSUEgaXMgYSBzdGFuZGFyZCBlbmNyeXB0aW9uIGFsZ29yaXRobSBvZiB0aGUgUmVwdWJsaWMgb2YgS29yZWEuXFxuIDQwOTpcXHRcXHQgIFRoZSBBUklBIHNwZWNpZmllcyB0aHJlZSBrZXkgc2l6ZXMgYW5kIHJvdW5kcy5cXG4gNDEwOlxcdFxcdCAgMTI4LWJpdDogMTIgcm91bmRzLlxcbiA0MTE6XFx0XFx0ICAxOTItYml0OiAxNCByb3VuZHMuXFxuIDQxMjpcXHRcXHQgIDI1Ni1iaXQ6IDE2IHJvdW5kcy5cXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0ICBTZWU6XFxuIDQxNTpcXHRcXHQgIGh0dHBzOi8vc2VlZC5raXNhLm9yLmtyL2tpc2EvYWxnb3JpdGhtL0Vnb3ZBcmlhSW5mby5kb1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRjb25maWcgQ1JZUFRPX0JMT1dGSVNIXFxuIDQxODpcXHRcXHR0cmlzdGF0ZSBcXFwiQmxvd2Zpc2hcXFwiXFxuIDQxOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FMR0FQSVxcbiA0MjA6XFx0XFx0c2VsZWN0IENSWVBUT19CTE9XRklTSF9DT01NT05cXG4gNDIxOlxcdFxcdGhlbHBcXG4gNDIyOlxcdFxcdCAgQmxvd2Zpc2ggY2lwaGVyIGFsZ29yaXRobSwgYnkgQnJ1Y2UgU2NobmVpZXJcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0XFx0ICBUaGlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb20gMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6MzguNTE1MDMzNDg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzA4MjQ4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlhGUk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gd2hhdGV2ZXIgcHJvYmxlbSBJJ20gZmFjaW5nLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIFhGUk0gY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb21wb25lbnRzIGFyZSBiZWluZyBhc3NlbWJsZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUgaXMgZ29pbmcgdG8gYmUgbXkgcHJpbWFyeSByZXNvdXJjZSBmb3IgdGhhdC4gSXQgaG9sZHMgdGhlIGtleSB0byB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFsbCB0aGUgXCJpZiB0aGlzLCB0aGVuIHRoYXRcIiBsb2dpYyB0aGF0IGRpY3RhdGVzIHdoaWNoIFhGUk0gZmVhdHVyZXMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlsbCBnaXZlIG1lIHRoZSBrbm9icyBhbmQgZGlhbHMuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBgbmV0L3hmcm0vTWFrZWZpbGVgLCBuYXR1cmFsbHkuIEkgbmVlZCB0byBzZWUgaG93IHRob3NlIGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBhcmUgKmFjdHVhbGx5KiB0cmFuc2xhdGVkIGludG8gYnVpbGQgaW5zdHJ1Y3Rpb25zIGFuZCBob3cgdGhlIGluZGl2aWR1YWwgWEZSTSBtb2R1bGVzIGFuZCBvYmplY3RzIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgb3JnYW5pemVkLiBUaGF0IE1ha2VmaWxlIHdpbGwgc2hvdyBtZSB0aGUgYnVpbGQgcHJvY2VzcydzIGRhbmNlLiBXaXRoIHRoZXNlIHR3bywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6NDAuNzg1ODY0OTM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFhGUk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIFhGUk1cXG4gICA2OlxcdFxcdGJvb2xcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBYRlJNX09GRkxPQURcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFhGUk1fQUxHT1xcbiAgMTU6XFx0XFx0dHJpc3RhdGVcXG4gIDE2OlxcdFxcdHNlbGVjdCBYRlJNXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFQURcXG4gIDE5OlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxcbiAgMjE6XFx0XFxuICAyMjpcXHRpZiBJTkVUXFxuICAyMzpcXHRjb25maWcgWEZSTV9VU0VSXFxuICAyNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4gIDI1OlxcdFxcdHNlbGVjdCBYRlJNX0FMR09cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgU3VwcG9ydCBmb3IgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcbiAgMjg6XFx0XFx0ICBsaWtlIElQc2VjIHVzZWQgYnkgbmF0aXZlIExpbnV4IHRvb2xzLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxuICAzMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdGRlcGVuZHMgb24gWEZSTV9VU0VSIFxcdTAwMjZcXHUwMDI2IENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAzNTpcXHRcXHRcXHRIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXFxuICAzNjpcXHRcXHRzZWxlY3QgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xcbiAgMzc6XFx0XFx0aGVscFxcbiAgMzg6XFx0XFx0ICBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGxpa2UgSVBzZWNcXG4gIDM5OlxcdFxcdCAgdXNlZCBieSBjb21wYXRpYmxlIExpbnV4IGFwcGxpY2F0aW9ucy5cXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gWEZSTSBcXHUwMDI2XFx1MDAyNiBJUFY2XFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgcHJvdmlkZXMgYSB2aXJ0dWFsIGludGVyZmFjZSB0byByb3V0ZSBJUHNlYyB0cmFmZmljLlxcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6NDAuNzg1OTg0NzM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MjM4ODMzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIE1ha2VmaWxlOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgWEZSTSBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4ZnJtX2FsZ28ub2AgaXMgY29uc3RydWN0ZWQgd2l0aGluIHRoZSBgbmV0L3hmcm1gIGRpcmVjdG9yeS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBsb2NhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGdvdmVybiBpdHMgY29tcGlsYXRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIGZpbGVzIGludm9sdmVkLCBhbnkgcmVxdWlyZWQgY29tcGlsZXIgZmxhZ3MsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGxpYnJhcmllcy4gSSdsbCBiZSBsb29raW5nIGZvciBjb21tb24gTWFrZWZpbGUgY29uc3RydWN0cyBsaWtlIGAkKG9iai1tKWAsIGAkKGNjKWAsIGAkKEtCVUlMRF9DRkxBR1MpYCwgYW5kIGRlcGVuZGVuY3kgZGVjbGFyYXRpb25zIChlLmcuLCBgeGZybV9hbGdvLm86IHNvbWVfc291cmNlLmMgc29tZV9oZWFkZXIuaGApLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNvbXBpbGF0aW9uIHN0ZXBzIHRvIGVuc3VyZSBJIGdyYXNwIGhvdyB0aGlzIHNwZWNpZmljIG9iamVjdCBmaWxlIGZpdHMgaW50byB0aGUgbGFyZ2VyIFhGUk0gZnJhbWV3b3JrLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBtb2R1bGUgZGVwZW5kZW5jaWVzIG9yIGxpbmtpbmcgYWdhaW5zdCBvdGhlciBvYmplY3QgZmlsZXMuIEFueSBzcGVjaWFsIGNvbXBpbGVyIG9wdGlvbnMgYXJlIGFsc28gYSBwb2ludCBvZiBpbnRlcmVzdCwgYXMgdGhlc2UgbWlnaHQgcHJvdmlkZSBjbHVlcyB0byB0aGUgb3B0aW1pemF0aW9uIG9yIGZlYXR1cmUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgcGFydGljdWxhciBYRlJNIGFsZ29yaXRobSBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzg1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTo0My42MDk4Njk5MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHhmcm1faW50ZXJmYWNlLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSArPSB4ZnJtX2ludGVyZmFjZV9jb3JlLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0aWZlcSAoJChDT05GSUdfWEZSTV9JTlRFUkZBQ0UpLG0pXFxuICAgOTpcXHR4ZnJtX2ludGVyZmFjZS0kKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSArPSB4ZnJtX2ludGVyZmFjZV9icGYub1xcbiAgMTA6XFx0ZWxzZSBpZmVxICgkKENPTkZJR19YRlJNX0lOVEVSRkFDRSkseSlcXG4gIDExOlxcdHhmcm1faW50ZXJmYWNlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSB4ZnJtX2ludGVyZmFjZV9icGYub1xcbiAgMTI6XFx0ZW5kaWZcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG4gIDE2OlxcdFxcdFxcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXFxcXG4gIDE3OlxcdFxcdFxcdCAgICAgIHhmcm1fbmF0X2tlZXBhbGl2ZS5vXFxuICAxODpcXHRvYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSArPSB4ZnJtX3Byb2Mub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX1hGUk1fQUxHTykgKz0geGZybV9hbGdvLm9cXG4gIDIwOlxcdG9iai0kKENPTkZJR19YRlJNX1VTRVIpICs9IHhmcm1fdXNlci5vXFxuICAyMTpcXHRvYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgKz0geGZybV9jb21wYXQub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX1hGUk1fSVBDT01QKSArPSB4ZnJtX2lwY29tcC5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfWEZSTV9JTlRFUkZBQ0UpICs9IHhmcm1faW50ZXJmYWNlLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG4gIDI1OlxcdG9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjQzLjYwOTkyODY2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTI4NDA1MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQc2VjL1hGUk0gYW5kIHRoZSBBUklBIENpcGhlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIHNlZWluZyBhIGNsdXN0ZXIgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYENPTkZJR19YRlJNX0FMR09gLCBgQ09ORklHX1hGUk1fVVNFUmAsIGBDT05GSUdfQ1JZUFRPX0FSSUFgLCBgQ09ORklHX0NSWVBUT19DQkNgLCBgQ09ORklHX0NSWVBUT19DVFJgLCBgQ09ORklHX0lORVRfRVNQYCwgZXRjLiBUaGVzZSBhcmUgYWxsIHBvaW50aW5nIHRvd2FyZCBhbiBJUHNlYy9YRlJNIHNldHVwLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIHRoZSBBUklBIGNpcGhlci4gTXkgZm9jdXMgaXMgd2hhdCBoYXBwZW5zIHdoZW4gc3l6a2FsbGVyLCB0aGUgZnV6emVyLCB0cmllcyB0byBjb25maWd1cmUgdGhpcy5cblxuRXNzZW50aWFsbHksIHVzZXIgc3BhY2UsIHRocm91Z2ggc3l6a2FsbGVyLCBpcyBzZW5kaW5nIG5ldGxpbmsgbWVzc2FnZXMgKGBYRlJNX01TR19ORVdTQWAsIGBYRlJNX01TR19VUERTQWAsIGV0Yy4pIHRvIHRoZSBrZXJuZWwuIFRoZXNlIG1lc3NhZ2VzIHNwZWNpZnkgc2VjdXJpdHkgYXNzb2NpYXRpb25zIChTQXMpLCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGluY2x1ZGUgdGhlIGBYRlJNQV9BTEdfQ1JZUFRgIGF0dHJpYnV0ZS4gVGhlIGZ1enplciBsaWtlbHkgc3BlY2lmaWVzIGFsZ29yaXRobSBuYW1lcyBsaWtlIGBcImNiYyhhcmlhKVwiYCBvciBgXCJyZmMzNjg2KGN0cihhcmlhKSlcImAgb3IganVzdCBgXCJhcmlhXCJgIOKAkyB0aGF0J3MgdGhlIGludGVyZXN0aW5nIHBhcnQsIHJpZ2h0P1xuXG5UaGUga2VybmVsLCBpbiBgeGZybV91c2VyLmNgLCB1c2VzIHRoZSBgYXR0YWNoX2NyeXB0YCBmdW5jdGlvbiB0byBtYWtlIHNlbnNlIG9mIHRoaXMuIFRoaXMgZnVuY3Rpb24gdGhlbiBjYWxscyBgeGZybV9lYWxnX2dldF9ieW5hbWVgLCB3aGljaCBodW50cyB0aHJvdWdoIGB4ZnJtX2VhbGdfbGlzdGAgbG9va2luZyBmb3IgYSBzdWl0YWJsZSBhbGdvcml0aG0uIFRoaXMgaXMgaW1wb3J0YW50OiB0aGUgbGlzdCAqc2hvdWxkKiBub3cgY29udGFpbiBlbnRyaWVzIGZvciBgXCJjYmMoYXJpYSlcImAgYW5kIGBcInJmYzM2ODYoY3RyKGFyaWEpKVwiYC4gSWYgaXQgZG9lc24ndCwgd2UgaGF2ZSBhIHByb2JsZW0uXG5cblRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgaW4gYGVzcF9pbml0X3N0YXRlYCwgbG9jYXRlZCBpbiBgbmV0L2lwdjQvZXNwNC5jYCBvciBgbmV0L2lwdjYvZXNwNi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGFsbG9jYXRlIHRoZSBza2NpcGhlciBvciBjcnlwdG8gdHJhbnNmb3JtLiBJdCBhbHNvIGluaXRpYWxpemVzIHRoZSBJViBnZW5lcmF0b3IsIHVzaW5nIGBlY2hhaW5pdmAgb3IgYHNlcWl2YC4gRmluYWxseSwgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIG5ldHdvcmsgcGFja2V0cyBoYXBwZW5zIHVzaW5nIEVTUCAoYHhmcm00X291dHB1dGAsIGB4ZnJtNl9vdXRwdXRgLCBgZXNwX291dHB1dGAsIGFuZCBzbyBvbikuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKnJlcXVpcmVtZW50cyouIEZvciBgY2JjKGFyaWEpYCB0byBiZSBzdWNjZXNzZnVsbHkgaW5zdGFudGlhdGVkLCB0aGUga2VybmVsICptdXN0KiBoYXZlIGBDUllQVE9fQ0JDYCBhbmQgYENSWVBUT19BUklBYCBlbmFibGVkLiBTaW1pbGFybHksIGByZmMzNjg2KGN0cihhcmlhKSlgIHJlcXVpcmVzIGBDUllQVE9fQ1RSYCwgYENSWVBUT19TRVFJVmAgb3IgYENSWVBUT19FQ0hBSU5JVmAsIGFuZCBgQ1JZUFRPX0FSSUFgLiBOYXR1cmFsbHksIGBYRlJNX1VTRVJgLCBgWEZSTV9BTEdPYCwgYW5kIGVpdGhlciBgSU5FVF9FU1BgIG9yIGBJTkVUNl9FU1BgIG5lZWQgdG8gYmUgZW5hYmxlZCB0b28uIEl0IHNlZW1zIGJhc2ljLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJ2xsIGNoZWNrIHRoZSBHaXQgbG9nIGZvciB0aGUgY29tbWl0IGludHJvZHVjaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBhdXRob3IncyBpbnRlbnQgYXJlIGVzc2VudGlhbCBmb3IgbXkgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBhZGRlZCwgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGUsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxOTEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTo0OC4xMzgzMzc1MzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDIwMDk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUklBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6NDguMjE1MzY3MzI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjM2NDk2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIEFsZ29yaXRobSBMb29rdXAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBsb29rcyB1cCBhbmQgdXNlcyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHhmcm1fYWxnby5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9ucyBmb3IgYHhmcm1fZWFsZ19nZXRfYnluYW1lYCBhbmQgYHhmcm1fZmluZF9hbGdvYC4gVGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zOyBvbmUgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuIGFsZ29yaXRobSBieSBpdHMgbmFtZSwgYW5kIHRoZSBvdGhlciBwcm9iYWJseSBoYW5kbGVzIHRoZSBicm9hZGVyIHNlYXJjaCBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGFsZ29yaXRobSBzZWxlY3Rpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEknbSBleHBlY3RpbmcgdGhpcyBmaWxlIHRvIGhvbGQgdGhlIGNvcmUgbG9naWMgZm9yIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgYWxnb3JpdGhtIHJlZ2lzdHJhdGlvbiwgbG9va3VwcywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gY2FjaGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzUxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6NTQuMjc5MDIwODk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgyNjQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2ZpbmRfYWxnb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9hbGdvLmM9Njc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgeGZybV9jYWxnX2xpc3QgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy02ODQtXFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njg1OnN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZmluZF9hbGdvKFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY4Ni1cXHRjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgKmFsZ29fbGlzdCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTcxOT1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyMC17XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzIxOlxcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcXHUwMDI2eGZybV9hYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyMi1cXHRcXHRcXHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MjY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03Mjcte1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjcyODpcXHRyZXR1cm4geGZybV9maW5kX2FsZ28oXFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19pZF9tYXRjaCxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03MjktXFx0XFx0XFx0ICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylhbGdfaWQsIDEpO1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NzMzPXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9jYWxnX2dldF9ieWlkKGludCBhbGdfaWQpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzM0LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3MzU6XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2NhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzM2LVxcdFxcdFxcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTc0OT1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwcm9iZSlcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTAte1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc1MTpcXHRyZXR1cm4geGZybV9maW5kX2FsZ28oXFx1MDAyNnhmcm1fYWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1Mi1cXHRcXHRcXHQgICAgICBwcm9iZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU3LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3NTg6XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfbmFtZV9tYXRjaCwgbmFtZSxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTktXFx0XFx0XFx0ICAgICAgcHJvYmUpO1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NzYzPXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9jYWxnX2dldF9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IHByb2JlKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc2NC17XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzY1OlxcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcXHUwMDI2eGZybV9jYWxnX2xpc3QsIHhmcm1fYWxnX25hbWVfbWF0Y2gsIG5hbWUsXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzY2LVxcdFxcdFxcdCAgICAgIHByb2JlKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTc4NT1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWVhZF9nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBpY3ZfbGVuLCBpbnQgcHJvYmUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy03OTEtXFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzkyOlxcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcXHUwMDI2eGZybV9hZWFkX2xpc3QsIHhmcm1fYWVhZF9uYW1lX21hdGNoLCBcXHUwMDI2ZGF0YSxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03OTMtXFx0XFx0XFx0ICAgICAgcHJvYmUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTo1NC4zNTc4NTg0NjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE4NTE0MzEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHhmcm1fZmluZF9hbGdvYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGB4ZnJtX2ZpbmRfYWxnb2AgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyBsaWtlbHkgYXJvdW5kIHRoZSBlZmZpY2llbmN5IG9mIHRoZSBzZWFyY2guIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIG9wdGltaXplZCwgb3IgKmlmKiBpdCdzIG9wdGltaXplZCwgYW5kIHdoZXRoZXIgaXQncyBzdXNjZXB0aWJsZSB0byBhbnkgZGVuaWFsLW9mLXNlcnZpY2UgdmVjdG9ycyByZWxhdGVkIHRvIHBvb3JseSBjb25zdHJ1Y3RlZCBzZWN1cml0eSBwb2xpY2llcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBhbGdvcml0aG0gdGFibGVzIGFyZSBvcmdhbml6ZWQsIHRoZSBzZWFyY2gga2V5IHVzZWQsIGFuZCBob3cgY29sbGlzaW9ucyBhcmUgaGFuZGxlZC4gSXMgdGhlcmUgYSBjYWNoaW5nIG1lY2hhbmlzbT8gRG9lcyBpdCBpdGVyYXRlIGxpbmVhcmx5IG9yIHV0aWxpemUgc29tZSBmb3JtIG9mIGhhc2hpbmcgb3IgYSBtb3JlIGFkdmFuY2VkIGRhdGEgc3RydWN0dXJlPyBJJ20gYWxzbyBnb2luZyB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgdGhlIGltcGxlbWVudGF0aW9uIGlzbid0IHByb3Blcmx5IHByb3RlY3RlZCBieSBsb2Nrcy4gRnVydGhlciwgSSB3aWxsIGxvb2sgdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGFuZCBpZiBpdCBoYXMgYW55IGZhbGxiYWNrcy4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgd2Vha25lc3NlcyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjUwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MDEuNTQzMDA2Mzc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX2FsZ28uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0XFx0LmZpbmQgPSBjcnlwdG9faGFzX2Fjb21wLFxcbiA2ODE6XFx0XFx0LmFsZ3MgPSBjYWxnX2xpc3QsXFxuIDY4MjpcXHRcXHQuZW50cmllcyA9IEFSUkFZX1NJWkUoY2FsZ19saXN0KSxcXG4gNjgzOlxcdH07XFxuIDY4NDpcXHRcXG4gNjg1OlxcdHN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZmluZF9hbGdvKFxcbiA2ODY6XFx0XFx0Y29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0ICphbGdvX2xpc3QsXFxuIDY4NzpcXHRcXHRpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fYWxnb19kZXNjICplbnRyeSwgY29uc3Qgdm9pZCAqZGF0YSksXFxuIDY4ODpcXHRcXHRjb25zdCB2b2lkICpkYXRhLCBpbnQgcHJvYmUpXFxuIDY4OTpcXHR7XFxuIDY5MDpcXHRcXHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmxpc3QgPSBhbGdvX2xpc3QtXFx1MDAzZWFsZ3M7XFxuIDY5MTpcXHRcXHRpbnQgaSwgc3RhdHVzO1xcbiA2OTI6XFx0XFxuIDY5MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWxnb19saXN0LVxcdTAwM2VlbnRyaWVzOyBpKyspIHtcXG4gNjk0OlxcdFxcdFxcdGlmICghbWF0Y2gobGlzdCArIGksIGRhdGEpKVxcbiA2OTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDY5NjpcXHRcXG4gNjk3OlxcdFxcdFxcdGlmIChsaXN0W2ldLmF2YWlsYWJsZSlcXG4gNjk4OlxcdFxcdFxcdFxcdHJldHVybiBcXHUwMDI2bGlzdFtpXTtcXG4gNjk5OlxcdFxcbiA3MDA6XFx0XFx0XFx0aWYgKCFwcm9iZSlcXG4gNzAxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRcXHRzdGF0dXMgPSBhbGdvX2xpc3QtXFx1MDAzZWZpbmQobGlzdFtpXS5uYW1lLCAwLCAwKTtcXG4gNzA0OlxcdFxcdFxcdGlmICghc3RhdHVzKVxcbiA3MDU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDcwNjpcXHRcXG4gNzA3OlxcdFxcdFxcdGxpc3RbaV0uYXZhaWxhYmxlID0gc3RhdHVzO1xcbiA3MDg6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZsaXN0W2ldO1xcbiA3MDk6XFx0XFx0fVxcbiA3MTA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDcxMTpcXHR9XFxuIDcxMjpcXHRcXG4gNzEzOlxcdHN0YXRpYyBpbnQgeGZybV9hbGdfaWRfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fYWxnb19kZXNjICplbnRyeSxcXG4gNzE0OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqZGF0YSlcXG4gNzE1OlxcdHtcXG4gNzE2OlxcdFxcdHJldHVybiBlbnRyeS1cXHUwMDNlZGVzYy5zYWRiX2FsZ19pZCA9PSAodW5zaWduZWQgbG9uZylkYXRhO1xcbiA3MTc6XFx0fVxcbiA3MTg6XFx0XFxuIDcxOTpcXHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxcbiA3MjA6XFx0e1xcbiA3MjE6XFx0XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2FhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXFxuIDcyMjpcXHRcXHRcXHRcXHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XFxuIDcyMzpcXHR9XFxuIDcyNDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2FhbGdfZ2V0X2J5aWQpO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxcbiA3Mjc6XFx0e1xcbiA3Mjg6XFx0XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXFxuIDcyOTpcXHRcXHRcXHRcXHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjAxLjU0MzE5MjE2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODYxOTczNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBFbmNyeXB0aW9uIEFsZ29yaXRobSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBmdXp6aW5nIHdvcnRoaW5lc3Mgb2YgdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBjb21wb25lbnRzIGFuZCBlbnRyeSBwb2ludHMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCBlbmNyeXB0aW9uIGFsZ29yaXRobXMsIHJlZ2lzdGVyaW5nIHRoZW0gaW4gYGVhbGdfbGlzdGAuIFRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHJlZ2lzdHJhdGlvbiBhcmUgYHhmcm1fZWFsZ19nZXRfYnluYW1lYCwgYHhmcm1fcHJvYmVfYWxnc2AsIGBhdHRhY2hfY3J5cHRgLCBhbmQgYHhmcm1fc3RhdGVfY29uc3RydWN0YC4gSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUgYmV5b25kIHRob3NlIGVudHJ5IHBvaW50cy5cblxuSSdsbCBub3cgZXhwYW5kIG15IGludmVzdGlnYXRpb24uIEknbGwgc2VhcmNoIGZvciBhbGwgdG91Y2hwb2ludHMgcmVsYXRlZCB0byBgeGZybV9hbGdvYCBhbmQgQVJJQSBlbmNyeXB0aW9uIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoYXQgaW5jbHVkZXMgY2hlY2tpbmcgYGNyeXB0b19hcmlhYCBhbmQsIGltcG9ydGFudGx5LCB0aGUgb3B0aW1pemVkIHg4NiB2YXJpYW50cyBsaWtlIGBDUllQVE9fQVJJQV9BRVNOSV9BVlhfWDg2XzY0YCwgYENSWVBUT19BUklBX0FFU05JX0FWWDJfWDg2XzY0YCwgYW5kIGBDUllQVE9fQVJJQV9HRk5JX0FWWDUxMl9YODZfNjRgLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBJIGhhdmUgY29ycmVjdCBzZXR0aW5ncyBmb3IgYENSWVBUT19DQkNgLCBgQ1JZUFRPX0NUUmAsIGBYRlJNYCwgYFhGUk1fQUxHT2AsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBhbmQgYElORVQ2X0VTUGAuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgY2hhbmdlIGEgZ29vZCBmdXp6aW5nIHRhcmdldD8gTGV0J3MgY2hlY2s6XG5cbjEuICAqKlJlYWNoYWJpbGl0eToqKiBUaGUgY29kZSByZXNpZGVzIGluIGBuZXQveGZybS94ZnJtX2FsZ28uY2AuIEl0IGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgTmV0bGluaywgc3BlY2lmaWNhbGx5IHRoZSBYRlJNIG5ldGxpbmsgQVBJIG9yIHBma2V5LCB3aGljaCBpcyBoZWF2aWx5IGxldmVyYWdlZCBieSBzeXprYWxsZXIuIFRoZSBwcmVzZW5jZSBvZiBgc3l6X25ldGxpbmtfeGZybSpgIG9yIHNvY2tldCBuZXRsaW5rIG1lc3NhZ2VzIGluZGljYXRlcyB0aGF0IHN5emthbGxlciBhbHJlYWR5IGhhcyBleGNlbGxlbnQgY292ZXJhZ2UuXG4yLiAgKipGdW5jdGlvbmFsaXR5OioqIFRoaXMgcGF0Y2ggYWRkcyB0d28gbmV3IGNpcGhlciBhbGdvcml0aG1zIHRvIFhGUk0sIGFsbG93aW5nIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIFhGUk0gc3RhdGVzIHVzaW5nIGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCwgaW5jbHVkaW5nIHNwZWNpZmljIGtleSBzaXplcywgSVYgZ2VuZXJhdG9ycywgYW5kIGJsb2NrIHNpemVzLiBUaGF0J3MgZ29vZCBjb21wbGV4aXR5IGZvciBmdXp6aW5nLlxuMy4gICoqSW1wYWN0OioqIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgSVBzZWMgYW5kIHRoZSBjcnlwdG9ncmFwaGljIGludGVyZmFjZS4gVGhpcyBpcyBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSwgYW5kIHNlY3VyaXR5IGZsYXdzIGhlcmUgYXJlIGhpZ2gtaW1wYWN0LlxuNC4gICoqQ29uY2x1c2lvbjoqKiBCYXNlZCBvbiBhbGwgdGhlc2UgcG9pbnRzLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBcIldvcnRoRnV6emluZz10cnVlXCIgc2l0dWF0aW9uLiBJJ2QgbmVlZCB0byBwcmlvcml0aXplIHRoaXMuXG5cbkZpbmFsbHksIEknbGwgY2FyZWZ1bGx5IHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIG5lZWQgYFhGUk1fQUxHT2AsIGBYRlJNX1VTRVJgLCBgQ1JZUFRPX0FSSUFgLCBgQ1JZUFRPX0NCQ2AsIGBDUllQVE9fQ1RSYCwgYW5kIGVpdGhlciBgSU5FVF9FU1BgIChvciBwb3RlbnRpYWxseSBgSU5FVF9FU1BfT0ZGTE9BRGApIG9yIGBJTkVUNl9FU1BgIGVuYWJsZWQuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYG5ldC9pcHY0YCBhbmQgYG5ldC9pcHY2YCB0byBlbnN1cmUgdGhlIEVTUCBvcHRpb25zIGFyZSBjb3JyZWN0bHkgc2V0LiBUaGlzIHdpbGwgYmUgdGhlIGZpcnN0IHN0ZXAgdG8gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjo0MDowOC40MDUxNzQ0MjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTc2NTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9FU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzOT1jb25maWcgSU5FVF9BSFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXFxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MDguNTkwOTQ3NDU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMDkxNDMzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIElQc2VjKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgKEVTUCkgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBUaGF0IG1lYW5zIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBsb2NhdGlvbiBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byBJUHY0IG5ldHdvcmtpbmcsIGFuZCBpdCdzIGFsbW9zdCBjZXJ0YWluIHRvIGhvbGQgdGhlIHNldHRpbmcgSSdtIGxvb2tpbmcgZm9yLCBgSU5FVF9FU1BgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIHByb2JhYmx5IGd1ZXNzIHRoYXQncyB3aGVyZSBpdCBpcywgYnV0IGl0J3MgYWx3YXlzIGJlc3QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrIGluIHRoZSBjb25maWcgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjExLjYwMDA5MzQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdCAgaW1wbGVtZW50YXRpb25zIG9mIGFueSBuZWVkZWQgYWxnb3JpdGhtcyB3aGVuIGF2YWlsYWJsZS5cXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAzNTM6XFx0XFxuIDM1NDpcXHRjb25maWcgSU5FVF9FU1BcXG4gMzU1OlxcdFxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbiAzNTY6XFx0XFx0c2VsZWN0IFhGUk1fRVNQXFxuIDM1NzpcXHRcXHRoZWxwXFxuIDM1ODpcXHRcXHQgIFN1cHBvcnQgZm9yIElQc2VjIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKS5cXG4gMzU5OlxcdFxcbiAzNjA6XFx0XFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXFxuIDM2MTpcXHRcXHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXFxuIDM2MjpcXHRcXHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcXG4gMzYzOlxcdFxcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91J2xsIG5lZWQgdG8gZW5hYmxlXFxuIDM2NDpcXHRcXHQgIHRoZW0gaW4gdGhlIGNyeXB0byBBUEkuICBZb3Ugc2hvdWxkIGFsc28gZW5hYmxlIGFjY2VsZXJhdGVkXFxuIDM2NTpcXHRcXHQgIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgbmVlZGVkIGFsZ29yaXRobXMgd2hlbiBhdmFpbGFibGUuXFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMzY4OlxcdFxcbiAzNjk6XFx0Y29uZmlnIElORVRfRVNQX09GRkxPQURcXG4gMzcwOlxcdFxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuIDM3MTpcXHRcXHRkZXBlbmRzIG9uIElORVRfRVNQXFxuIDM3MjpcXHRcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxuIDM3MzpcXHRcXHRkZWZhdWx0IG5cXG4gMzc0OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MTEuNjAwMTkxMjUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NzU1NjIzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBDcnlwdG8gQWxnb3JpdGhtIENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuT2theSwgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSd2ZSBjb3ZlcmVkIG91ciBiYXNlcyBvbiB0aGUgWEZSTSBjcnlwdG8gYWxnb3JpdGhtIHNldHVwLiBJJ20gZ29pbmcgYmFjayB0byBgbmV0L3hmcm0vS2NvbmZpZ2AgZm9yIGEgZmluYWwgbG9vay1zZWUgYXQgdGhlIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9BTEdPYCBkZXBlbmRlbmNpZXMuIFllcCwgYFhGUk1fVVNFUmAgc3RpbGwgcHJvcGVybHkgc2VsZWN0cyBgWEZSTV9BTEdPYCwgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyB0aGUgY29tcGlsYXRpb24gb2YgYHhmcm1fYWxnby5jYC4gR29vZC4gVGhhdOKAmXMgc29saWQuXG5cbk5vdywgbGV0J3MgbWVudGFsbHkgd2FsayB0aHJvdWdoIHRob3NlIGtleSBzeW1ib2xzIGFnYWluLCBqdXN0IHRvIGJlIGNlcnRhaW46IGB4ZnJtX2VhbGdfZ2V0X2J5bmFtZWAsIGB4ZnJtX2ZpbmRfYWxnb2AsIGB4ZnJtX3Byb2JlX2FsZ3NgLCBhbmQgYGF0dGFjaF9jcnlwdGAuIFJpZ2h0LCByaWdodC4gVGhlc2UgYXJlbid0IGV4YWN0bHkgdWJpcXVpdG91czsgdGhleSdyZSBhbGwgcHJldHR5IGNsZWFybHkgdGllZCB0byB0aGUgWEZSTSBjcnlwdG8gYWxnb3JpdGhtIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIHNldHVwIHBoYXNlLiBUaGV5J3JlIG5vdCBnb2luZyB0byBiZSBpbiBhbnkgaG90IHBhdGhzLiBBcyBJIHJlY2FsbCwgdGhleSdyZSBvbmx5IGludm9rZWQgZHVyaW5nIFhGUk0gU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBjb25maWd1cmF0aW9uLCB0eXBpY2FsbHkgdGhyb3VnaCBhIE5ldGxpbmsgYFhGUk1fTVNHX05FV1NBYCBtZXNzYWdlLiBUaGF0J3MgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudC5cblxuT2theSwgbGV04oCZcyByZXZpc2l0IHRoZSBgRW5hYmxlQ29uZmlnc2Agb25lIGxhc3QgdGltZSB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudDogd2UgbmVlZCBgWEZSTWAsIGBYRlJNX0FMR09gLCBgWEZSTV9VU0VSYCwgYENSWVBUT19BUklBYCwgYENSWVBUT19DQkNgLCBgQ1JZUFRPX0NUUmAsIGFuZCBgSU5FVF9FU1BgLiBZZXAsIHRob3NlIGFyZSBhbGwgcHJlc2VudCBhbmQgYWNjb3VudGVkIGZvci4gVGhleSBhcmUgYWxsIGNvcnJlY3QgYW5kIEkgY2FuIGRlZmVuZCB0aGVpciBpbmNsdXNpb24gd2l0aG91dCBhbnkgaXNzdWVzLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZXZlcnl0aGluZy4gSXQgYWxsIGNoZWNrcyBvdXQuIFRpbWUgdG8gbWFrZSB0aGUgZmluYWwgY2FsbCB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTEsIk91dHB1dFRva2VucyI6MTkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MTUuMjc1NzYzNjA0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NjUwODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNXCIsXG4gICAgXCJYRlJNX0FMR09cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiQ1JZUFRPX0FSSUFcIixcbiAgICBcIkNSWVBUT19DQkNcIixcbiAgICBcIkNSWVBUT19DVFJcIixcbiAgICBcIklORVRfRVNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9lYWxnX2dldF9ieW5hbWVcIixcbiAgICBcInhmcm1fZmluZF9hbGdvXCIsXG4gICAgXCJ4ZnJtX3Byb2JlX2FsZ3NcIixcbiAgICBcImF0dGFjaF9jcnlwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXFxcImNiYyhhcmlhKVxcXCIgYW5kIFxcXCJyZmMzNjg2KGN0cihhcmlhKSlcXFwiKSB0byB0aGUgWEZSTSBlbmNyeXB0aW9uIGFsZ29yaXRobSByZWdpc3RyeSAoZWFsZ19saXN0KS4gVGhpcyBlbmFibGVzIHVzZXItc3BhY2UgdmlhIFhGUk0gTmV0bGluayBpbnRlcmZhY2UgdG8gY29uZmlndXJlIElQc2VjIFNBcyB3aXRoIEFSSUEgZW5jcnlwdGlvbiwgZXhlcmNpc2luZyB0aGUgY3J5cHRvIHN1YnN5c3RlbSBhbmQgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNXCIsXG4gICAgXCJYRlJNX0FMR09cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiQ1JZUFRPX0FSSUFcIixcbiAgICBcIkNSWVBUT19DQkNcIixcbiAgICBcIkNSWVBUT19DVFJcIixcbiAgICBcIklORVRfRVNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9lYWxnX2dldF9ieW5hbWVcIixcbiAgICBcInhmcm1fZmluZF9hbGdvXCIsXG4gICAgXCJ4ZnJtX3Byb2JlX2FsZ3NcIixcbiAgICBcImF0dGFjaF9jcnlwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXFxcImNiYyhhcmlhKVxcXCIgYW5kIFxcXCJyZmMzNjg2KGN0cihhcmlhKSlcXFwiKSB0byB0aGUgWEZSTSBlbmNyeXB0aW9uIGFsZ29yaXRobSByZWdpc3RyeSAoZWFsZ19saXN0KS4gVGhpcyBlbmFibGVzIHVzZXItc3BhY2UgdmlhIFhGUk0gTmV0bGluayBpbnRlcmZhY2UgdG8gY29uZmlndXJlIElQc2VjIFNBcyB3aXRoIEFSSUEgZW5jcnlwdGlvbiwgZXhlcmNpc2luZyB0aGUgY3J5cHRvIHN1YnN5c3RlbSBhbmQgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MTUuNDEwNDI0MDI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM0Mzk1NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjE1LjQxMTA2Nzk5NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MzQzMzA0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtZXJlbHkgcmVnaXN0ZXJzIHR3byBleGlzdGluZyBjaXBoZXIgc3VpdGVzIChcXFwiY2JjKGFyaWEpXFxcIiBhbmQgXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIpIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBcXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcXG4tIFRoZSBhZGRlZCBlbnRyaWVzIGFyZSBzdGF0aWMgYHN0cnVjdCB4ZnJtX2FsZ29fZGVzY2AgZGVmaW5pdGlvbnMgaW4gYC5kYXRhYCAvIGAucm9kYXRhYCB3aGVyZSB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLlxcbi0gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiwgc3RhY2sgdmFyaWFibGUgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zdXJlLCBvciBuZXRsaW5rIC8gYGNvcHlfdG9fdXNlcmAgZGF0YSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbi0gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2E1M2Q2ZWNkZTI1OGNhYzAwNDRiNWU5ZjBlOTI2ZGMwMzM1OTJlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDY6Mzg6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jXG5pbmRleCA3MDQzNDQ5NWYyM2Y1Li4xNmM3MGRjMWE0MjY4IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jXG5AQCAtNTEyLDYgKzUxMiwzNCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGVhbGdfbGlzdFtdID0ge1xuIFx0XHQuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NlxuIFx0fVxuIH0sXG4re1xuK1x0Lm5hbWUgPSBcImNiYyhhcmlhKVwiLFxuK1x0LmNvbXBhdCA9IFwiYXJpYVwiLFxuK1xuK1x0LnVpbmZvID0ge1xuK1x0XHQuZW5jciA9IHtcbitcdFx0XHQuZ2VuaXYgPSBcImVjaGFpbml2XCIsXG4rXHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbitcdFx0XHQuZGVma2V5Yml0cyA9IDI1NixcbitcdFx0fVxuK1x0fSxcbitcbitcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxuK30sXG4re1xuK1x0Lm5hbWUgPSBcInJmYzM2ODYoY3RyKGFyaWEpKVwiLFxuK1x0LmNvbXBhdCA9IFwiYXJpYVwiLFxuK1xuK1x0LnVpbmZvID0ge1xuK1x0XHQuZW5jciA9IHtcbitcdFx0XHQuZ2VuaXYgPSBcInNlcWl2XCIsXG4rXHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbitcdFx0XHQuZGVma2V5Yml0cyA9IDE2MCxcbitcdFx0fVxuK1x0fSxcbitcbitcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxuK30sXG4ge1xuIFx0Lm5hbWUgPSBcImNiYyh0d29maXNoKVwiLFxuIFx0LmNvbXBhdCA9IFwidHdvZmlzaFwiLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MTUuNDExMDY4ODc2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1NTc2MzEwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBmb3IgQVJJQSBDaXBoZXIgQWxnb3JpdGhtIFBhdGNoPyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIEFSSUEgY2lwaGVyIGFsZ29yaXRobXMsIHNwZWNpZmljYWxseSBgY2JjKGFyaWEpYCBhbmQgYHJmYzM2ODYoY3RyKGFyaWEpKWAsIHRvIGB4ZnJtX2FsZ28uY2AuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBMZXQncyBicmVhayBpdCBkb3duLiBXZSdyZSBkZWFsaW5nIHdpdGggZXZhbHVhdGluZyB0aGUgTGludXgga2VybmVsIHNhbml0aXplciBzdWl0YWJpbGl0eSBoZXJlLCBmb2N1c2luZyBvbiBLQVNBTiB2ZXJzdXMgS01TQU4gZm9yIGEgcGF0Y2guIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiZW5pZ24gZGVmZW5zaXZlIHNlY3VyaXR5IGFuYWx5c2lzIG9yIFFBIHRhc2ssIHBhdGNoIGV2YWx1YXRpb247IHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYW55IGFjdGl2ZSBleHBsb2l0IGdlbmVyYXRpb24gb3IgbWFsaWNpb3VzIGNvZGUuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGlzIHBhdGNoIGp1c3Qgc2VlbXMgdG8gYmUgYWRkaW5nIHR3byBlbnRyaWVzIHRvIHRoZSBgZWFsZ19saXN0YCBhcnJheSB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fYWxnby5jYC4gVGltZSB0byBncmFiIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDUxMiwgYW5kIGNoZWNrIG91dCB3aGF0J3MgYWxyZWFkeSB0aGVyZS4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCBsb29rcyBsaWtlLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIHBhdGNoJ3MgaW50ZWdyYXRpb24gYW5kIHBvdGVudGlhbCByaXNrcy4gTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgd2hldGhlciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB3aWxsIGhpbmdlIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4aXN0aW5nIGNvZGUgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHRoYXQgdGhlIGFkZGVkIGFsZ29yaXRobXMgbWlnaHQgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjI0Ljk2ODcwNDcyMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9hbGdvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdFxcdFxcdC5nZW5pdiA9IFxcXCJlY2hhaW5pdlxcXCIsXFxuIDUwMTpcXHRcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbiA1MDI6XFx0XFx0XFx0XFx0LmRlZmtleWJpdHMgPSAxMjgsXFxuIDUwMzpcXHRcXHRcXHR9XFxuIDUwNDpcXHRcXHR9LFxcbiA1MDU6XFx0XFxuIDUwNjpcXHRcXHQucGZrZXlfc3VwcG9ydGVkID0gMSxcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LmRlc2MgPSB7XFxuIDUwOTpcXHRcXHRcXHQuc2FkYl9hbGdfaWQgPSBTQURCX1hfRUFMR19DQU1FTExJQUNCQyxcXG4gNTEwOlxcdFxcdFxcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXFxuIDUxMTpcXHRcXHRcXHQuc2FkYl9hbGdfbWluYml0cyA9IDEyOCxcXG4gNTEyOlxcdFxcdFxcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XFxuIDUxMzpcXHRcXHR9XFxuIDUxNDpcXHR9LFxcbiA1MTU6XFx0e1xcbiA1MTY6XFx0XFx0Lm5hbWUgPSBcXFwiY2JjKGFyaWEpXFxcIixcXG4gNTE3OlxcdFxcdC5jb21wYXQgPSBcXFwiYXJpYVxcXCIsXFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdC51aW5mbyA9IHtcXG4gNTIwOlxcdFxcdFxcdC5lbmNyID0ge1xcbiA1MjE6XFx0XFx0XFx0XFx0Lmdlbml2ID0gXFxcImVjaGFpbml2XFxcIixcXG4gNTIyOlxcdFxcdFxcdFxcdC5ibG9ja2JpdHMgPSAxMjgsXFxuIDUyMzpcXHRcXHRcXHRcXHQuZGVma2V5Yml0cyA9IDI1NixcXG4gNTI0OlxcdFxcdFxcdH1cXG4gNTI1OlxcdFxcdH0sXFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxcbiA1Mjg6XFx0fSxcXG4gNTI5OlxcdHtcXG4gNTMwOlxcdFxcdC5uYW1lID0gXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIsXFxuIDUzMTpcXHRcXHQuY29tcGF0ID0gXFxcImFyaWFcXFwiLFxcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHQudWluZm8gPSB7XFxuIDUzNDpcXHRcXHRcXHQuZW5jciA9IHtcXG4gNTM1OlxcdFxcdFxcdFxcdC5nZW5pdiA9IFxcXCJzZXFpdlxcXCIsXFxuIDUzNjpcXHRcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbiA1Mzc6XFx0XFx0XFx0XFx0LmRlZmtleWJpdHMgPSAxNjAsXFxuIDUzODpcXHRcXHRcXHR9XFxuIDUzOTpcXHRcXHR9LFxcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHQucGZrZXlfc3VwcG9ydGVkID0gMCxcXG4gNTQyOlxcdH0sXFxuIDU0MzpcXHR7XFxuIDU0NDpcXHRcXHQubmFtZSA9IFxcXCJjYmModHdvZmlzaClcXFwiLFxcbiA1NDU6XFx0XFx0LmNvbXBhdCA9IFxcXCJ0d29maXNoXFxcIixcXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0LnVpbmZvID0ge1xcbiA1NDg6XFx0XFx0XFx0LmVuY3IgPSB7XFxuIDU0OTpcXHRcXHRcXHRcXHQuZ2VuaXYgPSBcXFwiZWNoYWluaXZcXFwiLFxcbiA1NTA6XFx0XFx0XFx0XFx0LmJsb2NrYml0cyA9IDEyOCxcXG4gNTUxOlxcdFxcdFxcdFxcdC5kZWZrZXliaXRzID0gMTI4LFxcbiA1NTI6XFx0XFx0XFx0fVxcbiA1NTM6XFx0XFx0fSxcXG4gNTU0OlxcdFxcbiA1NTU6XFx0XFx0LnBma2V5X3N1cHBvcnRlZCA9IDEsXFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdC5kZXNjID0ge1xcbiA1NTg6XFx0XFx0XFx0LnNhZGJfYWxnX2lkID0gU0FEQl9YX0VBTEdfVFdPRklTSENCQyxcXG4gNTU5OlxcdFxcdFxcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjI0Ljk2ODg4Nzg2MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODg5MjM4Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEFsZ29yaXRobSBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB4ZnJtX2FsZ29fZGVzY2AgaGVyZSwgYW5kIEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBpZiB0aGVyZSBhcmUgb3RoZXIsIHJlbGF0ZWQgYWxnb3JpdGhtcyBpbiB0aGUgYGVhbGdfbGlzdGAuIEl0IHNlZW1zIGxpa2UgYSBkZWVwZXIgZGl2ZSBpbnRvIGBuZXQveGZybS94ZnJtX2FsZ28uY2AgaXMgaW4gb3JkZXIuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHJlYWRpbmcgdGhyb3VnaCB0aGUgY29kZSB0aGVyZSBtb3JlIGNsb3NlbHkuIE9yLCBhIHF1aWNrIGdyZXAgZm9yIGBlYWxnX2xpc3RgIG1pZ2h0IGdpdmUgbWUgc29tZSB1c2VmdWwgY2x1ZXMgYW5kIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBJIGNhbiB1bmNvdmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjo0MDoyNi44NTgxNDAzODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTUxMTE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlYWxnX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fYWxnby5jPTE3NT1zdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGFhbGdfbGlzdFtdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtMzQ2LVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjM0NzpzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGVhbGdfbGlzdFtdID0ge1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTM0OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz02NDU9c3RhdGljIGlubGluZSBpbnQgZWFsZ19lbnRyaWVzKHZvaWQpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNjQ2LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NDc6XFx0cmV0dXJuIEFSUkFZX1NJWkUoZWFsZ19saXN0KTtcXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NDgtfVxcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NjY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgeGZybV9hYWxnX2xpc3QgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NzItXFxubmV0L3hmcm0veGZybV9hbGdvLmM6NjczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgeGZybV9lYWxnX2xpc3QgPSB7XFxubmV0L3hmcm0veGZybV9hbGdvLmMtNjc0LVxcdC5maW5kID0gY3J5cHRvX2hhc19za2NpcGhlcixcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NzU6XFx0LmFsZ3MgPSBlYWxnX2xpc3QsXFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njc2OlxcdC5lbnRyaWVzID0gQVJSQVlfU0laRShlYWxnX2xpc3QpLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3Ny19O1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NzI2PXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9lYWxnX2dldF9ieWlkKGludCBhbGdfaWQpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI3LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3Mjg6XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI5LVxcdFxcdFxcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTc1Nj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwcm9iZSlcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTcte1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc1ODpcXHRyZXR1cm4geGZybV9maW5kX2FsZ28oXFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1OS1cXHRcXHRcXHQgICAgICBwcm9iZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz04MDY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWR4KHVuc2lnbmVkIGludCBpZHgpXFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy04MTAtXFxubmV0L3hmcm0veGZybV9hbGdvLmM6ODExOlxcdHJldHVybiBcXHUwMDI2ZWFsZ19saXN0W2lkeF07XFxubmV0L3hmcm0veGZybV9hbGdvLmMtODEyLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTgyMD12b2lkIHhmcm1fcHJvYmVfYWxncyh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtODMyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlYWxnX2VudHJpZXMoKTsgaSsrKSB7XFxubmV0L3hmcm0veGZybV9hbGdvLmM6ODMzOlxcdFxcdHN0YXR1cyA9IGNyeXB0b19oYXNfc2tjaXBoZXIoZWFsZ19saXN0W2ldLm5hbWUsIDAsIDApO1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzNDpcXHRcXHRpZiAoZWFsZ19saXN0W2ldLmF2YWlsYWJsZSAhPSBzdGF0dXMpXFxubmV0L3hmcm0veGZybV9hbGdvLmM6ODM1OlxcdFxcdFxcdGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgPSBzdGF0dXM7XFxubmV0L3hmcm0veGZybV9hbGdvLmMtODM2LVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTg1Nz1pbnQgeGZybV9jb3VudF9wZmtleV9lbmNfc3VwcG9ydGVkKHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy04NjEtXFx0Zm9yIChpID0gMCwgbiA9IDA7IGkgXFx1MDAzYyBlYWxnX2VudHJpZXMoKTsgaSsrKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjg2MjpcXHRcXHRpZiAoZWFsZ19saXN0W2ldLmF2YWlsYWJsZSBcXHUwMDI2XFx1MDAyNiBlYWxnX2xpc3RbaV0ucGZrZXlfc3VwcG9ydGVkKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTg2My1cXHRcXHRcXHRuKys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjI3LjQxMzY1OTI5MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDg4MjAwMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXJpYSBFbmNyeXB0aW9uIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGNiYyhhcmlhKWAgYW5kIGByZmMzNjg2KGN0cihhcmlhKSlgIGFyZSBsaXN0ZWQgYXMgc3RhdGljIGVudHJpZXMgd2l0aGluIGBlYWxnX2xpc3RgLiBUaGlzIGlzIGEgc3RhdGljIGFycmF5LCByZXNpZGluZyBpbiBzdGF0aWMgbWVtb3J5LCB3aGljaCBtZWFucyB0aGUgQyBzdGFuZGFyZCBtYW5kYXRlcyB0aGF0IHVuaW5pdGlhbGl6ZWQgZmllbGRzIHdpbGwgYmUgemVyb2VkIGJ5IHRoZSBjb21waWxlci4gVGhlc2UgZW50cmllcyBhcmUgcmVnaXN0ZXJpbmcgc3RhbmRhcmQgc2tjaXBoZXIgZW5jcnlwdGlvbiBhbGdvcml0aG1zIGZvciBYRlJNL0lQc2VjLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZS5cblxuVGhlIGZhY3QgdGhhdCBgcGZrZXlfc3VwcG9ydGVkID0gMGAgaXMgY3J1Y2lhbC4gVGhpcyBtZWFucyB0aGVzZSBhbGdvcml0aG1zIGFyZW4ndCBleHBvc2VkIHRocm91Z2ggUEZfS0VZIGRpcmVjdGx5OyBpbnN0ZWFkLCB0aGV5IGFyZSBvbmx5IGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgWEZSTV9NU0dfKiBjYWxscywgYmFzZWQgb24gbmFtZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBhbSBJIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBhcmlhIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMsIG9yIGlzIHRoaXMganVzdCBzdHJhaWdodGZvcndhcmQgY29uZmlndXJhdGlvbiBhbmQgdGFibGUgcG9wdWxhdGlvbj9cblxuSG9sZCBvbi4uLiBJIGJlbGlldmUgSSBoYXZlIGFuIGFuc3dlci4gVGhlIFwiYXJpYVwiIGNyeXB0byBtb2R1bGUgYWxyZWFkeSBzZWVtcyB0byBleGlzdCwgc3BlY2lmaWNhbGx5IGluIGBjcnlwdG8vYXJpYSouY2Agb3IgcG9zc2libHkgdGhlIGdlbmVyaWMgdmVyc2lvbiwgYGNyeXB0by9hcmlhX2dlbmVyaWMuY2AuIE5vdyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRob3NlIGZpbGVzIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaXNzdWVzIGhpZGluZyB0aGVyZSwgYmVmb3JlIG1vdmluZyBhbnkgZnVydGhlci4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBgY3J5cHRvL2FyaWEqYCBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjo0MDozMC41MDE4ODI5NDFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjk1NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmlhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImNyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiY3J5cHRvL0tjb25maWc9Mzg4PWNvbmZpZyBDUllQVE9fQU5VQklTXFxuLS1cXG5jcnlwdG8vS2NvbmZpZy0zOTQtXFxuY3J5cHRvL0tjb25maWc6Mzk1OlxcdCAgQW51YmlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb21cXG5jcnlwdG8vS2NvbmZpZy0zOTYtXFx0ICAxMjggYml0cyB0byAzMjAgYml0cyBpbiBsZW5ndGguICBJdCB3YXMgZXZhbHVhdGVkIGFzIGEgZW50cmFudFxcbi0tXFxuY3J5cHRvL0tjb25maWc9NDE3PWNvbmZpZyBDUllQVE9fQkxPV0ZJU0hcXG4tLVxcbmNyeXB0by9LY29uZmlnLTQyMy1cXG5jcnlwdG8vS2NvbmZpZzo0MjQ6XFx0ICBUaGlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb20gMzJcXG5jcnlwdG8vS2NvbmZpZy00MjUtXFx0ICBiaXRzIHRvIDQ0OCBiaXRzIGluIGxlbmd0aC4gIEl0J3MgZmFzdCwgc2ltcGxlIGFuZCBzcGVjaWZpY2FsbHlcXG4tLVxcbmNyeXB0by9LY29uZmlnPTY2Nz1jb25maWcgQ1JZUFRPX0NUU1xcbi0tXFxuY3J5cHRvL0tjb25maWctNjcxLVxcdGhlbHBcXG5jcnlwdG8vS2NvbmZpZzo2NzI6XFx0ICBDQkMtQ1MzIHZhcmlhbnQgb2YgQ1RTIChDaXBoZXIgVGV4dCBTdGVhbGluZykgKE5JU1RcXG5jcnlwdG8vS2NvbmZpZy02NzMtXFx0ICBBZGRlbmR1bSB0byBTUDgwMC0zOEEgKE9jdG9iZXIgMjAxMCkpXFxuLS1cXG5jcnlwdG8vS2NvbmZpZz03MTc9Y29uZmlnIENSWVBUT19YQ1RSXFxuLS1cXG5jcnlwdG8vS2NvbmZpZy03MjMtXFxuY3J5cHRvL0tjb25maWc6NzI0OlxcdCAgVGhpcyBibG9ja2NpcGhlciBtb2RlIGlzIGEgdmFyaWFudCBvZiBDVFIgbW9kZSB1c2luZyBYT1JzIGFuZCBsaXR0bGUtZW5kaWFuXFxuY3J5cHRvL0tjb25maWctNzI1LVxcdCAgYWRkaXRpb24gcmF0aGVyIHRoYW4gYmlnLWVuZGlhbiBhcml0aG1ldGljLlxcbi0tXFxuY3J5cHRvL0tjb25maWc9MTEzOD1jaG9pY2VcXG4tLVxcbmNyeXB0by9LY29uZmlnLTExNDUtXFx0ICB0byB0aGF0IGNhY2hlIGlzIG1lYXN1cmVkLiBUaGUgY2xvc2VyIHRoZSBjYWNoZSBpcyB0byB0aGUgQ1BVXFxuY3J5cHRvL0tjb25maWc6MTE0NjpcXHQgIHRoZSBsZXNzIHZhcmlhdGlvbnMgYXJlIG1lYXN1cmVkIGFuZCB0aHVzIHRoZSBsZXNzIGVudHJvcHkgaXNcXG5jcnlwdG8vS2NvbmZpZy0xMTQ3LVxcdCAgb2J0YWluZWQuIFRodXMsIGlmIHRoZSBtZW1vcnkgc2l6ZSBmaXRzIGludG8gdGhlIEwxIGNhY2hlLCB0aGVcXG4tLVxcbmNyeXB0by9NYWtlZmlsZT0xNDM9b2JqLSQoQ09ORklHX0NSWVBUT19TRUVEKSArPSBzZWVkLm9cXG5jcnlwdG8vTWFrZWZpbGU6MTQ0Om9iai0kKENPTkZJR19DUllQVE9fQVJJQSkgKz0gYXJpYV9nZW5lcmljLm9cXG5jcnlwdG8vTWFrZWZpbGUtMTQ1LW9iai0kKENPTkZJR19DUllQVE9fQ0hBQ0hBMjApICs9IGNoYWNoYS5vXFxuLS1cXG5jcnlwdG8vYWRpYW50dW0uYy00Ni0vKlxcbmNyeXB0by9hZGlhbnR1bS5jOjQ3OiAqIFRoZSBzcGVjaWZpY2F0aW9uIGFsbG93cyB2YXJpYWJsZS1sZW5ndGggdHdlYWtzLCBidXQgTGludXgncyBjcnlwdG8gQVBJXFxuY3J5cHRvL2FkaWFudHVtLmMtNDgtICogY3VycmVudGx5IG9ubHkgYWxsb3dzIGFsZ29yaXRobXMgdG8gc3VwcG9ydCBhIHNpbmdsZSBsZW5ndGguICBUaGUgXFxcIm5hdHVyYWxcXFwiXFxuLS1cXG5jcnlwdG8vYWVzLmM9ODk5PXN0YXRpYyBpbnQgY3J5cHRvX2Flc19jY21faW5pdChzdHJ1Y3QgYWVzX2NjbV9jdHggKmN0eCxcXG4tLVxcbmNyeXB0by9hZXMuYy05MDctXFx0LypcXG5jcnlwdG8vYWVzLmM6OTA4OlxcdCAqIENDTSBhY2NlcHRzIGEgdmFyaWFibGUtbGVuZ3RoIG5vbmNlIGJldHdlZW4gNyBhbmQgMTMgYnl0ZXNcXG5jcnlwdG8vYWVzLmMtOTA5LVxcdCAqIGluY2x1c2l2ZWx5LCB3aGlsZSBjcnlwdG9fYWVhZCBhc3N1bWVzIGEgZml4ZWQtbGVuZ3RoIElWLiAgVGhpcyBpc1xcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE2LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNzojaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2FyaWEuaFxcdTAwM2VcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jPTIwPXN0YXRpYyBjb25zdCB1MzIga2V5X3JjWzIwXSA9IHtcXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNy1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjg6c3RhdGljIHZvaWQgYXJpYV9zZXRfZW5jcnlwdF9rZXkoc3RydWN0IGFyaWFfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI5LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQga2V5X2xlbilcXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy00Ny1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6NDg6XFx0YXJpYV9zdWJzdF9kaWZmX29kZChcXHUwMDI2cmVnMCwgXFx1MDAyNnJlZzEsIFxcdTAwMjZyZWcyLCBcXHUwMDI2cmVnMyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTQ5LVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTgxLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzo4MjpcXHRhcmlhX3N1YnN0X2RpZmZfZXZlbihcXHUwMDI2cmVnMCwgXFx1MDAyNnJlZzEsIFxcdTAwMjZyZWcyLCBcXHUwMDI2cmVnMyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTgzLVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTk4LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzo5OTpcXHRhcmlhX3N1YnN0X2RpZmZfb2RkKFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTAwLVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEwNS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTA2OlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDE5KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTA3LVxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEwODpcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCAxOSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEwOS1cXHRya2lkeCsrO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMTA6XFx0YXJpYV9nc3JrKGN0eC1cXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgMTkpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMTEtXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTEyOlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MywgdzAsIDE5KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTEzLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMTQtXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTE1OlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDMxKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTE2LVxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjExNzpcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCAzMSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTExOC1cXHRya2lkeCsrO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMTk6XFx0YXJpYV9nc3JrKGN0eC1cXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgMzEpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjAtXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTIxOlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MywgdzAsIDMxKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTIyLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjMtXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTI0OlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDY3KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTI1LVxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEyNjpcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCA2Nyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEyNy1cXHRya2lkeCsrO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMjg6XFx0YXJpYV9nc3JrKGN0eC1cXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgNjcpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjktXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTMwOlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MywgdzAsIDY3KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTMxLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMzItXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTMzOlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDk3KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTM0LVxcdGlmIChrZXlfbGVuIFxcdTAwM2UgMTYpIHtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTM1LVxcdFxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEzNjpcXHRcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCA5Nyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEzNy1cXHRcXHRya2lkeCsrO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMzg6XFx0XFx0YXJpYV9nc3JrKGN0eC1cXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgOTcpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMzktXFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTQxLVxcdFxcdFxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE0MjpcXHRcXHRcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzMsIHcwLCA5Nyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0My1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTQ0LVxcdFxcdFxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE0NTpcXHRcXHRcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzAsIHcxLCAxMDkpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNDYtXFx0XFx0fVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0OS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTUwOnN0YXRpYyB2b2lkIGFyaWFfc2V0X2RlY3J5cHRfa2V5KHN0cnVjdCBhcmlhX2N0eCAqY3R4KVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNTEte1xcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE1OS1cXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgY3R4LVxcdTAwM2Vyb3VuZHM7IGkrKykge1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjA6XFx0XFx0Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzBdID0gYXJpYV9tKGN0eC1cXHUwMDNlZW5jX2tleVtjdHgtXFx1MDAzZXJvdW5kcyAtIGldWzBdKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTYxOlxcdFxcdGN0eC1cXHUwMDNlZGVjX2tleVtpXVsxXSA9IGFyaWFfbShjdHgtXFx1MDAzZWVuY19rZXlbY3R4LVxcdTAwM2Vyb3VuZHMgLSBpXVsxXSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE2MjpcXHRcXHRjdHgtXFx1MDAzZWRlY19rZXlbaV1bMl0gPSBhcmlhX20oY3R4LVxcdTAwM2VlbmNfa2V5W2N0eC1cXHUwMDNlcm91bmRzIC0gaV1bMl0pO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjM6XFx0XFx0Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzNdID0gYXJpYV9tKGN0eC1cXHUwMDNlZW5jX2tleVtjdHgtXFx1MDAzZXJvdW5kcyAtIGldWzNdKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTY0LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjU6XFx0XFx0YXJpYV9kaWZmX3dvcmQoXFx1MDAyNmN0eC1cXHUwMDNlZGVjX2tleVtpXVswXSwgXFx1MDAyNmN0eC1cXHUwMDNlZGVjX2tleVtpXVsxXSxcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTY2LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzJdLCBcXHUwMDI2Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzNdKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTY3OlxcdFxcdGFyaWFfZGlmZl9ieXRlKFxcdTAwMjZjdHgtXFx1MDAzZWRlY19rZXlbaV1bMV0sXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE2OC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNmN0eC1cXHUwMDNlZGVjX2tleVtpXVsyXSwgXFx1MDAyNmN0eC1cXHUwMDNlZGVjX2tleVtpXVszXSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE2OTpcXHRcXHRhcmlhX2RpZmZfd29yZChcXHUwMDI2Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzBdLCBcXHUwMDI2Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzFdLFxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNzAtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjdHgtXFx1MDAzZWRlY19rZXlbaV1bMl0sIFxcdTAwMjZjdHgtXFx1MDAzZWRlY19rZXlbaV1bM10pO1xcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE3My1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTc0OmludCBhcmlhX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwgdW5zaWduZWQgaW50IGtleV9sZW4pXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE3NS17XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE3NjpcXHRzdHJ1Y3QgYXJpYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE3Ny1cXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xODctXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE4ODpcXHRhcmlhX3NldF9lbmNyeXB0X2tleShjdHgsIGluX2tleSwga2V5X2xlbik7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE4OTpcXHRhcmlhX3NldF9kZWNyeXB0X2tleShjdHgpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xOTAtXFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTkyLX1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTkzOkVYUE9SVF9TWU1CT0xfR1BMKGFyaWFfc2V0X2tleSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE5NC1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTk1OnN0YXRpYyB2b2lkIF9fYXJpYV9jcnlwdChzdHJ1Y3QgYXJpYV9jdHggKmN0eCwgdTggKm91dCwgY29uc3QgdTggKmluLFxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xOTYtXFx0XFx0XFx0IHUzMiBrZXlbXVtBUklBX1JEX0tFWV9XT1JEU10pXFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjA3LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMDg6XFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjA5LVxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIxMC1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjExOlxcdGFyaWFfc3Vic3RfZGlmZl9vZGQoXFx1MDAyNnJlZzAsIFxcdTAwMjZyZWcxLCBcXHUwMDI2cmVnMiwgXFx1MDAyNnJlZzMpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTI6XFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjEzLVxcdHJraWR4Kys7XFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjE1LVxcdHdoaWxlICgocm91bmRzIC09IDIpIFxcdTAwM2UgMCkge1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTY6XFx0XFx0YXJpYV9zdWJzdF9kaWZmX2V2ZW4oXFx1MDAyNnJlZzAsIFxcdTAwMjZyZWcxLCBcXHUwMDI2cmVnMiwgXFx1MDAyNnJlZzMpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTc6XFx0XFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjE4LVxcdFxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIxOS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjIwOlxcdFxcdGFyaWFfc3Vic3RfZGlmZl9vZGQoXFx1MDAyNnJlZzAsIFxcdTAwMjZyZWcxLCBcXHUwMDI2cmVnMiwgXFx1MDAyNnJlZzMpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMjE6XFx0XFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjIyLVxcdFxcdHJraWR4Kys7XFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjQ3LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNDg6dm9pZCBhcmlhX2VuY3J5cHQodm9pZCAqX2N0eCwgdTggKm91dCwgY29uc3QgdTggKmluKVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNDkte1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNTA6XFx0c3RydWN0IGFyaWFfY3R4ICpjdHggPSAoc3RydWN0IGFyaWFfY3R4ICopX2N0eDtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjUxLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNTI6XFx0X19hcmlhX2NyeXB0KGN0eCwgb3V0LCBpbiwgY3R4LVxcdTAwM2VlbmNfa2V5KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjUzLX1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjU0OkVYUE9SVF9TWU1CT0xfR1BMKGFyaWFfZW5jcnlwdCk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI1NS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjU2OnZvaWQgYXJpYV9kZWNyeXB0KHZvaWQgKl9jdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjU3LXtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjU4OlxcdHN0cnVjdCBhcmlhX2N0eCAqY3R4ID0gKHN0cnVjdCBhcmlhX2N0eCAqKV9jdHg7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI1OS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjYwOlxcdF9fYXJpYV9jcnlwdChjdHgsIG91dCwgaW4sIGN0eC1cXHUwMDNlZGVjX2tleSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2MS19XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2MjpFWFBPUlRfU1lNQk9MX0dQTChhcmlhX2RlY3J5cHQpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNjMtXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2NDpzdGF0aWMgdm9pZCBfX2FyaWFfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2NS17XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2NjpcXHRzdHJ1Y3QgYXJpYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2Ny1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjY4OlxcdF9fYXJpYV9jcnlwdChjdHgsIG91dCwgaW4sIGN0eC1cXHUwMDNlZW5jX2tleSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2OS19XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI3MC1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjcxOnN0YXRpYyB2b2lkIF9fYXJpYV9kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjcyLXtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjczOlxcdHN0cnVjdCBhcmlhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjc0LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzU6XFx0X19hcmlhX2NyeXB0KGN0eCwgb3V0LCBpbiwgY3R4LVxcdTAwM2VkZWNfa2V5KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjc2LX1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjc3LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzg6c3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFyaWFfYWxnID0ge1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzk6XFx0LmNyYV9uYW1lXFx0XFx0PVxcdFxcXCJhcmlhXFxcIixcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjgwOlxcdC5jcmFfZHJpdmVyX25hbWVcXHQ9XFx0XFxcImFyaWEtZ2VuZXJpY1xcXCIsXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI4MS1cXHQuY3JhX3ByaW9yaXR5XFx0XFx0PVxcdDEwMCxcXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yODMtXFx0LmNyYV9ibG9ja3NpemVcXHRcXHQ9XFx0QVJJQV9CTE9DS19TSVpFLFxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyODQ6XFx0LmNyYV9jdHhzaXplXFx0XFx0PVxcdHNpemVvZihzdHJ1Y3QgYXJpYV9jdHgpLFxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yODUtXFx0LmNyYV9tb2R1bGVcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjg5LVxcdFxcdFxcdC5jaWFfbWF4X2tleXNpemVcXHQ9XFx0QVJJQV9NQVhfS0VZX1NJWkUsXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5MDpcXHRcXHRcXHQuY2lhX3NldGtleVxcdFxcdD1cXHRhcmlhX3NldF9rZXksXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5MTpcXHRcXHRcXHQuY2lhX2VuY3J5cHRcXHRcXHQ9XFx0X19hcmlhX2VuY3J5cHQsXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5MjpcXHRcXHRcXHQuY2lhX2RlY3J5cHRcXHRcXHQ9XFx0X19hcmlhX2RlY3J5cHRcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjkzLVxcdFxcdH1cXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yOTYtXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5NzpzdGF0aWMgaW50IF9faW5pdCBhcmlhX2luaXQodm9pZClcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjk4LXtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjk5OlxcdHJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKFxcdTAwMjZhcmlhX2FsZyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwMC19XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwMS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MzAyOnN0YXRpYyB2b2lkIF9fZXhpdCBhcmlhX2Zpbmkodm9pZClcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzAzLXtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MzA0OlxcdGNyeXB0b191bnJlZ2lzdGVyX2FsZyhcXHUwMDI2YXJpYV9hbGcpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0zMDUtfVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0zMDYtXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMwNzptb2R1bGVfaW5pdChhcmlhX2luaXQpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzozMDg6bW9kdWxlX2V4aXQoYXJpYV9maW5pKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzA5LVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jPTMxMj1NT0RVTEVfQVVUSE9SKFxcXCJUYWVoZWUgWW9vIFxcdTAwM2NhcDQyMDA3M0BnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMxMzpNT0RVTEVfQUxJQVNfQ1JZUFRPKFxcXCJhcmlhXFxcIik7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMxNDpNT0RVTEVfQUxJQVNfQ1JZUFRPKFxcXCJhcmlhLWdlbmVyaWNcXFwiKTtcXG4tLVxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMT03Nz1TaWduZXJJbmZvIDo6PSBTRVFVRU5DRSB7XFxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzNy5hc24xLTc4LVxcdHZlcnNpb25cXHRcXHRcXHRJTlRFR0VSICh7IHBrY3M3X25vdGVfc2lnbmVyaW5mb192ZXJzaW9uIH0pLFxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMTo3OTpcXHRzaWRcXHRcXHRcXHRTaWduZXJJZGVudGlmaWVyLCAtLSBDTVMgdmFyaWFudCwgbm90IFBLQ1MjN1xcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMS04MC1cXHRkaWdlc3RBbGdvcml0aG1cXHRcXHREaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyICh7IHBrY3M3X3NpZ19ub3RlX2RpZ2VzdF9hbGdvIH0pLFxcbi0tXFxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzN190cnVzdC5jPTIyPXN0YXRpYyBpbnQgcGtjczdfdmFsaWRhdGVfdHJ1c3Rfb25lKHN0cnVjdCBwa2NzN19tZXNzYWdlICpwa2NzNyxcXG4tLVxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczdfdHJ1c3QuYy01NC1cXHRcXHRcXHQgKiBpcyBhcHBhcmVudGx5IHRoZSBzYW1lIGFzIG9uZSB3ZSBhbHJlYWR5IHRydXN0LlxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczdfdHJ1c3QuYzo1NTpcXHRcXHRcXHQgKiBWZXJpZnkgdGhhdCB0aGUgdHJ1c3RlZCB2YXJpYW50IGNhbiBhbHNvIHZhbGlkYXRlXFxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzN190cnVzdC5jLTU2LVxcdFxcdFxcdCAqIHRoZSBzaWduYXR1cmUgb24gdGhlIGRlc2NlbmRhbnQuXFxuLS1cXG5jcnlwdG8vYXN5bW1ldHJpY19rZXlzL3BrY3M4LmFzbjEtNy0tLVxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczguYXNuMTo4Oi0tIFRoaXMgaXMgdGhlIHVuZW5jcnlwdGVkIHZhcmlhbnRcXG5jcnlwdG8vYXN5bW1ldHJpY19rZXlzL3BrY3M4LmFzbjEtOS0tLVxcbi0tXFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz02NDM9c3RhdGljIHZvaWQgY2FtZWxsaWFfc2V0dXAyNTYoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1MzIgKnN1YmtleSlcXG4tLVxcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtNjQ2LVxcdHUzMiBrcmxsLCBrcmxyLCBrcnJsLCBrcnJyOyAgICAvKiByaWdodCBoYWxmIG9mIGtleSAqL1xcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmM6NjQ3OlxcdHUzMiBpbCwgaXIsIHQwLCB0MSwgdzAsIHcxOyAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGVzICovXFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYy02NDgtXFx0dTMyIHN1YkxbMzRdO1xcbi0tXFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz04NDM9c3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZW5jcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgbWF4KVxcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtODQ0LXtcXG5jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jOjg0NTpcXHR1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqL1xcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtODQ2LVxcbi0tXFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz04OTg9c3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZGVjcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgaSlcXG5jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jLTg5OS17XFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYzo5MDA6XFx0dTMyIGlsLCBpciwgdDAsIHQxOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi9cXG5jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jLTkwMS1cXG4tLVxcbmNyeXB0by9oY3RyMi5jLTI3LS8qXFxuY3J5cHRvL2hjdHIyLmM6Mjg6ICogVGhlIHNwZWNpZmljYXRpb24gYWxsb3dzIHZhcmlhYmxlLWxlbmd0aCB0d2Vha3MsIGJ1dCBMaW51eCdzIGNyeXB0byBBUElcXG5jcnlwdG8vaGN0cjIuYy0yOS0gKiBjdXJyZW50bHkgb25seSBhbGxvd3MgYWxnb3JpdGhtcyB0byBzdXBwb3J0IGEgc2luZ2xlIGxlbmd0aC4gIFRoZSBcXFwibmF0dXJhbFxcXCJcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmM9NzA9dm9pZCBqZW50X3pmcmVlKHZvaWQgKnB0cilcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmMtNzYtICogT2J0YWluIGEgaGlnaC1yZXNvbHV0aW9uIHRpbWUgc3RhbXAgdmFsdWUuIFRoZSB0aW1lIHN0YW1wIGlzIHVzZWQgdG8gbWVhc3VyZVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmM6Nzc6ICogdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGEgZ2l2ZW4gY29kZSBwYXRoIGFuZCBpdHMgdmFyaWF0aW9ucy4gSGVuY2UsIHRoZSB0aW1lXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYy03OC0gKiBzdGFtcCBtdXN0IGhhdmUgYSBzdWZmaWNpZW50bHkgaGlnaCByZXNvbHV0aW9uLlxcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jPTI2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZW50X3Jhd19kZWJ1Z2ZzX3Jvb3QgPSBOVUxMO1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jLTMwLS8qXFxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jOjMxOiAqIGJvb3QgdmFyaWFibGU6XFxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jLTMyLSAqIDAgPT1cXHUwMDNlIE5vIGJvb3QgdGVzdCwgZ2F0aGVyaW5nIG9mIHJ1bnRpbWUgZGF0YSBhbGxvd2VkXFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTY0PXN0cnVjdCByYW5kX2RhdGEge1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy0xMTYtI2RlZmluZSBKRU5UX0VOT01PTk9UT05JQ1xcdDMgLyogVGltZXIgaXMgbm90IG1vbm90b25pYyBpbmNyZWFzaW5nICovXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzoxMTc6I2RlZmluZSBKRU5UX0VWQVJWQVJcXHRcXHQ1IC8qIFRpbWVyIGRvZXMgbm90IHByb2R1Y2UgdmFyaWF0aW9ucyBvZlxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6MTE4OlxcdFxcdFxcdFxcdCAgICogdmFyaWF0aW9ucyAoMm5kIGRlcml2YXRpb24gb2YgdGltZSBpc1xcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtMTE5LVxcdFxcdFxcdFxcdCAgICogemVybykuICovXFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTQyMj1zdGF0aWMgdm9pZCBqZW50X2NvbmRpdGlvbl9kYXRhKHN0cnVjdCByYW5kX2RhdGEgKmVjLCBfX3U2NCB0aW1lLCBpbnQgc3R1Y2spXFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS5jLTQ0MS0vKlxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NDQyOiAqIE1lbW9yeSBBY2Nlc3Mgbm9pc2Ugc291cmNlIC0tIHRoaXMgaXMgYSBub2lzZSBzb3VyY2UgYmFzZWQgb24gdmFyaWF0aW9ucyBpblxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNDQzLSAqXFx0XFx0XFx0XFx0IG1lbW9yeSBhY2Nlc3MgdGltZXNcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNDQ1LSAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbWVtb3J5IGFjY2Vzc2VzIHdoaWNoIHdpbGwgYWRkIHRvIHRoZSB0aW1pbmdcXG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjQ0NjogKiB2YXJpYXRpb25zIGR1ZSB0byBhbiB1bmtub3duIGFtb3VudCBvZiBDUFUgd2FpdCBzdGF0ZXMgdGhhdCBuZWVkIHRvIGJlXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDctICogYWRkZWQgd2hlbiBhY2Nlc3NpbmcgbWVtb3J5LiBUaGUgbWVtb3J5IHNpemUgc2hvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBMMVxcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NTEtICogc2xvd2VyIHRoYW4gYWNjZXNzaW5nIENQVSByZWdpc3RlcnMuIFRoZXJlZm9yZSwgTDEgYWNjZXNzZXMgb25seSBhZGQgbWluaW1hbFxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NDUyOiAqIHZhcmlhdGlvbnMgYXMgdGhlIENQVSBoYXMgaGFyZGx5IHRvIHdhaXQuIFN0YXJ0aW5nIHdpdGggTDIsIHNpZ25pZmljYW50XFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo0NTM6ICogdmFyaWF0aW9ucyBhcmUgYWRkZWQgYmVjYXVzZSBMMiB0eXBpY2FsbHkgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBDUFUgYW55IG1vcmVcXG5jcnlwdG8vaml0dGVyZW50cm9weS5jLTQ1NC0gKiBhbmQgdGhlcmVmb3JlIGEgd2lkZXIgcmFuZ2Ugb2YgQ1BVIHdhaXQgc3RhdGVzIGlzIG5lY2Vzc2FyeSBmb3IgYWNjZXNzZXMuXFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTUxOT1zdGF0aWMgaW50IGplbnRfbWVhc3VyZV9qaXR0ZXIoc3RydWN0IHJhbmRfZGF0YSAqZWMsIF9fdTY0ICpyZXRfY3VycmVudF9kZWx0YSlcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNTI0LVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NTI1OlxcdC8qIEludm9rZSBvbmUgbm9pc2Ugc291cmNlIGJlZm9yZSB0aW1lIG1lYXN1cmVtZW50IHRvIGFkZCB2YXJpYXRpb25zICovXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MjYtXFx0amVudF9tZW1hY2Nlc3MoZWMsIDApO1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MjktXFx0ICogR2V0IHRpbWUgc3RhbXAgYW5kIGNhbGN1bGF0ZSB0aW1lIGRlbHRhIHRvIHByZXZpb3VzXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo1MzA6XFx0ICogaW52b2NhdGlvbiB0byBtZWFzdXJlIHRoZSB0aW1pbmcgdmFyaWF0aW9uc1xcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNTMxLVxcdCAqL1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYz02NTQ9c3RydWN0IHJhbmRfZGF0YSAqamVudF9lbnRyb3B5X2NvbGxlY3Rvcl9hbGxvYyh1bnNpZ25lZCBpbnQgb3NyLFxcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy02NjQtXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBKRU5UX0RJU0FCTEVfTUVNT1JZX0FDQ0VTUykpIHtcXG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjY2NTpcXHRcXHQvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGFkZGluZyB2YXJpYXRpb25zIGJhc2VkIG9uIG1lbW9yeVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNjY2LVxcdFxcdCAqIGFjY2Vzc1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYz03MDQ9aW50IGplbnRfZW50cm9weV9pbml0KHVuc2lnbmVkIGludCBvc3IsIHVuc2lnbmVkIGludCBmbGFncyxcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNzgzLVxcdFxcdC8qXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo3ODQ6XFx0XFx0ICogdXAgdG8gaGVyZSB3ZSBkaWQgbm90IG1vZGlmeSBhbnkgdmFyaWFibGUgdGhhdCB3aWxsIGJlXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy03ODUtXFx0XFx0ICogZXZhbHVhdGVkIGxhdGVyLCBidXQgd2UgYWxyZWFkeSBwZXJmb3JtZWQgc29tZSB3b3JrLiBUaHVzIHdlXFxuLS1cXG5jcnlwdG8vc2VycGVudF9nZW5lcmljLmMtMjI0LSAqIGJvdGggZ2NjIGFuZCBjbGFuZyBoYXZlIG1pc29wdGltaXplZCB0aGlzIGZ1bmN0aW9uIGluIHRoZSBwYXN0LFxcbmNyeXB0by9zZXJwZW50X2dlbmVyaWMuYzoyMjU6ICogcHJvZHVjaW5nIGhvcnJpYmxlIG9iamVjdCBjb2RlIGZyb20gc3BpbGxpbmcgdGVtcG9yYXJ5IHZhcmlhYmxlc1xcbmNyeXB0by9zZXJwZW50X2dlbmVyaWMuYy0yMjYtICogb24gdGhlIHN0YWNrLiBGb3JjaW5nIHRoaXMgcGFydCBvdXQgb2YgbGluZSBhdm9pZHMgdGhhdC5cXG4tLVxcbmNyeXB0by90Y3J5cHQuYz0xNDU4PXN0YXRpYyBpbnQgZG9fdGVzdChjb25zdCBjaGFyICphbGcsIHUzMiB0eXBlLCB1MzIgbWFzaywgaW50IG0sIHUzMiBudW1fbWIpXFxuLS1cXG5jcnlwdG8vdGNyeXB0LmMtMTY4Ny1cXHRjYXNlIDU4OlxcbmNyeXB0by90Y3J5cHQuYzoxNjg4OlxcdFxcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFxcXCJnY20oYXJpYSlcXFwiKSk7XFxuY3J5cHRvL3RjcnlwdC5jLTE2ODktXFx0XFx0YnJlYWs7XFxuLS1cXG5jcnlwdG8vdGNyeXB0LmMtMTgyNy1cXHRjYXNlIDE5MjpcXG5jcnlwdG8vdGNyeXB0LmM6MTgyODpcXHRcXHRyZXQgPSBtaW4ocmV0LCB0Y3J5cHRfdGVzdChcXFwiZWNiKGFyaWEpXFxcIikpO1xcbmNyeXB0by90Y3J5cHQuYzoxODI5OlxcdFxcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFxcXCJjYmMoYXJpYSlcXFwiKSk7XFxuY3J5cHRvL3RjcnlwdC5jOjE4MzA6XFx0XFx0cmV0ID0gbWluKHJldCwgdGNyeXB0X3Rlc3QoXFxcImN0cihhcmlhKVxcXCIpKTtcXG5jcnlwdG8vdGNyeXB0LmMtMTgzMS1cXHRcXHRicmVhaztcXG4tLVxcbmNyeXB0by90Y3J5cHQuYy0yMTYxLVxcdGNhc2UgMjI3OlxcbmNyeXB0by90Y3J5cHQuYzoyMTYyOlxcdFxcdHRlc3RfY2lwaGVyX3NwZWVkKFxcXCJlY2IoYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXFxuY3J5cHRvL3RjcnlwdC5jLTIxNjMtXFx0XFx0XFx0XFx0ICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XFxuY3J5cHRvL3RjcnlwdC5jOjIxNjQ6XFx0XFx0dGVzdF9jaXBoZXJfc3BlZWQoXFxcImVjYihhcmlhKVxcXCIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjE2NS1cXHRcXHRcXHRcXHQgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG5jcnlwdG8vdGNyeXB0LmM6MjE2NjpcXHRcXHR0ZXN0X2NpcGhlcl9zcGVlZChcXFwiY2JjKGFyaWEpXFxcIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yMTY3LVxcdFxcdFxcdFxcdCAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xcbmNyeXB0by90Y3J5cHQuYzoyMTY4OlxcdFxcdHRlc3RfY2lwaGVyX3NwZWVkKFxcXCJjYmMoYXJpYSlcXFwiLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXFxuY3J5cHRvL3RjcnlwdC5jLTIxNjktXFx0XFx0XFx0XFx0ICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XFxuY3J5cHRvL3RjcnlwdC5jOjIxNzA6XFx0XFx0dGVzdF9jaXBoZXJfc3BlZWQoXFxcImN0cihhcmlhKVxcXCIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjE3MS1cXHRcXHRcXHRcXHQgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG5jcnlwdG8vdGNyeXB0LmM6MjE3MjpcXHRcXHR0ZXN0X2NpcGhlcl9zcGVlZChcXFwiY3RyKGFyaWEpXFxcIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yMTczLVxcdFxcdFxcdFxcdCAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xcbi0tXFxuY3J5cHRvL3RjcnlwdC5jLTIxNzYtXFx0Y2FzZSAyMjg6XFxuY3J5cHRvL3RjcnlwdC5jOjIxNzc6XFx0XFx0dGVzdF9hZWFkX3NwZWVkKFxcXCJnY20oYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsXFxuY3J5cHRvL3RjcnlwdC5jLTIxNzgtXFx0XFx0XFx0XFx0TlVMTCwgMCwgMTYsIDgsIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG5jcnlwdG8vdGNyeXB0LmM6MjE3OTpcXHRcXHR0ZXN0X2FlYWRfc3BlZWQoXFxcImdjbShhcmlhKVxcXCIsIERFQ1JZUFQsIHNlYyxcXG5jcnlwdG8vdGNyeXB0LmMtMjE4MC1cXHRcXHRcXHRcXHROVUxMLCAwLCAxNiwgOCwgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xcbi0tXFxuY3J5cHRvL3RjcnlwdC5jLTIxODMtXFx0Y2FzZSAyMjk6XFxuY3J5cHRvL3RjcnlwdC5jOjIxODQ6XFx0XFx0dGVzdF9tYl9hZWFkX3NwZWVkKFxcXCJnY20oYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsIDE2LCA4LFxcbmNyeXB0by90Y3J5cHQuYy0yMTg1LVxcdFxcdFxcdFxcdCAgIHNwZWVkX3RlbXBsYXRlXzE2LCBudW1fbWIpO1xcbmNyeXB0by90Y3J5cHQuYzoyMTg2OlxcdFxcdHRlc3RfbWJfYWVhZF9zcGVlZChcXFwiZ2NtKGFyaWEpXFxcIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLCAxNiwgOCxcXG5jcnlwdG8vdGNyeXB0LmMtMjE4Ny1cXHRcXHRcXHRcXHQgICBzcGVlZF90ZW1wbGF0ZV8xNiwgbnVtX21iKTtcXG4tLVxcbmNyeXB0by90Y3J5cHQuYy0yNTY5LVxcdGNhc2UgNTE5OlxcbmNyeXB0by90Y3J5cHQuYzoyNTcwOlxcdFxcdHRlc3RfYWNpcGhlcl9zcGVlZChcXFwiZWNiKGFyaWEpXFxcIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yNTcxLVxcdFxcdFxcdFxcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG5jcnlwdG8vdGNyeXB0LmM6MjU3MjpcXHRcXHR0ZXN0X2FjaXBoZXJfc3BlZWQoXFxcImVjYihhcmlhKVxcXCIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjU3My1cXHRcXHRcXHRcXHQgICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XFxuY3J5cHRvL3RjcnlwdC5jOjI1NzQ6XFx0XFx0dGVzdF9hY2lwaGVyX3NwZWVkKFxcXCJjdHIoYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXFxuY3J5cHRvL3RjcnlwdC5jLTI1NzUtXFx0XFx0XFx0XFx0ICAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xcbmNyeXB0by90Y3J5cHQuYzoyNTc2OlxcdFxcdHRlc3RfYWNpcGhlcl9zcGVlZChcXFwiY3RyKGFyaWEpXFxcIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yNTc3LVxcdFxcdFxcdFxcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG4tLVxcbmNyeXB0by90Y3J5cHQuYy0yNzczLVxcdGNhc2UgNjEwOlxcbmNyeXB0by90Y3J5cHQuYzoyNzc0OlxcdFxcdHRlc3RfbWJfc2tjaXBoZXJfc3BlZWQoXFxcImVjYihhcmlhKVxcXCIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjc3NS1cXHRcXHRcXHRcXHQgICAgICAgc3BlZWRfdGVtcGxhdGVfMTZfMzIsIG51bV9tYik7XFxuY3J5cHRvL3RjcnlwdC5jOjI3NzY6XFx0XFx0dGVzdF9tYl9za2NpcGhlcl9zcGVlZChcXFwiZWNiKGFyaWEpXFxcIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yNzc3LVxcdFxcdFxcdFxcdCAgICAgICBzcGVlZF90ZW1wbGF0ZV8xNl8zMiwgbnVtX21iKTtcXG5jcnlwdG8vdGNyeXB0LmM6Mjc3ODpcXHRcXHR0ZXN0X21iX3NrY2lwaGVyX3NwZWVkKFxcXCJjdHIoYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXFxuY3J5cHRvL3RjcnlwdC5jLTI3NzktXFx0XFx0XFx0XFx0ICAgICAgIHNwZWVkX3RlbXBsYXRlXzE2XzMyLCBudW1fbWIpO1xcbmNyeXB0by90Y3J5cHQuYzoyNzgwOlxcdFxcdHRlc3RfbWJfc2tjaXBoZXJfc3BlZWQoXFxcImN0cihhcmlhKVxcXCIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjc4MS1cXHRcXHRcXHRcXHQgICAgICAgc3BlZWRfdGVtcGxhdGVfMTZfMzIsIG51bV9tYik7XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5jPTQwNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjIGFsZ190ZXN0X2Rlc2NzW10gPSB7XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5jLTQzNDAtXFx0fSwge1xcbmNyeXB0by90ZXN0bWdyLmM6NDM0MTpcXHRcXHQuYWxnID0gXFxcImNiYyhhcmlhKVxcXCIsXFxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQyLVxcdFxcdC50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsXFxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQzLVxcdFxcdC5zdWl0ZSA9IHtcXG5jcnlwdG8vdGVzdG1nci5jOjQzNDQ6XFx0XFx0XFx0LmNpcGhlciA9IF9fVkVDUyhhcmlhX2NiY190dl90ZW1wbGF0ZSlcXG5jcnlwdG8vdGVzdG1nci5jLTQzNDUtXFx0XFx0fSxcXG4tLVxcbmNyeXB0by90ZXN0bWdyLmMtNDUxMy1cXHR9LCB7XFxuY3J5cHRvL3Rlc3RtZ3IuYzo0NTE0OlxcdFxcdC5hbGcgPSBcXFwiY3RyKGFyaWEpXFxcIixcXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTUtXFx0XFx0LnRlc3QgPSBhbGdfdGVzdF9za2NpcGhlcixcXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTYtXFx0XFx0LnN1aXRlID0ge1xcbmNyeXB0by90ZXN0bWdyLmM6NDUxNzpcXHRcXHRcXHQuY2lwaGVyID0gX19WRUNTKGFyaWFfY3RyX3R2X3RlbXBsYXRlKVxcbmNyeXB0by90ZXN0bWdyLmMtNDUxOC1cXHRcXHR9XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5jLTQ2NzQtXFx0fSwge1xcbmNyeXB0by90ZXN0bWdyLmM6NDY3NTpcXHRcXHQuYWxnID0gXFxcImVjYihhcmlhKVxcXCIsXFxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc2LVxcdFxcdC50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsXFxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc3LVxcdFxcdC5zdWl0ZSA9IHtcXG5jcnlwdG8vdGVzdG1nci5jOjQ2Nzg6XFx0XFx0XFx0LmNpcGhlciA9IF9fVkVDUyhhcmlhX3R2X3RlbXBsYXRlKVxcbmNyeXB0by90ZXN0bWdyLmMtNDY3OS1cXHRcXHR9XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5jLTQ4OTgtXFx0fSwge1xcbmNyeXB0by90ZXN0bWdyLmM6NDg5OTpcXHRcXHQuYWxnID0gXFxcImdjbShhcmlhKVxcXCIsXFxuY3J5cHRvL3Rlc3RtZ3IuYzo0OTAwOlxcdFxcdC5nZW5lcmljX2RyaXZlciA9IFxcXCJnY21fYmFzZShjdHIoYXJpYS1nZW5lcmljKSxnaGFzaC1saWIpXFxcIixcXG5jcnlwdG8vdGVzdG1nci5jLTQ5MDEtXFx0XFx0LnRlc3QgPSBhbGdfdGVzdF9hZWFkLFxcbmNyeXB0by90ZXN0bWdyLmMtNDkwMi1cXHRcXHQuc3VpdGUgPSB7XFxuY3J5cHRvL3Rlc3RtZ3IuYzo0OTAzOlxcdFxcdFxcdC5hZWFkID0gX19WRUNTKGFyaWFfZ2NtX3R2X3RlbXBsYXRlKVxcbmNyeXB0by90ZXN0bWdyLmMtNDkwNC1cXHRcXHR9XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5oPTI2MjgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgc2VlZF90dl90ZW1wbGF0ZVtdID0ge1xcbi0tXFxuY3J5cHRvL3Rlc3RtZ3IuaC0yNjMyMS0gKi9cXG5jcnlwdG8vdGVzdG1nci5oOjI2MzIyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYXJpYV90dl90ZW1wbGF0ZVtdID0ge1xcbmNyeXB0by90ZXN0bWdyLmgtMjYzMjMtXFx0e1xcbi0tXFxuY3J5cHRvL3Rlc3RtZ3IuaC0yNjM1NS1cXG5jcnlwdG8vdGVzdG1nci5oOjI2MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYXJpYV9jYmNfdHZfdGVtcGxhdGVbXSA9IHtcXG5jcnlwdG8vdGVzdG1nci5oLTI2MzU3LVxcdHtcXG4tLVxcbmNyeXB0by90ZXN0bWdyLmgtMjcyNTktXFxuY3J5cHRvL3Rlc3RtZ3IuaDoyNzI2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGFyaWFfY3RyX3R2X3RlbXBsYXRlW10gPSB7XFxuY3J5cHRvL3Rlc3RtZ3IuaC0yNzI2MS1cXHR7XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5oLTI4MTYzLVxcbmNyeXB0by90ZXN0bWdyLmg6MjgxNjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBhZWFkX3Rlc3R2ZWMgYXJpYV9nY21fdHZfdGVtcGxhdGVbXSA9IHtcXG5jcnlwdG8vdGVzdG1nci5oLTI4MTY1LVxcdHtcXG4tLVxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jPTEwOT1zdGF0aWMgY29uc3QgdTMyIG1kc1s0XVsyNTZdID0ge1xcbi0tXFxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmMtMzEzLSAqIGZyb20gdGhlIFR3b2Zpc2ggcGFwZXIuICBJJ3ZlIG9ubHkgaW5jbHVkZWQgdGhlIHRhYmxlIGVudHJpZXMgSSBhY3R1YWxseVxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jOjMxNDogKiBuZWVkOyBJIG5ldmVyIGRvIGEgbG9va3VwIG9uIGEgdmFyaWFibGUgaW5wdXQgb2YgemVybyBhbmQgdGhlIGJpZ2dlc3RcXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYzozMTU6ICogZXhwb25lbnRzIEknbGwgZXZlciBzZWUgYXJlIDI1NCAodmFyaWFibGUpIGFuZCAyMzcgKGNvbnN0YW50KSwgc28gdGhleSdsbFxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jLTMxNi0gKiBuZXZlciBzdW0gdG8gbW9yZSB0aGFuIDQ5MS5cXHRJJ20gcmVwZWF0aW5nIHBhcnQgb2YgdGhlIGV4cF90b19wb2x5IHRhYmxlXFxuLS1cXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYy0zMTgtICogU2luY2UgSSBrbm93IG15IGNvbnN0YW50IG9wZXJhbmRzIGFyZSBuZXZlciB6ZXJvLCBJIG9ubHkgaGF2ZSB0byB3b3JyeVxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jOjMxOTogKiBhYm91dCB6ZXJvIHZhbHVlcyBpbiB0aGUgdmFyaWFibGUgb3BlcmFuZCwgYW5kIEkgZG8gaXQgd2l0aCBhIHNpbXBsZVxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jLTMyMC0gKiBjb25kaXRpb25hbCBicmFuY2guXFx0SSBrbm93IGNvbmRpdGlvbmFscyBhcmUgZXhwZW5zaXZlLCBidXQgSSBjb3VsZG4ndFxcbi0tXFxuY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jLTgwLSAqIGFuZCBzaW11bHRhbmVvdXNseSBwZXJmb3JtIHRoZSB3aGl0ZW5pbmcgc3RlcC4gIElOUEFDSyBwYWNrcyB3b3JkXFxuY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jOjgxOiAqIG51bWJlciBuIGludG8gdGhlIHZhcmlhYmxlIG5hbWVkIGJ5IHgsIHVzaW5nIHdoaXRlbmluZyBzdWJrZXkgbnVtYmVyIG0uXFxuY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jOjgyOiAqIE9VVFVOUEFDSyB1bnBhY2tzIHdvcmQgbnVtYmVyIG4gZnJvbSB0aGUgdmFyaWFibGUgbmFtZWQgYnkgeCwgdXNpbmdcXG5jcnlwdG8vdHdvZmlzaF9nZW5lcmljLmMtODMtICogd2hpdGVuaW5nIHN1YmtleSBudW1iZXIgbS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MzAuNjE0ODQ0NTIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxMzk0OTMyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIGFkZGluZyBzdGF0aWMgYWxnb3JpdGhtIGRlZmluaXRpb25zIOKAkyBzcGVjaWZpY2FsbHkgZm9yIGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCDigJMgdG8gdGhlIGBlYWxnX2xpc3RgIHRhYmxlIHdpdGhpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLCB3cml0dGVuLCBvciBsZWFrZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBoZXJlLlxuXG5GaXJzdCwgSSBleGFtaW5lZCBgeGZybV9hbGdvX2Rlc2NgLiBJdCdzIGEgc3RhdGljIHN0cnVjdHVyZSwgd2hpY2ggaXMgZ29vZC4gQmVjYXVzZSBpdCdzIHN0YXRpYywgdGhlIGNvbXBpbGVyIHdpbGwgaGFuZGxlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYW55IHVuc3BlY2lmaWVkIGZpZWxkcy4gVGhhdCdzIGEgaHVnZSB3aW4sIGVsaW1pbmF0aW5nIGEgY29tbW9uIHNvdXJjZSBvZiBidWdzIHJpZ2h0IG9mZiB0aGUgYmF0LiBTbyBmYXIsIHNvIGdvb2QuXG5cbk5leHQsIEkgbG9va2VkIGZvciBkeW5hbWljIGFsbG9jYXRpb25zLCB1c2Vyc3BhY2UgY29waWVzLCBvciBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgZGF0YSBwYXRocyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhlIGFuYWx5c2lzIHNob3dzIHRoYXQgdGhlcmUgYXJlbuKAmXQgYW55LiBUaGlzIHBhdGNoICppdHNlbGYqIGRvZXNuJ3QgdG91Y2ggYW55IG9mIHRoZSBleGlzdGluZyBidWZmZXIgaGFuZGxpbmcgb3IgcG9pbnRlciBhcml0aG1ldGljIGluIGB4ZnJtX2FsZ28uY2AuIEl0J3MganVzdCBwb3B1bGF0aW5nIHRoZSB0YWJsZS4gIFRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaGVhcCBvciBzdGFjayBidWZmZXJzLiBGdXJ0aGVybW9yZSwgdGhlIGFsZ29yaXRobXMgdGhlbXNlbHZlcyDigJMgYGFyaWFgLCBhbmQgdGhlIHRlbXBsYXRlcyBsaWtlIGBlY2hhaW5pdmAsIGBzZXFpdmAsIGByZmMzNjg2YCwgYGN0cmAsIGFuZCBgY2JjYCDigJMgYXJlIGFsbCBwcmUtZXhpc3Rpbmcgc3RhbmRhcmQgY3J5cHRvIGRyaXZlcnMgYW5kIHRlbXBsYXRlcyB3aXRoaW4gdGhlIGNyeXB0byBzdWJzeXN0ZW0uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpc24ndCB0aGUgb3JpZ2luIG9mIGFueSBzdWNoIHJpc2tzLlxuXG5TaW5jZSBleGlzdGluZyBYRlJNIHN0YXRlcyBjb25maWd1cmVkIHdpdGggdGhlc2UgYWxnb3JpdGhtcyB1c2UgYWxsb2NhdGVkIHNrY2lwaGVyIHRlbXBsYXRlcywgdGhlcmUgaXMgbm8gcmVhbCBjaGFuZ2UgdGhhdCB3b3VsZCBvcGVuIHRoaXMgdXAuXG5cbkJlY2F1c2Ugb2YgdGhpcywgSSBiZWxpZXZlIGl0J3MgdmVyeSB1bmxpa2VseSB0aGF0IGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHdpbGwgYXJpc2UgZnJvbSB0aGlzIGFkZGl0aW9uLiBTaW5jZSB0aGVyZSdzIG5vIGNvZGUgdGhhdCB3b3VsZCBpbnZvbHZlIGEgY29weSB0byB1c2VyLCB0aGVyZSBzaG91bGQgYmUgbm8gb3Bwb3J0dW5pdHkgZm9yIGFuIGluZm8tbGVhay5cblxuTm93LCBjb25jZXJuaW5nIGluc3RydW1lbnRhdGlvbiBhbmQgdGVzdGluZywgSSB0aGluayBLQVNBTiBhbHJlYWR5IGFkZXF1YXRlbHkgaGFuZGxlcyB0aGUgbWVtb3J5IGFjY2VzcyBpc3N1ZXMsIGJ1ZmZlciBib3VuZHMgZXJyb3JzLCBldGMuLCB0aGF0IG1pZ2h0IGFyaXNlIHdoZW4gdGhlc2UgYWxnb3JpdGhtcyBhcmUgdXNlZCBpbiBYRlJNLiBUaGVyZWZvcmUsIHRoZSBhZGRpdGlvbiBvZiBLTVNBTiBpc24ndCB3YXJyYW50ZWQgaGVyZS5cblxuU3VtbWFyaXppbmcgbXkgcmVhc29uaW5nOlxuXG4xLiAgKipXaGF0J3MgYmVpbmcgYWRkZWQqKjogV2UncmUganVzdCBhZGRpbmcgdGhlIG5ldyBjaXBoZXIgc3VpdGVzIHRvIGEgc3RhdGljIHRhYmxlLlxuMi4gICoqU3RhdGljIGluaXRpYWxpemF0aW9uKio6IFRoZSB0YWJsZSBlbnRyaWVzIGFyZSBzdGF0aWMgYHhmcm1fYWxnb19kZXNjYCBzdHJ1Y3RzLCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci5cbjMuICAqKk5vIHJpc2sgaW50cm9kdWNlZCoqOiBObyBuZXcgaGVhcCBvciBzdGFjaywgc2l6ZSBjYWxjdWxhdGlvbnMsIGNvbnRyb2wgZmxvdyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS5cbjQuICAqKktBU0FOIGFkZXF1YWN5Kio6IEtBU0FOIGFscmVhZHkgYWRkcmVzc2VzIG1lbW9yeSBib3VuZHMgYW5kIHZhbGlkaXR5IGlzc3VlcyBkdXJpbmcgWEZSTSBhbmQgY3J5cHRvIG9wZXJhdGlvbnMuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ4NCwiT3V0cHV0VG9rZW5zIjoyNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MzkuNzU0MzQxNzA2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtZXJlbHkgcmVnaXN0ZXJzIHR3byBleGlzdGluZyBjaXBoZXIgc3VpdGVzIChcXFwiY2JjKGFyaWEpXFxcIiBhbmQgXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIpIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBcXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcXG4tIFRoZSBhZGRlZCBlbnRyaWVzIGFyZSBzdGF0aWMgYHN0cnVjdCB4ZnJtX2FsZ29fZGVzY2AgZGVmaW5pdGlvbnMgaW4gYC5kYXRhYCAvIGAucm9kYXRhYCB3aGVyZSB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLlxcbi0gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiwgc3RhY2sgdmFyaWFibGUgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zdXJlLCBvciBuZXRsaW5rIC8gYGNvcHlfdG9fdXNlcmAgZGF0YSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbi0gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWVyZWx5IHJlZ2lzdGVycyB0d28gZXhpc3RpbmcgY2lwaGVyIHN1aXRlcyAoXFxcImNiYyhhcmlhKVxcXCIgYW5kIFxcXCJyZmMzNjg2KGN0cihhcmlhKSlcXFwiKSBpbnRvIHRoZSBzdGF0aWMgYGVhbGdfbGlzdGAgdGFibGUgaW4gYG5ldC94ZnJtL3hmcm1fYWxnby5jYCB0byBlbmFibGUgdGhlaXIgdXNlIGluIFhGUk0vSVBzZWMuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgXFx1MDAyNiBJbmZvLWxlYWsgQW5hbHlzaXM6XFxuLSBUaGUgYWRkZWQgZW50cmllcyBhcmUgc3RhdGljIGBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2NgIGRlZmluaXRpb25zIGluIGAuZGF0YWAgLyBgLnJvZGF0YWAgd2hlcmUgdW5zcGVjaWZpZWQgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci5cXG4tIE5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24sIHN0YWNrIHZhcmlhYmxlIGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc3VyZSwgb3IgbmV0bGluayAvIGBjb3B5X3RvX3VzZXJgIGRhdGEgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gTm8gY29udHJvbCBmbG93IG9yIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpcyBjaGFuZ2VkIHRoYXQgY291bGQgY2F1c2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuXFxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIGNpcGhlciBjb250ZXh0cywgc2tjaXBoZXIgY3J5cHRvIG9wZXJhdGlvbnMsIG9yIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgKG91dC1vZi1ib3VuZHMgYWNjZXNzLCBidWZmZXIgb3ZlcnJ1bnMsIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi5cXG4tIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 06:06:48 +0000 UTC FinishedAt: 2026-09-09 06:40:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_ALGO", "XFRM_USER", "CRYPTO_ARIA", "CRYPTO_CBC", "CRYPTO_CTR", "INET_ESP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e2573085497807b551324de20d368127602151ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_ALGO", "XFRM_USER", "CRYPTO_ARIA", "CRYPTO_CBC", "CRYPTO_CTR", "INET_ESP" ], "series_id": "a49722ce-3cc2-4498-a52c-99353afc7a6a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_ealg_get_byname", "xfrm_find_algo", "xfrm_probe_algs", "attach_crypt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9BTEdPJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtDUllQVE9fQVJJQSYjMzQ7LAogICAgJiMzNDtDUllQVE9fQ0JDJiMzNDssCiAgICAmIzM0O0NSWVBUT19DVFImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2VhbGdfZ2V0X2J5bmFtZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2ZpbmRfYWxnbyYjMzQ7LAogICAgJiMzNDt4ZnJtX3Byb2JlX2FsZ3MmIzM0OywKICAgICYjMzQ7YXR0YWNoX2NyeXB0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWVyZWx5IHJlZ2lzdGVycyB0d28gZXhpc3RpbmcgY2lwaGVyIHN1aXRlcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcbi0gVGhlIGFkZGVkIGVudHJpZXMgYXJlIHN0YXRpYyBgc3RydWN0IHhmcm1fYWxnb19kZXNjYCBkZWZpbml0aW9ucyBpbiBgLmRhdGFgIC8gYC5yb2RhdGFgIHdoZXJlIHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuXG4tIE5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24sIHN0YWNrIHZhcmlhYmxlIGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc3VyZSwgb3IgbmV0bGluayAvIGBjb3B5X3RvX3VzZXJgIGRhdGEgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxuLSBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBBUklBIGNpcGhlciBhbGdvcml0aG1zIChcJiMzNDtjYmMoYXJpYSlcJiMzNDsgYW5kIFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OykgdG8gdGhlIFhGUk0gZW5jcnlwdGlvbiBhbGdvcml0aG0gcmVnaXN0cnkgKGVhbGdfbGlzdCkuIFRoaXMgZW5hYmxlcyB1c2VyLXNwYWNlIHZpYSBYRlJNIE5ldGxpbmsgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBJUHNlYyBTQXMgd2l0aCBBUklBIGVuY3J5cHRpb24sIGV4ZXJjaXNpbmcgdGhlIGNyeXB0byBzdWJzeXN0ZW0gYW5kIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYTUzZDZlY2RlMjU4Y2FjMDA0NGI1ZTlmMGU5MjZkYzAzMzU5MmU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNjozODo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jXG5pbmRleCA3MDQzNDQ5NWYyM2Y1Li4xNmM3MGRjMWE0MjY4IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fYWxnby5jXG5AQCAtNTEyLDYgJiM0Mzs1MTIsMzQgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBlYWxnX2xpc3RbXSA9IHtcbiBcdFx0LnNhZGJfYWxnX21heGJpdHMgPSAyNTZcbiBcdH1cbiB9LFxuJiM0Mzt7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtjYmMoYXJpYSlcJiMzNDssXG4mIzQzO1x0LmNvbXBhdCA9IFwmIzM0O2FyaWFcJiMzNDssXG4mIzQzO1xuJiM0MztcdC51aW5mbyA9IHtcbiYjNDM7XHRcdC5lbmNyID0ge1xuJiM0MztcdFx0XHQuZ2VuaXYgPSBcJiMzNDtlY2hhaW5pdlwmIzM0OyxcbiYjNDM7XHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbiYjNDM7XHRcdFx0LmRlZmtleWJpdHMgPSAyNTYsXG4mIzQzO1x0XHR9XG4mIzQzO1x0fSxcbiYjNDM7XG4mIzQzO1x0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4mIzQzO30sXG4mIzQzO3tcbiYjNDM7XHQubmFtZSA9IFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OyxcbiYjNDM7XHQuY29tcGF0ID0gXCYjMzQ7YXJpYVwmIzM0OyxcbiYjNDM7XG4mIzQzO1x0LnVpbmZvID0ge1xuJiM0MztcdFx0LmVuY3IgPSB7XG4mIzQzO1x0XHRcdC5nZW5pdiA9IFwmIzM0O3NlcWl2XCYjMzQ7LFxuJiM0MztcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuJiM0MztcdFx0XHQuZGVma2V5Yml0cyA9IDE2MCxcbiYjNDM7XHRcdH1cbiYjNDM7XHR9LFxuJiM0MztcbiYjNDM7XHQucGZrZXlfc3VwcG9ydGVkID0gMCxcbiYjNDM7fSxcbiB7XG4gXHQubmFtZSA9IFwmIzM0O2NiYyh0d29maXNoKVwmIzM0OyxcbiBcdC5jb21wYXQgPSBcJiMzNDt0d29maXNoXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9BTEdPJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtDUllQVE9fQVJJQSYjMzQ7LAogICAgJiMzNDtDUllQVE9fQ0JDJiMzNDssCiAgICAmIzM0O0NSWVBUT19DVFImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2VhbGdfZ2V0X2J5bmFtZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2ZpbmRfYWxnbyYjMzQ7LAogICAgJiMzNDt4ZnJtX3Byb2JlX2FsZ3MmIzM0OywKICAgICYjMzQ7YXR0YWNoX2NyeXB0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIHRvIHRoZSBYRlJNIGVuY3J5cHRpb24gYWxnb3JpdGhtIHJlZ2lzdHJ5IChlYWxnX2xpc3QpLiBUaGlzIGVuYWJsZXMgdXNlci1zcGFjZSB2aWEgWEZSTSBOZXRsaW5rIGludGVyZmFjZSB0byBjb25maWd1cmUgSVBzZWMgU0FzIHdpdGggQVJJQSBlbmNyeXB0aW9uLCBleGVyY2lzaW5nIHRoZSBjcnlwdG8gc3Vic3lzdGVtIGFuZCBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2E1M2Q2ZWNkZTI1OGNhYzAwNDRiNWU5ZjBlOTI2ZGMwMzM1OTJlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDY6Mzg6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCmluZGV4IDcwNDM0NDk1ZjIzZjUuLjE2YzcwZGMxYTQyNjggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC01MTIsNiAmIzQzOzUxMiwzNCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGVhbGdfbGlzdFtdID0gewogCQkuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NgogCX0KIH0sCiYjNDM7ewomIzQzOwkubmFtZSA9ICYjMzQ7Y2JjKGFyaWEpJiMzNDssCiYjNDM7CS5jb21wYXQgPSAmIzM0O2FyaWEmIzM0OywKJiM0MzsKJiM0MzsJLnVpbmZvID0gewomIzQzOwkJLmVuY3IgPSB7CiYjNDM7CQkJLmdlbml2ID0gJiMzNDtlY2hhaW5pdiYjMzQ7LAomIzQzOwkJCS5ibG9ja2JpdHMgPSAxMjgsCiYjNDM7CQkJLmRlZmtleWJpdHMgPSAyNTYsCiYjNDM7CQl9CiYjNDM7CX0sCiYjNDM7CiYjNDM7CS5wZmtleV9zdXBwb3J0ZWQgPSAwLAomIzQzO30sCiYjNDM7ewomIzQzOwkubmFtZSA9ICYjMzQ7cmZjMzY4NihjdHIoYXJpYSkpJiMzNDssCiYjNDM7CS5jb21wYXQgPSAmIzM0O2FyaWEmIzM0OywKJiM0MzsKJiM0MzsJLnVpbmZvID0gewomIzQzOwkJLmVuY3IgPSB7CiYjNDM7CQkJLmdlbml2ID0gJiMzNDtzZXFpdiYjMzQ7LAomIzQzOwkJCS5ibG9ja2JpdHMgPSAxMjgsCiYjNDM7CQkJLmRlZmtleWJpdHMgPSAxNjAsCiYjNDM7CQl9CiYjNDM7CX0sCiYjNDM7CiYjNDM7CS5wZmtleV9zdXBwb3J0ZWQgPSAwLAomIzQzO30sCiB7CiAJLm5hbWUgPSAmIzM0O2NiYyh0d29maXNoKSYjMzQ7LAogCS5jb21wYXQgPSAmIzM0O3R3b2Zpc2gmIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWxnb3JpdGhtIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBiZWluZyBpbnRyb2R1Y2VkIHRvIHRoZSBjb2RlYmFzZS4gVGhlIHBhdGNoIGlzIGFkZGluZyAmIzM0O2NiYyhhcmlhKSYjMzQ7IGFuZCAmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKSYjMzQ7IHRvIHRoZSBgZWFsZ19saXN0YCBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgLiBSaWdodCBhd2F5LCBteSBicmFpbiBzdGFydHMgdG8gY2h1cm4sIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyBgZWFsZ19saXN0YCByZXNpZGUgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1dGlsaXplZCBhbmQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBvciBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBpdC4gU28sIEkmIzM5O20gdGhpbmtpbmcgYSBxdWljayBzZWFyY2ggZm9yIGBlYWxnX2xpc3RgIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgY29uZmxpY3RzLiBJJiMzOTtsbCBwcm9iYWJseSByZWFjaCBmb3IgYSBncmVwcGVyLCBvciBtYXliZSBhIHF1aWNrIGByZWFkLWZpbGVgIGluIHRoZSBrZXJuZWwgc291cmNlLCBkZXBlbmRpbmcgb24gd2hhdCBJIGZlZWwgbGlrZSBhdCB0aGUgbW9tZW50LCB0byBnZXQgdGhhdCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VhbGdfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2FsZ28uYz0xNzU9c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBhYWxnX2xpc3RbXSA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy0zNDYtXG5uZXQveGZybS94ZnJtX2FsZ28uYzozNDc6c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBlYWxnX2xpc3RbXSA9IHtcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTM0OC17XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmM9NjQ1PXN0YXRpYyBpbmxpbmUgaW50IGVhbGdfZW50cmllcyh2b2lkKVxubmV0L3hmcm0veGZybV9hbGdvLmMtNjQ2LXtcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY0NzpcdHJldHVybiBBUlJBWV9TSVpFKGVhbGdfbGlzdCk7XG5uZXQveGZybS94ZnJtX2FsZ28uYy02NDgtfVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTY2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fYWFsZ19saXN0ID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3Mi1cbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY3MzpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fZWFsZ19saXN0ID0ge1xubmV0L3hmcm0veGZybV9hbGdvLmMtNjc0LVx0LmZpbmQgPSBjcnlwdG9faGFzX3NrY2lwaGVyLFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njc1Olx0LmFsZ3MgPSBlYWxnX2xpc3QsXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NzY6XHQuZW50cmllcyA9IEFSUkFZX1NJWkUoZWFsZ19saXN0KSxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3Ny19O1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTcyNj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI3LXtcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjcyODpcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXG5uZXQveGZybS94ZnJtX2FsZ28uYy03MjktXHRcdFx0ICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylhbGdfaWQsIDEpO1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTc1Nj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwcm9iZSlcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1Ny17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3NTg6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX25hbWVfbWF0Y2gsIG5hbWUsXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTktXHRcdFx0ICAgICAgcHJvYmUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTgwNj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZHgodW5zaWduZWQgaW50IGlkeClcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy04MTAtXG5uZXQveGZybS94ZnJtX2FsZ28uYzo4MTE6XHRyZXR1cm4gXHUwMDI2ZWFsZ19saXN0W2lkeF07XG5uZXQveGZybS94ZnJtX2FsZ28uYy04MTItfVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTgyMD12b2lkIHhmcm1fcHJvYmVfYWxncyh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jLTgzMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVhbGdfZW50cmllcygpOyBpJiM0MzsmIzQzOykge1xubmV0L3hmcm0veGZybV9hbGdvLmM6ODMzOlx0XHRzdGF0dXMgPSBjcnlwdG9faGFzX3NrY2lwaGVyKGVhbGdfbGlzdFtpXS5uYW1lLCAwLCAwKTtcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzNDpcdFx0aWYgKGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgIT0gc3RhdHVzKVxubmV0L3hmcm0veGZybV9hbGdvLmM6ODM1Olx0XHRcdGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgPSBzdGF0dXM7XG5uZXQveGZybS94ZnJtX2FsZ28uYy04MzYtXHR9XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmM9ODU3PWludCB4ZnJtX2NvdW50X3Bma2V5X2VuY19zdXBwb3J0ZWQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy04NjEtXHRmb3IgKGkgPSAwLCBuID0gMDsgaSBcdTAwM2MgZWFsZ19lbnRyaWVzKCk7IGkmIzQzOyYjNDM7KVxubmV0L3hmcm0veGZybV9hbGdvLmM6ODYyOlx0XHRpZiAoZWFsZ19saXN0W2ldLmF2YWlsYWJsZSBcdTAwMjZcdTAwMjYgZWFsZ19saXN0W2ldLnBma2V5X3N1cHBvcnRlZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTg2My1cdFx0XHRuJiM0MzsmIzQzOztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDY3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiB0aGlua2luZywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gQWxnb3JpdGhtIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBYRlJNIGFsZ29yaXRobXMgYXJlIGJlaW5nIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gYG5ldC94ZnJtL3hmcm1fYWxnby5jYCDigJMgdGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCBmb3IgdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBjaXBoZXIgc3R1ZmYuIEkmIzM5O20gZm9jdXNpbmcgb24gbGluZXMgNTAwLTU1MDsgSSBoYXZlIGEgaHVuY2ggdGhhdCB3aXRoaW4gdGhhdCByYW5nZSBJJiMzOTtsbCBmaW5kIHNvbWUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb3IgaGFuZGxpbmcgbG9naWMgdGhhdCYjMzk7bGwgaWxsdW1pbmF0ZSBob3cgdGhlc2UgYWxnb3JpdGhtcyBhcmUgaW50ZWdyYXRlZC4gSXQmIzM5O3MgdGltZSB0byBwYXJzZSB0aGUgZGV0YWlscyBvZiB0aGUgY29kZSEKCkJleW9uZCB0aGUgY29kZSwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgd2FudCB0byBzZWUgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIGluZmx1ZW5jaW5nIHRoZSBhdmFpbGFiaWxpdHkgYW5kIGJlaGF2aW9yIG9mIFhGUk0gYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBBUklBIGNpcGhlci4gVGhhdCB3aWxsIGxpa2VseSBwb2ludCB0b3dhcmRzIGJ1aWxkLXRpbWUgZGVjaXNpb25zIHRoYXQgaW1wYWN0IHRoZSBmdW5jdGlvbmFsaXR5IG9yIGRlcGVuZGVuY2llcyBvZiBYRlJNLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9hbGdvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFx0XHRcdC5nZW5pdiA9IFwmIzM0O2VjaGFpbml2XCYjMzQ7LFxuIDUwMTpcdFx0XHRcdC5ibG9ja2JpdHMgPSAxMjgsXG4gNTAyOlx0XHRcdFx0LmRlZmtleWJpdHMgPSAxMjgsXG4gNTAzOlx0XHRcdH1cbiA1MDQ6XHRcdH0sXG4gNTA1Olx0XG4gNTA2Olx0XHQucGZrZXlfc3VwcG9ydGVkID0gMSxcbiA1MDc6XHRcbiA1MDg6XHRcdC5kZXNjID0ge1xuIDUwOTpcdFx0XHQuc2FkYl9hbGdfaWQgPSBTQURCX1hfRUFMR19DQU1FTExJQUNCQyxcbiA1MTA6XHRcdFx0LnNhZGJfYWxnX2l2bGVuID0gOCxcbiA1MTE6XHRcdFx0LnNhZGJfYWxnX21pbmJpdHMgPSAxMjgsXG4gNTEyOlx0XHRcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XG4gNTEzOlx0XHR9XG4gNTE0Olx0fSxcbiA1MTU6XHR7XG4gNTE2Olx0XHQubmFtZSA9IFwmIzM0O2NiYyhhcmlhKVwmIzM0OyxcbiA1MTc6XHRcdC5jb21wYXQgPSBcJiMzNDthcmlhXCYjMzQ7LFxuIDUxODpcdFxuIDUxOTpcdFx0LnVpbmZvID0ge1xuIDUyMDpcdFx0XHQuZW5jciA9IHtcbiA1MjE6XHRcdFx0XHQuZ2VuaXYgPSBcJiMzNDtlY2hhaW5pdlwmIzM0OyxcbiA1MjI6XHRcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuIDUyMzpcdFx0XHRcdC5kZWZrZXliaXRzID0gMjU2LFxuIDUyNDpcdFx0XHR9XG4gNTI1Olx0XHR9LFxuIDUyNjpcdFxuIDUyNzpcdFx0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4gNTI4Olx0fSxcbiA1Mjk6XHR7XG4gNTMwOlx0XHQubmFtZSA9IFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OyxcbiA1MzE6XHRcdC5jb21wYXQgPSBcJiMzNDthcmlhXCYjMzQ7LFxuIDUzMjpcdFxuIDUzMzpcdFx0LnVpbmZvID0ge1xuIDUzNDpcdFx0XHQuZW5jciA9IHtcbiA1MzU6XHRcdFx0XHQuZ2VuaXYgPSBcJiMzNDtzZXFpdlwmIzM0OyxcbiA1MzY6XHRcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuIDUzNzpcdFx0XHRcdC5kZWZrZXliaXRzID0gMTYwLFxuIDUzODpcdFx0XHR9XG4gNTM5Olx0XHR9LFxuIDU0MDpcdFxuIDU0MTpcdFx0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4gNTQyOlx0fSxcbiA1NDM6XHR7XG4gNTQ0Olx0XHQubmFtZSA9IFwmIzM0O2NiYyh0d29maXNoKVwmIzM0OyxcbiA1NDU6XHRcdC5jb21wYXQgPSBcJiMzNDt0d29maXNoXCYjMzQ7LFxuIDU0NjpcdFxuIDU0NzpcdFx0LnVpbmZvID0ge1xuIDU0ODpcdFx0XHQuZW5jciA9IHtcbiA1NDk6XHRcdFx0XHQuZ2VuaXYgPSBcJiMzNDtlY2hhaW5pdlwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgaW50bywgZnJvbSBhIGtlcm5lbC1sZXZlbCBYRlJNIGVuY3J5cHRpb24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gdGhlIFhGUk0gRW5jcnlwdGlvbiBBbGdvcml0aG0gVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgeGZybV9lYWxnX2dldF9ieW5hbWVgIGZ1bmN0aW9uIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFhGUk0gKElQc2VjKSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxpZmVjeWNsZSBvZiBlbmNyeXB0aW9uIGFsZ29yaXRobXMuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQsIGFuZCB3aGF0IGlzIGl0cyByb2xlPyYjMzQ7IEkmIzM5O2xsIG5lZWQgdG8gZm9sbG93IHRoZSBjb25uZWN0aW9ucywgYW5kIHRoZSBjYWxsIHNpdGVzLgoKVGhlIGNyaXRpY2FsIHRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIGhvdyB0aGVzZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgYXJlIGludGVncmF0ZWQsIGF0IGEgbG93IGxldmVsLiBJIHNlZSB0aGF0IFhGUk0gdXNlcyAqeGZybSBzdGF0ZXMqLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIHRoZW0gaW4gZGVwdGguIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBuZXRsaW5rIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgYFhGUk1fTVNHX05FV1NBYCwgYXMgdGhpcyBpcyBhIGtleSBhcmVhIGZvciBhZGRpbmcgYW5kIGNvbmZpZ3VyaW5nIHNlY3VyaXR5IGFzc29jaWF0aW9ucy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBsZWFkIGZvciB3aGVyZSBhbiBlbmNyeXB0aW9uIGFsZ29yaXRobSB3b3VsZCBiZSBzZWxlY3RlZC4gVGhlbiwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBzdGF0ZSBpcyBjb25zdHJ1Y3RlZC4gVGhlIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAgZnVuY3Rpb24gaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdCBoZXJlLiBGaW5hbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkgcHJvdG9jb2wuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG1zIHNlbGVjdGVkIGFyZSBzcGVjaWZpY2FsbHkgdXNlZCB3aXRoaW4gdGhlIEVTUCBpbXBsZW1lbnRhdGlvbiwgc2luY2UgdGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIGRhdGEgZ2V0cyBlbmNyeXB0ZWQgYW5kIGRlY3J5cHRlZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnJvbSBpbnN0YW50aWF0aW9uIHRvIHVzZSwgdG8gY29tcGxldGUgdGhlIHBpY3R1cmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2VhbGdfZ2V0X2J5bmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2tleS9hZl9rZXkuYz03NzY9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3Bma2V5X3hmcm1fc3RhdGUybXNnKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtODc2LVx0aWYgKHgtXHUwMDNlZWFsZykge1xubmV0L2tleS9hZl9rZXkuYzo4Nzc6XHRcdHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYSA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHgtXHUwMDNlZWFsZy1cdTAwM2VhbGdfbmFtZSwgMCk7XG5uZXQva2V5L2FmX2tleS5jLTg3OC1cdFx0c2EtXHUwMDNlc2FkYl9zYV9lbmNyeXB0ID0gKGEgXHUwMDI2XHUwMDI2IGEtXHUwMDNlcGZrZXlfc3VwcG9ydGVkKSA/XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmM9NzU0PUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fYWFsZ19nZXRfYnluYW1lKTtcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1NS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc1NjpzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwcm9iZSlcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1Ny17XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmMtNzYwLX1cbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc2MTpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2VhbGdfZ2V0X2J5bmFtZSk7XG5uZXQveGZybS94ZnJtX2FsZ28uYy03NjItXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9NjI1PXN0YXRpYyBpbnQgYXR0YWNoX2NyeXB0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmxhdHRyICpydGEsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtNjM1LVxubmV0L3hmcm0veGZybV91c2VyLmM6NjM2Olx0YWxnbyA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHVhbGctXHUwMDNlYWxnX25hbWUsIDEpO1xubmV0L3hmcm0veGZybV91c2VyLmMtNjM3LVx0aWYgKCFhbGdvKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBcmlhIEVuY3J5cHRpb24gaW4gWEZSTSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgQXJpYSBlbmNyeXB0aW9uIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gSSBzZWUgYGF0dGFjaF9jcnlwdGAgaW4gdGhhdCBmaWxlLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgeGZybV9lYWxnX2dldF9ieW5hbWVgLiBNeSBtZW50YWwgcm9hZG1hcCBub3cgaXMgdG8gZm9sbG93IHRoZSBleGVjdXRpb24gcGF0aCB3aGVuIGEgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBpcyBjcmVhdGVkIHVzaW5nIGVpdGhlciBgY2JjKGFyaWEpYCBvciBgcmZjMzY4NihjdHIoYXJpYSkpYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBzZXRzIHRoaXMgdXAuIFNvLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBhdHRhY2hfY3J5cHRgIGJlaGF2ZXMgdW5kZXIgdGhvc2Ugc2NlbmFyaW9zLCBhbmQgdGhlbiBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRvIHNlZSB3aGF0IGhhcHBlbnMgaW4gcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgZXNwX2luaXRfc3RhdGVgLCBhbmQgYW55IG90aGVyIGNydWNpYWwgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBsaWZlY3ljbGUgb2YgYW4gQXJpYS1iYXNlZCBTQSB3aXRoaW4gWEZSTS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXR0YWNoX2NyeXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTU5Nz1zdGF0aWMgaW50IGF0dGFjaF9vbmVfYWxnbyhzdHJ1Y3QgeGZybV9hbGdvICoqYWxncHAsIHU4ICpwcm9wcyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MjQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MjU6c3RhdGljIGludCBhdHRhY2hfY3J5cHQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBubGF0dHIgKnJ0YSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYyNi1cdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9OTA3PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jb25zdHJ1Y3Qoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk0Ny1cdH1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjk0ODpcdGlmICgoZXJyID0gYXR0YWNoX2NyeXB0KHgsIGF0dHJzW1hGUk1BX0FMR19DUllQVF0sIGV4dGFjaykpKVxubmV0L3hmcm0veGZybV91c2VyLmMtOTQ5LVx0XHRnb3RvIGVycm9yO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBgeGZybV91c2VyLmNgIHRvIEFuYWx5emUgYGF0dGFjaF9jcnlwdGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGNyeXB0byBtb2R1bGVzIGFyZSBiZWluZyBhdHRhY2hlZCB3aXRoaW4gdGhlIFhGUk0gZnJhbWV3b3JrLCBhbmQgYGF0dGFjaF9jcnlwdGAgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBsaW5raW5nIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0gdG8gYSBzZWN1cml0eSBwb2xpY3kgb3IgYSB0cmFuc2Zvcm0uIExldCYjMzk7cyBkaWcgaW4gYW5kIG1ha2Ugc3VyZSBJJiMzOTttIHJpZ2h0LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIGNhc2UsIGJ1dCBsZXQmIzM5O3MgY29uZmlybSB0aGUgdXNhZ2UgYW5kIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdXNlci1zcGFjZSBjb25maWd1cmF0aW9ucyB3aXRoIGtlcm5lbC1zcGFjZSB0cmFuc2Zvcm1hdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMDpcdFx0c3Ryc2NweShwLVx1MDAzZWFsZ19uYW1lLCBhbGdvLVx1MDAzZW5hbWUpO1xuIDYyMTpcdFx0KmFsZ3BwID0gcDtcbiA2MjI6XHRcdHJldHVybiAwO1xuIDYyMzpcdH1cbiA2MjQ6XHRcbiA2MjU6XHRzdGF0aWMgaW50IGF0dGFjaF9jcnlwdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5sYXR0ciAqcnRhLFxuIDYyNjpcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA2Mjc6XHR7XG4gNjI4Olx0XHRzdHJ1Y3QgeGZybV9hbGdvICpwLCAqdWFsZztcbiA2Mjk6XHRcdHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYWxnbztcbiA2MzA6XHRcbiA2MzE6XHRcdGlmICghcnRhKVxuIDYzMjpcdFx0XHRyZXR1cm4gMDtcbiA2MzM6XHRcbiA2MzQ6XHRcdHVhbGcgPSBubGFfZGF0YShydGEpO1xuIDYzNTpcdFxuIDYzNjpcdFx0YWxnbyA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHVhbGctXHUwMDNlYWxnX25hbWUsIDEpO1xuIDYzNzpcdFx0aWYgKCFhbGdvKSB7XG4gNjM4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7UmVxdWVzdGVkIENSWVBUIGFsZ29yaXRobSBub3QgZm91bmRcJiMzNDspO1xuIDYzOTpcdFx0XHRyZXR1cm4gLUVOT1NZUztcbiA2NDA6XHRcdH1cbiA2NDE6XHRcdHgtXHUwMDNlcHJvcHMuZWFsZ28gPSBhbGdvLVx1MDAzZWRlc2Muc2FkYl9hbGdfaWQ7XG4gNjQyOlx0XG4gNjQzOlx0XHRwID0ga21lbWR1cCh1YWxnLCB4ZnJtX2FsZ19sZW4odWFsZyksIEdGUF9LRVJORUwpO1xuIDY0NDpcdFx0aWYgKCFwKVxuIDY0NTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2NDY6XHRcbiA2NDc6XHRcdHN0cnNjcHkocC1cdTAwM2VhbGdfbmFtZSwgYWxnby1cdTAwM2VuYW1lKTtcbiA2NDg6XHRcdHgtXHUwMDNlZWFsZyA9IHA7XG4gNjQ5Olx0XHR4LVx1MDAzZWdlbml2ID0gYWxnby1cdTAwM2V1aW5mby5lbmNyLmdlbml2O1xuIDY1MDpcdFx0cmV0dXJuIDA7XG4gNjUxOlx0fVxuIDY1MjpcdFxuIDY1MzpcdHN0YXRpYyBpbnQgYXR0YWNoX2F1dGgoc3RydWN0IHhmcm1fYWxnb19hdXRoICoqYWxncHAsIHU4ICpwcm9wcyxcbiA2NTQ6XHRcdFx0ICAgICAgIHN0cnVjdCBubGF0dHIgKnJ0YSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDY1NTpcdHtcbiA2NTY6XHRcdHN0cnVjdCB4ZnJtX2FsZ28gKnVhbGc7XG4gNjU3Olx0XHRzdHJ1Y3QgeGZybV9hbGdvX2F1dGggKnA7XG4gNjU4Olx0XHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmFsZ287XG4gNjU5Olx0XG4gNjYwOlx0XHRpZiAoIXJ0YSlcbiA2NjE6XHRcdFx0cmV0dXJuIDA7XG4gNjYyOlx0XG4gNjYzOlx0XHR1YWxnID0gbmxhX2RhdGEocnRhKTtcbiA2NjQ6XHRcbiA2NjU6XHRcdGFsZ28gPSB4ZnJtX2FhbGdfZ2V0X2J5bmFtZSh1YWxnLVx1MDAzZWFsZ19uYW1lLCAxKTtcbiA2NjY6XHRcdGlmICghYWxnbykge1xuIDY2NzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1JlcXVlc3RlZCBBVVRIIGFsZ29yaXRobSBub3QgZm91bmRcJiMzNDspO1xuIDY2ODpcdFx0XHRyZXR1cm4gLUVOT1NZUztcbiA2Njk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkRlbHZpbmcgaW50byBBUklBIENpcGhlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgQVJJQSBjaXBoZXIgaXMgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbCBidWlsZC4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIHN0cnVjdHVyZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNoZWNrIGZvciBjb21waWxlLXRpbWUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzIHRvICYjMzQ7QVJJQSYjMzQ7IHdpdGhpbiB0aGUgYGNyeXB0by9gIGRpcmVjdG9yeSwgbmF0dXJhbGx5LCBidXQgYWxzbywgZ2l2ZW4gaXRzIHVzZSBpbiBuZXR3b3JrIHNlY3VyaXR5LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGV4cGxvcmUgdGhlIGBuZXQveGZybS9gIGRpcmVjdG9yeS4gVGhlcmUgbWlnaHQgYmUgc29tZSBBUklBLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaGlkaW5nIGluIHRoZXJlLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGVtcGxveWVkIGZvciBJUHNlYyBvciBzaW1pbGFyIHByb3RvY29scy4gSSYjMzk7bGwgZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRob3NlIGRpcmVjdG9yaWVzIGFuZCBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlcyByZXZlYWwuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb25maWd1cmF0aW9uIGlzIHN0YXRpY2FsbHkgY29tcGlsZWQsIG1vZHVsYXJpemVkLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGtleSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDUllQVE9fQVJJQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc9NTE2PUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZzo1MTc6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZy01MTgtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZz00NzE9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo0NzI6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctNDczLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZz00OTQ9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnOjQ5NTpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnLTQ5Ni1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc9NDYzPUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZzo0NjQ6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZy00NjUtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnPTQ3Mz1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NDc0OkNPTkZJR19DUllQVE9fQVJJQT1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctNDc1LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc9NDkyPUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6NDkzOkNPTkZJR19DUllQVE9fQVJJQT1tXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnLTQ5NC1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc9NTc5PUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZzo1ODA6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy01ODEtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc9NDYzPUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjQ2NDpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctNDY1LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnPTQ2ND1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZzo0NjU6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnLTQ2Ni1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cbi0tXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnPTQ4Mj1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnOjQ4MzpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZy00ODQtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc9NDYxPUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjQ2MjpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctNDYzLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZz00NjE9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnOjQ2MjpDT05GSUdfQ1JZUFRPX0FSSUE9bVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnLTQ2My1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9Nzc4PUNPTkZJR19DUllQVE9fQU5VQklTPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzo3Nzk6Q09ORklHX0NSWVBUT19BUklBPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy03ODAtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTc2Mj1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6NzYzOkNPTkZJR19DUllQVE9fQVJJQT1tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctNzY0LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnPTIzOT1jb25maWcgQ1JZUFRPX1RXT0ZJU0hfQVZYX1g4Nl82NFxuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI1NS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI1Njpjb25maWcgQ1JZUFRPX0FSSUFfQUVTTklfQVZYX1g4Nl82NFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjU3LVx0dHJpc3RhdGUgXCYjMzQ7Q2lwaGVyczogQVJJQSB3aXRoIG1vZGVzOiBFQ0IsIENUUiAoQUVTLU5JL0FWWC9HRk5JKVwmIzM0O1xuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI2MC1cdHNlbGVjdCBDUllQVE9fQUxHQVBJXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyNjE6XHRzZWxlY3QgQ1JZUFRPX0FSSUFcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI2Mi1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yNzItXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyNzM6Y29uZmlnIENSWVBUT19BUklBX0FFU05JX0FWWDJfWDg2XzY0XG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yNzQtXHR0cmlzdGF0ZSBcJiMzNDtDaXBoZXJzOiBBUklBIHdpdGggbW9kZXM6IEVDQiwgQ1RSIChBRVMtTkkvQVZYMi9HRk5JKVwmIzM0O1xuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI3Ny1cdHNlbGVjdCBDUllQVE9fQUxHQVBJXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyNzg6XHRzZWxlY3QgQ1JZUFRPX0FSSUFcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI3OTpcdHNlbGVjdCBDUllQVE9fQVJJQV9BRVNOSV9BVlhfWDg2XzY0XG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yODAtXHRoZWxwXG4tLVxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjkwLVxuYXJjaC94ODYvY3J5cHRvL0tjb25maWc6MjkxOmNvbmZpZyBDUllQVE9fQVJJQV9HRk5JX0FWWDUxMl9YODZfNjRcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI5Mi1cdHRyaXN0YXRlIFwmIzM0O0NpcGhlcnM6IEFSSUEgd2l0aCBtb2RlczogRUNCLCBDVFIgKEFWWDUxMi9HRk5JKVwmIzM0O1xuLS1cbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI5NS1cdHNlbGVjdCBDUllQVE9fQUxHQVBJXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyOTY6XHRzZWxlY3QgQ1JZUFRPX0FSSUFcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI5NzpcdHNlbGVjdCBDUllQVE9fQVJJQV9BRVNOSV9BVlhfWDg2XzY0XG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyOTg6XHRzZWxlY3QgQ1JZUFRPX0FSSUFfQUVTTklfQVZYMl9YODZfNjRcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI5OS1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGU9NTQ9c200LWFlc25pLWF2eDIteDg2XzY0LXkgOj0gc200LWFlc25pLWF2eDItYXNtXzY0Lm8gc200X2Flc25pX2F2eDJfZ2x1ZS5vXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUtNTUtXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGU6NTY6b2JqLSQoQ09ORklHX0NSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjQpICYjNDM7PSBhcmlhLWFlc25pLWF2eC14ODZfNjQub1xuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTU3LWFyaWEtYWVzbmktYXZ4LXg4Nl82NC15IDo9IGFyaWEtYWVzbmktYXZ4LWFzbV82NC5vIGFyaWFfYWVzbmlfYXZ4X2dsdWUub1xuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTU4LVxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19DUllQVE9fQVJJQV9BRVNOSV9BVlgyX1g4Nl82NCkgJiM0Mzs9IGFyaWEtYWVzbmktYXZ4Mi14ODZfNjQub1xuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTYwLWFyaWEtYWVzbmktYXZ4Mi14ODZfNjQteSA6PSBhcmlhLWFlc25pLWF2eDItYXNtXzY0Lm8gYXJpYV9hZXNuaV9hdngyX2dsdWUub1xuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTYxLVxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19DUllQVE9fQVJJQV9HRk5JX0FWWDUxMl9YODZfNjQpICYjNDM7PSBhcmlhLWdmbmktYXZ4NTEyLXg4Nl82NC5vXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUtNjMtYXJpYS1nZm5pLWF2eDUxMi14ODZfNjQteSA6PSBhcmlhLWdmbmktYXZ4NTEyLWFzbV82NC5vIGFyaWFfZ2ZuaV9hdng1MTJfZ2x1ZS5vXG4tLVxuYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzLmM9MzQ9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jLTEyNC1cdE9GRlNFVChUU1Nfc3AyLCB0c3Nfc3RydWN0LCB4ODZfdHNzLnNwMik7XG5hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHMuYzoxMjU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjQpXG5hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHMuYy0xMjYtXHQvKiBPZmZzZXQgZm9yIGZpZWxkcyBpbiBhcmlhX2N0eCAqL1xuLS1cbmNyeXB0by9LY29uZmlnPTM4OD1jb25maWcgQ1JZUFRPX0FOVUJJU1xuLS1cbmNyeXB0by9LY29uZmlnLTQwMS1cbmNyeXB0by9LY29uZmlnOjQwMjpjb25maWcgQ1JZUFRPX0FSSUFcbmNyeXB0by9LY29uZmlnLTQwMy1cdHRyaXN0YXRlIFwmIzM0O0FSSUFcJiMzNDtcbi0tXG5jcnlwdG8vTWFrZWZpbGU9MTQzPW9iai0kKENPTkZJR19DUllQVE9fU0VFRCkgJiM0Mzs9IHNlZWQub1xuY3J5cHRvL01ha2VmaWxlOjE0NDpvYmotJChDT05GSUdfQ1JZUFRPX0FSSUEpICYjNDM7PSBhcmlhX2dlbmVyaWMub1xuY3J5cHRvL01ha2VmaWxlLTE0NS1vYmotJChDT05GSUdfQ1JZUFRPX0NIQUNIQTIwKSAmIzQzOz0gY2hhY2hhLm9cbi0tXG5pbmNsdWRlL2NyeXB0by9hcmlhLmgtMTctXG5pbmNsdWRlL2NyeXB0by9hcmlhLmg6MTg6I2lmbmRlZiBfQ1JZUFRPX0FSSUFfSFxuaW5jbHVkZS9jcnlwdG8vYXJpYS5oOjE5OiNkZWZpbmUgX0NSWVBUT19BUklBX0hcbmluY2x1ZGUvY3J5cHRvL2FyaWEuaC0yMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTk9Q09ORklHX0NBTl9WWENBTj1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnOjEwOkNPTkZJR19DUllQVE9fQVJJQT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnLTExLUNPTkZJR19DUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNT1tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpczoKCioqSW52ZXN0aWdhdGluZyBLY29uZmlnIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgY291cGxlIG9mIGFyZWFzIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgY3J5cHRvL0tjb25maWc6NDAyYCDigJMgdGhhdCYjMzk7cyBsaWtlbHkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBzZWN0aW9uIHdpdGhpbiB0aGUgY3J5cHRvZ3JhcGhpYyBzdWJzeXN0ZW0g4oCTIGFuZCBhbHNvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGUgYnVpbGQgb3IgaW5jbHVzaW9uIG9mIGNlcnRhaW4gY3J5cHRvZ3JhcGh5IGZlYXR1cmVzIGFuZCBob3cgdGhlIFhGUk0gKElQc2VjIGZyYW1ld29yaykgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIHRoZW0uIElzIHRoZXJlIGEgZGVwZW5kZW5jeSBjaGFpbj8gRG8gc3BlY2lmaWMgY3J5cHRvIGFsZ29yaXRobXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBjZXJ0YWluIFhGUk0gZmVhdHVyZXMgdG8gZnVuY3Rpb24/IEkgbmVlZCB0byBhbmFseXplIHRob3NlIEtjb25maWcgZW50cmllcywgcG90ZW50aWFsbHkgY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBjcm9zcy1yZWZlcmVuY2luZyB0aGVtLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgYXJlIGxpbmtlZCBmb3IgY29uZmlndXJhdGlvbiBwdXJwb3Nlcy4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyB3aGVyZSBteSBhc3N1bXB0aW9ucyBtaWdodCBiZSBvZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7Y3J5cHRvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0ICBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiA0MDE6XHRcbiA0MDI6XHRjb25maWcgQ1JZUFRPX0FSSUFcbiA0MDM6XHRcdHRyaXN0YXRlIFwmIzM0O0FSSUFcJiMzNDtcbiA0MDQ6XHRcdHNlbGVjdCBDUllQVE9fQUxHQVBJXG4gNDA1Olx0XHRoZWxwXG4gNDA2Olx0XHQgIEFSSUEgY2lwaGVyIGFsZ29yaXRobSAoUkZDNTc5NClcbiA0MDc6XHRcbiA0MDg6XHRcdCAgQVJJQSBpcyBhIHN0YW5kYXJkIGVuY3J5cHRpb24gYWxnb3JpdGhtIG9mIHRoZSBSZXB1YmxpYyBvZiBLb3JlYS5cbiA0MDk6XHRcdCAgVGhlIEFSSUEgc3BlY2lmaWVzIHRocmVlIGtleSBzaXplcyBhbmQgcm91bmRzLlxuIDQxMDpcdFx0ICAxMjgtYml0OiAxMiByb3VuZHMuXG4gNDExOlx0XHQgIDE5Mi1iaXQ6IDE0IHJvdW5kcy5cbiA0MTI6XHRcdCAgMjU2LWJpdDogMTYgcm91bmRzLlxuIDQxMzpcdFxuIDQxNDpcdFx0ICBTZWU6XG4gNDE1Olx0XHQgIGh0dHBzOi8vc2VlZC5raXNhLm9yLmtyL2tpc2EvYWxnb3JpdGhtL0Vnb3ZBcmlhSW5mby5kb1xuIDQxNjpcdFxuIDQxNzpcdGNvbmZpZyBDUllQVE9fQkxPV0ZJU0hcbiA0MTg6XHRcdHRyaXN0YXRlIFwmIzM0O0Jsb3dmaXNoXCYjMzQ7XG4gNDE5Olx0XHRzZWxlY3QgQ1JZUFRPX0FMR0FQSVxuIDQyMDpcdFx0c2VsZWN0IENSWVBUT19CTE9XRklTSF9DT01NT05cbiA0MjE6XHRcdGhlbHBcbiA0MjI6XHRcdCAgQmxvd2Zpc2ggY2lwaGVyIGFsZ29yaXRobSwgYnkgQnJ1Y2UgU2NobmVpZXJcbiA0MjM6XHRcbiA0MjQ6XHRcdCAgVGhpcyBpcyBhIHZhcmlhYmxlIGtleSBsZW5ndGggY2lwaGVyIHdoaWNoIGNhbiB1c2Uga2V5cyBmcm9tIDMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqWEZSTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIGZhY2luZywgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29tcG9uZW50cyBhcmUgYmVpbmcgYXNzZW1ibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhlIGBuZXQveGZybS9LY29uZmlnYCBmaWxlIGlzIGdvaW5nIHRvIGJlIG15IHByaW1hcnkgcmVzb3VyY2UgZm9yIHRoYXQuIEl0IGhvbGRzIHRoZSBrZXkgdG8gdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbGwgdGhlICYjMzQ7aWYgdGhpcywgdGhlbiB0aGF0JiMzNDsgbG9naWMgdGhhdCBkaWN0YXRlcyB3aGljaCBYRlJNIGZlYXR1cmVzIGFyZSBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl04oCZbGwgZ2l2ZSBtZSB0aGUga25vYnMgYW5kIGRpYWxzLiBUaGVuLCBJJiMzOTtsbCBtb3ZlIG9uIHRvIGBuZXQveGZybS9NYWtlZmlsZWAsIG5hdHVyYWxseS4gSSBuZWVkIHRvIHNlZSBob3cgdGhvc2UgY29uZmlndXJhdGlvbiBjaG9pY2VzIGFyZSAqYWN0dWFsbHkqIHRyYW5zbGF0ZWQgaW50byBidWlsZCBpbnN0cnVjdGlvbnMgYW5kIGhvdyB0aGUgaW5kaXZpZHVhbCBYRlJNIG1vZHVsZXMgYW5kIG9iamVjdHMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBvcmdhbml6ZWQuIFRoYXQgTWFrZWZpbGUgd2lsbCBzaG93IG1lIHRoZSBidWlsZCBwcm9jZXNzJiMzOTtzIGRhbmNlLiBXaXRoIHRoZXNlIHR3bywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFhGUk1cbiAgIDY6XHRcdGJvb2xcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IEdST19DRUxMU1xuICAgOTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxuICAxMjpcdFx0Ym9vbFxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBYRlJNX0FMR09cbiAgMTU6XHRcdHRyaXN0YXRlXG4gIDE2Olx0XHRzZWxlY3QgWEZSTVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT1xuICAxODpcdFx0c2VsZWN0IENSWVBUT19BRUFEXG4gIDE5Olx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hcbiAgMjA6XHRcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcbiAgMjE6XHRcbiAgMjI6XHRpZiBJTkVUXG4gIDIzOlx0Y29uZmlnIFhGUk1fVVNFUlxuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuICAyNTpcdFx0c2VsZWN0IFhGUk1fQUxHT1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gIDI4Olx0XHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbiAgMzM6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbiAgMzQ6XHRcdGRlcGVuZHMgb24gWEZSTV9VU0VSIFx1MDAyNlx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXHUwMDI2XHUwMDI2IFxcXG4gIDM1Olx0XHRcdEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcbiAgMzY6XHRcdHNlbGVjdCBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXG4gIDM3Olx0XHRoZWxwXG4gIDM4Olx0XHQgIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBJUHNlY1xuICAzOTpcdFx0ICB1c2VkIGJ5IGNvbXBhdGlibGUgTGludXggYXBwbGljYXRpb25zLlxuICA0MDpcdFxuICA0MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBYRlJNX0lOVEVSRkFDRVxuICA0NDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gWEZSTSBcdTAwMjZcdTAwMjYgSVBWNlxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIHByb3ZpZGVzIGEgdmlydHVhbCBpbnRlcmZhY2UgdG8gcm91dGUgSVBzZWMgdHJhZmZpYy5cbiAgNDg6XHRcbiAgNDk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIE1ha2VmaWxlOgoKKipEaWdnaW5nIGludG8gdGhlIFhGUk0gQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHhmcm1fYWxnby5vYCBpcyBjb25zdHJ1Y3RlZCB3aXRoaW4gdGhlIGBuZXQveGZybWAgZGlyZWN0b3J5LiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IGxvY2F0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgZ292ZXJuIGl0cyBjb21waWxhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIGZpbGVzIGludm9sdmVkLCBhbnkgcmVxdWlyZWQgY29tcGlsZXIgZmxhZ3MsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGxpYnJhcmllcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29tbW9uIE1ha2VmaWxlIGNvbnN0cnVjdHMgbGlrZSBgJChvYmotbSlgLCBgJChjYylgLCBgJChLQlVJTERfQ0ZMQUdTKWAsIGFuZCBkZXBlbmRlbmN5IGRlY2xhcmF0aW9ucyAoZS5nLiwgYHhmcm1fYWxnby5vOiBzb21lX3NvdXJjZS5jIHNvbWVfaGVhZGVyLmhgKS4gVWx0aW1hdGVseSwgSSB3YW50IHRvIHRyYWNlIHRoZSBjb21waWxhdGlvbiBzdGVwcyB0byBlbnN1cmUgSSBncmFzcCBob3cgdGhpcyBzcGVjaWZpYyBvYmplY3QgZmlsZSBmaXRzIGludG8gdGhlIGxhcmdlciBYRlJNIGZyYW1ld29yay4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IG1vZHVsZSBkZXBlbmRlbmNpZXMgb3IgbGlua2luZyBhZ2FpbnN0IG90aGVyIG9iamVjdCBmaWxlcy4gQW55IHNwZWNpYWwgY29tcGlsZXIgb3B0aW9ucyBhcmUgYWxzbyBhIHBvaW50IG9mIGludGVyZXN0LCBhcyB0aGVzZSBtaWdodCBwcm92aWRlIGNsdWVzIHRvIHRoZSBvcHRpbWl6YXRpb24gb3IgZmVhdHVyZSByZXF1aXJlbWVudHMgb2YgdGhpcyBwYXJ0aWN1bGFyIFhGUk0gYWxnb3JpdGhtIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIFhGUk0gc3Vic3lzdGVtLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHR4ZnJtX2ludGVyZmFjZS0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlX2NvcmUub1xuICAgNzpcdFxuICAgODpcdGlmZXEgKCQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSxtKVxuICAgOTpcdHhmcm1faW50ZXJmYWNlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMpICYjNDM7PSB4ZnJtX2ludGVyZmFjZV9icGYub1xuICAxMDpcdGVsc2UgaWZlcSAoJChDT05GSUdfWEZSTV9JTlRFUkZBQ0UpLHkpXG4gIDExOlx0eGZybV9pbnRlcmZhY2UtJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX2ludGVyZmFjZV9icGYub1xuICAxMjpcdGVuZGlmXG4gIDEzOlx0XG4gIDE0Olx0b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXG4gIDE1Olx0XHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG4gIDE2Olx0XHRcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXG4gIDE3Olx0XHRcdCAgICAgIHhmcm1fbmF0X2tlZXBhbGl2ZS5vXG4gIDE4Olx0b2JqLSQoQ09ORklHX1hGUk1fU1RBVElTVElDUykgJiM0Mzs9IHhmcm1fcHJvYy5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX1hGUk1fQUxHTykgJiM0Mzs9IHhmcm1fYWxnby5vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgJiM0Mzs9IHhmcm1fdXNlci5vXG4gIDIxOlx0b2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICYjNDM7PSB4ZnJtX2NvbXBhdC5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX1hGUk1fSVBDT01QKSAmIzQzOz0geGZybV9pcGNvbXAub1xuICAyMzpcdG9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xuICAyNTpcdG9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSAmIzQzOz0gZXNwaW50Y3Aub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHNlYy9YRlJNIGFuZCB0aGUgQVJJQSBDaXBoZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBzZWVpbmcgYSBjbHVzdGVyIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfWEZSTV9BTEdPYCwgYENPTkZJR19YRlJNX1VTRVJgLCBgQ09ORklHX0NSWVBUT19BUklBYCwgYENPTkZJR19DUllQVE9fQ0JDYCwgYENPTkZJR19DUllQVE9fQ1RSYCwgYENPTkZJR19JTkVUX0VTUGAsIGV0Yy4gVGhlc2UgYXJlIGFsbCBwb2ludGluZyB0b3dhcmQgYW4gSVBzZWMvWEZSTSBzZXR1cCwgc3BlY2lmaWNhbGx5IGludm9sdmluZyB0aGUgQVJJQSBjaXBoZXIuIE15IGZvY3VzIGlzIHdoYXQgaGFwcGVucyB3aGVuIHN5emthbGxlciwgdGhlIGZ1enplciwgdHJpZXMgdG8gY29uZmlndXJlIHRoaXMuCgpFc3NlbnRpYWxseSwgdXNlciBzcGFjZSwgdGhyb3VnaCBzeXprYWxsZXIsIGlzIHNlbmRpbmcgbmV0bGluayBtZXNzYWdlcyAoYFhGUk1fTVNHX05FV1NBYCwgYFhGUk1fTVNHX1VQRFNBYCwgZXRjLikgdG8gdGhlIGtlcm5lbC4gVGhlc2UgbWVzc2FnZXMgc3BlY2lmeSBzZWN1cml0eSBhc3NvY2lhdGlvbnMgKFNBcyksIGFuZCBjcnVjaWFsbHksIHRoZXkgaW5jbHVkZSB0aGUgYFhGUk1BX0FMR19DUllQVGAgYXR0cmlidXRlLiBUaGUgZnV6emVyIGxpa2VseSBzcGVjaWZpZXMgYWxnb3JpdGhtIG5hbWVzIGxpa2UgYCYjMzQ7Y2JjKGFyaWEpJiMzNDtgIG9yIGAmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKSYjMzQ7YCBvciBqdXN0IGAmIzM0O2FyaWEmIzM0O2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGludGVyZXN0aW5nIHBhcnQsIHJpZ2h0PwoKVGhlIGtlcm5lbCwgaW4gYHhmcm1fdXNlci5jYCwgdXNlcyB0aGUgYGF0dGFjaF9jcnlwdGAgZnVuY3Rpb24gdG8gbWFrZSBzZW5zZSBvZiB0aGlzLiBUaGlzIGZ1bmN0aW9uIHRoZW4gY2FsbHMgYHhmcm1fZWFsZ19nZXRfYnluYW1lYCwgd2hpY2ggaHVudHMgdGhyb3VnaCBgeGZybV9lYWxnX2xpc3RgIGxvb2tpbmcgZm9yIGEgc3VpdGFibGUgYWxnb3JpdGhtLiBUaGlzIGlzIGltcG9ydGFudDogdGhlIGxpc3QgKnNob3VsZCogbm93IGNvbnRhaW4gZW50cmllcyBmb3IgYCYjMzQ7Y2JjKGFyaWEpJiMzNDtgIGFuZCBgJiMzNDtyZmMzNjg2KGN0cihhcmlhKSkmIzM0O2AuIElmIGl0IGRvZXNuJiMzOTt0LCB3ZSBoYXZlIGEgcHJvYmxlbS4KClRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgaW4gYGVzcF9pbml0X3N0YXRlYCwgbG9jYXRlZCBpbiBgbmV0L2lwdjQvZXNwNC5jYCBvciBgbmV0L2lwdjYvZXNwNi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGFsbG9jYXRlIHRoZSBza2NpcGhlciBvciBjcnlwdG8gdHJhbnNmb3JtLiBJdCBhbHNvIGluaXRpYWxpemVzIHRoZSBJViBnZW5lcmF0b3IsIHVzaW5nIGBlY2hhaW5pdmAgb3IgYHNlcWl2YC4gRmluYWxseSwgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIG5ldHdvcmsgcGFja2V0cyBoYXBwZW5zIHVzaW5nIEVTUCAoYHhmcm00X291dHB1dGAsIGB4ZnJtNl9vdXRwdXRgLCBgZXNwX291dHB1dGAsIGFuZCBzbyBvbikuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSAqcmVxdWlyZW1lbnRzKi4gRm9yIGBjYmMoYXJpYSlgIHRvIGJlIHN1Y2Nlc3NmdWxseSBpbnN0YW50aWF0ZWQsIHRoZSBrZXJuZWwgKm11c3QqIGhhdmUgYENSWVBUT19DQkNgIGFuZCBgQ1JZUFRPX0FSSUFgIGVuYWJsZWQuIFNpbWlsYXJseSwgYHJmYzM2ODYoY3RyKGFyaWEpKWAgcmVxdWlyZXMgYENSWVBUT19DVFJgLCBgQ1JZUFRPX1NFUUlWYCBvciBgQ1JZUFRPX0VDSEFJTklWYCwgYW5kIGBDUllQVE9fQVJJQWAuIE5hdHVyYWxseSwgYFhGUk1fVVNFUmAsIGBYRlJNX0FMR09gLCBhbmQgZWl0aGVyIGBJTkVUX0VTUGAgb3IgYElORVQ2X0VTUGAgbmVlZCB0byBiZSBlbmFibGVkIHRvby4gSXQgc2VlbXMgYmFzaWMsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSYjMzk7bGwgY2hlY2sgdGhlIEdpdCBsb2cgZm9yIHRoZSBjb21taXQgaW50cm9kdWNpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGUgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvciYjMzk7cyBpbnRlbnQgYXJlIGVzc2VudGlhbCBmb3IgbXkgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBhZGRlZCwgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGUsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUklBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBBbGdvcml0aG0gTG9va3VwKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGxvb2tzIHVwIGFuZCB1c2VzIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHhmcm1fYWxnby5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9ucyBmb3IgYHhmcm1fZWFsZ19nZXRfYnluYW1lYCBhbmQgYHhmcm1fZmluZF9hbGdvYC4gVGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zOyBvbmUgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuIGFsZ29yaXRobSBieSBpdHMgbmFtZSwgYW5kIHRoZSBvdGhlciBwcm9iYWJseSBoYW5kbGVzIHRoZSBicm9hZGVyIHNlYXJjaCBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGFsZ29yaXRobSBzZWxlY3Rpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBob2xkIHRoZSBjb3JlIGxvZ2ljIGZvciBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGFsZ29yaXRobSByZWdpc3RyYXRpb24sIGxvb2t1cHMsIGFuZCBwb3RlbnRpYWxseSBldmVuIGNhY2hpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2ZpbmRfYWxnbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2FsZ28uYz02Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fbGlzdCB4ZnJtX2NhbGdfbGlzdCA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy02ODQtXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2ODU6c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9maW5kX2FsZ28oXG5uZXQveGZybS94ZnJtX2FsZ28uYy02ODYtXHRjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgKmFsZ29fbGlzdCxcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MTk9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyMC17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3MjE6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9hYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzIyLVx0XHRcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MjY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyNy17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3Mjg6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI5LVx0XHRcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MzM9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2NhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTczNC17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3MzU6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9jYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzM2LVx0XHRcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NDk9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTAte1xubmV0L3hmcm0veGZybV9hbGdvLmM6NzUxOlx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fYWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzUyLVx0XHRcdCAgICAgIHByb2JlKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTcte1xubmV0L3hmcm0veGZybV9hbGdvLmM6NzU4Olx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU5LVx0XHRcdCAgICAgIHByb2JlKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NjM9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2NhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NjQte1xubmV0L3hmcm0veGZybV9hbGdvLmM6NzY1Olx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fY2FsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzY2LVx0XHRcdCAgICAgIHByb2JlKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03ODU9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FlYWRfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgaWN2X2xlbiwgaW50IHByb2JlKVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc5MS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc5MjpcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcdTAwMjZ4ZnJtX2FlYWRfbGlzdCwgeGZybV9hZWFkX25hbWVfbWF0Y2gsIFx1MDAyNmRhdGEsXG5uZXQveGZybS94ZnJtX2FsZ28uYy03OTMtXHRcdFx0ICAgICAgcHJvYmUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY1MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGB4ZnJtX2ZpbmRfYWxnb2AgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHhmcm1fZmluZF9hbGdvYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGxpa2VseSBhcm91bmQgdGhlIGVmZmljaWVuY3kgb2YgdGhlIHNlYXJjaC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIG9wdGltaXplZCwgb3IgKmlmKiBpdCYjMzk7cyBvcHRpbWl6ZWQsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHN1c2NlcHRpYmxlIHRvIGFueSBkZW5pYWwtb2Ytc2VydmljZSB2ZWN0b3JzIHJlbGF0ZWQgdG8gcG9vcmx5IGNvbnN0cnVjdGVkIHNlY3VyaXR5IHBvbGljaWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBhbGdvcml0aG0gdGFibGVzIGFyZSBvcmdhbml6ZWQsIHRoZSBzZWFyY2gga2V5IHVzZWQsIGFuZCBob3cgY29sbGlzaW9ucyBhcmUgaGFuZGxlZC4gSXMgdGhlcmUgYSBjYWNoaW5nIG1lY2hhbmlzbT8gRG9lcyBpdCBpdGVyYXRlIGxpbmVhcmx5IG9yIHV0aWxpemUgc29tZSBmb3JtIG9mIGhhc2hpbmcgb3IgYSBtb3JlIGFkdmFuY2VkIGRhdGEgc3RydWN0dXJlPyBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBpc24mIzM5O3QgcHJvcGVybHkgcHJvdGVjdGVkIGJ5IGxvY2tzLiBGdXJ0aGVyLCBJIHdpbGwgbG9vayB0byBzZWUgaWYgaXQgbWFrZXMgdXNlIG9mIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYW5kIGlmIGl0IGhhcyBhbnkgZmFsbGJhY2tzLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCB3ZWFrbmVzc2VzIHRoYXQgY291bGQgYmUgZXhwbG9pdGVkIGluIGEgcmVhbC13b3JsZCBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2FsZ28uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjgwOlx0XHQuZmluZCA9IGNyeXB0b19oYXNfYWNvbXAsXG4gNjgxOlx0XHQuYWxncyA9IGNhbGdfbGlzdCxcbiA2ODI6XHRcdC5lbnRyaWVzID0gQVJSQVlfU0laRShjYWxnX2xpc3QpLFxuIDY4MzpcdH07XG4gNjg0Olx0XG4gNjg1Olx0c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9maW5kX2FsZ28oXG4gNjg2Olx0XHRjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgKmFsZ29fbGlzdCxcbiA2ODc6XHRcdGludCBtYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmVudHJ5LCBjb25zdCB2b2lkICpkYXRhKSxcbiA2ODg6XHRcdGNvbnN0IHZvaWQgKmRhdGEsIGludCBwcm9iZSlcbiA2ODk6XHR7XG4gNjkwOlx0XHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmxpc3QgPSBhbGdvX2xpc3QtXHUwMDNlYWxncztcbiA2OTE6XHRcdGludCBpLCBzdGF0dXM7XG4gNjkyOlx0XG4gNjkzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhbGdvX2xpc3QtXHUwMDNlZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiA2OTQ6XHRcdFx0aWYgKCFtYXRjaChsaXN0ICYjNDM7IGksIGRhdGEpKVxuIDY5NTpcdFx0XHRcdGNvbnRpbnVlO1xuIDY5NjpcdFxuIDY5NzpcdFx0XHRpZiAobGlzdFtpXS5hdmFpbGFibGUpXG4gNjk4Olx0XHRcdFx0cmV0dXJuIFx1MDAyNmxpc3RbaV07XG4gNjk5Olx0XG4gNzAwOlx0XHRcdGlmICghcHJvYmUpXG4gNzAxOlx0XHRcdFx0YnJlYWs7XG4gNzAyOlx0XG4gNzAzOlx0XHRcdHN0YXR1cyA9IGFsZ29fbGlzdC1cdTAwM2VmaW5kKGxpc3RbaV0ubmFtZSwgMCwgMCk7XG4gNzA0Olx0XHRcdGlmICghc3RhdHVzKVxuIDcwNTpcdFx0XHRcdGJyZWFrO1xuIDcwNjpcdFxuIDcwNzpcdFx0XHRsaXN0W2ldLmF2YWlsYWJsZSA9IHN0YXR1cztcbiA3MDg6XHRcdFx0cmV0dXJuIFx1MDAyNmxpc3RbaV07XG4gNzA5Olx0XHR9XG4gNzEwOlx0XHRyZXR1cm4gTlVMTDtcbiA3MTE6XHR9XG4gNzEyOlx0XG4gNzEzOlx0c3RhdGljIGludCB4ZnJtX2FsZ19pZF9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmVudHJ5LFxuIDcxNDpcdFx0XHRcdCAgICAgY29uc3Qgdm9pZCAqZGF0YSlcbiA3MTU6XHR7XG4gNzE2Olx0XHRyZXR1cm4gZW50cnktXHUwMDNlZGVzYy5zYWRiX2FsZ19pZCA9PSAodW5zaWduZWQgbG9uZylkYXRhO1xuIDcxNzpcdH1cbiA3MTg6XHRcbiA3MTk6XHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxuIDcyMDpcdHtcbiA3MjE6XHRcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcdTAwMjZ4ZnJtX2FhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXG4gNzIyOlx0XHRcdFx0ICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylhbGdfaWQsIDEpO1xuIDcyMzpcdH1cbiA3MjQ6XHRFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2FhbGdfZ2V0X2J5aWQpO1xuIDcyNTpcdFxuIDcyNjpcdHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9lYWxnX2dldF9ieWlkKGludCBhbGdfaWQpXG4gNzI3Olx0e1xuIDcyODpcdFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19pZF9tYXRjaCxcbiA3Mjk6XHRcdFx0XHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzAyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBFbmNyeXB0aW9uIEFsZ29yaXRobSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgdGhlIGZ1enppbmcgd29ydGhpbmVzcyBvZiB0aGlzIHBhdGNoLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGNvbXBvbmVudHMgYW5kIGVudHJ5IHBvaW50cy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYGNiYyhhcmlhKWAgYW5kIGByZmMzNjg2KGN0cihhcmlhKSlgIGVuY3J5cHRpb24gYWxnb3JpdGhtcywgcmVnaXN0ZXJpbmcgdGhlbSBpbiBgZWFsZ19saXN0YC4gVGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgcmVnaXN0cmF0aW9uIGFyZSBgeGZybV9lYWxnX2dldF9ieW5hbWVgLCBgeGZybV9wcm9iZV9hbGdzYCwgYGF0dGFjaF9jcnlwdGAsIGFuZCBgeGZybV9zdGF0ZV9jb25zdHJ1Y3RgLiBJIG5lZWQgdG8gYnJvYWRlbiBteSBzY29wZSBiZXlvbmQgdGhvc2UgZW50cnkgcG9pbnRzLgoKSSYjMzk7bGwgbm93IGV4cGFuZCBteSBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGFsbCB0b3VjaHBvaW50cyByZWxhdGVkIHRvIGB4ZnJtX2FsZ29gIGFuZCBBUklBIGVuY3J5cHRpb24gd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhhdCBpbmNsdWRlcyBjaGVja2luZyBgY3J5cHRvX2FyaWFgIGFuZCwgaW1wb3J0YW50bHksIHRoZSBvcHRpbWl6ZWQgeDg2IHZhcmlhbnRzIGxpa2UgYENSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjRgLCBgQ1JZUFRPX0FSSUFfQUVTTklfQVZYMl9YODZfNjRgLCBhbmQgYENSWVBUT19BUklBX0dGTklfQVZYNTEyX1g4Nl82NGAuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IEkgaGF2ZSBjb3JyZWN0IHNldHRpbmdzIGZvciBgQ1JZUFRPX0NCQ2AsIGBDUllQVE9fQ1RSYCwgYFhGUk1gLCBgWEZSTV9BTEdPYCwgYFhGUk1fVVNFUmAsIGBJTkVUX0VTUGAsIGFuZCBgSU5FVDZfRVNQYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgY2hhbmdlIGEgZ29vZCBmdXp6aW5nIHRhcmdldD8gTGV0JiMzOTtzIGNoZWNrOgoKMS4gICoqUmVhY2hhYmlsaXR5OioqIFRoZSBjb2RlIHJlc2lkZXMgaW4gYG5ldC94ZnJtL3hmcm1fYWxnby5jYC4gSXQgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBOZXRsaW5rLCBzcGVjaWZpY2FsbHkgdGhlIFhGUk0gbmV0bGluayBBUEkgb3IgcGZrZXksIHdoaWNoIGlzIGhlYXZpbHkgbGV2ZXJhZ2VkIGJ5IHN5emthbGxlci4gVGhlIHByZXNlbmNlIG9mIGBzeXpfbmV0bGlua194ZnJtKmAgb3Igc29ja2V0IG5ldGxpbmsgbWVzc2FnZXMgaW5kaWNhdGVzIHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgaGFzIGV4Y2VsbGVudCBjb3ZlcmFnZS4KMi4gICoqRnVuY3Rpb25hbGl0eToqKiBUaGlzIHBhdGNoIGFkZHMgdHdvIG5ldyBjaXBoZXIgYWxnb3JpdGhtcyB0byBYRlJNLCBhbGxvd2luZyB1c2Vyc3BhY2UgY29uZmlndXJhdGlvbiBvZiBYRlJNIHN0YXRlcyB1c2luZyBgY2JjKGFyaWEpYCBhbmQgYHJmYzM2ODYoY3RyKGFyaWEpKWAsIGluY2x1ZGluZyBzcGVjaWZpYyBrZXkgc2l6ZXMsIElWIGdlbmVyYXRvcnMsIGFuZCBibG9jayBzaXplcy4gVGhhdCYjMzk7cyBnb29kIGNvbXBsZXhpdHkgZm9yIGZ1enppbmcuCjMuICAqKkltcGFjdDoqKiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IElQc2VjIGFuZCB0aGUgY3J5cHRvZ3JhcGhpYyBpbnRlcmZhY2UuIFRoaXMgaXMgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBzZWN1cml0eSBmbGF3cyBoZXJlIGFyZSBoaWdoLWltcGFjdC4KNC4gICoqQ29uY2x1c2lvbjoqKiBCYXNlZCBvbiBhbGwgdGhlc2UgcG9pbnRzLCB0aGlzIGlzIGRlZmluaXRlbHkgYSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgc2l0dWF0aW9uLiBJJiMzOTtkIG5lZWQgdG8gcHJpb3JpdGl6ZSB0aGlzLgoKRmluYWxseSwgSSYjMzk7bGwgY2FyZWZ1bGx5IHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIGBYRlJNX0FMR09gLCBgWEZSTV9VU0VSYCwgYENSWVBUT19BUklBYCwgYENSWVBUT19DQkNgLCBgQ1JZUFRPX0NUUmAsIGFuZCBlaXRoZXIgYElORVRfRVNQYCAob3IgcG90ZW50aWFsbHkgYElORVRfRVNQX09GRkxPQURgKSBvciBgSU5FVDZfRVNQYCBlbmFibGVkLiBJJiMzOTtsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBpbiBgbmV0L2lwdjRgIGFuZCBgbmV0L2lwdjZgIHRvIGVuc3VyZSB0aGUgRVNQIG9wdGlvbnMgYXJlIGNvcnJlY3RseSBzZXQuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCB0byBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVF9FU1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBJUHNlYyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSB3aXRoaW4gdGhlIElQdjQgc3RhY2suIFRoYXQgbWVhbnMgSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmaWMgdG8gSVB2NCBuZXR3b3JraW5nLCBhbmQgaXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdG8gaG9sZCB0aGUgc2V0dGluZyBJJiMzOTttIGxvb2tpbmcgZm9yLCBgSU5FVF9FU1BgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIHByb2JhYmx5IGd1ZXNzIHRoYXQmIzM5O3Mgd2hlcmUgaXQgaXMsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYmVzdCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgaW4gdGhlIGNvbmZpZyBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgbmVlZGVkIGFsZ29yaXRobXMgd2hlbiBhdmFpbGFibGUuXG4gMzUxOlx0XG4gMzUyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMzUzOlx0XG4gMzU0Olx0Y29uZmlnIElORVRfRVNQXG4gMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4gMzU2Olx0XHRzZWxlY3QgWEZSTV9FU1BcbiAzNTc6XHRcdGhlbHBcbiAzNTg6XHRcdCAgU3VwcG9ydCBmb3IgSVBzZWMgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpLlxuIDM1OTpcdFxuIDM2MDpcdFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXG4gMzYxOlx0XHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXG4gMzYyOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcbiAzNjM6XHRcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91JiMzOTtsbCBuZWVkIHRvIGVuYWJsZVxuIDM2NDpcdFx0ICB0aGVtIGluIHRoZSBjcnlwdG8gQVBJLiAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBhY2NlbGVyYXRlZFxuIDM2NTpcdFx0ICBpbXBsZW1lbnRhdGlvbnMgb2YgYW55IG5lZWRlZCBhbGdvcml0aG1zIHdoZW4gYXZhaWxhYmxlLlxuIDM2NjpcdFxuIDM2NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDM2ODpcdFxuIDM2OTpcdGNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4gMzcwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbiAzNzE6XHRcdGRlcGVuZHMgb24gSU5FVF9FU1BcbiAzNzI6XHRcdHNlbGVjdCBYRlJNX09GRkxPQURcbiAzNzM6XHRcdGRlZmF1bHQgblxuIDM3NDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc1MQoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWEZSTSBDcnlwdG8gQWxnb3JpdGhtIENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTt2ZSBjb3ZlcmVkIG91ciBiYXNlcyBvbiB0aGUgWEZSTSBjcnlwdG8gYWxnb3JpdGhtIHNldHVwLiBJJiMzOTttIGdvaW5nIGJhY2sgdG8gYG5ldC94ZnJtL0tjb25maWdgIGZvciBhIGZpbmFsIGxvb2stc2VlIGF0IHRoZSBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fQUxHT2AgZGVwZW5kZW5jaWVzLiBZZXAsIGBYRlJNX1VTRVJgIHN0aWxsIHByb3Blcmx5IHNlbGVjdHMgYFhGUk1fQUxHT2AsIHdoaWNoIGluIHR1cm4gdHJpZ2dlcnMgdGhlIGNvbXBpbGF0aW9uIG9mIGB4ZnJtX2FsZ28uY2AuIEdvb2QuIFRoYXTigJlzIHNvbGlkLgoKTm93LCBsZXQmIzM5O3MgbWVudGFsbHkgd2FsayB0aHJvdWdoIHRob3NlIGtleSBzeW1ib2xzIGFnYWluLCBqdXN0IHRvIGJlIGNlcnRhaW46IGB4ZnJtX2VhbGdfZ2V0X2J5bmFtZWAsIGB4ZnJtX2ZpbmRfYWxnb2AsIGB4ZnJtX3Byb2JlX2FsZ3NgLCBhbmQgYGF0dGFjaF9jcnlwdGAuIFJpZ2h0LCByaWdodC4gVGhlc2UgYXJlbiYjMzk7dCBleGFjdGx5IHViaXF1aXRvdXM7IHRoZXkmIzM5O3JlIGFsbCBwcmV0dHkgY2xlYXJseSB0aWVkIHRvIHRoZSBYRlJNIGNyeXB0byBhbGdvcml0aG0gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgc2V0dXAgcGhhc2UuIFRoZXkmIzM5O3JlIG5vdCBnb2luZyB0byBiZSBpbiBhbnkgaG90IHBhdGhzLiBBcyBJIHJlY2FsbCwgdGhleSYjMzk7cmUgb25seSBpbnZva2VkIGR1cmluZyBYRlJNIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgY29uZmlndXJhdGlvbiwgdHlwaWNhbGx5IHRocm91Z2ggYSBOZXRsaW5rIGBYRlJNX01TR19ORVdTQWAgbWVzc2FnZS4gVGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hhdCB3ZSB3YW50LgoKT2theSwgbGV04oCZcyByZXZpc2l0IHRoZSBgRW5hYmxlQ29uZmlnc2Agb25lIGxhc3QgdGltZSB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudDogd2UgbmVlZCBgWEZSTWAsIGBYRlJNX0FMR09gLCBgWEZSTV9VU0VSYCwgYENSWVBUT19BUklBYCwgYENSWVBUT19DQkNgLCBgQ1JZUFRPX0NUUmAsIGFuZCBgSU5FVF9FU1BgLiBZZXAsIHRob3NlIGFyZSBhbGwgcHJlc2VudCBhbmQgYWNjb3VudGVkIGZvci4gVGhleSBhcmUgYWxsIGNvcnJlY3QgYW5kIEkgY2FuIGRlZmVuZCB0aGVpciBpbmNsdXNpb24gd2l0aG91dCBhbnkgaXNzdWVzLgoKQWxyaWdodCwgdGhhdCYjMzk7cyBldmVyeXRoaW5nLiBJdCBhbGwgY2hlY2tzIG91dC4gVGltZSB0byBtYWtlIHRoZSBmaW5hbCBjYWxsIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTSYjMzQ7LAogICAgJiMzNDtYRlJNX0FMR08mIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0NSWVBUT19BUklBJiMzNDssCiAgICAmIzM0O0NSWVBUT19DQkMmIzM0OywKICAgICYjMzQ7Q1JZUFRPX0NUUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZWFsZ19nZXRfYnluYW1lJiMzNDssCiAgICAmIzM0O3hmcm1fZmluZF9hbGdvJiMzNDssCiAgICAmIzM0O3hmcm1fcHJvYmVfYWxncyYjMzQ7LAogICAgJiMzNDthdHRhY2hfY3J5cHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBBUklBIGNpcGhlciBhbGdvcml0aG1zIChcJiMzNDtjYmMoYXJpYSlcJiMzNDsgYW5kIFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OykgdG8gdGhlIFhGUk0gZW5jcnlwdGlvbiBhbGdvcml0aG0gcmVnaXN0cnkgKGVhbGdfbGlzdCkuIFRoaXMgZW5hYmxlcyB1c2VyLXNwYWNlIHZpYSBYRlJNIE5ldGxpbmsgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBJUHNlYyBTQXMgd2l0aCBBUklBIGVuY3J5cHRpb24sIGV4ZXJjaXNpbmcgdGhlIGNyeXB0byBzdWJzeXN0ZW0gYW5kIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9BTEdPJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtDUllQVE9fQVJJQSYjMzQ7LAogICAgJiMzNDtDUllQVE9fQ0JDJiMzNDssCiAgICAmIzM0O0NSWVBUT19DVFImIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2VhbGdfZ2V0X2J5bmFtZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2ZpbmRfYWxnbyYjMzQ7LAogICAgJiMzNDt4ZnJtX3Byb2JlX2FsZ3MmIzM0OywKICAgICYjMzQ7YXR0YWNoX2NyeXB0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIHRvIHRoZSBYRlJNIGVuY3J5cHRpb24gYWxnb3JpdGhtIHJlZ2lzdHJ5IChlYWxnX2xpc3QpLiBUaGlzIGVuYWJsZXMgdXNlci1zcGFjZSB2aWEgWEZSTSBOZXRsaW5rIGludGVyZmFjZSB0byBjb25maWd1cmUgSVBzZWMgU0FzIHdpdGggQVJJQSBlbmNyeXB0aW9uLCBleGVyY2lzaW5nIHRoZSBjcnlwdG8gc3Vic3lzdGVtIGFuZCBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWVyZWx5IHJlZ2lzdGVycyB0d28gZXhpc3RpbmcgY2lwaGVyIHN1aXRlcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcbi0gVGhlIGFkZGVkIGVudHJpZXMgYXJlIHN0YXRpYyBgc3RydWN0IHhmcm1fYWxnb19kZXNjYCBkZWZpbml0aW9ucyBpbiBgLmRhdGFgIC8gYC5yb2RhdGFgIHdoZXJlIHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuXG4tIE5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24sIHN0YWNrIHZhcmlhYmxlIGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc3VyZSwgb3IgbmV0bGluayAvIGBjb3B5X3RvX3VzZXJgIGRhdGEgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxuLSBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNhNTNkNmVjZGUyNThjYWMwMDQ0YjVlOWYwZTkyNmRjMDMzNTkyZTUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA2OjM4OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uYwppbmRleCA3MDQzNDQ5NWYyM2Y1Li4xNmM3MGRjMWE0MjY4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2FsZ28uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2FsZ28uYwpAQCAtNTEyLDYgJiM0Mzs1MTIsMzQgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBlYWxnX2xpc3RbXSA9IHsKIAkJLnNhZGJfYWxnX21heGJpdHMgPSAyNTYKIAl9CiB9LAomIzQzO3sKJiM0MzsJLm5hbWUgPSAmIzM0O2NiYyhhcmlhKSYjMzQ7LAomIzQzOwkuY29tcGF0ID0gJiMzNDthcmlhJiMzNDssCiYjNDM7CiYjNDM7CS51aW5mbyA9IHsKJiM0MzsJCS5lbmNyID0gewomIzQzOwkJCS5nZW5pdiA9ICYjMzQ7ZWNoYWluaXYmIzM0OywKJiM0MzsJCQkuYmxvY2tiaXRzID0gMTI4LAomIzQzOwkJCS5kZWZrZXliaXRzID0gMjU2LAomIzQzOwkJfQomIzQzOwl9LAomIzQzOwomIzQzOwkucGZrZXlfc3VwcG9ydGVkID0gMCwKJiM0Mzt9LAomIzQzO3sKJiM0MzsJLm5hbWUgPSAmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKSYjMzQ7LAomIzQzOwkuY29tcGF0ID0gJiMzNDthcmlhJiMzNDssCiYjNDM7CiYjNDM7CS51aW5mbyA9IHsKJiM0MzsJCS5lbmNyID0gewomIzQzOwkJCS5nZW5pdiA9ICYjMzQ7c2VxaXYmIzM0OywKJiM0MzsJCQkuYmxvY2tiaXRzID0gMTI4LAomIzQzOwkJCS5kZWZrZXliaXRzID0gMTYwLAomIzQzOwkJfQomIzQzOwl9LAomIzQzOwomIzQzOwkucGZrZXlfc3VwcG9ydGVkID0gMCwKJiM0Mzt9LAogewogCS5uYW1lID0gJiMzNDtjYmModHdvZmlzaCkmIzM0OywKIAkuY29tcGF0ID0gJiMzNDt0d29maXNoJiMzNDssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjUzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgZm9yIEFSSUEgQ2lwaGVyIEFsZ29yaXRobSBQYXRjaD8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIEFSSUEgY2lwaGVyIGFsZ29yaXRobXMsIHNwZWNpZmljYWxseSBgY2JjKGFyaWEpYCBhbmQgYHJmYzM2ODYoY3RyKGFyaWEpKWAsIHRvIGB4ZnJtX2FsZ28uY2AuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBldmFsdWF0aW5nIHRoZSBMaW51eCBrZXJuZWwgc2FuaXRpemVyIHN1aXRhYmlsaXR5IGhlcmUsIGZvY3VzaW5nIG9uIEtBU0FOIHZlcnN1cyBLTVNBTiBmb3IgYSBwYXRjaC4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIGJlbmlnbiBkZWZlbnNpdmUgc2VjdXJpdHkgYW5hbHlzaXMgb3IgUUEgdGFzaywgcGF0Y2ggZXZhbHVhdGlvbjsgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYW55IGFjdGl2ZSBleHBsb2l0IGdlbmVyYXRpb24gb3IgbWFsaWNpb3VzIGNvZGUuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIFRoaXMgcGF0Y2gganVzdCBzZWVtcyB0byBiZSBhZGRpbmcgdHdvIGVudHJpZXMgdG8gdGhlIGBlYWxnX2xpc3RgIGFycmF5IHdpdGhpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgLiBUaW1lIHRvIGdyYWIgdGhhdCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTEyLCBhbmQgY2hlY2sgb3V0IHdoYXQmIzM5O3MgYWxyZWFkeSB0aGVyZS4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQgbG9va3MgbGlrZS4gVGhpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIHJpc2tzLiBNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIGFuZCB3aGV0aGVyIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbmVjZXNzYXJ5IHdpbGwgaGluZ2Ugb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhpc3RpbmcgY29kZSBhbmQgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhhdCB0aGUgYWRkZWQgYWxnb3JpdGhtcyBtaWdodCBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fYWxnby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcdFx0XHQuZ2VuaXYgPSBcJiMzNDtlY2hhaW5pdlwmIzM0OyxcbiA1MDE6XHRcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuIDUwMjpcdFx0XHRcdC5kZWZrZXliaXRzID0gMTI4LFxuIDUwMzpcdFx0XHR9XG4gNTA0Olx0XHR9LFxuIDUwNTpcdFxuIDUwNjpcdFx0LnBma2V5X3N1cHBvcnRlZCA9IDEsXG4gNTA3Olx0XG4gNTA4Olx0XHQuZGVzYyA9IHtcbiA1MDk6XHRcdFx0LnNhZGJfYWxnX2lkID0gU0FEQl9YX0VBTEdfQ0FNRUxMSUFDQkMsXG4gNTEwOlx0XHRcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXG4gNTExOlx0XHRcdC5zYWRiX2FsZ19taW5iaXRzID0gMTI4LFxuIDUxMjpcdFx0XHQuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NlxuIDUxMzpcdFx0fVxuIDUxNDpcdH0sXG4gNTE1Olx0e1xuIDUxNjpcdFx0Lm5hbWUgPSBcJiMzNDtjYmMoYXJpYSlcJiMzNDssXG4gNTE3Olx0XHQuY29tcGF0ID0gXCYjMzQ7YXJpYVwmIzM0OyxcbiA1MTg6XHRcbiA1MTk6XHRcdC51aW5mbyA9IHtcbiA1MjA6XHRcdFx0LmVuY3IgPSB7XG4gNTIxOlx0XHRcdFx0Lmdlbml2ID0gXCYjMzQ7ZWNoYWluaXZcJiMzNDssXG4gNTIyOlx0XHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbiA1MjM6XHRcdFx0XHQuZGVma2V5Yml0cyA9IDI1NixcbiA1MjQ6XHRcdFx0fVxuIDUyNTpcdFx0fSxcbiA1MjY6XHRcbiA1Mjc6XHRcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxuIDUyODpcdH0sXG4gNTI5Olx0e1xuIDUzMDpcdFx0Lm5hbWUgPSBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDssXG4gNTMxOlx0XHQuY29tcGF0ID0gXCYjMzQ7YXJpYVwmIzM0OyxcbiA1MzI6XHRcbiA1MzM6XHRcdC51aW5mbyA9IHtcbiA1MzQ6XHRcdFx0LmVuY3IgPSB7XG4gNTM1Olx0XHRcdFx0Lmdlbml2ID0gXCYjMzQ7c2VxaXZcJiMzNDssXG4gNTM2Olx0XHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbiA1Mzc6XHRcdFx0XHQuZGVma2V5Yml0cyA9IDE2MCxcbiA1Mzg6XHRcdFx0fVxuIDUzOTpcdFx0fSxcbiA1NDA6XHRcbiA1NDE6XHRcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxuIDU0MjpcdH0sXG4gNTQzOlx0e1xuIDU0NDpcdFx0Lm5hbWUgPSBcJiMzNDtjYmModHdvZmlzaClcJiMzNDssXG4gNTQ1Olx0XHQuY29tcGF0ID0gXCYjMzQ7dHdvZmlzaFwmIzM0OyxcbiA1NDY6XHRcbiA1NDc6XHRcdC51aW5mbyA9IHtcbiA1NDg6XHRcdFx0LmVuY3IgPSB7XG4gNTQ5Olx0XHRcdFx0Lmdlbml2ID0gXCYjMzQ7ZWNoYWluaXZcJiMzNDssXG4gNTUwOlx0XHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbiA1NTE6XHRcdFx0XHQuZGVma2V5Yml0cyA9IDEyOCxcbiA1NTI6XHRcdFx0fVxuIDU1MzpcdFx0fSxcbiA1NTQ6XHRcbiA1NTU6XHRcdC5wZmtleV9zdXBwb3J0ZWQgPSAxLFxuIDU1NjpcdFxuIDU1NzpcdFx0LmRlc2MgPSB7XG4gNTU4Olx0XHRcdC5zYWRiX2FsZ19pZCA9IFNBREJfWF9FQUxHX1RXT0ZJU0hDQkMsXG4gNTU5Olx0XHRcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBBbGdvcml0aG0gVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYHhmcm1fYWxnb19kZXNjYCBoZXJlLCBhbmQgSSYjMzk7bSBwYXJ0aWN1bGFybHkgY3VyaW91cyBpZiB0aGVyZSBhcmUgb3RoZXIsIHJlbGF0ZWQgYWxnb3JpdGhtcyBpbiB0aGUgYGVhbGdfbGlzdGAuIEl0IHNlZW1zIGxpa2UgYSBkZWVwZXIgZGl2ZSBpbnRvIGBuZXQveGZybS94ZnJtX2FsZ28uY2AgaXMgaW4gb3JkZXIuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHJlYWRpbmcgdGhyb3VnaCB0aGUgY29kZSB0aGVyZSBtb3JlIGNsb3NlbHkuIE9yLCBhIHF1aWNrIGdyZXAgZm9yIGBlYWxnX2xpc3RgIG1pZ2h0IGdpdmUgbWUgc29tZSB1c2VmdWwgY2x1ZXMgYW5kIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBJIGNhbiB1bmNvdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlYWxnX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9hbGdvLmM9MTc1PXN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgYWFsZ19saXN0W10gPSB7XG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmMtMzQ2LVxubmV0L3hmcm0veGZybV9hbGdvLmM6MzQ3OnN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgZWFsZ19saXN0W10gPSB7XG5uZXQveGZybS94ZnJtX2FsZ28uYy0zNDgte1xuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTY0NT1zdGF0aWMgaW5saW5lIGludCBlYWxnX2VudHJpZXModm9pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY0Ni17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NDc6XHRyZXR1cm4gQVJSQVlfU0laRShlYWxnX2xpc3QpO1xubmV0L3hmcm0veGZybV9hbGdvLmMtNjQ4LX1cbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz02Njc9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fbGlzdCB4ZnJtX2FhbGdfbGlzdCA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NzItXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NzM6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2FsZ29fbGlzdCB4ZnJtX2VhbGdfbGlzdCA9IHtcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3NC1cdC5maW5kID0gY3J5cHRvX2hhc19za2NpcGhlcixcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY3NTpcdC5hbGdzID0gZWFsZ19saXN0LFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njc2Olx0LmVudHJpZXMgPSBBUlJBWV9TSVpFKGVhbGdfbGlzdCksXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NzctfTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MjY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyNy17XG5uZXQveGZybS94ZnJtX2FsZ28uYzo3Mjg6XHRyZXR1cm4geGZybV9maW5kX2FsZ28oXHUwMDI2eGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI5LVx0XHRcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTcte1xubmV0L3hmcm0veGZybV9hbGdvLmM6NzU4Olx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU5LVx0XHRcdCAgICAgIHByb2JlKTtcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz04MDY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWR4KHVuc2lnbmVkIGludCBpZHgpXG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmMtODEwLVxubmV0L3hmcm0veGZybV9hbGdvLmM6ODExOlx0cmV0dXJuIFx1MDAyNmVhbGdfbGlzdFtpZHhdO1xubmV0L3hmcm0veGZybV9hbGdvLmMtODEyLX1cbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYz04MjA9dm9pZCB4ZnJtX3Byb2JlX2FsZ3Modm9pZClcbi0tXG5uZXQveGZybS94ZnJtX2FsZ28uYy04MzItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlYWxnX2VudHJpZXMoKTsgaSYjNDM7JiM0MzspIHtcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzMzpcdFx0c3RhdHVzID0gY3J5cHRvX2hhc19za2NpcGhlcihlYWxnX2xpc3RbaV0ubmFtZSwgMCwgMCk7XG5uZXQveGZybS94ZnJtX2FsZ28uYzo4MzQ6XHRcdGlmIChlYWxnX2xpc3RbaV0uYXZhaWxhYmxlICE9IHN0YXR1cylcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzNTpcdFx0XHRlYWxnX2xpc3RbaV0uYXZhaWxhYmxlID0gc3RhdHVzO1xubmV0L3hmcm0veGZybV9hbGdvLmMtODM2LVx0fVxuLS1cbm5ldC94ZnJtL3hmcm1fYWxnby5jPTg1Nz1pbnQgeGZybV9jb3VudF9wZmtleV9lbmNfc3VwcG9ydGVkKHZvaWQpXG4tLVxubmV0L3hmcm0veGZybV9hbGdvLmMtODYxLVx0Zm9yIChpID0gMCwgbiA9IDA7IGkgXHUwMDNjIGVhbGdfZW50cmllcygpOyBpJiM0MzsmIzQzOylcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjg2MjpcdFx0aWYgKGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgXHUwMDI2XHUwMDI2IGVhbGdfbGlzdFtpXS5wZmtleV9zdXBwb3J0ZWQpXG5uZXQveGZybS94ZnJtX2FsZ28uYy04NjMtXHRcdFx0biYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcmlhIEVuY3J5cHRpb24gSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCBhcmUgbGlzdGVkIGFzIHN0YXRpYyBlbnRyaWVzIHdpdGhpbiBgZWFsZ19saXN0YC4gVGhpcyBpcyBhIHN0YXRpYyBhcnJheSwgcmVzaWRpbmcgaW4gc3RhdGljIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhlIEMgc3RhbmRhcmQgbWFuZGF0ZXMgdGhhdCB1bmluaXRpYWxpemVkIGZpZWxkcyB3aWxsIGJlIHplcm9lZCBieSB0aGUgY29tcGlsZXIuIFRoZXNlIGVudHJpZXMgYXJlIHJlZ2lzdGVyaW5nIHN0YW5kYXJkIHNrY2lwaGVyIGVuY3J5cHRpb24gYWxnb3JpdGhtcyBmb3IgWEZSTS9JUHNlYywgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuCgpUaGUgZmFjdCB0aGF0IGBwZmtleV9zdXBwb3J0ZWQgPSAwYCBpcyBjcnVjaWFsLiBUaGlzIG1lYW5zIHRoZXNlIGFsZ29yaXRobXMgYXJlbiYjMzk7dCBleHBvc2VkIHRocm91Z2ggUEZfS0VZIGRpcmVjdGx5OyBpbnN0ZWFkLCB0aGV5IGFyZSBvbmx5IGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgWEZSTV9NU0dfKiBjYWxscywgYmFzZWQgb24gbmFtZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBhbSBJIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBhcmlhIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMsIG9yIGlzIHRoaXMganVzdCBzdHJhaWdodGZvcndhcmQgY29uZmlndXJhdGlvbiBhbmQgdGFibGUgcG9wdWxhdGlvbj8KCkhvbGQgb24uLi4gSSBiZWxpZXZlIEkgaGF2ZSBhbiBhbnN3ZXIuIFRoZSAmIzM0O2FyaWEmIzM0OyBjcnlwdG8gbW9kdWxlIGFscmVhZHkgc2VlbXMgdG8gZXhpc3QsIHNwZWNpZmljYWxseSBpbiBgY3J5cHRvL2FyaWEqLmNgIG9yIHBvc3NpYmx5IHRoZSBnZW5lcmljIHZlcnNpb24sIGBjcnlwdG8vYXJpYV9nZW5lcmljLmNgLiBOb3cgSSBuZWVkIHRvIGRpdmUgaW50byB0aG9zZSBmaWxlcyB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGlzc3VlcyBoaWRpbmcgdGhlcmUsIGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb250ZW50cyBvZiB0aGUgYGNyeXB0by9hcmlhKmAgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyaWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtjcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2NyeXB0by9LY29uZmlnPTM4OD1jb25maWcgQ1JZUFRPX0FOVUJJU1xuLS1cbmNyeXB0by9LY29uZmlnLTM5NC1cbmNyeXB0by9LY29uZmlnOjM5NTpcdCAgQW51YmlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb21cbmNyeXB0by9LY29uZmlnLTM5Ni1cdCAgMTI4IGJpdHMgdG8gMzIwIGJpdHMgaW4gbGVuZ3RoLiAgSXQgd2FzIGV2YWx1YXRlZCBhcyBhIGVudHJhbnRcbi0tXG5jcnlwdG8vS2NvbmZpZz00MTc9Y29uZmlnIENSWVBUT19CTE9XRklTSFxuLS1cbmNyeXB0by9LY29uZmlnLTQyMy1cbmNyeXB0by9LY29uZmlnOjQyNDpcdCAgVGhpcyBpcyBhIHZhcmlhYmxlIGtleSBsZW5ndGggY2lwaGVyIHdoaWNoIGNhbiB1c2Uga2V5cyBmcm9tIDMyXG5jcnlwdG8vS2NvbmZpZy00MjUtXHQgIGJpdHMgdG8gNDQ4IGJpdHMgaW4gbGVuZ3RoLiAgSXQmIzM5O3MgZmFzdCwgc2ltcGxlIGFuZCBzcGVjaWZpY2FsbHlcbi0tXG5jcnlwdG8vS2NvbmZpZz02Njc9Y29uZmlnIENSWVBUT19DVFNcbi0tXG5jcnlwdG8vS2NvbmZpZy02NzEtXHRoZWxwXG5jcnlwdG8vS2NvbmZpZzo2NzI6XHQgIENCQy1DUzMgdmFyaWFudCBvZiBDVFMgKENpcGhlciBUZXh0IFN0ZWFsaW5nKSAoTklTVFxuY3J5cHRvL0tjb25maWctNjczLVx0ICBBZGRlbmR1bSB0byBTUDgwMC0zOEEgKE9jdG9iZXIgMjAxMCkpXG4tLVxuY3J5cHRvL0tjb25maWc9NzE3PWNvbmZpZyBDUllQVE9fWENUUlxuLS1cbmNyeXB0by9LY29uZmlnLTcyMy1cbmNyeXB0by9LY29uZmlnOjcyNDpcdCAgVGhpcyBibG9ja2NpcGhlciBtb2RlIGlzIGEgdmFyaWFudCBvZiBDVFIgbW9kZSB1c2luZyBYT1JzIGFuZCBsaXR0bGUtZW5kaWFuXG5jcnlwdG8vS2NvbmZpZy03MjUtXHQgIGFkZGl0aW9uIHJhdGhlciB0aGFuIGJpZy1lbmRpYW4gYXJpdGhtZXRpYy5cbi0tXG5jcnlwdG8vS2NvbmZpZz0xMTM4PWNob2ljZVxuLS1cbmNyeXB0by9LY29uZmlnLTExNDUtXHQgIHRvIHRoYXQgY2FjaGUgaXMgbWVhc3VyZWQuIFRoZSBjbG9zZXIgdGhlIGNhY2hlIGlzIHRvIHRoZSBDUFVcbmNyeXB0by9LY29uZmlnOjExNDY6XHQgIHRoZSBsZXNzIHZhcmlhdGlvbnMgYXJlIG1lYXN1cmVkIGFuZCB0aHVzIHRoZSBsZXNzIGVudHJvcHkgaXNcbmNyeXB0by9LY29uZmlnLTExNDctXHQgIG9idGFpbmVkLiBUaHVzLCBpZiB0aGUgbWVtb3J5IHNpemUgZml0cyBpbnRvIHRoZSBMMSBjYWNoZSwgdGhlXG4tLVxuY3J5cHRvL01ha2VmaWxlPTE0Mz1vYmotJChDT05GSUdfQ1JZUFRPX1NFRUQpICYjNDM7PSBzZWVkLm9cbmNyeXB0by9NYWtlZmlsZToxNDQ6b2JqLSQoQ09ORklHX0NSWVBUT19BUklBKSAmIzQzOz0gYXJpYV9nZW5lcmljLm9cbmNyeXB0by9NYWtlZmlsZS0xNDUtb2JqLSQoQ09ORklHX0NSWVBUT19DSEFDSEEyMCkgJiM0Mzs9IGNoYWNoYS5vXG4tLVxuY3J5cHRvL2FkaWFudHVtLmMtNDYtLypcbmNyeXB0by9hZGlhbnR1bS5jOjQ3OiAqIFRoZSBzcGVjaWZpY2F0aW9uIGFsbG93cyB2YXJpYWJsZS1sZW5ndGggdHdlYWtzLCBidXQgTGludXgmIzM5O3MgY3J5cHRvIEFQSVxuY3J5cHRvL2FkaWFudHVtLmMtNDgtICogY3VycmVudGx5IG9ubHkgYWxsb3dzIGFsZ29yaXRobXMgdG8gc3VwcG9ydCBhIHNpbmdsZSBsZW5ndGguICBUaGUgXCYjMzQ7bmF0dXJhbFwmIzM0O1xuLS1cbmNyeXB0by9hZXMuYz04OTk9c3RhdGljIGludCBjcnlwdG9fYWVzX2NjbV9pbml0KHN0cnVjdCBhZXNfY2NtX2N0eCAqY3R4LFxuLS1cbmNyeXB0by9hZXMuYy05MDctXHQvKlxuY3J5cHRvL2Flcy5jOjkwODpcdCAqIENDTSBhY2NlcHRzIGEgdmFyaWFibGUtbGVuZ3RoIG5vbmNlIGJldHdlZW4gNyBhbmQgMTMgYnl0ZXNcbmNyeXB0by9hZXMuYy05MDktXHQgKiBpbmNsdXNpdmVseSwgd2hpbGUgY3J5cHRvX2FlYWQgYXNzdW1lcyBhIGZpeGVkLWxlbmd0aCBJVi4gIFRoaXMgaXNcbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTYtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTc6I2luY2x1ZGUgXHUwMDNjY3J5cHRvL2FyaWEuaFx1MDAzZVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jPTIwPXN0YXRpYyBjb25zdCB1MzIga2V5X3JjWzIwXSA9IHtcbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjctXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjg6c3RhdGljIHZvaWQgYXJpYV9zZXRfZW5jcnlwdF9rZXkoc3RydWN0IGFyaWFfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjktXHRcdFx0XHQgdW5zaWduZWQgaW50IGtleV9sZW4pXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTQ3LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjQ4Olx0YXJpYV9zdWJzdF9kaWZmX29kZChcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy00OS1cbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtODEtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6ODI6XHRhcmlhX3N1YnN0X2RpZmZfZXZlbihcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy04My1cbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtOTgtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6OTk6XHRhcmlhX3N1YnN0X2RpZmZfb2RkKFx1MDAyNnJlZzAsIFx1MDAyNnJlZzEsIFx1MDAyNnJlZzIsIFx1MDAyNnJlZzMpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEwMC1cbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTA1LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEwNjpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHcwLCB3MSwgMTkpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEwNy1cdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMDg6XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MSwgdzIsIDE5KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMDktXHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTEwOlx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzIsIHczLCAxOSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTExLVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjExMjpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHczLCB3MCwgMTkpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTExMy1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMTQtXHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTE1Olx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzAsIHcxLCAzMSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTE2LVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjExNzpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHcxLCB3MiwgMzEpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTExOC1cdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMTk6XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MiwgdzMsIDMxKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjAtXHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTIxOlx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzMsIHcwLCAzMSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTIyLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEyMy1cdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMjQ6XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDY3KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjUtXHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTI2Olx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCA2Nyk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTI3LVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEyODpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgNjcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEyOS1cdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMzA6XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MywgdzAsIDY3KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMzEtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTMyLVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEzMzpcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHcwLCB3MSwgOTcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEzNC1cdGlmIChrZXlfbGVuIFx1MDAzZSAxNikge1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEzNS1cdFx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEzNjpcdFx0YXJpYV9nc3JrKGN0eC1cdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCA5Nyk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTM3LVx0XHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTM4Olx0XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MiwgdzMsIDk3KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMzktXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0MS1cdFx0XHRya2lkeCYjNDM7JiM0Mzs7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTQyOlx0XHRcdGFyaWFfZ3NyayhjdHgtXHUwMDNlZW5jX2tleVtya2lkeF0sIHczLCB3MCwgOTcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0My1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNDQtXHRcdFx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE0NTpcdFx0XHRhcmlhX2dzcmsoY3R4LVx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDEwOSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTQ2LVx0XHR9XG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0OS1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNTA6c3RhdGljIHZvaWQgYXJpYV9zZXRfZGVjcnlwdF9rZXkoc3RydWN0IGFyaWFfY3R4ICpjdHgpXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTUxLXtcbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTU5LVx0Zm9yIChpID0gMTsgaSBcdTAwM2MgY3R4LVx1MDAzZXJvdW5kczsgaSYjNDM7JiM0MzspIHtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjA6XHRcdGN0eC1cdTAwM2VkZWNfa2V5W2ldWzBdID0gYXJpYV9tKGN0eC1cdTAwM2VlbmNfa2V5W2N0eC1cdTAwM2Vyb3VuZHMgLSBpXVswXSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTYxOlx0XHRjdHgtXHUwMDNlZGVjX2tleVtpXVsxXSA9IGFyaWFfbShjdHgtXHUwMDNlZW5jX2tleVtjdHgtXHUwMDNlcm91bmRzIC0gaV1bMV0pO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE2MjpcdFx0Y3R4LVx1MDAzZWRlY19rZXlbaV1bMl0gPSBhcmlhX20oY3R4LVx1MDAzZWVuY19rZXlbY3R4LVx1MDAzZXJvdW5kcyAtIGldWzJdKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjM6XHRcdGN0eC1cdTAwM2VkZWNfa2V5W2ldWzNdID0gYXJpYV9tKGN0eC1cdTAwM2VlbmNfa2V5W2N0eC1cdTAwM2Vyb3VuZHMgLSBpXVszXSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTY0LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE2NTpcdFx0YXJpYV9kaWZmX3dvcmQoXHUwMDI2Y3R4LVx1MDAzZWRlY19rZXlbaV1bMF0sIFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzFdLFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE2Ni1cdFx0XHQgICAgICAgXHUwMDI2Y3R4LVx1MDAzZWRlY19rZXlbaV1bMl0sIFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzNdKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjc6XHRcdGFyaWFfZGlmZl9ieXRlKFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzFdLFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE2OC1cdFx0XHQgICAgICAgXHUwMDI2Y3R4LVx1MDAzZWRlY19rZXlbaV1bMl0sIFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzNdKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjk6XHRcdGFyaWFfZGlmZl93b3JkKFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzBdLCBcdTAwMjZjdHgtXHUwMDNlZGVjX2tleVtpXVsxXSxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNzAtXHRcdFx0ICAgICAgIFx1MDAyNmN0eC1cdTAwM2VkZWNfa2V5W2ldWzJdLCBcdTAwMjZjdHgtXHUwMDNlZGVjX2tleVtpXVszXSk7XG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE3My1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNzQ6aW50IGFyaWFfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LCB1bnNpZ25lZCBpbnQga2V5X2xlbilcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNzUte1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE3NjpcdHN0cnVjdCBhcmlhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNzctXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE4Ny1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxODg6XHRhcmlhX3NldF9lbmNyeXB0X2tleShjdHgsIGluX2tleSwga2V5X2xlbik7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTg5Olx0YXJpYV9zZXRfZGVjcnlwdF9rZXkoY3R4KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xOTAtXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE5Mi19XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTkzOkVYUE9SVF9TWU1CT0xfR1BMKGFyaWFfc2V0X2tleSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTk0LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE5NTpzdGF0aWMgdm9pZCBfX2FyaWFfY3J5cHQoc3RydWN0IGFyaWFfY3R4ICpjdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbixcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xOTYtXHRcdFx0IHUzMiBrZXlbXVtBUklBX1JEX0tFWV9XT1JEU10pXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIwNy1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMDg6XHRhcmlhX2FkZF9yb3VuZF9rZXkoa2V5W3JraWR4XSwgXHUwMDI2cmVnMCwgXHUwMDI2cmVnMSwgXHUwMDI2cmVnMiwgXHUwMDI2cmVnMyk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjA5LVx0cmtpZHgmIzQzOyYjNDM7O1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIxMC1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTE6XHRhcmlhX3N1YnN0X2RpZmZfb2RkKFx1MDAyNnJlZzAsIFx1MDAyNnJlZzEsIFx1MDAyNnJlZzIsIFx1MDAyNnJlZzMpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjIxMjpcdGFyaWFfYWRkX3JvdW5kX2tleShrZXlbcmtpZHhdLCBcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yMTMtXHRya2lkeCYjNDM7JiM0Mzs7XG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIxNS1cdHdoaWxlICgocm91bmRzIC09IDIpIFx1MDAzZSAwKSB7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjE2Olx0XHRhcmlhX3N1YnN0X2RpZmZfZXZlbihcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTc6XHRcdGFyaWFfYWRkX3JvdW5kX2tleShrZXlbcmtpZHhdLCBcdTAwMjZyZWcwLCBcdTAwMjZyZWcxLCBcdTAwMjZyZWcyLCBcdTAwMjZyZWczKTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yMTgtXHRcdHJraWR4JiM0MzsmIzQzOztcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yMTktXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjIwOlx0XHRhcmlhX3N1YnN0X2RpZmZfb2RkKFx1MDAyNnJlZzAsIFx1MDAyNnJlZzEsIFx1MDAyNnJlZzIsIFx1MDAyNnJlZzMpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjIyMTpcdFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFx1MDAyNnJlZzAsIFx1MDAyNnJlZzEsIFx1MDAyNnJlZzIsIFx1MDAyNnJlZzMpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIyMi1cdFx0cmtpZHgmIzQzOyYjNDM7O1xuLS1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNDctXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjQ4OnZvaWQgYXJpYV9lbmNyeXB0KHZvaWQgKl9jdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNDkte1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI1MDpcdHN0cnVjdCBhcmlhX2N0eCAqY3R4ID0gKHN0cnVjdCBhcmlhX2N0eCAqKV9jdHg7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjUxLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI1MjpcdF9fYXJpYV9jcnlwdChjdHgsIG91dCwgaW4sIGN0eC1cdTAwM2VlbmNfa2V5KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNTMtfVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI1NDpFWFBPUlRfU1lNQk9MX0dQTChhcmlhX2VuY3J5cHQpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI1NS1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNTY6dm9pZCBhcmlhX2RlY3J5cHQodm9pZCAqX2N0eCwgdTggKm91dCwgY29uc3QgdTggKmluKVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI1Ny17XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjU4Olx0c3RydWN0IGFyaWFfY3R4ICpjdHggPSAoc3RydWN0IGFyaWFfY3R4ICopX2N0eDtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNTktXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjYwOlx0X19hcmlhX2NyeXB0KGN0eCwgb3V0LCBpbiwgY3R4LVx1MDAzZWRlY19rZXkpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2MS19XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjYyOkVYUE9SVF9TWU1CT0xfR1BMKGFyaWFfZGVjcnlwdCk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjYzLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2NDpzdGF0aWMgdm9pZCBfX2FyaWFfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjY1LXtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNjY6XHRzdHJ1Y3QgYXJpYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjY3LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2ODpcdF9fYXJpYV9jcnlwdChjdHgsIG91dCwgaW4sIGN0eC1cdTAwM2VlbmNfa2V5KTtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNjktfVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI3MC1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzE6c3RhdGljIHZvaWQgX19hcmlhX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI3Mi17XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjczOlx0c3RydWN0IGFyaWFfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI3NC1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzU6XHRfX2FyaWFfY3J5cHQoY3R4LCBvdXQsIGluLCBjdHgtXHUwMDNlZGVjX2tleSk7XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjc2LX1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNzctXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjc4OnN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhcmlhX2FsZyA9IHtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzk6XHQuY3JhX25hbWVcdFx0PVx0XCYjMzQ7YXJpYVwmIzM0OyxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyODA6XHQuY3JhX2RyaXZlcl9uYW1lXHQ9XHRcJiMzNDthcmlhLWdlbmVyaWNcJiMzNDssXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjgxLVx0LmNyYV9wcmlvcml0eVx0XHQ9XHQxMDAsXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI4My1cdC5jcmFfYmxvY2tzaXplXHRcdD1cdEFSSUFfQkxPQ0tfU0laRSxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyODQ6XHQuY3JhX2N0eHNpemVcdFx0PVx0c2l6ZW9mKHN0cnVjdCBhcmlhX2N0eCksXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjg1LVx0LmNyYV9tb2R1bGVcdFx0PVx0VEhJU19NT0RVTEUsXG4tLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI4OS1cdFx0XHQuY2lhX21heF9rZXlzaXplXHQ9XHRBUklBX01BWF9LRVlfU0laRSxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyOTA6XHRcdFx0LmNpYV9zZXRrZXlcdFx0PVx0YXJpYV9zZXRfa2V5LFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5MTpcdFx0XHQuY2lhX2VuY3J5cHRcdFx0PVx0X19hcmlhX2VuY3J5cHQsXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjkyOlx0XHRcdC5jaWFfZGVjcnlwdFx0XHQ9XHRfX2FyaWFfZGVjcnlwdFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI5My1cdFx0fVxuLS1cbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yOTYtXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjk3OnN0YXRpYyBpbnQgX19pbml0IGFyaWFfaW5pdCh2b2lkKVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI5OC17XG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjk5Olx0cmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoXHUwMDI2YXJpYV9hbGcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwMC19XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzAxLVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMwMjpzdGF0aWMgdm9pZCBfX2V4aXQgYXJpYV9maW5pKHZvaWQpXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzAzLXtcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzozMDQ6XHRjcnlwdG9fdW5yZWdpc3Rlcl9hbGcoXHUwMDI2YXJpYV9hbGcpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwNS19XG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzA2LVxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMwNzptb2R1bGVfaW5pdChhcmlhX2luaXQpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMwODptb2R1bGVfZXhpdChhcmlhX2ZpbmkpO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwOS1cbi0tXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM9MzEyPU1PRFVMRV9BVVRIT1IoXCYjMzQ7VGFlaGVlIFlvbyBcdTAwM2NhcDQyMDA3M0BnbWFpbC5jb21cdTAwM2VcJiMzNDspO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMxMzpNT0RVTEVfQUxJQVNfQ1JZUFRPKFwmIzM0O2FyaWFcJiMzNDspO1xuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMxNDpNT0RVTEVfQUxJQVNfQ1JZUFRPKFwmIzM0O2FyaWEtZ2VuZXJpY1wmIzM0Oyk7XG4tLVxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzNy5hc24xPTc3PVNpZ25lckluZm8gOjo9IFNFUVVFTkNFIHtcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMS03OC1cdHZlcnNpb25cdFx0XHRJTlRFR0VSICh7IHBrY3M3X25vdGVfc2lnbmVyaW5mb192ZXJzaW9uIH0pLFxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzNy5hc24xOjc5Olx0c2lkXHRcdFx0U2lnbmVySWRlbnRpZmllciwgLS0gQ01TIHZhcmlhbnQsIG5vdCBQS0NTIzdcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMS04MC1cdGRpZ2VzdEFsZ29yaXRobVx0XHREaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyICh7IHBrY3M3X3NpZ19ub3RlX2RpZ2VzdF9hbGdvIH0pLFxuLS1cbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczdfdHJ1c3QuYz0yMj1zdGF0aWMgaW50IHBrY3M3X3ZhbGlkYXRlX3RydXN0X29uZShzdHJ1Y3QgcGtjczdfbWVzc2FnZSAqcGtjczcsXG4tLVxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzN190cnVzdC5jLTU0LVx0XHRcdCAqIGlzIGFwcGFyZW50bHkgdGhlIHNhbWUgYXMgb25lIHdlIGFscmVhZHkgdHJ1c3QuXG5jcnlwdG8vYXN5bW1ldHJpY19rZXlzL3BrY3M3X3RydXN0LmM6NTU6XHRcdFx0ICogVmVyaWZ5IHRoYXQgdGhlIHRydXN0ZWQgdmFyaWFudCBjYW4gYWxzbyB2YWxpZGF0ZVxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzN190cnVzdC5jLTU2LVx0XHRcdCAqIHRoZSBzaWduYXR1cmUgb24gdGhlIGRlc2NlbmRhbnQuXG4tLVxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzOC5hc24xLTctLS1cbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczguYXNuMTo4Oi0tIFRoaXMgaXMgdGhlIHVuZW5jcnlwdGVkIHZhcmlhbnRcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczguYXNuMS05LS0tXG4tLVxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz02NDM9c3RhdGljIHZvaWQgY2FtZWxsaWFfc2V0dXAyNTYoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1MzIgKnN1YmtleSlcbi0tXG5jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jLTY0Ni1cdHUzMiBrcmxsLCBrcmxyLCBrcnJsLCBrcnJyOyAgICAvKiByaWdodCBoYWxmIG9mIGtleSAqL1xuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYzo2NDc6XHR1MzIgaWwsIGlyLCB0MCwgdDEsIHcwLCB3MTsgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqL1xuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYy02NDgtXHR1MzIgc3ViTFszNF07XG4tLVxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz04NDM9c3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZW5jcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgbWF4KVxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYy04NDQte1xuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYzo4NDU6XHR1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqL1xuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYy04NDYtXG4tLVxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz04OTg9c3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZGVjcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgaSlcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtODk5LXtcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmM6OTAwOlx0dTMyIGlsLCBpciwgdDAsIHQxOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi9cbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtOTAxLVxuLS1cbmNyeXB0by9oY3RyMi5jLTI3LS8qXG5jcnlwdG8vaGN0cjIuYzoyODogKiBUaGUgc3BlY2lmaWNhdGlvbiBhbGxvd3MgdmFyaWFibGUtbGVuZ3RoIHR3ZWFrcywgYnV0IExpbnV4JiMzOTtzIGNyeXB0byBBUElcbmNyeXB0by9oY3RyMi5jLTI5LSAqIGN1cnJlbnRseSBvbmx5IGFsbG93cyBhbGdvcml0aG1zIHRvIHN1cHBvcnQgYSBzaW5nbGUgbGVuZ3RoLiAgVGhlIFwmIzM0O25hdHVyYWxcJiMzNDtcbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jPTcwPXZvaWQgamVudF96ZnJlZSh2b2lkICpwdHIpXG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYy03Ni0gKiBPYnRhaW4gYSBoaWdoLXJlc29sdXRpb24gdGltZSBzdGFtcCB2YWx1ZS4gVGhlIHRpbWUgc3RhbXAgaXMgdXNlZCB0byBtZWFzdXJlXG5jcnlwdG8vaml0dGVyZW50cm9weS1rY2FwaS5jOjc3OiAqIHRoZSBleGVjdXRpb24gdGltZSBvZiBhIGdpdmVuIGNvZGUgcGF0aCBhbmQgaXRzIHZhcmlhdGlvbnMuIEhlbmNlLCB0aGUgdGltZVxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYy03OC0gKiBzdGFtcCBtdXN0IGhhdmUgYSBzdWZmaWNpZW50bHkgaGlnaCByZXNvbHV0aW9uLlxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LXRlc3RpbmcuYz0yNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqamVudF9yYXdfZGVidWdmc19yb290ID0gTlVMTDtcbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS10ZXN0aW5nLmMtMzAtLypcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LXRlc3RpbmcuYzozMTogKiBib290IHZhcmlhYmxlOlxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jLTMyLSAqIDAgPT1cdTAwM2UgTm8gYm9vdCB0ZXN0LCBnYXRoZXJpbmcgb2YgcnVudGltZSBkYXRhIGFsbG93ZWRcbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTY0PXN0cnVjdCByYW5kX2RhdGEge1xuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtMTE2LSNkZWZpbmUgSkVOVF9FTk9NT05PVE9OSUNcdDMgLyogVGltZXIgaXMgbm90IG1vbm90b25pYyBpbmNyZWFzaW5nICovXG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjExNzojZGVmaW5lIEpFTlRfRVZBUlZBUlx0XHQ1IC8qIFRpbWVyIGRvZXMgbm90IHByb2R1Y2UgdmFyaWF0aW9ucyBvZlxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzoxMTg6XHRcdFx0XHQgICAqIHZhcmlhdGlvbnMgKDJuZCBkZXJpdmF0aW9uIG9mIHRpbWUgaXNcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtMTE5LVx0XHRcdFx0ICAgKiB6ZXJvKS4gKi9cbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTQyMj1zdGF0aWMgdm9pZCBqZW50X2NvbmRpdGlvbl9kYXRhKHN0cnVjdCByYW5kX2RhdGEgKmVjLCBfX3U2NCB0aW1lLCBpbnQgc3R1Y2spXG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDEtLypcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NDQyOiAqIE1lbW9yeSBBY2Nlc3Mgbm9pc2Ugc291cmNlIC0tIHRoaXMgaXMgYSBub2lzZSBzb3VyY2UgYmFzZWQgb24gdmFyaWF0aW9ucyBpblxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDMtICpcdFx0XHRcdCBtZW1vcnkgYWNjZXNzIHRpbWVzXG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDUtICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBtZW1vcnkgYWNjZXNzZXMgd2hpY2ggd2lsbCBhZGQgdG8gdGhlIHRpbWluZ1xuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo0NDY6ICogdmFyaWF0aW9ucyBkdWUgdG8gYW4gdW5rbm93biBhbW91bnQgb2YgQ1BVIHdhaXQgc3RhdGVzIHRoYXQgbmVlZCB0byBiZVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDctICogYWRkZWQgd2hlbiBhY2Nlc3NpbmcgbWVtb3J5LiBUaGUgbWVtb3J5IHNpemUgc2hvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBMMVxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNDUxLSAqIHNsb3dlciB0aGFuIGFjY2Vzc2luZyBDUFUgcmVnaXN0ZXJzLiBUaGVyZWZvcmUsIEwxIGFjY2Vzc2VzIG9ubHkgYWRkIG1pbmltYWxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NDUyOiAqIHZhcmlhdGlvbnMgYXMgdGhlIENQVSBoYXMgaGFyZGx5IHRvIHdhaXQuIFN0YXJ0aW5nIHdpdGggTDIsIHNpZ25pZmljYW50XG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjQ1MzogKiB2YXJpYXRpb25zIGFyZSBhZGRlZCBiZWNhdXNlIEwyIHR5cGljYWxseSBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIENQVSBhbnkgbW9yZVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NTQtICogYW5kIHRoZXJlZm9yZSBhIHdpZGVyIHJhbmdlIG9mIENQVSB3YWl0IHN0YXRlcyBpcyBuZWNlc3NhcnkgZm9yIGFjY2Vzc2VzLlxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM9NTE5PXN0YXRpYyBpbnQgamVudF9tZWFzdXJlX2ppdHRlcihzdHJ1Y3QgcmFuZF9kYXRhICplYywgX191NjQgKnJldF9jdXJyZW50X2RlbHRhKVxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNTI0LVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo1MjU6XHQvKiBJbnZva2Ugb25lIG5vaXNlIHNvdXJjZSBiZWZvcmUgdGltZSBtZWFzdXJlbWVudCB0byBhZGQgdmFyaWF0aW9ucyAqL1xuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MjYtXHRqZW50X21lbWFjY2VzcyhlYywgMCk7XG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MjktXHQgKiBHZXQgdGltZSBzdGFtcCBhbmQgY2FsY3VsYXRlIHRpbWUgZGVsdGEgdG8gcHJldmlvdXNcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NTMwOlx0ICogaW52b2NhdGlvbiB0byBtZWFzdXJlIHRoZSB0aW1pbmcgdmFyaWF0aW9uc1xuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MzEtXHQgKi9cbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTY1ND1zdHJ1Y3QgcmFuZF9kYXRhICpqZW50X2VudHJvcHlfY29sbGVjdG9yX2FsbG9jKHVuc2lnbmVkIGludCBvc3IsXG4tLVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy02NjQtXHRpZiAoIShmbGFncyBcdTAwMjYgSkVOVF9ESVNBQkxFX01FTU9SWV9BQ0NFU1MpKSB7XG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjY2NTpcdFx0LyogQWxsb2NhdGUgbWVtb3J5IGZvciBhZGRpbmcgdmFyaWF0aW9ucyBiYXNlZCBvbiBtZW1vcnlcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNjY2LVx0XHQgKiBhY2Nlc3Ncbi0tXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTcwND1pbnQgamVudF9lbnRyb3B5X2luaXQodW5zaWduZWQgaW50IG9zciwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNzgzLVx0XHQvKlxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo3ODQ6XHRcdCAqIHVwIHRvIGhlcmUgd2UgZGlkIG5vdCBtb2RpZnkgYW55IHZhcmlhYmxlIHRoYXQgd2lsbCBiZVxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy03ODUtXHRcdCAqIGV2YWx1YXRlZCBsYXRlciwgYnV0IHdlIGFscmVhZHkgcGVyZm9ybWVkIHNvbWUgd29yay4gVGh1cyB3ZVxuLS1cbmNyeXB0by9zZXJwZW50X2dlbmVyaWMuYy0yMjQtICogYm90aCBnY2MgYW5kIGNsYW5nIGhhdmUgbWlzb3B0aW1pemVkIHRoaXMgZnVuY3Rpb24gaW4gdGhlIHBhc3QsXG5jcnlwdG8vc2VycGVudF9nZW5lcmljLmM6MjI1OiAqIHByb2R1Y2luZyBob3JyaWJsZSBvYmplY3QgY29kZSBmcm9tIHNwaWxsaW5nIHRlbXBvcmFyeSB2YXJpYWJsZXNcbmNyeXB0by9zZXJwZW50X2dlbmVyaWMuYy0yMjYtICogb24gdGhlIHN0YWNrLiBGb3JjaW5nIHRoaXMgcGFydCBvdXQgb2YgbGluZSBhdm9pZHMgdGhhdC5cbi0tXG5jcnlwdG8vdGNyeXB0LmM9MTQ1OD1zdGF0aWMgaW50IGRvX3Rlc3QoY29uc3QgY2hhciAqYWxnLCB1MzIgdHlwZSwgdTMyIG1hc2ssIGludCBtLCB1MzIgbnVtX21iKVxuLS1cbmNyeXB0by90Y3J5cHQuYy0xNjg3LVx0Y2FzZSA1ODpcbmNyeXB0by90Y3J5cHQuYzoxNjg4Olx0XHRyZXQgPSBtaW4ocmV0LCB0Y3J5cHRfdGVzdChcJiMzNDtnY20oYXJpYSlcJiMzNDspKTtcbmNyeXB0by90Y3J5cHQuYy0xNjg5LVx0XHRicmVhaztcbi0tXG5jcnlwdG8vdGNyeXB0LmMtMTgyNy1cdGNhc2UgMTkyOlxuY3J5cHRvL3RjcnlwdC5jOjE4Mjg6XHRcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFwmIzM0O2VjYihhcmlhKVwmIzM0OykpO1xuY3J5cHRvL3RjcnlwdC5jOjE4Mjk6XHRcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFwmIzM0O2NiYyhhcmlhKVwmIzM0OykpO1xuY3J5cHRvL3RjcnlwdC5jOjE4MzA6XHRcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFwmIzM0O2N0cihhcmlhKVwmIzM0OykpO1xuY3J5cHRvL3RjcnlwdC5jLTE4MzEtXHRcdGJyZWFrO1xuLS1cbmNyeXB0by90Y3J5cHQuYy0yMTYxLVx0Y2FzZSAyMjc6XG5jcnlwdG8vdGNyeXB0LmM6MjE2MjpcdFx0dGVzdF9jaXBoZXJfc3BlZWQoXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjE2My1cdFx0XHRcdCAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xuY3J5cHRvL3RjcnlwdC5jOjIxNjQ6XHRcdHRlc3RfY2lwaGVyX3NwZWVkKFwmIzM0O2VjYihhcmlhKVwmIzM0OywgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxuY3J5cHRvL3RjcnlwdC5jLTIxNjUtXHRcdFx0XHQgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyMTY2Olx0XHR0ZXN0X2NpcGhlcl9zcGVlZChcJiMzNDtjYmMoYXJpYSlcJiMzNDssIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCxcbmNyeXB0by90Y3J5cHQuYy0yMTY3LVx0XHRcdFx0ICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XG5jcnlwdG8vdGNyeXB0LmM6MjE2ODpcdFx0dGVzdF9jaXBoZXJfc3BlZWQoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7LCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjE2OS1cdFx0XHRcdCAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xuY3J5cHRvL3RjcnlwdC5jOjIxNzA6XHRcdHRlc3RfY2lwaGVyX3NwZWVkKFwmIzM0O2N0cihhcmlhKVwmIzM0OywgRU5DUllQVCwgc2VjLCBOVUxMLCAwLFxuY3J5cHRvL3RjcnlwdC5jLTIxNzEtXHRcdFx0XHQgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyMTcyOlx0XHR0ZXN0X2NpcGhlcl9zcGVlZChcJiMzNDtjdHIoYXJpYSlcJiMzNDssIERFQ1JZUFQsIHNlYywgTlVMTCwgMCxcbmNyeXB0by90Y3J5cHQuYy0yMTczLVx0XHRcdFx0ICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XG4tLVxuY3J5cHRvL3RjcnlwdC5jLTIxNzYtXHRjYXNlIDIyODpcbmNyeXB0by90Y3J5cHQuYzoyMTc3Olx0XHR0ZXN0X2FlYWRfc3BlZWQoXCYjMzQ7Z2NtKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsXG5jcnlwdG8vdGNyeXB0LmMtMjE3OC1cdFx0XHRcdE5VTEwsIDAsIDE2LCA4LCBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XG5jcnlwdG8vdGNyeXB0LmM6MjE3OTpcdFx0dGVzdF9hZWFkX3NwZWVkKFwmIzM0O2djbShhcmlhKVwmIzM0OywgREVDUllQVCwgc2VjLFxuY3J5cHRvL3RjcnlwdC5jLTIxODAtXHRcdFx0XHROVUxMLCAwLCAxNiwgOCwgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xuLS1cbmNyeXB0by90Y3J5cHQuYy0yMTgzLVx0Y2FzZSAyMjk6XG5jcnlwdG8vdGNyeXB0LmM6MjE4NDpcdFx0dGVzdF9tYl9hZWFkX3NwZWVkKFwmIzM0O2djbShhcmlhKVwmIzM0OywgRU5DUllQVCwgc2VjLCBOVUxMLCAwLCAxNiwgOCxcbmNyeXB0by90Y3J5cHQuYy0yMTg1LVx0XHRcdFx0ICAgc3BlZWRfdGVtcGxhdGVfMTYsIG51bV9tYik7XG5jcnlwdG8vdGNyeXB0LmM6MjE4NjpcdFx0dGVzdF9tYl9hZWFkX3NwZWVkKFwmIzM0O2djbShhcmlhKVwmIzM0OywgREVDUllQVCwgc2VjLCBOVUxMLCAwLCAxNiwgOCxcbmNyeXB0by90Y3J5cHQuYy0yMTg3LVx0XHRcdFx0ICAgc3BlZWRfdGVtcGxhdGVfMTYsIG51bV9tYik7XG4tLVxuY3J5cHRvL3RjcnlwdC5jLTI1NjktXHRjYXNlIDUxOTpcbmNyeXB0by90Y3J5cHQuYzoyNTcwOlx0XHR0ZXN0X2FjaXBoZXJfc3BlZWQoXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjU3MS1cdFx0XHRcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyNTcyOlx0XHR0ZXN0X2FjaXBoZXJfc3BlZWQoXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjU3My1cdFx0XHRcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyNTc0Olx0XHR0ZXN0X2FjaXBoZXJfc3BlZWQoXCYjMzQ7Y3RyKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjU3NS1cdFx0XHRcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbmNyeXB0by90Y3J5cHQuYzoyNTc2Olx0XHR0ZXN0X2FjaXBoZXJfc3BlZWQoXCYjMzQ7Y3RyKGFyaWEpXCYjMzQ7LCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjU3Ny1cdFx0XHRcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcbi0tXG5jcnlwdG8vdGNyeXB0LmMtMjc3My1cdGNhc2UgNjEwOlxuY3J5cHRvL3RjcnlwdC5jOjI3NzQ6XHRcdHRlc3RfbWJfc2tjaXBoZXJfc3BlZWQoXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjc3NS1cdFx0XHRcdCAgICAgICBzcGVlZF90ZW1wbGF0ZV8xNl8zMiwgbnVtX21iKTtcbmNyeXB0by90Y3J5cHQuYzoyNzc2Olx0XHR0ZXN0X21iX3NrY2lwaGVyX3NwZWVkKFwmIzM0O2VjYihhcmlhKVwmIzM0OywgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxuY3J5cHRvL3RjcnlwdC5jLTI3NzctXHRcdFx0XHQgICAgICAgc3BlZWRfdGVtcGxhdGVfMTZfMzIsIG51bV9tYik7XG5jcnlwdG8vdGNyeXB0LmM6Mjc3ODpcdFx0dGVzdF9tYl9za2NpcGhlcl9zcGVlZChcJiMzNDtjdHIoYXJpYSlcJiMzNDssIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCxcbmNyeXB0by90Y3J5cHQuYy0yNzc5LVx0XHRcdFx0ICAgICAgIHNwZWVkX3RlbXBsYXRlXzE2XzMyLCBudW1fbWIpO1xuY3J5cHRvL3RjcnlwdC5jOjI3ODA6XHRcdHRlc3RfbWJfc2tjaXBoZXJfc3BlZWQoXCYjMzQ7Y3RyKGFyaWEpXCYjMzQ7LCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXG5jcnlwdG8vdGNyeXB0LmMtMjc4MS1cdFx0XHRcdCAgICAgICBzcGVlZF90ZW1wbGF0ZV8xNl8zMiwgbnVtX21iKTtcbi0tXG5jcnlwdG8vdGVzdG1nci5jPTQwNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjIGFsZ190ZXN0X2Rlc2NzW10gPSB7XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQwLVx0fSwge1xuY3J5cHRvL3Rlc3RtZ3IuYzo0MzQxOlx0XHQuYWxnID0gXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7LFxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQyLVx0XHQudGVzdCA9IGFsZ190ZXN0X3NrY2lwaGVyLFxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQzLVx0XHQuc3VpdGUgPSB7XG5jcnlwdG8vdGVzdG1nci5jOjQzNDQ6XHRcdFx0LmNpcGhlciA9IF9fVkVDUyhhcmlhX2NiY190dl90ZW1wbGF0ZSlcbmNyeXB0by90ZXN0bWdyLmMtNDM0NS1cdFx0fSxcbi0tXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTMtXHR9LCB7XG5jcnlwdG8vdGVzdG1nci5jOjQ1MTQ6XHRcdC5hbGcgPSBcJiMzNDtjdHIoYXJpYSlcJiMzNDssXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTUtXHRcdC50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTYtXHRcdC5zdWl0ZSA9IHtcbmNyeXB0by90ZXN0bWdyLmM6NDUxNzpcdFx0XHQuY2lwaGVyID0gX19WRUNTKGFyaWFfY3RyX3R2X3RlbXBsYXRlKVxuY3J5cHRvL3Rlc3RtZ3IuYy00NTE4LVx0XHR9XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc0LVx0fSwge1xuY3J5cHRvL3Rlc3RtZ3IuYzo0Njc1Olx0XHQuYWxnID0gXCYjMzQ7ZWNiKGFyaWEpXCYjMzQ7LFxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc2LVx0XHQudGVzdCA9IGFsZ190ZXN0X3NrY2lwaGVyLFxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc3LVx0XHQuc3VpdGUgPSB7XG5jcnlwdG8vdGVzdG1nci5jOjQ2Nzg6XHRcdFx0LmNpcGhlciA9IF9fVkVDUyhhcmlhX3R2X3RlbXBsYXRlKVxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc5LVx0XHR9XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuYy00ODk4LVx0fSwge1xuY3J5cHRvL3Rlc3RtZ3IuYzo0ODk5Olx0XHQuYWxnID0gXCYjMzQ7Z2NtKGFyaWEpXCYjMzQ7LFxuY3J5cHRvL3Rlc3RtZ3IuYzo0OTAwOlx0XHQuZ2VuZXJpY19kcml2ZXIgPSBcJiMzNDtnY21fYmFzZShjdHIoYXJpYS1nZW5lcmljKSxnaGFzaC1saWIpXCYjMzQ7LFxuY3J5cHRvL3Rlc3RtZ3IuYy00OTAxLVx0XHQudGVzdCA9IGFsZ190ZXN0X2FlYWQsXG5jcnlwdG8vdGVzdG1nci5jLTQ5MDItXHRcdC5zdWl0ZSA9IHtcbmNyeXB0by90ZXN0bWdyLmM6NDkwMzpcdFx0XHQuYWVhZCA9IF9fVkVDUyhhcmlhX2djbV90dl90ZW1wbGF0ZSlcbmNyeXB0by90ZXN0bWdyLmMtNDkwNC1cdFx0fVxuLS1cbmNyeXB0by90ZXN0bWdyLmg9MjYyODE9c3RhdGljIGNvbnN0IHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBzZWVkX3R2X3RlbXBsYXRlW10gPSB7XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuaC0yNjMyMS0gKi9cbmNyeXB0by90ZXN0bWdyLmg6MjYzMjI6c3RhdGljIGNvbnN0IHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBhcmlhX3R2X3RlbXBsYXRlW10gPSB7XG5jcnlwdG8vdGVzdG1nci5oLTI2MzIzLVx0e1xuLS1cbmNyeXB0by90ZXN0bWdyLmgtMjYzNTUtXG5jcnlwdG8vdGVzdG1nci5oOjI2MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYXJpYV9jYmNfdHZfdGVtcGxhdGVbXSA9IHtcbmNyeXB0by90ZXN0bWdyLmgtMjYzNTctXHR7XG4tLVxuY3J5cHRvL3Rlc3RtZ3IuaC0yNzI1OS1cbmNyeXB0by90ZXN0bWdyLmg6MjcyNjA6c3RhdGljIGNvbnN0IHN0cnVjdCBjaXBoZXJfdGVzdHZlYyBhcmlhX2N0cl90dl90ZW1wbGF0ZVtdID0ge1xuY3J5cHRvL3Rlc3RtZ3IuaC0yNzI2MS1cdHtcbi0tXG5jcnlwdG8vdGVzdG1nci5oLTI4MTYzLVxuY3J5cHRvL3Rlc3RtZ3IuaDoyODE2NDpzdGF0aWMgY29uc3Qgc3RydWN0IGFlYWRfdGVzdHZlYyBhcmlhX2djbV90dl90ZW1wbGF0ZVtdID0ge1xuY3J5cHRvL3Rlc3RtZ3IuaC0yODE2NS1cdHtcbi0tXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYz0xMDk9c3RhdGljIGNvbnN0IHUzMiBtZHNbNF1bMjU2XSA9IHtcbi0tXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYy0zMTMtICogZnJvbSB0aGUgVHdvZmlzaCBwYXBlci4gIEkmIzM5O3ZlIG9ubHkgaW5jbHVkZWQgdGhlIHRhYmxlIGVudHJpZXMgSSBhY3R1YWxseVxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmM6MzE0OiAqIG5lZWQ7IEkgbmV2ZXIgZG8gYSBsb29rdXAgb24gYSB2YXJpYWJsZSBpbnB1dCBvZiB6ZXJvIGFuZCB0aGUgYmlnZ2VzdFxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmM6MzE1OiAqIGV4cG9uZW50cyBJJiMzOTtsbCBldmVyIHNlZSBhcmUgMjU0ICh2YXJpYWJsZSkgYW5kIDIzNyAoY29uc3RhbnQpLCBzbyB0aGV5JiMzOTtsbFxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmMtMzE2LSAqIG5ldmVyIHN1bSB0byBtb3JlIHRoYW4gNDkxLlx0SSYjMzk7bSByZXBlYXRpbmcgcGFydCBvZiB0aGUgZXhwX3RvX3BvbHkgdGFibGVcbi0tXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYy0zMTgtICogU2luY2UgSSBrbm93IG15IGNvbnN0YW50IG9wZXJhbmRzIGFyZSBuZXZlciB6ZXJvLCBJIG9ubHkgaGF2ZSB0byB3b3JyeVxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmM6MzE5OiAqIGFib3V0IHplcm8gdmFsdWVzIGluIHRoZSB2YXJpYWJsZSBvcGVyYW5kLCBhbmQgSSBkbyBpdCB3aXRoIGEgc2ltcGxlXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYy0zMjAtICogY29uZGl0aW9uYWwgYnJhbmNoLlx0SSBrbm93IGNvbmRpdGlvbmFscyBhcmUgZXhwZW5zaXZlLCBidXQgSSBjb3VsZG4mIzM5O3Rcbi0tXG5jcnlwdG8vdHdvZmlzaF9nZW5lcmljLmMtODAtICogYW5kIHNpbXVsdGFuZW91c2x5IHBlcmZvcm0gdGhlIHdoaXRlbmluZyBzdGVwLiAgSU5QQUNLIHBhY2tzIHdvcmRcbmNyeXB0by90d29maXNoX2dlbmVyaWMuYzo4MTogKiBudW1iZXIgbiBpbnRvIHRoZSB2YXJpYWJsZSBuYW1lZCBieSB4LCB1c2luZyB3aGl0ZW5pbmcgc3Via2V5IG51bWJlciBtLlxuY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jOjgyOiAqIE9VVFVOUEFDSyB1bnBhY2tzIHdvcmQgbnVtYmVyIG4gZnJvbSB0aGUgdmFyaWFibGUgbmFtZWQgYnkgeCwgdXNpbmdcbmNyeXB0by90d29maXNoX2dlbmVyaWMuYy04My0gKiB3aGl0ZW5pbmcgc3Via2V5IG51bWJlciBtLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ4NAoJCQkJCQkJb3V0cHV0OiAyNzIKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIGFkZGluZyBzdGF0aWMgYWxnb3JpdGhtIGRlZmluaXRpb25zIOKAkyBzcGVjaWZpY2FsbHkgZm9yIGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCDigJMgdG8gdGhlIGBlYWxnX2xpc3RgIHRhYmxlIHdpdGhpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLCB3cml0dGVuLCBvciBsZWFrZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBoZXJlLgoKRmlyc3QsIEkgZXhhbWluZWQgYHhmcm1fYWxnb19kZXNjYC4gSXQmIzM5O3MgYSBzdGF0aWMgc3RydWN0dXJlLCB3aGljaCBpcyBnb29kLiBCZWNhdXNlIGl0JiMzOTtzIHN0YXRpYywgdGhlIGNvbXBpbGVyIHdpbGwgaGFuZGxlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYW55IHVuc3BlY2lmaWVkIGZpZWxkcy4gVGhhdCYjMzk7cyBhIGh1Z2Ugd2luLCBlbGltaW5hdGluZyBhIGNvbW1vbiBzb3VyY2Ugb2YgYnVncyByaWdodCBvZmYgdGhlIGJhdC4gU28gZmFyLCBzbyBnb29kLgoKTmV4dCwgSSBsb29rZWQgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbnMsIHVzZXJzcGFjZSBjb3BpZXMsIG9yIGFueSBuZXcgdW5pbml0aWFsaXplZCBkYXRhIHBhdGhzIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLiBUaGUgYW5hbHlzaXMgc2hvd3MgdGhhdCB0aGVyZSBhcmVu4oCZdCBhbnkuIFRoaXMgcGF0Y2ggKml0c2VsZiogZG9lc24mIzM5O3QgdG91Y2ggYW55IG9mIHRoZSBleGlzdGluZyBidWZmZXIgaGFuZGxpbmcgb3IgcG9pbnRlciBhcml0aG1ldGljIGluIGB4ZnJtX2FsZ28uY2AuIEl0JiMzOTtzIGp1c3QgcG9wdWxhdGluZyB0aGUgdGFibGUuICBUaGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMuIEZ1cnRoZXJtb3JlLCB0aGUgYWxnb3JpdGhtcyB0aGVtc2VsdmVzIOKAkyBgYXJpYWAsIGFuZCB0aGUgdGVtcGxhdGVzIGxpa2UgYGVjaGFpbml2YCwgYHNlcWl2YCwgYHJmYzM2ODZgLCBgY3RyYCwgYW5kIGBjYmNgIOKAkyBhcmUgYWxsIHByZS1leGlzdGluZyBzdGFuZGFyZCBjcnlwdG8gZHJpdmVycyBhbmQgdGVtcGxhdGVzIHdpdGhpbiB0aGUgY3J5cHRvIHN1YnN5c3RlbS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCB0aGUgb3JpZ2luIG9mIGFueSBzdWNoIHJpc2tzLgoKU2luY2UgZXhpc3RpbmcgWEZSTSBzdGF0ZXMgY29uZmlndXJlZCB3aXRoIHRoZXNlIGFsZ29yaXRobXMgdXNlIGFsbG9jYXRlZCBza2NpcGhlciB0ZW1wbGF0ZXMsIHRoZXJlIGlzIG5vIHJlYWwgY2hhbmdlIHRoYXQgd291bGQgb3BlbiB0aGlzIHVwLgoKQmVjYXVzZSBvZiB0aGlzLCBJIGJlbGlldmUgaXQmIzM5O3MgdmVyeSB1bmxpa2VseSB0aGF0IGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHdpbGwgYXJpc2UgZnJvbSB0aGlzIGFkZGl0aW9uLiBTaW5jZSB0aGVyZSYjMzk7cyBubyBjb2RlIHRoYXQgd291bGQgaW52b2x2ZSBhIGNvcHkgdG8gdXNlciwgdGhlcmUgc2hvdWxkIGJlIG5vIG9wcG9ydHVuaXR5IGZvciBhbiBpbmZvLWxlYWsuCgpOb3csIGNvbmNlcm5pbmcgaW5zdHJ1bWVudGF0aW9uIGFuZCB0ZXN0aW5nLCBJIHRoaW5rIEtBU0FOIGFscmVhZHkgYWRlcXVhdGVseSBoYW5kbGVzIHRoZSBtZW1vcnkgYWNjZXNzIGlzc3VlcywgYnVmZmVyIGJvdW5kcyBlcnJvcnMsIGV0Yy4sIHRoYXQgbWlnaHQgYXJpc2Ugd2hlbiB0aGVzZSBhbGdvcml0aG1zIGFyZSB1c2VkIGluIFhGUk0uIFRoZXJlZm9yZSwgdGhlIGFkZGl0aW9uIG9mIEtNU0FOIGlzbiYjMzk7dCB3YXJyYW50ZWQgaGVyZS4KClN1bW1hcml6aW5nIG15IHJlYXNvbmluZzoKCjEuICAqKldoYXQmIzM5O3MgYmVpbmcgYWRkZWQqKjogV2UmIzM5O3JlIGp1c3QgYWRkaW5nIHRoZSBuZXcgY2lwaGVyIHN1aXRlcyB0byBhIHN0YXRpYyB0YWJsZS4KMi4gICoqU3RhdGljIGluaXRpYWxpemF0aW9uKio6IFRoZSB0YWJsZSBlbnRyaWVzIGFyZSBzdGF0aWMgYHhmcm1fYWxnb19kZXNjYCBzdHJ1Y3RzLCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4KMy4gICoqTm8gcmlzayBpbnRyb2R1Y2VkKio6IE5vIG5ldyBoZWFwIG9yIHN0YWNrLCBzaXplIGNhbGN1bGF0aW9ucywgY29udHJvbCBmbG93IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLgo0LiAgKipLQVNBTiBhZGVxdWFjeSoqOiBLQVNBTiBhbHJlYWR5IGFkZHJlc3NlcyBtZW1vcnkgYm91bmRzIGFuZCB2YWxpZGl0eSBpc3N1ZXMgZHVyaW5nIFhGUk0gYW5kIGNyeXB0byBvcGVyYXRpb25zLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LgoKU28sIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOID0gZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtZXJlbHkgcmVnaXN0ZXJzIHR3byBleGlzdGluZyBjaXBoZXIgc3VpdGVzIChcJiMzNDtjYmMoYXJpYSlcJiMzNDsgYW5kIFwmIzM0O3JmYzM2ODYoY3RyKGFyaWEpKVwmIzM0OykgaW50byB0aGUgc3RhdGljIGBlYWxnX2xpc3RgIHRhYmxlIGluIGBuZXQveGZybS94ZnJtX2FsZ28uY2AgdG8gZW5hYmxlIHRoZWlyIHVzZSBpbiBYRlJNL0lQc2VjLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBcdTAwMjYgSW5mby1sZWFrIEFuYWx5c2lzOlxuLSBUaGUgYWRkZWQgZW50cmllcyBhcmUgc3RhdGljIGBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2NgIGRlZmluaXRpb25zIGluIGAuZGF0YWAgLyBgLnJvZGF0YWAgd2hlcmUgdW5zcGVjaWZpZWQgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci5cbi0gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiwgc3RhY2sgdmFyaWFibGUgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zdXJlLCBvciBuZXRsaW5rIC8gYGNvcHlfdG9fdXNlcmAgZGF0YSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG4tIE5vIGNvbnRyb2wgZmxvdyBvciBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY2hhbmdlZCB0aGF0IGNvdWxkIGNhdXNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBjaXBoZXIgY29udGV4dHMsIHNrY2lwaGVyIGNyeXB0byBvcGVyYXRpb25zLCBvciBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIChvdXQtb2YtYm91bmRzIGFjY2VzcywgYnVmZmVyIG92ZXJydW5zLCB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXG4tIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWVyZWx5IHJlZ2lzdGVycyB0d28gZXhpc3RpbmcgY2lwaGVyIHN1aXRlcyAoXCYjMzQ7Y2JjKGFyaWEpXCYjMzQ7IGFuZCBcJiMzNDtyZmMzNjg2KGN0cihhcmlhKSlcJiMzNDspIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cblxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcbi0gVGhlIGFkZGVkIGVudHJpZXMgYXJlIHN0YXRpYyBgc3RydWN0IHhmcm1fYWxnb19kZXNjYCBkZWZpbml0aW9ucyBpbiBgLmRhdGFgIC8gYC5yb2RhdGFgIHdoZXJlIHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuXG4tIE5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24sIHN0YWNrIHZhcmlhYmxlIGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc3VyZSwgb3IgbmV0bGluayAvIGBjb3B5X3RvX3VzZXJgIGRhdGEgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxuLSBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzg6NTEuNjAzMzYzNDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNTEwMjk5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9BTEdPXCIsXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIkNSWVBUT19BUklBXCIsXG4gICAgXCJDUllQVE9fQ0JDXCIsXG4gICAgXCJDUllQVE9fQ1RSXCIsXG4gICAgXCJJTkVUX0VTUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZWFsZ19nZXRfYnluYW1lXCIsXG4gICAgXCJ4ZnJtX2ZpbmRfYWxnb1wiLFxuICAgIFwieGZybV9wcm9iZV9hbGdzXCIsXG4gICAgXCJhdHRhY2hfY3J5cHRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1lcmVseSByZWdpc3RlcnMgdHdvIGV4aXN0aW5nIGNpcGhlciBzdWl0ZXMgKFxcXCJjYmMoYXJpYSlcXFwiIGFuZCBcXFwicmZjMzY4NihjdHIoYXJpYSkpXFxcIikgaW50byB0aGUgc3RhdGljIGBlYWxnX2xpc3RgIHRhYmxlIGluIGBuZXQveGZybS94ZnJtX2FsZ28uY2AgdG8gZW5hYmxlIHRoZWlyIHVzZSBpbiBYRlJNL0lQc2VjLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFxcdTAwMjYgSW5mby1sZWFrIEFuYWx5c2lzOlxcbi0gVGhlIGFkZGVkIGVudHJpZXMgYXJlIHN0YXRpYyBgc3RydWN0IHhmcm1fYWxnb19kZXNjYCBkZWZpbml0aW9ucyBpbiBgLmRhdGFgIC8gYC5yb2RhdGFgIHdoZXJlIHVuc3BlY2lmaWVkIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuXFxuLSBObyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLCBzdGFjayB2YXJpYWJsZSBoYW5kbGluZywgc3RydWN0dXJlIHBhZGRpbmcgZXhwb3N1cmUsIG9yIG5ldGxpbmsgLyBgY29weV90b191c2VyYCBkYXRhIHRyYW5zZmVycyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC5cXG4tIE5vIGNvbnRyb2wgZmxvdyBvciBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY2hhbmdlZCB0aGF0IGNvdWxkIGNhdXNlIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcblxcbjIuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcmVsYXRlZCB0byBjaXBoZXIgY29udGV4dHMsIHNrY2lwaGVyIGNyeXB0byBvcGVyYXRpb25zLCBvciBYRlJNIHBhY2tldCBwcm9jZXNzaW5nIChvdXQtb2YtYm91bmRzIGFjY2VzcywgYnVmZmVyIG92ZXJydW5zLCB1c2UtYWZ0ZXItZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgc3RhbmRhcmQgS0FTQU4uXFxuLSBUaGVyZSBhcmUgbm8gS01TQU4tc3BlY2lmaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEFSSUEgY2lwaGVyIGFsZ29yaXRobXMgKFxcXCJjYmMoYXJpYSlcXFwiIGFuZCBcXFwicmZjMzY4NihjdHIoYXJpYSkpXFxcIikgdG8gdGhlIFhGUk0gZW5jcnlwdGlvbiBhbGdvcml0aG0gcmVnaXN0cnkgKGVhbGdfbGlzdCkuIFRoaXMgZW5hYmxlcyB1c2VyLXNwYWNlIHZpYSBYRlJNIE5ldGxpbmsgaW50ZXJmYWNlIHRvIGNvbmZpZ3VyZSBJUHNlYyBTQXMgd2l0aCBBUklBIGVuY3J5cHRpb24sIGV4ZXJjaXNpbmcgdGhlIGNyeXB0byBzdWJzeXN0ZW0gYW5kIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM4OjUxLjYwMzM2OTU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA3ODUyNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYTUzZDZlY2RlMjU4Y2FjMDA0NGI1ZTlmMGU5MjZkYzAzMzU5MmU1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMDY6Mzg6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uY1xcbmluZGV4IDcwNDM0NDk1ZjIzZjUuLjE2YzcwZGMxYTQyNjggMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2FsZ28uY1xcbkBAIC01MTIsNiArNTEyLDM0IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgZWFsZ19saXN0W10gPSB7XFxuIFxcdFxcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XFxuIFxcdH1cXG4gfSxcXG4re1xcbitcXHQubmFtZSA9IFxcXCJjYmMoYXJpYSlcXFwiLFxcbitcXHQuY29tcGF0ID0gXFxcImFyaWFcXFwiLFxcbitcXG4rXFx0LnVpbmZvID0ge1xcbitcXHRcXHQuZW5jciA9IHtcXG4rXFx0XFx0XFx0Lmdlbml2ID0gXFxcImVjaGFpbml2XFxcIixcXG4rXFx0XFx0XFx0LmJsb2NrYml0cyA9IDEyOCxcXG4rXFx0XFx0XFx0LmRlZmtleWJpdHMgPSAyNTYsXFxuK1xcdFxcdH1cXG4rXFx0fSxcXG4rXFxuK1xcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxcbit9LFxcbit7XFxuK1xcdC5uYW1lID0gXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIsXFxuK1xcdC5jb21wYXQgPSBcXFwiYXJpYVxcXCIsXFxuK1xcbitcXHQudWluZm8gPSB7XFxuK1xcdFxcdC5lbmNyID0ge1xcbitcXHRcXHRcXHQuZ2VuaXYgPSBcXFwic2VxaXZcXFwiLFxcbitcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbitcXHRcXHRcXHQuZGVma2V5Yml0cyA9IDE2MCxcXG4rXFx0XFx0fVxcbitcXHR9LFxcbitcXG4rXFx0LnBma2V5X3N1cHBvcnRlZCA9IDAsXFxuK30sXFxuIHtcXG4gXFx0Lm5hbWUgPSBcXFwiY2JjKHR3b2Zpc2gpXFxcIixcXG4gXFx0LmNvbXBhdCA9IFxcXCJ0d29maXNoXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzg6NTIuMTk0NzgzODY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MzIxNTYzNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNXCIsXG4gICAgXCJYRlJNX0FMR09cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiQ1JZUFRPX0FSSUFcIixcbiAgICBcIkNSWVBUT19DQkNcIixcbiAgICBcIkNSWVBUT19DVFJcIixcbiAgICBcIklORVRfRVNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9lYWxnX2dldF9ieW5hbWVcIixcbiAgICBcInhmcm1fZmluZF9hbGdvXCIsXG4gICAgXCJ4ZnJtX3Byb2JlX2FsZ3NcIixcbiAgICBcImF0dGFjaF9jcnlwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXFxcImNiYyhhcmlhKVxcXCIgYW5kIFxcXCJyZmMzNjg2KGN0cihhcmlhKSlcXFwiKSB0byB0aGUgWEZSTSBlbmNyeXB0aW9uIGFsZ29yaXRobSByZWdpc3RyeSAoZWFsZ19saXN0KS4gVGhpcyBlbmFibGVzIHVzZXItc3BhY2UgdmlhIFhGUk0gTmV0bGluayBpbnRlcmZhY2UgdG8gY29uZmlndXJlIElQc2VjIFNBcyB3aXRoIEFSSUEgZW5jcnlwdGlvbiwgZXhlcmNpc2luZyB0aGUgY3J5cHRvIHN1YnN5c3RlbSBhbmQgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYTUzZDZlY2RlMjU4Y2FjMDA0NGI1ZTlmMGU5MjZkYzAzMzU5MmU1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNjozODo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fYWxnby5jIGIvbmV0L3hmcm0veGZybV9hbGdvLmNcbmluZGV4IDcwNDM0NDk1ZjIzZjUuLjE2YzcwZGMxYTQyNjggMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2FsZ28uY1xuKysrIGIvbmV0L3hmcm0veGZybV9hbGdvLmNcbkBAIC01MTIsNiArNTEyLDM0IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgZWFsZ19saXN0W10gPSB7XG4gXHRcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XG4gXHR9XG4gfSxcbit7XG4rXHQubmFtZSA9IFwiY2JjKGFyaWEpXCIsXG4rXHQuY29tcGF0ID0gXCJhcmlhXCIsXG4rXG4rXHQudWluZm8gPSB7XG4rXHRcdC5lbmNyID0ge1xuK1x0XHRcdC5nZW5pdiA9IFwiZWNoYWluaXZcIixcbitcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuK1x0XHRcdC5kZWZrZXliaXRzID0gMjU2LFxuK1x0XHR9XG4rXHR9LFxuK1xuK1x0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4rfSxcbit7XG4rXHQubmFtZSA9IFwicmZjMzY4NihjdHIoYXJpYSkpXCIsXG4rXHQuY29tcGF0ID0gXCJhcmlhXCIsXG4rXG4rXHQudWluZm8gPSB7XG4rXHRcdC5lbmNyID0ge1xuK1x0XHRcdC5nZW5pdiA9IFwic2VxaXZcIixcbitcdFx0XHQuYmxvY2tiaXRzID0gMTI4LFxuK1x0XHRcdC5kZWZrZXliaXRzID0gMTYwLFxuK1x0XHR9XG4rXHR9LFxuK1xuK1x0LnBma2V5X3N1cHBvcnRlZCA9IDAsXG4rfSxcbiB7XG4gXHQubmFtZSA9IFwiY2JjKHR3b2Zpc2gpXCIsXG4gXHQuY29tcGF0ID0gXCJ0d29maXNoXCIsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozODo1Mi4xOTQ4MDY4MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUyNjAxNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFsZ29yaXRobSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgYmVpbmcgaW50cm9kdWNlZCB0byB0aGUgY29kZWJhc2UuIFRoZSBwYXRjaCBpcyBhZGRpbmcgXCJjYmMoYXJpYSlcIiBhbmQgXCJyZmMzNjg2KGN0cihhcmlhKSlcIiB0byB0aGUgYGVhbGdfbGlzdGAgaW4gYG5ldC94ZnJtL3hmcm1fYWxnby5jYC4gUmlnaHQgYXdheSwgbXkgYnJhaW4gc3RhcnRzIHRvIGNodXJuLCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhpcyBgZWFsZ19saXN0YCByZXNpZGUgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHV0aWxpemVkIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGl0LiBTbywgSSdtIHRoaW5raW5nIGEgcXVpY2sgc2VhcmNoIGZvciBgZWFsZ19saXN0YCBpcyBkZWZpbml0ZWx5IGluIG9yZGVyLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3IgY29uZmxpY3RzLiBJJ2xsIHByb2JhYmx5IHJlYWNoIGZvciBhIGdyZXBwZXIsIG9yIG1heWJlIGEgcXVpY2sgYHJlYWQtZmlsZWAgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIGRlcGVuZGluZyBvbiB3aGF0IEkgZmVlbCBsaWtlIGF0IHRoZSBtb21lbnQsIHRvIGdldCB0aGF0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNDEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjEyLjcyMDgyMzgyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzQ2NTY0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFsZ19saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2FsZ28uYz0xNzU9c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBhYWxnX2xpc3RbXSA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTM0Ni1cXG5uZXQveGZybS94ZnJtX2FsZ28uYzozNDc6c3RhdGljIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyBlYWxnX2xpc3RbXSA9IHtcXG5uZXQveGZybS94ZnJtX2FsZ28uYy0zNDgte1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NjQ1PXN0YXRpYyBpbmxpbmUgaW50IGVhbGdfZW50cmllcyh2b2lkKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY0Ni17XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NjQ3OlxcdHJldHVybiBBUlJBWV9TSVpFKGVhbGdfbGlzdCk7XFxubmV0L3hmcm0veGZybV9hbGdvLmMtNjQ4LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTY2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fYWFsZ19saXN0ID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNjcyLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY3MzpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0IHhmcm1fZWFsZ19saXN0ID0ge1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3NC1cXHQuZmluZCA9IGNyeXB0b19oYXNfc2tjaXBoZXIsXFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njc1OlxcdC5hbGdzID0gZWFsZ19saXN0LFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjY3NjpcXHQuZW50cmllcyA9IEFSUkFZX1NJWkUoZWFsZ19saXN0KSxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NzctfTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTcyNj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyNy17XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzI4OlxcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcXHUwMDI2eGZybV9lYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyOS1cXHRcXHRcXHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU3LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3NTg6XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfbmFtZV9tYXRjaCwgbmFtZSxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTktXFx0XFx0XFx0ICAgICAgcHJvYmUpO1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9ODA2PXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9lYWxnX2dldF9ieWlkeCh1bnNpZ25lZCBpbnQgaWR4KVxcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtODEwLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgxMTpcXHRyZXR1cm4gXFx1MDAyNmVhbGdfbGlzdFtpZHhdO1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTgxMi19XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz04MjA9dm9pZCB4ZnJtX3Byb2JlX2FsZ3Modm9pZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTgzMi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZWFsZ19lbnRyaWVzKCk7IGkrKykge1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzMzpcXHRcXHRzdGF0dXMgPSBjcnlwdG9faGFzX3NrY2lwaGVyKGVhbGdfbGlzdFtpXS5uYW1lLCAwLCAwKTtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo4MzQ6XFx0XFx0aWYgKGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgIT0gc3RhdHVzKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzNTpcXHRcXHRcXHRlYWxnX2xpc3RbaV0uYXZhaWxhYmxlID0gc3RhdHVzO1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTgzNi1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz04NTc9aW50IHhmcm1fY291bnRfcGZrZXlfZW5jX3N1cHBvcnRlZCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtODYxLVxcdGZvciAoaSA9IDAsIG4gPSAwOyBpIFxcdTAwM2MgZWFsZ19lbnRyaWVzKCk7IGkrKylcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo4NjI6XFx0XFx0aWYgKGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgXFx1MDAyNlxcdTAwMjYgZWFsZ19saXN0W2ldLnBma2V5X3N1cHBvcnRlZClcXG5uZXQveGZybS94ZnJtX2FsZ28uYy04NjMtXFx0XFx0XFx0bisrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOToxMy4wOTU1MDA0ODNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTczMTM2NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiB0aGlua2luZywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBBbGdvcml0aG0gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBYRlJNIGFsZ29yaXRobXMgYXJlIGJlaW5nIGhhbmRsZWQuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byBgbmV0L3hmcm0veGZybV9hbGdvLmNgIOKAkyB0aGF0J3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgY2lwaGVyIHN0dWZmLiBJJ20gZm9jdXNpbmcgb24gbGluZXMgNTAwLTU1MDsgSSBoYXZlIGEgaHVuY2ggdGhhdCB3aXRoaW4gdGhhdCByYW5nZSBJJ2xsIGZpbmQgc29tZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvciBoYW5kbGluZyBsb2dpYyB0aGF0J2xsIGlsbHVtaW5hdGUgaG93IHRoZXNlIGFsZ29yaXRobXMgYXJlIGludGVncmF0ZWQuIEl0J3MgdGltZSB0byBwYXJzZSB0aGUgZGV0YWlscyBvZiB0aGUgY29kZSFcblxuQmV5b25kIHRoZSBjb2RlLCBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSB3YW50IHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2YgWEZSTSBhbmQsIHNwZWNpZmljYWxseSwgdGhlIEFSSUEgY2lwaGVyLiBUaGF0IHdpbGwgbGlrZWx5IHBvaW50IHRvd2FyZHMgYnVpbGQtdGltZSBkZWNpc2lvbnMgdGhhdCBpbXBhY3QgdGhlIGZ1bmN0aW9uYWxpdHkgb3IgZGVwZW5kZW5jaWVzIG9mIFhGUk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOToxNi4wNjg2OTM2NzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9hbGdvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdFxcdFxcdC5nZW5pdiA9IFxcXCJlY2hhaW5pdlxcXCIsXFxuIDUwMTpcXHRcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbiA1MDI6XFx0XFx0XFx0XFx0LmRlZmtleWJpdHMgPSAxMjgsXFxuIDUwMzpcXHRcXHRcXHR9XFxuIDUwNDpcXHRcXHR9LFxcbiA1MDU6XFx0XFxuIDUwNjpcXHRcXHQucGZrZXlfc3VwcG9ydGVkID0gMSxcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LmRlc2MgPSB7XFxuIDUwOTpcXHRcXHRcXHQuc2FkYl9hbGdfaWQgPSBTQURCX1hfRUFMR19DQU1FTExJQUNCQyxcXG4gNTEwOlxcdFxcdFxcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXFxuIDUxMTpcXHRcXHRcXHQuc2FkYl9hbGdfbWluYml0cyA9IDEyOCxcXG4gNTEyOlxcdFxcdFxcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XFxuIDUxMzpcXHRcXHR9XFxuIDUxNDpcXHR9LFxcbiA1MTU6XFx0e1xcbiA1MTY6XFx0XFx0Lm5hbWUgPSBcXFwiY2JjKGFyaWEpXFxcIixcXG4gNTE3OlxcdFxcdC5jb21wYXQgPSBcXFwiYXJpYVxcXCIsXFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdC51aW5mbyA9IHtcXG4gNTIwOlxcdFxcdFxcdC5lbmNyID0ge1xcbiA1MjE6XFx0XFx0XFx0XFx0Lmdlbml2ID0gXFxcImVjaGFpbml2XFxcIixcXG4gNTIyOlxcdFxcdFxcdFxcdC5ibG9ja2JpdHMgPSAxMjgsXFxuIDUyMzpcXHRcXHRcXHRcXHQuZGVma2V5Yml0cyA9IDI1NixcXG4gNTI0OlxcdFxcdFxcdH1cXG4gNTI1OlxcdFxcdH0sXFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxcbiA1Mjg6XFx0fSxcXG4gNTI5OlxcdHtcXG4gNTMwOlxcdFxcdC5uYW1lID0gXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIsXFxuIDUzMTpcXHRcXHQuY29tcGF0ID0gXFxcImFyaWFcXFwiLFxcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHQudWluZm8gPSB7XFxuIDUzNDpcXHRcXHRcXHQuZW5jciA9IHtcXG4gNTM1OlxcdFxcdFxcdFxcdC5nZW5pdiA9IFxcXCJzZXFpdlxcXCIsXFxuIDUzNjpcXHRcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbiA1Mzc6XFx0XFx0XFx0XFx0LmRlZmtleWJpdHMgPSAxNjAsXFxuIDUzODpcXHRcXHRcXHR9XFxuIDUzOTpcXHRcXHR9LFxcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHQucGZrZXlfc3VwcG9ydGVkID0gMCxcXG4gNTQyOlxcdH0sXFxuIDU0MzpcXHR7XFxuIDU0NDpcXHRcXHQubmFtZSA9IFxcXCJjYmModHdvZmlzaClcXFwiLFxcbiA1NDU6XFx0XFx0LmNvbXBhdCA9IFxcXCJ0d29maXNoXFxcIixcXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0LnVpbmZvID0ge1xcbiA1NDg6XFx0XFx0XFx0LmVuY3IgPSB7XFxuIDU0OTpcXHRcXHRcXHRcXHQuZ2VuaXYgPSBcXFwiZWNoYWluaXZcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOToxNi4wNjg4ODQ0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NDg4NzY1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB3aGF0IEknbSBsb29raW5nIGludG8sIGZyb20gYSBrZXJuZWwtbGV2ZWwgWEZSTSBlbmNyeXB0aW9uIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIFhGUk0gRW5jcnlwdGlvbiBBbGdvcml0aG0gVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGB4ZnJtX2VhbGdfZ2V0X2J5bmFtZWAgZnVuY3Rpb24gaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwncyBYRlJNIChJUHNlYykgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxpZmVjeWNsZSBvZiBlbmNyeXB0aW9uIGFsZ29yaXRobXMuIEknbSB0aGlua2luZywgXCJXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgYW5kIHdoYXQgaXMgaXRzIHJvbGU/XCIgSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29ubmVjdGlvbnMsIGFuZCB0aGUgY2FsbCBzaXRlcy5cblxuVGhlIGNyaXRpY2FsIHRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIGhvdyB0aGVzZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgYXJlIGludGVncmF0ZWQsIGF0IGEgbG93IGxldmVsLiBJIHNlZSB0aGF0IFhGUk0gdXNlcyAqeGZybSBzdGF0ZXMqLCBhbmQgSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlbSBpbiBkZXB0aC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGludGVyYWN0aW9uIHdpdGggbmV0bGluayBtZXNzYWdlcywgc3BlY2lmaWNhbGx5IGBYRlJNX01TR19ORVdTQWAsIGFzIHRoaXMgaXMgYSBrZXkgYXJlYSBmb3IgYWRkaW5nIGFuZCBjb25maWd1cmluZyBzZWN1cml0eSBhc3NvY2lhdGlvbnMuIFRoYXQncyBhIHN0cm9uZyBsZWFkIGZvciB3aGVyZSBhbiBlbmNyeXB0aW9uIGFsZ29yaXRobSB3b3VsZCBiZSBzZWxlY3RlZC4gVGhlbiwgSSBuZWVkIHRvIGtub3cgaG93IHRoZSBzdGF0ZSBpcyBjb25zdHJ1Y3RlZC4gVGhlIGB4ZnJtX3N0YXRlX2NvbnN0cnVjdGAgZnVuY3Rpb24gaXMgYW5vdGhlciBwb2ludCBvZiBpbnRlcmVzdCBoZXJlLiBGaW5hbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKSBwcm90b2NvbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobXMgc2VsZWN0ZWQgYXJlIHNwZWNpZmljYWxseSB1c2VkIHdpdGhpbiB0aGUgRVNQIGltcGxlbWVudGF0aW9uLCBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBkYXRhIGdldHMgZW5jcnlwdGVkIGFuZCBkZWNyeXB0ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZyb20gaW5zdGFudGlhdGlvbiB0byB1c2UsIHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjIzLjcxNzc2MzI3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzExNTg3NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9lYWxnX2dldF9ieW5hbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQva2V5L2FmX2tleS5jPTc3Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fcGZrZXlfeGZybV9zdGF0ZTJtc2coY29uc3Qgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQva2V5L2FmX2tleS5jLTg3Ni1cXHRpZiAoeC1cXHUwMDNlZWFsZykge1xcbm5ldC9rZXkvYWZfa2V5LmM6ODc3OlxcdFxcdHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYSA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHgtXFx1MDAzZWVhbGctXFx1MDAzZWFsZ19uYW1lLCAwKTtcXG5uZXQva2V5L2FmX2tleS5jLTg3OC1cXHRcXHRzYS1cXHUwMDNlc2FkYl9zYV9lbmNyeXB0ID0gKGEgXFx1MDAyNlxcdTAwMjYgYS1cXHUwMDNlcGZrZXlfc3VwcG9ydGVkKSA/XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTQ9RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9hYWxnX2dldF9ieW5hbWUpO1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1NS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3NTY6c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc2MC19XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzYxOkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fZWFsZ19nZXRfYnluYW1lKTtcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NjItXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz02MjU9c3RhdGljIGludCBhdHRhY2hfY3J5cHQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBubGF0dHIgKnJ0YSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTYzNS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzo2MzY6XFx0YWxnbyA9IHhmcm1fZWFsZ19nZXRfYnluYW1lKHVhbGctXFx1MDAzZWFsZ19uYW1lLCAxKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MzctXFx0aWYgKCFhbGdvKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjI0LjA4ODkyOTEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA3OTEwMzY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQXJpYSBFbmNyeXB0aW9uIGluIFhGUk0qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBBcmlhIGVuY3J5cHRpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhlIFhGUk0gZnJhbWV3b3JrLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBJIHNlZSBgYXR0YWNoX2NyeXB0YCBpbiB0aGF0IGZpbGUsIGFuZCBpdCdzIGNhbGxpbmcgYHhmcm1fZWFsZ19nZXRfYnluYW1lYC4gTXkgbWVudGFsIHJvYWRtYXAgbm93IGlzIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggd2hlbiBhIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgaXMgY3JlYXRlZCB1c2luZyBlaXRoZXIgYGNiYyhhcmlhKWAgb3IgYHJmYzM2ODYoY3RyKGFyaWEpKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gc2V0cyB0aGlzIHVwLiBTbywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgYXR0YWNoX2NyeXB0YCBiZWhhdmVzIHVuZGVyIHRob3NlIHNjZW5hcmlvcywgYW5kIHRoZW4gSSdsbCB0cmFjZSB0aHJvdWdoIHRvIHNlZSB3aGF0IGhhcHBlbnMgaW4gcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgZXNwX2luaXRfc3RhdGVgLCBhbmQgYW55IG90aGVyIGNydWNpYWwgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHRoZSBsaWZlY3ljbGUgb2YgYW4gQXJpYS1iYXNlZCBTQSB3aXRoaW4gWEZSTS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMwNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjI3LjE2ODAzODE5MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwNjU3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXR0YWNoX2NyeXB0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz01OTc9c3RhdGljIGludCBhdHRhY2hfb25lX2FsZ28oc3RydWN0IHhmcm1fYWxnbyAqKmFsZ3BwLCB1OCAqcHJvcHMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy02MjQtXFxubmV0L3hmcm0veGZybV91c2VyLmM6NjI1OnN0YXRpYyBpbnQgYXR0YWNoX2NyeXB0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmxhdHRyICpydGEsXFxubmV0L3hmcm0veGZybV91c2VyLmMtNjI2LVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTkwNz1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfY29uc3RydWN0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk0Ny1cXHR9XFxubmV0L3hmcm0veGZybV91c2VyLmM6OTQ4OlxcdGlmICgoZXJyID0gYXR0YWNoX2NyeXB0KHgsIGF0dHJzW1hGUk1BX0FMR19DUllQVF0sIGV4dGFjaykpKVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk0OS1cXHRcXHRnb3RvIGVycm9yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOToyNy4yNDkxMTI4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODQzNTkzOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX3VzZXIuY2AgdG8gQW5hbHl6ZSBgYXR0YWNoX2NyeXB0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjcnlwdG8gbW9kdWxlcyBhcmUgYmVpbmcgYXR0YWNoZWQgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yaywgYW5kIGBhdHRhY2hfY3J5cHRgIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2Agc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gR2l2ZW4gdGhlIG5hbWUsIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBsaW5raW5nIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0gdG8gYSBzZWN1cml0eSBwb2xpY3kgb3IgYSB0cmFuc2Zvcm0uIExldCdzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIEknbSByaWdodC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIGNhc2UsIGJ1dCBsZXQncyBjb25maXJtIHRoZSB1c2FnZSBhbmQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb25zIHdpdGgga2VybmVsLXNwYWNlIHRyYW5zZm9ybWF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjI5LjA5MjcwOTYyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA5NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjIwOlxcdFxcdHN0cnNjcHkocC1cXHUwMDNlYWxnX25hbWUsIGFsZ28tXFx1MDAzZW5hbWUpO1xcbiA2MjE6XFx0XFx0KmFsZ3BwID0gcDtcXG4gNjIyOlxcdFxcdHJldHVybiAwO1xcbiA2MjM6XFx0fVxcbiA2MjQ6XFx0XFxuIDYyNTpcXHRzdGF0aWMgaW50IGF0dGFjaF9jcnlwdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5sYXR0ciAqcnRhLFxcbiA2MjY6XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA2Mjc6XFx0e1xcbiA2Mjg6XFx0XFx0c3RydWN0IHhmcm1fYWxnbyAqcCwgKnVhbGc7XFxuIDYyOTpcXHRcXHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmFsZ287XFxuIDYzMDpcXHRcXG4gNjMxOlxcdFxcdGlmICghcnRhKVxcbiA2MzI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdHVhbGcgPSBubGFfZGF0YShydGEpO1xcbiA2MzU6XFx0XFxuIDYzNjpcXHRcXHRhbGdvID0geGZybV9lYWxnX2dldF9ieW5hbWUodWFsZy1cXHUwMDNlYWxnX25hbWUsIDEpO1xcbiA2Mzc6XFx0XFx0aWYgKCFhbGdvKSB7XFxuIDYzODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXF1ZXN0ZWQgQ1JZUFQgYWxnb3JpdGhtIG5vdCBmb3VuZFxcXCIpO1xcbiA2Mzk6XFx0XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDY0MDpcXHRcXHR9XFxuIDY0MTpcXHRcXHR4LVxcdTAwM2Vwcm9wcy5lYWxnbyA9IGFsZ28tXFx1MDAzZWRlc2Muc2FkYl9hbGdfaWQ7XFxuIDY0MjpcXHRcXG4gNjQzOlxcdFxcdHAgPSBrbWVtZHVwKHVhbGcsIHhmcm1fYWxnX2xlbih1YWxnKSwgR0ZQX0tFUk5FTCk7XFxuIDY0NDpcXHRcXHRpZiAoIXApXFxuIDY0NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0c3Ryc2NweShwLVxcdTAwM2VhbGdfbmFtZSwgYWxnby1cXHUwMDNlbmFtZSk7XFxuIDY0ODpcXHRcXHR4LVxcdTAwM2VlYWxnID0gcDtcXG4gNjQ5OlxcdFxcdHgtXFx1MDAzZWdlbml2ID0gYWxnby1cXHUwMDNldWluZm8uZW5jci5nZW5pdjtcXG4gNjUwOlxcdFxcdHJldHVybiAwO1xcbiA2NTE6XFx0fVxcbiA2NTI6XFx0XFxuIDY1MzpcXHRzdGF0aWMgaW50IGF0dGFjaF9hdXRoKHN0cnVjdCB4ZnJtX2FsZ29fYXV0aCAqKmFsZ3BwLCB1OCAqcHJvcHMsXFxuIDY1NDpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5sYXR0ciAqcnRhLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDY1NTpcXHR7XFxuIDY1NjpcXHRcXHRzdHJ1Y3QgeGZybV9hbGdvICp1YWxnO1xcbiA2NTc6XFx0XFx0c3RydWN0IHhmcm1fYWxnb19hdXRoICpwO1xcbiA2NTg6XFx0XFx0c3RydWN0IHhmcm1fYWxnb19kZXNjICphbGdvO1xcbiA2NTk6XFx0XFxuIDY2MDpcXHRcXHRpZiAoIXJ0YSlcXG4gNjYxOlxcdFxcdFxcdHJldHVybiAwO1xcbiA2NjI6XFx0XFxuIDY2MzpcXHRcXHR1YWxnID0gbmxhX2RhdGEocnRhKTtcXG4gNjY0OlxcdFxcbiA2NjU6XFx0XFx0YWxnbyA9IHhmcm1fYWFsZ19nZXRfYnluYW1lKHVhbGctXFx1MDAzZWFsZ19uYW1lLCAxKTtcXG4gNjY2OlxcdFxcdGlmICghYWxnbykge1xcbiA2Njc6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUmVxdWVzdGVkIEFVVEggYWxnb3JpdGhtIG5vdCBmb3VuZFxcXCIpO1xcbiA2Njg6XFx0XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFxuIDY2OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjI5LjA5Mjk4MzgzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzAzNzk5NTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipEZWx2aW5nIGludG8gQVJJQSBDaXBoZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgQVJJQSBjaXBoZXIgaXMgY29uZmlndXJlZCBpbiB0aGlzIGtlcm5lbCBidWlsZC4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIHN0cnVjdHVyZSwgSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIEtjb25maWcgZmlsZXMuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayBmb3IgY29tcGlsZS10aW1lIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzIHRvIFwiQVJJQVwiIHdpdGhpbiB0aGUgYGNyeXB0by9gIGRpcmVjdG9yeSwgbmF0dXJhbGx5LCBidXQgYWxzbywgZ2l2ZW4gaXRzIHVzZSBpbiBuZXR3b3JrIHNlY3VyaXR5LCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGV4cGxvcmUgdGhlIGBuZXQveGZybS9gIGRpcmVjdG9yeS4gVGhlcmUgbWlnaHQgYmUgc29tZSBBUklBLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaGlkaW5nIGluIHRoZXJlLCBlc3BlY2lhbGx5IGlmIGl0J3MgZW1wbG95ZWQgZm9yIElQc2VjIG9yIHNpbWlsYXIgcHJvdG9jb2xzLiBJJ2xsIGRvIGEgcXVpY2sgc2VhcmNoIHdpdGhpbiB0aG9zZSBkaXJlY3RvcmllcyBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsLiBMZXQncyBzZWUgaWYgdGhpcyBjb25maWd1cmF0aW9uIGlzIHN0YXRpY2FsbHkgY29tcGlsZWQsIG1vZHVsYXJpemVkLCBvciBwZXJoYXBzIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGtleSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTozMy43OTY4MDA5NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODI5NDUyNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1JZUFRPX0FSSUFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTUxNj1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnOjUxNzpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZy01MTgtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnPTQ3MT1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo0NzI6Q09ORklHX0NSWVBUT19BUklBPW1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnLTQ3My1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZz00OTQ9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZzo0OTU6Q09ORklHX0NSWVBUT19BUklBPW1cXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWctNDk2LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTQ2Mz1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnOjQ2NDpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZy00NjUtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9NDczPUNPTkZJR19DUllQVE9fQU5VQklTPW1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NDc0OkNPTkZJR19DUllQVE9fQVJJQT1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnLTQ3NS1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc9NDkyPUNPTkZJR19DUllQVE9fQU5VQklTPW1cXG5hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnOjQ5MzpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctNDk0LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTU3OT1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnOjU4MDpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZy01ODEtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz00NjM9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjQ2NDpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnLTQ2NS1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnPTQ2ND1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc6NDY1OkNPTkZJR19DUllQVE9fQVJJQT1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWctNDY2LUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz00ODI9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc6NDgzOkNPTkZJR19DUllQVE9fQVJJQT1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZy00ODQtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz00NjE9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjQ2MjpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnLTQ2My1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZz00NjE9Q09ORklHX0NSWVBUT19BTlVCSVM9bVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzo0NjI6Q09ORklHX0NSWVBUT19BUklBPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWctNDYzLUNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTc3OD1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjc3OTpDT05GSUdfQ1JZUFRPX0FSSUE9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy03ODAtQ09ORklHX0NSWVBUT19CTE9XRklTSD1tXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9NzYyPUNPTkZJR19DUllQVE9fQU5VQklTPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6NzYzOkNPTkZJR19DUllQVE9fQVJJQT1tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTc2NC1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW1cXG4tLVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnPTIzOT1jb25maWcgQ1JZUFRPX1RXT0ZJU0hfQVZYX1g4Nl82NFxcbi0tXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjU1LVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI1Njpjb25maWcgQ1JZUFRPX0FSSUFfQUVTTklfQVZYX1g4Nl82NFxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI1Ny1cXHR0cmlzdGF0ZSBcXFwiQ2lwaGVyczogQVJJQSB3aXRoIG1vZGVzOiBFQ0IsIENUUiAoQUVTLU5JL0FWWC9HRk5JKVxcXCJcXG4tLVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI2MC1cXHRzZWxlY3QgQ1JZUFRPX0FMR0FQSVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI2MTpcXHRzZWxlY3QgQ1JZUFRPX0FSSUFcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yNjItXFx0aGVscFxcbi0tXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjcyLVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI3Mzpjb25maWcgQ1JZUFRPX0FSSUFfQUVTTklfQVZYMl9YODZfNjRcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yNzQtXFx0dHJpc3RhdGUgXFxcIkNpcGhlcnM6IEFSSUEgd2l0aCBtb2RlczogRUNCLCBDVFIgKEFFUy1OSS9BVlgyL0dGTkkpXFxcIlxcbi0tXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjc3LVxcdHNlbGVjdCBDUllQVE9fQUxHQVBJXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWc6Mjc4OlxcdHNlbGVjdCBDUllQVE9fQVJJQVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI3OTpcXHRzZWxlY3QgQ1JZUFRPX0FSSUFfQUVTTklfQVZYX1g4Nl82NFxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI4MC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yOTAtXFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWc6MjkxOmNvbmZpZyBDUllQVE9fQVJJQV9HRk5JX0FWWDUxMl9YODZfNjRcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZy0yOTItXFx0dHJpc3RhdGUgXFxcIkNpcGhlcnM6IEFSSUEgd2l0aCBtb2RlczogRUNCLCBDVFIgKEFWWDUxMi9HRk5JKVxcXCJcXG4tLVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnLTI5NS1cXHRzZWxlY3QgQ1JZUFRPX0FMR0FQSVxcbmFyY2gveDg2L2NyeXB0by9LY29uZmlnOjI5NjpcXHRzZWxlY3QgQ1JZUFRPX0FSSUFcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyOTc6XFx0c2VsZWN0IENSWVBUT19BUklBX0FFU05JX0FWWF9YODZfNjRcXG5hcmNoL3g4Ni9jcnlwdG8vS2NvbmZpZzoyOTg6XFx0c2VsZWN0IENSWVBUT19BUklBX0FFU05JX0FWWDJfWDg2XzY0XFxuYXJjaC94ODYvY3J5cHRvL0tjb25maWctMjk5LVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2NyeXB0by9NYWtlZmlsZT01ND1zbTQtYWVzbmktYXZ4Mi14ODZfNjQteSA6PSBzbTQtYWVzbmktYXZ4Mi1hc21fNjQubyBzbTRfYWVzbmlfYXZ4Ml9nbHVlLm9cXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUtNTUtXFxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19DUllQVE9fQVJJQV9BRVNOSV9BVlhfWDg2XzY0KSArPSBhcmlhLWFlc25pLWF2eC14ODZfNjQub1xcbmFyY2gveDg2L2NyeXB0by9NYWtlZmlsZS01Ny1hcmlhLWFlc25pLWF2eC14ODZfNjQteSA6PSBhcmlhLWFlc25pLWF2eC1hc21fNjQubyBhcmlhX2Flc25pX2F2eF9nbHVlLm9cXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUtNTgtXFxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlOjU5Om9iai0kKENPTkZJR19DUllQVE9fQVJJQV9BRVNOSV9BVlgyX1g4Nl82NCkgKz0gYXJpYS1hZXNuaS1hdngyLXg4Nl82NC5vXFxuYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlLTYwLWFyaWEtYWVzbmktYXZ4Mi14ODZfNjQteSA6PSBhcmlhLWFlc25pLWF2eDItYXNtXzY0Lm8gYXJpYV9hZXNuaV9hdngyX2dsdWUub1xcbmFyY2gveDg2L2NyeXB0by9NYWtlZmlsZS02MS1cXG5hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGU6NjI6b2JqLSQoQ09ORklHX0NSWVBUT19BUklBX0dGTklfQVZYNTEyX1g4Nl82NCkgKz0gYXJpYS1nZm5pLWF2eDUxMi14ODZfNjQub1xcbmFyY2gveDg2L2NyeXB0by9NYWtlZmlsZS02My1hcmlhLWdmbmktYXZ4NTEyLXg4Nl82NC15IDo9IGFyaWEtZ2ZuaS1hdng1MTItYXNtXzY0Lm8gYXJpYV9nZm5pX2F2eDUxMl9nbHVlLm9cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jPTM0PXN0YXRpYyB2b2lkIF9fdXNlZCBjb21tb24odm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jLTEyNC1cXHRPRkZTRVQoVFNTX3NwMiwgdHNzX3N0cnVjdCwgeDg2X3Rzcy5zcDIpO1xcbmFyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jOjEyNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQ1JZUFRPX0FSSUFfQUVTTklfQVZYX1g4Nl82NClcXG5hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHMuYy0xMjYtXFx0LyogT2Zmc2V0IGZvciBmaWVsZHMgaW4gYXJpYV9jdHggKi9cXG4tLVxcbmNyeXB0by9LY29uZmlnPTM4OD1jb25maWcgQ1JZUFRPX0FOVUJJU1xcbi0tXFxuY3J5cHRvL0tjb25maWctNDAxLVxcbmNyeXB0by9LY29uZmlnOjQwMjpjb25maWcgQ1JZUFRPX0FSSUFcXG5jcnlwdG8vS2NvbmZpZy00MDMtXFx0dHJpc3RhdGUgXFxcIkFSSUFcXFwiXFxuLS1cXG5jcnlwdG8vTWFrZWZpbGU9MTQzPW9iai0kKENPTkZJR19DUllQVE9fU0VFRCkgKz0gc2VlZC5vXFxuY3J5cHRvL01ha2VmaWxlOjE0NDpvYmotJChDT05GSUdfQ1JZUFRPX0FSSUEpICs9IGFyaWFfZ2VuZXJpYy5vXFxuY3J5cHRvL01ha2VmaWxlLTE0NS1vYmotJChDT05GSUdfQ1JZUFRPX0NIQUNIQTIwKSArPSBjaGFjaGEub1xcbi0tXFxuaW5jbHVkZS9jcnlwdG8vYXJpYS5oLTE3LVxcbmluY2x1ZGUvY3J5cHRvL2FyaWEuaDoxODojaWZuZGVmIF9DUllQVE9fQVJJQV9IXFxuaW5jbHVkZS9jcnlwdG8vYXJpYS5oOjE5OiNkZWZpbmUgX0NSWVBUT19BUklBX0hcXG5pbmNsdWRlL2NyeXB0by9hcmlhLmgtMjAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29uZmlnPTk9Q09ORklHX0NBTl9WWENBTj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvbmZpZzoxMDpDT05GSUdfQ1JZUFRPX0FSSUE9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb25maWctMTEtQ09ORklHX0NSWVBUT19DSEFDSEEyMFBPTFkxMzA1PW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6MzYuMzc5NzUyNzE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzUxNzYwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOlxuXG4qKkludmVzdGlnYXRpbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgY291cGxlIG9mIGFyZWFzIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGBjcnlwdG8vS2NvbmZpZzo0MDJgIOKAkyB0aGF0J3MgbGlrZWx5IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3Igc2VjdGlvbiB3aXRoaW4gdGhlIGNyeXB0b2dyYXBoaWMgc3Vic3lzdGVtIOKAkyBhbmQgYWxzbyB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUuIEknbSBwcm9iYWJseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGUgYnVpbGQgb3IgaW5jbHVzaW9uIG9mIGNlcnRhaW4gY3J5cHRvZ3JhcGh5IGZlYXR1cmVzIGFuZCBob3cgdGhlIFhGUk0gKElQc2VjIGZyYW1ld29yaykgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIHRoZW0uIElzIHRoZXJlIGEgZGVwZW5kZW5jeSBjaGFpbj8gRG8gc3BlY2lmaWMgY3J5cHRvIGFsZ29yaXRobXMgbmVlZCB0byBiZSBlbmFibGVkIGZvciBjZXJ0YWluIFhGUk0gZmVhdHVyZXMgdG8gZnVuY3Rpb24/IEkgbmVlZCB0byBhbmFseXplIHRob3NlIEtjb25maWcgZW50cmllcywgcG90ZW50aWFsbHkgY2hlY2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBvcHRpb25zLCBhbmQgbWF5YmUgZXZlbiBjcm9zcy1yZWZlcmVuY2luZyB0aGVtLiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgYXJlIGxpbmtlZCBmb3IgY29uZmlndXJhdGlvbiBwdXJwb3Nlcy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHdoZXJlIG15IGFzc3VtcHRpb25zIG1pZ2h0IGJlIG9mZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTozOC41MTQ5MzA5MTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImNyeXB0by9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHQgIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLlxcbiA0MDE6XFx0XFxuIDQwMjpcXHRjb25maWcgQ1JZUFRPX0FSSUFcXG4gNDAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBUklBXFxcIlxcbiA0MDQ6XFx0XFx0c2VsZWN0IENSWVBUT19BTEdBUElcXG4gNDA1OlxcdFxcdGhlbHBcXG4gNDA2OlxcdFxcdCAgQVJJQSBjaXBoZXIgYWxnb3JpdGhtIChSRkM1Nzk0KVxcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHQgIEFSSUEgaXMgYSBzdGFuZGFyZCBlbmNyeXB0aW9uIGFsZ29yaXRobSBvZiB0aGUgUmVwdWJsaWMgb2YgS29yZWEuXFxuIDQwOTpcXHRcXHQgIFRoZSBBUklBIHNwZWNpZmllcyB0aHJlZSBrZXkgc2l6ZXMgYW5kIHJvdW5kcy5cXG4gNDEwOlxcdFxcdCAgMTI4LWJpdDogMTIgcm91bmRzLlxcbiA0MTE6XFx0XFx0ICAxOTItYml0OiAxNCByb3VuZHMuXFxuIDQxMjpcXHRcXHQgIDI1Ni1iaXQ6IDE2IHJvdW5kcy5cXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0ICBTZWU6XFxuIDQxNTpcXHRcXHQgIGh0dHBzOi8vc2VlZC5raXNhLm9yLmtyL2tpc2EvYWxnb3JpdGhtL0Vnb3ZBcmlhSW5mby5kb1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRjb25maWcgQ1JZUFRPX0JMT1dGSVNIXFxuIDQxODpcXHRcXHR0cmlzdGF0ZSBcXFwiQmxvd2Zpc2hcXFwiXFxuIDQxOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FMR0FQSVxcbiA0MjA6XFx0XFx0c2VsZWN0IENSWVBUT19CTE9XRklTSF9DT01NT05cXG4gNDIxOlxcdFxcdGhlbHBcXG4gNDIyOlxcdFxcdCAgQmxvd2Zpc2ggY2lwaGVyIGFsZ29yaXRobSwgYnkgQnJ1Y2UgU2NobmVpZXJcXG4gNDIzOlxcdFxcbiA0MjQ6XFx0XFx0ICBUaGlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb20gMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6MzguNTE1MDMzNDg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzA4MjQ4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlhGUk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gd2hhdGV2ZXIgcHJvYmxlbSBJJ20gZmFjaW5nLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIFhGUk0gY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb21wb25lbnRzIGFyZSBiZWluZyBhc3NlbWJsZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUgaXMgZ29pbmcgdG8gYmUgbXkgcHJpbWFyeSByZXNvdXJjZSBmb3IgdGhhdC4gSXQgaG9sZHMgdGhlIGtleSB0byB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFsbCB0aGUgXCJpZiB0aGlzLCB0aGVuIHRoYXRcIiBsb2dpYyB0aGF0IGRpY3RhdGVzIHdoaWNoIFhGUk0gZmVhdHVyZXMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlsbCBnaXZlIG1lIHRoZSBrbm9icyBhbmQgZGlhbHMuIFRoZW4sIEknbGwgbW92ZSBvbiB0byBgbmV0L3hmcm0vTWFrZWZpbGVgLCBuYXR1cmFsbHkuIEkgbmVlZCB0byBzZWUgaG93IHRob3NlIGNvbmZpZ3VyYXRpb24gY2hvaWNlcyBhcmUgKmFjdHVhbGx5KiB0cmFuc2xhdGVkIGludG8gYnVpbGQgaW5zdHJ1Y3Rpb25zIGFuZCBob3cgdGhlIGluZGl2aWR1YWwgWEZSTSBtb2R1bGVzIGFuZCBvYmplY3RzIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgb3JnYW5pemVkLiBUaGF0IE1ha2VmaWxlIHdpbGwgc2hvdyBtZSB0aGUgYnVpbGQgcHJvY2VzcydzIGRhbmNlLiBXaXRoIHRoZXNlIHR3bywgSSBzaG91bGQgaGF2ZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6NDAuNzg1ODY0OTM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFhGUk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIFhGUk1cXG4gICA2OlxcdFxcdGJvb2xcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAxMDpcXHRcXG4gIDExOlxcdGNvbmZpZyBYRlJNX09GRkxPQURcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIFhGUk1fQUxHT1xcbiAgMTU6XFx0XFx0dHJpc3RhdGVcXG4gIDE2OlxcdFxcdHNlbGVjdCBYRlJNXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFQURcXG4gIDE5OlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxcbiAgMjE6XFx0XFxuICAyMjpcXHRpZiBJTkVUXFxuICAyMzpcXHRjb25maWcgWEZSTV9VU0VSXFxuICAyNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4gIDI1OlxcdFxcdHNlbGVjdCBYRlJNX0FMR09cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgU3VwcG9ydCBmb3IgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcbiAgMjg6XFx0XFx0ICBsaWtlIElQc2VjIHVzZWQgYnkgbmF0aXZlIExpbnV4IHRvb2xzLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxuICAzMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4gIDM0OlxcdFxcdGRlcGVuZHMgb24gWEZSTV9VU0VSIFxcdTAwMjZcXHUwMDI2IENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAzNTpcXHRcXHRcXHRIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXFxuICAzNjpcXHRcXHRzZWxlY3QgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xcbiAgMzc6XFx0XFx0aGVscFxcbiAgMzg6XFx0XFx0ICBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGxpa2UgSVBzZWNcXG4gIDM5OlxcdFxcdCAgdXNlZCBieSBjb21wYXRpYmxlIExpbnV4IGFwcGxpY2F0aW9ucy5cXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gWEZSTSBcXHUwMDI2XFx1MDAyNiBJUFY2XFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgcHJvdmlkZXMgYSB2aXJ0dWFsIGludGVyZmFjZSB0byByb3V0ZSBJUHNlYyB0cmFmZmljLlxcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6NDAuNzg1OTg0NzM1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MjM4ODMzNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIE1ha2VmaWxlOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgWEZSTSBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4ZnJtX2FsZ28ub2AgaXMgY29uc3RydWN0ZWQgd2l0aGluIHRoZSBgbmV0L3hmcm1gIGRpcmVjdG9yeS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBsb2NhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGdvdmVybiBpdHMgY29tcGlsYXRpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIGZpbGVzIGludm9sdmVkLCBhbnkgcmVxdWlyZWQgY29tcGlsZXIgZmxhZ3MsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIGxpYnJhcmllcy4gSSdsbCBiZSBsb29raW5nIGZvciBjb21tb24gTWFrZWZpbGUgY29uc3RydWN0cyBsaWtlIGAkKG9iai1tKWAsIGAkKGNjKWAsIGAkKEtCVUlMRF9DRkxBR1MpYCwgYW5kIGRlcGVuZGVuY3kgZGVjbGFyYXRpb25zIChlLmcuLCBgeGZybV9hbGdvLm86IHNvbWVfc291cmNlLmMgc29tZV9oZWFkZXIuaGApLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNvbXBpbGF0aW9uIHN0ZXBzIHRvIGVuc3VyZSBJIGdyYXNwIGhvdyB0aGlzIHNwZWNpZmljIG9iamVjdCBmaWxlIGZpdHMgaW50byB0aGUgbGFyZ2VyIFhGUk0gZnJhbWV3b3JrLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBtb2R1bGUgZGVwZW5kZW5jaWVzIG9yIGxpbmtpbmcgYWdhaW5zdCBvdGhlciBvYmplY3QgZmlsZXMuIEFueSBzcGVjaWFsIGNvbXBpbGVyIG9wdGlvbnMgYXJlIGFsc28gYSBwb2ludCBvZiBpbnRlcmVzdCwgYXMgdGhlc2UgbWlnaHQgcHJvdmlkZSBjbHVlcyB0byB0aGUgb3B0aW1pemF0aW9uIG9yIGZlYXR1cmUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgcGFydGljdWxhciBYRlJNIGFsZ29yaXRobSBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzg1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTo0My42MDk4Njk5MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdHhmcm1faW50ZXJmYWNlLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSArPSB4ZnJtX2ludGVyZmFjZV9jb3JlLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0aWZlcSAoJChDT05GSUdfWEZSTV9JTlRFUkZBQ0UpLG0pXFxuICAgOTpcXHR4ZnJtX2ludGVyZmFjZS0kKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSArPSB4ZnJtX2ludGVyZmFjZV9icGYub1xcbiAgMTA6XFx0ZWxzZSBpZmVxICgkKENPTkZJR19YRlJNX0lOVEVSRkFDRSkseSlcXG4gIDExOlxcdHhmcm1faW50ZXJmYWNlLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSB4ZnJtX2ludGVyZmFjZV9icGYub1xcbiAgMTI6XFx0ZW5kaWZcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG4gIDE2OlxcdFxcdFxcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXFxcXG4gIDE3OlxcdFxcdFxcdCAgICAgIHhmcm1fbmF0X2tlZXBhbGl2ZS5vXFxuICAxODpcXHRvYmotJChDT05GSUdfWEZSTV9TVEFUSVNUSUNTKSArPSB4ZnJtX3Byb2Mub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX1hGUk1fQUxHTykgKz0geGZybV9hbGdvLm9cXG4gIDIwOlxcdG9iai0kKENPTkZJR19YRlJNX1VTRVIpICs9IHhmcm1fdXNlci5vXFxuICAyMTpcXHRvYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgKz0geGZybV9jb21wYXQub1xcbiAgMjI6XFx0b2JqLSQoQ09ORklHX1hGUk1fSVBDT01QKSArPSB4ZnJtX2lwY29tcC5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfWEZSTV9JTlRFUkZBQ0UpICs9IHhmcm1faW50ZXJmYWNlLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG4gIDI1OlxcdG9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjM5OjQzLjYwOTkyODY2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTI4NDA1MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIElQc2VjL1hGUk0gYW5kIHRoZSBBUklBIENpcGhlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIHNlZWluZyBhIGNsdXN0ZXIgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYENPTkZJR19YRlJNX0FMR09gLCBgQ09ORklHX1hGUk1fVVNFUmAsIGBDT05GSUdfQ1JZUFRPX0FSSUFgLCBgQ09ORklHX0NSWVBUT19DQkNgLCBgQ09ORklHX0NSWVBUT19DVFJgLCBgQ09ORklHX0lORVRfRVNQYCwgZXRjLiBUaGVzZSBhcmUgYWxsIHBvaW50aW5nIHRvd2FyZCBhbiBJUHNlYy9YRlJNIHNldHVwLCBzcGVjaWZpY2FsbHkgaW52b2x2aW5nIHRoZSBBUklBIGNpcGhlci4gTXkgZm9jdXMgaXMgd2hhdCBoYXBwZW5zIHdoZW4gc3l6a2FsbGVyLCB0aGUgZnV6emVyLCB0cmllcyB0byBjb25maWd1cmUgdGhpcy5cblxuRXNzZW50aWFsbHksIHVzZXIgc3BhY2UsIHRocm91Z2ggc3l6a2FsbGVyLCBpcyBzZW5kaW5nIG5ldGxpbmsgbWVzc2FnZXMgKGBYRlJNX01TR19ORVdTQWAsIGBYRlJNX01TR19VUERTQWAsIGV0Yy4pIHRvIHRoZSBrZXJuZWwuIFRoZXNlIG1lc3NhZ2VzIHNwZWNpZnkgc2VjdXJpdHkgYXNzb2NpYXRpb25zIChTQXMpLCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGluY2x1ZGUgdGhlIGBYRlJNQV9BTEdfQ1JZUFRgIGF0dHJpYnV0ZS4gVGhlIGZ1enplciBsaWtlbHkgc3BlY2lmaWVzIGFsZ29yaXRobSBuYW1lcyBsaWtlIGBcImNiYyhhcmlhKVwiYCBvciBgXCJyZmMzNjg2KGN0cihhcmlhKSlcImAgb3IganVzdCBgXCJhcmlhXCJgIOKAkyB0aGF0J3MgdGhlIGludGVyZXN0aW5nIHBhcnQsIHJpZ2h0P1xuXG5UaGUga2VybmVsLCBpbiBgeGZybV91c2VyLmNgLCB1c2VzIHRoZSBgYXR0YWNoX2NyeXB0YCBmdW5jdGlvbiB0byBtYWtlIHNlbnNlIG9mIHRoaXMuIFRoaXMgZnVuY3Rpb24gdGhlbiBjYWxscyBgeGZybV9lYWxnX2dldF9ieW5hbWVgLCB3aGljaCBodW50cyB0aHJvdWdoIGB4ZnJtX2VhbGdfbGlzdGAgbG9va2luZyBmb3IgYSBzdWl0YWJsZSBhbGdvcml0aG0uIFRoaXMgaXMgaW1wb3J0YW50OiB0aGUgbGlzdCAqc2hvdWxkKiBub3cgY29udGFpbiBlbnRyaWVzIGZvciBgXCJjYmMoYXJpYSlcImAgYW5kIGBcInJmYzM2ODYoY3RyKGFyaWEpKVwiYC4gSWYgaXQgZG9lc24ndCwgd2UgaGF2ZSBhIHByb2JsZW0uXG5cblRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAgaXMgaW4gYGVzcF9pbml0X3N0YXRlYCwgbG9jYXRlZCBpbiBgbmV0L2lwdjQvZXNwNC5jYCBvciBgbmV0L2lwdjYvZXNwNi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGF0dGVtcHRzIHRvIGFsbG9jYXRlIHRoZSBza2NpcGhlciBvciBjcnlwdG8gdHJhbnNmb3JtLiBJdCBhbHNvIGluaXRpYWxpemVzIHRoZSBJViBnZW5lcmF0b3IsIHVzaW5nIGBlY2hhaW5pdmAgb3IgYHNlcWl2YC4gRmluYWxseSwgdGhlIGFjdHVhbCBwcm9jZXNzaW5nIG9mIG5ldHdvcmsgcGFja2V0cyBoYXBwZW5zIHVzaW5nIEVTUCAoYHhmcm00X291dHB1dGAsIGB4ZnJtNl9vdXRwdXRgLCBgZXNwX291dHB1dGAsIGFuZCBzbyBvbikuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgKnJlcXVpcmVtZW50cyouIEZvciBgY2JjKGFyaWEpYCB0byBiZSBzdWNjZXNzZnVsbHkgaW5zdGFudGlhdGVkLCB0aGUga2VybmVsICptdXN0KiBoYXZlIGBDUllQVE9fQ0JDYCBhbmQgYENSWVBUT19BUklBYCBlbmFibGVkLiBTaW1pbGFybHksIGByZmMzNjg2KGN0cihhcmlhKSlgIHJlcXVpcmVzIGBDUllQVE9fQ1RSYCwgYENSWVBUT19TRVFJVmAgb3IgYENSWVBUT19FQ0hBSU5JVmAsIGFuZCBgQ1JZUFRPX0FSSUFgLiBOYXR1cmFsbHksIGBYRlJNX1VTRVJgLCBgWEZSTV9BTEdPYCwgYW5kIGVpdGhlciBgSU5FVF9FU1BgIG9yIGBJTkVUNl9FU1BgIG5lZWQgdG8gYmUgZW5hYmxlZCB0b28uIEl0IHNlZW1zIGJhc2ljLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIHByb3Blcmx5IGNvbmZpZ3VyZWQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJ2xsIGNoZWNrIHRoZSBHaXQgbG9nIGZvciB0aGUgY29tbWl0IGludHJvZHVjaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBhdXRob3IncyBpbnRlbnQgYXJlIGVzc2VudGlhbCBmb3IgbXkgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBhZGRlZCwgd2hhdCBhc3N1bXB0aW9ucyB3ZXJlIG1hZGUsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxOTEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTo0OC4xMzgzMzc1MzNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDIwMDk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUklBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6NDguMjE1MzY3MzI4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjM2NDk2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIEFsZ29yaXRobSBMb29rdXAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBsb29rcyB1cCBhbmQgdXNlcyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHhmcm1fYWxnby5jYC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9ucyBmb3IgYHhmcm1fZWFsZ19nZXRfYnluYW1lYCBhbmQgYHhmcm1fZmluZF9hbGdvYC4gVGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zOyBvbmUgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIGFuIGFsZ29yaXRobSBieSBpdHMgbmFtZSwgYW5kIHRoZSBvdGhlciBwcm9iYWJseSBoYW5kbGVzIHRoZSBicm9hZGVyIHNlYXJjaCBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGFsZ29yaXRobSBzZWxlY3Rpb24gbWVjaGFuaXNtIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEknbSBleHBlY3RpbmcgdGhpcyBmaWxlIHRvIGhvbGQgdGhlIGNvcmUgbG9naWMgZm9yIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgYWxnb3JpdGhtIHJlZ2lzdHJhdGlvbiwgbG9va3VwcywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gY2FjaGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzUxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6Mzk6NTQuMjc5MDIwODk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgyNjQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2ZpbmRfYWxnb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9hbGdvLmM9Njc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgeGZybV9jYWxnX2xpc3QgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy02ODQtXFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njg1OnN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZmluZF9hbGdvKFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY4Ni1cXHRjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgKmFsZ29fbGlzdCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTcxOT1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyMC17XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzIxOlxcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcXHUwMDI2eGZybV9hYWxnX2xpc3QsIHhmcm1fYWxnX2lkX21hdGNoLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTcyMi1cXHRcXHRcXHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz03MjY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWQoaW50IGFsZ19pZClcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03Mjcte1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjcyODpcXHRyZXR1cm4geGZybV9maW5kX2FsZ28oXFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19pZF9tYXRjaCxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03MjktXFx0XFx0XFx0ICAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZylhbGdfaWQsIDEpO1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NzMzPXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9jYWxnX2dldF9ieWlkKGludCBhbGdfaWQpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzM0LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3MzU6XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2NhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzM2LVxcdFxcdFxcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTc0OT1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwcm9iZSlcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTAte1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc1MTpcXHRyZXR1cm4geGZybV9maW5kX2FsZ28oXFx1MDAyNnhmcm1fYWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1Mi1cXHRcXHRcXHQgICAgICBwcm9iZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz03NTY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgcHJvYmUpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzU3LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3NTg6XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfbmFtZV9tYXRjaCwgbmFtZSxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTktXFx0XFx0XFx0ICAgICAgcHJvYmUpO1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NzYzPXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9jYWxnX2dldF9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IHByb2JlKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc2NC17XFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzY1OlxcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcXHUwMDI2eGZybV9jYWxnX2xpc3QsIHhmcm1fYWxnX25hbWVfbWF0Y2gsIG5hbWUsXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzY2LVxcdFxcdFxcdCAgICAgIHByb2JlKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTc4NT1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWVhZF9nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBpY3ZfbGVuLCBpbnQgcHJvYmUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy03OTEtXFxubmV0L3hmcm0veGZybV9hbGdvLmM6NzkyOlxcdHJldHVybiB4ZnJtX2ZpbmRfYWxnbyhcXHUwMDI2eGZybV9hZWFkX2xpc3QsIHhmcm1fYWVhZF9uYW1lX21hdGNoLCBcXHUwMDI2ZGF0YSxcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03OTMtXFx0XFx0XFx0ICAgICAgcHJvYmUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjozOTo1NC4zNTc4NTg0NjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE4NTE0MzEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHhmcm1fZmluZF9hbGdvYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGB4ZnJtX2ZpbmRfYWxnb2AgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyBsaWtlbHkgYXJvdW5kIHRoZSBlZmZpY2llbmN5IG9mIHRoZSBzZWFyY2guIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIG9wdGltaXplZCwgb3IgKmlmKiBpdCdzIG9wdGltaXplZCwgYW5kIHdoZXRoZXIgaXQncyBzdXNjZXB0aWJsZSB0byBhbnkgZGVuaWFsLW9mLXNlcnZpY2UgdmVjdG9ycyByZWxhdGVkIHRvIHBvb3JseSBjb25zdHJ1Y3RlZCBzZWN1cml0eSBwb2xpY2llcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogaG93IHRoZSBhbGdvcml0aG0gdGFibGVzIGFyZSBvcmdhbml6ZWQsIHRoZSBzZWFyY2gga2V5IHVzZWQsIGFuZCBob3cgY29sbGlzaW9ucyBhcmUgaGFuZGxlZC4gSXMgdGhlcmUgYSBjYWNoaW5nIG1lY2hhbmlzbT8gRG9lcyBpdCBpdGVyYXRlIGxpbmVhcmx5IG9yIHV0aWxpemUgc29tZSBmb3JtIG9mIGhhc2hpbmcgb3IgYSBtb3JlIGFkdmFuY2VkIGRhdGEgc3RydWN0dXJlPyBJJ20gYWxzbyBnb2luZyB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgdGhlIGltcGxlbWVudGF0aW9uIGlzbid0IHByb3Blcmx5IHByb3RlY3RlZCBieSBsb2Nrcy4gRnVydGhlciwgSSB3aWxsIGxvb2sgdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGFuZCBpZiBpdCBoYXMgYW55IGZhbGxiYWNrcy4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgd2Vha25lc3NlcyB0aGF0IGNvdWxkIGJlIGV4cGxvaXRlZCBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjUwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MDEuNTQzMDA2Mzc4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX2FsZ28uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0XFx0LmZpbmQgPSBjcnlwdG9faGFzX2Fjb21wLFxcbiA2ODE6XFx0XFx0LmFsZ3MgPSBjYWxnX2xpc3QsXFxuIDY4MjpcXHRcXHQuZW50cmllcyA9IEFSUkFZX1NJWkUoY2FsZ19saXN0KSxcXG4gNjgzOlxcdH07XFxuIDY4NDpcXHRcXG4gNjg1OlxcdHN0YXRpYyBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZmluZF9hbGdvKFxcbiA2ODY6XFx0XFx0Y29uc3Qgc3RydWN0IHhmcm1fYWxnb19saXN0ICphbGdvX2xpc3QsXFxuIDY4NzpcXHRcXHRpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fYWxnb19kZXNjICplbnRyeSwgY29uc3Qgdm9pZCAqZGF0YSksXFxuIDY4ODpcXHRcXHRjb25zdCB2b2lkICpkYXRhLCBpbnQgcHJvYmUpXFxuIDY4OTpcXHR7XFxuIDY5MDpcXHRcXHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmxpc3QgPSBhbGdvX2xpc3QtXFx1MDAzZWFsZ3M7XFxuIDY5MTpcXHRcXHRpbnQgaSwgc3RhdHVzO1xcbiA2OTI6XFx0XFxuIDY5MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWxnb19saXN0LVxcdTAwM2VlbnRyaWVzOyBpKyspIHtcXG4gNjk0OlxcdFxcdFxcdGlmICghbWF0Y2gobGlzdCArIGksIGRhdGEpKVxcbiA2OTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDY5NjpcXHRcXG4gNjk3OlxcdFxcdFxcdGlmIChsaXN0W2ldLmF2YWlsYWJsZSlcXG4gNjk4OlxcdFxcdFxcdFxcdHJldHVybiBcXHUwMDI2bGlzdFtpXTtcXG4gNjk5OlxcdFxcbiA3MDA6XFx0XFx0XFx0aWYgKCFwcm9iZSlcXG4gNzAxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA3MDI6XFx0XFxuIDcwMzpcXHRcXHRcXHRzdGF0dXMgPSBhbGdvX2xpc3QtXFx1MDAzZWZpbmQobGlzdFtpXS5uYW1lLCAwLCAwKTtcXG4gNzA0OlxcdFxcdFxcdGlmICghc3RhdHVzKVxcbiA3MDU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDcwNjpcXHRcXG4gNzA3OlxcdFxcdFxcdGxpc3RbaV0uYXZhaWxhYmxlID0gc3RhdHVzO1xcbiA3MDg6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZsaXN0W2ldO1xcbiA3MDk6XFx0XFx0fVxcbiA3MTA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDcxMTpcXHR9XFxuIDcxMjpcXHRcXG4gNzEzOlxcdHN0YXRpYyBpbnQgeGZybV9hbGdfaWRfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fYWxnb19kZXNjICplbnRyeSxcXG4gNzE0OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgdm9pZCAqZGF0YSlcXG4gNzE1OlxcdHtcXG4gNzE2OlxcdFxcdHJldHVybiBlbnRyeS1cXHUwMDNlZGVzYy5zYWRiX2FsZ19pZCA9PSAodW5zaWduZWQgbG9uZylkYXRhO1xcbiA3MTc6XFx0fVxcbiA3MTg6XFx0XFxuIDcxOTpcXHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fYWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxcbiA3MjA6XFx0e1xcbiA3MjE6XFx0XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2FhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXFxuIDcyMjpcXHRcXHRcXHRcXHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XFxuIDcyMzpcXHR9XFxuIDcyNDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2FhbGdfZ2V0X2J5aWQpO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnlpZChpbnQgYWxnX2lkKVxcbiA3Mjc6XFx0e1xcbiA3Mjg6XFx0XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXFxuIDcyOTpcXHRcXHRcXHRcXHQgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWFsZ19pZCwgMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjAxLjU0MzE5MjE2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODYxOTczNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBFbmNyeXB0aW9uIEFsZ29yaXRobSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBmdXp6aW5nIHdvcnRoaW5lc3Mgb2YgdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBjb21wb25lbnRzIGFuZCBlbnRyeSBwb2ludHMuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCBlbmNyeXB0aW9uIGFsZ29yaXRobXMsIHJlZ2lzdGVyaW5nIHRoZW0gaW4gYGVhbGdfbGlzdGAuIFRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHJlZ2lzdHJhdGlvbiBhcmUgYHhmcm1fZWFsZ19nZXRfYnluYW1lYCwgYHhmcm1fcHJvYmVfYWxnc2AsIGBhdHRhY2hfY3J5cHRgLCBhbmQgYHhmcm1fc3RhdGVfY29uc3RydWN0YC4gSSBuZWVkIHRvIGJyb2FkZW4gbXkgc2NvcGUgYmV5b25kIHRob3NlIGVudHJ5IHBvaW50cy5cblxuSSdsbCBub3cgZXhwYW5kIG15IGludmVzdGlnYXRpb24uIEknbGwgc2VhcmNoIGZvciBhbGwgdG91Y2hwb2ludHMgcmVsYXRlZCB0byBgeGZybV9hbGdvYCBhbmQgQVJJQSBlbmNyeXB0aW9uIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoYXQgaW5jbHVkZXMgY2hlY2tpbmcgYGNyeXB0b19hcmlhYCBhbmQsIGltcG9ydGFudGx5LCB0aGUgb3B0aW1pemVkIHg4NiB2YXJpYW50cyBsaWtlIGBDUllQVE9fQVJJQV9BRVNOSV9BVlhfWDg2XzY0YCwgYENSWVBUT19BUklBX0FFU05JX0FWWDJfWDg2XzY0YCwgYW5kIGBDUllQVE9fQVJJQV9HRk5JX0FWWDUxMl9YODZfNjRgLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBJIGhhdmUgY29ycmVjdCBzZXR0aW5ncyBmb3IgYENSWVBUT19DQkNgLCBgQ1JZUFRPX0NUUmAsIGBYRlJNYCwgYFhGUk1fQUxHT2AsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBhbmQgYElORVQ2X0VTUGAuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgY2hhbmdlIGEgZ29vZCBmdXp6aW5nIHRhcmdldD8gTGV0J3MgY2hlY2s6XG5cbjEuICAqKlJlYWNoYWJpbGl0eToqKiBUaGUgY29kZSByZXNpZGVzIGluIGBuZXQveGZybS94ZnJtX2FsZ28uY2AuIEl0IGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgTmV0bGluaywgc3BlY2lmaWNhbGx5IHRoZSBYRlJNIG5ldGxpbmsgQVBJIG9yIHBma2V5LCB3aGljaCBpcyBoZWF2aWx5IGxldmVyYWdlZCBieSBzeXprYWxsZXIuIFRoZSBwcmVzZW5jZSBvZiBgc3l6X25ldGxpbmtfeGZybSpgIG9yIHNvY2tldCBuZXRsaW5rIG1lc3NhZ2VzIGluZGljYXRlcyB0aGF0IHN5emthbGxlciBhbHJlYWR5IGhhcyBleGNlbGxlbnQgY292ZXJhZ2UuXG4yLiAgKipGdW5jdGlvbmFsaXR5OioqIFRoaXMgcGF0Y2ggYWRkcyB0d28gbmV3IGNpcGhlciBhbGdvcml0aG1zIHRvIFhGUk0sIGFsbG93aW5nIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIFhGUk0gc3RhdGVzIHVzaW5nIGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCwgaW5jbHVkaW5nIHNwZWNpZmljIGtleSBzaXplcywgSVYgZ2VuZXJhdG9ycywgYW5kIGJsb2NrIHNpemVzLiBUaGF0J3MgZ29vZCBjb21wbGV4aXR5IGZvciBmdXp6aW5nLlxuMy4gICoqSW1wYWN0OioqIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nLCBzcGVjaWZpY2FsbHkgSVBzZWMgYW5kIHRoZSBjcnlwdG9ncmFwaGljIGludGVyZmFjZS4gVGhpcyBpcyBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSwgYW5kIHNlY3VyaXR5IGZsYXdzIGhlcmUgYXJlIGhpZ2gtaW1wYWN0LlxuNC4gICoqQ29uY2x1c2lvbjoqKiBCYXNlZCBvbiBhbGwgdGhlc2UgcG9pbnRzLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBcIldvcnRoRnV6emluZz10cnVlXCIgc2l0dWF0aW9uLiBJJ2QgbmVlZCB0byBwcmlvcml0aXplIHRoaXMuXG5cbkZpbmFsbHksIEknbGwgY2FyZWZ1bGx5IHZlcmlmeSB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIG5lZWQgYFhGUk1fQUxHT2AsIGBYRlJNX1VTRVJgLCBgQ1JZUFRPX0FSSUFgLCBgQ1JZUFRPX0NCQ2AsIGBDUllQVE9fQ1RSYCwgYW5kIGVpdGhlciBgSU5FVF9FU1BgIChvciBwb3RlbnRpYWxseSBgSU5FVF9FU1BfT0ZGTE9BRGApIG9yIGBJTkVUNl9FU1BgIGVuYWJsZWQuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYG5ldC9pcHY0YCBhbmQgYG5ldC9pcHY2YCB0byBlbnN1cmUgdGhlIEVTUCBvcHRpb25zIGFyZSBjb3JyZWN0bHkgc2V0LiBUaGlzIHdpbGwgYmUgdGhlIGZpcnN0IHN0ZXAgdG8gZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjo0MDowOC40MDUxNzQ0MjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTc2NTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9FU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzOT1jb25maWcgSU5FVF9BSFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXFxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MDguNTkwOTQ3NDU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMDkxNDMzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIElQc2VjKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgKEVTUCkgd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBUaGF0IG1lYW5zIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBnby10byBsb2NhdGlvbiBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byBJUHY0IG5ldHdvcmtpbmcsIGFuZCBpdCdzIGFsbW9zdCBjZXJ0YWluIHRvIGhvbGQgdGhlIHNldHRpbmcgSSdtIGxvb2tpbmcgZm9yLCBgSU5FVF9FU1BgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIHByb2JhYmx5IGd1ZXNzIHRoYXQncyB3aGVyZSBpdCBpcywgYnV0IGl0J3MgYWx3YXlzIGJlc3QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrIGluIHRoZSBjb25maWcgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjExLjYwMDA5MzQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdCAgaW1wbGVtZW50YXRpb25zIG9mIGFueSBuZWVkZWQgYWxnb3JpdGhtcyB3aGVuIGF2YWlsYWJsZS5cXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAzNTM6XFx0XFxuIDM1NDpcXHRjb25maWcgSU5FVF9FU1BcXG4gMzU1OlxcdFxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbiAzNTY6XFx0XFx0c2VsZWN0IFhGUk1fRVNQXFxuIDM1NzpcXHRcXHRoZWxwXFxuIDM1ODpcXHRcXHQgIFN1cHBvcnQgZm9yIElQc2VjIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKS5cXG4gMzU5OlxcdFxcbiAzNjA6XFx0XFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXFxuIDM2MTpcXHRcXHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXFxuIDM2MjpcXHRcXHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcXG4gMzYzOlxcdFxcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91J2xsIG5lZWQgdG8gZW5hYmxlXFxuIDM2NDpcXHRcXHQgIHRoZW0gaW4gdGhlIGNyeXB0byBBUEkuICBZb3Ugc2hvdWxkIGFsc28gZW5hYmxlIGFjY2VsZXJhdGVkXFxuIDM2NTpcXHRcXHQgIGltcGxlbWVudGF0aW9ucyBvZiBhbnkgbmVlZGVkIGFsZ29yaXRobXMgd2hlbiBhdmFpbGFibGUuXFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gMzY4OlxcdFxcbiAzNjk6XFx0Y29uZmlnIElORVRfRVNQX09GRkxPQURcXG4gMzcwOlxcdFxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuIDM3MTpcXHRcXHRkZXBlbmRzIG9uIElORVRfRVNQXFxuIDM3MjpcXHRcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxuIDM3MzpcXHRcXHRkZWZhdWx0IG5cXG4gMzc0OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MTEuNjAwMTkxMjUxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NzU1NjIzNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBDcnlwdG8gQWxnb3JpdGhtIENvbmZpZ3VyYXRpb24gUmV2aWV3KipcblxuT2theSwgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSd2ZSBjb3ZlcmVkIG91ciBiYXNlcyBvbiB0aGUgWEZSTSBjcnlwdG8gYWxnb3JpdGhtIHNldHVwLiBJJ20gZ29pbmcgYmFjayB0byBgbmV0L3hmcm0vS2NvbmZpZ2AgZm9yIGEgZmluYWwgbG9vay1zZWUgYXQgdGhlIGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9BTEdPYCBkZXBlbmRlbmNpZXMuIFllcCwgYFhGUk1fVVNFUmAgc3RpbGwgcHJvcGVybHkgc2VsZWN0cyBgWEZSTV9BTEdPYCwgd2hpY2ggaW4gdHVybiB0cmlnZ2VycyB0aGUgY29tcGlsYXRpb24gb2YgYHhmcm1fYWxnby5jYC4gR29vZC4gVGhhdOKAmXMgc29saWQuXG5cbk5vdywgbGV0J3MgbWVudGFsbHkgd2FsayB0aHJvdWdoIHRob3NlIGtleSBzeW1ib2xzIGFnYWluLCBqdXN0IHRvIGJlIGNlcnRhaW46IGB4ZnJtX2VhbGdfZ2V0X2J5bmFtZWAsIGB4ZnJtX2ZpbmRfYWxnb2AsIGB4ZnJtX3Byb2JlX2FsZ3NgLCBhbmQgYGF0dGFjaF9jcnlwdGAuIFJpZ2h0LCByaWdodC4gVGhlc2UgYXJlbid0IGV4YWN0bHkgdWJpcXVpdG91czsgdGhleSdyZSBhbGwgcHJldHR5IGNsZWFybHkgdGllZCB0byB0aGUgWEZSTSBjcnlwdG8gYWxnb3JpdGhtIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBkdXJpbmcgdGhlIHNldHVwIHBoYXNlLiBUaGV5J3JlIG5vdCBnb2luZyB0byBiZSBpbiBhbnkgaG90IHBhdGhzLiBBcyBJIHJlY2FsbCwgdGhleSdyZSBvbmx5IGludm9rZWQgZHVyaW5nIFhGUk0gU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBjb25maWd1cmF0aW9uLCB0eXBpY2FsbHkgdGhyb3VnaCBhIE5ldGxpbmsgYFhGUk1fTVNHX05FV1NBYCBtZXNzYWdlLiBUaGF0J3MgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudC5cblxuT2theSwgbGV04oCZcyByZXZpc2l0IHRoZSBgRW5hYmxlQ29uZmlnc2Agb25lIGxhc3QgdGltZSB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudDogd2UgbmVlZCBgWEZSTWAsIGBYRlJNX0FMR09gLCBgWEZSTV9VU0VSYCwgYENSWVBUT19BUklBYCwgYENSWVBUT19DQkNgLCBgQ1JZUFRPX0NUUmAsIGFuZCBgSU5FVF9FU1BgLiBZZXAsIHRob3NlIGFyZSBhbGwgcHJlc2VudCBhbmQgYWNjb3VudGVkIGZvci4gVGhleSBhcmUgYWxsIGNvcnJlY3QgYW5kIEkgY2FuIGRlZmVuZCB0aGVpciBpbmNsdXNpb24gd2l0aG91dCBhbnkgaXNzdWVzLlxuXG5BbHJpZ2h0LCB0aGF0J3MgZXZlcnl0aGluZy4gSXQgYWxsIGNoZWNrcyBvdXQuIFRpbWUgdG8gbWFrZSB0aGUgZmluYWwgY2FsbCB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTEsIk91dHB1dFRva2VucyI6MTkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MTUuMjc1NzYzNjA0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NjUwODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNXCIsXG4gICAgXCJYRlJNX0FMR09cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiQ1JZUFRPX0FSSUFcIixcbiAgICBcIkNSWVBUT19DQkNcIixcbiAgICBcIkNSWVBUT19DVFJcIixcbiAgICBcIklORVRfRVNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9lYWxnX2dldF9ieW5hbWVcIixcbiAgICBcInhmcm1fZmluZF9hbGdvXCIsXG4gICAgXCJ4ZnJtX3Byb2JlX2FsZ3NcIixcbiAgICBcImF0dGFjaF9jcnlwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXFxcImNiYyhhcmlhKVxcXCIgYW5kIFxcXCJyZmMzNjg2KGN0cihhcmlhKSlcXFwiKSB0byB0aGUgWEZSTSBlbmNyeXB0aW9uIGFsZ29yaXRobSByZWdpc3RyeSAoZWFsZ19saXN0KS4gVGhpcyBlbmFibGVzIHVzZXItc3BhY2UgdmlhIFhGUk0gTmV0bGluayBpbnRlcmZhY2UgdG8gY29uZmlndXJlIElQc2VjIFNBcyB3aXRoIEFSSUEgZW5jcnlwdGlvbiwgZXhlcmNpc2luZyB0aGUgY3J5cHRvIHN1YnN5c3RlbSBhbmQgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNXCIsXG4gICAgXCJYRlJNX0FMR09cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiQ1JZUFRPX0FSSUFcIixcbiAgICBcIkNSWVBUT19DQkNcIixcbiAgICBcIkNSWVBUT19DVFJcIixcbiAgICBcIklORVRfRVNQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9lYWxnX2dldF9ieW5hbWVcIixcbiAgICBcInhmcm1fZmluZF9hbGdvXCIsXG4gICAgXCJ4ZnJtX3Byb2JlX2FsZ3NcIixcbiAgICBcImF0dGFjaF9jcnlwdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgQVJJQSBjaXBoZXIgYWxnb3JpdGhtcyAoXFxcImNiYyhhcmlhKVxcXCIgYW5kIFxcXCJyZmMzNjg2KGN0cihhcmlhKSlcXFwiKSB0byB0aGUgWEZSTSBlbmNyeXB0aW9uIGFsZ29yaXRobSByZWdpc3RyeSAoZWFsZ19saXN0KS4gVGhpcyBlbmFibGVzIHVzZXItc3BhY2UgdmlhIFhGUk0gTmV0bGluayBpbnRlcmZhY2UgdG8gY29uZmlndXJlIElQc2VjIFNBcyB3aXRoIEFSSUEgZW5jcnlwdGlvbiwgZXhlcmNpc2luZyB0aGUgY3J5cHRvIHN1YnN5c3RlbSBhbmQgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MTUuNDEwNDI0MDI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM0Mzk1NDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjE1LjQxMTA2Nzk5NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MzQzMzA0NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtZXJlbHkgcmVnaXN0ZXJzIHR3byBleGlzdGluZyBjaXBoZXIgc3VpdGVzIChcXFwiY2JjKGFyaWEpXFxcIiBhbmQgXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIpIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBcXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcXG4tIFRoZSBhZGRlZCBlbnRyaWVzIGFyZSBzdGF0aWMgYHN0cnVjdCB4ZnJtX2FsZ29fZGVzY2AgZGVmaW5pdGlvbnMgaW4gYC5kYXRhYCAvIGAucm9kYXRhYCB3aGVyZSB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLlxcbi0gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiwgc3RhY2sgdmFyaWFibGUgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zdXJlLCBvciBuZXRsaW5rIC8gYGNvcHlfdG9fdXNlcmAgZGF0YSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbi0gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2E1M2Q2ZWNkZTI1OGNhYzAwNDRiNWU5ZjBlOTI2ZGMwMzM1OTJlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDY6Mzg6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jXG5pbmRleCA3MDQzNDQ5NWYyM2Y1Li4xNmM3MGRjMWE0MjY4IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9hbGdvLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jXG5AQCAtNTEyLDYgKzUxMiwzNCBAQCBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGVhbGdfbGlzdFtdID0ge1xuIFx0XHQuc2FkYl9hbGdfbWF4Yml0cyA9IDI1NlxuIFx0fVxuIH0sXG4re1xuK1x0Lm5hbWUgPSBcImNiYyhhcmlhKVwiLFxuK1x0LmNvbXBhdCA9IFwiYXJpYVwiLFxuK1xuK1x0LnVpbmZvID0ge1xuK1x0XHQuZW5jciA9IHtcbitcdFx0XHQuZ2VuaXYgPSBcImVjaGFpbml2XCIsXG4rXHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbitcdFx0XHQuZGVma2V5Yml0cyA9IDI1NixcbitcdFx0fVxuK1x0fSxcbitcbitcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxuK30sXG4re1xuK1x0Lm5hbWUgPSBcInJmYzM2ODYoY3RyKGFyaWEpKVwiLFxuK1x0LmNvbXBhdCA9IFwiYXJpYVwiLFxuK1xuK1x0LnVpbmZvID0ge1xuK1x0XHQuZW5jciA9IHtcbitcdFx0XHQuZ2VuaXYgPSBcInNlcWl2XCIsXG4rXHRcdFx0LmJsb2NrYml0cyA9IDEyOCxcbitcdFx0XHQuZGVma2V5Yml0cyA9IDE2MCxcbitcdFx0fVxuK1x0fSxcbitcbitcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxuK30sXG4ge1xuIFx0Lm5hbWUgPSBcImNiYyh0d29maXNoKVwiLFxuIFx0LmNvbXBhdCA9IFwidHdvZmlzaFwiLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MTUuNDExMDY4ODc2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1NTc2MzEwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBmb3IgQVJJQSBDaXBoZXIgQWxnb3JpdGhtIFBhdGNoPyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIEFSSUEgY2lwaGVyIGFsZ29yaXRobXMsIHNwZWNpZmljYWxseSBgY2JjKGFyaWEpYCBhbmQgYHJmYzM2ODYoY3RyKGFyaWEpKWAsIHRvIGB4ZnJtX2FsZ28uY2AuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBMZXQncyBicmVhayBpdCBkb3duLiBXZSdyZSBkZWFsaW5nIHdpdGggZXZhbHVhdGluZyB0aGUgTGludXgga2VybmVsIHNhbml0aXplciBzdWl0YWJpbGl0eSBoZXJlLCBmb2N1c2luZyBvbiBLQVNBTiB2ZXJzdXMgS01TQU4gZm9yIGEgcGF0Y2guIFRoaXMgaXMgZXNzZW50aWFsbHkgYSBiZW5pZ24gZGVmZW5zaXZlIHNlY3VyaXR5IGFuYWx5c2lzIG9yIFFBIHRhc2ssIHBhdGNoIGV2YWx1YXRpb247IHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYW55IGFjdGl2ZSBleHBsb2l0IGdlbmVyYXRpb24gb3IgbWFsaWNpb3VzIGNvZGUuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGlzIHBhdGNoIGp1c3Qgc2VlbXMgdG8gYmUgYWRkaW5nIHR3byBlbnRyaWVzIHRvIHRoZSBgZWFsZ19saXN0YCBhcnJheSB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fYWxnby5jYC4gVGltZSB0byBncmFiIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDUxMiwgYW5kIGNoZWNrIG91dCB3aGF0J3MgYWxyZWFkeSB0aGVyZS4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCBsb29rcyBsaWtlLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIHBhdGNoJ3MgaW50ZWdyYXRpb24gYW5kIHBvdGVudGlhbCByaXNrcy4gTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGlzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCBhbmQgd2hldGhlciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5lY2Vzc2FyeSB3aWxsIGhpbmdlIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4aXN0aW5nIGNvZGUgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHRoYXQgdGhlIGFkZGVkIGFsZ29yaXRobXMgbWlnaHQgaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjI0Ljk2ODcwNDcyMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9hbGdvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcdFxcdFxcdC5nZW5pdiA9IFxcXCJlY2hhaW5pdlxcXCIsXFxuIDUwMTpcXHRcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbiA1MDI6XFx0XFx0XFx0XFx0LmRlZmtleWJpdHMgPSAxMjgsXFxuIDUwMzpcXHRcXHRcXHR9XFxuIDUwNDpcXHRcXHR9LFxcbiA1MDU6XFx0XFxuIDUwNjpcXHRcXHQucGZrZXlfc3VwcG9ydGVkID0gMSxcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0LmRlc2MgPSB7XFxuIDUwOTpcXHRcXHRcXHQuc2FkYl9hbGdfaWQgPSBTQURCX1hfRUFMR19DQU1FTExJQUNCQyxcXG4gNTEwOlxcdFxcdFxcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXFxuIDUxMTpcXHRcXHRcXHQuc2FkYl9hbGdfbWluYml0cyA9IDEyOCxcXG4gNTEyOlxcdFxcdFxcdC5zYWRiX2FsZ19tYXhiaXRzID0gMjU2XFxuIDUxMzpcXHRcXHR9XFxuIDUxNDpcXHR9LFxcbiA1MTU6XFx0e1xcbiA1MTY6XFx0XFx0Lm5hbWUgPSBcXFwiY2JjKGFyaWEpXFxcIixcXG4gNTE3OlxcdFxcdC5jb21wYXQgPSBcXFwiYXJpYVxcXCIsXFxuIDUxODpcXHRcXG4gNTE5OlxcdFxcdC51aW5mbyA9IHtcXG4gNTIwOlxcdFxcdFxcdC5lbmNyID0ge1xcbiA1MjE6XFx0XFx0XFx0XFx0Lmdlbml2ID0gXFxcImVjaGFpbml2XFxcIixcXG4gNTIyOlxcdFxcdFxcdFxcdC5ibG9ja2JpdHMgPSAxMjgsXFxuIDUyMzpcXHRcXHRcXHRcXHQuZGVma2V5Yml0cyA9IDI1NixcXG4gNTI0OlxcdFxcdFxcdH1cXG4gNTI1OlxcdFxcdH0sXFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdC5wZmtleV9zdXBwb3J0ZWQgPSAwLFxcbiA1Mjg6XFx0fSxcXG4gNTI5OlxcdHtcXG4gNTMwOlxcdFxcdC5uYW1lID0gXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIsXFxuIDUzMTpcXHRcXHQuY29tcGF0ID0gXFxcImFyaWFcXFwiLFxcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHQudWluZm8gPSB7XFxuIDUzNDpcXHRcXHRcXHQuZW5jciA9IHtcXG4gNTM1OlxcdFxcdFxcdFxcdC5nZW5pdiA9IFxcXCJzZXFpdlxcXCIsXFxuIDUzNjpcXHRcXHRcXHRcXHQuYmxvY2tiaXRzID0gMTI4LFxcbiA1Mzc6XFx0XFx0XFx0XFx0LmRlZmtleWJpdHMgPSAxNjAsXFxuIDUzODpcXHRcXHRcXHR9XFxuIDUzOTpcXHRcXHR9LFxcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHQucGZrZXlfc3VwcG9ydGVkID0gMCxcXG4gNTQyOlxcdH0sXFxuIDU0MzpcXHR7XFxuIDU0NDpcXHRcXHQubmFtZSA9IFxcXCJjYmModHdvZmlzaClcXFwiLFxcbiA1NDU6XFx0XFx0LmNvbXBhdCA9IFxcXCJ0d29maXNoXFxcIixcXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0LnVpbmZvID0ge1xcbiA1NDg6XFx0XFx0XFx0LmVuY3IgPSB7XFxuIDU0OTpcXHRcXHRcXHRcXHQuZ2VuaXYgPSBcXFwiZWNoYWluaXZcXFwiLFxcbiA1NTA6XFx0XFx0XFx0XFx0LmJsb2NrYml0cyA9IDEyOCxcXG4gNTUxOlxcdFxcdFxcdFxcdC5kZWZrZXliaXRzID0gMTI4LFxcbiA1NTI6XFx0XFx0XFx0fVxcbiA1NTM6XFx0XFx0fSxcXG4gNTU0OlxcdFxcbiA1NTU6XFx0XFx0LnBma2V5X3N1cHBvcnRlZCA9IDEsXFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdC5kZXNjID0ge1xcbiA1NTg6XFx0XFx0XFx0LnNhZGJfYWxnX2lkID0gU0FEQl9YX0VBTEdfVFdPRklTSENCQyxcXG4gNTU5OlxcdFxcdFxcdC5zYWRiX2FsZ19pdmxlbiA9IDgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjI0Ljk2ODg4Nzg2MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODg5MjM4Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEFsZ29yaXRobSBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB4ZnJtX2FsZ29fZGVzY2AgaGVyZSwgYW5kIEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBpZiB0aGVyZSBhcmUgb3RoZXIsIHJlbGF0ZWQgYWxnb3JpdGhtcyBpbiB0aGUgYGVhbGdfbGlzdGAuIEl0IHNlZW1zIGxpa2UgYSBkZWVwZXIgZGl2ZSBpbnRvIGBuZXQveGZybS94ZnJtX2FsZ28uY2AgaXMgaW4gb3JkZXIuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHJlYWRpbmcgdGhyb3VnaCB0aGUgY29kZSB0aGVyZSBtb3JlIGNsb3NlbHkuIE9yLCBhIHF1aWNrIGdyZXAgZm9yIGBlYWxnX2xpc3RgIG1pZ2h0IGdpdmUgbWUgc29tZSB1c2VmdWwgY2x1ZXMgYW5kIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBJIGNhbiB1bmNvdmVyIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjo0MDoyNi44NTgxNDAzODhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTUxMTE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlYWxnX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fYWxnby5jPTE3NT1zdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGFhbGdfbGlzdFtdID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtMzQ2LVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjM0NzpzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGVhbGdfbGlzdFtdID0ge1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTM0OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz02NDU9c3RhdGljIGlubGluZSBpbnQgZWFsZ19lbnRyaWVzKHZvaWQpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNjQ2LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NDc6XFx0cmV0dXJuIEFSUkFZX1NJWkUoZWFsZ19saXN0KTtcXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NDgtfVxcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NjY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgeGZybV9hYWxnX2xpc3QgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy02NzItXFxubmV0L3hmcm0veGZybV9hbGdvLmM6NjczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9hbGdvX2xpc3QgeGZybV9lYWxnX2xpc3QgPSB7XFxubmV0L3hmcm0veGZybV9hbGdvLmMtNjc0LVxcdC5maW5kID0gY3J5cHRvX2hhc19za2NpcGhlcixcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo2NzU6XFx0LmFsZ3MgPSBlYWxnX2xpc3QsXFxubmV0L3hmcm0veGZybV9hbGdvLmM6Njc2OlxcdC5lbnRyaWVzID0gQVJSQVlfU0laRShlYWxnX2xpc3QpLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTY3Ny19O1xcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmM9NzI2PXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9lYWxnX2dldF9ieWlkKGludCBhbGdfaWQpXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI3LXtcXG5uZXQveGZybS94ZnJtX2FsZ28uYzo3Mjg6XFx0cmV0dXJuIHhmcm1fZmluZF9hbGdvKFxcdTAwMjZ4ZnJtX2VhbGdfbGlzdCwgeGZybV9hbGdfaWRfbWF0Y2gsXFxubmV0L3hmcm0veGZybV9hbGdvLmMtNzI5LVxcdFxcdFxcdCAgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpYWxnX2lkLCAxKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTc1Nj1zdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fZWFsZ19nZXRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBwcm9iZSlcXG5uZXQveGZybS94ZnJtX2FsZ28uYy03NTcte1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjc1ODpcXHRyZXR1cm4geGZybV9maW5kX2FsZ28oXFx1MDAyNnhmcm1fZWFsZ19saXN0LCB4ZnJtX2FsZ19uYW1lX21hdGNoLCBuYW1lLFxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTc1OS1cXHRcXHRcXHQgICAgICBwcm9iZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYz04MDY9c3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5aWR4KHVuc2lnbmVkIGludCBpZHgpXFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy04MTAtXFxubmV0L3hmcm0veGZybV9hbGdvLmM6ODExOlxcdHJldHVybiBcXHUwMDI2ZWFsZ19saXN0W2lkeF07XFxubmV0L3hmcm0veGZybV9hbGdvLmMtODEyLX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTgyMD12b2lkIHhmcm1fcHJvYmVfYWxncyh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9hbGdvLmMtODMyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlYWxnX2VudHJpZXMoKTsgaSsrKSB7XFxubmV0L3hmcm0veGZybV9hbGdvLmM6ODMzOlxcdFxcdHN0YXR1cyA9IGNyeXB0b19oYXNfc2tjaXBoZXIoZWFsZ19saXN0W2ldLm5hbWUsIDAsIDApO1xcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjgzNDpcXHRcXHRpZiAoZWFsZ19saXN0W2ldLmF2YWlsYWJsZSAhPSBzdGF0dXMpXFxubmV0L3hmcm0veGZybV9hbGdvLmM6ODM1OlxcdFxcdFxcdGVhbGdfbGlzdFtpXS5hdmFpbGFibGUgPSBzdGF0dXM7XFxubmV0L3hmcm0veGZybV9hbGdvLmMtODM2LVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jPTg1Nz1pbnQgeGZybV9jb3VudF9wZmtleV9lbmNfc3VwcG9ydGVkKHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2FsZ28uYy04NjEtXFx0Zm9yIChpID0gMCwgbiA9IDA7IGkgXFx1MDAzYyBlYWxnX2VudHJpZXMoKTsgaSsrKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jOjg2MjpcXHRcXHRpZiAoZWFsZ19saXN0W2ldLmF2YWlsYWJsZSBcXHUwMDI2XFx1MDAyNiBlYWxnX2xpc3RbaV0ucGZrZXlfc3VwcG9ydGVkKVxcbm5ldC94ZnJtL3hmcm1fYWxnby5jLTg2My1cXHRcXHRcXHRuKys7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA2OjQwOjI3LjQxMzY1OTI5MVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDg4MjAwMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXJpYSBFbmNyeXB0aW9uIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGNiYyhhcmlhKWAgYW5kIGByZmMzNjg2KGN0cihhcmlhKSlgIGFyZSBsaXN0ZWQgYXMgc3RhdGljIGVudHJpZXMgd2l0aGluIGBlYWxnX2xpc3RgLiBUaGlzIGlzIGEgc3RhdGljIGFycmF5LCByZXNpZGluZyBpbiBzdGF0aWMgbWVtb3J5LCB3aGljaCBtZWFucyB0aGUgQyBzdGFuZGFyZCBtYW5kYXRlcyB0aGF0IHVuaW5pdGlhbGl6ZWQgZmllbGRzIHdpbGwgYmUgemVyb2VkIGJ5IHRoZSBjb21waWxlci4gVGhlc2UgZW50cmllcyBhcmUgcmVnaXN0ZXJpbmcgc3RhbmRhcmQgc2tjaXBoZXIgZW5jcnlwdGlvbiBhbGdvcml0aG1zIGZvciBYRlJNL0lQc2VjLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZS5cblxuVGhlIGZhY3QgdGhhdCBgcGZrZXlfc3VwcG9ydGVkID0gMGAgaXMgY3J1Y2lhbC4gVGhpcyBtZWFucyB0aGVzZSBhbGdvcml0aG1zIGFyZW4ndCBleHBvc2VkIHRocm91Z2ggUEZfS0VZIGRpcmVjdGx5OyBpbnN0ZWFkLCB0aGV5IGFyZSBvbmx5IGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgWEZSTV9NU0dfKiBjYWxscywgYmFzZWQgb24gbmFtZS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBhbSBJIGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIGluIHRoZSBhcmlhIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMsIG9yIGlzIHRoaXMganVzdCBzdHJhaWdodGZvcndhcmQgY29uZmlndXJhdGlvbiBhbmQgdGFibGUgcG9wdWxhdGlvbj9cblxuSG9sZCBvbi4uLiBJIGJlbGlldmUgSSBoYXZlIGFuIGFuc3dlci4gVGhlIFwiYXJpYVwiIGNyeXB0byBtb2R1bGUgYWxyZWFkeSBzZWVtcyB0byBleGlzdCwgc3BlY2lmaWNhbGx5IGluIGBjcnlwdG8vYXJpYSouY2Agb3IgcG9zc2libHkgdGhlIGdlbmVyaWMgdmVyc2lvbiwgYGNyeXB0by9hcmlhX2dlbmVyaWMuY2AuIE5vdyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRob3NlIGZpbGVzIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaXNzdWVzIGhpZGluZyB0aGVyZSwgYmVmb3JlIG1vdmluZyBhbnkgZnVydGhlci4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBgY3J5cHRvL2FyaWEqYCBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNjo0MDozMC41MDE4ODI5NDFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjk1NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmlhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImNyeXB0by9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiY3J5cHRvL0tjb25maWc9Mzg4PWNvbmZpZyBDUllQVE9fQU5VQklTXFxuLS1cXG5jcnlwdG8vS2NvbmZpZy0zOTQtXFxuY3J5cHRvL0tjb25maWc6Mzk1OlxcdCAgQW51YmlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb21cXG5jcnlwdG8vS2NvbmZpZy0zOTYtXFx0ICAxMjggYml0cyB0byAzMjAgYml0cyBpbiBsZW5ndGguICBJdCB3YXMgZXZhbHVhdGVkIGFzIGEgZW50cmFudFxcbi0tXFxuY3J5cHRvL0tjb25maWc9NDE3PWNvbmZpZyBDUllQVE9fQkxPV0ZJU0hcXG4tLVxcbmNyeXB0by9LY29uZmlnLTQyMy1cXG5jcnlwdG8vS2NvbmZpZzo0MjQ6XFx0ICBUaGlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0aCBjaXBoZXIgd2hpY2ggY2FuIHVzZSBrZXlzIGZyb20gMzJcXG5jcnlwdG8vS2NvbmZpZy00MjUtXFx0ICBiaXRzIHRvIDQ0OCBiaXRzIGluIGxlbmd0aC4gIEl0J3MgZmFzdCwgc2ltcGxlIGFuZCBzcGVjaWZpY2FsbHlcXG4tLVxcbmNyeXB0by9LY29uZmlnPTY2Nz1jb25maWcgQ1JZUFRPX0NUU1xcbi0tXFxuY3J5cHRvL0tjb25maWctNjcxLVxcdGhlbHBcXG5jcnlwdG8vS2NvbmZpZzo2NzI6XFx0ICBDQkMtQ1MzIHZhcmlhbnQgb2YgQ1RTIChDaXBoZXIgVGV4dCBTdGVhbGluZykgKE5JU1RcXG5jcnlwdG8vS2NvbmZpZy02NzMtXFx0ICBBZGRlbmR1bSB0byBTUDgwMC0zOEEgKE9jdG9iZXIgMjAxMCkpXFxuLS1cXG5jcnlwdG8vS2NvbmZpZz03MTc9Y29uZmlnIENSWVBUT19YQ1RSXFxuLS1cXG5jcnlwdG8vS2NvbmZpZy03MjMtXFxuY3J5cHRvL0tjb25maWc6NzI0OlxcdCAgVGhpcyBibG9ja2NpcGhlciBtb2RlIGlzIGEgdmFyaWFudCBvZiBDVFIgbW9kZSB1c2luZyBYT1JzIGFuZCBsaXR0bGUtZW5kaWFuXFxuY3J5cHRvL0tjb25maWctNzI1LVxcdCAgYWRkaXRpb24gcmF0aGVyIHRoYW4gYmlnLWVuZGlhbiBhcml0aG1ldGljLlxcbi0tXFxuY3J5cHRvL0tjb25maWc9MTEzOD1jaG9pY2VcXG4tLVxcbmNyeXB0by9LY29uZmlnLTExNDUtXFx0ICB0byB0aGF0IGNhY2hlIGlzIG1lYXN1cmVkLiBUaGUgY2xvc2VyIHRoZSBjYWNoZSBpcyB0byB0aGUgQ1BVXFxuY3J5cHRvL0tjb25maWc6MTE0NjpcXHQgIHRoZSBsZXNzIHZhcmlhdGlvbnMgYXJlIG1lYXN1cmVkIGFuZCB0aHVzIHRoZSBsZXNzIGVudHJvcHkgaXNcXG5jcnlwdG8vS2NvbmZpZy0xMTQ3LVxcdCAgb2J0YWluZWQuIFRodXMsIGlmIHRoZSBtZW1vcnkgc2l6ZSBmaXRzIGludG8gdGhlIEwxIGNhY2hlLCB0aGVcXG4tLVxcbmNyeXB0by9NYWtlZmlsZT0xNDM9b2JqLSQoQ09ORklHX0NSWVBUT19TRUVEKSArPSBzZWVkLm9cXG5jcnlwdG8vTWFrZWZpbGU6MTQ0Om9iai0kKENPTkZJR19DUllQVE9fQVJJQSkgKz0gYXJpYV9nZW5lcmljLm9cXG5jcnlwdG8vTWFrZWZpbGUtMTQ1LW9iai0kKENPTkZJR19DUllQVE9fQ0hBQ0hBMjApICs9IGNoYWNoYS5vXFxuLS1cXG5jcnlwdG8vYWRpYW50dW0uYy00Ni0vKlxcbmNyeXB0by9hZGlhbnR1bS5jOjQ3OiAqIFRoZSBzcGVjaWZpY2F0aW9uIGFsbG93cyB2YXJpYWJsZS1sZW5ndGggdHdlYWtzLCBidXQgTGludXgncyBjcnlwdG8gQVBJXFxuY3J5cHRvL2FkaWFudHVtLmMtNDgtICogY3VycmVudGx5IG9ubHkgYWxsb3dzIGFsZ29yaXRobXMgdG8gc3VwcG9ydCBhIHNpbmdsZSBsZW5ndGguICBUaGUgXFxcIm5hdHVyYWxcXFwiXFxuLS1cXG5jcnlwdG8vYWVzLmM9ODk5PXN0YXRpYyBpbnQgY3J5cHRvX2Flc19jY21faW5pdChzdHJ1Y3QgYWVzX2NjbV9jdHggKmN0eCxcXG4tLVxcbmNyeXB0by9hZXMuYy05MDctXFx0LypcXG5jcnlwdG8vYWVzLmM6OTA4OlxcdCAqIENDTSBhY2NlcHRzIGEgdmFyaWFibGUtbGVuZ3RoIG5vbmNlIGJldHdlZW4gNyBhbmQgMTMgYnl0ZXNcXG5jcnlwdG8vYWVzLmMtOTA5LVxcdCAqIGluY2x1c2l2ZWx5LCB3aGlsZSBjcnlwdG9fYWVhZCBhc3N1bWVzIGEgZml4ZWQtbGVuZ3RoIElWLiAgVGhpcyBpc1xcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE2LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNzojaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2FyaWEuaFxcdTAwM2VcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jPTIwPXN0YXRpYyBjb25zdCB1MzIga2V5X3JjWzIwXSA9IHtcXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNy1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjg6c3RhdGljIHZvaWQgYXJpYV9zZXRfZW5jcnlwdF9rZXkoc3RydWN0IGFyaWFfY3R4ICpjdHgsIGNvbnN0IHU4ICppbl9rZXksXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI5LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQga2V5X2xlbilcXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy00Ny1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6NDg6XFx0YXJpYV9zdWJzdF9kaWZmX29kZChcXHUwMDI2cmVnMCwgXFx1MDAyNnJlZzEsIFxcdTAwMjZyZWcyLCBcXHUwMDI2cmVnMyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTQ5LVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTgxLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzo4MjpcXHRhcmlhX3N1YnN0X2RpZmZfZXZlbihcXHUwMDI2cmVnMCwgXFx1MDAyNnJlZzEsIFxcdTAwMjZyZWcyLCBcXHUwMDI2cmVnMyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTgzLVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTk4LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzo5OTpcXHRhcmlhX3N1YnN0X2RpZmZfb2RkKFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTAwLVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEwNS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTA2OlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDE5KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTA3LVxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEwODpcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCAxOSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEwOS1cXHRya2lkeCsrO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMTA6XFx0YXJpYV9nc3JrKGN0eC1cXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgMTkpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMTEtXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTEyOlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MywgdzAsIDE5KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTEzLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMTQtXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTE1OlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDMxKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTE2LVxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjExNzpcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCAzMSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTExOC1cXHRya2lkeCsrO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMTk6XFx0YXJpYV9nc3JrKGN0eC1cXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgMzEpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjAtXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTIxOlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MywgdzAsIDMxKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTIyLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjMtXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTI0OlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDY3KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTI1LVxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEyNjpcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCA2Nyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEyNy1cXHRya2lkeCsrO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMjg6XFx0YXJpYV9nc3JrKGN0eC1cXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgNjcpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMjktXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTMwOlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MywgdzAsIDY3KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTMxLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMzItXFx0cmtpZHgrKztcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTMzOlxcdGFyaWFfZ3NyayhjdHgtXFx1MDAzZWVuY19rZXlbcmtpZHhdLCB3MCwgdzEsIDk3KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTM0LVxcdGlmIChrZXlfbGVuIFxcdTAwM2UgMTYpIHtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTM1LVxcdFxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjEzNjpcXHRcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzEsIHcyLCA5Nyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTEzNy1cXHRcXHRya2lkeCsrO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxMzg6XFx0XFx0YXJpYV9nc3JrKGN0eC1cXHUwMDNlZW5jX2tleVtya2lkeF0sIHcyLCB3MywgOTcpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xMzktXFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTQxLVxcdFxcdFxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE0MjpcXHRcXHRcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzMsIHcwLCA5Nyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0My1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTQ0LVxcdFxcdFxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE0NTpcXHRcXHRcXHRhcmlhX2dzcmsoY3R4LVxcdTAwM2VlbmNfa2V5W3JraWR4XSwgdzAsIHcxLCAxMDkpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNDYtXFx0XFx0fVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE0OS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTUwOnN0YXRpYyB2b2lkIGFyaWFfc2V0X2RlY3J5cHRfa2V5KHN0cnVjdCBhcmlhX2N0eCAqY3R4KVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNTEte1xcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE1OS1cXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgY3R4LVxcdTAwM2Vyb3VuZHM7IGkrKykge1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjA6XFx0XFx0Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzBdID0gYXJpYV9tKGN0eC1cXHUwMDNlZW5jX2tleVtjdHgtXFx1MDAzZXJvdW5kcyAtIGldWzBdKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTYxOlxcdFxcdGN0eC1cXHUwMDNlZGVjX2tleVtpXVsxXSA9IGFyaWFfbShjdHgtXFx1MDAzZWVuY19rZXlbY3R4LVxcdTAwM2Vyb3VuZHMgLSBpXVsxXSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE2MjpcXHRcXHRjdHgtXFx1MDAzZWRlY19rZXlbaV1bMl0gPSBhcmlhX20oY3R4LVxcdTAwM2VlbmNfa2V5W2N0eC1cXHUwMDNlcm91bmRzIC0gaV1bMl0pO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjM6XFx0XFx0Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzNdID0gYXJpYV9tKGN0eC1cXHUwMDNlZW5jX2tleVtjdHgtXFx1MDAzZXJvdW5kcyAtIGldWzNdKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTY0LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoxNjU6XFx0XFx0YXJpYV9kaWZmX3dvcmQoXFx1MDAyNmN0eC1cXHUwMDNlZGVjX2tleVtpXVswXSwgXFx1MDAyNmN0eC1cXHUwMDNlZGVjX2tleVtpXVsxXSxcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTY2LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzJdLCBcXHUwMDI2Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzNdKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTY3OlxcdFxcdGFyaWFfZGlmZl9ieXRlKFxcdTAwMjZjdHgtXFx1MDAzZWRlY19rZXlbaV1bMV0sXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE2OC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNmN0eC1cXHUwMDNlZGVjX2tleVtpXVsyXSwgXFx1MDAyNmN0eC1cXHUwMDNlZGVjX2tleVtpXVszXSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE2OTpcXHRcXHRhcmlhX2RpZmZfd29yZChcXHUwMDI2Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzBdLCBcXHUwMDI2Y3R4LVxcdTAwM2VkZWNfa2V5W2ldWzFdLFxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xNzAtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjdHgtXFx1MDAzZWRlY19rZXlbaV1bMl0sIFxcdTAwMjZjdHgtXFx1MDAzZWRlY19rZXlbaV1bM10pO1xcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE3My1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTc0OmludCBhcmlhX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwgdW5zaWduZWQgaW50IGtleV9sZW4pXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE3NS17XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE3NjpcXHRzdHJ1Y3QgYXJpYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE3Ny1cXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xODctXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE4ODpcXHRhcmlhX3NldF9lbmNyeXB0X2tleShjdHgsIGluX2tleSwga2V5X2xlbik7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjE4OTpcXHRhcmlhX3NldF9kZWNyeXB0X2tleShjdHgpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xOTAtXFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMTkyLX1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTkzOkVYUE9SVF9TWU1CT0xfR1BMKGFyaWFfc2V0X2tleSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTE5NC1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MTk1OnN0YXRpYyB2b2lkIF9fYXJpYV9jcnlwdChzdHJ1Y3QgYXJpYV9jdHggKmN0eCwgdTggKm91dCwgY29uc3QgdTggKmluLFxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0xOTYtXFx0XFx0XFx0IHUzMiBrZXlbXVtBUklBX1JEX0tFWV9XT1JEU10pXFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjA3LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMDg6XFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjA5LVxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIxMC1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjExOlxcdGFyaWFfc3Vic3RfZGlmZl9vZGQoXFx1MDAyNnJlZzAsIFxcdTAwMjZyZWcxLCBcXHUwMDI2cmVnMiwgXFx1MDAyNnJlZzMpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTI6XFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjEzLVxcdHJraWR4Kys7XFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjE1LVxcdHdoaWxlICgocm91bmRzIC09IDIpIFxcdTAwM2UgMCkge1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTY6XFx0XFx0YXJpYV9zdWJzdF9kaWZmX2V2ZW4oXFx1MDAyNnJlZzAsIFxcdTAwMjZyZWcxLCBcXHUwMDI2cmVnMiwgXFx1MDAyNnJlZzMpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMTc6XFx0XFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjE4LVxcdFxcdHJraWR4Kys7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTIxOS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjIwOlxcdFxcdGFyaWFfc3Vic3RfZGlmZl9vZGQoXFx1MDAyNnJlZzAsIFxcdTAwMjZyZWcxLCBcXHUwMDI2cmVnMiwgXFx1MDAyNnJlZzMpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyMjE6XFx0XFx0YXJpYV9hZGRfcm91bmRfa2V5KGtleVtya2lkeF0sIFxcdTAwMjZyZWcwLCBcXHUwMDI2cmVnMSwgXFx1MDAyNnJlZzIsIFxcdTAwMjZyZWczKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjIyLVxcdFxcdHJraWR4Kys7XFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjQ3LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNDg6dm9pZCBhcmlhX2VuY3J5cHQodm9pZCAqX2N0eCwgdTggKm91dCwgY29uc3QgdTggKmluKVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNDkte1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNTA6XFx0c3RydWN0IGFyaWFfY3R4ICpjdHggPSAoc3RydWN0IGFyaWFfY3R4ICopX2N0eDtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjUxLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNTI6XFx0X19hcmlhX2NyeXB0KGN0eCwgb3V0LCBpbiwgY3R4LVxcdTAwM2VlbmNfa2V5KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjUzLX1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjU0OkVYUE9SVF9TWU1CT0xfR1BMKGFyaWFfZW5jcnlwdCk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI1NS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjU2OnZvaWQgYXJpYV9kZWNyeXB0KHZvaWQgKl9jdHgsIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjU3LXtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjU4OlxcdHN0cnVjdCBhcmlhX2N0eCAqY3R4ID0gKHN0cnVjdCBhcmlhX2N0eCAqKV9jdHg7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI1OS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjYwOlxcdF9fYXJpYV9jcnlwdChjdHgsIG91dCwgaW4sIGN0eC1cXHUwMDNlZGVjX2tleSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2MS19XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2MjpFWFBPUlRfU1lNQk9MX0dQTChhcmlhX2RlY3J5cHQpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yNjMtXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2NDpzdGF0aWMgdm9pZCBfX2FyaWFfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2NS17XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI2NjpcXHRzdHJ1Y3QgYXJpYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2Ny1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjY4OlxcdF9fYXJpYV9jcnlwdChjdHgsIG91dCwgaW4sIGN0eC1cXHUwMDNlZW5jX2tleSk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI2OS19XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI3MC1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjcxOnN0YXRpYyB2b2lkIF9fYXJpYV9kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbilcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjcyLXtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjczOlxcdHN0cnVjdCBhcmlhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjc0LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzU6XFx0X19hcmlhX2NyeXB0KGN0eCwgb3V0LCBpbiwgY3R4LVxcdTAwM2VkZWNfa2V5KTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjc2LX1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjc3LVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzg6c3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFyaWFfYWxnID0ge1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyNzk6XFx0LmNyYV9uYW1lXFx0XFx0PVxcdFxcXCJhcmlhXFxcIixcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MjgwOlxcdC5jcmFfZHJpdmVyX25hbWVcXHQ9XFx0XFxcImFyaWEtZ2VuZXJpY1xcXCIsXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTI4MS1cXHQuY3JhX3ByaW9yaXR5XFx0XFx0PVxcdDEwMCxcXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yODMtXFx0LmNyYV9ibG9ja3NpemVcXHRcXHQ9XFx0QVJJQV9CTE9DS19TSVpFLFxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzoyODQ6XFx0LmNyYV9jdHhzaXplXFx0XFx0PVxcdHNpemVvZihzdHJ1Y3QgYXJpYV9jdHgpLFxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yODUtXFx0LmNyYV9tb2R1bGVcXHRcXHQ9XFx0VEhJU19NT0RVTEUsXFxuLS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjg5LVxcdFxcdFxcdC5jaWFfbWF4X2tleXNpemVcXHQ9XFx0QVJJQV9NQVhfS0VZX1NJWkUsXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5MDpcXHRcXHRcXHQuY2lhX3NldGtleVxcdFxcdD1cXHRhcmlhX3NldF9rZXksXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5MTpcXHRcXHRcXHQuY2lhX2VuY3J5cHRcXHRcXHQ9XFx0X19hcmlhX2VuY3J5cHQsXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5MjpcXHRcXHRcXHQuY2lhX2RlY3J5cHRcXHRcXHQ9XFx0X19hcmlhX2RlY3J5cHRcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjkzLVxcdFxcdH1cXG4tLVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0yOTYtXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjI5NzpzdGF0aWMgaW50IF9faW5pdCBhcmlhX2luaXQodm9pZClcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMjk4LXtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6Mjk5OlxcdHJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKFxcdTAwMjZhcmlhX2FsZyk7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwMC19XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jLTMwMS1cXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MzAyOnN0YXRpYyB2b2lkIF9fZXhpdCBhcmlhX2Zpbmkodm9pZClcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzAzLXtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmM6MzA0OlxcdGNyeXB0b191bnJlZ2lzdGVyX2FsZyhcXHUwMDI2YXJpYV9hbGcpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0zMDUtfVxcbmNyeXB0by9hcmlhX2dlbmVyaWMuYy0zMDYtXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMwNzptb2R1bGVfaW5pdChhcmlhX2luaXQpO1xcbmNyeXB0by9hcmlhX2dlbmVyaWMuYzozMDg6bW9kdWxlX2V4aXQoYXJpYV9maW5pKTtcXG5jcnlwdG8vYXJpYV9nZW5lcmljLmMtMzA5LVxcbi0tXFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jPTMxMj1NT0RVTEVfQVVUSE9SKFxcXCJUYWVoZWUgWW9vIFxcdTAwM2NhcDQyMDA3M0BnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMxMzpNT0RVTEVfQUxJQVNfQ1JZUFRPKFxcXCJhcmlhXFxcIik7XFxuY3J5cHRvL2FyaWFfZ2VuZXJpYy5jOjMxNDpNT0RVTEVfQUxJQVNfQ1JZUFRPKFxcXCJhcmlhLWdlbmVyaWNcXFwiKTtcXG4tLVxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMT03Nz1TaWduZXJJbmZvIDo6PSBTRVFVRU5DRSB7XFxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzNy5hc24xLTc4LVxcdHZlcnNpb25cXHRcXHRcXHRJTlRFR0VSICh7IHBrY3M3X25vdGVfc2lnbmVyaW5mb192ZXJzaW9uIH0pLFxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMTo3OTpcXHRzaWRcXHRcXHRcXHRTaWduZXJJZGVudGlmaWVyLCAtLSBDTVMgdmFyaWFudCwgbm90IFBLQ1MjN1xcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczcuYXNuMS04MC1cXHRkaWdlc3RBbGdvcml0aG1cXHRcXHREaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyICh7IHBrY3M3X3NpZ19ub3RlX2RpZ2VzdF9hbGdvIH0pLFxcbi0tXFxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzN190cnVzdC5jPTIyPXN0YXRpYyBpbnQgcGtjczdfdmFsaWRhdGVfdHJ1c3Rfb25lKHN0cnVjdCBwa2NzN19tZXNzYWdlICpwa2NzNyxcXG4tLVxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczdfdHJ1c3QuYy01NC1cXHRcXHRcXHQgKiBpcyBhcHBhcmVudGx5IHRoZSBzYW1lIGFzIG9uZSB3ZSBhbHJlYWR5IHRydXN0LlxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczdfdHJ1c3QuYzo1NTpcXHRcXHRcXHQgKiBWZXJpZnkgdGhhdCB0aGUgdHJ1c3RlZCB2YXJpYW50IGNhbiBhbHNvIHZhbGlkYXRlXFxuY3J5cHRvL2FzeW1tZXRyaWNfa2V5cy9wa2NzN190cnVzdC5jLTU2LVxcdFxcdFxcdCAqIHRoZSBzaWduYXR1cmUgb24gdGhlIGRlc2NlbmRhbnQuXFxuLS1cXG5jcnlwdG8vYXN5bW1ldHJpY19rZXlzL3BrY3M4LmFzbjEtNy0tLVxcbmNyeXB0by9hc3ltbWV0cmljX2tleXMvcGtjczguYXNuMTo4Oi0tIFRoaXMgaXMgdGhlIHVuZW5jcnlwdGVkIHZhcmlhbnRcXG5jcnlwdG8vYXN5bW1ldHJpY19rZXlzL3BrY3M4LmFzbjEtOS0tLVxcbi0tXFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz02NDM9c3RhdGljIHZvaWQgY2FtZWxsaWFfc2V0dXAyNTYoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1MzIgKnN1YmtleSlcXG4tLVxcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtNjQ2LVxcdHUzMiBrcmxsLCBrcmxyLCBrcnJsLCBrcnJyOyAgICAvKiByaWdodCBoYWxmIG9mIGtleSAqL1xcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmM6NjQ3OlxcdHUzMiBpbCwgaXIsIHQwLCB0MSwgdzAsIHcxOyAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGVzICovXFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYy02NDgtXFx0dTMyIHN1YkxbMzRdO1xcbi0tXFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz04NDM9c3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZW5jcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgbWF4KVxcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtODQ0LXtcXG5jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jOjg0NTpcXHR1MzIgaWwsIGlyLCB0MCwgdDE7ICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyAqL1xcbmNyeXB0by9jYW1lbGxpYV9nZW5lcmljLmMtODQ2LVxcbi0tXFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYz04OTg9c3RhdGljIHZvaWQgY2FtZWxsaWFfZG9fZGVjcnlwdChjb25zdCB1MzIgKnN1YmtleSwgdTMyICppbywgdW5zaWduZWQgaSlcXG5jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jLTg5OS17XFxuY3J5cHRvL2NhbWVsbGlhX2dlbmVyaWMuYzo5MDA6XFx0dTMyIGlsLCBpciwgdDAsIHQxOyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgKi9cXG5jcnlwdG8vY2FtZWxsaWFfZ2VuZXJpYy5jLTkwMS1cXG4tLVxcbmNyeXB0by9oY3RyMi5jLTI3LS8qXFxuY3J5cHRvL2hjdHIyLmM6Mjg6ICogVGhlIHNwZWNpZmljYXRpb24gYWxsb3dzIHZhcmlhYmxlLWxlbmd0aCB0d2Vha3MsIGJ1dCBMaW51eCdzIGNyeXB0byBBUElcXG5jcnlwdG8vaGN0cjIuYy0yOS0gKiBjdXJyZW50bHkgb25seSBhbGxvd3MgYWxnb3JpdGhtcyB0byBzdXBwb3J0IGEgc2luZ2xlIGxlbmd0aC4gIFRoZSBcXFwibmF0dXJhbFxcXCJcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmM9NzA9dm9pZCBqZW50X3pmcmVlKHZvaWQgKnB0cilcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmMtNzYtICogT2J0YWluIGEgaGlnaC1yZXNvbHV0aW9uIHRpbWUgc3RhbXAgdmFsdWUuIFRoZSB0aW1lIHN0YW1wIGlzIHVzZWQgdG8gbWVhc3VyZVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LWtjYXBpLmM6Nzc6ICogdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIGEgZ2l2ZW4gY29kZSBwYXRoIGFuZCBpdHMgdmFyaWF0aW9ucy4gSGVuY2UsIHRoZSB0aW1lXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkta2NhcGkuYy03OC0gKiBzdGFtcCBtdXN0IGhhdmUgYSBzdWZmaWNpZW50bHkgaGlnaCByZXNvbHV0aW9uLlxcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jPTI2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZW50X3Jhd19kZWJ1Z2ZzX3Jvb3QgPSBOVUxMO1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jLTMwLS8qXFxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jOjMxOiAqIGJvb3QgdmFyaWFibGU6XFxuY3J5cHRvL2ppdHRlcmVudHJvcHktdGVzdGluZy5jLTMyLSAqIDAgPT1cXHUwMDNlIE5vIGJvb3QgdGVzdCwgZ2F0aGVyaW5nIG9mIHJ1bnRpbWUgZGF0YSBhbGxvd2VkXFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTY0PXN0cnVjdCByYW5kX2RhdGEge1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy0xMTYtI2RlZmluZSBKRU5UX0VOT01PTk9UT05JQ1xcdDMgLyogVGltZXIgaXMgbm90IG1vbm90b25pYyBpbmNyZWFzaW5nICovXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzoxMTc6I2RlZmluZSBKRU5UX0VWQVJWQVJcXHRcXHQ1IC8qIFRpbWVyIGRvZXMgbm90IHByb2R1Y2UgdmFyaWF0aW9ucyBvZlxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6MTE4OlxcdFxcdFxcdFxcdCAgICogdmFyaWF0aW9ucyAoMm5kIGRlcml2YXRpb24gb2YgdGltZSBpc1xcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtMTE5LVxcdFxcdFxcdFxcdCAgICogemVybykuICovXFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTQyMj1zdGF0aWMgdm9pZCBqZW50X2NvbmRpdGlvbl9kYXRhKHN0cnVjdCByYW5kX2RhdGEgKmVjLCBfX3U2NCB0aW1lLCBpbnQgc3R1Y2spXFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS5jLTQ0MS0vKlxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NDQyOiAqIE1lbW9yeSBBY2Nlc3Mgbm9pc2Ugc291cmNlIC0tIHRoaXMgaXMgYSBub2lzZSBzb3VyY2UgYmFzZWQgb24gdmFyaWF0aW9ucyBpblxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNDQzLSAqXFx0XFx0XFx0XFx0IG1lbW9yeSBhY2Nlc3MgdGltZXNcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNDQ1LSAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgbWVtb3J5IGFjY2Vzc2VzIHdoaWNoIHdpbGwgYWRkIHRvIHRoZSB0aW1pbmdcXG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjQ0NjogKiB2YXJpYXRpb25zIGR1ZSB0byBhbiB1bmtub3duIGFtb3VudCBvZiBDUFUgd2FpdCBzdGF0ZXMgdGhhdCBuZWVkIHRvIGJlXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NDctICogYWRkZWQgd2hlbiBhY2Nlc3NpbmcgbWVtb3J5LiBUaGUgbWVtb3J5IHNpemUgc2hvdWxkIGJlIGxhcmdlciB0aGFuIHRoZSBMMVxcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy00NTEtICogc2xvd2VyIHRoYW4gYWNjZXNzaW5nIENQVSByZWdpc3RlcnMuIFRoZXJlZm9yZSwgTDEgYWNjZXNzZXMgb25seSBhZGQgbWluaW1hbFxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NDUyOiAqIHZhcmlhdGlvbnMgYXMgdGhlIENQVSBoYXMgaGFyZGx5IHRvIHdhaXQuIFN0YXJ0aW5nIHdpdGggTDIsIHNpZ25pZmljYW50XFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo0NTM6ICogdmFyaWF0aW9ucyBhcmUgYWRkZWQgYmVjYXVzZSBMMiB0eXBpY2FsbHkgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBDUFUgYW55IG1vcmVcXG5jcnlwdG8vaml0dGVyZW50cm9weS5jLTQ1NC0gKiBhbmQgdGhlcmVmb3JlIGEgd2lkZXIgcmFuZ2Ugb2YgQ1BVIHdhaXQgc3RhdGVzIGlzIG5lY2Vzc2FyeSBmb3IgYWNjZXNzZXMuXFxuLS1cXG5jcnlwdG8vaml0dGVyZW50cm9weS5jPTUxOT1zdGF0aWMgaW50IGplbnRfbWVhc3VyZV9qaXR0ZXIoc3RydWN0IHJhbmRfZGF0YSAqZWMsIF9fdTY0ICpyZXRfY3VycmVudF9kZWx0YSlcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNTI0LVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmM6NTI1OlxcdC8qIEludm9rZSBvbmUgbm9pc2Ugc291cmNlIGJlZm9yZSB0aW1lIG1lYXN1cmVtZW50IHRvIGFkZCB2YXJpYXRpb25zICovXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MjYtXFx0amVudF9tZW1hY2Nlc3MoZWMsIDApO1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy01MjktXFx0ICogR2V0IHRpbWUgc3RhbXAgYW5kIGNhbGN1bGF0ZSB0aW1lIGRlbHRhIHRvIHByZXZpb3VzXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo1MzA6XFx0ICogaW52b2NhdGlvbiB0byBtZWFzdXJlIHRoZSB0aW1pbmcgdmFyaWF0aW9uc1xcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNTMxLVxcdCAqL1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYz02NTQ9c3RydWN0IHJhbmRfZGF0YSAqamVudF9lbnRyb3B5X2NvbGxlY3Rvcl9hbGxvYyh1bnNpZ25lZCBpbnQgb3NyLFxcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy02NjQtXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBKRU5UX0RJU0FCTEVfTUVNT1JZX0FDQ0VTUykpIHtcXG5jcnlwdG8vaml0dGVyZW50cm9weS5jOjY2NTpcXHRcXHQvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGFkZGluZyB2YXJpYXRpb25zIGJhc2VkIG9uIG1lbW9yeVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNjY2LVxcdFxcdCAqIGFjY2Vzc1xcbi0tXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYz03MDQ9aW50IGplbnRfZW50cm9weV9pbml0KHVuc2lnbmVkIGludCBvc3IsIHVuc2lnbmVkIGludCBmbGFncyxcXG4tLVxcbmNyeXB0by9qaXR0ZXJlbnRyb3B5LmMtNzgzLVxcdFxcdC8qXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYzo3ODQ6XFx0XFx0ICogdXAgdG8gaGVyZSB3ZSBkaWQgbm90IG1vZGlmeSBhbnkgdmFyaWFibGUgdGhhdCB3aWxsIGJlXFxuY3J5cHRvL2ppdHRlcmVudHJvcHkuYy03ODUtXFx0XFx0ICogZXZhbHVhdGVkIGxhdGVyLCBidXQgd2UgYWxyZWFkeSBwZXJmb3JtZWQgc29tZSB3b3JrLiBUaHVzIHdlXFxuLS1cXG5jcnlwdG8vc2VycGVudF9nZW5lcmljLmMtMjI0LSAqIGJvdGggZ2NjIGFuZCBjbGFuZyBoYXZlIG1pc29wdGltaXplZCB0aGlzIGZ1bmN0aW9uIGluIHRoZSBwYXN0LFxcbmNyeXB0by9zZXJwZW50X2dlbmVyaWMuYzoyMjU6ICogcHJvZHVjaW5nIGhvcnJpYmxlIG9iamVjdCBjb2RlIGZyb20gc3BpbGxpbmcgdGVtcG9yYXJ5IHZhcmlhYmxlc1xcbmNyeXB0by9zZXJwZW50X2dlbmVyaWMuYy0yMjYtICogb24gdGhlIHN0YWNrLiBGb3JjaW5nIHRoaXMgcGFydCBvdXQgb2YgbGluZSBhdm9pZHMgdGhhdC5cXG4tLVxcbmNyeXB0by90Y3J5cHQuYz0xNDU4PXN0YXRpYyBpbnQgZG9fdGVzdChjb25zdCBjaGFyICphbGcsIHUzMiB0eXBlLCB1MzIgbWFzaywgaW50IG0sIHUzMiBudW1fbWIpXFxuLS1cXG5jcnlwdG8vdGNyeXB0LmMtMTY4Ny1cXHRjYXNlIDU4OlxcbmNyeXB0by90Y3J5cHQuYzoxNjg4OlxcdFxcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFxcXCJnY20oYXJpYSlcXFwiKSk7XFxuY3J5cHRvL3RjcnlwdC5jLTE2ODktXFx0XFx0YnJlYWs7XFxuLS1cXG5jcnlwdG8vdGNyeXB0LmMtMTgyNy1cXHRjYXNlIDE5MjpcXG5jcnlwdG8vdGNyeXB0LmM6MTgyODpcXHRcXHRyZXQgPSBtaW4ocmV0LCB0Y3J5cHRfdGVzdChcXFwiZWNiKGFyaWEpXFxcIikpO1xcbmNyeXB0by90Y3J5cHQuYzoxODI5OlxcdFxcdHJldCA9IG1pbihyZXQsIHRjcnlwdF90ZXN0KFxcXCJjYmMoYXJpYSlcXFwiKSk7XFxuY3J5cHRvL3RjcnlwdC5jOjE4MzA6XFx0XFx0cmV0ID0gbWluKHJldCwgdGNyeXB0X3Rlc3QoXFxcImN0cihhcmlhKVxcXCIpKTtcXG5jcnlwdG8vdGNyeXB0LmMtMTgzMS1cXHRcXHRicmVhaztcXG4tLVxcbmNyeXB0by90Y3J5cHQuYy0yMTYxLVxcdGNhc2UgMjI3OlxcbmNyeXB0by90Y3J5cHQuYzoyMTYyOlxcdFxcdHRlc3RfY2lwaGVyX3NwZWVkKFxcXCJlY2IoYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXFxuY3J5cHRvL3RjcnlwdC5jLTIxNjMtXFx0XFx0XFx0XFx0ICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XFxuY3J5cHRvL3RjcnlwdC5jOjIxNjQ6XFx0XFx0dGVzdF9jaXBoZXJfc3BlZWQoXFxcImVjYihhcmlhKVxcXCIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjE2NS1cXHRcXHRcXHRcXHQgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG5jcnlwdG8vdGNyeXB0LmM6MjE2NjpcXHRcXHR0ZXN0X2NpcGhlcl9zcGVlZChcXFwiY2JjKGFyaWEpXFxcIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yMTY3LVxcdFxcdFxcdFxcdCAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xcbmNyeXB0by90Y3J5cHQuYzoyMTY4OlxcdFxcdHRlc3RfY2lwaGVyX3NwZWVkKFxcXCJjYmMoYXJpYSlcXFwiLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsXFxuY3J5cHRvL3RjcnlwdC5jLTIxNjktXFx0XFx0XFx0XFx0ICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XFxuY3J5cHRvL3RjcnlwdC5jOjIxNzA6XFx0XFx0dGVzdF9jaXBoZXJfc3BlZWQoXFxcImN0cihhcmlhKVxcXCIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjE3MS1cXHRcXHRcXHRcXHQgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG5jcnlwdG8vdGNyeXB0LmM6MjE3MjpcXHRcXHR0ZXN0X2NpcGhlcl9zcGVlZChcXFwiY3RyKGFyaWEpXFxcIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yMTczLVxcdFxcdFxcdFxcdCAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xcbi0tXFxuY3J5cHRvL3RjcnlwdC5jLTIxNzYtXFx0Y2FzZSAyMjg6XFxuY3J5cHRvL3RjcnlwdC5jOjIxNzc6XFx0XFx0dGVzdF9hZWFkX3NwZWVkKFxcXCJnY20oYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsXFxuY3J5cHRvL3RjcnlwdC5jLTIxNzgtXFx0XFx0XFx0XFx0TlVMTCwgMCwgMTYsIDgsIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG5jcnlwdG8vdGNyeXB0LmM6MjE3OTpcXHRcXHR0ZXN0X2FlYWRfc3BlZWQoXFxcImdjbShhcmlhKVxcXCIsIERFQ1JZUFQsIHNlYyxcXG5jcnlwdG8vdGNyeXB0LmMtMjE4MC1cXHRcXHRcXHRcXHROVUxMLCAwLCAxNiwgOCwgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xcbi0tXFxuY3J5cHRvL3RjcnlwdC5jLTIxODMtXFx0Y2FzZSAyMjk6XFxuY3J5cHRvL3RjcnlwdC5jOjIxODQ6XFx0XFx0dGVzdF9tYl9hZWFkX3NwZWVkKFxcXCJnY20oYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsIDE2LCA4LFxcbmNyeXB0by90Y3J5cHQuYy0yMTg1LVxcdFxcdFxcdFxcdCAgIHNwZWVkX3RlbXBsYXRlXzE2LCBudW1fbWIpO1xcbmNyeXB0by90Y3J5cHQuYzoyMTg2OlxcdFxcdHRlc3RfbWJfYWVhZF9zcGVlZChcXFwiZ2NtKGFyaWEpXFxcIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLCAxNiwgOCxcXG5jcnlwdG8vdGNyeXB0LmMtMjE4Ny1cXHRcXHRcXHRcXHQgICBzcGVlZF90ZW1wbGF0ZV8xNiwgbnVtX21iKTtcXG4tLVxcbmNyeXB0by90Y3J5cHQuYy0yNTY5LVxcdGNhc2UgNTE5OlxcbmNyeXB0by90Y3J5cHQuYzoyNTcwOlxcdFxcdHRlc3RfYWNpcGhlcl9zcGVlZChcXFwiZWNiKGFyaWEpXFxcIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yNTcxLVxcdFxcdFxcdFxcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG5jcnlwdG8vdGNyeXB0LmM6MjU3MjpcXHRcXHR0ZXN0X2FjaXBoZXJfc3BlZWQoXFxcImVjYihhcmlhKVxcXCIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjU3My1cXHRcXHRcXHRcXHQgICBzcGVlZF90ZW1wbGF0ZV8xNl8yNF8zMik7XFxuY3J5cHRvL3RjcnlwdC5jOjI1NzQ6XFx0XFx0dGVzdF9hY2lwaGVyX3NwZWVkKFxcXCJjdHIoYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXFxuY3J5cHRvL3RjcnlwdC5jLTI1NzUtXFx0XFx0XFx0XFx0ICAgc3BlZWRfdGVtcGxhdGVfMTZfMjRfMzIpO1xcbmNyeXB0by90Y3J5cHQuYzoyNTc2OlxcdFxcdHRlc3RfYWNpcGhlcl9zcGVlZChcXFwiY3RyKGFyaWEpXFxcIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yNTc3LVxcdFxcdFxcdFxcdCAgIHNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTtcXG4tLVxcbmNyeXB0by90Y3J5cHQuYy0yNzczLVxcdGNhc2UgNjEwOlxcbmNyeXB0by90Y3J5cHQuYzoyNzc0OlxcdFxcdHRlc3RfbWJfc2tjaXBoZXJfc3BlZWQoXFxcImVjYihhcmlhKVxcXCIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjc3NS1cXHRcXHRcXHRcXHQgICAgICAgc3BlZWRfdGVtcGxhdGVfMTZfMzIsIG51bV9tYik7XFxuY3J5cHRvL3RjcnlwdC5jOjI3NzY6XFx0XFx0dGVzdF9tYl9za2NpcGhlcl9zcGVlZChcXFwiZWNiKGFyaWEpXFxcIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLFxcbmNyeXB0by90Y3J5cHQuYy0yNzc3LVxcdFxcdFxcdFxcdCAgICAgICBzcGVlZF90ZW1wbGF0ZV8xNl8zMiwgbnVtX21iKTtcXG5jcnlwdG8vdGNyeXB0LmM6Mjc3ODpcXHRcXHR0ZXN0X21iX3NrY2lwaGVyX3NwZWVkKFxcXCJjdHIoYXJpYSlcXFwiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsXFxuY3J5cHRvL3RjcnlwdC5jLTI3NzktXFx0XFx0XFx0XFx0ICAgICAgIHNwZWVkX3RlbXBsYXRlXzE2XzMyLCBudW1fbWIpO1xcbmNyeXB0by90Y3J5cHQuYzoyNzgwOlxcdFxcdHRlc3RfbWJfc2tjaXBoZXJfc3BlZWQoXFxcImN0cihhcmlhKVxcXCIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCxcXG5jcnlwdG8vdGNyeXB0LmMtMjc4MS1cXHRcXHRcXHRcXHQgICAgICAgc3BlZWRfdGVtcGxhdGVfMTZfMzIsIG51bV9tYik7XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5jPTQwNDk9c3RhdGljIGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjIGFsZ190ZXN0X2Rlc2NzW10gPSB7XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5jLTQzNDAtXFx0fSwge1xcbmNyeXB0by90ZXN0bWdyLmM6NDM0MTpcXHRcXHQuYWxnID0gXFxcImNiYyhhcmlhKVxcXCIsXFxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQyLVxcdFxcdC50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsXFxuY3J5cHRvL3Rlc3RtZ3IuYy00MzQzLVxcdFxcdC5zdWl0ZSA9IHtcXG5jcnlwdG8vdGVzdG1nci5jOjQzNDQ6XFx0XFx0XFx0LmNpcGhlciA9IF9fVkVDUyhhcmlhX2NiY190dl90ZW1wbGF0ZSlcXG5jcnlwdG8vdGVzdG1nci5jLTQzNDUtXFx0XFx0fSxcXG4tLVxcbmNyeXB0by90ZXN0bWdyLmMtNDUxMy1cXHR9LCB7XFxuY3J5cHRvL3Rlc3RtZ3IuYzo0NTE0OlxcdFxcdC5hbGcgPSBcXFwiY3RyKGFyaWEpXFxcIixcXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTUtXFx0XFx0LnRlc3QgPSBhbGdfdGVzdF9za2NpcGhlcixcXG5jcnlwdG8vdGVzdG1nci5jLTQ1MTYtXFx0XFx0LnN1aXRlID0ge1xcbmNyeXB0by90ZXN0bWdyLmM6NDUxNzpcXHRcXHRcXHQuY2lwaGVyID0gX19WRUNTKGFyaWFfY3RyX3R2X3RlbXBsYXRlKVxcbmNyeXB0by90ZXN0bWdyLmMtNDUxOC1cXHRcXHR9XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5jLTQ2NzQtXFx0fSwge1xcbmNyeXB0by90ZXN0bWdyLmM6NDY3NTpcXHRcXHQuYWxnID0gXFxcImVjYihhcmlhKVxcXCIsXFxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc2LVxcdFxcdC50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsXFxuY3J5cHRvL3Rlc3RtZ3IuYy00Njc3LVxcdFxcdC5zdWl0ZSA9IHtcXG5jcnlwdG8vdGVzdG1nci5jOjQ2Nzg6XFx0XFx0XFx0LmNpcGhlciA9IF9fVkVDUyhhcmlhX3R2X3RlbXBsYXRlKVxcbmNyeXB0by90ZXN0bWdyLmMtNDY3OS1cXHRcXHR9XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5jLTQ4OTgtXFx0fSwge1xcbmNyeXB0by90ZXN0bWdyLmM6NDg5OTpcXHRcXHQuYWxnID0gXFxcImdjbShhcmlhKVxcXCIsXFxuY3J5cHRvL3Rlc3RtZ3IuYzo0OTAwOlxcdFxcdC5nZW5lcmljX2RyaXZlciA9IFxcXCJnY21fYmFzZShjdHIoYXJpYS1nZW5lcmljKSxnaGFzaC1saWIpXFxcIixcXG5jcnlwdG8vdGVzdG1nci5jLTQ5MDEtXFx0XFx0LnRlc3QgPSBhbGdfdGVzdF9hZWFkLFxcbmNyeXB0by90ZXN0bWdyLmMtNDkwMi1cXHRcXHQuc3VpdGUgPSB7XFxuY3J5cHRvL3Rlc3RtZ3IuYzo0OTAzOlxcdFxcdFxcdC5hZWFkID0gX19WRUNTKGFyaWFfZ2NtX3R2X3RlbXBsYXRlKVxcbmNyeXB0by90ZXN0bWdyLmMtNDkwNC1cXHRcXHR9XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5oPTI2MjgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgc2VlZF90dl90ZW1wbGF0ZVtdID0ge1xcbi0tXFxuY3J5cHRvL3Rlc3RtZ3IuaC0yNjMyMS0gKi9cXG5jcnlwdG8vdGVzdG1nci5oOjI2MzIyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYXJpYV90dl90ZW1wbGF0ZVtdID0ge1xcbmNyeXB0by90ZXN0bWdyLmgtMjYzMjMtXFx0e1xcbi0tXFxuY3J5cHRvL3Rlc3RtZ3IuaC0yNjM1NS1cXG5jcnlwdG8vdGVzdG1nci5oOjI2MzU2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYXJpYV9jYmNfdHZfdGVtcGxhdGVbXSA9IHtcXG5jcnlwdG8vdGVzdG1nci5oLTI2MzU3LVxcdHtcXG4tLVxcbmNyeXB0by90ZXN0bWdyLmgtMjcyNTktXFxuY3J5cHRvL3Rlc3RtZ3IuaDoyNzI2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGFyaWFfY3RyX3R2X3RlbXBsYXRlW10gPSB7XFxuY3J5cHRvL3Rlc3RtZ3IuaC0yNzI2MS1cXHR7XFxuLS1cXG5jcnlwdG8vdGVzdG1nci5oLTI4MTYzLVxcbmNyeXB0by90ZXN0bWdyLmg6MjgxNjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBhZWFkX3Rlc3R2ZWMgYXJpYV9nY21fdHZfdGVtcGxhdGVbXSA9IHtcXG5jcnlwdG8vdGVzdG1nci5oLTI4MTY1LVxcdHtcXG4tLVxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jPTEwOT1zdGF0aWMgY29uc3QgdTMyIG1kc1s0XVsyNTZdID0ge1xcbi0tXFxuY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmMtMzEzLSAqIGZyb20gdGhlIFR3b2Zpc2ggcGFwZXIuICBJJ3ZlIG9ubHkgaW5jbHVkZWQgdGhlIHRhYmxlIGVudHJpZXMgSSBhY3R1YWxseVxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jOjMxNDogKiBuZWVkOyBJIG5ldmVyIGRvIGEgbG9va3VwIG9uIGEgdmFyaWFibGUgaW5wdXQgb2YgemVybyBhbmQgdGhlIGJpZ2dlc3RcXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYzozMTU6ICogZXhwb25lbnRzIEknbGwgZXZlciBzZWUgYXJlIDI1NCAodmFyaWFibGUpIGFuZCAyMzcgKGNvbnN0YW50KSwgc28gdGhleSdsbFxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jLTMxNi0gKiBuZXZlciBzdW0gdG8gbW9yZSB0aGFuIDQ5MS5cXHRJJ20gcmVwZWF0aW5nIHBhcnQgb2YgdGhlIGV4cF90b19wb2x5IHRhYmxlXFxuLS1cXG5jcnlwdG8vdHdvZmlzaF9jb21tb24uYy0zMTgtICogU2luY2UgSSBrbm93IG15IGNvbnN0YW50IG9wZXJhbmRzIGFyZSBuZXZlciB6ZXJvLCBJIG9ubHkgaGF2ZSB0byB3b3JyeVxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jOjMxOTogKiBhYm91dCB6ZXJvIHZhbHVlcyBpbiB0aGUgdmFyaWFibGUgb3BlcmFuZCwgYW5kIEkgZG8gaXQgd2l0aCBhIHNpbXBsZVxcbmNyeXB0by90d29maXNoX2NvbW1vbi5jLTMyMC0gKiBjb25kaXRpb25hbCBicmFuY2guXFx0SSBrbm93IGNvbmRpdGlvbmFscyBhcmUgZXhwZW5zaXZlLCBidXQgSSBjb3VsZG4ndFxcbi0tXFxuY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jLTgwLSAqIGFuZCBzaW11bHRhbmVvdXNseSBwZXJmb3JtIHRoZSB3aGl0ZW5pbmcgc3RlcC4gIElOUEFDSyBwYWNrcyB3b3JkXFxuY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jOjgxOiAqIG51bWJlciBuIGludG8gdGhlIHZhcmlhYmxlIG5hbWVkIGJ5IHgsIHVzaW5nIHdoaXRlbmluZyBzdWJrZXkgbnVtYmVyIG0uXFxuY3J5cHRvL3R3b2Zpc2hfZ2VuZXJpYy5jOjgyOiAqIE9VVFVOUEFDSyB1bnBhY2tzIHdvcmQgbnVtYmVyIG4gZnJvbSB0aGUgdmFyaWFibGUgbmFtZWQgYnkgeCwgdXNpbmdcXG5jcnlwdG8vdHdvZmlzaF9nZW5lcmljLmMtODMtICogd2hpdGVuaW5nIHN1YmtleSBudW1iZXIgbS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MzAuNjE0ODQ0NTIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkxMzk0OTMyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIGlzIGFkZGluZyBzdGF0aWMgYWxnb3JpdGhtIGRlZmluaXRpb25zIOKAkyBzcGVjaWZpY2FsbHkgZm9yIGBjYmMoYXJpYSlgIGFuZCBgcmZjMzY4NihjdHIoYXJpYSkpYCDigJMgdG8gdGhlIGBlYWxnX2xpc3RgIHRhYmxlIHdpdGhpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLCB3cml0dGVuLCBvciBsZWFrZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBoZXJlLlxuXG5GaXJzdCwgSSBleGFtaW5lZCBgeGZybV9hbGdvX2Rlc2NgLiBJdCdzIGEgc3RhdGljIHN0cnVjdHVyZSwgd2hpY2ggaXMgZ29vZC4gQmVjYXVzZSBpdCdzIHN0YXRpYywgdGhlIGNvbXBpbGVyIHdpbGwgaGFuZGxlIHplcm8taW5pdGlhbGl6YXRpb24gb2YgYW55IHVuc3BlY2lmaWVkIGZpZWxkcy4gVGhhdCdzIGEgaHVnZSB3aW4sIGVsaW1pbmF0aW5nIGEgY29tbW9uIHNvdXJjZSBvZiBidWdzIHJpZ2h0IG9mZiB0aGUgYmF0LiBTbyBmYXIsIHNvIGdvb2QuXG5cbk5leHQsIEkgbG9va2VkIGZvciBkeW5hbWljIGFsbG9jYXRpb25zLCB1c2Vyc3BhY2UgY29waWVzLCBvciBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgZGF0YSBwYXRocyBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhlIGFuYWx5c2lzIHNob3dzIHRoYXQgdGhlcmUgYXJlbuKAmXQgYW55LiBUaGlzIHBhdGNoICppdHNlbGYqIGRvZXNuJ3QgdG91Y2ggYW55IG9mIHRoZSBleGlzdGluZyBidWZmZXIgaGFuZGxpbmcgb3IgcG9pbnRlciBhcml0aG1ldGljIGluIGB4ZnJtX2FsZ28uY2AuIEl0J3MganVzdCBwb3B1bGF0aW5nIHRoZSB0YWJsZS4gIFRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaGVhcCBvciBzdGFjayBidWZmZXJzLiBGdXJ0aGVybW9yZSwgdGhlIGFsZ29yaXRobXMgdGhlbXNlbHZlcyDigJMgYGFyaWFgLCBhbmQgdGhlIHRlbXBsYXRlcyBsaWtlIGBlY2hhaW5pdmAsIGBzZXFpdmAsIGByZmMzNjg2YCwgYGN0cmAsIGFuZCBgY2JjYCDigJMgYXJlIGFsbCBwcmUtZXhpc3Rpbmcgc3RhbmRhcmQgY3J5cHRvIGRyaXZlcnMgYW5kIHRlbXBsYXRlcyB3aXRoaW4gdGhlIGNyeXB0byBzdWJzeXN0ZW0uIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpc24ndCB0aGUgb3JpZ2luIG9mIGFueSBzdWNoIHJpc2tzLlxuXG5TaW5jZSBleGlzdGluZyBYRlJNIHN0YXRlcyBjb25maWd1cmVkIHdpdGggdGhlc2UgYWxnb3JpdGhtcyB1c2UgYWxsb2NhdGVkIHNrY2lwaGVyIHRlbXBsYXRlcywgdGhlcmUgaXMgbm8gcmVhbCBjaGFuZ2UgdGhhdCB3b3VsZCBvcGVuIHRoaXMgdXAuXG5cbkJlY2F1c2Ugb2YgdGhpcywgSSBiZWxpZXZlIGl0J3MgdmVyeSB1bmxpa2VseSB0aGF0IGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHdpbGwgYXJpc2UgZnJvbSB0aGlzIGFkZGl0aW9uLiBTaW5jZSB0aGVyZSdzIG5vIGNvZGUgdGhhdCB3b3VsZCBpbnZvbHZlIGEgY29weSB0byB1c2VyLCB0aGVyZSBzaG91bGQgYmUgbm8gb3Bwb3J0dW5pdHkgZm9yIGFuIGluZm8tbGVhay5cblxuTm93LCBjb25jZXJuaW5nIGluc3RydW1lbnRhdGlvbiBhbmQgdGVzdGluZywgSSB0aGluayBLQVNBTiBhbHJlYWR5IGFkZXF1YXRlbHkgaGFuZGxlcyB0aGUgbWVtb3J5IGFjY2VzcyBpc3N1ZXMsIGJ1ZmZlciBib3VuZHMgZXJyb3JzLCBldGMuLCB0aGF0IG1pZ2h0IGFyaXNlIHdoZW4gdGhlc2UgYWxnb3JpdGhtcyBhcmUgdXNlZCBpbiBYRlJNLiBUaGVyZWZvcmUsIHRoZSBhZGRpdGlvbiBvZiBLTVNBTiBpc24ndCB3YXJyYW50ZWQgaGVyZS5cblxuU3VtbWFyaXppbmcgbXkgcmVhc29uaW5nOlxuXG4xLiAgKipXaGF0J3MgYmVpbmcgYWRkZWQqKjogV2UncmUganVzdCBhZGRpbmcgdGhlIG5ldyBjaXBoZXIgc3VpdGVzIHRvIGEgc3RhdGljIHRhYmxlLlxuMi4gICoqU3RhdGljIGluaXRpYWxpemF0aW9uKio6IFRoZSB0YWJsZSBlbnRyaWVzIGFyZSBzdGF0aWMgYHhmcm1fYWxnb19kZXNjYCBzdHJ1Y3RzLCB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci5cbjMuICAqKk5vIHJpc2sgaW50cm9kdWNlZCoqOiBObyBuZXcgaGVhcCBvciBzdGFjaywgc2l6ZSBjYWxjdWxhdGlvbnMsIGNvbnRyb2wgZmxvdyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS5cbjQuICAqKktBU0FOIGFkZXF1YWN5Kio6IEtBU0FOIGFscmVhZHkgYWRkcmVzc2VzIG1lbW9yeSBib3VuZHMgYW5kIHZhbGlkaXR5IGlzc3VlcyBkdXJpbmcgWEZSTSBhbmQgY3J5cHRvIG9wZXJhdGlvbnMuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ4NCwiT3V0cHV0VG9rZW5zIjoyNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDY6NDA6MzkuNzU0MzQxNzA2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtZXJlbHkgcmVnaXN0ZXJzIHR3byBleGlzdGluZyBjaXBoZXIgc3VpdGVzIChcXFwiY2JjKGFyaWEpXFxcIiBhbmQgXFxcInJmYzM2ODYoY3RyKGFyaWEpKVxcXCIpIGludG8gdGhlIHN0YXRpYyBgZWFsZ19saXN0YCB0YWJsZSBpbiBgbmV0L3hmcm0veGZybV9hbGdvLmNgIHRvIGVuYWJsZSB0aGVpciB1c2UgaW4gWEZSTS9JUHNlYy5cXG5cXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBcXHUwMDI2IEluZm8tbGVhayBBbmFseXNpczpcXG4tIFRoZSBhZGRlZCBlbnRyaWVzIGFyZSBzdGF0aWMgYHN0cnVjdCB4ZnJtX2FsZ29fZGVzY2AgZGVmaW5pdGlvbnMgaW4gYC5kYXRhYCAvIGAucm9kYXRhYCB3aGVyZSB1bnNwZWNpZmllZCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLlxcbi0gTm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiwgc3RhY2sgdmFyaWFibGUgaGFuZGxpbmcsIHN0cnVjdHVyZSBwYWRkaW5nIGV4cG9zdXJlLCBvciBuZXRsaW5rIC8gYGNvcHlfdG9fdXNlcmAgZGF0YSB0cmFuc2ZlcnMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBjb250cm9sIGZsb3cgb3IgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNoYW5nZWQgdGhhdCBjb3VsZCBjYXVzZSByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG5cXG4yLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5Olxcbi0gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHJlbGF0ZWQgdG8gY2lwaGVyIGNvbnRleHRzLCBza2NpcGhlciBjcnlwdG8gb3BlcmF0aW9ucywgb3IgWEZSTSBwYWNrZXQgcHJvY2Vzc2luZyAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGJ1ZmZlciBvdmVycnVucywgdXNlLWFmdGVyLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIEtBU0FOLlxcbi0gVGhlcmUgYXJlIG5vIEtNU0FOLXNwZWNpZmljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWVyZWx5IHJlZ2lzdGVycyB0d28gZXhpc3RpbmcgY2lwaGVyIHN1aXRlcyAoXFxcImNiYyhhcmlhKVxcXCIgYW5kIFxcXCJyZmMzNjg2KGN0cihhcmlhKSlcXFwiKSBpbnRvIHRoZSBzdGF0aWMgYGVhbGdfbGlzdGAgdGFibGUgaW4gYG5ldC94ZnJtL3hmcm1fYWxnby5jYCB0byBlbmFibGUgdGhlaXIgdXNlIGluIFhGUk0vSVBzZWMuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgXFx1MDAyNiBJbmZvLWxlYWsgQW5hbHlzaXM6XFxuLSBUaGUgYWRkZWQgZW50cmllcyBhcmUgc3RhdGljIGBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2NgIGRlZmluaXRpb25zIGluIGAuZGF0YWAgLyBgLnJvZGF0YWAgd2hlcmUgdW5zcGVjaWZpZWQgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci5cXG4tIE5vIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24sIHN0YWNrIHZhcmlhYmxlIGhhbmRsaW5nLCBzdHJ1Y3R1cmUgcGFkZGluZyBleHBvc3VyZSwgb3IgbmV0bGluayAvIGBjb3B5X3RvX3VzZXJgIGRhdGEgdHJhbnNmZXJzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLlxcbi0gTm8gY29udHJvbCBmbG93IG9yIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpcyBjaGFuZ2VkIHRoYXQgY291bGQgY2F1c2UgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuXFxuMi4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyByZWxhdGVkIHRvIGNpcGhlciBjb250ZXh0cywgc2tjaXBoZXIgY3J5cHRvIG9wZXJhdGlvbnMsIG9yIFhGUk0gcGFja2V0IHByb2Nlc3NpbmcgKG91dC1vZi1ib3VuZHMgYWNjZXNzLCBidWZmZXIgb3ZlcnJ1bnMsIHVzZS1hZnRlci1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBLQVNBTi5cXG4tIFRoZXJlIGFyZSBubyBLTVNBTi1zcGVjaWZpYyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[1] Phase: Succeeded StartedAt: 2026-09-09 06:40:51 +0000 UTC FinishedAt: 2026-09-09 06:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 06:40:51 +0000 UTC FinishedAt: 2026-09-09 06:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2] Phase: Succeeded StartedAt: 2026-09-09 06:40:51 +0000 UTC FinishedAt: 2026-09-09 10:20:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 06:40:51 +0000 UTC FinishedAt: 2026-09-09 10:20:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 06:40:51 +0000 UTC FinishedAt: 2026-09-09 06:41:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 06:40:51 +0000 UTC FinishedAt: 2026-09-09 06:40:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowztqnb/series-workflowztqnb-convert-artifact-101801724/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 06:41:01 +0000 UTC FinishedAt: 2026-09-09 06:57:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 06:41:01 +0000 UTC FinishedAt: 2026-09-09 06:57:33 +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:*c427b935-3d40-41da-bcfa-8a53d7a298ac,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-workflowztqnb/series-workflowztqnb-convert-artifact-101801724/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": "c69b1ebf-a9d8-495f-b1c3-4ba6a50667a2", "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-workflowztqnb/series-workflowztqnb-build-action-2294110762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 06:41:01 +0000 UTC FinishedAt: 2026-09-09 06:57:24 +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:*c427b935-3d40-41da-bcfa-8a53d7a298ac,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-workflowztqnb/series-workflowztqnb-convert-artifact-101801724/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": "c69b1ebf-a9d8-495f-b1c3-4ba6a50667a2", "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-workflowztqnb/series-workflowztqnb-build-action-2294110762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 06:57:33 +0000 UTC FinishedAt: 2026-09-09 06:57:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 06:57:33 +0000 UTC FinishedAt: 2026-09-09 06:57:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 06:57:33 +0000 UTC FinishedAt: 2026-09-09 06:57:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 06:57:33 +0000 UTC FinishedAt: 2026-09-09 06:57:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowztqnb/series-workflowztqnb-convert-artifact-406112827/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 06:57:44 +0000 UTC FinishedAt: 2026-09-09 06:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 06:57:44 +0000 UTC FinishedAt: 2026-09-09 06:59:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c69b1ebf-a9d8-495f-b1c3-4ba6a50667a2,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-workflowztqnb/series-workflowztqnb-build-action-2294110762/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-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 06:59:34 +0000 UTC FinishedAt: 2026-09-09 06:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 06:59:34 +0000 UTC FinishedAt: 2026-09-09 06:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 06:59:34 +0000 UTC FinishedAt: 2026-09-09 07:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 06:59:34 +0000 UTC FinishedAt: 2026-09-09 07:16:43 +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:*c427b935-3d40-41da-bcfa-8a53d7a298ac,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-workflowztqnb/series-workflowztqnb-convert-artifact-406112827/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": "c37fbe7a-1277-4d3a-a801-9f5bad7a0b32", "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-workflowztqnb/series-workflowztqnb-build-action-4014818655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 06:59:34 +0000 UTC FinishedAt: 2026-09-09 07:16:33 +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:*c427b935-3d40-41da-bcfa-8a53d7a298ac,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-workflowztqnb/series-workflowztqnb-convert-artifact-406112827/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": "c37fbe7a-1277-4d3a-a801-9f5bad7a0b32", "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-workflowztqnb/series-workflowztqnb-build-action-4014818655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 07:16:43 +0000 UTC FinishedAt: 2026-09-09 07:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 07:16:43 +0000 UTC FinishedAt: 2026-09-09 07:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 07:16:43 +0000 UTC FinishedAt: 2026-09-09 07:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 07:16:43 +0000 UTC FinishedAt: 2026-09-09 07:18:38 +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:*c37fbe7a-1277-4d3a-a801-9f5bad7a0b32,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-workflowztqnb/series-workflowztqnb-build-action-4014818655/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-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 07:18:48 +0000 UTC FinishedAt: 2026-09-09 10:20:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 07:18:48 +0000 UTC FinishedAt: 2026-09-09 10:20:14 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"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:*c69b1ebf-a9d8-495f-b1c3-4ba6a50667a2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c37fbe7a-1277-4d3a-a801-9f5bad7a0b32,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-workflowztqnb/series-workflowztqnb-build-action-2294110762/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-workflowztqnb/series-workflowztqnb-build-action-4014818655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 07:18:48 +0000 UTC FinishedAt: 2026-09-09 07:18:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 07:18:48 +0000 UTC FinishedAt: 2026-09-09 07:18:53 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"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-workflowztqnb/series-workflowztqnb-convert-artifact-1957241396/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 07:18:48 +0000 UTC FinishedAt: 2026-09-09 07:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 07:18:48 +0000 UTC FinishedAt: 2026-09-09 07:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 07:18:48 +0000 UTC FinishedAt: 2026-09-09 07:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 07:18:58 +0000 UTC FinishedAt: 2026-09-09 10:20:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowztqnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_ealg_get_byname","xfrm_find_algo","xfrm_probe_algs","attach_crypt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e2573085497807b551324de20d368127602151ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_ALGO","XFRM_USER","CRYPTO_ARIA","CRYPTO_CBC","CRYPTO_CTR","INET_ESP"],"series_id":"a49722ce-3cc2-4498-a52c-99353afc7a6a","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 07:18:58 +0000 UTC FinishedAt: 2026-09-09 10:20:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c69b1ebf-a9d8-495f-b1c3-4ba6a50667a2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c37fbe7a-1277-4d3a-a801-9f5bad7a0b32,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-workflowztqnb/series-workflowztqnb-build-action-2294110762/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-workflowztqnb/series-workflowztqnb-build-action-4014818655/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-workflowztqnb/series-workflowztqnb-convert-artifact-1957241396/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,}