Name: series-workflow8s6qq Phase: Succeeded StartedAt: 2026-08-21 11:22:44 +0000 UTC FinishedAt: 2026-08-21 15:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[0] Phase: Succeeded StartedAt: 2026-08-21 11:22:44 +0000 UTC FinishedAt: 2026-08-21 11:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 11:22:44 +0000 UTC FinishedAt: 2026-08-21 11:43:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "326d49039c10b65522ac7277b19b9b5c42ed1aeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "326d49039c10b65522ac7277b19b9b5c42ed1aeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "38e2156e-3ddc-4f39-8139-572d6ec5b652" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_query" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fcXVlcnkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gbGltaXQgYGhkci5zaXplYCB0byBgUEFHRV9TSVpFYCBiZWZvcmUgaXQgaXMgc2F2ZWQgYXMgYHVzaXplYC4gVGhlIGB1c2l6ZWAgdmFyaWFibGUgaXMgbGF0ZXIgcGFzc2VkIHRvIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGFzIHRoZSB1c2VyIGJ1ZmZlciBzaXplLiBJZiBgdXNpemVgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwgYnVmZmVyIHNpemUsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgemVybyBvdXQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB1c2VyIHNwYWNlLiBJZiBhIHVzZXIgcHJvdmlkZXMgYW4gZXh0cmVtZWx5IGxhcmdlIGBoZHIuc2l6ZWAsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgYXR0ZW1wdCB0byB6ZXJvIGEgbWFzc2l2ZSBhbW91bnQgb2YgdXNlciBtZW1vcnksIGxlYWRpbmcgdG8gYSBkZW5pYWwgb2Ygc2VydmljZSAoZS5nLiwgc29mdCBsb2NrdXAgb3IgZXhjZXNzaXZlIENQVSB1c2FnZSkuXG5cblRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIGtlcm5lbCBidWZmZXIgYGRhdGFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYG1lbXNldCgpYCBpbiBgaW9fcXVlcnkoKWAsIGFuZCB0aGUgZXh0cmEgYnl0ZXMgd3JpdHRlbiB0byB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHplcm9lZCBieSBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYC4gU2luY2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBTdGFuZGFyZCBmdXp6aW5nICh3aXRoIEtBU0FOLCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMsIGV0Yy4pIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggRG9TIGlzc3VlcyBsaWtlIHRoaXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaXplIHZhbGlkYXRpb24gY2hlY2sgaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGlvX3F1ZXJ5YCBmdW5jdGlvbiBkdXJpbmcgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXNjYWxscyB3aXRoIHRoZSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCBvcGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsYXJnZSBzaXplcyBpbiBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzMTA4MWFjMGNhODA0NDYyOGM0OGRjNGZlNWUxZTU4ZGU1NjgxZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTo0MjozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9xdWVyeS5jIGIvaW9fdXJpbmcvcXVlcnkuY1xuaW5kZXggODhhMzI1NzM2OTkyNC4uZjJiNWUxOWU1YWY2NyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3F1ZXJ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3F1ZXJ5LmNcbkBAIC03Niw2ICYjNDM7NzYsOSBAQCBzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsIHVoZHIsIHNpemVvZihoZHIpKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0LyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXG4mIzQzO1x0aWYgKGhkci5zaXplIFx1MDAzZSBQQUdFX1NJWkUpXG4mIzQzO1x0XHRyZXR1cm4gLUUyQklHO1xuIFx0dXNpemUgPSBoZHIuc2l6ZTtcbiBcdGhkci5zaXplID0gbWluKGhkci5zaXplLCBJT19NQVhfUVVFUllfU0laRSk7XG4gXHR1ZGF0YSA9IHU2NF90b191c2VyX3B0cihoZHIucXVlcnlfZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fcXVlcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpemUgdmFsaWRhdGlvbiBjaGVjayBpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uIGR1cmluZyBgaW9fdXJpbmdfcmVnaXN0ZXJgIHN5c2NhbGxzIHdpdGggdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIG9wY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxhcmdlIHNpemVzIGluIGBjb3B5X3N0cnVjdF90b191c2VyKClgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTMxMDgxYWMwY2E4MDQ0NjI4YzQ4ZGM0ZmU1ZTFlNThkZTU2ODFlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDExOjQyOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcXVlcnkuYyBiL2lvX3VyaW5nL3F1ZXJ5LmMKaW5kZXggODhhMzI1NzM2OTkyNC4uZjJiNWUxOWU1YWY2NyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvcXVlcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9xdWVyeS5jCkBAIC03Niw2ICYjNDM7NzYsOSBAQCBzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkciwKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2hkciwgdWhkciwgc2l6ZW9mKGhkcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJLyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovCiYjNDM7CWlmIChoZHIuc2l6ZSAmZ3Q7IFBBR0VfU0laRSkKJiM0MzsJCXJldHVybiAtRTJCSUc7CiAJdXNpemUgPSBoZHIuc2l6ZTsKIAloZHIuc2l6ZSA9IG1pbihoZHIuc2l6ZSwgSU9fTUFYX1FVRVJZX1NJWkUpOwogCXVkYXRhID0gdTY0X3RvX3VzZXJfcHRyKGhkci5xdWVyeV9kYXRhKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGlvX3VyaW5nL3F1ZXJ5LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBhIHNpemUgY2hlY2s6CgpgYGBjCi8qIGNvcHlfc3RydWN0X3RvX3VzZXIoKSB6ZXJvcyB1cCB0byB1c2l6ZSBieXRlcyAqLwppZiAoaGRyLnNpemUgJmd0OyBQQUdFX1NJWkUpCglyZXR1cm4gLUUyQklHOwpgYGAKClJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBgaW9fdXJpbmdgIGhhbmRsZXMgcXVlcmllcy4gIFRoZSBhZGRlZCBjaGVjayBzZWVtcyB0byBiZSBhIHByb2FjdGl2ZSBtZWFzdXJlLiAgSXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHdpdGggYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2hlcmUgYGhkci5zaXplYCAodGhlIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgZGF0YSB0cmFuc2ZlcikgY291bGQgYmUgZXhjZXNzaXZlbHkgbGFyZ2UuIFRoaXMgaXMgbGlrZWx5IGludGVuZGVkIHRvIHByZXZlbnQgc29tZSBraW5kIG9mIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGluZm9ybWF0aW9uIGxlYWsgaWYgdGhlIHNpemUgZXhjZWVkcyBhIHBhZ2UuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgYXJlIHRvIHJlYWxseSBkaWcgaW50byBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBpdHNlbGYgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGVjay4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSBgaW9fdXJpbmdgIGNvbmZpZ3VyYXRpb24gb3ZlcmFsbCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBhcmVhcyBvZiBwb3RlbnRpYWwgaW50ZXJlc3QgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4KCkxldCYjMzk7cyB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGFuZCBzZWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9faGFuZGxlX3F1ZXJ5X2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3F1ZXJ5LmM9NjA9c3RhdGljIHNzaXplX3QgaW9fcXVlcnlfc2NxKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXG4tLVxuaW9fdXJpbmcvcXVlcnkuYy02OC1cbmlvX3VyaW5nL3F1ZXJ5LmM6Njk6c3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXG5pb191cmluZy9xdWVyeS5jLTcwLVx0XHRcdFx0IHU2NCAqbmV4dF9lbnRyeSlcbi0tXG5pb191cmluZy9xdWVyeS5jPTEyOD1pbnQgaW9fcXVlcnkodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgbnJfYXJncylcbi0tXG5pb191cmluZy9xdWVyeS5jLTE0MS1cbmlvX3VyaW5nL3F1ZXJ5LmM6MTQyOlx0XHRyZXQgPSBpb19oYW5kbGVfcXVlcnlfZW50cnkoXHUwMDI2ZW50cnlfYnVmZmVyLCB1aGRyLCBcdTAwMjZuZXh0X2hkcik7XG5pb191cmluZy9xdWVyeS5jLTE0My1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgUXVlcnkgSGFuZGxpbmcgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhpcyBzeXN0ZW0gaGFuZGxlcyBxdWVyaWVzLiBJIHNlZSB0aGF0IHRoZSBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYGlvX3F1ZXJ5YC4gVGhhdCYjMzk7cyB0aGUga2V5IHJlbGF0aW9uc2hpcCBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgc28gbGV0JiMzOTtzIGJhY2sgdXAgYW5kIGludmVzdGlnYXRlIGBpb19xdWVyeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgdGhlIGlucHV0IGFyZ3VtZW50cyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgYGlvX3F1ZXJ5YCBpcyBjcnVjaWFsIHRvIG1ha2luZyBzZW5zZSBvZiB3aGVyZSB0aGlzIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGZpdHMgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcXVlcnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2FhbS9kcHNlY2ktZGVidWdmcy5jPTk9c3RhdGljIGludCBkcHNlY2lfZGJnX2Zxc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqb2Zmc2V0KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYy0yMi1cdFx0ZnFpZCA9IHByaXYtXHUwMDNlcnhfcXVldWVfYXR0cltpXS5mcWlkO1xuZHJpdmVycy9jcnlwdG8vY2FhbS9kcHNlY2ktZGVidWdmcy5jOjIzOlx0XHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBmcWlkLCBcdTAwMjZmY250LCBcdTAwMjZiY250KTtcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYy0yNC1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmMtMzYtXHRcdGZxaWQgPSBwcml2LVx1MDAzZXR4X3F1ZXVlX2F0dHJbaV0uZnFpZDtcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYzozNzpcdFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoTlVMTCwgZnFpZCwgXHUwMDI2ZmNudCwgXHUwMDI2YmNudCk7XG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmMtMzgtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYz03OT1zdHJ1Y3QgYW1kZ3B1X21jYV9yYXNfYmxvY2sgbWNhX3YzXzBfbXAxX3JhcyA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9tY2FfdjNfMC5jLTg1LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYzo4NjpzdGF0aWMgdm9pZCBtY2FfdjNfMF9tcGlvX3F1ZXJ5X3Jhc19lcnJvcl9jb3VudChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldixcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmMtODctXHRcdFx0XHRcdCAgICAgICB2b2lkICpyYXNfZXJyb3Jfc3RhdHVzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmM9OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfcmFzX2Jsb2NrX2h3X29wcyBtY2FfdjNfMF9tcGlvX2h3X29wcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmM6OTU6XHQucXVlcnlfcmFzX2Vycm9yX2NvdW50ID0gbWNhX3YzXzBfbXBpb19xdWVyeV9yYXNfZXJyb3JfY291bnQsXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9tY2FfdjNfMC5jLTk2LVx0LnF1ZXJ5X3Jhc19lcnJvcl9hZGRyZXNzID0gTlVMTCxcbi0tXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDc2eC5jPTMxNj12NGwyX2N0cmxfaGFuZGxlcl90b19yYWRpbyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmQpXG4tLVxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3NnguYy0zMjMtICovXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDc2eC5jOjMyNDpzdGF0aWMgaW50IHNpNDc2eF9yYWRpb19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdixcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmMtMzI1LVx0XHRcdFx0IHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcGFiaWxpdHkpXG4tLVxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3NnguYz0xMTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2k0NzYxX2lvY3RsX29wcyA9IHtcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmM6MTE1NDpcdC52aWRpb2NfcXVlcnljYXBcdFx0PSBzaTQ3NnhfcmFkaW9fcXVlcnljYXAsXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDc2eC5jLTExNTUtXHQudmlkaW9jX2dfdHVuZXJcdFx0XHQ9IHNpNDc2eF9yYWRpb19nX3R1bmVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGgtZGVidWdmcy5jPTU5PXN0YXRpYyBpbnQgZHBhYTJfZGJnX2Zxc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqb2Zmc2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGgtZGVidWdmcy5jLTcxLVx0XHRmcSA9IFx1MDAyNnByaXYtXHUwMDNlZnFbaV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYzo3MjpcdFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoTlVMTCwgZnEtXHUwMDNlZnFpZCwgXHUwMDI2ZmNudCwgXHUwMDI2YmNudCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy03My1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYz0xMjI9c3RhdGljIGludCBkcGFhMl9kYmdfYnBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKm9mZnNldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy0xNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYzoxNDY6XHRcdGVyciA9IGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KE5VTEwsIGJwLVx1MDAzZWJwaWQsIFx1MDAyNmJ1Zl9jbnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmMtMTQ3LVx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jPTIyMjg9c3RhdGljIHUzMiBkcGFhMl9ldGhfaW5ncmVzc19mcV9jb3VudChzdHJ1Y3QgZHBhYTJfZXRoX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jLTIyMzUtXHRcdGZxID0gXHUwMDI2cHJpdi1cdTAwM2VmcVtpXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguYzoyMjM2Olx0XHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBmcS1cdTAwM2VmcWlkLCBcdTAwMjZmY250LCBcdTAwMjZiY250KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguYy0yMjM3LVx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYz0yNDY9c3RhdGljIHZvaWQgZHBhYTJfZXRoX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMzA3LVx0XHQvKiBQcmludCBGUSBpbnN0YW50YW5lb3VzIGNvdW50cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYzozMDg6XHRcdGVyciA9IGRwYWEyX2lvX3F1ZXJ5X2ZxX2NvdW50KE5VTEwsIHByaXYtXHUwMDNlZnFbal0uZnFpZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMzA5LVx0XHRcdFx0XHQgICAgICBcdTAwMjZmY250LCBcdTAwMjZiY250KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jLTMyOS1cdGZvciAoaiA9IDA7IGogXHUwMDNjIHByaXYtXHUwMDNlbnVtX2JwczsgaiYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmM6MzMwOlx0XHRlcnIgPSBkcGFhMl9pb19xdWVyeV9icF9jb3VudChOVUxMLCBwcml2LVx1MDAzZWJwW2pdLVx1MDAzZWJwaWQsIFx1MDAyNmJ1Zl9jbnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYy0zMzEtXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy9yaW9fbXBvcnRfY2Rldi5jPTIzNDU9c3RhdGljIHN0cnVjdCBtcG9ydF9kZXYgKm1wb3J0X2NkZXZfYWRkKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0KVxuLS1cbmRyaXZlcnMvcmFwaWRpby9kZXZpY2VzL3Jpb19tcG9ydF9jZGV2LmMtMjM5OC1cdH1cbmRyaXZlcnMvcmFwaWRpby9kZXZpY2VzL3Jpb19tcG9ydF9jZGV2LmM6MjM5OTpcdHJldCA9IHJpb19xdWVyeV9tcG9ydChtcG9ydCwgXHUwMDI2YXR0cik7XG5kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy9yaW9fbXBvcnRfY2Rldi5jLTI0MDAtXHRpZiAoIXJldCkge1xuLS1cbmRyaXZlcnMvcmFwaWRpby9yaW8uYz04MD1FWFBPUlRfU1lNQk9MX0dQTChyaW9fbG9jYWxfZ2V0X2RldmljZV9pZCk7XG4tLVxuZHJpdmVycy9yYXBpZGlvL3Jpby5jLTgyLS8qKlxuZHJpdmVycy9yYXBpZGlvL3Jpby5jOjgzOiAqIHJpb19xdWVyeV9tcG9ydCAtIFF1ZXJ5IG1wb3J0IGRldmljZSBhdHRyaWJ1dGVzXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtODQtICogQHBvcnQ6IG1wb3J0IGRldmljZSB0byBxdWVyeVxuLS1cbmRyaXZlcnMvcmFwaWRpby9yaW8uYy04OS0gKi9cbmRyaXZlcnMvcmFwaWRpby9yaW8uYzo5MDppbnQgcmlvX3F1ZXJ5X21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKnBvcnQsXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtOTEtXHRcdCAgICBzdHJ1Y3QgcmlvX21wb3J0X2F0dHIgKm1wb3J0X2F0dHIpXG4tLVxuZHJpdmVycy9yYXBpZGlvL3Jpby5jLTk2LX1cbmRyaXZlcnMvcmFwaWRpby9yaW8uYzo5NzpFWFBPUlRfU1lNQk9MKHJpb19xdWVyeV9tcG9ydCk7XG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtOTgtXG4tLVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM9NzUxPUVYUE9SVF9TWU1CT0xfR1BMKGRwYWEyX2lvX3N0b3JlX25leHQpO1xuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc1My0vKipcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc1NDogKiBkcGFhMl9pb19xdWVyeV9mcV9jb3VudCgpIC0gR2V0IHRoZSBmcmFtZSBhbmQgYnl0ZSBjb3VudCBmb3IgYSBnaXZlbiBmcS5cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc1NS0gKiBAZDogdGhlIGdpdmVuIERQSU8gb2JqZWN0LlxuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc2NC0gKi9cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc2NTppbnQgZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoc3RydWN0IGRwYWEyX2lvICpkLCB1MzIgZnFpZCxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc2Ni1cdFx0XHQgICAgdTMyICpmY250LCB1MzIgKmJjbnQpXG4tLVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtNzg3LX1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc4ODpFWFBPUlRfU1lNQk9MX0dQTChkcGFhMl9pb19xdWVyeV9mcV9jb3VudCk7XG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03ODktXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03OTAtLyoqXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYzo3OTE6ICogZHBhYTJfaW9fcXVlcnlfYnBfY291bnQoKSAtIFF1ZXJ5IHRoZSBudW1iZXIgb2YgYnVmZmVycyBjdXJyZW50bHkgaW4gYVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtNzkyLSAqIGJ1ZmZlciBwb29sLlxuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc5OC0gKi9cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc5OTppbnQgZHBhYTJfaW9fcXVlcnlfYnBfY291bnQoc3RydWN0IGRwYWEyX2lvICpkLCB1MTYgYnBpZCwgdTMyICpudW0pXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy04MDAte1xuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTgxOC19XG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYzo4MTk6RVhQT1JUX1NZTUJPTF9HUEwoZHBhYTJfaW9fcXVlcnlfYnBfY291bnQpO1xuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtODIwLVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL2hhbF9zZGlvLmM9MTE9dTggcnR3X2hhbF9zZGlvX21heF90eG9xdF9mcmVlX3NwYWNlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcilcbi0tXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9oYWxfc2Rpby5jLTIwLVxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvaGFsX3NkaW8uYzoyMTp1OCBydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2UoXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9oYWxfc2Rpby5jLTIyLVx0c3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBQYWdlSWR4LCB1OCBSZXF1aXJlZFBhZ2VOdW1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9ydGw4NzIzYnNfeG1pdC5jPTM2PXN0YXRpYyBzMzIgcnRsODcyM19kZXF1ZXVlX3dyaXRlcG9ydChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpXG4tLVxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvcnRsODcyM2JzX3htaXQuYy03Ni1cdC8qICBjaGVjayBpZiBoYXJkd2FyZSB0eCBmaWZvIHBhZ2UgaXMgZW5vdWdoICovXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9ydGw4NzIzYnNfeG1pdC5jOjc3Olx0aWYgKCFydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2UocHJpX3BhZGFwdGVyLCBQYWdlSWR4LCBweG1pdGJ1Zi1cdTAwM2VwZ19udW0pKSB7XG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9ydGw4NzIzYnNfeG1pdC5jLTc4LVx0XHRpZiAoIWJVcGRhdGVQYWdlTnVtKSB7XG4tLVxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9pbmNsdWRlL2hhbF9zZGlvLmg9MTI9dTggcnR3X2hhbF9zZGlvX21heF90eG9xdF9mcmVlX3NwYWNlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7XG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2luY2x1ZGUvaGFsX3NkaW8uaDoxMzp1OCBydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2Uoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBQYWdlSWR4LCB1OCBSZXF1aXJlZFBhZ2VOdW0pO1xuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9pbmNsdWRlL2hhbF9zZGlvLmgtMTQtdm9pZCBydHdfaGFsX3NkaW9fdXBkYXRlX3R4X2ZyZWVwYWdlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgdTggUGFnZUlkeCwgdTggUmVxdWlyZWRQYWdlTnVtKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3Jpby5oPTU1ND1leHRlcm4gdm9pZCByaW9fY2xvc2Vfb3V0Yl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKiwgaW50KTtcbmluY2x1ZGUvbGludXgvcmlvLmg6NTU1OmV4dGVybiBpbnQgcmlvX3F1ZXJ5X21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKnBvcnQsXG5pbmNsdWRlL2xpbnV4L3Jpby5oLTU1Ni1cdFx0XHQgICBzdHJ1Y3QgcmlvX21wb3J0X2F0dHIgKm1wb3J0X2F0dHIpO1xuLS1cbmluY2x1ZGUvc29jL2ZzbC9kcGFhMi1pby5oPTEyOD1zdHJ1Y3QgZHBhYTJfZHEgKmRwYWEyX2lvX3N0b3JlX25leHQoc3RydWN0IGRwYWEyX2lvX3N0b3JlICpzLCBpbnQgKmlzX2xhc3QpO1xuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmgtMTI5LVxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmg6MTMwOmludCBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChzdHJ1Y3QgZHBhYTJfaW8gKmQsIHUzMiBmcWlkLFxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmgtMTMxLVx0XHRcdCAgICB1MzIgKmZjbnQsIHUzMiAqYmNudCk7XG5pbmNsdWRlL3NvYy9mc2wvZHBhYTItaW8uaDoxMzI6aW50IGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KHN0cnVjdCBkcGFhMl9pbyAqZCwgdTE2IGJwaWQsXG5pbmNsdWRlL3NvYy9mc2wvZHBhYTItaW8uaC0xMzMtXHRcdFx0ICAgIHUzMiAqbnVtKTtcbi0tXG5pb191cmluZy9xdWVyeS5jLTgtXG5pb191cmluZy9xdWVyeS5jOjk6dW5pb24gaW9fcXVlcnlfZGF0YSB7XG5pb191cmluZy9xdWVyeS5jLTEwLVx0c3RydWN0IGlvX3VyaW5nX3F1ZXJ5X29wY29kZSBvcGNvZGVzO1xuLS1cbmlvX3VyaW5nL3F1ZXJ5LmMtMTUtXG5pb191cmluZy9xdWVyeS5jOjE2OiNkZWZpbmUgSU9fTUFYX1FVRVJZX1NJWkVcdFx0c2l6ZW9mKHVuaW9uIGlvX3F1ZXJ5X2RhdGEpXG5pb191cmluZy9xdWVyeS5jLTE3LSNkZWZpbmUgSU9fTUFYX1FVRVJZX0VOVFJJRVNcdFx0MTAwMFxuaW9fdXJpbmcvcXVlcnkuYy0xOC1cbmlvX3VyaW5nL3F1ZXJ5LmM6MTk6c3RhdGljIHNzaXplX3QgaW9fcXVlcnlfb3BzKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXG5pb191cmluZy9xdWVyeS5jLTIwLXtcbi0tXG5pb191cmluZy9xdWVyeS5jLTMzLVxuaW9fdXJpbmcvcXVlcnkuYzozNDpzdGF0aWMgc3NpemVfdCBpb19xdWVyeV96Y3J4KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXG5pb191cmluZy9xdWVyeS5jLTM1LXtcbi0tXG5pb191cmluZy9xdWVyeS5jLTQ3LVxuaW9fdXJpbmcvcXVlcnkuYzo0ODpzdGF0aWMgc3NpemVfdCBpb19xdWVyeV96Y3J4X25vdGlmKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXG5pb191cmluZy9xdWVyeS5jLTQ5LXtcbi0tXG5pb191cmluZy9xdWVyeS5jLTU5LVxuaW9fdXJpbmcvcXVlcnkuYzo2MDpzdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcbmlvX3VyaW5nL3F1ZXJ5LmMtNjEte1xuLS1cbmlvX3VyaW5nL3F1ZXJ5LmMtNjgtXG5pb191cmluZy9xdWVyeS5jOjY5OnN0YXRpYyBpbnQgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEsIHZvaWQgX191c2VyICp1aGRyLFxuaW9fdXJpbmcvcXVlcnkuYy03MC1cdFx0XHRcdCB1NjQgKm5leHRfZW50cnkpXG4tLVxuaW9fdXJpbmcvcXVlcnkuYy05Ni1cdGNhc2UgSU9fVVJJTkdfUVVFUllfT1BDT0RFUzpcbmlvX3VyaW5nL3F1ZXJ5LmM6OTc6XHRcdHJldCA9IGlvX3F1ZXJ5X29wcyhkYXRhKTtcbmlvX3VyaW5nL3F1ZXJ5LmMtOTgtXHRcdGJyZWFrO1xuaW9fdXJpbmcvcXVlcnkuYy05OS1cdGNhc2UgSU9fVVJJTkdfUVVFUllfWkNSWDpcbmlvX3VyaW5nL3F1ZXJ5LmM6MTAwOlx0XHRyZXQgPSBpb19xdWVyeV96Y3J4KGRhdGEpO1xuaW9fdXJpbmcvcXVlcnkuYy0xMDEtXHRcdGJyZWFrO1xuaW9fdXJpbmcvcXVlcnkuYy0xMDItXHRjYXNlIElPX1VSSU5HX1FVRVJZX1pDUlhfRVZFTlQ6XG5pb191cmluZy9xdWVyeS5jOjEwMzpcdFx0cmV0ID0gaW9fcXVlcnlfemNyeF9ub3RpZihkYXRhKTtcbmlvX3VyaW5nL3F1ZXJ5LmMtMTA0LVx0XHRicmVhaztcbmlvX3VyaW5nL3F1ZXJ5LmMtMTA1LVx0Y2FzZSBJT19VUklOR19RVUVSWV9TQ1E6XG5pb191cmluZy9xdWVyeS5jOjEwNjpcdFx0cmV0ID0gaW9fcXVlcnlfc2NxKGRhdGEpO1xuaW9fdXJpbmcvcXVlcnkuYy0xMDctXHRcdGJyZWFrO1xuLS1cbmlvX3VyaW5nL3F1ZXJ5LmMtMTI3LVxuaW9fdXJpbmcvcXVlcnkuYzoxMjg6aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpXG5pb191cmluZy9xdWVyeS5jLTEyOS17XG5pb191cmluZy9xdWVyeS5jOjEzMDpcdHVuaW9uIGlvX3F1ZXJ5X2RhdGEgZW50cnlfYnVmZmVyO1xuaW9fdXJpbmcvcXVlcnkuYy0xMzEtXHR2b2lkIF9fdXNlciAqdWhkciA9IGFyZztcbi0tXG5pb191cmluZy9xdWVyeS5oLTYtXG5pb191cmluZy9xdWVyeS5oOjc6aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpO1xuaW9fdXJpbmcvcXVlcnkuaC04LVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzUwPXN0YXRpYyBpbnQgX19pb191cmluZ19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgb3Bjb2RlLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTU2LVx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfUVVFUlk6XG5pb191cmluZy9yZWdpc3Rlci5jOjk1NzpcdFx0cmV0ID0gaW9fcXVlcnkoYXJnLCBucl9hcmdzKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTU4LVx0XHRicmVhaztcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTEwMDE9c3RhdGljIGludCBpb191cmluZ19yZWdpc3Rlcl9ibGluZCh1bnNpZ25lZCBpbnQgb3Bjb2RlLCB2b2lkIF9fdXNlciAqYXJnLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwNy1cdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1FVRVJZOlxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDA4Olx0XHRyZXR1cm4gaW9fcXVlcnkoYXJnLCBucl9hcmdzKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwOS1cdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1JFU1RSSUNUSU9OUzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUXVlcnkgUmVnaXN0cmF0aW9uIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGEgbmV3IGBpb191cmluZ2AgZmVhdHVyZTogcXVlcnlpbmcgY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHZpYSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCB3aXRoIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGZpeCB3aXRoaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAsIHdoaWNoIEkgcmVjb2duaXplIGFzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHByb2JhYmx5IGhhbmRsaW5nIHRoZSBhY3R1YWwgcXVlcnkgcHJvY2Vzc2luZy4KClRoZSBpc3N1ZSwgYXBwYXJlbnRseSwgaXMgdGhhdCBgaGRyLnNpemVgIHdpdGhpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBjYW4sIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgZXhjZWVkIGBQQUdFX1NJWkVgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBleGNlZWRpbmcgdGhlIHBhZ2Ugc2l6ZSB3aXRoIGBjb3B5X3N0cnVjdF90b191c2VyKClgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgcHJvYmxlbXMsIGxpa2UgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcy4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiBgaW9fdXJpbmcvcXVlcnkuY2AsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBpcyBsb2NhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHNpemUgaXMgY2FsY3VsYXRlZCwgd2hlcmUgdGhlIHBvdGVudGlhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciwgYW5kIGlmIHRoZSBmaXggYWRkcmVzc2VzIHRoZSByb290IGNhdXNlIG9yIGp1c3QgYSBzeW1wdG9tLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcXVlcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjk6XHRzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcbiAgNzA6XHRcdFx0XHRcdCB1NjQgKm5leHRfZW50cnkpXG4gIDcxOlx0e1xuICA3MjpcdFx0c3RydWN0IGlvX3VyaW5nX3F1ZXJ5X2hkciBoZHI7XG4gIDczOlx0XHRzaXplX3QgdXNpemUsIHJlc19zaXplID0gMDtcbiAgNzQ6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbiAgNzU6XHRcdHZvaWQgX191c2VyICp1ZGF0YTtcbiAgNzY6XHRcbiAgNzc6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsIHVoZHIsIHNpemVvZihoZHIpKSlcbiAgNzg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDc5Olx0XHQvKiBjb3B5X3N0cnVjdF90b191c2VyKCkgemVyb3MgdXAgdG8gdXNpemUgYnl0ZXMgKi9cbiAgODA6XHRcdGlmIChoZHIuc2l6ZSBcdTAwM2UgUEFHRV9TSVpFKVxuICA4MTpcdFx0XHRyZXR1cm4gLUUyQklHO1xuICA4MjpcdFx0dXNpemUgPSBoZHIuc2l6ZTtcbiAgODM6XHRcdGhkci5zaXplID0gbWluKGhkci5zaXplLCBJT19NQVhfUVVFUllfU0laRSk7XG4gIDg0Olx0XHR1ZGF0YSA9IHU2NF90b191c2VyX3B0cihoZHIucXVlcnlfZGF0YSk7XG4gIDg1Olx0XG4gIDg2Olx0XHRpZiAoaGRyLnF1ZXJ5X29wIFx1MDAzZT0gX19JT19VUklOR19RVUVSWV9NQVgpIHtcbiAgODc6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gIDg4Olx0XHRcdGdvdG8gb3V0O1xuICA4OTpcdFx0fVxuICA5MDpcdFx0aWYgKCFtZW1faXNfemVybyhoZHIuX19yZXN2LCBzaXplb2YoaGRyLl9fcmVzdikpIHx8IGhkci5yZXN1bHQgfHwgIWhkci5zaXplKVxuICA5MTpcdFx0XHRnb3RvIG91dDtcbiAgOTI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCB1ZGF0YSwgaGRyLnNpemUpKVxuICA5MzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAgOTQ6XHRcbiAgOTU6XHRcdHN3aXRjaCAoaGRyLnF1ZXJ5X29wKSB7XG4gIDk2Olx0XHRjYXNlIElPX1VSSU5HX1FVRVJZX09QQ09ERVM6XG4gIDk3Olx0XHRcdHJldCA9IGlvX3F1ZXJ5X29wcyhkYXRhKTtcbiAgOTg6XHRcdFx0YnJlYWs7XG4gIDk5Olx0XHRjYXNlIElPX1VSSU5HX1FVRVJZX1pDUlg6XG4gMTAwOlx0XHRcdHJldCA9IGlvX3F1ZXJ5X3pjcngoZGF0YSk7XG4gMTAxOlx0XHRcdGJyZWFrO1xuIDEwMjpcdFx0Y2FzZSBJT19VUklOR19RVUVSWV9aQ1JYX0VWRU5UOlxuIDEwMzpcdFx0XHRyZXQgPSBpb19xdWVyeV96Y3J4X25vdGlmKGRhdGEpO1xuIDEwNDpcdFx0XHRicmVhaztcbiAxMDU6XHRcdGNhc2UgSU9fVVJJTkdfUVVFUllfU0NROlxuIDEwNjpcdFx0XHRyZXQgPSBpb19xdWVyeV9zY3EoZGF0YSk7XG4gMTA3Olx0XHRcdGJyZWFrO1xuIDEwODpcdFx0fVxuIDEwOTpcdFxuIDExMDpcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbiAxMTE6XHRcdFx0aWYgKFdBUk5fT05fT05DRShyZXQgXHUwMDNlIElPX01BWF9RVUVSWV9TSVpFKSlcbiAxMTI6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxMTM6XHRcdFx0cmVzX3NpemUgPSByZXQ7XG4gMTE0Olx0XHRcdHJldCA9IDA7XG4gMTE1Olx0XHR9XG4gMTE2Olx0b3V0OlxuIDExNzpcdFx0aGRyLnJlc3VsdCA9IHJldDtcbiAxMTg6XHRcdGhkci5zaXplID0gbWluX3Qoc2l6ZV90LCB1c2l6ZSwgcmVzX3NpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaW9fdXJpbmdgIFJlZ2lzdHJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBjaGFuZ2UgYXBwZWFycyB0byBiZSBmdW5jdGlvbmFsLiBJIGNhbiBzZWUgdGhhdCBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCB0aHJvdWdoIGBpb191cmluZ19yZWdpc3RlcmAgdXNpbmcgdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIGZsYWcuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIHdvcmtpbmcuIFRoZSBjb2RlIG1lbnRpb25zIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgLCBidXQgdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgSSB3b24mIzM5O3QgZmluZCB0aGUgY29yZSBsb2dpYyB0aGVyZSBkaXJlY3RseS4gTXkgZm9jdXMgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zOiBlaXRoZXIgYGlvX3F1ZXJ5YCwgb3IgcGVyaGFwcyBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgLCBvciBldmVuIHRoZSBsb3ctbGV2ZWwgYF9faW9fdXJpbmdfcmVnaXN0ZXJgLgoKYGlvX3F1ZXJ5YCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGUsIGFuZCBpdCYjMzk7cyB0aGFua2Z1bGx5IG5vdCBzdGF0aWMuIEV4Y2VsbGVudC4gTm93LCBhY2NvcmRpbmcgdG8gdGhlIG5vdGVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBpb191cmluZy9xdWVyeS5jYC4gVGltZSB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiBgaW9fcXVlcnlgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgcmVnaXN0cmF0aW9uIHF1ZXJ5IGlzIGJlaW5nIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcXVlcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE5Olx0XG4gMTIwOlx0XHRpZiAoY29weV9zdHJ1Y3RfdG9fdXNlcih1ZGF0YSwgdXNpemUsIGRhdGEsIGhkci5zaXplLCBOVUxMKSlcbiAxMjE6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMTIyOlx0XHRpZiAoY29weV90b191c2VyKHVoZHIsIFx1MDAyNmhkciwgc2l6ZW9mKGhkcikpKVxuIDEyMzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxMjQ6XHRcdCpuZXh0X2VudHJ5ID0gaGRyLm5leHRfZW50cnk7XG4gMTI1Olx0XHRyZXR1cm4gMDtcbiAxMjY6XHR9XG4gMTI3Olx0XG4gMTI4Olx0aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpXG4gMTI5Olx0e1xuIDEzMDpcdFx0dW5pb24gaW9fcXVlcnlfZGF0YSBlbnRyeV9idWZmZXI7XG4gMTMxOlx0XHR2b2lkIF9fdXNlciAqdWhkciA9IGFyZztcbiAxMzI6XHRcdGludCByZXQsIG5yID0gMDtcbiAxMzM6XHRcbiAxMzQ6XHRcdG1lbXNldChcdTAwMjZlbnRyeV9idWZmZXIsIDAsIHNpemVvZihlbnRyeV9idWZmZXIpKTtcbiAxMzU6XHRcbiAxMzY6XHRcdGlmIChucl9hcmdzKVxuIDEzNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMzg6XHRcbiAxMzk6XHRcdHdoaWxlICh1aGRyKSB7XG4gMTQwOlx0XHRcdHU2NCBuZXh0X2hkcjtcbiAxNDE6XHRcbiAxNDI6XHRcdFx0cmV0ID0gaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KFx1MDAyNmVudHJ5X2J1ZmZlciwgdWhkciwgXHUwMDI2bmV4dF9oZHIpO1xuIDE0MzpcdFx0XHRpZiAocmV0KVxuIDE0NDpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTQ1Olx0XHRcdHVoZHIgPSB1NjRfdG9fdXNlcl9wdHIobmV4dF9oZHIpO1xuIDE0NjpcdFxuIDE0NzpcdFx0XHQvKiBIYXZlIHNvbWUgbGltaXQgdG8gYXZvaWQgYSBwb3RlbnRpYWwgY3ljbGUgKi9cbiAxNDg6XHRcdFx0aWYgKCYjNDM7JiM0MztuciBcdTAwM2U9IElPX01BWF9RVUVSWV9FTlRSSUVTKVxuIDE0OTpcdFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIDE1MDpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gMTUxOlx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiAxNTI6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMTUzOlx0XHR9XG4gMTU0Olx0XHRyZXR1cm4gMDtcbiAxNTU6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWluZCBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgZnVuY3Rpb24gYGlvX3F1ZXJ5YC4gVGhhdCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgdGhpcyBzeXN0ZW0uIE5vdywgYXJlIHRoZXJlIGFueSBrZXkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhc3NvY2lhdGVkIHdpdGggaXQgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQWgsIHllcywgdGhlIG9idmlvdXMgb25lOiBgQ09ORklHX0lPX1VSSU5HYC4gVGhhdCYjMzk7cyB0aGUgbWFpbiBmbGFnIHRoYXQgd2lsbCBsaWtlbHkgY29udHJvbCBtdWNoIG9mIHRoZSBiZWhhdmlvciBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFdoZXJlIGNhbiBJIGZpbmQgdGhlIGRldGFpbHMgb24gdGhhdD8gUmlnaHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGlvX3VyaW5nL0tjb25maWdgLCBhbmQgaWYgdGhhdCBkb2VzbiYjMzk7dCBob2xkIHRoZSBhbnN3ZXIsIEkmIzM5O2xsIG1vdmUgb24gdG8gYGluaXQvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBJT19VUklOR2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTctXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzktXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk0MS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTItXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcbmlvX3VyaW5nL0tjb25maWctMTQtXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL0tjb25maWctMTktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRpdmluZyBpbnRvIHRoZSBgSU9fVVJJTkdgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBJT19VUklOR2AgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlLiBMZXQmIzM5O3Mgc2VlIGhvdyBgaW9fcXVlcnlgIGlzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbi4gUmlnaHQsIGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYGlvX3VyaW5nX3JlZ2lzdGVyYCBhbmQgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYC4gVGhvc2UgYXJlIGJvdGggZGVmaW5lZCB3aXRoaW4gYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBJbnRlcmVzdGluZy4gU2luY2UgSSBoYXZlIHRvIGNob29zZSBvbmUgdG8gZGl2ZSBpbnRvLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb191cmluZ19yZWdpc3Rlcl9ibGluZGAuIEkgZmlndXJlIHRoYXQgaXRzIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JlZ2lzdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk5NTpcdH1cbiA5OTY6XHRcbiA5OTc6XHQvKlxuIDk5ODpcdCAqIFwmIzM0O2JsaW5kXCYjMzQ7IHJlZ2lzdHJhdGlvbiBvcGNvZGVzIGFyZSBvbmVzIHdoZXJlIHRoZXJlJiMzOTtzIG5vIHJpbmcgZ2l2ZW4sIGFuZFxuIDk5OTpcdCAqIGhlbmNlIHRoZSBzb3VyY2UgZmQgbXVzdCBiZSAtMS5cbjEwMDA6XHQgKi9cbjEwMDE6XHRzdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXG4xMDAyOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfYXJncylcbjEwMDM6XHR7XG4xMDA0Olx0XHRzd2l0Y2ggKG9wY29kZSkge1xuMTAwNTpcdFx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfU0VORF9NU0dfUklORzpcbjEwMDY6XHRcdFx0cmV0dXJuIGlvX3VyaW5nX3JlZ2lzdGVyX3NlbmRfbXNnX3JpbmcoYXJnLCBucl9hcmdzKTtcbjEwMDc6XHRcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1FVRVJZOlxuMTAwODpcdFx0XHRyZXR1cm4gaW9fcXVlcnkoYXJnLCBucl9hcmdzKTtcbjEwMDk6XHRcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1JFU1RSSUNUSU9OUzpcbjEwMTA6XHRcdFx0cmV0dXJuIGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrKGFyZywgbnJfYXJncyk7XG4xMDExOlx0XHRjYXNlIElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSOlxuMTAxMjpcdFx0XHRyZXR1cm4gaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKGFyZywgbnJfYXJncyk7XG4xMDEzOlx0XHR9XG4xMDE0Olx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwMTU6XHR9XG4xMDE2Olx0XG4xMDE3Olx0U1lTQ0FMTF9ERUZJTkU0KGlvX3VyaW5nX3JlZ2lzdGVyLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIG9wY29kZSxcbjEwMTg6XHRcdFx0dm9pZCBfX3VzZXIgKiwgYXJnLCB1bnNpZ25lZCBpbnQsIG5yX2FyZ3MpXG4xMDE5Olx0e1xuMTAyMDpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHg7XG4xMDIxOlx0XHRsb25nIHJldCA9IC1FQkFERjtcbjEwMjI6XHRcdHN0cnVjdCBmaWxlICpmaWxlO1xuMTAyMzpcdFx0Ym9vbCB1c2VfcmVnaXN0ZXJlZF9yaW5nO1xuMTAyNDpcdFxuMTAyNTpcdFx0dXNlX3JlZ2lzdGVyZWRfcmluZyA9ICEhKG9wY29kZSBcdTAwMjYgSU9SSU5HX1JFR0lTVEVSX1VTRV9SRUdJU1RFUkVEX1JJTkcpO1xuMTAyNjpcdFx0b3Bjb2RlIFx1MDAyNj0gfklPUklOR19SRUdJU1RFUl9VU0VfUkVHSVNURVJFRF9SSU5HO1xuMTAyNzpcdFxuMTAyODpcdFx0aWYgKG9wY29kZSBcdTAwM2U9IElPUklOR19SRUdJU1RFUl9MQVNUKVxuMTAyOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwMzA6XHRcbjEwMzE6XHRcdGlmIChmZCA9PSAtMSlcbjEwMzI6XHRcdFx0cmV0dXJuIGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKG9wY29kZSwgYXJnLCBucl9hcmdzKTtcbjEwMzM6XHRcbjEwMzQ6XHRcdGZpbGUgPSBpb191cmluZ19jdHhfZ2V0X2ZpbGUoZmQsIHVzZV9yZWdpc3RlcmVkX3JpbmcpO1xuMTAzNTpcdFx0aWYgKElTX0VSUihmaWxlKSlcbjEwMzY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoZmlsZSk7XG4xMDM3Olx0XHRjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjEwMzg6XHRcbjEwMzk6XHRcdG11dGV4X2xvY2soXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuMTA0MDpcdFx0cmV0ID0gX19pb191cmluZ19yZWdpc3RlcihjdHgsIG9wY29kZSwgYXJnLCBucl9hcmdzKTtcbjEwNDE6XHRcbjEwNDI6XHRcdHRyYWNlX2lvX3VyaW5nX3JlZ2lzdGVyKGN0eCwgb3Bjb2RlLCBjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yLFxuMTA0MzpcdFx0XHRcdFx0Y3R4LVx1MDAzZWJ1Zl90YWJsZS5uciwgcmV0KTtcbjEwNDQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzMxCgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFJlY2VudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyByZWNlbnQgcGF0Y2gsIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBjbGVhcjogYGlvX3F1ZXJ5YCAqaXMqIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gYHN5c19pb191cmluZ19yZWdpc3RlcmAuIFRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBhIG5ldyBjaGVjaywgc3BlY2lmaWNhbGx5IGBoZHIuc2l6ZSAmZ3Q7IFBBR0VfU0laRWAsIGFuZCBpdCByZXR1cm5zIGAtRTJCSUdgIGlmIHRoYXQgY29uZGl0aW9uIGlzIG1ldC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UsIGFuZCB0aGF0IHNjcmVhbXMgJiMzNDtmdXp6aW5nIHRhcmdldCYjMzQ7IHRvIG1lLiBNeSBtYWluIGZvY3VzIGhlcmUgd2lsbCBiZSBvbiB0aGUgYGlvX3F1ZXJ5YCBzeW1ib2wuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJ1dCBJIHRoaW5rIGBJT19VUklOR2AgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCB0byB3b3JyeSBhYm91dC4gWWVwLCB0aGF0IGxvb2tzIHJpZ2h0LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3F1ZXJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaXplIHZhbGlkYXRpb24gY2hlY2sgaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGlvX3F1ZXJ5YCBmdW5jdGlvbiBkdXJpbmcgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXNjYWxscyB3aXRoIHRoZSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCBvcGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsYXJnZSBzaXplcyBpbiBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19xdWVyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2l6ZSB2YWxpZGF0aW9uIGNoZWNrIGluIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBpb19xdWVyeWAgZnVuY3Rpb24gZHVyaW5nIGBpb191cmluZ19yZWdpc3RlcmAgc3lzY2FsbHMgd2l0aCB0aGUgYElPUklOR19SRUdJU1RFUl9RVUVSWWAgb3Bjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGFyZ2Ugc2l6ZXMgaW4gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGxpbWl0IGBoZHIuc2l6ZWAgdG8gYFBBR0VfU0laRWAgYmVmb3JlIGl0IGlzIHNhdmVkIGFzIGB1c2l6ZWAuIFRoZSBgdXNpemVgIHZhcmlhYmxlIGlzIGxhdGVyIHBhc3NlZCB0byBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBhcyB0aGUgdXNlciBidWZmZXIgc2l6ZS4gSWYgYHVzaXplYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsIGJ1ZmZlciBzaXplLCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB3aWxsIHplcm8gb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdXNlciBzcGFjZS4gSWYgYSB1c2VyIHByb3ZpZGVzIGFuIGV4dHJlbWVseSBsYXJnZSBgaGRyLnNpemVgLCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB3aWxsIGF0dGVtcHQgdG8gemVybyBhIG1hc3NpdmUgYW1vdW50IG9mIHVzZXIgbWVtb3J5LCBsZWFkaW5nIHRvIGEgZGVuaWFsIG9mIHNlcnZpY2UgKGUuZy4sIHNvZnQgbG9ja3VwIG9yIGV4Y2Vzc2l2ZSBDUFUgdXNhZ2UpLlxuXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBrZXJuZWwgYnVmZmVyIGBkYXRhYCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIGBtZW1zZXQoKWAgaW4gYGlvX3F1ZXJ5KClgLCBhbmQgdGhlIGV4dHJhIGJ5dGVzIHdyaXR0ZW4gdG8gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgYnkgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAuIFNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgc29mdCBsb2NrdXAgZGV0ZWN0b3JzLCBldGMuKSBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIERvUyBpc3N1ZXMgbGlrZSB0aGlzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMzEwODFhYzBjYTgwNDQ2MjhjNDhkYzRmZTVlMWU1OGRlNTY4MWU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTE6NDI6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9xdWVyeS5jIGIvaW9fdXJpbmcvcXVlcnkuYwppbmRleCA4OGEzMjU3MzY5OTI0Li5mMmI1ZTE5ZTVhZjY3IDEwMDY0NAotLS0gYS9pb191cmluZy9xdWVyeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3F1ZXJ5LmMKQEAgLTc2LDYgJiM0Mzs3Niw5IEBAIHN0YXRpYyBpbnQgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEsIHZvaWQgX191c2VyICp1aGRyLAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7aGRyLCB1aGRyLCBzaXplb2YoaGRyKSkpCiAJCXJldHVybiAtRUZBVUxUOwomIzQzOwkvKiBjb3B5X3N0cnVjdF90b191c2VyKCkgemVyb3MgdXAgdG8gdXNpemUgYnl0ZXMgKi8KJiM0MzsJaWYgKGhkci5zaXplICZndDsgUEFHRV9TSVpFKQomIzQzOwkJcmV0dXJuIC1FMkJJRzsKIAl1c2l6ZSA9IGhkci5zaXplOwogCWhkci5zaXplID0gbWluKGhkci5zaXplLCBJT19NQVhfUVVFUllfU0laRSk7CiAJdWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFF1ZXJ5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBpb191cmluZy9xdWVyeS5jYC4gSXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjazogYGlmIChoZHIuc2l6ZSAmZ3Q7IFBBR0VfU0laRSkgcmV0dXJuIC1FMkJJRztgIHJpZ2h0IGFmdGVyIGEgYGNvcHlfZnJvbV91c2VyYC4gTXkgaW5pdGlhbCByZWFjdGlvbiB3YXMsICYjMzQ7V2h5PyBXaGF0JiMzOTtzIHRoZSBwb3RlbnRpYWwgaXNzdWUgdGhleSYjMzk7cmUgYWRkcmVzc2luZz8mIzM0OyBUaGUgY29tbWVudCBhYm91dCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB6ZXJvcyB1cCB0byBgdXNpemVgIGJ5dGVzIHBpcXVlZCBteSBpbnRlcmVzdC4KCk15IGZpcnN0IHRob3VnaHQgd2FzLCBjb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBtYXliZSBhbXBsaWZpZWQgYnkgYSBsYXJnZSBgaGRyLnNpemVgPyBCdXQgdGhlbiBJIHJlbWVtYmVyZWQgaG93IGBjb3B5X3N0cnVjdF90b191c2VyKClgIGFjdHVhbGx5IHdvcmtzOiBpdCBjb3BpZXMgYGtzaXplYCBhbmQgemVyby1maWxscyBgdXNpemUgLSBrc2l6ZWAuIFNvIGEgZ2lnYW50aWMgYHVzaXplYCB3b3VsZCBpbmRlZWQgbGVhZCB0byBhIGxvdCBvZiB6ZXJvaW5nLCBwb3NzaWJseSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG1heWJlIGV2ZW4gT09NIG9yIHNvbWUga2luZCBvZiBkZW5pYWwtb2Ytc2VydmljZSwgcmlnaHQ/IEkgc3RhcnRlZCB3b25kZXJpbmcgaWYgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSB3YXMgaW52b2x2ZWQgYXQgYWxsLiBCdXQsIG5vIHRoaXMgZG9lc24mIzM5O3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBwcmV2ZW50cyBhIERvUyBvciBzaW1pbGFyIGlzc3VlIHdoZXJlIGBjb3B5X3N0cnVjdF90b191c2VyYCBoYXMgdG8gemVybyBhIGh1Z2UgY2h1bmsgb2YgbWVtb3J5LgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgc2l6ZSBjaGVjaywgcHJldmVudGluZyBhIERvUyBieSBsaW1pdGluZyB0aGUgYHVzaXplYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIHBvdGVudGlhbCBmb3IgZXhjZXNzaXZlIHplcm9pbmcgYmFzZWQgb24gYSB1c2VyLXByb3ZpZGVkIHNpemUuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGluIHRoZSBzYW1lIGZpbGUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2hhbmRsZV9xdWVyeV9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3F1ZXJ5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcXVlcnkuYz02MD1zdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcbi0tXG5pb191cmluZy9xdWVyeS5jLTY4LVxuaW9fdXJpbmcvcXVlcnkuYzo2OTpzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcbmlvX3VyaW5nL3F1ZXJ5LmMtNzAtXHRcdFx0XHQgdTY0ICpuZXh0X2VudHJ5KVxuLS1cbmlvX3VyaW5nL3F1ZXJ5LmM9MTI4PWludCBpb19xdWVyeSh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBucl9hcmdzKVxuLS1cbmlvX3VyaW5nL3F1ZXJ5LmMtMTQxLVxuaW9fdXJpbmcvcXVlcnkuYzoxNDI6XHRcdHJldCA9IGlvX2hhbmRsZV9xdWVyeV9lbnRyeShcdTAwMjZlbnRyeV9idWZmZXIsIHVoZHIsIFx1MDAyNm5leHRfaGRyKTtcbmlvX3VyaW5nL3F1ZXJ5LmMtMTQzLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4gKlNwZWNpZmljYWxseSogSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyBxdWVyeSBlbnRyaWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIGl0IHJlc2lkZXMgd2l0aGluIHRoZSBicm9hZGVyIEkvTyBzdHJ1Y3R1cmUsIGFuZCB3aGF0IHRoZSBmbG93IG9mIGluZm9ybWF0aW9uIGlzIGFzIGEgcmVzdWx0IG9mIHRoYXQgZnVuY3Rpb24mIzM5O3Mgb3BlcmF0aW9ucy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aD8gSXMgaXQgcmVzcG9uc2libGUgZm9yIGluaXRpYWwgcGFyc2luZywgZGVsZWdhdGlvbiwgb3IgZmluYWwgZGF0YSBkZWxpdmVyeT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBpdCYjMzk7cyB3b3JraW5nIGF0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgSS9PIHBpcGVsaW5lLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBzb21lIGZvcm0gb2YgcXVlcnkgc3RydWN0LCBhbmQgSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHRoZSBlbnRyeSBwb2ludCBmcm9tIHdoaWNoIHRoaW5ncyBoYXBwZW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcHJlc2VudC4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9xdWVyeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRzdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcbiAgNjE6XHR7XG4gIDYyOlx0XHRzdHJ1Y3QgaW9fdXJpbmdfcXVlcnlfc2NxICplID0gXHUwMDI2ZGF0YS1cdTAwM2VzY3E7XG4gIDYzOlx0XG4gIDY0Olx0XHRlLVx1MDAzZWhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpb19yaW5ncyk7XG4gIDY1Olx0XHRlLVx1MDAzZWhkcl9hbGlnbm1lbnQgPSBTTVBfQ0FDSEVfQllURVM7XG4gIDY2Olx0XHRyZXR1cm4gc2l6ZW9mKCplKTtcbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXG4gIDcwOlx0XHRcdFx0XHQgdTY0ICpuZXh0X2VudHJ5KVxuICA3MTpcdHtcbiAgNzI6XHRcdHN0cnVjdCBpb191cmluZ19xdWVyeV9oZHIgaGRyO1xuICA3MzpcdFx0c2l6ZV90IHVzaXplLCByZXNfc2l6ZSA9IDA7XG4gIDc0Olx0XHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4gIDc1Olx0XHR2b2lkIF9fdXNlciAqdWRhdGE7XG4gIDc2Olx0XG4gIDc3Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aGRyLCB1aGRyLCBzaXplb2YoaGRyKSkpXG4gIDc4Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuICA3OTpcdFx0LyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXG4gIDgwOlx0XHRpZiAoaGRyLnNpemUgXHUwMDNlIFBBR0VfU0laRSlcbiAgODE6XHRcdFx0cmV0dXJuIC1FMkJJRztcbiAgODI6XHRcdHVzaXplID0gaGRyLnNpemU7XG4gIDgzOlx0XHRoZHIuc2l6ZSA9IG1pbihoZHIuc2l6ZSwgSU9fTUFYX1FVRVJZX1NJWkUpO1xuICA4NDpcdFx0dWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpO1xuICA4NTpcdFxuICA4NjpcdFx0aWYgKGhkci5xdWVyeV9vcCBcdTAwM2U9IF9fSU9fVVJJTkdfUVVFUllfTUFYKSB7XG4gIDg3Olx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuICA4ODpcdFx0XHRnb3RvIG91dDtcbiAgODk6XHRcdH1cbiAgOTA6XHRcdGlmICghbWVtX2lzX3plcm8oaGRyLl9fcmVzdiwgc2l6ZW9mKGhkci5fX3Jlc3YpKSB8fCBoZHIucmVzdWx0IHx8ICFoZHIuc2l6ZSlcbiAgOTE6XHRcdFx0Z290byBvdXQ7XG4gIDkyOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgdWRhdGEsIGhkci5zaXplKSlcbiAgOTM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDk0Olx0XG4gIDk1Olx0XHRzd2l0Y2ggKGhkci5xdWVyeV9vcCkge1xuICA5NjpcdFx0Y2FzZSBJT19VUklOR19RVUVSWV9PUENPREVTOlxuICA5NzpcdFx0XHRyZXQgPSBpb19xdWVyeV9vcHMoZGF0YSk7XG4gIDk4Olx0XHRcdGJyZWFrO1xuICA5OTpcdFx0Y2FzZSBJT19VUklOR19RVUVSWV9aQ1JYOlxuIDEwMDpcdFx0XHRyZXQgPSBpb19xdWVyeV96Y3J4KGRhdGEpO1xuIDEwMTpcdFx0XHRicmVhaztcbiAxMDI6XHRcdGNhc2UgSU9fVVJJTkdfUVVFUllfWkNSWF9FVkVOVDpcbiAxMDM6XHRcdFx0cmV0ID0gaW9fcXVlcnlfemNyeF9ub3RpZihkYXRhKTtcbiAxMDQ6XHRcdFx0YnJlYWs7XG4gMTA1Olx0XHRjYXNlIElPX1VSSU5HX1FVRVJZX1NDUTpcbiAxMDY6XHRcdFx0cmV0ID0gaW9fcXVlcnlfc2NxKGRhdGEpO1xuIDEwNzpcdFx0XHRicmVhaztcbiAxMDg6XHRcdH1cbiAxMDk6XHRcbiAxMTA6XHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4gMTExOlx0XHRcdGlmIChXQVJOX09OX09OQ0UocmV0IFx1MDAzZSBJT19NQVhfUVVFUllfU0laRSkpXG4gMTEyOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMTEzOlx0XHRcdHJlc19zaXplID0gcmV0O1xuIDExNDpcdFx0XHRyZXQgPSAwO1xuIDExNTpcdFx0fVxuIDExNjpcdG91dDpcbiAxMTc6XHRcdGhkci5yZXN1bHQgPSByZXQ7XG4gMTE4Olx0XHRoZHIuc2l6ZSA9IG1pbl90KHNpemVfdCwgdXNpemUsIHJlc19zaXplKTtcbiAxMTk6XHRcbiAxMjA6XHRcdGlmIChjb3B5X3N0cnVjdF90b191c2VyKHVkYXRhLCB1c2l6ZSwgZGF0YSwgaGRyLnNpemUsIE5VTEwpKVxuIDEyMTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxMjI6XHRcdGlmIChjb3B5X3RvX3VzZXIodWhkciwgXHUwMDI2aGRyLCBzaXplb2YoaGRyKSkpXG4gMTIzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDEyNDpcdFx0Km5leHRfZW50cnkgPSBoZHIubmV4dF9lbnRyeTtcbiAxMjU6XHRcdHJldHVybiAwO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHRpbnQgaW9fcXVlcnkodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgbnJfYXJncylcbiAxMjk6XHR7XG4gMTMwOlx0XHR1bmlvbiBpb19xdWVyeV9kYXRhIGVudHJ5X2J1ZmZlcjtcbiAxMzE6XHRcdHZvaWQgX191c2VyICp1aGRyID0gYXJnO1xuIDEzMjpcdFx0aW50IHJldCwgbnIgPSAwO1xuIDEzMzpcdFxuIDEzNDpcdFx0bWVtc2V0KFx1MDAyNmVudHJ5X2J1ZmZlciwgMCwgc2l6ZW9mKGVudHJ5X2J1ZmZlcikpO1xuIDEzNTpcdFxuIDEzNjpcdFx0aWYgKG5yX2FyZ3MpXG4gMTM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEzODpcdFxuIDEzOTpcdFx0d2hpbGUgKHVoZHIpIHtcbiAxNDA6XHRcdFx0dTY0IG5leHRfaGRyO1xuIDE0MTpcdFxuIDE0MjpcdFx0XHRyZXQgPSBpb19oYW5kbGVfcXVlcnlfZW50cnkoXHUwMDI2ZW50cnlfYnVmZmVyLCB1aGRyLCBcdTAwMjZuZXh0X2hkcik7XG4gMTQzOlx0XHRcdGlmIChyZXQpXG4gMTQ0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAxNDU6XHRcdFx0dWhkciA9IHU2NF90b191c2VyX3B0cihuZXh0X2hkcik7XG4gMTQ2Olx0XG4gMTQ3Olx0XHRcdC8qIEhhdmUgc29tZSBsaW1pdCB0byBhdm9pZCBhIHBvdGVudGlhbCBjeWNsZSAqL1xuIDE0ODpcdFx0XHRpZiAoJiM0MzsmIzQzO25yIFx1MDAzZT0gSU9fTUFYX1FVRVJZX0VOVFJJRVMpXG4gMTQ5Olx0XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gMTUwOlx0XHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiAxNTE6XHRcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIDE1MjpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiAxNTM6XHRcdH1cbiAxNTQ6XHRcdHJldHVybiAwO1xuIDE1NTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5NgoJCQkJCQkJb3V0cHV0OiAyNjQKCQkJCQkJCXRob3VnaHRzOiAxMDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVnVsbmVyYWJpbGl0eSBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpemUgY2hlY2sgb24gYGhkci5zaXplYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIG92ZXJmbG93LiBCdXQgdGhlbiBJIHNlZSB0aGF0IGBjb3B5X3N0cnVjdF90b191c2VyYCBpcyBiZWluZyBjYWxsZWQgYXQgdGhlIGVuZCB3aXRoIHRoaXMgYHVzaXplYCB2YWx1ZSwgd2hpY2ggaXMgZGVyaXZlZCBmcm9tIHRoYXQgb3JpZ2luYWwgYGhkci5zaXplYC4gYGNvcHlfc3RydWN0X3RvX3VzZXJgLCBpZiB0aGUgZGVzdGluYXRpb24gYHVzaXplYCBpcyBncmVhdGVyIHRoYW4gdGhlIHNvdXJjZSBgaGRyLnNpemVgICh3aGljaCBpdCAqY2FuKiBiZSBhZnRlciB0aGUgc2l6ZSByZWR1Y3Rpb25zKSwgKnplcm9zKiB0aGUgcmVtYWluZGVyLgoKTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgYnV0IHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBUaGUgYGRhdGFgIGJ1ZmZlciwgYGVudHJ5X2J1ZmZlcmAsIGlzIG1ldGljdWxvdXNseSB6ZXJvZWQgb3V0IHVzaW5nIGBtZW1zZXRgLiBTbywgdGhlcmUmIzM5O3Mgbm8gcXVlc3Rpb24gb2YgYSBtZW1vcnkgbGVhayBvciBleHBvc2luZyBrZXJuZWwgc2VjcmV0cy4gYGhkcmAgaXMgY29waWVkICpmcm9tKiB1c2VyIHNwYWNlLCBhbmQgdGhlIHNpemUgYHJlc19zaXplYCBpcyBmcm9tIGEga2VybmVsIGZ1bmN0aW9uLgoKVGhlIHJlYWwgaXNzdWUgaXMgdGhpczogaWYgYSBtYWxpY2lvdXMgdXNlciBwcm92aWRlcyBhIGxhcmdlIGBoZHIuc2l6ZWAgdmFsdWUgKGV2ZW4gYWZ0ZXIgdGhlIGluaXRpYWwgY2hlY2sgYXQgdGhlIHN0YXJ0KSwgYGNvcHlfc3RydWN0X3RvX3VzZXJgIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gemVybyBhIG1hc3NpdmUgY2h1bmsgb2YgdXNlciBtZW1vcnkgYmVjYXVzZSBgdXNpemVgIGlzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBzaXplLCBhbmQgYGhkci5zaXplYCBpcyBvbmx5IHVzZWQgdG8gY29weSBkYXRhICpmcm9tKiB0aGUga2VybmVsICp0byogdXNlci4gIFRoaXMgbGVhZHMgdG8gYSBkZW5pYWwtb2Ytc2VydmljZSB2dWxuZXJhYmlsaXR5OiBhIHNvZnQgbG9ja3VwLCBleGNlc3NpdmUgQ1BVIHVzYWdlLCBvciBhbiBPT00gc2l0dWF0aW9uLiBJdOKAmXMgYSBjbGFzc2ljIERvUy4KClRoaXMgaXNuJiMzOTt0IGEgS0FTQU4gb3IgS01TQU4gaXNzdWUgcGVyIHNlLiBLQVNBTiBpcyBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBlcnJvcnMgKmluIGtlcm5lbC1zcGFjZSosIGFuZCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgKnJlYWRzKi4gIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGFwcGVuaW5nIGhlcmU7IGl0JiMzOTtzIGEgbG9uZywgdW5uZWNlc3NhcnkgbG9vcCBvZiB3cml0aW5nIHplcm9zIHRvIHVzZXIgbWVtb3J5IHdoaWNoIGlzIGEgRG9TLCBidXQgbm90IGEgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLiBLQVNBTiB3b3VsZCBkZXRlY3QgdGhpcyBhcyBzb2Z0IGxvY2t1cCBvciBPT00sIG9yIGEgaGFuZywgYW5kIHRoZSBmdXp6ZXJzIHdlIHVzZSB3b3VsZCBhbHNvIGZpbmQgdGhpcyBEb1MgdnVsbmVyYWJpbGl0eS4gS01TQU4gd291bGQgYmUgdXR0ZXJseSB1c2VsZXNzIGhlcmUgYmVjYXVzZSBLTVNBTiBpcyBub3QgYWJvdXQgZGV0ZWN0aW5nIERvUyB2dWxuZXJhYmlsaXRpZXM7IGl0IGRldGVjdHMgaW5mb3JtYXRpb24gbGVha3MgZHVlIHRvIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTbywgdGhlIHJlYXNvbmluZyBpcyBjbGVhci4gVGhlIGNoZWNrIGlzIHByZXNlbnQgdG8gcHJvdGVjdCB0aGUgKmtlcm5lbCogYnVmZmVyLCBidXQgbm90IHRvIHByZXZlbnQgdGhlIERvUyBpdHNlbGYuICBUaGUgbGFyZ2UgYHVzaXplYCBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGlzIHRoZSBrZXkuIFRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byB6ZXJvIG91dCBhbiBlbm9ybW91cyBhbW91bnQgb2YgdXNlci1zcGFjZSBtZW1vcnkgaWYgYW4gYXR0YWNrZXIgcHJvdmlkZXMgYSB2ZXJ5IGxhcmdlIGluaXRpYWwgc2l6ZS4gIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gZm9jdXMgb24gc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzIGFuZCBzb2Z0IGxvY2t1cC9PT00gZGV0ZWN0aW9uIHRvIGNhdGNoIGFuZCBhZGRyZXNzIHRoaXMgdHlwZSBvZiBEb1MgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBsaW1pdCBgaGRyLnNpemVgIHRvIGBQQUdFX1NJWkVgIGJlZm9yZSBpdCBpcyBzYXZlZCBhcyBgdXNpemVgLiBUaGUgYHVzaXplYCB2YXJpYWJsZSBpcyBsYXRlciBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgYXMgdGhlIHVzZXIgYnVmZmVyIHNpemUuIElmIGB1c2l6ZWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCBidWZmZXIgc2l6ZSwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHVzZXIgc3BhY2UuIElmIGEgdXNlciBwcm92aWRlcyBhbiBleHRyZW1lbHkgbGFyZ2UgYGhkci5zaXplYCwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCBhdHRlbXB0IHRvIHplcm8gYSBtYXNzaXZlIGFtb3VudCBvZiB1c2VyIG1lbW9yeSwgbGVhZGluZyB0byBhIGRlbmlhbCBvZiBzZXJ2aWNlIChlLmcuLCBzb2Z0IGxvY2t1cCBvciBleGNlc3NpdmUgQ1BVIHVzYWdlKS5cblxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGUga2VybmVsIGJ1ZmZlciBgZGF0YWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KClgIGluIGBpb19xdWVyeSgpYCwgYW5kIHRoZSBleHRyYSBieXRlcyB3cml0dGVuIHRvIHVzZXIgc3BhY2UgYXJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IGBjb3B5X3N0cnVjdF90b191c2VyKClgLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIHNvZnQgbG9ja3VwIGRldGVjdG9ycywgZXRjLikgaXMgc3VmZmljaWVudCB0byBjYXRjaCBEb1MgaXNzdWVzIGxpa2UgdGhpcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBsaW1pdCBgaGRyLnNpemVgIHRvIGBQQUdFX1NJWkVgIGJlZm9yZSBpdCBpcyBzYXZlZCBhcyBgdXNpemVgLiBUaGUgYHVzaXplYCB2YXJpYWJsZSBpcyBsYXRlciBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgYXMgdGhlIHVzZXIgYnVmZmVyIHNpemUuIElmIGB1c2l6ZWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCBidWZmZXIgc2l6ZSwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHVzZXIgc3BhY2UuIElmIGEgdXNlciBwcm92aWRlcyBhbiBleHRyZW1lbHkgbGFyZ2UgYGhkci5zaXplYCwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCBhdHRlbXB0IHRvIHplcm8gYSBtYXNzaXZlIGFtb3VudCBvZiB1c2VyIG1lbW9yeSwgbGVhZGluZyB0byBhIGRlbmlhbCBvZiBzZXJ2aWNlIChlLmcuLCBzb2Z0IGxvY2t1cCBvciBleGNlc3NpdmUgQ1BVIHVzYWdlKS5cblxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGUga2VybmVsIGJ1ZmZlciBgZGF0YWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KClgIGluIGBpb19xdWVyeSgpYCwgYW5kIHRoZSBleHRyYSBieXRlcyB3cml0dGVuIHRvIHVzZXIgc3BhY2UgYXJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IGBjb3B5X3N0cnVjdF90b191c2VyKClgLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIHNvZnQgbG9ja3VwIGRldGVjdG9ycywgZXRjLikgaXMgc3VmZmljaWVudCB0byBjYXRjaCBEb1MgaXNzdWVzIGxpa2UgdGhpcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6NDI6MzIuNzI2NTI5NzA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMDk4NzEyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19xdWVyeVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGxpbWl0IGBoZHIuc2l6ZWAgdG8gYFBBR0VfU0laRWAgYmVmb3JlIGl0IGlzIHNhdmVkIGFzIGB1c2l6ZWAuIFRoZSBgdXNpemVgIHZhcmlhYmxlIGlzIGxhdGVyIHBhc3NlZCB0byBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBhcyB0aGUgdXNlciBidWZmZXIgc2l6ZS4gSWYgYHVzaXplYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsIGJ1ZmZlciBzaXplLCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB3aWxsIHplcm8gb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdXNlciBzcGFjZS4gSWYgYSB1c2VyIHByb3ZpZGVzIGFuIGV4dHJlbWVseSBsYXJnZSBgaGRyLnNpemVgLCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB3aWxsIGF0dGVtcHQgdG8gemVybyBhIG1hc3NpdmUgYW1vdW50IG9mIHVzZXIgbWVtb3J5LCBsZWFkaW5nIHRvIGEgZGVuaWFsIG9mIHNlcnZpY2UgKGUuZy4sIHNvZnQgbG9ja3VwIG9yIGV4Y2Vzc2l2ZSBDUFUgdXNhZ2UpLlxcblxcblRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIGtlcm5lbCBidWZmZXIgYGRhdGFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYG1lbXNldCgpYCBpbiBgaW9fcXVlcnkoKWAsIGFuZCB0aGUgZXh0cmEgYnl0ZXMgd3JpdHRlbiB0byB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHplcm9lZCBieSBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYC4gU2luY2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBTdGFuZGFyZCBmdXp6aW5nICh3aXRoIEtBU0FOLCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMsIGV0Yy4pIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggRG9TIGlzc3VlcyBsaWtlIHRoaXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpemUgdmFsaWRhdGlvbiBjaGVjayBpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uIGR1cmluZyBgaW9fdXJpbmdfcmVnaXN0ZXJgIHN5c2NhbGxzIHdpdGggdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIG9wY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxhcmdlIHNpemVzIGluIGBjb3B5X3N0cnVjdF90b191c2VyKClgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MjozMi43MjY1MzgzNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzE0OTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzMTA4MWFjMGNhODA0NDYyOGM0OGRjNGZlNWUxZTU4ZGU1NjgxZTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTE6NDI6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcXVlcnkuYyBiL2lvX3VyaW5nL3F1ZXJ5LmNcXG5pbmRleCA4OGEzMjU3MzY5OTI0Li5mMmI1ZTE5ZTVhZjY3IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3F1ZXJ5LmNcXG4rKysgYi9pb191cmluZy9xdWVyeS5jXFxuQEAgLTc2LDYgKzc2LDkgQEAgc3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXFxuIFxcbiBcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmhkciwgdWhkciwgc2l6ZW9mKGhkcikpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0LyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXFxuK1xcdGlmIChoZHIuc2l6ZSBcXHUwMDNlIFBBR0VfU0laRSlcXG4rXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gXFx0dXNpemUgPSBoZHIuc2l6ZTtcXG4gXFx0aGRyLnNpemUgPSBtaW4oaGRyLnNpemUsIElPX01BWF9RVUVSWV9TSVpFKTtcXG4gXFx0dWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MjozMy4xNTAzODQxODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTgxODkyMzg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3F1ZXJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpemUgdmFsaWRhdGlvbiBjaGVjayBpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uIGR1cmluZyBgaW9fdXJpbmdfcmVnaXN0ZXJgIHN5c2NhbGxzIHdpdGggdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIG9wY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxhcmdlIHNpemVzIGluIGBjb3B5X3N0cnVjdF90b191c2VyKClgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMzEwODFhYzBjYTgwNDQ2MjhjNDhkYzRmZTVlMWU1OGRlNTY4MWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTE6NDI6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9xdWVyeS5jIGIvaW9fdXJpbmcvcXVlcnkuY1xuaW5kZXggODhhMzI1NzM2OTkyNC4uZjJiNWUxOWU1YWY2NyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3F1ZXJ5LmNcbisrKyBiL2lvX3VyaW5nL3F1ZXJ5LmNcbkBAIC03Niw2ICs3Niw5IEBAIHN0YXRpYyBpbnQgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEsIHZvaWQgX191c2VyICp1aGRyLFxuIFxuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmhkciwgdWhkciwgc2l6ZW9mKGhkcikpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdC8qIGNvcHlfc3RydWN0X3RvX3VzZXIoKSB6ZXJvcyB1cCB0byB1c2l6ZSBieXRlcyAqL1xuK1x0aWYgKGhkci5zaXplIFx1MDAzZSBQQUdFX1NJWkUpXG4rXHRcdHJldHVybiAtRTJCSUc7XG4gXHR1c2l6ZSA9IGhkci5zaXplO1xuIFx0aGRyLnNpemUgPSBtaW4oaGRyLnNpemUsIElPX01BWF9RVUVSWV9TSVpFKTtcbiBcdHVkYXRhID0gdTY0X3RvX3VzZXJfcHRyKGhkci5xdWVyeV9kYXRhKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjMzLjE1MDM4NTgyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjU4MTAyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGlvX3VyaW5nL3F1ZXJ5LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGEgc2l6ZSBjaGVjazpcblxuYGBgY1xuLyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXG5pZiAoaGRyLnNpemUgXHUwMDNlIFBBR0VfU0laRSlcblx0cmV0dXJuIC1FMkJJRztcbmBgYFxuXG5SaWdodCBhd2F5LCBJIHNlZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBob3cgYGlvX3VyaW5nYCBoYW5kbGVzIHF1ZXJpZXMuICBUaGUgYWRkZWQgY2hlY2sgc2VlbXMgdG8gYmUgYSBwcm9hY3RpdmUgbWVhc3VyZS4gIEl0J3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHdpdGggYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2hlcmUgYGhkci5zaXplYCAodGhlIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgZGF0YSB0cmFuc2ZlcikgY291bGQgYmUgZXhjZXNzaXZlbHkgbGFyZ2UuIFRoaXMgaXMgbGlrZWx5IGludGVuZGVkIHRvIHByZXZlbnQgc29tZSBraW5kIG9mIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGluZm9ybWF0aW9uIGxlYWsgaWYgdGhlIHNpemUgZXhjZWVkcyBhIHBhZ2UuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwcyBhcmUgdG8gcmVhbGx5IGRpZyBpbnRvIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGl0c2VsZiB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGlzIGNoZWNrLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlIGBpb191cmluZ2AgY29uZmlndXJhdGlvbiBvdmVyYWxsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFyZWFzIG9mIHBvdGVudGlhbCBpbnRlcmVzdCByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlxuXG5MZXQncyB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGFuZCBzZWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MjozNy40NzYxOTgyODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMjU0MjA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19oYW5kbGVfcXVlcnlfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcXVlcnkuYz02MD1zdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtNjgtXFxuaW9fdXJpbmcvcXVlcnkuYzo2OTpzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcXG5pb191cmluZy9xdWVyeS5jLTcwLVxcdFxcdFxcdFxcdCB1NjQgKm5leHRfZW50cnkpXFxuLS1cXG5pb191cmluZy9xdWVyeS5jPTEyOD1pbnQgaW9fcXVlcnkodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgbnJfYXJncylcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTQxLVxcbmlvX3VyaW5nL3F1ZXJ5LmM6MTQyOlxcdFxcdHJldCA9IGlvX2hhbmRsZV9xdWVyeV9lbnRyeShcXHUwMDI2ZW50cnlfYnVmZmVyLCB1aGRyLCBcXHUwMDI2bmV4dF9oZHIpO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTQzLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjM5LjE4ODc0Njg5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDcxMTcxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFF1ZXJ5IEhhbmRsaW5nIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGlzIHN5c3RlbSBoYW5kbGVzIHF1ZXJpZXMuIEkgc2VlIHRoYXQgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgaW9fcXVlcnlgLiBUaGF0J3MgdGhlIGtleSByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIHNvIGxldCdzIGJhY2sgdXAgYW5kIGludmVzdGlnYXRlIGBpb19xdWVyeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgdGhlIGlucHV0IGFyZ3VtZW50cyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgYGlvX3F1ZXJ5YCBpcyBjcnVjaWFsIHRvIG1ha2luZyBzZW5zZSBvZiB3aGVyZSB0aGlzIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGZpdHMgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0Mjo0Mi40OTU4NjcxOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTY1NzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19xdWVyeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmM9OT1zdGF0aWMgaW50IGRwc2VjaV9kYmdfZnFzX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmMtMjItXFx0XFx0ZnFpZCA9IHByaXYtXFx1MDAzZXJ4X3F1ZXVlX2F0dHJbaV0uZnFpZDtcXG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmM6MjM6XFx0XFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoTlVMTCwgZnFpZCwgXFx1MDAyNmZjbnQsIFxcdTAwMjZiY250KTtcXG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmMtMjQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYy0zNi1cXHRcXHRmcWlkID0gcHJpdi1cXHUwMDNldHhfcXVldWVfYXR0cltpXS5mcWlkO1xcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYzozNzpcXHRcXHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBmcWlkLCBcXHUwMDI2ZmNudCwgXFx1MDAyNmJjbnQpO1xcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYy0zOC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYz03OT1zdHJ1Y3QgYW1kZ3B1X21jYV9yYXNfYmxvY2sgbWNhX3YzXzBfbXAxX3JhcyA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmMtODUtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYzo4NjpzdGF0aWMgdm9pZCBtY2FfdjNfMF9tcGlvX3F1ZXJ5X3Jhc19lcnJvcl9jb3VudChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldixcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9tY2FfdjNfMC5jLTg3LVxcdFxcdFxcdFxcdFxcdCAgICAgICB2b2lkICpyYXNfZXJyb3Jfc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYz05ND1zdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yYXNfYmxvY2tfaHdfb3BzIG1jYV92M18wX21waW9faHdfb3BzID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmM6OTU6XFx0LnF1ZXJ5X3Jhc19lcnJvcl9jb3VudCA9IG1jYV92M18wX21waW9fcXVlcnlfcmFzX2Vycm9yX2NvdW50LFxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmMtOTYtXFx0LnF1ZXJ5X3Jhc19lcnJvcl9hZGRyZXNzID0gTlVMTCxcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmM9MzE2PXY0bDJfY3RybF9oYW5kbGVyX3RvX3JhZGlvKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqZClcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmMtMzIzLSAqL1xcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmM6MzI0OnN0YXRpYyBpbnQgc2k0NzZ4X3JhZGlvX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LFxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmMtMzI1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXBhYmlsaXR5KVxcbi0tXFxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3NnguYz0xMTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2k0NzYxX2lvY3RsX29wcyA9IHtcXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDc2eC5jOjExNTQ6XFx0LnZpZGlvY19xdWVyeWNhcFxcdFxcdD0gc2k0NzZ4X3JhZGlvX3F1ZXJ5Y2FwLFxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmMtMTE1NS1cXHQudmlkaW9jX2dfdHVuZXJcXHRcXHRcXHQ9IHNpNDc2eF9yYWRpb19nX3R1bmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmM9NTk9c3RhdGljIGludCBkcGFhMl9kYmdfZnFzX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy03MS1cXHRcXHRmcSA9IFxcdTAwMjZwcml2LVxcdTAwM2VmcVtpXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYzo3MjpcXHRcXHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBmcS1cXHUwMDNlZnFpZCwgXFx1MDAyNmZjbnQsIFxcdTAwMjZiY250KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy03My1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmM9MTIyPXN0YXRpYyBpbnQgZHBhYTJfZGJnX2JwX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy0xNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmM6MTQ2OlxcdFxcdGVyciA9IGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KE5VTEwsIGJwLVxcdTAwM2VicGlkLCBcXHUwMDI2YnVmX2NudCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmMtMTQ3LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguYz0yMjI4PXN0YXRpYyB1MzIgZHBhYTJfZXRoX2luZ3Jlc3NfZnFfY291bnQoc3RydWN0IGRwYWEyX2V0aF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jLTIyMzUtXFx0XFx0ZnEgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZnFbaV07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jOjIyMzY6XFx0XFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoTlVMTCwgZnEtXFx1MDAzZWZxaWQsIFxcdTAwMjZmY250LCBcXHUwMDI2YmNudCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jLTIyMzctXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYz0yNDY9c3RhdGljIHZvaWQgZHBhYTJfZXRoX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYy0zMDctXFx0XFx0LyogUHJpbnQgRlEgaW5zdGFudGFuZW91cyBjb3VudHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jOjMwODpcXHRcXHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBwcml2LVxcdTAwM2VmcVtqXS5mcWlkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMzA5LVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZmY250LCBcXHUwMDI2YmNudCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jLTMyOS1cXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2JwczsgaisrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYzozMzA6XFx0XFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfYnBfY291bnQoTlVMTCwgcHJpdi1cXHUwMDNlYnBbal0tXFx1MDAzZWJwaWQsIFxcdTAwMjZidWZfY250KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jLTMzMS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy9yaW9fbXBvcnRfY2Rldi5jPTIzNDU9c3RhdGljIHN0cnVjdCBtcG9ydF9kZXYgKm1wb3J0X2NkZXZfYWRkKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0KVxcbi0tXFxuZHJpdmVycy9yYXBpZGlvL2RldmljZXMvcmlvX21wb3J0X2NkZXYuYy0yMzk4LVxcdH1cXG5kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy9yaW9fbXBvcnRfY2Rldi5jOjIzOTk6XFx0cmV0ID0gcmlvX3F1ZXJ5X21wb3J0KG1wb3J0LCBcXHUwMDI2YXR0cik7XFxuZHJpdmVycy9yYXBpZGlvL2RldmljZXMvcmlvX21wb3J0X2NkZXYuYy0yNDAwLVxcdGlmICghcmV0KSB7XFxuLS1cXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmM9ODA9RVhQT1JUX1NZTUJPTF9HUEwocmlvX2xvY2FsX2dldF9kZXZpY2VfaWQpO1xcbi0tXFxuZHJpdmVycy9yYXBpZGlvL3Jpby5jLTgyLS8qKlxcbmRyaXZlcnMvcmFwaWRpby9yaW8uYzo4MzogKiByaW9fcXVlcnlfbXBvcnQgLSBRdWVyeSBtcG9ydCBkZXZpY2UgYXR0cmlidXRlc1xcbmRyaXZlcnMvcmFwaWRpby9yaW8uYy04NC0gKiBAcG9ydDogbXBvcnQgZGV2aWNlIHRvIHF1ZXJ5XFxuLS1cXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtODktICovXFxuZHJpdmVycy9yYXBpZGlvL3Jpby5jOjkwOmludCByaW9fcXVlcnlfbXBvcnQoc3RydWN0IHJpb19tcG9ydCAqcG9ydCxcXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtOTEtXFx0XFx0ICAgIHN0cnVjdCByaW9fbXBvcnRfYXR0ciAqbXBvcnRfYXR0cilcXG4tLVxcbmRyaXZlcnMvcmFwaWRpby9yaW8uYy05Ni19XFxuZHJpdmVycy9yYXBpZGlvL3Jpby5jOjk3OkVYUE9SVF9TWU1CT0wocmlvX3F1ZXJ5X21wb3J0KTtcXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtOTgtXFxuLS1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYz03NTE9RVhQT1JUX1NZTUJPTF9HUEwoZHBhYTJfaW9fc3RvcmVfbmV4dCk7XFxuLS1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03NTMtLyoqXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM6NzU0OiAqIGRwYWEyX2lvX3F1ZXJ5X2ZxX2NvdW50KCkgLSBHZXQgdGhlIGZyYW1lIGFuZCBieXRlIGNvdW50IGZvciBhIGdpdmVuIGZxLlxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc1NS0gKiBAZDogdGhlIGdpdmVuIERQSU8gb2JqZWN0Llxcbi0tXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtNzY0LSAqL1xcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc2NTppbnQgZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoc3RydWN0IGRwYWEyX2lvICpkLCB1MzIgZnFpZCxcXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03NjYtXFx0XFx0XFx0ICAgIHUzMiAqZmNudCwgdTMyICpiY250KVxcbi0tXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtNzg3LX1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYzo3ODg6RVhQT1JUX1NZTUJPTF9HUEwoZHBhYTJfaW9fcXVlcnlfZnFfY291bnQpO1xcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc4OS1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03OTAtLyoqXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM6NzkxOiAqIGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KCkgLSBRdWVyeSB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgY3VycmVudGx5IGluIGFcXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03OTItICogYnVmZmVyIHBvb2wuXFxuLS1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03OTgtICovXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM6Nzk5OmludCBkcGFhMl9pb19xdWVyeV9icF9jb3VudChzdHJ1Y3QgZHBhYTJfaW8gKmQsIHUxNiBicGlkLCB1MzIgKm51bSlcXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy04MDAte1xcbi0tXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtODE4LX1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYzo4MTk6RVhQT1JUX1NZTUJPTF9HUEwoZHBhYTJfaW9fcXVlcnlfYnBfY291bnQpO1xcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTgyMC1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL2hhbF9zZGlvLmM9MTE9dTggcnR3X2hhbF9zZGlvX21heF90eG9xdF9mcmVlX3NwYWNlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL2hhbF9zZGlvLmMtMjAtXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvaGFsX3NkaW8uYzoyMTp1OCBydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2UoXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvaGFsX3NkaW8uYy0yMi1cXHRzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHU4IFBhZ2VJZHgsIHU4IFJlcXVpcmVkUGFnZU51bVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvcnRsODcyM2JzX3htaXQuYz0zNj1zdGF0aWMgczMyIHJ0bDg3MjNfZGVxdWV1ZV93cml0ZXBvcnQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvcnRsODcyM2JzX3htaXQuYy03Ni1cXHQvKiAgY2hlY2sgaWYgaGFyZHdhcmUgdHggZmlmbyBwYWdlIGlzIGVub3VnaCAqL1xcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL3J0bDg3MjNic194bWl0LmM6Nzc6XFx0aWYgKCFydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2UocHJpX3BhZGFwdGVyLCBQYWdlSWR4LCBweG1pdGJ1Zi1cXHUwMDNlcGdfbnVtKSkge1xcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL3J0bDg3MjNic194bWl0LmMtNzgtXFx0XFx0aWYgKCFiVXBkYXRlUGFnZU51bSkge1xcbi0tXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9pbmNsdWRlL2hhbF9zZGlvLmg9MTI9dTggcnR3X2hhbF9zZGlvX21heF90eG9xdF9mcmVlX3NwYWNlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7XFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9pbmNsdWRlL2hhbF9zZGlvLmg6MTM6dTggcnR3X2hhbF9zZGlvX3F1ZXJ5X3R4X2ZyZWVwYWdlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgdTggUGFnZUlkeCwgdTggUmVxdWlyZWRQYWdlTnVtKTtcXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2luY2x1ZGUvaGFsX3NkaW8uaC0xNC12b2lkIHJ0d19oYWxfc2Rpb191cGRhdGVfdHhfZnJlZXBhZ2Uoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBQYWdlSWR4LCB1OCBSZXF1aXJlZFBhZ2VOdW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9yaW8uaD01NTQ9ZXh0ZXJuIHZvaWQgcmlvX2Nsb3NlX291dGJfbWJveChzdHJ1Y3QgcmlvX21wb3J0ICosIGludCk7XFxuaW5jbHVkZS9saW51eC9yaW8uaDo1NTU6ZXh0ZXJuIGludCByaW9fcXVlcnlfbXBvcnQoc3RydWN0IHJpb19tcG9ydCAqcG9ydCxcXG5pbmNsdWRlL2xpbnV4L3Jpby5oLTU1Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgcmlvX21wb3J0X2F0dHIgKm1wb3J0X2F0dHIpO1xcbi0tXFxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmg9MTI4PXN0cnVjdCBkcGFhMl9kcSAqZHBhYTJfaW9fc3RvcmVfbmV4dChzdHJ1Y3QgZHBhYTJfaW9fc3RvcmUgKnMsIGludCAqaXNfbGFzdCk7XFxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmgtMTI5LVxcbmluY2x1ZGUvc29jL2ZzbC9kcGFhMi1pby5oOjEzMDppbnQgZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoc3RydWN0IGRwYWEyX2lvICpkLCB1MzIgZnFpZCxcXG5pbmNsdWRlL3NvYy9mc2wvZHBhYTItaW8uaC0xMzEtXFx0XFx0XFx0ICAgIHUzMiAqZmNudCwgdTMyICpiY250KTtcXG5pbmNsdWRlL3NvYy9mc2wvZHBhYTItaW8uaDoxMzI6aW50IGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KHN0cnVjdCBkcGFhMl9pbyAqZCwgdTE2IGJwaWQsXFxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmgtMTMzLVxcdFxcdFxcdCAgICB1MzIgKm51bSk7XFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTgtXFxuaW9fdXJpbmcvcXVlcnkuYzo5OnVuaW9uIGlvX3F1ZXJ5X2RhdGEge1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTAtXFx0c3RydWN0IGlvX3VyaW5nX3F1ZXJ5X29wY29kZSBvcGNvZGVzO1xcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYy0xNS1cXG5pb191cmluZy9xdWVyeS5jOjE2OiNkZWZpbmUgSU9fTUFYX1FVRVJZX1NJWkVcXHRcXHRzaXplb2YodW5pb24gaW9fcXVlcnlfZGF0YSlcXG5pb191cmluZy9xdWVyeS5jLTE3LSNkZWZpbmUgSU9fTUFYX1FVRVJZX0VOVFJJRVNcXHRcXHQxMDAwXFxuaW9fdXJpbmcvcXVlcnkuYy0xOC1cXG5pb191cmluZy9xdWVyeS5jOjE5OnN0YXRpYyBzc2l6ZV90IGlvX3F1ZXJ5X29wcyh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhKVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMjAte1xcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYy0zMy1cXG5pb191cmluZy9xdWVyeS5jOjM0OnN0YXRpYyBzc2l6ZV90IGlvX3F1ZXJ5X3pjcngodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcXG5pb191cmluZy9xdWVyeS5jLTM1LXtcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtNDctXFxuaW9fdXJpbmcvcXVlcnkuYzo0ODpzdGF0aWMgc3NpemVfdCBpb19xdWVyeV96Y3J4X25vdGlmKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXFxuaW9fdXJpbmcvcXVlcnkuYy00OS17XFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTU5LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6NjA6c3RhdGljIHNzaXplX3QgaW9fcXVlcnlfc2NxKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXFxuaW9fdXJpbmcvcXVlcnkuYy02MS17XFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTY4LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6Njk6c3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXFxuaW9fdXJpbmcvcXVlcnkuYy03MC1cXHRcXHRcXHRcXHQgdTY0ICpuZXh0X2VudHJ5KVxcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYy05Ni1cXHRjYXNlIElPX1VSSU5HX1FVRVJZX09QQ09ERVM6XFxuaW9fdXJpbmcvcXVlcnkuYzo5NzpcXHRcXHRyZXQgPSBpb19xdWVyeV9vcHMoZGF0YSk7XFxuaW9fdXJpbmcvcXVlcnkuYy05OC1cXHRcXHRicmVhaztcXG5pb191cmluZy9xdWVyeS5jLTk5LVxcdGNhc2UgSU9fVVJJTkdfUVVFUllfWkNSWDpcXG5pb191cmluZy9xdWVyeS5jOjEwMDpcXHRcXHRyZXQgPSBpb19xdWVyeV96Y3J4KGRhdGEpO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTAxLVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTAyLVxcdGNhc2UgSU9fVVJJTkdfUVVFUllfWkNSWF9FVkVOVDpcXG5pb191cmluZy9xdWVyeS5jOjEwMzpcXHRcXHRyZXQgPSBpb19xdWVyeV96Y3J4X25vdGlmKGRhdGEpO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTA0LVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTA1LVxcdGNhc2UgSU9fVVJJTkdfUVVFUllfU0NROlxcbmlvX3VyaW5nL3F1ZXJ5LmM6MTA2OlxcdFxcdHJldCA9IGlvX3F1ZXJ5X3NjcShkYXRhKTtcXG5pb191cmluZy9xdWVyeS5jLTEwNy1cXHRcXHRicmVhaztcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTI3LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6MTI4OmludCBpb19xdWVyeSh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBucl9hcmdzKVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTI5LXtcXG5pb191cmluZy9xdWVyeS5jOjEzMDpcXHR1bmlvbiBpb19xdWVyeV9kYXRhIGVudHJ5X2J1ZmZlcjtcXG5pb191cmluZy9xdWVyeS5jLTEzMS1cXHR2b2lkIF9fdXNlciAqdWhkciA9IGFyZztcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmgtNi1cXG5pb191cmluZy9xdWVyeS5oOjc6aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpO1xcbmlvX3VyaW5nL3F1ZXJ5LmgtOC1cXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzUwPXN0YXRpYyBpbnQgX19pb191cmluZ19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgb3Bjb2RlLFxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NTYtXFx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfUVVFUlk6XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo5NTc6XFx0XFx0cmV0ID0gaW9fcXVlcnkoYXJnLCBucl9hcmdzKTtcXG5pb191cmluZy9yZWdpc3Rlci5jLTk1OC1cXHRcXHRicmVhaztcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MTAwMT1zdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMDctXFx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfUVVFUlk6XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDA4OlxcdFxcdHJldHVybiBpb19xdWVyeShhcmcsIG5yX2FyZ3MpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwOS1cXHRjYXNlIElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjQ0LjI3NzUzMjE1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzM4NDkwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBRdWVyeSBSZWdpc3RyYXRpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGEgbmV3IGBpb191cmluZ2AgZmVhdHVyZTogcXVlcnlpbmcgY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHZpYSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCB3aXRoIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGZpeCB3aXRoaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAsIHdoaWNoIEkgcmVjb2duaXplIGFzIHRoZSBmdW5jdGlvbiB0aGF0J3MgcHJvYmFibHkgaGFuZGxpbmcgdGhlIGFjdHVhbCBxdWVyeSBwcm9jZXNzaW5nLlxuXG5UaGUgaXNzdWUsIGFwcGFyZW50bHksIGlzIHRoYXQgYGhkci5zaXplYCB3aXRoaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAgY2FuLCB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGV4Y2VlZCBgUEFHRV9TSVpFYC4gVGhhdCdzIGEgcmVkIGZsYWcuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBleGNlZWRpbmcgdGhlIHBhZ2Ugc2l6ZSB3aXRoIGBjb3B5X3N0cnVjdF90b191c2VyKClgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgcHJvYmxlbXMsIGxpa2UgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcy5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0J3MgZ29pbmcgb24gaW4gYGlvX3VyaW5nL3F1ZXJ5LmNgLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBpcyBsb2NhdGVkLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgc2l6ZSBpcyBjYWxjdWxhdGVkLCB3aGVyZSB0aGUgcG90ZW50aWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyLCBhbmQgaWYgdGhlIGZpeCBhZGRyZXNzZXMgdGhlIHJvb3QgY2F1c2Ugb3IganVzdCBhIHN5bXB0b20uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0Mjo0OS4zMTEzODM0MzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9xdWVyeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY5OlxcdHN0YXRpYyBpbnQgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEsIHZvaWQgX191c2VyICp1aGRyLFxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0IHU2NCAqbmV4dF9lbnRyeSlcXG4gIDcxOlxcdHtcXG4gIDcyOlxcdFxcdHN0cnVjdCBpb191cmluZ19xdWVyeV9oZHIgaGRyO1xcbiAgNzM6XFx0XFx0c2l6ZV90IHVzaXplLCByZXNfc2l6ZSA9IDA7XFxuICA3NDpcXHRcXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuICA3NTpcXHRcXHR2b2lkIF9fdXNlciAqdWRhdGE7XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2aGRyLCB1aGRyLCBzaXplb2YoaGRyKSkpXFxuICA3ODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDc5OlxcdFxcdC8qIGNvcHlfc3RydWN0X3RvX3VzZXIoKSB6ZXJvcyB1cCB0byB1c2l6ZSBieXRlcyAqL1xcbiAgODA6XFx0XFx0aWYgKGhkci5zaXplIFxcdTAwM2UgUEFHRV9TSVpFKVxcbiAgODE6XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gIDgyOlxcdFxcdHVzaXplID0gaGRyLnNpemU7XFxuICA4MzpcXHRcXHRoZHIuc2l6ZSA9IG1pbihoZHIuc2l6ZSwgSU9fTUFYX1FVRVJZX1NJWkUpO1xcbiAgODQ6XFx0XFx0dWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRpZiAoaGRyLnF1ZXJ5X29wIFxcdTAwM2U9IF9fSU9fVVJJTkdfUVVFUllfTUFYKSB7XFxuICA4NzpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4gIDg4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgODk6XFx0XFx0fVxcbiAgOTA6XFx0XFx0aWYgKCFtZW1faXNfemVybyhoZHIuX19yZXN2LCBzaXplb2YoaGRyLl9fcmVzdikpIHx8IGhkci5yZXN1bHQgfHwgIWhkci5zaXplKVxcbiAgOTE6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA5MjpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgdWRhdGEsIGhkci5zaXplKSlcXG4gIDkzOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRzd2l0Y2ggKGhkci5xdWVyeV9vcCkge1xcbiAgOTY6XFx0XFx0Y2FzZSBJT19VUklOR19RVUVSWV9PUENPREVTOlxcbiAgOTc6XFx0XFx0XFx0cmV0ID0gaW9fcXVlcnlfb3BzKGRhdGEpO1xcbiAgOTg6XFx0XFx0XFx0YnJlYWs7XFxuICA5OTpcXHRcXHRjYXNlIElPX1VSSU5HX1FVRVJZX1pDUlg6XFxuIDEwMDpcXHRcXHRcXHRyZXQgPSBpb19xdWVyeV96Y3J4KGRhdGEpO1xcbiAxMDE6XFx0XFx0XFx0YnJlYWs7XFxuIDEwMjpcXHRcXHRjYXNlIElPX1VSSU5HX1FVRVJZX1pDUlhfRVZFTlQ6XFxuIDEwMzpcXHRcXHRcXHRyZXQgPSBpb19xdWVyeV96Y3J4X25vdGlmKGRhdGEpO1xcbiAxMDQ6XFx0XFx0XFx0YnJlYWs7XFxuIDEwNTpcXHRcXHRjYXNlIElPX1VSSU5HX1FVRVJZX1NDUTpcXG4gMTA2OlxcdFxcdFxcdHJldCA9IGlvX3F1ZXJ5X3NjcShkYXRhKTtcXG4gMTA3OlxcdFxcdFxcdGJyZWFrO1xcbiAxMDg6XFx0XFx0fVxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4gMTExOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UocmV0IFxcdTAwM2UgSU9fTUFYX1FVRVJZX1NJWkUpKVxcbiAxMTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDExMzpcXHRcXHRcXHRyZXNfc2l6ZSA9IHJldDtcXG4gMTE0OlxcdFxcdFxcdHJldCA9IDA7XFxuIDExNTpcXHRcXHR9XFxuIDExNjpcXHRvdXQ6XFxuIDExNzpcXHRcXHRoZHIucmVzdWx0ID0gcmV0O1xcbiAxMTg6XFx0XFx0aGRyLnNpemUgPSBtaW5fdChzaXplX3QsIHVzaXplLCByZXNfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjQ5LjMxMTQ1MzAxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDc2MDQyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaW9fdXJpbmdgIFJlZ2lzdHJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGZ1bmN0aW9uYWwuIEkgY2FuIHNlZSB0aGF0IGl0J3MgYmVpbmcgYWNjZXNzZWQgdGhyb3VnaCBgaW9fdXJpbmdfcmVnaXN0ZXJgIHVzaW5nIHRoZSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCBmbGFnLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3Mgd29ya2luZy4gVGhlIGNvZGUgbWVudGlvbnMgYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAsIGJ1dCB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIEkgd29uJ3QgZmluZCB0aGUgY29yZSBsb2dpYyB0aGVyZSBkaXJlY3RseS4gTXkgZm9jdXMgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zOiBlaXRoZXIgYGlvX3F1ZXJ5YCwgb3IgcGVyaGFwcyBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgLCBvciBldmVuIHRoZSBsb3ctbGV2ZWwgYF9faW9fdXJpbmdfcmVnaXN0ZXJgLlxuXG5gaW9fcXVlcnlgIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSwgYW5kIGl0J3MgdGhhbmtmdWxseSBub3Qgc3RhdGljLiBFeGNlbGxlbnQuIE5vdywgYWNjb3JkaW5nIHRvIHRoZSBub3RlcywgaXQncyBkZWZpbmVkIGluIGBpb191cmluZy9xdWVyeS5jYC4gVGltZSB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIGBpb19xdWVyeWAuIExldCdzIHNlZSBob3cgdGhlIHJlZ2lzdHJhdGlvbiBxdWVyeSBpcyBiZWluZyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6NDI6NTMuNzE5MDYwMTU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3F1ZXJ5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE5OlxcdFxcbiAxMjA6XFx0XFx0aWYgKGNvcHlfc3RydWN0X3RvX3VzZXIodWRhdGEsIHVzaXplLCBkYXRhLCBoZHIuc2l6ZSwgTlVMTCkpXFxuIDEyMTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMTIyOlxcdFxcdGlmIChjb3B5X3RvX3VzZXIodWhkciwgXFx1MDAyNmhkciwgc2l6ZW9mKGhkcikpKVxcbiAxMjM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDEyNDpcXHRcXHQqbmV4dF9lbnRyeSA9IGhkci5uZXh0X2VudHJ5O1xcbiAxMjU6XFx0XFx0cmV0dXJuIDA7XFxuIDEyNjpcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdGludCBpb19xdWVyeSh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBucl9hcmdzKVxcbiAxMjk6XFx0e1xcbiAxMzA6XFx0XFx0dW5pb24gaW9fcXVlcnlfZGF0YSBlbnRyeV9idWZmZXI7XFxuIDEzMTpcXHRcXHR2b2lkIF9fdXNlciAqdWhkciA9IGFyZztcXG4gMTMyOlxcdFxcdGludCByZXQsIG5yID0gMDtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0bWVtc2V0KFxcdTAwMjZlbnRyeV9idWZmZXIsIDAsIHNpemVvZihlbnRyeV9idWZmZXIpKTtcXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0aWYgKG5yX2FyZ3MpXFxuIDEzNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0d2hpbGUgKHVoZHIpIHtcXG4gMTQwOlxcdFxcdFxcdHU2NCBuZXh0X2hkcjtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0XFx0cmV0ID0gaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KFxcdTAwMjZlbnRyeV9idWZmZXIsIHVoZHIsIFxcdTAwMjZuZXh0X2hkcik7XFxuIDE0MzpcXHRcXHRcXHRpZiAocmV0KVxcbiAxNDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTQ1OlxcdFxcdFxcdHVoZHIgPSB1NjRfdG9fdXNlcl9wdHIobmV4dF9oZHIpO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRcXHRcXHQvKiBIYXZlIHNvbWUgbGltaXQgdG8gYXZvaWQgYSBwb3RlbnRpYWwgY3ljbGUgKi9cXG4gMTQ4OlxcdFxcdFxcdGlmICgrK25yIFxcdTAwM2U9IElPX01BWF9RVUVSWV9FTlRSSUVTKVxcbiAxNDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDE1MDpcXHRcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIDE1MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiAxNTI6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDE1MzpcXHRcXHR9XFxuIDE1NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTU1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6NDI6NTMuNzE5MTI3NzM0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTcyNDc4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWluZCBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgZnVuY3Rpb24gYGlvX3F1ZXJ5YC4gVGhhdCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgdGhpcyBzeXN0ZW0uIE5vdywgYXJlIHRoZXJlIGFueSBrZXkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhc3NvY2lhdGVkIHdpdGggaXQgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQWgsIHllcywgdGhlIG9idmlvdXMgb25lOiBgQ09ORklHX0lPX1VSSU5HYC4gVGhhdCdzIHRoZSBtYWluIGZsYWcgdGhhdCB3aWxsIGxpa2VseSBjb250cm9sIG11Y2ggb2YgdGhlIGJlaGF2aW9yIEknbSBpbnRlcmVzdGVkIGluLiBXaGVyZSBjYW4gSSBmaW5kIHRoZSBkZXRhaWxzIG9uIHRoYXQ/IFJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIExldCdzIHN0YXJ0IHdpdGggYGlvX3VyaW5nL0tjb25maWdgLCBhbmQgaWYgdGhhdCBkb2Vzbid0IGhvbGQgdGhlIGFuc3dlciwgSSdsbCBtb3ZlIG9uIHRvIGBpbml0L0tjb25maWdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBsb3dkb3duIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgSU9fVVJJTkdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzMzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0Mjo1OC4xMzYzNzgwNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg3OTQ4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTEwPWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTE3LVxcbmluaXQvS2NvbmZpZzoxOTE4OmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTI3PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTM5LVxcbmluaXQvS2NvbmZpZzoxOTQwOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk0MS1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy01LVxcbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxcbmlvX3VyaW5nL0tjb25maWctNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjU5Ljc0NTE3NzcwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwMzc1MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRGl2aW5nIGludG8gdGhlIGBJT19VUklOR2AgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgSU9fVVJJTkdgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gdG8gZm9jdXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZS4gTGV0J3Mgc2VlIGhvdyBgaW9fcXVlcnlgIGlzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbi4gUmlnaHQsIGxvb2tzIGxpa2UgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgaW9fdXJpbmdfcmVnaXN0ZXJgIGFuZCBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgLiBUaG9zZSBhcmUgYm90aCBkZWZpbmVkIHdpdGhpbiBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AuIEludGVyZXN0aW5nLiBTaW5jZSBJIGhhdmUgdG8gY2hvb3NlIG9uZSB0byBkaXZlIGludG8sIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgLiBJIGZpZ3VyZSB0aGF0IGl0cyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzowNC4wMDU1NTU0ODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcmVnaXN0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTU6XFx0fVxcbiA5OTY6XFx0XFxuIDk5NzpcXHQvKlxcbiA5OTg6XFx0ICogXFxcImJsaW5kXFxcIiByZWdpc3RyYXRpb24gb3Bjb2RlcyBhcmUgb25lcyB3aGVyZSB0aGVyZSdzIG5vIHJpbmcgZ2l2ZW4sIGFuZFxcbiA5OTk6XFx0ICogaGVuY2UgdGhlIHNvdXJjZSBmZCBtdXN0IGJlIC0xLlxcbjEwMDA6XFx0ICovXFxuMTAwMTpcXHRzdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXFxuMTAwMjpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnJfYXJncylcXG4xMDAzOlxcdHtcXG4xMDA0OlxcdFxcdHN3aXRjaCAob3Bjb2RlKSB7XFxuMTAwNTpcXHRcXHRjYXNlIElPUklOR19SRUdJU1RFUl9TRU5EX01TR19SSU5HOlxcbjEwMDY6XFx0XFx0XFx0cmV0dXJuIGlvX3VyaW5nX3JlZ2lzdGVyX3NlbmRfbXNnX3JpbmcoYXJnLCBucl9hcmdzKTtcXG4xMDA3OlxcdFxcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1FVRVJZOlxcbjEwMDg6XFx0XFx0XFx0cmV0dXJuIGlvX3F1ZXJ5KGFyZywgbnJfYXJncyk7XFxuMTAwOTpcXHRcXHRjYXNlIElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlM6XFxuMTAxMDpcXHRcXHRcXHRyZXR1cm4gaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2soYXJnLCBucl9hcmdzKTtcXG4xMDExOlxcdFxcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVI6XFxuMTAxMjpcXHRcXHRcXHRyZXR1cm4gaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKGFyZywgbnJfYXJncyk7XFxuMTAxMzpcXHRcXHR9XFxuMTAxNDpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDE1OlxcdH1cXG4xMDE2OlxcdFxcbjEwMTc6XFx0U1lTQ0FMTF9ERUZJTkU0KGlvX3VyaW5nX3JlZ2lzdGVyLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIG9wY29kZSxcXG4xMDE4OlxcdFxcdFxcdHZvaWQgX191c2VyICosIGFyZywgdW5zaWduZWQgaW50LCBucl9hcmdzKVxcbjEwMTk6XFx0e1xcbjEwMjA6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHg7XFxuMTAyMTpcXHRcXHRsb25nIHJldCA9IC1FQkFERjtcXG4xMDIyOlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbjEwMjM6XFx0XFx0Ym9vbCB1c2VfcmVnaXN0ZXJlZF9yaW5nO1xcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHR1c2VfcmVnaXN0ZXJlZF9yaW5nID0gISEob3Bjb2RlIFxcdTAwMjYgSU9SSU5HX1JFR0lTVEVSX1VTRV9SRUdJU1RFUkVEX1JJTkcpO1xcbjEwMjY6XFx0XFx0b3Bjb2RlIFxcdTAwMjY9IH5JT1JJTkdfUkVHSVNURVJfVVNFX1JFR0lTVEVSRURfUklORztcXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0aWYgKG9wY29kZSBcXHUwMDNlPSBJT1JJTkdfUkVHSVNURVJfTEFTVClcXG4xMDI5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwMzA6XFx0XFxuMTAzMTpcXHRcXHRpZiAoZmQgPT0gLTEpXFxuMTAzMjpcXHRcXHRcXHRyZXR1cm4gaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQob3Bjb2RlLCBhcmcsIG5yX2FyZ3MpO1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRmaWxlID0gaW9fdXJpbmdfY3R4X2dldF9maWxlKGZkLCB1c2VfcmVnaXN0ZXJlZF9yaW5nKTtcXG4xMDM1OlxcdFxcdGlmIChJU19FUlIoZmlsZSkpXFxuMTAzNjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmaWxlKTtcXG4xMDM3OlxcdFxcdGN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xMDM4OlxcdFxcbjEwMzk6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKTtcXG4xMDQwOlxcdFxcdHJldCA9IF9faW9fdXJpbmdfcmVnaXN0ZXIoY3R4LCBvcGNvZGUsIGFyZywgbnJfYXJncyk7XFxuMTA0MTpcXHRcXG4xMDQyOlxcdFxcdHRyYWNlX2lvX3VyaW5nX3JlZ2lzdGVyKGN0eCwgb3Bjb2RlLCBjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucixcXG4xMDQzOlxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlYnVmX3RhYmxlLm5yLCByZXQpO1xcbjEwNDQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzowNC4wMDU2NTYyMThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NTg2OTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcmVjZW50IHBhdGNoLCBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgY2xlYXI6IGBpb19xdWVyeWAgKmlzKiBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIGBzeXNfaW9fdXJpbmdfcmVnaXN0ZXJgLiBUaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBuZXcgY2hlY2ssIHNwZWNpZmljYWxseSBgaGRyLnNpemUgXHUwMDNlIFBBR0VfU0laRWAsIGFuZCBpdCByZXR1cm5zIGAtRTJCSUdgIGlmIHRoYXQgY29uZGl0aW9uIGlzIG1ldC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UsIGFuZCB0aGF0IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldFwiIHRvIG1lLiBNeSBtYWluIGZvY3VzIGhlcmUgd2lsbCBiZSBvbiB0aGUgYGlvX3F1ZXJ5YCBzeW1ib2wuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYnV0IEkgdGhpbmsgYElPX1VSSU5HYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBZZXAsIHRoYXQgbG9va3MgcmlnaHQuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzMxLCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQzOjA4Ljg5MTUyOTQ5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Nzc1ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3F1ZXJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpemUgdmFsaWRhdGlvbiBjaGVjayBpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uIGR1cmluZyBgaW9fdXJpbmdfcmVnaXN0ZXJgIHN5c2NhbGxzIHdpdGggdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIG9wY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxhcmdlIHNpemVzIGluIGBjb3B5X3N0cnVjdF90b191c2VyKClgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcXVlcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2l6ZSB2YWxpZGF0aW9uIGNoZWNrIGluIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBpb19xdWVyeWAgZnVuY3Rpb24gZHVyaW5nIGBpb191cmluZ19yZWdpc3RlcmAgc3lzY2FsbHMgd2l0aCB0aGUgYElPUklOR19SRUdJU1RFUl9RVUVSWWAgb3Bjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGFyZ2Ugc2l6ZXMgaW4gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQzOjA4Ljk2OTMxMjYxNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3NjcwNzcwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzowOC45Njk4MzU5NTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI3NjY1NDc4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBsaW1pdCBgaGRyLnNpemVgIHRvIGBQQUdFX1NJWkVgIGJlZm9yZSBpdCBpcyBzYXZlZCBhcyBgdXNpemVgLiBUaGUgYHVzaXplYCB2YXJpYWJsZSBpcyBsYXRlciBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgYXMgdGhlIHVzZXIgYnVmZmVyIHNpemUuIElmIGB1c2l6ZWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCBidWZmZXIgc2l6ZSwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHVzZXIgc3BhY2UuIElmIGEgdXNlciBwcm92aWRlcyBhbiBleHRyZW1lbHkgbGFyZ2UgYGhkci5zaXplYCwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCBhdHRlbXB0IHRvIHplcm8gYSBtYXNzaXZlIGFtb3VudCBvZiB1c2VyIG1lbW9yeSwgbGVhZGluZyB0byBhIGRlbmlhbCBvZiBzZXJ2aWNlIChlLmcuLCBzb2Z0IGxvY2t1cCBvciBleGNlc3NpdmUgQ1BVIHVzYWdlKS5cXG5cXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBrZXJuZWwgYnVmZmVyIGBkYXRhYCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIGBtZW1zZXQoKWAgaW4gYGlvX3F1ZXJ5KClgLCBhbmQgdGhlIGV4dHJhIGJ5dGVzIHdyaXR0ZW4gdG8gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgYnkgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAuIFNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgc29mdCBsb2NrdXAgZGV0ZWN0b3JzLCBldGMuKSBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIERvUyBpc3N1ZXMgbGlrZSB0aGlzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzMTA4MWFjMGNhODA0NDYyOGM0OGRjNGZlNWUxZTU4ZGU1NjgxZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTo0MjozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3F1ZXJ5LmMgYi9pb191cmluZy9xdWVyeS5jXG5pbmRleCA4OGEzMjU3MzY5OTI0Li5mMmI1ZTE5ZTVhZjY3IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcXVlcnkuY1xuKysrIGIvaW9fdXJpbmcvcXVlcnkuY1xuQEAgLTc2LDYgKzc2LDkgQEAgc3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aGRyLCB1aGRyLCBzaXplb2YoaGRyKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0LyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXG4rXHRpZiAoaGRyLnNpemUgXHUwMDNlIFBBR0VfU0laRSlcbitcdFx0cmV0dXJuIC1FMkJJRztcbiBcdHVzaXplID0gaGRyLnNpemU7XG4gXHRoZHIuc2l6ZSA9IG1pbihoZHIuc2l6ZSwgSU9fTUFYX1FVRVJZX1NJWkUpO1xuIFx0dWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6NDM6MDguOTY5ODM2NjY1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDg0MTIzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBRdWVyeSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGlvX3VyaW5nL3F1ZXJ5LmNgLiBJdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZXkndmUgYWRkZWQgYSBjaGVjazogYGlmIChoZHIuc2l6ZSBcdTAwM2UgUEFHRV9TSVpFKSByZXR1cm4gLUUyQklHO2AgcmlnaHQgYWZ0ZXIgYSBgY29weV9mcm9tX3VzZXJgLiBNeSBpbml0aWFsIHJlYWN0aW9uIHdhcywgXCJXaHk/IFdoYXQncyB0aGUgcG90ZW50aWFsIGlzc3VlIHRoZXkncmUgYWRkcmVzc2luZz9cIiBUaGUgY29tbWVudCBhYm91dCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB6ZXJvcyB1cCB0byBgdXNpemVgIGJ5dGVzIHBpcXVlZCBteSBpbnRlcmVzdC5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIGNvdWxkIHRoaXMgYmUgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG1heWJlIGFtcGxpZmllZCBieSBhIGxhcmdlIGBoZHIuc2l6ZWA/IEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBob3cgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgYWN0dWFsbHkgd29ya3M6IGl0IGNvcGllcyBga3NpemVgIGFuZCB6ZXJvLWZpbGxzIGB1c2l6ZSAtIGtzaXplYC4gU28gYSBnaWdhbnRpYyBgdXNpemVgIHdvdWxkIGluZGVlZCBsZWFkIHRvIGEgbG90IG9mIHplcm9pbmcsIHBvc3NpYmx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgbWF5YmUgZXZlbiBPT00gb3Igc29tZSBraW5kIG9mIGRlbmlhbC1vZi1zZXJ2aWNlLCByaWdodD8gSSBzdGFydGVkIHdvbmRlcmluZyBpZiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIHdhcyBpbnZvbHZlZCBhdCBhbGwuIEJ1dCwgbm8gdGhpcyBkb2Vzbid0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQgcHJldmVudHMgYSBEb1Mgb3Igc2ltaWxhciBpc3N1ZSB3aGVyZSBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgaGFzIHRvIHplcm8gYSBodWdlIGNodW5rIG9mIG1lbW9yeS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgc2l6ZSBjaGVjaywgcHJldmVudGluZyBhIERvUyBieSBsaW1pdGluZyB0aGUgYHVzaXplYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIHBvdGVudGlhbCBmb3IgZXhjZXNzaXZlIHplcm9pbmcgYmFzZWQgb24gYSB1c2VyLXByb3ZpZGVkIHNpemUuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGluIHRoZSBzYW1lIGZpbGUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzoxNS40MTgyNTQxODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzY3NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2hhbmRsZV9xdWVyeV9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9xdWVyeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3F1ZXJ5LmM9NjA9c3RhdGljIHNzaXplX3QgaW9fcXVlcnlfc2NxKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTY4LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6Njk6c3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXFxuaW9fdXJpbmcvcXVlcnkuYy03MC1cXHRcXHRcXHRcXHQgdTY0ICpuZXh0X2VudHJ5KVxcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYz0xMjg9aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpXFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTE0MS1cXG5pb191cmluZy9xdWVyeS5jOjE0MjpcXHRcXHRyZXQgPSBpb19oYW5kbGVfcXVlcnlfZW50cnkoXFx1MDAyNmVudHJ5X2J1ZmZlciwgdWhkciwgXFx1MDAyNm5leHRfaGRyKTtcXG5pb191cmluZy9xdWVyeS5jLTE0My1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzoxNS40NjgwMjgzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzQ4NDkxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLiAqU3BlY2lmaWNhbGx5KiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHF1ZXJ5IGVudHJpZXMuIEknbSBsb29raW5nIGZvciB3aGVyZSBpdCByZXNpZGVzIHdpdGhpbiB0aGUgYnJvYWRlciBJL08gc3RydWN0dXJlLCBhbmQgd2hhdCB0aGUgZmxvdyBvZiBpbmZvcm1hdGlvbiBpcyBhcyBhIHJlc3VsdCBvZiB0aGF0IGZ1bmN0aW9uJ3Mgb3BlcmF0aW9ucy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQncyBpbnRlcmFjdGluZyB3aXRoPyBJcyBpdCByZXNwb25zaWJsZSBmb3IgaW5pdGlhbCBwYXJzaW5nLCBkZWxlZ2F0aW9uLCBvciBmaW5hbCBkYXRhIGRlbGl2ZXJ5PyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIGl0J3Mgd29ya2luZyBhdCwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIEkvTyBwaXBlbGluZS4gSSBhbnRpY2lwYXRlIGl0IGRlYWxzIHdpdGggc29tZSBmb3JtIG9mIHF1ZXJ5IHN0cnVjdCwgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSB0aGUgZW50cnkgcG9pbnQgZnJvbSB3aGljaCB0aGluZ3MgaGFwcGVuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IG9uIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHV0aWxpemF0aW9uLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcHJlc2VudC4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQzOjE5LjA0Mjg4MTIxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9xdWVyeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRzdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcXG4gIDYxOlxcdHtcXG4gIDYyOlxcdFxcdHN0cnVjdCBpb191cmluZ19xdWVyeV9zY3EgKmUgPSBcXHUwMDI2ZGF0YS1cXHUwMDNlc2NxO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRlLVxcdTAwM2VoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW9fcmluZ3MpO1xcbiAgNjU6XFx0XFx0ZS1cXHUwMDNlaGRyX2FsaWdubWVudCA9IFNNUF9DQUNIRV9CWVRFUztcXG4gIDY2OlxcdFxcdHJldHVybiBzaXplb2YoKmUpO1xcbiAgNjc6XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcXG4gIDcwOlxcdFxcdFxcdFxcdFxcdCB1NjQgKm5leHRfZW50cnkpXFxuICA3MTpcXHR7XFxuICA3MjpcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfcXVlcnlfaGRyIGhkcjtcXG4gIDczOlxcdFxcdHNpemVfdCB1c2l6ZSwgcmVzX3NpemUgPSAwO1xcbiAgNzQ6XFx0XFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbiAgNzU6XFx0XFx0dm9pZCBfX3VzZXIgKnVkYXRhO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmhkciwgdWhkciwgc2l6ZW9mKGhkcikpKVxcbiAgNzg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuICA3OTpcXHRcXHQvKiBjb3B5X3N0cnVjdF90b191c2VyKCkgemVyb3MgdXAgdG8gdXNpemUgYnl0ZXMgKi9cXG4gIDgwOlxcdFxcdGlmIChoZHIuc2l6ZSBcXHUwMDNlIFBBR0VfU0laRSlcXG4gIDgxOlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuICA4MjpcXHRcXHR1c2l6ZSA9IGhkci5zaXplO1xcbiAgODM6XFx0XFx0aGRyLnNpemUgPSBtaW4oaGRyLnNpemUsIElPX01BWF9RVUVSWV9TSVpFKTtcXG4gIDg0OlxcdFxcdHVkYXRhID0gdTY0X3RvX3VzZXJfcHRyKGhkci5xdWVyeV9kYXRhKTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0aWYgKGhkci5xdWVyeV9vcCBcXHUwMDNlPSBfX0lPX1VSSU5HX1FVRVJZX01BWCkge1xcbiAgODc6XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuICA4ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDg5OlxcdFxcdH1cXG4gIDkwOlxcdFxcdGlmICghbWVtX2lzX3plcm8oaGRyLl9fcmVzdiwgc2l6ZW9mKGhkci5fX3Jlc3YpKSB8fCBoZHIucmVzdWx0IHx8ICFoZHIuc2l6ZSlcXG4gIDkxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgOTI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHVkYXRhLCBoZHIuc2l6ZSkpXFxuICA5MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0c3dpdGNoIChoZHIucXVlcnlfb3ApIHtcXG4gIDk2OlxcdFxcdGNhc2UgSU9fVVJJTkdfUVVFUllfT1BDT0RFUzpcXG4gIDk3OlxcdFxcdFxcdHJldCA9IGlvX3F1ZXJ5X29wcyhkYXRhKTtcXG4gIDk4OlxcdFxcdFxcdGJyZWFrO1xcbiAgOTk6XFx0XFx0Y2FzZSBJT19VUklOR19RVUVSWV9aQ1JYOlxcbiAxMDA6XFx0XFx0XFx0cmV0ID0gaW9fcXVlcnlfemNyeChkYXRhKTtcXG4gMTAxOlxcdFxcdFxcdGJyZWFrO1xcbiAxMDI6XFx0XFx0Y2FzZSBJT19VUklOR19RVUVSWV9aQ1JYX0VWRU5UOlxcbiAxMDM6XFx0XFx0XFx0cmV0ID0gaW9fcXVlcnlfemNyeF9ub3RpZihkYXRhKTtcXG4gMTA0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMDU6XFx0XFx0Y2FzZSBJT19VUklOR19RVUVSWV9TQ1E6XFxuIDEwNjpcXHRcXHRcXHRyZXQgPSBpb19xdWVyeV9zY3EoZGF0YSk7XFxuIDEwNzpcXHRcXHRcXHRicmVhaztcXG4gMTA4OlxcdFxcdH1cXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuIDExMTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHJldCBcXHUwMDNlIElPX01BWF9RVUVSWV9TSVpFKSlcXG4gMTEyOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAxMTM6XFx0XFx0XFx0cmVzX3NpemUgPSByZXQ7XFxuIDExNDpcXHRcXHRcXHRyZXQgPSAwO1xcbiAxMTU6XFx0XFx0fVxcbiAxMTY6XFx0b3V0OlxcbiAxMTc6XFx0XFx0aGRyLnJlc3VsdCA9IHJldDtcXG4gMTE4OlxcdFxcdGhkci5zaXplID0gbWluX3Qoc2l6ZV90LCB1c2l6ZSwgcmVzX3NpemUpO1xcbiAxMTk6XFx0XFxuIDEyMDpcXHRcXHRpZiAoY29weV9zdHJ1Y3RfdG9fdXNlcih1ZGF0YSwgdXNpemUsIGRhdGEsIGhkci5zaXplLCBOVUxMKSlcXG4gMTIxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAxMjI6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1aGRyLCBcXHUwMDI2aGRyLCBzaXplb2YoaGRyKSkpXFxuIDEyMzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMTI0OlxcdFxcdCpuZXh0X2VudHJ5ID0gaGRyLm5leHRfZW50cnk7XFxuIDEyNTpcXHRcXHRyZXR1cm4gMDtcXG4gMTI2OlxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHR1bmlvbiBpb19xdWVyeV9kYXRhIGVudHJ5X2J1ZmZlcjtcXG4gMTMxOlxcdFxcdHZvaWQgX191c2VyICp1aGRyID0gYXJnO1xcbiAxMzI6XFx0XFx0aW50IHJldCwgbnIgPSAwO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRtZW1zZXQoXFx1MDAyNmVudHJ5X2J1ZmZlciwgMCwgc2l6ZW9mKGVudHJ5X2J1ZmZlcikpO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHRpZiAobnJfYXJncylcXG4gMTM3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHR3aGlsZSAodWhkcikge1xcbiAxNDA6XFx0XFx0XFx0dTY0IG5leHRfaGRyO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRcXHRyZXQgPSBpb19oYW5kbGVfcXVlcnlfZW50cnkoXFx1MDAyNmVudHJ5X2J1ZmZlciwgdWhkciwgXFx1MDAyNm5leHRfaGRyKTtcXG4gMTQzOlxcdFxcdFxcdGlmIChyZXQpXFxuIDE0NDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDU6XFx0XFx0XFx0dWhkciA9IHU2NF90b191c2VyX3B0cihuZXh0X2hkcik7XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdFxcdFxcdC8qIEhhdmUgc29tZSBsaW1pdCB0byBhdm9pZCBhIHBvdGVudGlhbCBjeWNsZSAqL1xcbiAxNDg6XFx0XFx0XFx0aWYgKCsrbnIgXFx1MDAzZT0gSU9fTUFYX1FVRVJZX0VOVFJJRVMpXFxuIDE0OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gMTUwOlxcdFxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4gMTUxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIDE1MjpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTUzOlxcdFxcdH1cXG4gMTU0OlxcdFxcdHJldHVybiAwO1xcbiAxNTU6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzoxOS4wNDI5NjU3MTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2OTMzOTExNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpemUgY2hlY2sgb24gYGhkci5zaXplYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIG92ZXJmbG93LiBCdXQgdGhlbiBJIHNlZSB0aGF0IGBjb3B5X3N0cnVjdF90b191c2VyYCBpcyBiZWluZyBjYWxsZWQgYXQgdGhlIGVuZCB3aXRoIHRoaXMgYHVzaXplYCB2YWx1ZSwgd2hpY2ggaXMgZGVyaXZlZCBmcm9tIHRoYXQgb3JpZ2luYWwgYGhkci5zaXplYC4gYGNvcHlfc3RydWN0X3RvX3VzZXJgLCBpZiB0aGUgZGVzdGluYXRpb24gYHVzaXplYCBpcyBncmVhdGVyIHRoYW4gdGhlIHNvdXJjZSBgaGRyLnNpemVgICh3aGljaCBpdCAqY2FuKiBiZSBhZnRlciB0aGUgc2l6ZSByZWR1Y3Rpb25zKSwgKnplcm9zKiB0aGUgcmVtYWluZGVyLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4gd2FzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBidXQgdGhhdCdzIG5vdCB0aGUgY2FzZS4gVGhlIGBkYXRhYCBidWZmZXIsIGBlbnRyeV9idWZmZXJgLCBpcyBtZXRpY3Vsb3VzbHkgemVyb2VkIG91dCB1c2luZyBgbWVtc2V0YC4gU28sIHRoZXJlJ3Mgbm8gcXVlc3Rpb24gb2YgYSBtZW1vcnkgbGVhayBvciBleHBvc2luZyBrZXJuZWwgc2VjcmV0cy4gYGhkcmAgaXMgY29waWVkICpmcm9tKiB1c2VyIHNwYWNlLCBhbmQgdGhlIHNpemUgYHJlc19zaXplYCBpcyBmcm9tIGEga2VybmVsIGZ1bmN0aW9uLlxuXG5UaGUgcmVhbCBpc3N1ZSBpcyB0aGlzOiBpZiBhIG1hbGljaW91cyB1c2VyIHByb3ZpZGVzIGEgbGFyZ2UgYGhkci5zaXplYCB2YWx1ZSAoZXZlbiBhZnRlciB0aGUgaW5pdGlhbCBjaGVjayBhdCB0aGUgc3RhcnQpLCBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB6ZXJvIGEgbWFzc2l2ZSBjaHVuayBvZiB1c2VyIG1lbW9yeSBiZWNhdXNlIGB1c2l6ZWAgaXMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIHNpemUsIGFuZCBgaGRyLnNpemVgIGlzIG9ubHkgdXNlZCB0byBjb3B5IGRhdGEgKmZyb20qIHRoZSBrZXJuZWwgKnRvKiB1c2VyLiAgVGhpcyBsZWFkcyB0byBhIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHk6IGEgc29mdCBsb2NrdXAsIGV4Y2Vzc2l2ZSBDUFUgdXNhZ2UsIG9yIGFuIE9PTSBzaXR1YXRpb24uIEl04oCZcyBhIGNsYXNzaWMgRG9TLlxuXG5UaGlzIGlzbid0IGEgS0FTQU4gb3IgS01TQU4gaXNzdWUgcGVyIHNlLiBLQVNBTiBpcyBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBlcnJvcnMgKmluIGtlcm5lbC1zcGFjZSosIGFuZCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgKnJlYWRzKi4gIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoYXBwZW5pbmcgaGVyZTsgaXQncyBhIGxvbmcsIHVubmVjZXNzYXJ5IGxvb3Agb2Ygd3JpdGluZyB6ZXJvcyB0byB1c2VyIG1lbW9yeSB3aGljaCBpcyBhIERvUywgYnV0IG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGJ1Zy4gS0FTQU4gd291bGQgZGV0ZWN0IHRoaXMgYXMgc29mdCBsb2NrdXAgb3IgT09NLCBvciBhIGhhbmcsIGFuZCB0aGUgZnV6emVycyB3ZSB1c2Ugd291bGQgYWxzbyBmaW5kIHRoaXMgRG9TIHZ1bG5lcmFiaWxpdHkuIEtNU0FOIHdvdWxkIGJlIHV0dGVybHkgdXNlbGVzcyBoZXJlIGJlY2F1c2UgS01TQU4gaXMgbm90IGFib3V0IGRldGVjdGluZyBEb1MgdnVsbmVyYWJpbGl0aWVzOyBpdCBkZXRlY3RzIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgdGhlIHJlYXNvbmluZyBpcyBjbGVhci4gVGhlIGNoZWNrIGlzIHByZXNlbnQgdG8gcHJvdGVjdCB0aGUgKmtlcm5lbCogYnVmZmVyLCBidXQgbm90IHRvIHByZXZlbnQgdGhlIERvUyBpdHNlbGYuICBUaGUgbGFyZ2UgYHVzaXplYCBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGlzIHRoZSBrZXkuIFRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byB6ZXJvIG91dCBhbiBlbm9ybW91cyBhbW91bnQgb2YgdXNlci1zcGFjZSBtZW1vcnkgaWYgYW4gYXR0YWNrZXIgcHJvdmlkZXMgYSB2ZXJ5IGxhcmdlIGluaXRpYWwgc2l6ZS4gIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gZm9jdXMgb24gc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzIGFuZCBzb2Z0IGxvY2t1cC9PT00gZGV0ZWN0aW9uIHRvIGNhdGNoIGFuZCBhZGRyZXNzIHRoaXMgdHlwZSBvZiBEb1MgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTYsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQzOjMxLjczNjM2MDAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gbGltaXQgYGhkci5zaXplYCB0byBgUEFHRV9TSVpFYCBiZWZvcmUgaXQgaXMgc2F2ZWQgYXMgYHVzaXplYC4gVGhlIGB1c2l6ZWAgdmFyaWFibGUgaXMgbGF0ZXIgcGFzc2VkIHRvIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGFzIHRoZSB1c2VyIGJ1ZmZlciBzaXplLiBJZiBgdXNpemVgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwgYnVmZmVyIHNpemUsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgemVybyBvdXQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB1c2VyIHNwYWNlLiBJZiBhIHVzZXIgcHJvdmlkZXMgYW4gZXh0cmVtZWx5IGxhcmdlIGBoZHIuc2l6ZWAsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgYXR0ZW1wdCB0byB6ZXJvIGEgbWFzc2l2ZSBhbW91bnQgb2YgdXNlciBtZW1vcnksIGxlYWRpbmcgdG8gYSBkZW5pYWwgb2Ygc2VydmljZSAoZS5nLiwgc29mdCBsb2NrdXAgb3IgZXhjZXNzaXZlIENQVSB1c2FnZSkuXFxuXFxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGUga2VybmVsIGJ1ZmZlciBgZGF0YWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KClgIGluIGBpb19xdWVyeSgpYCwgYW5kIHRoZSBleHRyYSBieXRlcyB3cml0dGVuIHRvIHVzZXIgc3BhY2UgYXJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IGBjb3B5X3N0cnVjdF90b191c2VyKClgLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIHNvZnQgbG9ja3VwIGRldGVjdG9ycywgZXRjLikgaXMgc3VmZmljaWVudCB0byBjYXRjaCBEb1MgaXNzdWVzIGxpa2UgdGhpcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gbGltaXQgYGhkci5zaXplYCB0byBgUEFHRV9TSVpFYCBiZWZvcmUgaXQgaXMgc2F2ZWQgYXMgYHVzaXplYC4gVGhlIGB1c2l6ZWAgdmFyaWFibGUgaXMgbGF0ZXIgcGFzc2VkIHRvIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGFzIHRoZSB1c2VyIGJ1ZmZlciBzaXplLiBJZiBgdXNpemVgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwgYnVmZmVyIHNpemUsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgemVybyBvdXQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB1c2VyIHNwYWNlLiBJZiBhIHVzZXIgcHJvdmlkZXMgYW4gZXh0cmVtZWx5IGxhcmdlIGBoZHIuc2l6ZWAsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgYXR0ZW1wdCB0byB6ZXJvIGEgbWFzc2l2ZSBhbW91bnQgb2YgdXNlciBtZW1vcnksIGxlYWRpbmcgdG8gYSBkZW5pYWwgb2Ygc2VydmljZSAoZS5nLiwgc29mdCBsb2NrdXAgb3IgZXhjZXNzaXZlIENQVSB1c2FnZSkuXFxuXFxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGUga2VybmVsIGJ1ZmZlciBgZGF0YWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KClgIGluIGBpb19xdWVyeSgpYCwgYW5kIHRoZSBleHRyYSBieXRlcyB3cml0dGVuIHRvIHVzZXIgc3BhY2UgYXJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IGBjb3B5X3N0cnVjdF90b191c2VyKClgLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIHNvZnQgbG9ja3VwIGRldGVjdG9ycywgZXRjLikgaXMgc3VmZmljaWVudCB0byBjYXRjaCBEb1MgaXNzdWVzIGxpa2UgdGhpcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 11:22:44 +0000 UTC FinishedAt: 2026-08-21 11:43:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "326d49039c10b65522ac7277b19b9b5c42ed1aeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "326d49039c10b65522ac7277b19b9b5c42ed1aeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "38e2156e-3ddc-4f39-8139-572d6ec5b652" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_query" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fcXVlcnkmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gbGltaXQgYGhkci5zaXplYCB0byBgUEFHRV9TSVpFYCBiZWZvcmUgaXQgaXMgc2F2ZWQgYXMgYHVzaXplYC4gVGhlIGB1c2l6ZWAgdmFyaWFibGUgaXMgbGF0ZXIgcGFzc2VkIHRvIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGFzIHRoZSB1c2VyIGJ1ZmZlciBzaXplLiBJZiBgdXNpemVgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwgYnVmZmVyIHNpemUsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgemVybyBvdXQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB1c2VyIHNwYWNlLiBJZiBhIHVzZXIgcHJvdmlkZXMgYW4gZXh0cmVtZWx5IGxhcmdlIGBoZHIuc2l6ZWAsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgYXR0ZW1wdCB0byB6ZXJvIGEgbWFzc2l2ZSBhbW91bnQgb2YgdXNlciBtZW1vcnksIGxlYWRpbmcgdG8gYSBkZW5pYWwgb2Ygc2VydmljZSAoZS5nLiwgc29mdCBsb2NrdXAgb3IgZXhjZXNzaXZlIENQVSB1c2FnZSkuXG5cblRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIGtlcm5lbCBidWZmZXIgYGRhdGFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYG1lbXNldCgpYCBpbiBgaW9fcXVlcnkoKWAsIGFuZCB0aGUgZXh0cmEgYnl0ZXMgd3JpdHRlbiB0byB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHplcm9lZCBieSBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYC4gU2luY2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBTdGFuZGFyZCBmdXp6aW5nICh3aXRoIEtBU0FOLCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMsIGV0Yy4pIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggRG9TIGlzc3VlcyBsaWtlIHRoaXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaXplIHZhbGlkYXRpb24gY2hlY2sgaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGlvX3F1ZXJ5YCBmdW5jdGlvbiBkdXJpbmcgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXNjYWxscyB3aXRoIHRoZSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCBvcGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsYXJnZSBzaXplcyBpbiBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzMTA4MWFjMGNhODA0NDYyOGM0OGRjNGZlNWUxZTU4ZGU1NjgxZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTo0MjozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9xdWVyeS5jIGIvaW9fdXJpbmcvcXVlcnkuY1xuaW5kZXggODhhMzI1NzM2OTkyNC4uZjJiNWUxOWU1YWY2NyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3F1ZXJ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3F1ZXJ5LmNcbkBAIC03Niw2ICYjNDM7NzYsOSBAQCBzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcbiBcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsIHVoZHIsIHNpemVvZihoZHIpKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0LyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXG4mIzQzO1x0aWYgKGhkci5zaXplIFx1MDAzZSBQQUdFX1NJWkUpXG4mIzQzO1x0XHRyZXR1cm4gLUUyQklHO1xuIFx0dXNpemUgPSBoZHIuc2l6ZTtcbiBcdGhkci5zaXplID0gbWluKGhkci5zaXplLCBJT19NQVhfUVVFUllfU0laRSk7XG4gXHR1ZGF0YSA9IHU2NF90b191c2VyX3B0cihoZHIucXVlcnlfZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fcXVlcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpemUgdmFsaWRhdGlvbiBjaGVjayBpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uIGR1cmluZyBgaW9fdXJpbmdfcmVnaXN0ZXJgIHN5c2NhbGxzIHdpdGggdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIG9wY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxhcmdlIHNpemVzIGluIGBjb3B5X3N0cnVjdF90b191c2VyKClgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTMxMDgxYWMwY2E4MDQ0NjI4YzQ4ZGM0ZmU1ZTFlNThkZTU2ODFlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDExOjQyOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcXVlcnkuYyBiL2lvX3VyaW5nL3F1ZXJ5LmMKaW5kZXggODhhMzI1NzM2OTkyNC4uZjJiNWUxOWU1YWY2NyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvcXVlcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9xdWVyeS5jCkBAIC03Niw2ICYjNDM7NzYsOSBAQCBzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkciwKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2hkciwgdWhkciwgc2l6ZW9mKGhkcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsJLyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovCiYjNDM7CWlmIChoZHIuc2l6ZSAmZ3Q7IFBBR0VfU0laRSkKJiM0MzsJCXJldHVybiAtRTJCSUc7CiAJdXNpemUgPSBoZHIuc2l6ZTsKIAloZHIuc2l6ZSA9IG1pbihoZHIuc2l6ZSwgSU9fTUFYX1FVRVJZX1NJWkUpOwogCXVkYXRhID0gdTY0X3RvX3VzZXJfcHRyKGhkci5xdWVyeV9kYXRhKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGlvX3VyaW5nL3F1ZXJ5LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBhIHNpemUgY2hlY2s6CgpgYGBjCi8qIGNvcHlfc3RydWN0X3RvX3VzZXIoKSB6ZXJvcyB1cCB0byB1c2l6ZSBieXRlcyAqLwppZiAoaGRyLnNpemUgJmd0OyBQQUdFX1NJWkUpCglyZXR1cm4gLUUyQklHOwpgYGAKClJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBgaW9fdXJpbmdgIGhhbmRsZXMgcXVlcmllcy4gIFRoZSBhZGRlZCBjaGVjayBzZWVtcyB0byBiZSBhIHByb2FjdGl2ZSBtZWFzdXJlLiAgSXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHdpdGggYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2hlcmUgYGhkci5zaXplYCAodGhlIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgZGF0YSB0cmFuc2ZlcikgY291bGQgYmUgZXhjZXNzaXZlbHkgbGFyZ2UuIFRoaXMgaXMgbGlrZWx5IGludGVuZGVkIHRvIHByZXZlbnQgc29tZSBraW5kIG9mIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGluZm9ybWF0aW9uIGxlYWsgaWYgdGhlIHNpemUgZXhjZWVkcyBhIHBhZ2UuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgYXJlIHRvIHJlYWxseSBkaWcgaW50byBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBpdHNlbGYgdG8gZ3Jhc3AgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGVjay4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSBgaW9fdXJpbmdgIGNvbmZpZ3VyYXRpb24gb3ZlcmFsbCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBhcmVhcyBvZiBwb3RlbnRpYWwgaW50ZXJlc3QgcmVsYXRlZCB0byB0aGlzIGNoYW5nZS4KCkxldCYjMzk7cyB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGFuZCBzZWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9faGFuZGxlX3F1ZXJ5X2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3F1ZXJ5LmM9NjA9c3RhdGljIHNzaXplX3QgaW9fcXVlcnlfc2NxKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXG4tLVxuaW9fdXJpbmcvcXVlcnkuYy02OC1cbmlvX3VyaW5nL3F1ZXJ5LmM6Njk6c3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXG5pb191cmluZy9xdWVyeS5jLTcwLVx0XHRcdFx0IHU2NCAqbmV4dF9lbnRyeSlcbi0tXG5pb191cmluZy9xdWVyeS5jPTEyOD1pbnQgaW9fcXVlcnkodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgbnJfYXJncylcbi0tXG5pb191cmluZy9xdWVyeS5jLTE0MS1cbmlvX3VyaW5nL3F1ZXJ5LmM6MTQyOlx0XHRyZXQgPSBpb19oYW5kbGVfcXVlcnlfZW50cnkoXHUwMDI2ZW50cnlfYnVmZmVyLCB1aGRyLCBcdTAwMjZuZXh0X2hkcik7XG5pb191cmluZy9xdWVyeS5jLTE0My1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgUXVlcnkgSGFuZGxpbmcgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhpcyBzeXN0ZW0gaGFuZGxlcyBxdWVyaWVzLiBJIHNlZSB0aGF0IHRoZSBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYGlvX3F1ZXJ5YC4gVGhhdCYjMzk7cyB0aGUga2V5IHJlbGF0aW9uc2hpcCBJIG5lZWQgdG8gdW5kZXJzdGFuZCwgc28gbGV0JiMzOTtzIGJhY2sgdXAgYW5kIGludmVzdGlnYXRlIGBpb19xdWVyeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgdGhlIGlucHV0IGFyZ3VtZW50cyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgYGlvX3F1ZXJ5YCBpcyBjcnVjaWFsIHRvIG1ha2luZyBzZW5zZSBvZiB3aGVyZSB0aGlzIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGZpdHMgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcXVlcnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2FhbS9kcHNlY2ktZGVidWdmcy5jPTk9c3RhdGljIGludCBkcHNlY2lfZGJnX2Zxc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqb2Zmc2V0KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYy0yMi1cdFx0ZnFpZCA9IHByaXYtXHUwMDNlcnhfcXVldWVfYXR0cltpXS5mcWlkO1xuZHJpdmVycy9jcnlwdG8vY2FhbS9kcHNlY2ktZGVidWdmcy5jOjIzOlx0XHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBmcWlkLCBcdTAwMjZmY250LCBcdTAwMjZiY250KTtcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYy0yNC1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmMtMzYtXHRcdGZxaWQgPSBwcml2LVx1MDAzZXR4X3F1ZXVlX2F0dHJbaV0uZnFpZDtcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYzozNzpcdFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoTlVMTCwgZnFpZCwgXHUwMDI2ZmNudCwgXHUwMDI2YmNudCk7XG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmMtMzgtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYz03OT1zdHJ1Y3QgYW1kZ3B1X21jYV9yYXNfYmxvY2sgbWNhX3YzXzBfbXAxX3JhcyA9IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9tY2FfdjNfMC5jLTg1LVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYzo4NjpzdGF0aWMgdm9pZCBtY2FfdjNfMF9tcGlvX3F1ZXJ5X3Jhc19lcnJvcl9jb3VudChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldixcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmMtODctXHRcdFx0XHRcdCAgICAgICB2b2lkICpyYXNfZXJyb3Jfc3RhdHVzKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmM9OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBhbWRncHVfcmFzX2Jsb2NrX2h3X29wcyBtY2FfdjNfMF9tcGlvX2h3X29wcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmM6OTU6XHQucXVlcnlfcmFzX2Vycm9yX2NvdW50ID0gbWNhX3YzXzBfbXBpb19xdWVyeV9yYXNfZXJyb3JfY291bnQsXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9tY2FfdjNfMC5jLTk2LVx0LnF1ZXJ5X3Jhc19lcnJvcl9hZGRyZXNzID0gTlVMTCxcbi0tXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDc2eC5jPTMxNj12NGwyX2N0cmxfaGFuZGxlcl90b19yYWRpbyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmQpXG4tLVxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3NnguYy0zMjMtICovXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDc2eC5jOjMyNDpzdGF0aWMgaW50IHNpNDc2eF9yYWRpb19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdixcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmMtMzI1LVx0XHRcdFx0IHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcGFiaWxpdHkpXG4tLVxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3NnguYz0xMTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2k0NzYxX2lvY3RsX29wcyA9IHtcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmM6MTE1NDpcdC52aWRpb2NfcXVlcnljYXBcdFx0PSBzaTQ3NnhfcmFkaW9fcXVlcnljYXAsXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDc2eC5jLTExNTUtXHQudmlkaW9jX2dfdHVuZXJcdFx0XHQ9IHNpNDc2eF9yYWRpb19nX3R1bmVyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGgtZGVidWdmcy5jPTU5PXN0YXRpYyBpbnQgZHBhYTJfZGJnX2Zxc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqb2Zmc2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGgtZGVidWdmcy5jLTcxLVx0XHRmcSA9IFx1MDAyNnByaXYtXHUwMDNlZnFbaV07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYzo3MjpcdFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoTlVMTCwgZnEtXHUwMDNlZnFpZCwgXHUwMDI2ZmNudCwgXHUwMDI2YmNudCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy03My1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYz0xMjI9c3RhdGljIGludCBkcGFhMl9kYmdfYnBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKm9mZnNldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy0xNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYzoxNDY6XHRcdGVyciA9IGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KE5VTEwsIGJwLVx1MDAzZWJwaWQsIFx1MDAyNmJ1Zl9jbnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmMtMTQ3LVx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jPTIyMjg9c3RhdGljIHUzMiBkcGFhMl9ldGhfaW5ncmVzc19mcV9jb3VudChzdHJ1Y3QgZHBhYTJfZXRoX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jLTIyMzUtXHRcdGZxID0gXHUwMDI2cHJpdi1cdTAwM2VmcVtpXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguYzoyMjM2Olx0XHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBmcS1cdTAwM2VmcWlkLCBcdTAwMjZmY250LCBcdTAwMjZiY250KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguYy0yMjM3LVx0XHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYz0yNDY9c3RhdGljIHZvaWQgZHBhYTJfZXRoX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMzA3LVx0XHQvKiBQcmludCBGUSBpbnN0YW50YW5lb3VzIGNvdW50cyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYzozMDg6XHRcdGVyciA9IGRwYWEyX2lvX3F1ZXJ5X2ZxX2NvdW50KE5VTEwsIHByaXYtXHUwMDNlZnFbal0uZnFpZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMzA5LVx0XHRcdFx0XHQgICAgICBcdTAwMjZmY250LCBcdTAwMjZiY250KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jLTMyOS1cdGZvciAoaiA9IDA7IGogXHUwMDNjIHByaXYtXHUwMDNlbnVtX2JwczsgaiYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmM6MzMwOlx0XHRlcnIgPSBkcGFhMl9pb19xdWVyeV9icF9jb3VudChOVUxMLCBwcml2LVx1MDAzZWJwW2pdLVx1MDAzZWJwaWQsIFx1MDAyNmJ1Zl9jbnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYy0zMzEtXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy9yaW9fbXBvcnRfY2Rldi5jPTIzNDU9c3RhdGljIHN0cnVjdCBtcG9ydF9kZXYgKm1wb3J0X2NkZXZfYWRkKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0KVxuLS1cbmRyaXZlcnMvcmFwaWRpby9kZXZpY2VzL3Jpb19tcG9ydF9jZGV2LmMtMjM5OC1cdH1cbmRyaXZlcnMvcmFwaWRpby9kZXZpY2VzL3Jpb19tcG9ydF9jZGV2LmM6MjM5OTpcdHJldCA9IHJpb19xdWVyeV9tcG9ydChtcG9ydCwgXHUwMDI2YXR0cik7XG5kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy9yaW9fbXBvcnRfY2Rldi5jLTI0MDAtXHRpZiAoIXJldCkge1xuLS1cbmRyaXZlcnMvcmFwaWRpby9yaW8uYz04MD1FWFBPUlRfU1lNQk9MX0dQTChyaW9fbG9jYWxfZ2V0X2RldmljZV9pZCk7XG4tLVxuZHJpdmVycy9yYXBpZGlvL3Jpby5jLTgyLS8qKlxuZHJpdmVycy9yYXBpZGlvL3Jpby5jOjgzOiAqIHJpb19xdWVyeV9tcG9ydCAtIFF1ZXJ5IG1wb3J0IGRldmljZSBhdHRyaWJ1dGVzXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtODQtICogQHBvcnQ6IG1wb3J0IGRldmljZSB0byBxdWVyeVxuLS1cbmRyaXZlcnMvcmFwaWRpby9yaW8uYy04OS0gKi9cbmRyaXZlcnMvcmFwaWRpby9yaW8uYzo5MDppbnQgcmlvX3F1ZXJ5X21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKnBvcnQsXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtOTEtXHRcdCAgICBzdHJ1Y3QgcmlvX21wb3J0X2F0dHIgKm1wb3J0X2F0dHIpXG4tLVxuZHJpdmVycy9yYXBpZGlvL3Jpby5jLTk2LX1cbmRyaXZlcnMvcmFwaWRpby9yaW8uYzo5NzpFWFBPUlRfU1lNQk9MKHJpb19xdWVyeV9tcG9ydCk7XG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtOTgtXG4tLVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM9NzUxPUVYUE9SVF9TWU1CT0xfR1BMKGRwYWEyX2lvX3N0b3JlX25leHQpO1xuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc1My0vKipcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc1NDogKiBkcGFhMl9pb19xdWVyeV9mcV9jb3VudCgpIC0gR2V0IHRoZSBmcmFtZSBhbmQgYnl0ZSBjb3VudCBmb3IgYSBnaXZlbiBmcS5cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc1NS0gKiBAZDogdGhlIGdpdmVuIERQSU8gb2JqZWN0LlxuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc2NC0gKi9cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc2NTppbnQgZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoc3RydWN0IGRwYWEyX2lvICpkLCB1MzIgZnFpZCxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc2Ni1cdFx0XHQgICAgdTMyICpmY250LCB1MzIgKmJjbnQpXG4tLVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtNzg3LX1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc4ODpFWFBPUlRfU1lNQk9MX0dQTChkcGFhMl9pb19xdWVyeV9mcV9jb3VudCk7XG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03ODktXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03OTAtLyoqXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYzo3OTE6ICogZHBhYTJfaW9fcXVlcnlfYnBfY291bnQoKSAtIFF1ZXJ5IHRoZSBudW1iZXIgb2YgYnVmZmVycyBjdXJyZW50bHkgaW4gYVxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtNzkyLSAqIGJ1ZmZlciBwb29sLlxuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc5OC0gKi9cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc5OTppbnQgZHBhYTJfaW9fcXVlcnlfYnBfY291bnQoc3RydWN0IGRwYWEyX2lvICpkLCB1MTYgYnBpZCwgdTMyICpudW0pXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy04MDAte1xuLS1cbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTgxOC19XG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYzo4MTk6RVhQT1JUX1NZTUJPTF9HUEwoZHBhYTJfaW9fcXVlcnlfYnBfY291bnQpO1xuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtODIwLVxuLS1cbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL2hhbF9zZGlvLmM9MTE9dTggcnR3X2hhbF9zZGlvX21heF90eG9xdF9mcmVlX3NwYWNlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcilcbi0tXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9oYWxfc2Rpby5jLTIwLVxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvaGFsX3NkaW8uYzoyMTp1OCBydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2UoXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9oYWxfc2Rpby5jLTIyLVx0c3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBQYWdlSWR4LCB1OCBSZXF1aXJlZFBhZ2VOdW1cbi0tXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9ydGw4NzIzYnNfeG1pdC5jPTM2PXN0YXRpYyBzMzIgcnRsODcyM19kZXF1ZXVlX3dyaXRlcG9ydChzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIpXG4tLVxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvcnRsODcyM2JzX3htaXQuYy03Ni1cdC8qICBjaGVjayBpZiBoYXJkd2FyZSB0eCBmaWZvIHBhZ2UgaXMgZW5vdWdoICovXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9ydGw4NzIzYnNfeG1pdC5jOjc3Olx0aWYgKCFydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2UocHJpX3BhZGFwdGVyLCBQYWdlSWR4LCBweG1pdGJ1Zi1cdTAwM2VwZ19udW0pKSB7XG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2hhbC9ydGw4NzIzYnNfeG1pdC5jLTc4LVx0XHRpZiAoIWJVcGRhdGVQYWdlTnVtKSB7XG4tLVxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9pbmNsdWRlL2hhbF9zZGlvLmg9MTI9dTggcnR3X2hhbF9zZGlvX21heF90eG9xdF9mcmVlX3NwYWNlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7XG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2luY2x1ZGUvaGFsX3NkaW8uaDoxMzp1OCBydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2Uoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBQYWdlSWR4LCB1OCBSZXF1aXJlZFBhZ2VOdW0pO1xuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9pbmNsdWRlL2hhbF9zZGlvLmgtMTQtdm9pZCBydHdfaGFsX3NkaW9fdXBkYXRlX3R4X2ZyZWVwYWdlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgdTggUGFnZUlkeCwgdTggUmVxdWlyZWRQYWdlTnVtKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3Jpby5oPTU1ND1leHRlcm4gdm9pZCByaW9fY2xvc2Vfb3V0Yl9tYm94KHN0cnVjdCByaW9fbXBvcnQgKiwgaW50KTtcbmluY2x1ZGUvbGludXgvcmlvLmg6NTU1OmV4dGVybiBpbnQgcmlvX3F1ZXJ5X21wb3J0KHN0cnVjdCByaW9fbXBvcnQgKnBvcnQsXG5pbmNsdWRlL2xpbnV4L3Jpby5oLTU1Ni1cdFx0XHQgICBzdHJ1Y3QgcmlvX21wb3J0X2F0dHIgKm1wb3J0X2F0dHIpO1xuLS1cbmluY2x1ZGUvc29jL2ZzbC9kcGFhMi1pby5oPTEyOD1zdHJ1Y3QgZHBhYTJfZHEgKmRwYWEyX2lvX3N0b3JlX25leHQoc3RydWN0IGRwYWEyX2lvX3N0b3JlICpzLCBpbnQgKmlzX2xhc3QpO1xuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmgtMTI5LVxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmg6MTMwOmludCBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChzdHJ1Y3QgZHBhYTJfaW8gKmQsIHUzMiBmcWlkLFxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmgtMTMxLVx0XHRcdCAgICB1MzIgKmZjbnQsIHUzMiAqYmNudCk7XG5pbmNsdWRlL3NvYy9mc2wvZHBhYTItaW8uaDoxMzI6aW50IGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KHN0cnVjdCBkcGFhMl9pbyAqZCwgdTE2IGJwaWQsXG5pbmNsdWRlL3NvYy9mc2wvZHBhYTItaW8uaC0xMzMtXHRcdFx0ICAgIHUzMiAqbnVtKTtcbi0tXG5pb191cmluZy9xdWVyeS5jLTgtXG5pb191cmluZy9xdWVyeS5jOjk6dW5pb24gaW9fcXVlcnlfZGF0YSB7XG5pb191cmluZy9xdWVyeS5jLTEwLVx0c3RydWN0IGlvX3VyaW5nX3F1ZXJ5X29wY29kZSBvcGNvZGVzO1xuLS1cbmlvX3VyaW5nL3F1ZXJ5LmMtMTUtXG5pb191cmluZy9xdWVyeS5jOjE2OiNkZWZpbmUgSU9fTUFYX1FVRVJZX1NJWkVcdFx0c2l6ZW9mKHVuaW9uIGlvX3F1ZXJ5X2RhdGEpXG5pb191cmluZy9xdWVyeS5jLTE3LSNkZWZpbmUgSU9fTUFYX1FVRVJZX0VOVFJJRVNcdFx0MTAwMFxuaW9fdXJpbmcvcXVlcnkuYy0xOC1cbmlvX3VyaW5nL3F1ZXJ5LmM6MTk6c3RhdGljIHNzaXplX3QgaW9fcXVlcnlfb3BzKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXG5pb191cmluZy9xdWVyeS5jLTIwLXtcbi0tXG5pb191cmluZy9xdWVyeS5jLTMzLVxuaW9fdXJpbmcvcXVlcnkuYzozNDpzdGF0aWMgc3NpemVfdCBpb19xdWVyeV96Y3J4KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXG5pb191cmluZy9xdWVyeS5jLTM1LXtcbi0tXG5pb191cmluZy9xdWVyeS5jLTQ3LVxuaW9fdXJpbmcvcXVlcnkuYzo0ODpzdGF0aWMgc3NpemVfdCBpb19xdWVyeV96Y3J4X25vdGlmKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXG5pb191cmluZy9xdWVyeS5jLTQ5LXtcbi0tXG5pb191cmluZy9xdWVyeS5jLTU5LVxuaW9fdXJpbmcvcXVlcnkuYzo2MDpzdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcbmlvX3VyaW5nL3F1ZXJ5LmMtNjEte1xuLS1cbmlvX3VyaW5nL3F1ZXJ5LmMtNjgtXG5pb191cmluZy9xdWVyeS5jOjY5OnN0YXRpYyBpbnQgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEsIHZvaWQgX191c2VyICp1aGRyLFxuaW9fdXJpbmcvcXVlcnkuYy03MC1cdFx0XHRcdCB1NjQgKm5leHRfZW50cnkpXG4tLVxuaW9fdXJpbmcvcXVlcnkuYy05Ni1cdGNhc2UgSU9fVVJJTkdfUVVFUllfT1BDT0RFUzpcbmlvX3VyaW5nL3F1ZXJ5LmM6OTc6XHRcdHJldCA9IGlvX3F1ZXJ5X29wcyhkYXRhKTtcbmlvX3VyaW5nL3F1ZXJ5LmMtOTgtXHRcdGJyZWFrO1xuaW9fdXJpbmcvcXVlcnkuYy05OS1cdGNhc2UgSU9fVVJJTkdfUVVFUllfWkNSWDpcbmlvX3VyaW5nL3F1ZXJ5LmM6MTAwOlx0XHRyZXQgPSBpb19xdWVyeV96Y3J4KGRhdGEpO1xuaW9fdXJpbmcvcXVlcnkuYy0xMDEtXHRcdGJyZWFrO1xuaW9fdXJpbmcvcXVlcnkuYy0xMDItXHRjYXNlIElPX1VSSU5HX1FVRVJZX1pDUlhfRVZFTlQ6XG5pb191cmluZy9xdWVyeS5jOjEwMzpcdFx0cmV0ID0gaW9fcXVlcnlfemNyeF9ub3RpZihkYXRhKTtcbmlvX3VyaW5nL3F1ZXJ5LmMtMTA0LVx0XHRicmVhaztcbmlvX3VyaW5nL3F1ZXJ5LmMtMTA1LVx0Y2FzZSBJT19VUklOR19RVUVSWV9TQ1E6XG5pb191cmluZy9xdWVyeS5jOjEwNjpcdFx0cmV0ID0gaW9fcXVlcnlfc2NxKGRhdGEpO1xuaW9fdXJpbmcvcXVlcnkuYy0xMDctXHRcdGJyZWFrO1xuLS1cbmlvX3VyaW5nL3F1ZXJ5LmMtMTI3LVxuaW9fdXJpbmcvcXVlcnkuYzoxMjg6aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpXG5pb191cmluZy9xdWVyeS5jLTEyOS17XG5pb191cmluZy9xdWVyeS5jOjEzMDpcdHVuaW9uIGlvX3F1ZXJ5X2RhdGEgZW50cnlfYnVmZmVyO1xuaW9fdXJpbmcvcXVlcnkuYy0xMzEtXHR2b2lkIF9fdXNlciAqdWhkciA9IGFyZztcbi0tXG5pb191cmluZy9xdWVyeS5oLTYtXG5pb191cmluZy9xdWVyeS5oOjc6aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpO1xuaW9fdXJpbmcvcXVlcnkuaC04LVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzUwPXN0YXRpYyBpbnQgX19pb191cmluZ19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgb3Bjb2RlLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTU2LVx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfUVVFUlk6XG5pb191cmluZy9yZWdpc3Rlci5jOjk1NzpcdFx0cmV0ID0gaW9fcXVlcnkoYXJnLCBucl9hcmdzKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTU4LVx0XHRicmVhaztcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTEwMDE9c3RhdGljIGludCBpb191cmluZ19yZWdpc3Rlcl9ibGluZCh1bnNpZ25lZCBpbnQgb3Bjb2RlLCB2b2lkIF9fdXNlciAqYXJnLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwNy1cdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1FVRVJZOlxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDA4Olx0XHRyZXR1cm4gaW9fcXVlcnkoYXJnLCBucl9hcmdzKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwOS1cdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1JFU1RSSUNUSU9OUzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUXVlcnkgUmVnaXN0cmF0aW9uIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGEgbmV3IGBpb191cmluZ2AgZmVhdHVyZTogcXVlcnlpbmcgY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHZpYSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCB3aXRoIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGZpeCB3aXRoaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAsIHdoaWNoIEkgcmVjb2duaXplIGFzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHByb2JhYmx5IGhhbmRsaW5nIHRoZSBhY3R1YWwgcXVlcnkgcHJvY2Vzc2luZy4KClRoZSBpc3N1ZSwgYXBwYXJlbnRseSwgaXMgdGhhdCBgaGRyLnNpemVgIHdpdGhpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBjYW4sIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgZXhjZWVkIGBQQUdFX1NJWkVgLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBleGNlZWRpbmcgdGhlIHBhZ2Ugc2l6ZSB3aXRoIGBjb3B5X3N0cnVjdF90b191c2VyKClgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgcHJvYmxlbXMsIGxpa2UgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcy4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiBgaW9fdXJpbmcvcXVlcnkuY2AsIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBpcyBsb2NhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHNpemUgaXMgY2FsY3VsYXRlZCwgd2hlcmUgdGhlIHBvdGVudGlhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciwgYW5kIGlmIHRoZSBmaXggYWRkcmVzc2VzIHRoZSByb290IGNhdXNlIG9yIGp1c3QgYSBzeW1wdG9tLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcXVlcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjk6XHRzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcbiAgNzA6XHRcdFx0XHRcdCB1NjQgKm5leHRfZW50cnkpXG4gIDcxOlx0e1xuICA3MjpcdFx0c3RydWN0IGlvX3VyaW5nX3F1ZXJ5X2hkciBoZHI7XG4gIDczOlx0XHRzaXplX3QgdXNpemUsIHJlc19zaXplID0gMDtcbiAgNzQ6XHRcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbiAgNzU6XHRcdHZvaWQgX191c2VyICp1ZGF0YTtcbiAgNzY6XHRcbiAgNzc6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZoZHIsIHVoZHIsIHNpemVvZihoZHIpKSlcbiAgNzg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDc5Olx0XHQvKiBjb3B5X3N0cnVjdF90b191c2VyKCkgemVyb3MgdXAgdG8gdXNpemUgYnl0ZXMgKi9cbiAgODA6XHRcdGlmIChoZHIuc2l6ZSBcdTAwM2UgUEFHRV9TSVpFKVxuICA4MTpcdFx0XHRyZXR1cm4gLUUyQklHO1xuICA4MjpcdFx0dXNpemUgPSBoZHIuc2l6ZTtcbiAgODM6XHRcdGhkci5zaXplID0gbWluKGhkci5zaXplLCBJT19NQVhfUVVFUllfU0laRSk7XG4gIDg0Olx0XHR1ZGF0YSA9IHU2NF90b191c2VyX3B0cihoZHIucXVlcnlfZGF0YSk7XG4gIDg1Olx0XG4gIDg2Olx0XHRpZiAoaGRyLnF1ZXJ5X29wIFx1MDAzZT0gX19JT19VUklOR19RVUVSWV9NQVgpIHtcbiAgODc6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4gIDg4Olx0XHRcdGdvdG8gb3V0O1xuICA4OTpcdFx0fVxuICA5MDpcdFx0aWYgKCFtZW1faXNfemVybyhoZHIuX19yZXN2LCBzaXplb2YoaGRyLl9fcmVzdikpIHx8IGhkci5yZXN1bHQgfHwgIWhkci5zaXplKVxuICA5MTpcdFx0XHRnb3RvIG91dDtcbiAgOTI6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCB1ZGF0YSwgaGRyLnNpemUpKVxuICA5MzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAgOTQ6XHRcbiAgOTU6XHRcdHN3aXRjaCAoaGRyLnF1ZXJ5X29wKSB7XG4gIDk2Olx0XHRjYXNlIElPX1VSSU5HX1FVRVJZX09QQ09ERVM6XG4gIDk3Olx0XHRcdHJldCA9IGlvX3F1ZXJ5X29wcyhkYXRhKTtcbiAgOTg6XHRcdFx0YnJlYWs7XG4gIDk5Olx0XHRjYXNlIElPX1VSSU5HX1FVRVJZX1pDUlg6XG4gMTAwOlx0XHRcdHJldCA9IGlvX3F1ZXJ5X3pjcngoZGF0YSk7XG4gMTAxOlx0XHRcdGJyZWFrO1xuIDEwMjpcdFx0Y2FzZSBJT19VUklOR19RVUVSWV9aQ1JYX0VWRU5UOlxuIDEwMzpcdFx0XHRyZXQgPSBpb19xdWVyeV96Y3J4X25vdGlmKGRhdGEpO1xuIDEwNDpcdFx0XHRicmVhaztcbiAxMDU6XHRcdGNhc2UgSU9fVVJJTkdfUVVFUllfU0NROlxuIDEwNjpcdFx0XHRyZXQgPSBpb19xdWVyeV9zY3EoZGF0YSk7XG4gMTA3Olx0XHRcdGJyZWFrO1xuIDEwODpcdFx0fVxuIDEwOTpcdFxuIDExMDpcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbiAxMTE6XHRcdFx0aWYgKFdBUk5fT05fT05DRShyZXQgXHUwMDNlIElPX01BWF9RVUVSWV9TSVpFKSlcbiAxMTI6XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxMTM6XHRcdFx0cmVzX3NpemUgPSByZXQ7XG4gMTE0Olx0XHRcdHJldCA9IDA7XG4gMTE1Olx0XHR9XG4gMTE2Olx0b3V0OlxuIDExNzpcdFx0aGRyLnJlc3VsdCA9IHJldDtcbiAxMTg6XHRcdGhkci5zaXplID0gbWluX3Qoc2l6ZV90LCB1c2l6ZSwgcmVzX3NpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NDEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaW9fdXJpbmdgIFJlZ2lzdHJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gdGhpcyBjaGFuZ2UgYXBwZWFycyB0byBiZSBmdW5jdGlvbmFsLiBJIGNhbiBzZWUgdGhhdCBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCB0aHJvdWdoIGBpb191cmluZ19yZWdpc3RlcmAgdXNpbmcgdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIGZsYWcuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIHdvcmtpbmcuIFRoZSBjb2RlIG1lbnRpb25zIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgLCBidXQgdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgSSB3b24mIzM5O3QgZmluZCB0aGUgY29yZSBsb2dpYyB0aGVyZSBkaXJlY3RseS4gTXkgZm9jdXMgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zOiBlaXRoZXIgYGlvX3F1ZXJ5YCwgb3IgcGVyaGFwcyBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgLCBvciBldmVuIHRoZSBsb3ctbGV2ZWwgYF9faW9fdXJpbmdfcmVnaXN0ZXJgLgoKYGlvX3F1ZXJ5YCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGUsIGFuZCBpdCYjMzk7cyB0aGFua2Z1bGx5IG5vdCBzdGF0aWMuIEV4Y2VsbGVudC4gTm93LCBhY2NvcmRpbmcgdG8gdGhlIG5vdGVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBpb191cmluZy9xdWVyeS5jYC4gVGltZSB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiBpbiBgaW9fcXVlcnlgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgcmVnaXN0cmF0aW9uIHF1ZXJ5IGlzIGJlaW5nIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcXVlcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE5Olx0XG4gMTIwOlx0XHRpZiAoY29weV9zdHJ1Y3RfdG9fdXNlcih1ZGF0YSwgdXNpemUsIGRhdGEsIGhkci5zaXplLCBOVUxMKSlcbiAxMjE6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMTIyOlx0XHRpZiAoY29weV90b191c2VyKHVoZHIsIFx1MDAyNmhkciwgc2l6ZW9mKGhkcikpKVxuIDEyMzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxMjQ6XHRcdCpuZXh0X2VudHJ5ID0gaGRyLm5leHRfZW50cnk7XG4gMTI1Olx0XHRyZXR1cm4gMDtcbiAxMjY6XHR9XG4gMTI3Olx0XG4gMTI4Olx0aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpXG4gMTI5Olx0e1xuIDEzMDpcdFx0dW5pb24gaW9fcXVlcnlfZGF0YSBlbnRyeV9idWZmZXI7XG4gMTMxOlx0XHR2b2lkIF9fdXNlciAqdWhkciA9IGFyZztcbiAxMzI6XHRcdGludCByZXQsIG5yID0gMDtcbiAxMzM6XHRcbiAxMzQ6XHRcdG1lbXNldChcdTAwMjZlbnRyeV9idWZmZXIsIDAsIHNpemVvZihlbnRyeV9idWZmZXIpKTtcbiAxMzU6XHRcbiAxMzY6XHRcdGlmIChucl9hcmdzKVxuIDEzNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMzg6XHRcbiAxMzk6XHRcdHdoaWxlICh1aGRyKSB7XG4gMTQwOlx0XHRcdHU2NCBuZXh0X2hkcjtcbiAxNDE6XHRcbiAxNDI6XHRcdFx0cmV0ID0gaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KFx1MDAyNmVudHJ5X2J1ZmZlciwgdWhkciwgXHUwMDI2bmV4dF9oZHIpO1xuIDE0MzpcdFx0XHRpZiAocmV0KVxuIDE0NDpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTQ1Olx0XHRcdHVoZHIgPSB1NjRfdG9fdXNlcl9wdHIobmV4dF9oZHIpO1xuIDE0NjpcdFxuIDE0NzpcdFx0XHQvKiBIYXZlIHNvbWUgbGltaXQgdG8gYXZvaWQgYSBwb3RlbnRpYWwgY3ljbGUgKi9cbiAxNDg6XHRcdFx0aWYgKCYjNDM7JiM0MztuciBcdTAwM2U9IElPX01BWF9RVUVSWV9FTlRSSUVTKVxuIDE0OTpcdFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIDE1MDpcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gMTUxOlx0XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiAxNTI6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMTUzOlx0XHR9XG4gMTU0Olx0XHRyZXR1cm4gMDtcbiAxNTU6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWluZCBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgZnVuY3Rpb24gYGlvX3F1ZXJ5YC4gVGhhdCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgdGhpcyBzeXN0ZW0uIE5vdywgYXJlIHRoZXJlIGFueSBrZXkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhc3NvY2lhdGVkIHdpdGggaXQgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQWgsIHllcywgdGhlIG9idmlvdXMgb25lOiBgQ09ORklHX0lPX1VSSU5HYC4gVGhhdCYjMzk7cyB0aGUgbWFpbiBmbGFnIHRoYXQgd2lsbCBsaWtlbHkgY29udHJvbCBtdWNoIG9mIHRoZSBiZWhhdmlvciBJJiMzOTttIGludGVyZXN0ZWQgaW4uIFdoZXJlIGNhbiBJIGZpbmQgdGhlIGRldGFpbHMgb24gdGhhdD8gUmlnaHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGlvX3VyaW5nL0tjb25maWdgLCBhbmQgaWYgdGhhdCBkb2VzbiYjMzk7dCBob2xkIHRoZSBhbnN3ZXIsIEkmIzM5O2xsIG1vdmUgb24gdG8gYGluaXQvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBJT19VUklOR2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTctXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzktXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk0MS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTItXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcbmlvX3VyaW5nL0tjb25maWctMTQtXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL0tjb25maWctMTktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRpdmluZyBpbnRvIHRoZSBgSU9fVVJJTkdgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIGBJT19VUklOR2AgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlLiBMZXQmIzM5O3Mgc2VlIGhvdyBgaW9fcXVlcnlgIGlzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbi4gUmlnaHQsIGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYGlvX3VyaW5nX3JlZ2lzdGVyYCBhbmQgYGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kYC4gVGhvc2UgYXJlIGJvdGggZGVmaW5lZCB3aXRoaW4gYGlvX3VyaW5nL3JlZ2lzdGVyLmNgLiBJbnRlcmVzdGluZy4gU2luY2UgSSBoYXZlIHRvIGNob29zZSBvbmUgdG8gZGl2ZSBpbnRvLCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb191cmluZ19yZWdpc3Rlcl9ibGluZGAuIEkgZmlndXJlIHRoYXQgaXRzIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JlZ2lzdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk5NTpcdH1cbiA5OTY6XHRcbiA5OTc6XHQvKlxuIDk5ODpcdCAqIFwmIzM0O2JsaW5kXCYjMzQ7IHJlZ2lzdHJhdGlvbiBvcGNvZGVzIGFyZSBvbmVzIHdoZXJlIHRoZXJlJiMzOTtzIG5vIHJpbmcgZ2l2ZW4sIGFuZFxuIDk5OTpcdCAqIGhlbmNlIHRoZSBzb3VyY2UgZmQgbXVzdCBiZSAtMS5cbjEwMDA6XHQgKi9cbjEwMDE6XHRzdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXG4xMDAyOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnJfYXJncylcbjEwMDM6XHR7XG4xMDA0Olx0XHRzd2l0Y2ggKG9wY29kZSkge1xuMTAwNTpcdFx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfU0VORF9NU0dfUklORzpcbjEwMDY6XHRcdFx0cmV0dXJuIGlvX3VyaW5nX3JlZ2lzdGVyX3NlbmRfbXNnX3JpbmcoYXJnLCBucl9hcmdzKTtcbjEwMDc6XHRcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1FVRVJZOlxuMTAwODpcdFx0XHRyZXR1cm4gaW9fcXVlcnkoYXJnLCBucl9hcmdzKTtcbjEwMDk6XHRcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1JFU1RSSUNUSU9OUzpcbjEwMTA6XHRcdFx0cmV0dXJuIGlvX3JlZ2lzdGVyX3Jlc3RyaWN0aW9uc190YXNrKGFyZywgbnJfYXJncyk7XG4xMDExOlx0XHRjYXNlIElPUklOR19SRUdJU1RFUl9CUEZfRklMVEVSOlxuMTAxMjpcdFx0XHRyZXR1cm4gaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKGFyZywgbnJfYXJncyk7XG4xMDEzOlx0XHR9XG4xMDE0Olx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwMTU6XHR9XG4xMDE2Olx0XG4xMDE3Olx0U1lTQ0FMTF9ERUZJTkU0KGlvX3VyaW5nX3JlZ2lzdGVyLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIG9wY29kZSxcbjEwMTg6XHRcdFx0dm9pZCBfX3VzZXIgKiwgYXJnLCB1bnNpZ25lZCBpbnQsIG5yX2FyZ3MpXG4xMDE5Olx0e1xuMTAyMDpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHg7XG4xMDIxOlx0XHRsb25nIHJldCA9IC1FQkFERjtcbjEwMjI6XHRcdHN0cnVjdCBmaWxlICpmaWxlO1xuMTAyMzpcdFx0Ym9vbCB1c2VfcmVnaXN0ZXJlZF9yaW5nO1xuMTAyNDpcdFxuMTAyNTpcdFx0dXNlX3JlZ2lzdGVyZWRfcmluZyA9ICEhKG9wY29kZSBcdTAwMjYgSU9SSU5HX1JFR0lTVEVSX1VTRV9SRUdJU1RFUkVEX1JJTkcpO1xuMTAyNjpcdFx0b3Bjb2RlIFx1MDAyNj0gfklPUklOR19SRUdJU1RFUl9VU0VfUkVHSVNURVJFRF9SSU5HO1xuMTAyNzpcdFxuMTAyODpcdFx0aWYgKG9wY29kZSBcdTAwM2U9IElPUklOR19SRUdJU1RFUl9MQVNUKVxuMTAyOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEwMzA6XHRcbjEwMzE6XHRcdGlmIChmZCA9PSAtMSlcbjEwMzI6XHRcdFx0cmV0dXJuIGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKG9wY29kZSwgYXJnLCBucl9hcmdzKTtcbjEwMzM6XHRcbjEwMzQ6XHRcdGZpbGUgPSBpb191cmluZ19jdHhfZ2V0X2ZpbGUoZmQsIHVzZV9yZWdpc3RlcmVkX3JpbmcpO1xuMTAzNTpcdFx0aWYgKElTX0VSUihmaWxlKSlcbjEwMzY6XHRcdFx0cmV0dXJuIFBUUl9FUlIoZmlsZSk7XG4xMDM3Olx0XHRjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjEwMzg6XHRcbjEwMzk6XHRcdG11dGV4X2xvY2soXHUwMDI2Y3R4LVx1MDAzZXVyaW5nX2xvY2spO1xuMTA0MDpcdFx0cmV0ID0gX19pb191cmluZ19yZWdpc3RlcihjdHgsIG9wY29kZSwgYXJnLCBucl9hcmdzKTtcbjEwNDE6XHRcbjEwNDI6XHRcdHRyYWNlX2lvX3VyaW5nX3JlZ2lzdGVyKGN0eCwgb3Bjb2RlLCBjdHgtXHUwMDNlZmlsZV90YWJsZS5kYXRhLm5yLFxuMTA0MzpcdFx0XHRcdFx0Y3R4LVx1MDAzZWJ1Zl90YWJsZS5uciwgcmV0KTtcbjEwNDQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNldXJpbmdfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzMxCgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFJlY2VudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyByZWNlbnQgcGF0Y2gsIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBjbGVhcjogYGlvX3F1ZXJ5YCAqaXMqIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gYHN5c19pb191cmluZ19yZWdpc3RlcmAuIFRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBhIG5ldyBjaGVjaywgc3BlY2lmaWNhbGx5IGBoZHIuc2l6ZSAmZ3Q7IFBBR0VfU0laRWAsIGFuZCBpdCByZXR1cm5zIGAtRTJCSUdgIGlmIHRoYXQgY29uZGl0aW9uIGlzIG1ldC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UsIGFuZCB0aGF0IHNjcmVhbXMgJiMzNDtmdXp6aW5nIHRhcmdldCYjMzQ7IHRvIG1lLiBNeSBtYWluIGZvY3VzIGhlcmUgd2lsbCBiZSBvbiB0aGUgYGlvX3F1ZXJ5YCBzeW1ib2wuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGJ1dCBJIHRoaW5rIGBJT19VUklOR2AgaXMgdGhlIG9ubHkgY29uZmlnIEkgbmVlZCB0byB3b3JyeSBhYm91dC4gWWVwLCB0aGF0IGxvb2tzIHJpZ2h0LgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX3F1ZXJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaXplIHZhbGlkYXRpb24gY2hlY2sgaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGlvX3F1ZXJ5YCBmdW5jdGlvbiBkdXJpbmcgYGlvX3VyaW5nX3JlZ2lzdGVyYCBzeXNjYWxscyB3aXRoIHRoZSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCBvcGNvZGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsYXJnZSBzaXplcyBpbiBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19xdWVyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2l6ZSB2YWxpZGF0aW9uIGNoZWNrIGluIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBpb19xdWVyeWAgZnVuY3Rpb24gZHVyaW5nIGBpb191cmluZ19yZWdpc3RlcmAgc3lzY2FsbHMgd2l0aCB0aGUgYElPUklOR19SRUdJU1RFUl9RVUVSWWAgb3Bjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGFyZ2Ugc2l6ZXMgaW4gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGxpbWl0IGBoZHIuc2l6ZWAgdG8gYFBBR0VfU0laRWAgYmVmb3JlIGl0IGlzIHNhdmVkIGFzIGB1c2l6ZWAuIFRoZSBgdXNpemVgIHZhcmlhYmxlIGlzIGxhdGVyIHBhc3NlZCB0byBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBhcyB0aGUgdXNlciBidWZmZXIgc2l6ZS4gSWYgYHVzaXplYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsIGJ1ZmZlciBzaXplLCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB3aWxsIHplcm8gb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdXNlciBzcGFjZS4gSWYgYSB1c2VyIHByb3ZpZGVzIGFuIGV4dHJlbWVseSBsYXJnZSBgaGRyLnNpemVgLCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB3aWxsIGF0dGVtcHQgdG8gemVybyBhIG1hc3NpdmUgYW1vdW50IG9mIHVzZXIgbWVtb3J5LCBsZWFkaW5nIHRvIGEgZGVuaWFsIG9mIHNlcnZpY2UgKGUuZy4sIHNvZnQgbG9ja3VwIG9yIGV4Y2Vzc2l2ZSBDUFUgdXNhZ2UpLlxuXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBrZXJuZWwgYnVmZmVyIGBkYXRhYCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIGBtZW1zZXQoKWAgaW4gYGlvX3F1ZXJ5KClgLCBhbmQgdGhlIGV4dHJhIGJ5dGVzIHdyaXR0ZW4gdG8gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgYnkgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAuIFNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgc29mdCBsb2NrdXAgZGV0ZWN0b3JzLCBldGMuKSBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIERvUyBpc3N1ZXMgbGlrZSB0aGlzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMzEwODFhYzBjYTgwNDQ2MjhjNDhkYzRmZTVlMWU1OGRlNTY4MWU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTE6NDI6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy9xdWVyeS5jIGIvaW9fdXJpbmcvcXVlcnkuYwppbmRleCA4OGEzMjU3MzY5OTI0Li5mMmI1ZTE5ZTVhZjY3IDEwMDY0NAotLS0gYS9pb191cmluZy9xdWVyeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3F1ZXJ5LmMKQEAgLTc2LDYgJiM0Mzs3Niw5IEBAIHN0YXRpYyBpbnQgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEsIHZvaWQgX191c2VyICp1aGRyLAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7aGRyLCB1aGRyLCBzaXplb2YoaGRyKSkpCiAJCXJldHVybiAtRUZBVUxUOwomIzQzOwkvKiBjb3B5X3N0cnVjdF90b191c2VyKCkgemVyb3MgdXAgdG8gdXNpemUgYnl0ZXMgKi8KJiM0MzsJaWYgKGhkci5zaXplICZndDsgUEFHRV9TSVpFKQomIzQzOwkJcmV0dXJuIC1FMkJJRzsKIAl1c2l6ZSA9IGhkci5zaXplOwogCWhkci5zaXplID0gbWluKGhkci5zaXplLCBJT19NQVhfUVVFUllfU0laRSk7CiAJdWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFF1ZXJ5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBpb191cmluZy9xdWVyeS5jYC4gSXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgdGhleSYjMzk7dmUgYWRkZWQgYSBjaGVjazogYGlmIChoZHIuc2l6ZSAmZ3Q7IFBBR0VfU0laRSkgcmV0dXJuIC1FMkJJRztgIHJpZ2h0IGFmdGVyIGEgYGNvcHlfZnJvbV91c2VyYC4gTXkgaW5pdGlhbCByZWFjdGlvbiB3YXMsICYjMzQ7V2h5PyBXaGF0JiMzOTtzIHRoZSBwb3RlbnRpYWwgaXNzdWUgdGhleSYjMzk7cmUgYWRkcmVzc2luZz8mIzM0OyBUaGUgY29tbWVudCBhYm91dCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB6ZXJvcyB1cCB0byBgdXNpemVgIGJ5dGVzIHBpcXVlZCBteSBpbnRlcmVzdC4KCk15IGZpcnN0IHRob3VnaHQgd2FzLCBjb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBtYXliZSBhbXBsaWZpZWQgYnkgYSBsYXJnZSBgaGRyLnNpemVgPyBCdXQgdGhlbiBJIHJlbWVtYmVyZWQgaG93IGBjb3B5X3N0cnVjdF90b191c2VyKClgIGFjdHVhbGx5IHdvcmtzOiBpdCBjb3BpZXMgYGtzaXplYCBhbmQgemVyby1maWxscyBgdXNpemUgLSBrc2l6ZWAuIFNvIGEgZ2lnYW50aWMgYHVzaXplYCB3b3VsZCBpbmRlZWQgbGVhZCB0byBhIGxvdCBvZiB6ZXJvaW5nLCBwb3NzaWJseSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG1heWJlIGV2ZW4gT09NIG9yIHNvbWUga2luZCBvZiBkZW5pYWwtb2Ytc2VydmljZSwgcmlnaHQ/IEkgc3RhcnRlZCB3b25kZXJpbmcgaWYgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSB3YXMgaW52b2x2ZWQgYXQgYWxsLiBCdXQsIG5vIHRoaXMgZG9lc24mIzM5O3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBwcmV2ZW50cyBhIERvUyBvciBzaW1pbGFyIGlzc3VlIHdoZXJlIGBjb3B5X3N0cnVjdF90b191c2VyYCBoYXMgdG8gemVybyBhIGh1Z2UgY2h1bmsgb2YgbWVtb3J5LgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgc2l6ZSBjaGVjaywgcHJldmVudGluZyBhIERvUyBieSBsaW1pdGluZyB0aGUgYHVzaXplYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIHBvdGVudGlhbCBmb3IgZXhjZXNzaXZlIHplcm9pbmcgYmFzZWQgb24gYSB1c2VyLXByb3ZpZGVkIHNpemUuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGluIHRoZSBzYW1lIGZpbGUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2hhbmRsZV9xdWVyeV9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3F1ZXJ5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcXVlcnkuYz02MD1zdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcbi0tXG5pb191cmluZy9xdWVyeS5jLTY4LVxuaW9fdXJpbmcvcXVlcnkuYzo2OTpzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcbmlvX3VyaW5nL3F1ZXJ5LmMtNzAtXHRcdFx0XHQgdTY0ICpuZXh0X2VudHJ5KVxuLS1cbmlvX3VyaW5nL3F1ZXJ5LmM9MTI4PWludCBpb19xdWVyeSh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBucl9hcmdzKVxuLS1cbmlvX3VyaW5nL3F1ZXJ5LmMtMTQxLVxuaW9fdXJpbmcvcXVlcnkuYzoxNDI6XHRcdHJldCA9IGlvX2hhbmRsZV9xdWVyeV9lbnRyeShcdTAwMjZlbnRyeV9idWZmZXIsIHVoZHIsIFx1MDAyNm5leHRfaGRyKTtcbmlvX3VyaW5nL3F1ZXJ5LmMtMTQzLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZS4gKlNwZWNpZmljYWxseSogSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBoYW5kbGluZyBxdWVyeSBlbnRyaWVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIGl0IHJlc2lkZXMgd2l0aGluIHRoZSBicm9hZGVyIEkvTyBzdHJ1Y3R1cmUsIGFuZCB3aGF0IHRoZSBmbG93IG9mIGluZm9ybWF0aW9uIGlzIGFzIGEgcmVzdWx0IG9mIHRoYXQgZnVuY3Rpb24mIzM5O3Mgb3BlcmF0aW9ucy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aD8gSXMgaXQgcmVzcG9uc2libGUgZm9yIGluaXRpYWwgcGFyc2luZywgZGVsZWdhdGlvbiwgb3IgZmluYWwgZGF0YSBkZWxpdmVyeT8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBpdCYjMzk7cyB3b3JraW5nIGF0LCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgSS9PIHBpcGVsaW5lLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBzb21lIGZvcm0gb2YgcXVlcnkgc3RydWN0LCBhbmQgSSB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHRoZSBlbnRyeSBwb2ludCBmcm9tIHdoaWNoIHRoaW5ncyBoYXBwZW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gb3ZlcmFsbCBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcHJlc2VudC4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9xdWVyeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHRzdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcbiAgNjE6XHR7XG4gIDYyOlx0XHRzdHJ1Y3QgaW9fdXJpbmdfcXVlcnlfc2NxICplID0gXHUwMDI2ZGF0YS1cdTAwM2VzY3E7XG4gIDYzOlx0XG4gIDY0Olx0XHRlLVx1MDAzZWhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpb19yaW5ncyk7XG4gIDY1Olx0XHRlLVx1MDAzZWhkcl9hbGlnbm1lbnQgPSBTTVBfQ0FDSEVfQllURVM7XG4gIDY2Olx0XHRyZXR1cm4gc2l6ZW9mKCplKTtcbiAgNjc6XHR9XG4gIDY4Olx0XG4gIDY5Olx0c3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXG4gIDcwOlx0XHRcdFx0XHQgdTY0ICpuZXh0X2VudHJ5KVxuICA3MTpcdHtcbiAgNzI6XHRcdHN0cnVjdCBpb191cmluZ19xdWVyeV9oZHIgaGRyO1xuICA3MzpcdFx0c2l6ZV90IHVzaXplLCByZXNfc2l6ZSA9IDA7XG4gIDc0Olx0XHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4gIDc1Olx0XHR2b2lkIF9fdXNlciAqdWRhdGE7XG4gIDc2Olx0XG4gIDc3Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aGRyLCB1aGRyLCBzaXplb2YoaGRyKSkpXG4gIDc4Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuICA3OTpcdFx0LyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXG4gIDgwOlx0XHRpZiAoaGRyLnNpemUgXHUwMDNlIFBBR0VfU0laRSlcbiAgODE6XHRcdFx0cmV0dXJuIC1FMkJJRztcbiAgODI6XHRcdHVzaXplID0gaGRyLnNpemU7XG4gIDgzOlx0XHRoZHIuc2l6ZSA9IG1pbihoZHIuc2l6ZSwgSU9fTUFYX1FVRVJZX1NJWkUpO1xuICA4NDpcdFx0dWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpO1xuICA4NTpcdFxuICA4NjpcdFx0aWYgKGhkci5xdWVyeV9vcCBcdTAwM2U9IF9fSU9fVVJJTkdfUVVFUllfTUFYKSB7XG4gIDg3Olx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuICA4ODpcdFx0XHRnb3RvIG91dDtcbiAgODk6XHRcdH1cbiAgOTA6XHRcdGlmICghbWVtX2lzX3plcm8oaGRyLl9fcmVzdiwgc2l6ZW9mKGhkci5fX3Jlc3YpKSB8fCBoZHIucmVzdWx0IHx8ICFoZHIuc2l6ZSlcbiAgOTE6XHRcdFx0Z290byBvdXQ7XG4gIDkyOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgdWRhdGEsIGhkci5zaXplKSlcbiAgOTM6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gIDk0Olx0XG4gIDk1Olx0XHRzd2l0Y2ggKGhkci5xdWVyeV9vcCkge1xuICA5NjpcdFx0Y2FzZSBJT19VUklOR19RVUVSWV9PUENPREVTOlxuICA5NzpcdFx0XHRyZXQgPSBpb19xdWVyeV9vcHMoZGF0YSk7XG4gIDk4Olx0XHRcdGJyZWFrO1xuICA5OTpcdFx0Y2FzZSBJT19VUklOR19RVUVSWV9aQ1JYOlxuIDEwMDpcdFx0XHRyZXQgPSBpb19xdWVyeV96Y3J4KGRhdGEpO1xuIDEwMTpcdFx0XHRicmVhaztcbiAxMDI6XHRcdGNhc2UgSU9fVVJJTkdfUVVFUllfWkNSWF9FVkVOVDpcbiAxMDM6XHRcdFx0cmV0ID0gaW9fcXVlcnlfemNyeF9ub3RpZihkYXRhKTtcbiAxMDQ6XHRcdFx0YnJlYWs7XG4gMTA1Olx0XHRjYXNlIElPX1VSSU5HX1FVRVJZX1NDUTpcbiAxMDY6XHRcdFx0cmV0ID0gaW9fcXVlcnlfc2NxKGRhdGEpO1xuIDEwNzpcdFx0XHRicmVhaztcbiAxMDg6XHRcdH1cbiAxMDk6XHRcbiAxMTA6XHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4gMTExOlx0XHRcdGlmIChXQVJOX09OX09OQ0UocmV0IFx1MDAzZSBJT19NQVhfUVVFUllfU0laRSkpXG4gMTEyOlx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gMTEzOlx0XHRcdHJlc19zaXplID0gcmV0O1xuIDExNDpcdFx0XHRyZXQgPSAwO1xuIDExNTpcdFx0fVxuIDExNjpcdG91dDpcbiAxMTc6XHRcdGhkci5yZXN1bHQgPSByZXQ7XG4gMTE4Olx0XHRoZHIuc2l6ZSA9IG1pbl90KHNpemVfdCwgdXNpemUsIHJlc19zaXplKTtcbiAxMTk6XHRcbiAxMjA6XHRcdGlmIChjb3B5X3N0cnVjdF90b191c2VyKHVkYXRhLCB1c2l6ZSwgZGF0YSwgaGRyLnNpemUsIE5VTEwpKVxuIDEyMTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiAxMjI6XHRcdGlmIChjb3B5X3RvX3VzZXIodWhkciwgXHUwMDI2aGRyLCBzaXplb2YoaGRyKSkpXG4gMTIzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuIDEyNDpcdFx0Km5leHRfZW50cnkgPSBoZHIubmV4dF9lbnRyeTtcbiAxMjU6XHRcdHJldHVybiAwO1xuIDEyNjpcdH1cbiAxMjc6XHRcbiAxMjg6XHRpbnQgaW9fcXVlcnkodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgbnJfYXJncylcbiAxMjk6XHR7XG4gMTMwOlx0XHR1bmlvbiBpb19xdWVyeV9kYXRhIGVudHJ5X2J1ZmZlcjtcbiAxMzE6XHRcdHZvaWQgX191c2VyICp1aGRyID0gYXJnO1xuIDEzMjpcdFx0aW50IHJldCwgbnIgPSAwO1xuIDEzMzpcdFxuIDEzNDpcdFx0bWVtc2V0KFx1MDAyNmVudHJ5X2J1ZmZlciwgMCwgc2l6ZW9mKGVudHJ5X2J1ZmZlcikpO1xuIDEzNTpcdFxuIDEzNjpcdFx0aWYgKG5yX2FyZ3MpXG4gMTM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEzODpcdFxuIDEzOTpcdFx0d2hpbGUgKHVoZHIpIHtcbiAxNDA6XHRcdFx0dTY0IG5leHRfaGRyO1xuIDE0MTpcdFxuIDE0MjpcdFx0XHRyZXQgPSBpb19oYW5kbGVfcXVlcnlfZW50cnkoXHUwMDI2ZW50cnlfYnVmZmVyLCB1aGRyLCBcdTAwMjZuZXh0X2hkcik7XG4gMTQzOlx0XHRcdGlmIChyZXQpXG4gMTQ0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAxNDU6XHRcdFx0dWhkciA9IHU2NF90b191c2VyX3B0cihuZXh0X2hkcik7XG4gMTQ2Olx0XG4gMTQ3Olx0XHRcdC8qIEhhdmUgc29tZSBsaW1pdCB0byBhdm9pZCBhIHBvdGVudGlhbCBjeWNsZSAqL1xuIDE0ODpcdFx0XHRpZiAoJiM0MzsmIzQzO25yIFx1MDAzZT0gSU9fTUFYX1FVRVJZX0VOVFJJRVMpXG4gMTQ5Olx0XHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4gMTUwOlx0XHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiAxNTE6XHRcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIDE1MjpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiAxNTM6XHRcdH1cbiAxNTQ6XHRcdHJldHVybiAwO1xuIDE1NTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTE6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5NgoJCQkJCQkJb3V0cHV0OiAyNjQKCQkJCQkJCXRob3VnaHRzOiAxMDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVnVsbmVyYWJpbGl0eSBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpemUgY2hlY2sgb24gYGhkci5zaXplYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIG92ZXJmbG93LiBCdXQgdGhlbiBJIHNlZSB0aGF0IGBjb3B5X3N0cnVjdF90b191c2VyYCBpcyBiZWluZyBjYWxsZWQgYXQgdGhlIGVuZCB3aXRoIHRoaXMgYHVzaXplYCB2YWx1ZSwgd2hpY2ggaXMgZGVyaXZlZCBmcm9tIHRoYXQgb3JpZ2luYWwgYGhkci5zaXplYC4gYGNvcHlfc3RydWN0X3RvX3VzZXJgLCBpZiB0aGUgZGVzdGluYXRpb24gYHVzaXplYCBpcyBncmVhdGVyIHRoYW4gdGhlIHNvdXJjZSBgaGRyLnNpemVgICh3aGljaCBpdCAqY2FuKiBiZSBhZnRlciB0aGUgc2l6ZSByZWR1Y3Rpb25zKSwgKnplcm9zKiB0aGUgcmVtYWluZGVyLgoKTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgYnV0IHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBUaGUgYGRhdGFgIGJ1ZmZlciwgYGVudHJ5X2J1ZmZlcmAsIGlzIG1ldGljdWxvdXNseSB6ZXJvZWQgb3V0IHVzaW5nIGBtZW1zZXRgLiBTbywgdGhlcmUmIzM5O3Mgbm8gcXVlc3Rpb24gb2YgYSBtZW1vcnkgbGVhayBvciBleHBvc2luZyBrZXJuZWwgc2VjcmV0cy4gYGhkcmAgaXMgY29waWVkICpmcm9tKiB1c2VyIHNwYWNlLCBhbmQgdGhlIHNpemUgYHJlc19zaXplYCBpcyBmcm9tIGEga2VybmVsIGZ1bmN0aW9uLgoKVGhlIHJlYWwgaXNzdWUgaXMgdGhpczogaWYgYSBtYWxpY2lvdXMgdXNlciBwcm92aWRlcyBhIGxhcmdlIGBoZHIuc2l6ZWAgdmFsdWUgKGV2ZW4gYWZ0ZXIgdGhlIGluaXRpYWwgY2hlY2sgYXQgdGhlIHN0YXJ0KSwgYGNvcHlfc3RydWN0X3RvX3VzZXJgIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gemVybyBhIG1hc3NpdmUgY2h1bmsgb2YgdXNlciBtZW1vcnkgYmVjYXVzZSBgdXNpemVgIGlzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBzaXplLCBhbmQgYGhkci5zaXplYCBpcyBvbmx5IHVzZWQgdG8gY29weSBkYXRhICpmcm9tKiB0aGUga2VybmVsICp0byogdXNlci4gIFRoaXMgbGVhZHMgdG8gYSBkZW5pYWwtb2Ytc2VydmljZSB2dWxuZXJhYmlsaXR5OiBhIHNvZnQgbG9ja3VwLCBleGNlc3NpdmUgQ1BVIHVzYWdlLCBvciBhbiBPT00gc2l0dWF0aW9uLiBJdOKAmXMgYSBjbGFzc2ljIERvUy4KClRoaXMgaXNuJiMzOTt0IGEgS0FTQU4gb3IgS01TQU4gaXNzdWUgcGVyIHNlLiBLQVNBTiBpcyBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBlcnJvcnMgKmluIGtlcm5lbC1zcGFjZSosIGFuZCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgKnJlYWRzKi4gIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGFwcGVuaW5nIGhlcmU7IGl0JiMzOTtzIGEgbG9uZywgdW5uZWNlc3NhcnkgbG9vcCBvZiB3cml0aW5nIHplcm9zIHRvIHVzZXIgbWVtb3J5IHdoaWNoIGlzIGEgRG9TLCBidXQgbm90IGEgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLiBLQVNBTiB3b3VsZCBkZXRlY3QgdGhpcyBhcyBzb2Z0IGxvY2t1cCBvciBPT00sIG9yIGEgaGFuZywgYW5kIHRoZSBmdXp6ZXJzIHdlIHVzZSB3b3VsZCBhbHNvIGZpbmQgdGhpcyBEb1MgdnVsbmVyYWJpbGl0eS4gS01TQU4gd291bGQgYmUgdXR0ZXJseSB1c2VsZXNzIGhlcmUgYmVjYXVzZSBLTVNBTiBpcyBub3QgYWJvdXQgZGV0ZWN0aW5nIERvUyB2dWxuZXJhYmlsaXRpZXM7IGl0IGRldGVjdHMgaW5mb3JtYXRpb24gbGVha3MgZHVlIHRvIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuCgpTbywgdGhlIHJlYXNvbmluZyBpcyBjbGVhci4gVGhlIGNoZWNrIGlzIHByZXNlbnQgdG8gcHJvdGVjdCB0aGUgKmtlcm5lbCogYnVmZmVyLCBidXQgbm90IHRvIHByZXZlbnQgdGhlIERvUyBpdHNlbGYuICBUaGUgbGFyZ2UgYHVzaXplYCBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGlzIHRoZSBrZXkuIFRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byB6ZXJvIG91dCBhbiBlbm9ybW91cyBhbW91bnQgb2YgdXNlci1zcGFjZSBtZW1vcnkgaWYgYW4gYXR0YWNrZXIgcHJvdmlkZXMgYSB2ZXJ5IGxhcmdlIGluaXRpYWwgc2l6ZS4gIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gZm9jdXMgb24gc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzIGFuZCBzb2Z0IGxvY2t1cC9PT00gZGV0ZWN0aW9uIHRvIGNhdGNoIGFuZCBhZGRyZXNzIHRoaXMgdHlwZSBvZiBEb1MgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDExOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBsaW1pdCBgaGRyLnNpemVgIHRvIGBQQUdFX1NJWkVgIGJlZm9yZSBpdCBpcyBzYXZlZCBhcyBgdXNpemVgLiBUaGUgYHVzaXplYCB2YXJpYWJsZSBpcyBsYXRlciBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgYXMgdGhlIHVzZXIgYnVmZmVyIHNpemUuIElmIGB1c2l6ZWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCBidWZmZXIgc2l6ZSwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHVzZXIgc3BhY2UuIElmIGEgdXNlciBwcm92aWRlcyBhbiBleHRyZW1lbHkgbGFyZ2UgYGhkci5zaXplYCwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCBhdHRlbXB0IHRvIHplcm8gYSBtYXNzaXZlIGFtb3VudCBvZiB1c2VyIG1lbW9yeSwgbGVhZGluZyB0byBhIGRlbmlhbCBvZiBzZXJ2aWNlIChlLmcuLCBzb2Z0IGxvY2t1cCBvciBleGNlc3NpdmUgQ1BVIHVzYWdlKS5cblxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGUga2VybmVsIGJ1ZmZlciBgZGF0YWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KClgIGluIGBpb19xdWVyeSgpYCwgYW5kIHRoZSBleHRyYSBieXRlcyB3cml0dGVuIHRvIHVzZXIgc3BhY2UgYXJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IGBjb3B5X3N0cnVjdF90b191c2VyKClgLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIHNvZnQgbG9ja3VwIGRldGVjdG9ycywgZXRjLikgaXMgc3VmZmljaWVudCB0byBjYXRjaCBEb1MgaXNzdWVzIGxpa2UgdGhpcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBsaW1pdCBgaGRyLnNpemVgIHRvIGBQQUdFX1NJWkVgIGJlZm9yZSBpdCBpcyBzYXZlZCBhcyBgdXNpemVgLiBUaGUgYHVzaXplYCB2YXJpYWJsZSBpcyBsYXRlciBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgYXMgdGhlIHVzZXIgYnVmZmVyIHNpemUuIElmIGB1c2l6ZWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCBidWZmZXIgc2l6ZSwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHVzZXIgc3BhY2UuIElmIGEgdXNlciBwcm92aWRlcyBhbiBleHRyZW1lbHkgbGFyZ2UgYGhkci5zaXplYCwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCBhdHRlbXB0IHRvIHplcm8gYSBtYXNzaXZlIGFtb3VudCBvZiB1c2VyIG1lbW9yeSwgbGVhZGluZyB0byBhIGRlbmlhbCBvZiBzZXJ2aWNlIChlLmcuLCBzb2Z0IGxvY2t1cCBvciBleGNlc3NpdmUgQ1BVIHVzYWdlKS5cblxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGUga2VybmVsIGJ1ZmZlciBgZGF0YWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KClgIGluIGBpb19xdWVyeSgpYCwgYW5kIHRoZSBleHRyYSBieXRlcyB3cml0dGVuIHRvIHVzZXIgc3BhY2UgYXJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IGBjb3B5X3N0cnVjdF90b191c2VyKClgLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIHNvZnQgbG9ja3VwIGRldGVjdG9ycywgZXRjLikgaXMgc3VmZmljaWVudCB0byBjYXRjaCBEb1MgaXNzdWVzIGxpa2UgdGhpcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6NDI6MzIuNzI2NTI5NzA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMDk4NzEyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19xdWVyeVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIGxpbWl0IGBoZHIuc2l6ZWAgdG8gYFBBR0VfU0laRWAgYmVmb3JlIGl0IGlzIHNhdmVkIGFzIGB1c2l6ZWAuIFRoZSBgdXNpemVgIHZhcmlhYmxlIGlzIGxhdGVyIHBhc3NlZCB0byBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCBhcyB0aGUgdXNlciBidWZmZXIgc2l6ZS4gSWYgYHVzaXplYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsIGJ1ZmZlciBzaXplLCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB3aWxsIHplcm8gb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdXNlciBzcGFjZS4gSWYgYSB1c2VyIHByb3ZpZGVzIGFuIGV4dHJlbWVseSBsYXJnZSBgaGRyLnNpemVgLCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB3aWxsIGF0dGVtcHQgdG8gemVybyBhIG1hc3NpdmUgYW1vdW50IG9mIHVzZXIgbWVtb3J5LCBsZWFkaW5nIHRvIGEgZGVuaWFsIG9mIHNlcnZpY2UgKGUuZy4sIHNvZnQgbG9ja3VwIG9yIGV4Y2Vzc2l2ZSBDUFUgdXNhZ2UpLlxcblxcblRoaXMgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIGtlcm5lbCBidWZmZXIgYGRhdGFgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYG1lbXNldCgpYCBpbiBgaW9fcXVlcnkoKWAsIGFuZCB0aGUgZXh0cmEgYnl0ZXMgd3JpdHRlbiB0byB1c2VyIHNwYWNlIGFyZSBleHBsaWNpdGx5IHplcm9lZCBieSBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYC4gU2luY2UgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBTdGFuZGFyZCBmdXp6aW5nICh3aXRoIEtBU0FOLCBzb2Z0IGxvY2t1cCBkZXRlY3RvcnMsIGV0Yy4pIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggRG9TIGlzc3VlcyBsaWtlIHRoaXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpemUgdmFsaWRhdGlvbiBjaGVjayBpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uIGR1cmluZyBgaW9fdXJpbmdfcmVnaXN0ZXJgIHN5c2NhbGxzIHdpdGggdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIG9wY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxhcmdlIHNpemVzIGluIGBjb3B5X3N0cnVjdF90b191c2VyKClgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MjozMi43MjY1MzgzNjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMzE0OTEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzMTA4MWFjMGNhODA0NDYyOGM0OGRjNGZlNWUxZTU4ZGU1NjgxZTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTE6NDI6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcXVlcnkuYyBiL2lvX3VyaW5nL3F1ZXJ5LmNcXG5pbmRleCA4OGEzMjU3MzY5OTI0Li5mMmI1ZTE5ZTVhZjY3IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3F1ZXJ5LmNcXG4rKysgYi9pb191cmluZy9xdWVyeS5jXFxuQEAgLTc2LDYgKzc2LDkgQEAgc3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXFxuIFxcbiBcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmhkciwgdWhkciwgc2l6ZW9mKGhkcikpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0LyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXFxuK1xcdGlmIChoZHIuc2l6ZSBcXHUwMDNlIFBBR0VfU0laRSlcXG4rXFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gXFx0dXNpemUgPSBoZHIuc2l6ZTtcXG4gXFx0aGRyLnNpemUgPSBtaW4oaGRyLnNpemUsIElPX01BWF9RVUVSWV9TSVpFKTtcXG4gXFx0dWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MjozMy4xNTAzODQxODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTgxODkyMzg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3F1ZXJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpemUgdmFsaWRhdGlvbiBjaGVjayBpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uIGR1cmluZyBgaW9fdXJpbmdfcmVnaXN0ZXJgIHN5c2NhbGxzIHdpdGggdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIG9wY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxhcmdlIHNpemVzIGluIGBjb3B5X3N0cnVjdF90b191c2VyKClgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMzEwODFhYzBjYTgwNDQ2MjhjNDhkYzRmZTVlMWU1OGRlNTY4MWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTE6NDI6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9xdWVyeS5jIGIvaW9fdXJpbmcvcXVlcnkuY1xuaW5kZXggODhhMzI1NzM2OTkyNC4uZjJiNWUxOWU1YWY2NyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3F1ZXJ5LmNcbisrKyBiL2lvX3VyaW5nL3F1ZXJ5LmNcbkBAIC03Niw2ICs3Niw5IEBAIHN0YXRpYyBpbnQgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEsIHZvaWQgX191c2VyICp1aGRyLFxuIFxuIFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmhkciwgdWhkciwgc2l6ZW9mKGhkcikpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdC8qIGNvcHlfc3RydWN0X3RvX3VzZXIoKSB6ZXJvcyB1cCB0byB1c2l6ZSBieXRlcyAqL1xuK1x0aWYgKGhkci5zaXplIFx1MDAzZSBQQUdFX1NJWkUpXG4rXHRcdHJldHVybiAtRTJCSUc7XG4gXHR1c2l6ZSA9IGhkci5zaXplO1xuIFx0aGRyLnNpemUgPSBtaW4oaGRyLnNpemUsIElPX01BWF9RVUVSWV9TSVpFKTtcbiBcdHVkYXRhID0gdTY0X3RvX3VzZXJfcHRyKGhkci5xdWVyeV9kYXRhKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjMzLjE1MDM4NTgyN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjU4MTAyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGlvX3VyaW5nL3F1ZXJ5LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGEgc2l6ZSBjaGVjazpcblxuYGBgY1xuLyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXG5pZiAoaGRyLnNpemUgXHUwMDNlIFBBR0VfU0laRSlcblx0cmV0dXJuIC1FMkJJRztcbmBgYFxuXG5SaWdodCBhd2F5LCBJIHNlZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBob3cgYGlvX3VyaW5nYCBoYW5kbGVzIHF1ZXJpZXMuICBUaGUgYWRkZWQgY2hlY2sgc2VlbXMgdG8gYmUgYSBwcm9hY3RpdmUgbWVhc3VyZS4gIEl0J3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IHdpdGggYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2hlcmUgYGhkci5zaXplYCAodGhlIHJlcXVlc3RlZCBzaXplIGZvciB0aGUgZGF0YSB0cmFuc2ZlcikgY291bGQgYmUgZXhjZXNzaXZlbHkgbGFyZ2UuIFRoaXMgaXMgbGlrZWx5IGludGVuZGVkIHRvIHByZXZlbnQgc29tZSBraW5kIG9mIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGluZm9ybWF0aW9uIGxlYWsgaWYgdGhlIHNpemUgZXhjZWVkcyBhIHBhZ2UuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwcyBhcmUgdG8gcmVhbGx5IGRpZyBpbnRvIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGl0c2VsZiB0byBncmFzcCB0aGUgY29udGV4dCBvZiB0aGlzIGNoZWNrLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhlIGBpb191cmluZ2AgY29uZmlndXJhdGlvbiBvdmVyYWxsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFyZWFzIG9mIHBvdGVudGlhbCBpbnRlcmVzdCByZWxhdGVkIHRvIHRoaXMgY2hhbmdlLlxuXG5MZXQncyB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGFuZCBzZWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MjozNy40NzYxOTgyODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMjU0MjA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19oYW5kbGVfcXVlcnlfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcXVlcnkuYz02MD1zdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtNjgtXFxuaW9fdXJpbmcvcXVlcnkuYzo2OTpzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcXG5pb191cmluZy9xdWVyeS5jLTcwLVxcdFxcdFxcdFxcdCB1NjQgKm5leHRfZW50cnkpXFxuLS1cXG5pb191cmluZy9xdWVyeS5jPTEyOD1pbnQgaW9fcXVlcnkodm9pZCBfX3VzZXIgKmFyZywgdW5zaWduZWQgbnJfYXJncylcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTQxLVxcbmlvX3VyaW5nL3F1ZXJ5LmM6MTQyOlxcdFxcdHJldCA9IGlvX2hhbmRsZV9xdWVyeV9lbnRyeShcXHUwMDI2ZW50cnlfYnVmZmVyLCB1aGRyLCBcXHUwMDI2bmV4dF9oZHIpO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTQzLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjM5LjE4ODc0Njg5NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDcxMTcxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFF1ZXJ5IEhhbmRsaW5nIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGlzIHN5c3RlbSBoYW5kbGVzIHF1ZXJpZXMuIEkgc2VlIHRoYXQgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgaW9fcXVlcnlgLiBUaGF0J3MgdGhlIGtleSByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIHNvIGxldCdzIGJhY2sgdXAgYW5kIGludmVzdGlnYXRlIGBpb19xdWVyeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgaXQgYW5kIHdoYXQgdGhlIGlucHV0IGFyZ3VtZW50cyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgYGlvX3F1ZXJ5YCBpcyBjcnVjaWFsIHRvIG1ha2luZyBzZW5zZSBvZiB3aGVyZSB0aGlzIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGZpdHMgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0Mjo0Mi40OTU4NjcxOTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTY1NzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19xdWVyeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmM9OT1zdGF0aWMgaW50IGRwc2VjaV9kYmdfZnFzX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmMtMjItXFx0XFx0ZnFpZCA9IHByaXYtXFx1MDAzZXJ4X3F1ZXVlX2F0dHJbaV0uZnFpZDtcXG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmM6MjM6XFx0XFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoTlVMTCwgZnFpZCwgXFx1MDAyNmZjbnQsIFxcdTAwMjZiY250KTtcXG5kcml2ZXJzL2NyeXB0by9jYWFtL2Rwc2VjaS1kZWJ1Z2ZzLmMtMjQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYy0zNi1cXHRcXHRmcWlkID0gcHJpdi1cXHUwMDNldHhfcXVldWVfYXR0cltpXS5mcWlkO1xcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYzozNzpcXHRcXHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBmcWlkLCBcXHUwMDI2ZmNudCwgXFx1MDAyNmJjbnQpO1xcbmRyaXZlcnMvY3J5cHRvL2NhYW0vZHBzZWNpLWRlYnVnZnMuYy0zOC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYz03OT1zdHJ1Y3QgYW1kZ3B1X21jYV9yYXNfYmxvY2sgbWNhX3YzXzBfbXAxX3JhcyA9IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmMtODUtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYzo4NjpzdGF0aWMgdm9pZCBtY2FfdjNfMF9tcGlvX3F1ZXJ5X3Jhc19lcnJvcl9jb3VudChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldixcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9tY2FfdjNfMC5jLTg3LVxcdFxcdFxcdFxcdFxcdCAgICAgICB2b2lkICpyYXNfZXJyb3Jfc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvbWNhX3YzXzAuYz05ND1zdGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yYXNfYmxvY2tfaHdfb3BzIG1jYV92M18wX21waW9faHdfb3BzID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmM6OTU6XFx0LnF1ZXJ5X3Jhc19lcnJvcl9jb3VudCA9IG1jYV92M18wX21waW9fcXVlcnlfcmFzX2Vycm9yX2NvdW50LFxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L21jYV92M18wLmMtOTYtXFx0LnF1ZXJ5X3Jhc19lcnJvcl9hZGRyZXNzID0gTlVMTCxcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmM9MzE2PXY0bDJfY3RybF9oYW5kbGVyX3RvX3JhZGlvKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqZClcXG4tLVxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmMtMzIzLSAqL1xcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmM6MzI0OnN0YXRpYyBpbnQgc2k0NzZ4X3JhZGlvX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LFxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmMtMzI1LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXBhYmlsaXR5KVxcbi0tXFxuZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3NnguYz0xMTUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2k0NzYxX2lvY3RsX29wcyA9IHtcXG5kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDc2eC5jOjExNTQ6XFx0LnZpZGlvY19xdWVyeWNhcFxcdFxcdD0gc2k0NzZ4X3JhZGlvX3F1ZXJ5Y2FwLFxcbmRyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzZ4LmMtMTE1NS1cXHQudmlkaW9jX2dfdHVuZXJcXHRcXHRcXHQ9IHNpNDc2eF9yYWRpb19nX3R1bmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmM9NTk9c3RhdGljIGludCBkcGFhMl9kYmdfZnFzX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy03MS1cXHRcXHRmcSA9IFxcdTAwMjZwcml2LVxcdTAwM2VmcVtpXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYzo3MjpcXHRcXHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBmcS1cXHUwMDNlZnFpZCwgXFx1MDAyNmZjbnQsIFxcdTAwMjZiY250KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy03My1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmM9MTIyPXN0YXRpYyBpbnQgZHBhYTJfZGJnX2JwX3Nob3coc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpvZmZzZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRoLWRlYnVnZnMuYy0xNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmM6MTQ2OlxcdFxcdGVyciA9IGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KE5VTEwsIGJwLVxcdTAwM2VicGlkLCBcXHUwMDI2YnVmX2NudCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC1kZWJ1Z2ZzLmMtMTQ3LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGguYz0yMjI4PXN0YXRpYyB1MzIgZHBhYTJfZXRoX2luZ3Jlc3NfZnFfY291bnQoc3RydWN0IGRwYWEyX2V0aF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jLTIyMzUtXFx0XFx0ZnEgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZnFbaV07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jOjIyMzY6XFx0XFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoTlVMTCwgZnEtXFx1MDAzZWZxaWQsIFxcdTAwMjZmY250LCBcXHUwMDI2YmNudCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aC5jLTIyMzctXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYz0yNDY9c3RhdGljIHZvaWQgZHBhYTJfZXRoX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYy0zMDctXFx0XFx0LyogUHJpbnQgRlEgaW5zdGFudGFuZW91cyBjb3VudHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jOjMwODpcXHRcXHRlcnIgPSBkcGFhMl9pb19xdWVyeV9mcV9jb3VudChOVUxMLCBwcml2LVxcdTAwM2VmcVtqXS5mcWlkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1ldGh0b29sLmMtMzA5LVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZmY250LCBcXHUwMDI2YmNudCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jLTMyOS1cXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2JwczsgaisrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLWV0aHRvb2wuYzozMzA6XFx0XFx0ZXJyID0gZHBhYTJfaW9fcXVlcnlfYnBfY291bnQoTlVMTCwgcHJpdi1cXHUwMDNlYnBbal0tXFx1MDAzZWJwaWQsIFxcdTAwMjZidWZfY250KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItZXRodG9vbC5jLTMzMS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy9yaW9fbXBvcnRfY2Rldi5jPTIzNDU9c3RhdGljIHN0cnVjdCBtcG9ydF9kZXYgKm1wb3J0X2NkZXZfYWRkKHN0cnVjdCByaW9fbXBvcnQgKm1wb3J0KVxcbi0tXFxuZHJpdmVycy9yYXBpZGlvL2RldmljZXMvcmlvX21wb3J0X2NkZXYuYy0yMzk4LVxcdH1cXG5kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy9yaW9fbXBvcnRfY2Rldi5jOjIzOTk6XFx0cmV0ID0gcmlvX3F1ZXJ5X21wb3J0KG1wb3J0LCBcXHUwMDI2YXR0cik7XFxuZHJpdmVycy9yYXBpZGlvL2RldmljZXMvcmlvX21wb3J0X2NkZXYuYy0yNDAwLVxcdGlmICghcmV0KSB7XFxuLS1cXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmM9ODA9RVhQT1JUX1NZTUJPTF9HUEwocmlvX2xvY2FsX2dldF9kZXZpY2VfaWQpO1xcbi0tXFxuZHJpdmVycy9yYXBpZGlvL3Jpby5jLTgyLS8qKlxcbmRyaXZlcnMvcmFwaWRpby9yaW8uYzo4MzogKiByaW9fcXVlcnlfbXBvcnQgLSBRdWVyeSBtcG9ydCBkZXZpY2UgYXR0cmlidXRlc1xcbmRyaXZlcnMvcmFwaWRpby9yaW8uYy04NC0gKiBAcG9ydDogbXBvcnQgZGV2aWNlIHRvIHF1ZXJ5XFxuLS1cXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtODktICovXFxuZHJpdmVycy9yYXBpZGlvL3Jpby5jOjkwOmludCByaW9fcXVlcnlfbXBvcnQoc3RydWN0IHJpb19tcG9ydCAqcG9ydCxcXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtOTEtXFx0XFx0ICAgIHN0cnVjdCByaW9fbXBvcnRfYXR0ciAqbXBvcnRfYXR0cilcXG4tLVxcbmRyaXZlcnMvcmFwaWRpby9yaW8uYy05Ni19XFxuZHJpdmVycy9yYXBpZGlvL3Jpby5jOjk3OkVYUE9SVF9TWU1CT0wocmlvX3F1ZXJ5X21wb3J0KTtcXG5kcml2ZXJzL3JhcGlkaW8vcmlvLmMtOTgtXFxuLS1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYz03NTE9RVhQT1JUX1NZTUJPTF9HUEwoZHBhYTJfaW9fc3RvcmVfbmV4dCk7XFxuLS1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03NTMtLyoqXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM6NzU0OiAqIGRwYWEyX2lvX3F1ZXJ5X2ZxX2NvdW50KCkgLSBHZXQgdGhlIGZyYW1lIGFuZCBieXRlIGNvdW50IGZvciBhIGdpdmVuIGZxLlxcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc1NS0gKiBAZDogdGhlIGdpdmVuIERQSU8gb2JqZWN0Llxcbi0tXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtNzY0LSAqL1xcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jOjc2NTppbnQgZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoc3RydWN0IGRwYWEyX2lvICpkLCB1MzIgZnFpZCxcXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03NjYtXFx0XFx0XFx0ICAgIHUzMiAqZmNudCwgdTMyICpiY250KVxcbi0tXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtNzg3LX1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYzo3ODg6RVhQT1JUX1NZTUJPTF9HUEwoZHBhYTJfaW9fcXVlcnlfZnFfY291bnQpO1xcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTc4OS1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03OTAtLyoqXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM6NzkxOiAqIGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KCkgLSBRdWVyeSB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgY3VycmVudGx5IGluIGFcXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03OTItICogYnVmZmVyIHBvb2wuXFxuLS1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy03OTgtICovXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmM6Nzk5OmludCBkcGFhMl9pb19xdWVyeV9icF9jb3VudChzdHJ1Y3QgZHBhYTJfaW8gKmQsIHUxNiBicGlkLCB1MzIgKm51bSlcXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYy04MDAte1xcbi0tXFxuZHJpdmVycy9zb2MvZnNsL2RwaW8vZHBpby1zZXJ2aWNlLmMtODE4LX1cXG5kcml2ZXJzL3NvYy9mc2wvZHBpby9kcGlvLXNlcnZpY2UuYzo4MTk6RVhQT1JUX1NZTUJPTF9HUEwoZHBhYTJfaW9fcXVlcnlfYnBfY291bnQpO1xcbmRyaXZlcnMvc29jL2ZzbC9kcGlvL2RwaW8tc2VydmljZS5jLTgyMC1cXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL2hhbF9zZGlvLmM9MTE9dTggcnR3X2hhbF9zZGlvX21heF90eG9xdF9mcmVlX3NwYWNlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL2hhbF9zZGlvLmMtMjAtXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvaGFsX3NkaW8uYzoyMTp1OCBydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2UoXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvaGFsX3NkaW8uYy0yMi1cXHRzdHJ1Y3QgYWRhcHRlciAqcGFkYXB0ZXIsIHU4IFBhZ2VJZHgsIHU4IFJlcXVpcmVkUGFnZU51bVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvcnRsODcyM2JzX3htaXQuYz0zNj1zdGF0aWMgczMyIHJ0bDg3MjNfZGVxdWV1ZV93cml0ZXBvcnQoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9oYWwvcnRsODcyM2JzX3htaXQuYy03Ni1cXHQvKiAgY2hlY2sgaWYgaGFyZHdhcmUgdHggZmlmbyBwYWdlIGlzIGVub3VnaCAqL1xcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL3J0bDg3MjNic194bWl0LmM6Nzc6XFx0aWYgKCFydHdfaGFsX3NkaW9fcXVlcnlfdHhfZnJlZXBhZ2UocHJpX3BhZGFwdGVyLCBQYWdlSWR4LCBweG1pdGJ1Zi1cXHUwMDNlcGdfbnVtKSkge1xcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvaGFsL3J0bDg3MjNic194bWl0LmMtNzgtXFx0XFx0aWYgKCFiVXBkYXRlUGFnZU51bSkge1xcbi0tXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9pbmNsdWRlL2hhbF9zZGlvLmg9MTI9dTggcnR3X2hhbF9zZGlvX21heF90eG9xdF9mcmVlX3NwYWNlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlcik7XFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9pbmNsdWRlL2hhbF9zZGlvLmg6MTM6dTggcnR3X2hhbF9zZGlvX3F1ZXJ5X3R4X2ZyZWVwYWdlKHN0cnVjdCBhZGFwdGVyICpwYWRhcHRlciwgdTggUGFnZUlkeCwgdTggUmVxdWlyZWRQYWdlTnVtKTtcXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL2luY2x1ZGUvaGFsX3NkaW8uaC0xNC12b2lkIHJ0d19oYWxfc2Rpb191cGRhdGVfdHhfZnJlZXBhZ2Uoc3RydWN0IGFkYXB0ZXIgKnBhZGFwdGVyLCB1OCBQYWdlSWR4LCB1OCBSZXF1aXJlZFBhZ2VOdW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9yaW8uaD01NTQ9ZXh0ZXJuIHZvaWQgcmlvX2Nsb3NlX291dGJfbWJveChzdHJ1Y3QgcmlvX21wb3J0ICosIGludCk7XFxuaW5jbHVkZS9saW51eC9yaW8uaDo1NTU6ZXh0ZXJuIGludCByaW9fcXVlcnlfbXBvcnQoc3RydWN0IHJpb19tcG9ydCAqcG9ydCxcXG5pbmNsdWRlL2xpbnV4L3Jpby5oLTU1Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgcmlvX21wb3J0X2F0dHIgKm1wb3J0X2F0dHIpO1xcbi0tXFxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmg9MTI4PXN0cnVjdCBkcGFhMl9kcSAqZHBhYTJfaW9fc3RvcmVfbmV4dChzdHJ1Y3QgZHBhYTJfaW9fc3RvcmUgKnMsIGludCAqaXNfbGFzdCk7XFxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmgtMTI5LVxcbmluY2x1ZGUvc29jL2ZzbC9kcGFhMi1pby5oOjEzMDppbnQgZHBhYTJfaW9fcXVlcnlfZnFfY291bnQoc3RydWN0IGRwYWEyX2lvICpkLCB1MzIgZnFpZCxcXG5pbmNsdWRlL3NvYy9mc2wvZHBhYTItaW8uaC0xMzEtXFx0XFx0XFx0ICAgIHUzMiAqZmNudCwgdTMyICpiY250KTtcXG5pbmNsdWRlL3NvYy9mc2wvZHBhYTItaW8uaDoxMzI6aW50IGRwYWEyX2lvX3F1ZXJ5X2JwX2NvdW50KHN0cnVjdCBkcGFhMl9pbyAqZCwgdTE2IGJwaWQsXFxuaW5jbHVkZS9zb2MvZnNsL2RwYWEyLWlvLmgtMTMzLVxcdFxcdFxcdCAgICB1MzIgKm51bSk7XFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTgtXFxuaW9fdXJpbmcvcXVlcnkuYzo5OnVuaW9uIGlvX3F1ZXJ5X2RhdGEge1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTAtXFx0c3RydWN0IGlvX3VyaW5nX3F1ZXJ5X29wY29kZSBvcGNvZGVzO1xcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYy0xNS1cXG5pb191cmluZy9xdWVyeS5jOjE2OiNkZWZpbmUgSU9fTUFYX1FVRVJZX1NJWkVcXHRcXHRzaXplb2YodW5pb24gaW9fcXVlcnlfZGF0YSlcXG5pb191cmluZy9xdWVyeS5jLTE3LSNkZWZpbmUgSU9fTUFYX1FVRVJZX0VOVFJJRVNcXHRcXHQxMDAwXFxuaW9fdXJpbmcvcXVlcnkuYy0xOC1cXG5pb191cmluZy9xdWVyeS5jOjE5OnN0YXRpYyBzc2l6ZV90IGlvX3F1ZXJ5X29wcyh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhKVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMjAte1xcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYy0zMy1cXG5pb191cmluZy9xdWVyeS5jOjM0OnN0YXRpYyBzc2l6ZV90IGlvX3F1ZXJ5X3pjcngodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcXG5pb191cmluZy9xdWVyeS5jLTM1LXtcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtNDctXFxuaW9fdXJpbmcvcXVlcnkuYzo0ODpzdGF0aWMgc3NpemVfdCBpb19xdWVyeV96Y3J4X25vdGlmKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXFxuaW9fdXJpbmcvcXVlcnkuYy00OS17XFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTU5LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6NjA6c3RhdGljIHNzaXplX3QgaW9fcXVlcnlfc2NxKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXFxuaW9fdXJpbmcvcXVlcnkuYy02MS17XFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTY4LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6Njk6c3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXFxuaW9fdXJpbmcvcXVlcnkuYy03MC1cXHRcXHRcXHRcXHQgdTY0ICpuZXh0X2VudHJ5KVxcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYy05Ni1cXHRjYXNlIElPX1VSSU5HX1FVRVJZX09QQ09ERVM6XFxuaW9fdXJpbmcvcXVlcnkuYzo5NzpcXHRcXHRyZXQgPSBpb19xdWVyeV9vcHMoZGF0YSk7XFxuaW9fdXJpbmcvcXVlcnkuYy05OC1cXHRcXHRicmVhaztcXG5pb191cmluZy9xdWVyeS5jLTk5LVxcdGNhc2UgSU9fVVJJTkdfUVVFUllfWkNSWDpcXG5pb191cmluZy9xdWVyeS5jOjEwMDpcXHRcXHRyZXQgPSBpb19xdWVyeV96Y3J4KGRhdGEpO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTAxLVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTAyLVxcdGNhc2UgSU9fVVJJTkdfUVVFUllfWkNSWF9FVkVOVDpcXG5pb191cmluZy9xdWVyeS5jOjEwMzpcXHRcXHRyZXQgPSBpb19xdWVyeV96Y3J4X25vdGlmKGRhdGEpO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTA0LVxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3F1ZXJ5LmMtMTA1LVxcdGNhc2UgSU9fVVJJTkdfUVVFUllfU0NROlxcbmlvX3VyaW5nL3F1ZXJ5LmM6MTA2OlxcdFxcdHJldCA9IGlvX3F1ZXJ5X3NjcShkYXRhKTtcXG5pb191cmluZy9xdWVyeS5jLTEwNy1cXHRcXHRicmVhaztcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTI3LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6MTI4OmludCBpb19xdWVyeSh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBucl9hcmdzKVxcbmlvX3VyaW5nL3F1ZXJ5LmMtMTI5LXtcXG5pb191cmluZy9xdWVyeS5jOjEzMDpcXHR1bmlvbiBpb19xdWVyeV9kYXRhIGVudHJ5X2J1ZmZlcjtcXG5pb191cmluZy9xdWVyeS5jLTEzMS1cXHR2b2lkIF9fdXNlciAqdWhkciA9IGFyZztcXG4tLVxcbmlvX3VyaW5nL3F1ZXJ5LmgtNi1cXG5pb191cmluZy9xdWVyeS5oOjc6aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpO1xcbmlvX3VyaW5nL3F1ZXJ5LmgtOC1cXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzUwPXN0YXRpYyBpbnQgX19pb191cmluZ19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgb3Bjb2RlLFxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NTYtXFx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfUVVFUlk6XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo5NTc6XFx0XFx0cmV0ID0gaW9fcXVlcnkoYXJnLCBucl9hcmdzKTtcXG5pb191cmluZy9yZWdpc3Rlci5jLTk1OC1cXHRcXHRicmVhaztcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9MTAwMT1zdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTEwMDctXFx0Y2FzZSBJT1JJTkdfUkVHSVNURVJfUVVFUlk6XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzoxMDA4OlxcdFxcdHJldHVybiBpb19xdWVyeShhcmcsIG5yX2FyZ3MpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtMTAwOS1cXHRjYXNlIElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjQ0LjI3NzUzMjE1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzM4NDkwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBRdWVyeSBSZWdpc3RyYXRpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGEgbmV3IGBpb191cmluZ2AgZmVhdHVyZTogcXVlcnlpbmcgY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgdHJpZ2dlcmVkIHZpYSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCB3aXRoIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGZpeCB3aXRoaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAsIHdoaWNoIEkgcmVjb2duaXplIGFzIHRoZSBmdW5jdGlvbiB0aGF0J3MgcHJvYmFibHkgaGFuZGxpbmcgdGhlIGFjdHVhbCBxdWVyeSBwcm9jZXNzaW5nLlxuXG5UaGUgaXNzdWUsIGFwcGFyZW50bHksIGlzIHRoYXQgYGhkci5zaXplYCB3aXRoaW4gYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAgY2FuLCB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGV4Y2VlZCBgUEFHRV9TSVpFYC4gVGhhdCdzIGEgcmVkIGZsYWcuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBleGNlZWRpbmcgdGhlIHBhZ2Ugc2l6ZSB3aXRoIGBjb3B5X3N0cnVjdF90b191c2VyKClgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgcHJvYmxlbXMsIGxpa2UgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcy5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgSSBuZWVkIHRvIGNoZWNrIG91dCB3aGF0J3MgZ29pbmcgb24gaW4gYGlvX3VyaW5nL3F1ZXJ5LmNgLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCBpcyBsb2NhdGVkLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgc2l6ZSBpcyBjYWxjdWxhdGVkLCB3aGVyZSB0aGUgcG90ZW50aWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyLCBhbmQgaWYgdGhlIGZpeCBhZGRyZXNzZXMgdGhlIHJvb3QgY2F1c2Ugb3IganVzdCBhIHN5bXB0b20uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0Mjo0OS4zMTEzODM0MzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9xdWVyeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY5OlxcdHN0YXRpYyBpbnQgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEsIHZvaWQgX191c2VyICp1aGRyLFxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0IHU2NCAqbmV4dF9lbnRyeSlcXG4gIDcxOlxcdHtcXG4gIDcyOlxcdFxcdHN0cnVjdCBpb191cmluZ19xdWVyeV9oZHIgaGRyO1xcbiAgNzM6XFx0XFx0c2l6ZV90IHVzaXplLCByZXNfc2l6ZSA9IDA7XFxuICA3NDpcXHRcXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuICA3NTpcXHRcXHR2b2lkIF9fdXNlciAqdWRhdGE7XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2aGRyLCB1aGRyLCBzaXplb2YoaGRyKSkpXFxuICA3ODpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDc5OlxcdFxcdC8qIGNvcHlfc3RydWN0X3RvX3VzZXIoKSB6ZXJvcyB1cCB0byB1c2l6ZSBieXRlcyAqL1xcbiAgODA6XFx0XFx0aWYgKGhkci5zaXplIFxcdTAwM2UgUEFHRV9TSVpFKVxcbiAgODE6XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gIDgyOlxcdFxcdHVzaXplID0gaGRyLnNpemU7XFxuICA4MzpcXHRcXHRoZHIuc2l6ZSA9IG1pbihoZHIuc2l6ZSwgSU9fTUFYX1FVRVJZX1NJWkUpO1xcbiAgODQ6XFx0XFx0dWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRpZiAoaGRyLnF1ZXJ5X29wIFxcdTAwM2U9IF9fSU9fVVJJTkdfUVVFUllfTUFYKSB7XFxuICA4NzpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4gIDg4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgODk6XFx0XFx0fVxcbiAgOTA6XFx0XFx0aWYgKCFtZW1faXNfemVybyhoZHIuX19yZXN2LCBzaXplb2YoaGRyLl9fcmVzdikpIHx8IGhkci5yZXN1bHQgfHwgIWhkci5zaXplKVxcbiAgOTE6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA5MjpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgdWRhdGEsIGhkci5zaXplKSlcXG4gIDkzOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRzd2l0Y2ggKGhkci5xdWVyeV9vcCkge1xcbiAgOTY6XFx0XFx0Y2FzZSBJT19VUklOR19RVUVSWV9PUENPREVTOlxcbiAgOTc6XFx0XFx0XFx0cmV0ID0gaW9fcXVlcnlfb3BzKGRhdGEpO1xcbiAgOTg6XFx0XFx0XFx0YnJlYWs7XFxuICA5OTpcXHRcXHRjYXNlIElPX1VSSU5HX1FVRVJZX1pDUlg6XFxuIDEwMDpcXHRcXHRcXHRyZXQgPSBpb19xdWVyeV96Y3J4KGRhdGEpO1xcbiAxMDE6XFx0XFx0XFx0YnJlYWs7XFxuIDEwMjpcXHRcXHRjYXNlIElPX1VSSU5HX1FVRVJZX1pDUlhfRVZFTlQ6XFxuIDEwMzpcXHRcXHRcXHRyZXQgPSBpb19xdWVyeV96Y3J4X25vdGlmKGRhdGEpO1xcbiAxMDQ6XFx0XFx0XFx0YnJlYWs7XFxuIDEwNTpcXHRcXHRjYXNlIElPX1VSSU5HX1FVRVJZX1NDUTpcXG4gMTA2OlxcdFxcdFxcdHJldCA9IGlvX3F1ZXJ5X3NjcShkYXRhKTtcXG4gMTA3OlxcdFxcdFxcdGJyZWFrO1xcbiAxMDg6XFx0XFx0fVxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4gMTExOlxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UocmV0IFxcdTAwM2UgSU9fTUFYX1FVRVJZX1NJWkUpKVxcbiAxMTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDExMzpcXHRcXHRcXHRyZXNfc2l6ZSA9IHJldDtcXG4gMTE0OlxcdFxcdFxcdHJldCA9IDA7XFxuIDExNTpcXHRcXHR9XFxuIDExNjpcXHRvdXQ6XFxuIDExNzpcXHRcXHRoZHIucmVzdWx0ID0gcmV0O1xcbiAxMTg6XFx0XFx0aGRyLnNpemUgPSBtaW5fdChzaXplX3QsIHVzaXplLCByZXNfc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjQ5LjMxMTQ1MzAxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDc2MDQyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaW9fdXJpbmdgIFJlZ2lzdHJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGZ1bmN0aW9uYWwuIEkgY2FuIHNlZSB0aGF0IGl0J3MgYmVpbmcgYWNjZXNzZWQgdGhyb3VnaCBgaW9fdXJpbmdfcmVnaXN0ZXJgIHVzaW5nIHRoZSBgSU9SSU5HX1JFR0lTVEVSX1FVRVJZYCBmbGFnLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3Mgd29ya2luZy4gVGhlIGNvZGUgbWVudGlvbnMgYGlvX2hhbmRsZV9xdWVyeV9lbnRyeWAsIGJ1dCB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIEkgd29uJ3QgZmluZCB0aGUgY29yZSBsb2dpYyB0aGVyZSBkaXJlY3RseS4gTXkgZm9jdXMgbmVlZHMgdG8gc2hpZnQgdG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zOiBlaXRoZXIgYGlvX3F1ZXJ5YCwgb3IgcGVyaGFwcyBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgLCBvciBldmVuIHRoZSBsb3ctbGV2ZWwgYF9faW9fdXJpbmdfcmVnaXN0ZXJgLlxuXG5gaW9fcXVlcnlgIHNlZW1zIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSwgYW5kIGl0J3MgdGhhbmtmdWxseSBub3Qgc3RhdGljLiBFeGNlbGxlbnQuIE5vdywgYWNjb3JkaW5nIHRvIHRoZSBub3RlcywgaXQncyBkZWZpbmVkIGluIGBpb191cmluZy9xdWVyeS5jYC4gVGltZSB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIGBpb19xdWVyeWAuIExldCdzIHNlZSBob3cgdGhlIHJlZ2lzdHJhdGlvbiBxdWVyeSBpcyBiZWluZyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6NDI6NTMuNzE5MDYwMTU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3F1ZXJ5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE5OlxcdFxcbiAxMjA6XFx0XFx0aWYgKGNvcHlfc3RydWN0X3RvX3VzZXIodWRhdGEsIHVzaXplLCBkYXRhLCBoZHIuc2l6ZSwgTlVMTCkpXFxuIDEyMTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMTIyOlxcdFxcdGlmIChjb3B5X3RvX3VzZXIodWhkciwgXFx1MDAyNmhkciwgc2l6ZW9mKGhkcikpKVxcbiAxMjM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDEyNDpcXHRcXHQqbmV4dF9lbnRyeSA9IGhkci5uZXh0X2VudHJ5O1xcbiAxMjU6XFx0XFx0cmV0dXJuIDA7XFxuIDEyNjpcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdGludCBpb19xdWVyeSh2b2lkIF9fdXNlciAqYXJnLCB1bnNpZ25lZCBucl9hcmdzKVxcbiAxMjk6XFx0e1xcbiAxMzA6XFx0XFx0dW5pb24gaW9fcXVlcnlfZGF0YSBlbnRyeV9idWZmZXI7XFxuIDEzMTpcXHRcXHR2b2lkIF9fdXNlciAqdWhkciA9IGFyZztcXG4gMTMyOlxcdFxcdGludCByZXQsIG5yID0gMDtcXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0bWVtc2V0KFxcdTAwMjZlbnRyeV9idWZmZXIsIDAsIHNpemVvZihlbnRyeV9idWZmZXIpKTtcXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0aWYgKG5yX2FyZ3MpXFxuIDEzNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0d2hpbGUgKHVoZHIpIHtcXG4gMTQwOlxcdFxcdFxcdHU2NCBuZXh0X2hkcjtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0XFx0cmV0ID0gaW9faGFuZGxlX3F1ZXJ5X2VudHJ5KFxcdTAwMjZlbnRyeV9idWZmZXIsIHVoZHIsIFxcdTAwMjZuZXh0X2hkcik7XFxuIDE0MzpcXHRcXHRcXHRpZiAocmV0KVxcbiAxNDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTQ1OlxcdFxcdFxcdHVoZHIgPSB1NjRfdG9fdXNlcl9wdHIobmV4dF9oZHIpO1xcbiAxNDY6XFx0XFxuIDE0NzpcXHRcXHRcXHQvKiBIYXZlIHNvbWUgbGltaXQgdG8gYXZvaWQgYSBwb3RlbnRpYWwgY3ljbGUgKi9cXG4gMTQ4OlxcdFxcdFxcdGlmICgrK25yIFxcdTAwM2U9IElPX01BWF9RVUVSWV9FTlRSSUVTKVxcbiAxNDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIDE1MDpcXHRcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIDE1MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiAxNTI6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDE1MzpcXHRcXHR9XFxuIDE1NDpcXHRcXHRyZXR1cm4gMDtcXG4gMTU1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6NDI6NTMuNzE5MTI3NzM0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTcyNDc4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWluZCBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgZnVuY3Rpb24gYGlvX3F1ZXJ5YC4gVGhhdCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpbmcgdGhpcyBzeXN0ZW0uIE5vdywgYXJlIHRoZXJlIGFueSBrZXkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhc3NvY2lhdGVkIHdpdGggaXQgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gQWgsIHllcywgdGhlIG9idmlvdXMgb25lOiBgQ09ORklHX0lPX1VSSU5HYC4gVGhhdCdzIHRoZSBtYWluIGZsYWcgdGhhdCB3aWxsIGxpa2VseSBjb250cm9sIG11Y2ggb2YgdGhlIGJlaGF2aW9yIEknbSBpbnRlcmVzdGVkIGluLiBXaGVyZSBjYW4gSSBmaW5kIHRoZSBkZXRhaWxzIG9uIHRoYXQ/IFJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIExldCdzIHN0YXJ0IHdpdGggYGlvX3VyaW5nL0tjb25maWdgLCBhbmQgaWYgdGhhdCBkb2Vzbid0IGhvbGQgdGhlIGFuc3dlciwgSSdsbCBtb3ZlIG9uIHRvIGBpbml0L0tjb25maWdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBsb3dkb3duIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgSU9fVVJJTkdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzMzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0Mjo1OC4xMzYzNzgwNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDg3OTQ4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xOTEwPWNvbmZpZyBBSU9cXG4tLVxcbmluaXQvS2NvbmZpZy0xOTE3LVxcbmluaXQvS2NvbmZpZzoxOTE4OmNvbmZpZyBJT19VUklOR1xcbmluaXQvS2NvbmZpZy0xOTE5LVxcdGJvb2wgXFxcIkVuYWJsZSBJTyB1cmluZyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTI3PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTM5LVxcbmluaXQvS2NvbmZpZzoxOTQwOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG5pbml0L0tjb25maWctMTk0MS1cXHR0cmlzdGF0ZSBcXFwiRW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy01LVxcbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxcbmlvX3VyaW5nL0tjb25maWctNy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTEyLVxcbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxcbmlvX3VyaW5nL0tjb25maWctMTQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXFxuaW9fdXJpbmcvS2NvbmZpZy0xOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQyOjU5Ljc0NTE3NzcwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjYwMzc1MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRGl2aW5nIGludG8gdGhlIGBJT19VUklOR2AgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgSU9fVVJJTkdgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gdG8gZm9jdXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZS4gTGV0J3Mgc2VlIGhvdyBgaW9fcXVlcnlgIGlzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbi4gUmlnaHQsIGxvb2tzIGxpa2UgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgaW9fdXJpbmdfcmVnaXN0ZXJgIGFuZCBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgLiBUaG9zZSBhcmUgYm90aCBkZWZpbmVkIHdpdGhpbiBgaW9fdXJpbmcvcmVnaXN0ZXIuY2AuIEludGVyZXN0aW5nLiBTaW5jZSBJIGhhdmUgdG8gY2hvb3NlIG9uZSB0byBkaXZlIGludG8sIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmRgLiBJIGZpZ3VyZSB0aGF0IGl0cyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNjgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzowNC4wMDU1NTU0ODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcmVnaXN0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTU6XFx0fVxcbiA5OTY6XFx0XFxuIDk5NzpcXHQvKlxcbiA5OTg6XFx0ICogXFxcImJsaW5kXFxcIiByZWdpc3RyYXRpb24gb3Bjb2RlcyBhcmUgb25lcyB3aGVyZSB0aGVyZSdzIG5vIHJpbmcgZ2l2ZW4sIGFuZFxcbiA5OTk6XFx0ICogaGVuY2UgdGhlIHNvdXJjZSBmZCBtdXN0IGJlIC0xLlxcbjEwMDA6XFx0ICovXFxuMTAwMTpcXHRzdGF0aWMgaW50IGlvX3VyaW5nX3JlZ2lzdGVyX2JsaW5kKHVuc2lnbmVkIGludCBvcGNvZGUsIHZvaWQgX191c2VyICphcmcsXFxuMTAwMjpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnJfYXJncylcXG4xMDAzOlxcdHtcXG4xMDA0OlxcdFxcdHN3aXRjaCAob3Bjb2RlKSB7XFxuMTAwNTpcXHRcXHRjYXNlIElPUklOR19SRUdJU1RFUl9TRU5EX01TR19SSU5HOlxcbjEwMDY6XFx0XFx0XFx0cmV0dXJuIGlvX3VyaW5nX3JlZ2lzdGVyX3NlbmRfbXNnX3JpbmcoYXJnLCBucl9hcmdzKTtcXG4xMDA3OlxcdFxcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX1FVRVJZOlxcbjEwMDg6XFx0XFx0XFx0cmV0dXJuIGlvX3F1ZXJ5KGFyZywgbnJfYXJncyk7XFxuMTAwOTpcXHRcXHRjYXNlIElPUklOR19SRUdJU1RFUl9SRVNUUklDVElPTlM6XFxuMTAxMDpcXHRcXHRcXHRyZXR1cm4gaW9fcmVnaXN0ZXJfcmVzdHJpY3Rpb25zX3Rhc2soYXJnLCBucl9hcmdzKTtcXG4xMDExOlxcdFxcdGNhc2UgSU9SSU5HX1JFR0lTVEVSX0JQRl9GSUxURVI6XFxuMTAxMjpcXHRcXHRcXHRyZXR1cm4gaW9fcmVnaXN0ZXJfYnBmX2ZpbHRlcl90YXNrKGFyZywgbnJfYXJncyk7XFxuMTAxMzpcXHRcXHR9XFxuMTAxNDpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDE1OlxcdH1cXG4xMDE2OlxcdFxcbjEwMTc6XFx0U1lTQ0FMTF9ERUZJTkU0KGlvX3VyaW5nX3JlZ2lzdGVyLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIG9wY29kZSxcXG4xMDE4OlxcdFxcdFxcdHZvaWQgX191c2VyICosIGFyZywgdW5zaWduZWQgaW50LCBucl9hcmdzKVxcbjEwMTk6XFx0e1xcbjEwMjA6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHg7XFxuMTAyMTpcXHRcXHRsb25nIHJldCA9IC1FQkFERjtcXG4xMDIyOlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbjEwMjM6XFx0XFx0Ym9vbCB1c2VfcmVnaXN0ZXJlZF9yaW5nO1xcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHR1c2VfcmVnaXN0ZXJlZF9yaW5nID0gISEob3Bjb2RlIFxcdTAwMjYgSU9SSU5HX1JFR0lTVEVSX1VTRV9SRUdJU1RFUkVEX1JJTkcpO1xcbjEwMjY6XFx0XFx0b3Bjb2RlIFxcdTAwMjY9IH5JT1JJTkdfUkVHSVNURVJfVVNFX1JFR0lTVEVSRURfUklORztcXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0aWYgKG9wY29kZSBcXHUwMDNlPSBJT1JJTkdfUkVHSVNURVJfTEFTVClcXG4xMDI5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEwMzA6XFx0XFxuMTAzMTpcXHRcXHRpZiAoZmQgPT0gLTEpXFxuMTAzMjpcXHRcXHRcXHRyZXR1cm4gaW9fdXJpbmdfcmVnaXN0ZXJfYmxpbmQob3Bjb2RlLCBhcmcsIG5yX2FyZ3MpO1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRmaWxlID0gaW9fdXJpbmdfY3R4X2dldF9maWxlKGZkLCB1c2VfcmVnaXN0ZXJlZF9yaW5nKTtcXG4xMDM1OlxcdFxcdGlmIChJU19FUlIoZmlsZSkpXFxuMTAzNjpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihmaWxlKTtcXG4xMDM3OlxcdFxcdGN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xMDM4OlxcdFxcbjEwMzk6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKTtcXG4xMDQwOlxcdFxcdHJldCA9IF9faW9fdXJpbmdfcmVnaXN0ZXIoY3R4LCBvcGNvZGUsIGFyZywgbnJfYXJncyk7XFxuMTA0MTpcXHRcXG4xMDQyOlxcdFxcdHRyYWNlX2lvX3VyaW5nX3JlZ2lzdGVyKGN0eCwgb3Bjb2RlLCBjdHgtXFx1MDAzZWZpbGVfdGFibGUuZGF0YS5ucixcXG4xMDQzOlxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlYnVmX3RhYmxlLm5yLCByZXQpO1xcbjEwNDQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXVyaW5nX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzowNC4wMDU2NTYyMThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4NTg2OTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcmVjZW50IHBhdGNoLCBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgY2xlYXI6IGBpb19xdWVyeWAgKmlzKiBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIGBzeXNfaW9fdXJpbmdfcmVnaXN0ZXJgLiBUaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBuZXcgY2hlY2ssIHNwZWNpZmljYWxseSBgaGRyLnNpemUgXHUwMDNlIFBBR0VfU0laRWAsIGFuZCBpdCByZXR1cm5zIGAtRTJCSUdgIGlmIHRoYXQgY29uZGl0aW9uIGlzIG1ldC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UsIGFuZCB0aGF0IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldFwiIHRvIG1lLiBNeSBtYWluIGZvY3VzIGhlcmUgd2lsbCBiZSBvbiB0aGUgYGlvX3F1ZXJ5YCBzeW1ib2wuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYnV0IEkgdGhpbmsgYElPX1VSSU5HYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBZZXAsIHRoYXQgbG9va3MgcmlnaHQuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzMxLCJPdXRwdXRUb2tlbnMiOjExNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQzOjA4Ljg5MTUyOTQ5N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Nzc1ODI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3F1ZXJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpemUgdmFsaWRhdGlvbiBjaGVjayBpbiBgaW9faGFuZGxlX3F1ZXJ5X2VudHJ5YCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgaW9fcXVlcnlgIGZ1bmN0aW9uIGR1cmluZyBgaW9fdXJpbmdfcmVnaXN0ZXJgIHN5c2NhbGxzIHdpdGggdGhlIGBJT1JJTkdfUkVHSVNURVJfUVVFUllgIG9wY29kZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxhcmdlIHNpemVzIGluIGBjb3B5X3N0cnVjdF90b191c2VyKClgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fcXVlcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2l6ZSB2YWxpZGF0aW9uIGNoZWNrIGluIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBpb19xdWVyeWAgZnVuY3Rpb24gZHVyaW5nIGBpb191cmluZ19yZWdpc3RlcmAgc3lzY2FsbHMgd2l0aCB0aGUgYElPUklOR19SRUdJU1RFUl9RVUVSWWAgb3Bjb2RlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGFyZ2Ugc2l6ZXMgaW4gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQzOjA4Ljk2OTMxMjYxNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3NjcwNzcwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzowOC45Njk4MzU5NTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI3NjY1NDc4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBsaW1pdCBgaGRyLnNpemVgIHRvIGBQQUdFX1NJWkVgIGJlZm9yZSBpdCBpcyBzYXZlZCBhcyBgdXNpemVgLiBUaGUgYHVzaXplYCB2YXJpYWJsZSBpcyBsYXRlciBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgYXMgdGhlIHVzZXIgYnVmZmVyIHNpemUuIElmIGB1c2l6ZWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCBidWZmZXIgc2l6ZSwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCB6ZXJvIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHVzZXIgc3BhY2UuIElmIGEgdXNlciBwcm92aWRlcyBhbiBleHRyZW1lbHkgbGFyZ2UgYGhkci5zaXplYCwgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgd2lsbCBhdHRlbXB0IHRvIHplcm8gYSBtYXNzaXZlIGFtb3VudCBvZiB1c2VyIG1lbW9yeSwgbGVhZGluZyB0byBhIGRlbmlhbCBvZiBzZXJ2aWNlIChlLmcuLCBzb2Z0IGxvY2t1cCBvciBleGNlc3NpdmUgQ1BVIHVzYWdlKS5cXG5cXG5UaGlzIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBrZXJuZWwgYnVmZmVyIGBkYXRhYCBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIGBtZW1zZXQoKWAgaW4gYGlvX3F1ZXJ5KClgLCBhbmQgdGhlIGV4dHJhIGJ5dGVzIHdyaXR0ZW4gdG8gdXNlciBzcGFjZSBhcmUgZXhwbGljaXRseSB6ZXJvZWQgYnkgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAuIFNpbmNlIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gU3RhbmRhcmQgZnV6emluZyAod2l0aCBLQVNBTiwgc29mdCBsb2NrdXAgZGV0ZWN0b3JzLCBldGMuKSBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIERvUyBpc3N1ZXMgbGlrZSB0aGlzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzMTA4MWFjMGNhODA0NDYyOGM0OGRjNGZlNWUxZTU4ZGU1NjgxZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMTo0MjozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3F1ZXJ5LmMgYi9pb191cmluZy9xdWVyeS5jXG5pbmRleCA4OGEzMjU3MzY5OTI0Li5mMmI1ZTE5ZTVhZjY3IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcXVlcnkuY1xuKysrIGIvaW9fdXJpbmcvcXVlcnkuY1xuQEAgLTc2LDYgKzc2LDkgQEAgc3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXG4gXG4gXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2aGRyLCB1aGRyLCBzaXplb2YoaGRyKSkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0LyogY29weV9zdHJ1Y3RfdG9fdXNlcigpIHplcm9zIHVwIHRvIHVzaXplIGJ5dGVzICovXG4rXHRpZiAoaGRyLnNpemUgXHUwMDNlIFBBR0VfU0laRSlcbitcdFx0cmV0dXJuIC1FMkJJRztcbiBcdHVzaXplID0gaGRyLnNpemU7XG4gXHRoZHIuc2l6ZSA9IG1pbihoZHIuc2l6ZSwgSU9fTUFYX1FVRVJZX1NJWkUpO1xuIFx0dWRhdGEgPSB1NjRfdG9fdXNlcl9wdHIoaGRyLnF1ZXJ5X2RhdGEpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTE6NDM6MDguOTY5ODM2NjY1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDg0MTIzMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBRdWVyeSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGlvX3VyaW5nL3F1ZXJ5LmNgLiBJdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZXkndmUgYWRkZWQgYSBjaGVjazogYGlmIChoZHIuc2l6ZSBcdTAwM2UgUEFHRV9TSVpFKSByZXR1cm4gLUUyQklHO2AgcmlnaHQgYWZ0ZXIgYSBgY29weV9mcm9tX3VzZXJgLiBNeSBpbml0aWFsIHJlYWN0aW9uIHdhcywgXCJXaHk/IFdoYXQncyB0aGUgcG90ZW50aWFsIGlzc3VlIHRoZXkncmUgYWRkcmVzc2luZz9cIiBUaGUgY29tbWVudCBhYm91dCBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYCB6ZXJvcyB1cCB0byBgdXNpemVgIGJ5dGVzIHBpcXVlZCBteSBpbnRlcmVzdC5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIGNvdWxkIHRoaXMgYmUgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG1heWJlIGFtcGxpZmllZCBieSBhIGxhcmdlIGBoZHIuc2l6ZWA/IEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBob3cgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWAgYWN0dWFsbHkgd29ya3M6IGl0IGNvcGllcyBga3NpemVgIGFuZCB6ZXJvLWZpbGxzIGB1c2l6ZSAtIGtzaXplYC4gU28gYSBnaWdhbnRpYyBgdXNpemVgIHdvdWxkIGluZGVlZCBsZWFkIHRvIGEgbG90IG9mIHplcm9pbmcsIHBvc3NpYmx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgbWF5YmUgZXZlbiBPT00gb3Igc29tZSBraW5kIG9mIGRlbmlhbC1vZi1zZXJ2aWNlLCByaWdodD8gSSBzdGFydGVkIHdvbmRlcmluZyBpZiBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIHdhcyBpbnZvbHZlZCBhdCBhbGwuIEJ1dCwgbm8gdGhpcyBkb2Vzbid0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQgcHJldmVudHMgYSBEb1Mgb3Igc2ltaWxhciBpc3N1ZSB3aGVyZSBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgaGFzIHRvIHplcm8gYSBodWdlIGNodW5rIG9mIG1lbW9yeS5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgc2l6ZSBjaGVjaywgcHJldmVudGluZyBhIERvUyBieSBsaW1pdGluZyB0aGUgYHVzaXplYC4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIHBvdGVudGlhbCBmb3IgZXhjZXNzaXZlIHplcm9pbmcgYmFzZWQgb24gYSB1c2VyLXByb3ZpZGVkIHNpemUuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgIGZ1bmN0aW9uIGluIHRoZSBzYW1lIGZpbGUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzoxNS40MTgyNTQxODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzY3NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2hhbmRsZV9xdWVyeV9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9xdWVyeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3F1ZXJ5LmM9NjA9c3RhdGljIHNzaXplX3QgaW9fcXVlcnlfc2NxKHVuaW9uIGlvX3F1ZXJ5X2RhdGEgKmRhdGEpXFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTY4LVxcbmlvX3VyaW5nL3F1ZXJ5LmM6Njk6c3RhdGljIGludCBpb19oYW5kbGVfcXVlcnlfZW50cnkodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSwgdm9pZCBfX3VzZXIgKnVoZHIsXFxuaW9fdXJpbmcvcXVlcnkuYy03MC1cXHRcXHRcXHRcXHQgdTY0ICpuZXh0X2VudHJ5KVxcbi0tXFxuaW9fdXJpbmcvcXVlcnkuYz0xMjg9aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpXFxuLS1cXG5pb191cmluZy9xdWVyeS5jLTE0MS1cXG5pb191cmluZy9xdWVyeS5jOjE0MjpcXHRcXHRyZXQgPSBpb19oYW5kbGVfcXVlcnlfZW50cnkoXFx1MDAyNmVudHJ5X2J1ZmZlciwgdWhkciwgXFx1MDAyNm5leHRfaGRyKTtcXG5pb191cmluZy9xdWVyeS5jLTE0My1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzoxNS40NjgwMjgzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzQ4NDkxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBpb19oYW5kbGVfcXVlcnlfZW50cnlgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlLiAqU3BlY2lmaWNhbGx5KiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHF1ZXJ5IGVudHJpZXMuIEknbSBsb29raW5nIGZvciB3aGVyZSBpdCByZXNpZGVzIHdpdGhpbiB0aGUgYnJvYWRlciBJL08gc3RydWN0dXJlLCBhbmQgd2hhdCB0aGUgZmxvdyBvZiBpbmZvcm1hdGlvbiBpcyBhcyBhIHJlc3VsdCBvZiB0aGF0IGZ1bmN0aW9uJ3Mgb3BlcmF0aW9ucy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQncyBpbnRlcmFjdGluZyB3aXRoPyBJcyBpdCByZXNwb25zaWJsZSBmb3IgaW5pdGlhbCBwYXJzaW5nLCBkZWxlZ2F0aW9uLCBvciBmaW5hbCBkYXRhIGRlbGl2ZXJ5PyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGxldmVsIG9mIGFic3RyYWN0aW9uIGl0J3Mgd29ya2luZyBhdCwgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIEkvTyBwaXBlbGluZS4gSSBhbnRpY2lwYXRlIGl0IGRlYWxzIHdpdGggc29tZSBmb3JtIG9mIHF1ZXJ5IHN0cnVjdCwgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSB0aGUgZW50cnkgcG9pbnQgZnJvbSB3aGljaCB0aGluZ3MgaGFwcGVuLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IG9uIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHV0aWxpemF0aW9uLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgcHJlc2VudC4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQzOjE5LjA0Mjg4MTIxNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9xdWVyeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRzdGF0aWMgc3NpemVfdCBpb19xdWVyeV9zY3EodW5pb24gaW9fcXVlcnlfZGF0YSAqZGF0YSlcXG4gIDYxOlxcdHtcXG4gIDYyOlxcdFxcdHN0cnVjdCBpb191cmluZ19xdWVyeV9zY3EgKmUgPSBcXHUwMDI2ZGF0YS1cXHUwMDNlc2NxO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRlLVxcdTAwM2VoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW9fcmluZ3MpO1xcbiAgNjU6XFx0XFx0ZS1cXHUwMDNlaGRyX2FsaWdubWVudCA9IFNNUF9DQUNIRV9CWVRFUztcXG4gIDY2OlxcdFxcdHJldHVybiBzaXplb2YoKmUpO1xcbiAgNjc6XFx0fVxcbiAgNjg6XFx0XFxuICA2OTpcXHRzdGF0aWMgaW50IGlvX2hhbmRsZV9xdWVyeV9lbnRyeSh1bmlvbiBpb19xdWVyeV9kYXRhICpkYXRhLCB2b2lkIF9fdXNlciAqdWhkcixcXG4gIDcwOlxcdFxcdFxcdFxcdFxcdCB1NjQgKm5leHRfZW50cnkpXFxuICA3MTpcXHR7XFxuICA3MjpcXHRcXHRzdHJ1Y3QgaW9fdXJpbmdfcXVlcnlfaGRyIGhkcjtcXG4gIDczOlxcdFxcdHNpemVfdCB1c2l6ZSwgcmVzX3NpemUgPSAwO1xcbiAgNzQ6XFx0XFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbiAgNzU6XFx0XFx0dm9pZCBfX3VzZXIgKnVkYXRhO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmhkciwgdWhkciwgc2l6ZW9mKGhkcikpKVxcbiAgNzg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuICA3OTpcXHRcXHQvKiBjb3B5X3N0cnVjdF90b191c2VyKCkgemVyb3MgdXAgdG8gdXNpemUgYnl0ZXMgKi9cXG4gIDgwOlxcdFxcdGlmIChoZHIuc2l6ZSBcXHUwMDNlIFBBR0VfU0laRSlcXG4gIDgxOlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuICA4MjpcXHRcXHR1c2l6ZSA9IGhkci5zaXplO1xcbiAgODM6XFx0XFx0aGRyLnNpemUgPSBtaW4oaGRyLnNpemUsIElPX01BWF9RVUVSWV9TSVpFKTtcXG4gIDg0OlxcdFxcdHVkYXRhID0gdTY0X3RvX3VzZXJfcHRyKGhkci5xdWVyeV9kYXRhKTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0aWYgKGhkci5xdWVyeV9vcCBcXHUwMDNlPSBfX0lPX1VSSU5HX1FVRVJZX01BWCkge1xcbiAgODc6XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuICA4ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDg5OlxcdFxcdH1cXG4gIDkwOlxcdFxcdGlmICghbWVtX2lzX3plcm8oaGRyLl9fcmVzdiwgc2l6ZW9mKGhkci5fX3Jlc3YpKSB8fCBoZHIucmVzdWx0IHx8ICFoZHIuc2l6ZSlcXG4gIDkxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgOTI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHVkYXRhLCBoZHIuc2l6ZSkpXFxuICA5MzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0c3dpdGNoIChoZHIucXVlcnlfb3ApIHtcXG4gIDk2OlxcdFxcdGNhc2UgSU9fVVJJTkdfUVVFUllfT1BDT0RFUzpcXG4gIDk3OlxcdFxcdFxcdHJldCA9IGlvX3F1ZXJ5X29wcyhkYXRhKTtcXG4gIDk4OlxcdFxcdFxcdGJyZWFrO1xcbiAgOTk6XFx0XFx0Y2FzZSBJT19VUklOR19RVUVSWV9aQ1JYOlxcbiAxMDA6XFx0XFx0XFx0cmV0ID0gaW9fcXVlcnlfemNyeChkYXRhKTtcXG4gMTAxOlxcdFxcdFxcdGJyZWFrO1xcbiAxMDI6XFx0XFx0Y2FzZSBJT19VUklOR19RVUVSWV9aQ1JYX0VWRU5UOlxcbiAxMDM6XFx0XFx0XFx0cmV0ID0gaW9fcXVlcnlfemNyeF9ub3RpZihkYXRhKTtcXG4gMTA0OlxcdFxcdFxcdGJyZWFrO1xcbiAxMDU6XFx0XFx0Y2FzZSBJT19VUklOR19RVUVSWV9TQ1E6XFxuIDEwNjpcXHRcXHRcXHRyZXQgPSBpb19xdWVyeV9zY3EoZGF0YSk7XFxuIDEwNzpcXHRcXHRcXHRicmVhaztcXG4gMTA4OlxcdFxcdH1cXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuIDExMTpcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHJldCBcXHUwMDNlIElPX01BWF9RVUVSWV9TSVpFKSlcXG4gMTEyOlxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAxMTM6XFx0XFx0XFx0cmVzX3NpemUgPSByZXQ7XFxuIDExNDpcXHRcXHRcXHRyZXQgPSAwO1xcbiAxMTU6XFx0XFx0fVxcbiAxMTY6XFx0b3V0OlxcbiAxMTc6XFx0XFx0aGRyLnJlc3VsdCA9IHJldDtcXG4gMTE4OlxcdFxcdGhkci5zaXplID0gbWluX3Qoc2l6ZV90LCB1c2l6ZSwgcmVzX3NpemUpO1xcbiAxMTk6XFx0XFxuIDEyMDpcXHRcXHRpZiAoY29weV9zdHJ1Y3RfdG9fdXNlcih1ZGF0YSwgdXNpemUsIGRhdGEsIGhkci5zaXplLCBOVUxMKSlcXG4gMTIxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiAxMjI6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcih1aGRyLCBcXHUwMDI2aGRyLCBzaXplb2YoaGRyKSkpXFxuIDEyMzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gMTI0OlxcdFxcdCpuZXh0X2VudHJ5ID0gaGRyLm5leHRfZW50cnk7XFxuIDEyNTpcXHRcXHRyZXR1cm4gMDtcXG4gMTI2OlxcdH1cXG4gMTI3OlxcdFxcbiAxMjg6XFx0aW50IGlvX3F1ZXJ5KHZvaWQgX191c2VyICphcmcsIHVuc2lnbmVkIG5yX2FyZ3MpXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHR1bmlvbiBpb19xdWVyeV9kYXRhIGVudHJ5X2J1ZmZlcjtcXG4gMTMxOlxcdFxcdHZvaWQgX191c2VyICp1aGRyID0gYXJnO1xcbiAxMzI6XFx0XFx0aW50IHJldCwgbnIgPSAwO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRtZW1zZXQoXFx1MDAyNmVudHJ5X2J1ZmZlciwgMCwgc2l6ZW9mKGVudHJ5X2J1ZmZlcikpO1xcbiAxMzU6XFx0XFxuIDEzNjpcXHRcXHRpZiAobnJfYXJncylcXG4gMTM3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHR3aGlsZSAodWhkcikge1xcbiAxNDA6XFx0XFx0XFx0dTY0IG5leHRfaGRyO1xcbiAxNDE6XFx0XFxuIDE0MjpcXHRcXHRcXHRyZXQgPSBpb19oYW5kbGVfcXVlcnlfZW50cnkoXFx1MDAyNmVudHJ5X2J1ZmZlciwgdWhkciwgXFx1MDAyNm5leHRfaGRyKTtcXG4gMTQzOlxcdFxcdFxcdGlmIChyZXQpXFxuIDE0NDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDU6XFx0XFx0XFx0dWhkciA9IHU2NF90b191c2VyX3B0cihuZXh0X2hkcik7XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdFxcdFxcdC8qIEhhdmUgc29tZSBsaW1pdCB0byBhdm9pZCBhIHBvdGVudGlhbCBjeWNsZSAqL1xcbiAxNDg6XFx0XFx0XFx0aWYgKCsrbnIgXFx1MDAzZT0gSU9fTUFYX1FVRVJZX0VOVFJJRVMpXFxuIDE0OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4gMTUwOlxcdFxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4gMTUxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuIDE1MjpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTUzOlxcdFxcdH1cXG4gMTU0OlxcdFxcdHJldHVybiAwO1xcbiAxNTU6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMTo0MzoxOS4wNDI5NjU3MTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2OTMzOTExNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHNpemUgY2hlY2sgb24gYGhkci5zaXplYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIG92ZXJmbG93LiBCdXQgdGhlbiBJIHNlZSB0aGF0IGBjb3B5X3N0cnVjdF90b191c2VyYCBpcyBiZWluZyBjYWxsZWQgYXQgdGhlIGVuZCB3aXRoIHRoaXMgYHVzaXplYCB2YWx1ZSwgd2hpY2ggaXMgZGVyaXZlZCBmcm9tIHRoYXQgb3JpZ2luYWwgYGhkci5zaXplYC4gYGNvcHlfc3RydWN0X3RvX3VzZXJgLCBpZiB0aGUgZGVzdGluYXRpb24gYHVzaXplYCBpcyBncmVhdGVyIHRoYW4gdGhlIHNvdXJjZSBgaGRyLnNpemVgICh3aGljaCBpdCAqY2FuKiBiZSBhZnRlciB0aGUgc2l6ZSByZWR1Y3Rpb25zKSwgKnplcm9zKiB0aGUgcmVtYWluZGVyLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4gd2FzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLCBidXQgdGhhdCdzIG5vdCB0aGUgY2FzZS4gVGhlIGBkYXRhYCBidWZmZXIsIGBlbnRyeV9idWZmZXJgLCBpcyBtZXRpY3Vsb3VzbHkgemVyb2VkIG91dCB1c2luZyBgbWVtc2V0YC4gU28sIHRoZXJlJ3Mgbm8gcXVlc3Rpb24gb2YgYSBtZW1vcnkgbGVhayBvciBleHBvc2luZyBrZXJuZWwgc2VjcmV0cy4gYGhkcmAgaXMgY29waWVkICpmcm9tKiB1c2VyIHNwYWNlLCBhbmQgdGhlIHNpemUgYHJlc19zaXplYCBpcyBmcm9tIGEga2VybmVsIGZ1bmN0aW9uLlxuXG5UaGUgcmVhbCBpc3N1ZSBpcyB0aGlzOiBpZiBhIG1hbGljaW91cyB1c2VyIHByb3ZpZGVzIGEgbGFyZ2UgYGhkci5zaXplYCB2YWx1ZSAoZXZlbiBhZnRlciB0aGUgaW5pdGlhbCBjaGVjayBhdCB0aGUgc3RhcnQpLCBgY29weV9zdHJ1Y3RfdG9fdXNlcmAgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB6ZXJvIGEgbWFzc2l2ZSBjaHVuayBvZiB1c2VyIG1lbW9yeSBiZWNhdXNlIGB1c2l6ZWAgaXMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIHNpemUsIGFuZCBgaGRyLnNpemVgIGlzIG9ubHkgdXNlZCB0byBjb3B5IGRhdGEgKmZyb20qIHRoZSBrZXJuZWwgKnRvKiB1c2VyLiAgVGhpcyBsZWFkcyB0byBhIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHk6IGEgc29mdCBsb2NrdXAsIGV4Y2Vzc2l2ZSBDUFUgdXNhZ2UsIG9yIGFuIE9PTSBzaXR1YXRpb24uIEl04oCZcyBhIGNsYXNzaWMgRG9TLlxuXG5UaGlzIGlzbid0IGEgS0FTQU4gb3IgS01TQU4gaXNzdWUgcGVyIHNlLiBLQVNBTiBpcyBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBlcnJvcnMgKmluIGtlcm5lbC1zcGFjZSosIGFuZCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgKnJlYWRzKi4gIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoYXBwZW5pbmcgaGVyZTsgaXQncyBhIGxvbmcsIHVubmVjZXNzYXJ5IGxvb3Agb2Ygd3JpdGluZyB6ZXJvcyB0byB1c2VyIG1lbW9yeSB3aGljaCBpcyBhIERvUywgYnV0IG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGJ1Zy4gS0FTQU4gd291bGQgZGV0ZWN0IHRoaXMgYXMgc29mdCBsb2NrdXAgb3IgT09NLCBvciBhIGhhbmcsIGFuZCB0aGUgZnV6emVycyB3ZSB1c2Ugd291bGQgYWxzbyBmaW5kIHRoaXMgRG9TIHZ1bG5lcmFiaWxpdHkuIEtNU0FOIHdvdWxkIGJlIHV0dGVybHkgdXNlbGVzcyBoZXJlIGJlY2F1c2UgS01TQU4gaXMgbm90IGFib3V0IGRldGVjdGluZyBEb1MgdnVsbmVyYWJpbGl0aWVzOyBpdCBkZXRlY3RzIGluZm9ybWF0aW9uIGxlYWtzIGR1ZSB0byByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgdGhlIHJlYXNvbmluZyBpcyBjbGVhci4gVGhlIGNoZWNrIGlzIHByZXNlbnQgdG8gcHJvdGVjdCB0aGUgKmtlcm5lbCogYnVmZmVyLCBidXQgbm90IHRvIHByZXZlbnQgdGhlIERvUyBpdHNlbGYuICBUaGUgbGFyZ2UgYHVzaXplYCBwYXNzZWQgdG8gYGNvcHlfc3RydWN0X3RvX3VzZXJgIGlzIHRoZSBrZXkuIFRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byB6ZXJvIG91dCBhbiBlbm9ybW91cyBhbW91bnQgb2YgdXNlci1zcGFjZSBtZW1vcnkgaWYgYW4gYXR0YWNrZXIgcHJvdmlkZXMgYSB2ZXJ5IGxhcmdlIGluaXRpYWwgc2l6ZS4gIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSBjYW4gZm9jdXMgb24gc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzIGFuZCBzb2Z0IGxvY2t1cC9PT00gZGV0ZWN0aW9uIHRvIGNhdGNoIGFuZCBhZGRyZXNzIHRoaXMgdHlwZSBvZiBEb1MgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTYsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDExOjQzOjMxLjczNjM2MDAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gbGltaXQgYGhkci5zaXplYCB0byBgUEFHRV9TSVpFYCBiZWZvcmUgaXQgaXMgc2F2ZWQgYXMgYHVzaXplYC4gVGhlIGB1c2l6ZWAgdmFyaWFibGUgaXMgbGF0ZXIgcGFzc2VkIHRvIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGFzIHRoZSB1c2VyIGJ1ZmZlciBzaXplLiBJZiBgdXNpemVgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwgYnVmZmVyIHNpemUsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgemVybyBvdXQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB1c2VyIHNwYWNlLiBJZiBhIHVzZXIgcHJvdmlkZXMgYW4gZXh0cmVtZWx5IGxhcmdlIGBoZHIuc2l6ZWAsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgYXR0ZW1wdCB0byB6ZXJvIGEgbWFzc2l2ZSBhbW91bnQgb2YgdXNlciBtZW1vcnksIGxlYWRpbmcgdG8gYSBkZW5pYWwgb2Ygc2VydmljZSAoZS5nLiwgc29mdCBsb2NrdXAgb3IgZXhjZXNzaXZlIENQVSB1c2FnZSkuXFxuXFxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGUga2VybmVsIGJ1ZmZlciBgZGF0YWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KClgIGluIGBpb19xdWVyeSgpYCwgYW5kIHRoZSBleHRyYSBieXRlcyB3cml0dGVuIHRvIHVzZXIgc3BhY2UgYXJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IGBjb3B5X3N0cnVjdF90b191c2VyKClgLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIHNvZnQgbG9ja3VwIGRldGVjdG9ycywgZXRjLikgaXMgc3VmZmljaWVudCB0byBjYXRjaCBEb1MgaXNzdWVzIGxpa2UgdGhpcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gbGltaXQgYGhkci5zaXplYCB0byBgUEFHRV9TSVpFYCBiZWZvcmUgaXQgaXMgc2F2ZWQgYXMgYHVzaXplYC4gVGhlIGB1c2l6ZWAgdmFyaWFibGUgaXMgbGF0ZXIgcGFzc2VkIHRvIGBjb3B5X3N0cnVjdF90b191c2VyKClgIGFzIHRoZSB1c2VyIGJ1ZmZlciBzaXplLiBJZiBgdXNpemVgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwgYnVmZmVyIHNpemUsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgemVybyBvdXQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB1c2VyIHNwYWNlLiBJZiBhIHVzZXIgcHJvdmlkZXMgYW4gZXh0cmVtZWx5IGxhcmdlIGBoZHIuc2l6ZWAsIGBjb3B5X3N0cnVjdF90b191c2VyKClgIHdpbGwgYXR0ZW1wdCB0byB6ZXJvIGEgbWFzc2l2ZSBhbW91bnQgb2YgdXNlciBtZW1vcnksIGxlYWRpbmcgdG8gYSBkZW5pYWwgb2Ygc2VydmljZSAoZS5nLiwgc29mdCBsb2NrdXAgb3IgZXhjZXNzaXZlIENQVSB1c2FnZSkuXFxuXFxuVGhpcyBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGUga2VybmVsIGJ1ZmZlciBgZGF0YWAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBgbWVtc2V0KClgIGluIGBpb19xdWVyeSgpYCwgYW5kIHRoZSBleHRyYSBieXRlcyB3cml0dGVuIHRvIHVzZXIgc3BhY2UgYXJlIGV4cGxpY2l0bHkgemVyb2VkIGJ5IGBjb3B5X3N0cnVjdF90b191c2VyKClgLiBTaW5jZSB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIFN0YW5kYXJkIGZ1enppbmcgKHdpdGggS0FTQU4sIHNvZnQgbG9ja3VwIGRldGVjdG9ycywgZXRjLikgaXMgc3VmZmljaWVudCB0byBjYXRjaCBEb1MgaXNzdWVzIGxpa2UgdGhpcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[1] Phase: Succeeded StartedAt: 2026-08-21 11:43:43 +0000 UTC FinishedAt: 2026-08-21 11:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 11:43:43 +0000 UTC FinishedAt: 2026-08-21 11:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2] Phase: Succeeded StartedAt: 2026-08-21 11:43:43 +0000 UTC FinishedAt: 2026-08-21 15:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 11:43:43 +0000 UTC FinishedAt: 2026-08-21 15:24:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 11:43:43 +0000 UTC FinishedAt: 2026-08-21 11:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 11:43:43 +0000 UTC FinishedAt: 2026-08-21 11:43:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8s6qq/series-workflow8s6qq-convert-artifact-3307964343/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 11:43:53 +0000 UTC FinishedAt: 2026-08-21 12:00:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 11:43:53 +0000 UTC FinishedAt: 2026-08-21 12:00:41 +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:*6db51772-25f7-4efb-9674-fce495c81782,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-workflow8s6qq/series-workflow8s6qq-convert-artifact-3307964343/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": "34bb93d9-c37b-4af2-9b83-ef8e2a42418d", "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-workflow8s6qq/series-workflow8s6qq-build-action-3998279437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 11:43:53 +0000 UTC FinishedAt: 2026-08-21 12:00:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6db51772-25f7-4efb-9674-fce495c81782,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-workflow8s6qq/series-workflow8s6qq-convert-artifact-3307964343/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": "34bb93d9-c37b-4af2-9b83-ef8e2a42418d", "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-workflow8s6qq/series-workflow8s6qq-build-action-3998279437/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 12:00:41 +0000 UTC FinishedAt: 2026-08-21 12:00:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 12:00:41 +0000 UTC FinishedAt: 2026-08-21 12:00:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 12:00:41 +0000 UTC FinishedAt: 2026-08-21 12:00:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 12:00:41 +0000 UTC FinishedAt: 2026-08-21 12:00:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8s6qq/series-workflow8s6qq-convert-artifact-968165606/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 12:00:51 +0000 UTC FinishedAt: 2026-08-21 12:02:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 12:00:51 +0000 UTC FinishedAt: 2026-08-21 12:02:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34bb93d9-c37b-4af2-9b83-ef8e2a42418d,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-workflow8s6qq/series-workflow8s6qq-build-action-3998279437/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-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 12:02:56 +0000 UTC FinishedAt: 2026-08-21 12:02:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 12:02:56 +0000 UTC FinishedAt: 2026-08-21 12:02:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 12:02:56 +0000 UTC FinishedAt: 2026-08-21 12:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 12:02:56 +0000 UTC FinishedAt: 2026-08-21 12:19:49 +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:*6db51772-25f7-4efb-9674-fce495c81782,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-workflow8s6qq/series-workflow8s6qq-convert-artifact-968165606/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": "8c43bcdb-c828-4998-bc60-f8323b60b2c1", "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-workflow8s6qq/series-workflow8s6qq-build-action-713932458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 12:02:56 +0000 UTC FinishedAt: 2026-08-21 12:19:39 +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:*6db51772-25f7-4efb-9674-fce495c81782,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-workflow8s6qq/series-workflow8s6qq-convert-artifact-968165606/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": "8c43bcdb-c828-4998-bc60-f8323b60b2c1", "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-workflow8s6qq/series-workflow8s6qq-build-action-713932458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 12:19:49 +0000 UTC FinishedAt: 2026-08-21 12:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 12:19:49 +0000 UTC FinishedAt: 2026-08-21 12:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 12:19:49 +0000 UTC FinishedAt: 2026-08-21 12:22:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 12:19:49 +0000 UTC FinishedAt: 2026-08-21 12:21:50 +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:*8c43bcdb-c828-4998-bc60-f8323b60b2c1,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-workflow8s6qq/series-workflow8s6qq-build-action-713932458/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-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 12:22:00 +0000 UTC FinishedAt: 2026-08-21 15:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 12:22:00 +0000 UTC FinishedAt: 2026-08-21 15:24:30 +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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"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:*34bb93d9-c37b-4af2-9b83-ef8e2a42418d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c43bcdb-c828-4998-bc60-f8323b60b2c1,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-workflow8s6qq/series-workflow8s6qq-build-action-3998279437/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-workflow8s6qq/series-workflow8s6qq-build-action-713932458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 12:22:00 +0000 UTC FinishedAt: 2026-08-21 12:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 12:22:00 +0000 UTC FinishedAt: 2026-08-21 12:22:05 +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-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"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-workflow8s6qq/series-workflow8s6qq-convert-artifact-1120878635/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 12:22:00 +0000 UTC FinishedAt: 2026-08-21 12:22:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 12:22:00 +0000 UTC FinishedAt: 2026-08-21 12:22:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 12:22:00 +0000 UTC FinishedAt: 2026-08-21 12:22:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 12:22:10 +0000 UTC FinishedAt: 2026-08-21 15:24:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s6qq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_query"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"38e2156e-3ddc-4f39-8139-572d6ec5b652","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 12:22:10 +0000 UTC FinishedAt: 2026-08-21 15:24:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*34bb93d9-c37b-4af2-9b83-ef8e2a42418d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c43bcdb-c828-4998-bc60-f8323b60b2c1,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-workflow8s6qq/series-workflow8s6qq-build-action-3998279437/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-workflow8s6qq/series-workflow8s6qq-build-action-713932458/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-workflow8s6qq/series-workflow8s6qq-convert-artifact-1120878635/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,}