Name: series-workflow86kgb Phase: Succeeded StartedAt: 2026-08-15 23:08:34 +0000 UTC FinishedAt: 2026-08-16 03:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[0] Phase: Succeeded StartedAt: 2026-08-15 23:08:34 +0000 UTC FinishedAt: 2026-08-15 23:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[0].run-triage Phase: Succeeded StartedAt: 2026-08-15 23:08:34 +0000 UTC FinishedAt: 2026-08-15 23:50:00 +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": "3f3a6a16bbe8bde76532d9415438f8cdef439e5d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "EVENTFD", "FUTEX", "EPOLL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "3f3a6a16bbe8bde76532d9415438f8cdef439e5d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "EVENTFD", "FUTEX", "EPOLL" ], "series_id": "2b498d0f-13eb-428d-8e25-2cdb06eeda4f" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_eventfd_register", "io_futex_wait", "io_futexv_wait", "io_poll_add", "io_waitid" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fZnV0ZXh2X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fcG9sbF9hZGQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IGxvY2sgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MgdGhyb3VnaCBlcG9sbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDA0ZDc0NzRlZWZhMDg1MDY1OGM2OGIyMDkzMmQwZTZhZjUxMTIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMjM6NDg6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5pbmRleCBhMmM2MjNhNjdhMjUxLi5mNmU5MGNjNjRhMWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbkBAIC0yMCw2ICYjNDM7MjAsMTQgQEAgZW51bSB7XG4gXHQgKiBJdCYjMzk7cyBhbHNvIGlnbm9yZWQgdW5sZXNzIElPUklOR19TRVRVUF9ERUZFUl9UQVNLUlVOIGlzIHNldC5cbiBcdCAqL1xuIFx0SU9VX0ZfVFdRX0xBWllfV0FLRVx0XHRcdD0gMSxcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIsIHdoZXJlXG4mIzQzO1x0ICogYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGlzIGhlbGQuIFNpZ25hbGluZyB0aGUgQ1EgcmluZ1xuJiM0MztcdCAqIGV2ZW50ZmQgaW5saW5lIGZyb20gdGhlcmUgY2FuIHJlY3Vyc2UgYmFjayBpbnRvIHRoYXQgbG9jayB0aHJvdWdoXG4mIzQzO1x0ICogZXBvbGwsIHNvIHRoZSBldmVudGZkIHNpZ25hbCBtdXN0IGJlIGRlZmVycmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdElPVV9GX1RXUV9JTl9XQUtFXHRcdFx0PSAyLFxuIH07XG4gXG4gZW51bSBpb191cmluZ19jbWRfZmxhZ3Mge1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuYyBiL2lvX3VyaW5nL2V2ZW50ZmQuY1xuaW5kZXggZDY1NmNjMmEwYjliYS4uNjNmZTZlNWQ3OWJhZCAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZXZlbnRmZC5jXG5AQCAtNTEsOSAmIzQzOzUxLDkgQEAgc3RhdGljIHZvaWQgaW9fZXZlbnRmZF9kb19zaWduYWwoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gLypcbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgcHV0IHRoZSBldl9mZCByZWZlcmVuY2UsIGZhbHNlIGlmIG5vdC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBfX2lvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXG4mIzQzO3N0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZCwgYm9vbCBkZWZlcilcbiB7XG4tXHRpZiAoZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4mIzQzO1x0aWYgKCFkZWZlciBcdTAwMjZcdTAwMjYgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4gXHRcdGV2ZW50ZmRfc2lnbmFsX21hc2soZXZfZmQtXHUwMDNlY3FfZXZfZmQsIEVQT0xMX1VSSU5HX1dBS0UpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdGF0aWMgYm9vbCBpb19ldmVudGZkX3RyaWdnZXIoc3RydWN0IGlvX2V2X2ZkICpldl9mZClcbiBcdHJldHVybiAhZXZfZmQtXHUwMDNlZXZlbnRmZF9hc3luYyB8fCBpb193cV9jdXJyZW50X2lzX3dvcmtlcigpO1xuIH1cbiBcbi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudClcbiYjNDM7dm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpXG4ge1xuIFx0Ym9vbCBza2lwID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkO1xuQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2Vjb21wbGV0aW9uX2xvY2spO1xuIFx0fVxuIFxuLVx0aWYgKHNraXAgfHwgX19pb19ldmVudGZkX3NpZ25hbChldl9mZCkpXG4mIzQzO1x0aWYgKHNraXAgfHwgX19pb19ldmVudGZkX3NpZ25hbChldl9mZCwgZGVmZXIpKVxuIFx0XHRpb19ldmVudGZkX3B1dChldl9mZCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuaCBiL2lvX3VyaW5nL2V2ZW50ZmQuaFxuaW5kZXggNDAwZWRhNGE0MTY1YS4uZTk2NWQ4MGQ5ZmRjNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZXZlbnRmZC5oXG5AQCAtNSw0ICYjNDM7NSw0IEBAIGludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdHVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTtcbiBpbnQgaW9fZXZlbnRmZF91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcbiBcbi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCk7XG4mIzQzO3ZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKTtcbmRpZmYgLS1naXQgYS9pb191cmluZy9mdXRleC5jIGIvaW9fdXJpbmcvZnV0ZXguY1xuaW5kZXggZjBkODBhNDQ0ZjQ1ZS4uZWFlZTE0MjQyYTNhMyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2Z1dGV4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2Z1dGV4LmNcbkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2V2X2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleHZfY29tcGxldGU7XG4tXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xuJiM0MztcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gfVxuIFxuIGludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuQEAgLTIzNyw3ICYjNDM7MjM3LDcgQEAgc3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZV9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpXG4gXG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXhfY29tcGxldGU7XG4tXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xuJiM0MztcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gfVxuIFxuIGludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvX3VyaW5nLmMgYi9pb191cmluZy9pb191cmluZy5jXG5pbmRleCA0YzgzYTk0YjRiZGMzLi43NmYwNDllMjlhYTJlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvaW9fdXJpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuQEAgLTQ3NSw3ICYjNDM7NDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX09GRl9USU1FT1VUX1VTRUQpXG4gXHRcdGlvX2ZsdXNoX3RpbWVvdXRzKGN0eCk7XG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX0hBU19FVkZEKVxuLVx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUpO1xuJiM0MztcdFx0aW9fZXZlbnRmZF9zaWduYWwoY3R4LCB0cnVlLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX2NxX2xvY2soc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcG9sbC5jIGIvaW9fdXJpbmcvcG9sbC5jXG5pbmRleCAwMjA0YWZmZGMzMDhjLi41NDQ3YTdjMjRkY2U2IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9wb2xsLmNcbkBAIC0yMDgsOSAmIzQzOzIwOCw5IEBAIGVudW0ge1xuIFx0SU9VX1BPTExfUkVRVUVVRSA9IDQsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spXG4mIzQzO3N0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaywgdW5zaWduZWQgdHdfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgZmxhZ3MgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGZsYWdzID0gdHdfZmxhZ3M7XG4gXG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIG1hc2ssIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fcG9sbF90YXNrX2Z1bmM7XG5AQCAtMjE4LDE0ICYjNDM7MjE4LDE1IEBAIHN0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaylcbiBcdHRyYWNlX2lvX3VyaW5nX3Rhc2tfYWRkKHJlcSwgbWFzayk7XG4gXG4gXHRpZiAoIShyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX1BPTExfTk9fTEFaWSkpXG4tXHRcdGZsYWdzID0gSU9VX0ZfVFdRX0xBWllfV0FLRTtcbiYjNDM7XHRcdGZsYWdzIHw9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4gXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIHR3X2ZsYWdzKVxuIHtcbiBcdGlmIChpb19wb2xsX2dldF9vd25lcnNoaXAocmVxKSlcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMpO1xuJiM0MztcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMsIHR3X2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC0zNDQsNyAmIzQzOzM0NSw3IEBAIHZvaWQgaW9fcG9sbF90YXNrX2Z1bmMoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRpZiAocmV0ID09IElPVV9QT0xMX05PX0FDVElPTikge1xuIFx0XHRyZXR1cm47XG4gXHR9IGVsc2UgaWYgKHJldCA9PSBJT1VfUE9MTF9SRVFVRVVFKSB7XG4tXHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7XG4mIzQzO1x0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXHRpb19wb2xsX3JlbW92ZV9lbnRyaWVzKHJlcSk7XG5AQCAtMzgzLDcgJiM0MzszODQsNyBAQCBzdGF0aWMgdm9pZCBpb19wb2xsX2NhbmNlbF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4ge1xuIFx0aW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpO1xuIFx0Lyoga2ljayB0dywgd2hpY2ggc2hvdWxkIGNvbXBsZXRlIHRoZSByZXF1ZXN0ICovXG4tXHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbiYjNDM7XHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiB9XG4gXG4gI2RlZmluZSBJT19BU1lOQ19QT0xMX0NPTU1PTlx0KEVQT0xMT05FU0hPVCB8IEVQT0xMUFJJKVxuQEAgLTM5Miw3ICYjNDM7MzkzLDcgQEAgc3RhdGljIF9fY29sZCBpbnQgaW9fcG9sbGZyZWVfd2FrZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX3BvbGwgKnBvbGwpXG4ge1xuIFx0aW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpO1xuIFx0Lyogd2UgaGF2ZSB0byBraWNrIHR3IGluIGNhc2UgaXQmIzM5O3Mgbm90IGFscmVhZHkgKi9cbi1cdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xuJiM0MztcdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIElPVV9GX1RXUV9JTl9XQUtFKTtcbiBcdGlvX3BvbGxfcmVtb3ZlX3dhaXRxKHBvbGwpO1xuIFx0cmV0dXJuIDE7XG4gfVxuQEAgLTQzMCw3ICYjNDM7NDMxLDcgQEAgc3RhdGljIGludCBpb19wb2xsX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLFxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9TSU5HTEVfUE9MTDtcbiBcdFx0fVxuLVx0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2spO1xuJiM0MztcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNjE4LDcgJiM0Mzs2MTksNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcbiBcdGlmIChtYXNrIFx1MDAyNlx1MDAyNiAocG9sbC1cdTAwM2VldmVudHMgXHUwMDI2IEVQT0xMRVQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlvX3BvbGxfY2FuX2ZpbmlzaF9pbmxpbmUocmVxLCBpcHQpKSB7XG4tXHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgbWFzayk7XG4mIzQzO1x0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2ssIDApO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGlvX25hcGlfYWRkKHJlcSk7XG5AQCAtNjI5LDcgJiM0Mzs2MzAsNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0ICogcG9sbCB3YXMgd2FrZW4gdXAsIHF1ZXVlIHVwIGEgdHcsIGl0JiMzOTtsbCBkZWFsIHdpdGggaXQuXG4gXHRcdCAqL1xuIFx0XHRpZiAoYXRvbWljX2NtcHhjaGcoXHUwMDI2cmVxLVx1MDAzZXBvbGxfcmVmcywgMSwgMCkgIT0gMSlcbi1cdFx0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xuJiM0MztcdFx0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3R3LmMgYi9pb191cmluZy90dy5jXG5pbmRleCBhNGM4NzI4NzBkODFjLi5iZjRlNWFhNWMyZTdlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvdHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdHcuY1xuQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgdm9pZCBpb19yZXFfbG9jYWxfd29ya19hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGZsYWdzKVxuIFx0aWYgKG1wc2NxX3B1c2goXHUwMDI2Y3R4LVx1MDAzZXdvcmtfbGlzdCwgXHUwMDI2cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5ub2RlKSkge1xuIFx0XHRpb19jdHhfbWFya190YXNrcnVuKGN0eCk7XG4gXHRcdGlmIChkYXRhX3JhY2UoY3R4LVx1MDAzZWludF9mbGFncykgXHUwMDI2IElPX1JJTkdfRl9IQVNfRVZGRClcbi1cdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlKTtcbiYjNDM7XHRcdFx0aW9fZXZlbnRmZF9zaWduYWwoY3R4LCBmYWxzZSwgZmxhZ3MgXHUwMDI2IElPVV9GX1RXUV9JTl9XQUtFKTtcbiBcdH1cbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvd2FpdGlkLmMgYi9pb191cmluZy93YWl0aWQuY1xuaW5kZXggMzJmNjhmZDdmY2RkYS4uNzZhZjEyOWJhOGNhZCAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3dhaXRpZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy93YWl0aWQuY1xuQEAgLTI1Myw3ICYjNDM7MjUzLDcgQEAgc3RhdGljIGludCBpb193YWl0aWRfd2FpdChzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSxcbiBcdFx0cmV0dXJuIDE7XG4gXG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb193YWl0aWRfY2I7XG4tXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xuJiM0MztcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fZnV0ZXh2X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fcG9sbF9hZGQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZDA0ZDc0NzRlZWZhMDg1MDY1OGM2OGIyMDkzMmQwZTZhZjUxMTIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMjM6NDg6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKaW5kZXggYTJjNjIzYTY3YTI1MS4uZjZlOTBjYzY0YTFmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaApAQCAtMjAsNiAmIzQzOzIwLDE0IEBAIGVudW0gewogCSAqIEl0JiMzOTtzIGFsc28gaWdub3JlZCB1bmxlc3MgSU9SSU5HX1NFVFVQX0RFRkVSX1RBU0tSVU4gaXMgc2V0LgogCSAqLwogCUlPVV9GX1RXUV9MQVpZX1dBS0UJCQk9IDEsCiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldCB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlciwgd2hlcmUKJiM0MzsJICogYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGlzIGhlbGQuIFNpZ25hbGluZyB0aGUgQ1EgcmluZwomIzQzOwkgKiBldmVudGZkIGlubGluZSBmcm9tIHRoZXJlIGNhbiByZWN1cnNlIGJhY2sgaW50byB0aGF0IGxvY2sgdGhyb3VnaAomIzQzOwkgKiBlcG9sbCwgc28gdGhlIGV2ZW50ZmQgc2lnbmFsIG11c3QgYmUgZGVmZXJyZWQuCiYjNDM7CSAqLwomIzQzOwlJT1VfRl9UV1FfSU5fV0FLRQkJCT0gMiwKIH07CiAKIGVudW0gaW9fdXJpbmdfY21kX2ZsYWdzIHsKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuYyBiL2lvX3VyaW5nL2V2ZW50ZmQuYwppbmRleCBkNjU2Y2MyYTBiOWJhLi42M2ZlNmU1ZDc5YmFkIDEwMDY0NAotLS0gYS9pb191cmluZy9ldmVudGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZXZlbnRmZC5jCkBAIC01MSw5ICYjNDM7NTEsOSBAQCBzdGF0aWMgdm9pZCBpb19ldmVudGZkX2RvX3NpZ25hbChzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKIC8qCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgcHV0IHRoZSBldl9mZCByZWZlcmVuY2UsIGZhbHNlIGlmIG5vdC4KICAqLwotc3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKQomIzQzO3N0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZCwgYm9vbCBkZWZlcikKIHsKLQlpZiAoZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7CiYjNDM7CWlmICghZGVmZXIgJmFtcDsmYW1wOyBldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHsKIAkJZXZlbnRmZF9zaWduYWxfbWFzayhldl9mZC0mZ3Q7Y3FfZXZfZmQsIEVQT0xMX1VSSU5HX1dBS0UpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdGF0aWMgYm9vbCBpb19ldmVudGZkX3RyaWdnZXIoc3RydWN0IGlvX2V2X2ZkICpldl9mZCkKIAlyZXR1cm4gIWV2X2ZkLSZndDtldmVudGZkX2FzeW5jIHx8IGlvX3dxX2N1cnJlbnRfaXNfd29ya2VyKCk7CiB9CiAKLXZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50KQomIzQzO3ZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKQogewogCWJvb2wgc2tpcCA9IGZhbHNlOwogCXN0cnVjdCBpb19ldl9mZCAqZXZfZmQ7CkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50KQogCQlzcGluX3VubG9jaygmYW1wO2N0eC0mZ3Q7Y29tcGxldGlvbl9sb2NrKTsKIAl9CiAKLQlpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkKSkKJiM0MzsJaWYgKHNraXAgfHwgX19pb19ldmVudGZkX3NpZ25hbChldl9mZCwgZGVmZXIpKQogCQlpb19ldmVudGZkX3B1dChldl9mZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuaCBiL2lvX3VyaW5nL2V2ZW50ZmQuaAppbmRleCA0MDBlZGE0YTQxNjVhLi5lOTY1ZDgwZDlmZGM2IDEwMDY0NAotLS0gYS9pb191cmluZy9ldmVudGZkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZXZlbnRmZC5oCkBAIC01LDQgJiM0Mzs1LDQgQEAgaW50IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsCiAJCQl1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYyk7CiBpbnQgaW9fZXZlbnRmZF91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTsKIAotdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpOwomIzQzO3ZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKTsKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jCmluZGV4IGYwZDgwYTQ0NGY0NWUuLmVhZWUxNDI0MmEzYTMgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2Z1dGV4LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZnV0ZXguYwpAQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtldl9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpCiAKIAlpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApOwogCXJlcS0mZ3Q7aW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleHZfY29tcGxldGU7Ci0JaW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTsKJiM0MzsJX19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTsKIH0KIAogaW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCkBAIC0yMzcsNyAmIzQzOzIzNyw3IEBAIHN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2VfZm4oc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKQogCiAJaW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTsKIAlyZXEtJmd0O2lvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXhfY29tcGxldGU7Ci0JaW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTsKJiM0MzsJX19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTsKIH0KIAogaW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuYwppbmRleCA0YzgzYTk0YjRiZGMzLi43NmYwNDllMjlhYTJlIDEwMDY0NAotLS0gYS9pb191cmluZy9pb191cmluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvX3VyaW5nLmMKQEAgLTQ3NSw3ICYjNDM7NDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpCiAJaWYgKGN0eC0mZ3Q7aW50X2ZsYWdzICZhbXA7IElPX1JJTkdfRl9PRkZfVElNRU9VVF9VU0VEKQogCQlpb19mbHVzaF90aW1lb3V0cyhjdHgpOwogCWlmIChjdHgtJmd0O2ludF9mbGFncyAmYW1wOyBJT19SSU5HX0ZfSEFTX0VWRkQpCi0JCWlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgdHJ1ZSk7CiYjNDM7CQlpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUsIGZhbHNlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9fY3FfbG9jayhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCkKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3BvbGwuYyBiL2lvX3VyaW5nL3BvbGwuYwppbmRleCAwMjA0YWZmZGMzMDhjLi41NDQ3YTdjMjRkY2U2IDEwMDY0NAotLS0gYS9pb191cmluZy9wb2xsLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvcG9sbC5jCkBAIC0yMDgsOSAmIzQzOzIwOCw5IEBAIGVudW0gewogCUlPVV9QT0xMX1JFUVVFVUUgPSA0LAogfTsKIAotc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKQomIzQzO3N0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaywgdW5zaWduZWQgdHdfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgZmxhZ3MgPSAwOwomIzQzOwl1bnNpZ25lZCBmbGFncyA9IHR3X2ZsYWdzOwogCiAJaW9fcmVxX3NldF9yZXMocmVxLCBtYXNrLCAwKTsKIAlyZXEtJmd0O2lvX3Rhc2tfd29yay5mdW5jID0gaW9fcG9sbF90YXNrX2Z1bmM7CkBAIC0yMTgsMTQgJiM0MzsyMTgsMTUgQEAgc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKQogCXRyYWNlX2lvX3VyaW5nX3Rhc2tfYWRkKHJlcSwgbWFzayk7CiAKIAlpZiAoIShyZXEtJmd0O2ZsYWdzICZhbXA7IFJFUV9GX1BPTExfTk9fTEFaWSkpCi0JCWZsYWdzID0gSU9VX0ZfVFdRX0xBWllfV0FLRTsKJiM0MzsJCWZsYWdzIHw9IElPVV9GX1RXUV9MQVpZX1dBS0U7CiAJX19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGlvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJlcykKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzLAomIzQzOwkJCQkgICB1bnNpZ25lZCB0d19mbGFncykKIHsKIAlpZiAoaW9fcG9sbF9nZXRfb3duZXJzaGlwKHJlcSkpCi0JCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzKTsKJiM0MzsJCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzLCB0d19mbGFncyk7CiB9CiAKIC8qCkBAIC0zNDQsNyAmIzQzOzM0NSw3IEBAIHZvaWQgaW9fcG9sbF90YXNrX2Z1bmMoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJaWYgKHJldCA9PSBJT1VfUE9MTF9OT19BQ1RJT04pIHsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAocmV0ID09IElPVV9QT0xMX1JFUVVFVUUpIHsKLQkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTsKJiM0MzsJCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgMCk7CiAJCXJldHVybjsKIAl9CiAJaW9fcG9sbF9yZW1vdmVfZW50cmllcyhyZXEpOwpAQCAtMzgzLDcgJiM0MzszODQsNyBAQCBzdGF0aWMgdm9pZCBpb19wb2xsX2NhbmNlbF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpCiB7CiAJaW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpOwogCS8qIGtpY2sgdHcsIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB0aGUgcmVxdWVzdCAqLwotCWlvX3BvbGxfZXhlY3V0ZShyZXEsIDApOwomIzQzOwlpb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTsKIH0KIAogI2RlZmluZSBJT19BU1lOQ19QT0xMX0NPTU1PTgkoRVBPTExPTkVTSE9UIHwgRVBPTExQUkkpCkBAIC0zOTIsNyAmIzQzOzM5Myw3IEBAIHN0YXRpYyBfX2NvbGQgaW50IGlvX3BvbGxmcmVlX3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19wb2xsICpwb2xsKQogewogCWlvX3BvbGxfbWFya19jYW5jZWxsZWQocmVxKTsKIAkvKiB3ZSBoYXZlIHRvIGtpY2sgdHcgaW4gY2FzZSBpdCYjMzk7cyBub3QgYWxyZWFkeSAqLwotCWlvX3BvbGxfZXhlY3V0ZShyZXEsIDApOwomIzQzOwlpb19wb2xsX2V4ZWN1dGUocmVxLCAwLCBJT1VfRl9UV1FfSU5fV0FLRSk7CiAJaW9fcG9sbF9yZW1vdmVfd2FpdHEocG9sbCk7CiAJcmV0dXJuIDE7CiB9CkBAIC00MzAsNyAmIzQzOzQzMSw3IEBAIHN0YXRpYyBpbnQgaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywKIAkJCWVsc2UKIAkJCQlyZXEtJmd0O2ZsYWdzICZhbXA7PSB+UkVRX0ZfU0lOR0xFX1BPTEw7CiAJCX0KLQkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTsKJiM0MzsJCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgbWFzaywgSU9VX0ZfVFdRX0lOX1dBS0UpOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTYxOCw3ICYjNDM7NjE5LDcgQEAgc3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsCiAKIAlpZiAobWFzayAmYW1wOyZhbXA7IChwb2xsLSZndDtldmVudHMgJmFtcDsgRVBPTExFVCkgJmFtcDsmYW1wOwogCSAgICBpb19wb2xsX2Nhbl9maW5pc2hfaW5saW5lKHJlcSwgaXB0KSkgewotCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2spOwomIzQzOwkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCAwKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlvX25hcGlfYWRkKHJlcSk7CkBAIC02MjksNyAmIzQzOzYzMCw3IEBAIHN0YXRpYyBpbnQgX19pb19hcm1fcG9sbF9oYW5kbGVyKHN0cnVjdCBpb19raW9jYiAqcmVxLAogCQkgKiBwb2xsIHdhcyB3YWtlbiB1cCwgcXVldWUgdXAgYSB0dywgaXQmIzM5O2xsIGRlYWwgd2l0aCBpdC4KIAkJICovCiAJCWlmIChhdG9taWNfY21weGNoZygmYW1wO3JlcS0mZ3Q7cG9sbF9yZWZzLCAxLCAwKSAhPSAxKQotCQkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTsKJiM0MzsJCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3R3LmMgYi9pb191cmluZy90dy5jCmluZGV4IGE0Yzg3Mjg3MGQ4MWMuLmJmNGU1YWE1YzJlN2UgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3R3LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdHcuYwpAQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCB2b2lkIGlvX3JlcV9sb2NhbF93b3JrX2FkZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgZmxhZ3MpCiAJaWYgKG1wc2NxX3B1c2goJmFtcDtjdHgtJmd0O3dvcmtfbGlzdCwgJmFtcDtyZXEtJmd0O2lvX3Rhc2tfd29yay5ub2RlKSkgewogCQlpb19jdHhfbWFya190YXNrcnVuKGN0eCk7CiAJCWlmIChkYXRhX3JhY2UoY3R4LSZndDtpbnRfZmxhZ3MpICZhbXA7IElPX1JJTkdfRl9IQVNfRVZGRCkKLQkJCWlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgZmFsc2UpOwomIzQzOwkJCWlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgZmFsc2UsIGZsYWdzICZhbXA7IElPVV9GX1RXUV9JTl9XQUtFKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvd2FpdGlkLmMgYi9pb191cmluZy93YWl0aWQuYwppbmRleCAzMmY2OGZkN2ZjZGRhLi43NmFmMTI5YmE4Y2FkIDEwMDY0NAotLS0gYS9pb191cmluZy93YWl0aWQuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy93YWl0aWQuYwpAQCAtMjUzLDcgJiM0MzsyNTMsNyBAQCBzdGF0aWMgaW50IGlvX3dhaXRpZF93YWl0KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLAogCQlyZXR1cm4gMTsKIAogCXJlcS0mZ3Q7aW9fdGFza193b3JrLmZ1bmMgPSBpb193YWl0aWRfY2I7Ci0JaW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTsKJiM0MzsJX19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTsKIAlyZXR1cm4gMTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDg2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0b3VjaGluZyBgZXZlbnRmZGAsIGBmdXRleGAsIGBwb2xsYCwgYHR3YCwgYW5kIGB3YWl0aWRgLiBJdCYjMzk7cyBhZGRpbmcgdGhpcyBuZXcgZmxhZywgYElPVV9GX1RXUV9JTl9XQUtFYCwgd2hpY2ggbG9va3MgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIGEgdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgcG90ZW50aWFsIGxvY2sgcmVjdXJzaW9uIGlzc3VlcyB0aHJvdWdoIGVwb2xsLiBUaGlzIGlzIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNvIGl0JiMzOTtzIHdvcnRoIGEgY2xvc2VyIGxvb2suCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGFuZCBpZiBpdCYjMzk7cyBmdXp6LXdvcnRoeS4gR2l2ZW4gdGhhdCBgaW9fdXJpbmdgIGlzIGhlYXZpbHkgZnV6emVkIGluIGdlbmVyYWwsIGFuZCBJIGtub3cgaXQmIzM5O3MgYSBob3QgdGFyZ2V0IGZvciBidWcgaHVudGluZywgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzIGlzIGluZGVlZCBhIGZydWl0ZnVsIGFyZWEgdG8gZXhwbG9yZSB3aXRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLiBXZSBoYXZlOiBgaW9fZXZlbnRmZF9zaWduYWxgLCBgaW9fZnV0ZXh2X3ByZXBgICh0aG91Z2ggbm90IGRpcmVjdGx5IG1vZGlmaWVkLCB0aGUgcmVsYXRlZCBgaW9fZnV0ZXhfd2FrZXZfZm5gIGFuZCBgaW9fZnV0ZXhfd2FrZV9mbmAgYXJlKSwgYGlvX3BvbGxfZXhlY3V0ZWAgLyBgX19pb19wb2xsX2V4ZWN1dGVgLCBgaW9fcG9sbF93YWtlYCwgYGlvX3BvbGxmcmVlX3dha2VgLCBgaW9fcmVxX2xvY2FsX3dvcmtfYWRkYCwgYW5kIGBpb193YWl0aWRfd2FpdGAuCgpUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSWRlYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIGBpb19ldmVudGZkX3NpZ25hbGAgaXNuJiMzOTt0IGEgc3lzY2FsbCwgYnV0IGl0JiMzOTtzIGFuIEFQSSwgc28gaXQmIzM5O3MgYSBjYW5kaWRhdGUuIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIGxldCYjMzk7cyBwcmlvcml0aXplIHN5c2NhbGxzIGFuZCBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSByZWxhdGVkIGBpb191cmluZ2Agb3BlcmF0aW9uczogYElPUklOR19PUF9QT0xMX0FERGAsIGBJT1JJTkdfT1BfRlVURVhfV0FJVGAsIGBJT1JJTkdfT1BfRlVURVhfV0FLRWAsIGBJT1JJTkdfT1BfV0FJVElEYCwgYW5kIGBpb19ldmVudGZkX3JlZ2lzdGVyYC4gVGltZSB0byBncmVwIHRoZSBjb2RlIGZvciBpbnN0YW5jZXMgb2YgdGhlc2UgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcmVsZXZhbnQgY2FsbCBwYXRocyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2V2ZW50ZmQuYz03Nj12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCwgYm9vbCBkZWZlcilcbi0tXG5pb191cmluZy9ldmVudGZkLmMtMTE5LVxuaW9fdXJpbmcvZXZlbnRmZC5jOjEyMDppbnQgaW9fZXZlbnRmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbmlvX3VyaW5nL2V2ZW50ZmQuYy0xMjEtXHRcdFx0dW5zaWduZWQgaW50IGV2ZW50ZmRfYXN5bmMpXG4tLVxuaW9fdXJpbmcvZXZlbnRmZC5oPTM9c3RydWN0IGlvX3JpbmdfY3R4O1xuaW9fdXJpbmcvZXZlbnRmZC5oOjQ6aW50IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXG5pb191cmluZy9ldmVudGZkLmgtNS1cdFx0XHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMxMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKlByb2JpbmcgdGhlIEkvTyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBzeXN0ZW0gY2FsbHMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlc2Uga2VybmVsIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBJL08gc3Vic3lzdGVtLiBgaW9fZnV0ZXh2X3dhaXRgIGFuZCBgaW9fZnV0ZXh2X3dha2VgIGFyZSBpbW1lZGlhdGVseSBpbnRyaWd1aW5nLiBUaGV5IHN0cm9uZ2x5IHN1Z2dlc3QgYSBmdXRleC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBmb3IgSS9PIGNvbXBsZXRpb24gc2lnbmFsaW5nLCBsaWtlbHkgbGV2ZXJhZ2luZyB2ZWN0b3JpemVkIG9wZXJhdGlvbnMgZm9yIGVmZmljaWVuY3kuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gdW5kZXJzdGFuZCwgZXNwZWNpYWxseSBpbiB0ZXJtcyBvZiBjb25jdXJyZW5jeSBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZnV0ZXggb3BlcmF0aW9ucyB0aWUgaW50byB0aGUgb3ZlcmFsbCBldmVudCBsb29wLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGlvX3BvbGxfYWRkYC4gVGhpcyBzY3JlYW1zICYjMzQ7ZXBvbGwtbGlrZSYjMzQ7IG9yICYjMzQ7a3F1ZXVlLWxpa2UmIzM0OyBmdW5jdGlvbmFsaXR5LCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpzcGVjaWZpY3MqIG9mIGl0cyBpbnRlcmZhY2UuIElzIGl0IHJlZ2lzdGVyaW5nIGZpbGUgZGVzY3JpcHRvcnMsIEkvTyBjb21wbGV0aW9uIHBvcnRzLCBvciBzb21ldGhpbmcgbW9yZSBhYnN0cmFjdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2NhbGFiaWxpdHkgYW5kIHRoZSB0eXBlcyBvZiBJL08gb3BlcmF0aW9ucyBpdCBzdXBwb3J0cz8KCkZpbmFsbHksIGBpb193YWl0aWRfcHJlcGAgYW5kIGBpb193YWl0aWRgLiBUaGVzZSBhcmUgcG9pbnRpbmcgdG93YXJkcyBhc3luY2hyb25vdXMgSS9PIHdpdGggcHJvY2Vzcy90aHJlYWQgSUQgbWFuYWdlbWVudCBhbmQgSS9PIGNvbXBsZXRpb24gc2lnbmFsaW5nLiBJIG5lZWQgdG8gYXNjZXJ0YWluIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIEFyZSB0aGV5IHVzZWQgZm9yIHdhaXRpbmcgb24gY2hpbGRyZW4gcHJvY2Vzc2VzJiMzOTsgSS9PIGNvbXBsZXRpb24sIG9yIGRvIHRoZXkgb2ZmZXIgbW9yZSBnZW5lcmFsaXplZCBzaWduYWxpbmcgY2FwYWJpbGl0aWVzLCBzaW1pbGFyIHRvIGB3YWl0aWRgIGJ1dCBzdHJlYW1saW5lZCBmb3IgSS9PIGNvbnRleHRzPyBJcyB0aGVyZSBvdmVybGFwIHdpdGggYGlvX3BvbGxfYWRkYCBvciBhcmUgdGhleSBpbmRlcGVuZGVudCBtZWNoYW5pc21zPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcnBsYXkgaGVyZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRob3JvdWdobHkgdG8gZGV2ZWxvcCBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiB0aGVpciBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBpb19mdXRleHZfd2FpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9mdXRleC5jPTIzMD1zdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcbi0tXG5pb191cmluZy9mdXRleC5jLTI0Mi1cbmlvX3VyaW5nL2Z1dGV4LmM6MjQzOmludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvZnV0ZXguYy0yNDQte1xuLS1cbmlvX3VyaW5nL2Z1dGV4Lmg9OD1pbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6OTppbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9mdXRleC5oLTEwLWludCBpb19mdXRleF93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGlvX3dhaXRpZGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBjdXJyZW50IHNpdHVhdGlvbiBkZW1hbmRzIGEgZGVlcGVyIGxvb2ssIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRvIHZlcmlmeSBgaW9fd2FpdGlkYC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gaGFuZGxpbmcgcHJvY2VzcyBJL08gYW5kIGl0cyBiZWhhdmlvciB3aWxsIGJlIGNlbnRyYWwgdG8gcmVzb2x2aW5nIHRoZSBpc3N1ZSBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIGhvdyBgaW9fd2FpdGlkYCBpcyBmdW5jdGlvbmluZ+KAlG9yIG1hbGZ1bmN0aW9uaW5n4oCUaXMgYSBwcmltYXJ5IGludmVzdGlnYXRpdmUgYXZlbnVlLiBXaGF0IGlzIHRoZSBzdGF0ZSBvZiBgaW9fd2FpdGlkYD8gQXJlIHRoZXJlIHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlcz8gV2hhdCBhcmUgdGhlIGFyZ3VtZW50cyBiZWluZyBwYXNzZWQgdG8gaXQ/IFRoZSBudWFuY2VzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UgYXJlIGVzc2VudGlhbCBkZXRhaWxzIHRvIGVzdGFibGlzaCBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBpb193YWl0aWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvd2FpdGlkLmM9MTQ2PXN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbi0tXG5pb191cmluZy93YWl0aWQuYy0xNjYtXG5pb191cmluZy93YWl0aWQuYzoxNjc6aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy93YWl0aWQuYy0xNjgtXHRcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jPTIzNj1zdGF0aWMgaW50IGlvX3dhaXRpZF93YWl0KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTI1OS1cbmlvX3VyaW5nL3dhaXRpZC5jOjI2MDppbnQgaW9fd2FpdGlkX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbmlvX3VyaW5nL3dhaXRpZC5jLTI2MS17XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtMjgxLVxuaW9fdXJpbmcvd2FpdGlkLmM6MjgyOmludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL3dhaXRpZC5jLTI4My17XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmg9NT1zdHJ1Y3QgaW9fd2FpdGlkX2FzeW5jIHtcbi0tXG5pb191cmluZy93YWl0aWQuaC05LVxuaW9fdXJpbmcvd2FpdGlkLmg6MTA6aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvd2FpdGlkLmg6MTE6aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL3dhaXRpZC5oOjEyOmludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuaW9fdXJpbmcvd2FpdGlkLmgtMTMtXHRcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9fcG9sbF9hZGRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGlvX3BvbGxfYWRkYC4mIzM0OyBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBJdCBtZWFucyBJJiMzOTttIG5vdCBqdXN0IGdsb3NzaW5nIG92ZXIgdGhpbmdzOyBJJiMzOTttIGdvaW5nIHRvIGFjdHVhbGx5ICpleGFtaW5lKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlvX3BvbGxfYWRkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcywgaG93IGl0IGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBJL08gcG9sbGluZyBmcmFtZXdvcmssIGFuZCB3aGF0IHBvdGVudGlhbCBnb3RjaGFzIG1pZ2h0IGV4aXN0LiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yOgoKKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBkb2VzIGl0IGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgcG9sbGluZyBzdHJ1Y3R1cmVzPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBsdXJraW5nPyBNdXRleGVzLCByZWFkL3dyaXRlIGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucy4uLiBJIG5lZWQgdG8gc2VlIHRoZSBkZXRhaWxzLgoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIERvZXMgaXQgcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZm9yIHRoZSBwb2xsIGVudHJpZXM/IExlYWtzIGFyZSB1bmFjY2VwdGFibGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgZG91YmxlLWZyZWVzIG9yIHVzZS1hZnRlci1mcmVlcy4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgY2hlY2tpbmc/IERvZXMgaXQgaGFuZGxlIGludmFsaWQgZmlsZSBkZXNjcmlwdG9ycywgb3V0LW9mLW1lbW9yeSBjb25kaXRpb25zLCBhbmQgb3RoZXIgZWRnZSBjYXNlcyBncmFjZWZ1bGx5PyBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgcHJvcGFnYXRpb24/CiogICAqKlBlcmZvcm1hbmNlOioqIFdoYXQgaXMgdGhlIG92ZXJoZWFkIG9mIHRoaXMgZnVuY3Rpb24/IERvZXMgaXQgc2NhbGUgd2VsbCB1bmRlciBoZWF2eSBsb2FkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcz8gQW1vcnRpemVkIGNvbXBsZXhpdHkgaXMgaW1wb3J0YW50LgoqICAgKipJbnRlZ3JhdGlvbjoqKiBIb3cgZG9lcyB0aGlzIHJlbGF0ZSB0byB0aGluZ3MgbGlrZSBgaW9fcG9sbF9yZW1vdmVgIGFuZCB0aGUgY29yZSBldmVudCBsb29wPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEkgd2lsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgdGhhdCBhZmZlY3QgbG9jayBvcmRlcmluZywgYW5kIHRoZSB1c2FnZSBvZiBnbG9iYWwgdmFyaWFibGVzLgoqICAgKipQb3J0YWJpbGl0eToqKiBJcyBpdCB3cml0dGVuIGluIGEgd2F5IHRoYXQgd2lsbCB3b3JrIHdpdGggb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXM/IEkgd2lsbCBiZSB0aGlua2luZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHN5c3RlbSBjYWxscywgYW5kIGhvdyB0aGV5IG1heSBiZSBpbXBsZW1lbnRlZCBhY3Jvc3MgZGlmZmVyZW50IE9Tcy4KClVsdGltYXRlbHksIEkmIzM5O20gaG9waW5nIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyB3ZWxsLWRlc2lnbmVkLCBlZmZpY2llbnQsIGFuZCByb2J1c3QuIEl0JiMzOTtzIHRoZSBidWlsZGluZyBibG9jayBmb3IgcmVsaWFibGUgSS9PLCBzbyBJJiMzOTttIHB1dHRpbmcgaXQgdW5kZXIgdGhlIG1pY3Jvc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWQpIGlvX3BvbGxfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3BvbGwuYz04NTQ9aW50IGlvX3BvbGxfcmVtb3ZlX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9wb2xsLmMtODgzLVxuaW9fdXJpbmcvcG9sbC5jOjg4NDppbnQgaW9fcG9sbF9hZGRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvcG9sbC5jLTg4NS17XG4tLVxuaW9fdXJpbmcvcG9sbC5jLTkwMC1cbmlvX3VyaW5nL3BvbGwuYzo5MDE6aW50IGlvX3BvbGxfYWRkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9wb2xsLmMtOTAyLXtcbi0tXG5pb191cmluZy9wb2xsLmg9MzA9c3RhdGljIGlubGluZSB2b2lkIGlvX3BvbGxfbXVsdGlzaG90X3JldHJ5KHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL3BvbGwuaC0zNC1cbmlvX3VyaW5nL3BvbGwuaDozNTppbnQgaW9fcG9sbF9hZGRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL3BvbGwuaDozNjppbnQgaW9fcG9sbF9hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9wb2xsLmgtMzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpb191cmluZ2AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBhIHRyaWNreSByZWN1cnNpb24gaXNzdWUgd2l0aGluIGBpb191cmluZ2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBldmVudGZkIHNpZ25hbGluZyBpbnRlcmFjdHMgd2l0aCB3YWl0cXVldWUgd2FrZXVwcy4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCB0aGUgc2lnbmFsaW5nIGZyb20gZGl2aW5nIGJhY2sgaW50byB0aGUgd2FpdHF1ZXVlIGxvY2ssIHBvdGVudGlhbGx5IHRocm91Z2ggbWVjaGFuaXNtcyBsaWtlIGBlcG9sbGAuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgdGFyZ2V0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkaXJlY3RseTogYGlvX2V2ZW50ZmRfc2lnbmFsYCwgYW5kIHRoZSB3YWl0cXVldWUgY2FsbGJhY2sgZnVuY3Rpb25zOiBgaW9fZnV0ZXhfd2FrZXZfZm5gLCBgaW9fZnV0ZXhfd2FrZV9mbmAsIGBpb19wb2xsX3dha2VgLCBgaW9fcG9sbGZyZWVfd2FrZWAsIGBpb193YWl0aWRfd2FpdGAsIGFuZCBhbHNvIGBpb19yZXFfbG9jYWxfd29ya19hZGRgLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzZW5zZSBvZiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4KCkVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIHByb2JsZW1hdGljIHdha2V1cHMgYXJlIHRpZWQgdG8gYGlvX2Z1dGV4dl93YWl0YCAvIGBpb19mdXRleF93YWl0YCwgYGlvX3BvbGxfYWRkYCwgYW5kIGBpb193YWl0aWRgLCBwbHVzLCBvZiBjb3Vyc2UsIHRoZSBgaW9fZXZlbnRmZF9yZWdpc3RlcmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgdGhlc2UgYXJlIGFsbCBwb2ludHMgd2hlcmUgd2UgbWlnaHQgZXhwZWN0IHRvIGhhdmUgYSB3YWl0cXVldWUgZW50cnkgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgYSB1c2VyLXNwYWNlIGV2ZW50LgoKSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgaW9fZnV0ZXhfd2FpdGAgYW5kIHNlZSBob3cgdGhpcyBwYXRjaCBhY3R1YWxseSBtb2RpZmllcyB0aGF0LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGUgZGVmZXJyZWQgc2lnbmFsaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBpb19mdXRleF93YWl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2Z1dGV4LmM9MTI3PWludCBpb19mdXRleF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0xNTQtXG5pb191cmluZy9mdXRleC5jOjE1NTppbnQgaW9fZnV0ZXhfd2FpdF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9mdXRleC5jLTE1Ni17XG4tLVxuaW9fdXJpbmcvZnV0ZXguYz0yNDM9aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yOTUtXG5pb191cmluZy9mdXRleC5jOjI5NjppbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvZnV0ZXguYy0yOTcte1xuLS1cbmlvX3VyaW5nL2Z1dGV4Lmg9NT1pbnQgaW9fZnV0ZXhfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6NjppbnQgaW9fZnV0ZXhfd2FpdF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvZnV0ZXguaC03LWludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6ODppbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2Z1dGV4LmgtOS1pbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MTYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJT19VcmluZyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBpb191cmluZyBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBjb25maWcgZmxhZyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXMgZGVmaW5pdGVseSBgSU9fVVJJTkdgLiBCdXQsIGtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyBvZnRlbiBnbywgaXQmIzM5O3MgbmV2ZXIgdGhhdCBzaW1wbGUsIHJpZ2h0PyBNeSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBzdWJ0bHkgbGlua2VkIGZsYWdzIG9yIHNldHRpbmdzIHRoYXQgYXJlIGVxdWFsbHkgY3JpdGljYWwuIEEgY29tcHJlaGVuc2l2ZSByZXZpZXcgaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgc29tZXRoaW5nIHBvdGVudGlhbGx5IHZpdGFsIGZvciBmdWxsIGFuZCBwcm9wZXIgZW5hYmxlbWVudC4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIHVwIGZyb250IGFuZCBhdm9pZCBzb21lIG5hc3R5IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBpcyBsdXJraW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTQtXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzYtXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTkzOC1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTItXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcbmlvX3VyaW5nL0tjb25maWctMTQtXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL0tjb25maWctMTktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MzMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEkvTyBSaW5nIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgYGlvX3VyaW5nYCByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc2VlIGhvdyBhY2Nlc3NpYmxlIHRoZXkgYXJlLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gYGlvX2V2ZW50ZmRfcmVnaXN0ZXJgLCBgaW9fZnV0ZXhfd2FpdGAsIGBpb19mdXRleHZfd2FpdGAsIGBpb19wb2xsX2FkZGAsIGFuZCBgaW9fd2FpdGlkYC4gRmlyc3QsIEkgd2FudCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWN0dWFsbHkgZW50cnlwb2ludHMuCgpBbHJpZ2h0LCBnb29kLCBgaW9fZXZlbnRmZF9yZWdpc3RlcmAgaXMgaW5kZWVkIHJlYWNoYWJsZTsgaXQgaG9va3MgZGlyZWN0bHkgaW50byBgSU9SSU5HX1JFR0lTVEVSX0VWRU5URkRgLiBOZXh0LCBgaW9fZnV0ZXhfd2FpdGAgaXMgdGhlcmUsIGFzIGEgdmFsaWQgZW50cnlwb2ludCBmb3IgYElPUklOR19PUF9GVVRFWF9XQUlUYC4gQW5kIHRoZSB2ZWN0b3IgdmVyc2lvbiwgYGlvX2Z1dGV4dl93YWl0YCwgaXMgYWxzbyBhbiBBUEkgZW50cnlwb2ludCB0aWVkIHRvIGBJT1JJTkdfT1BfRlVURVhfV0FJVFZgLiBNb3Zpbmcgb24sIGBpb19wb2xsX2FkZGAgaXMgYWxzbyByZWFjaGFibGUgdmlhIGBJT1JJTkdfT1BfUE9MTF9BRERgLiBGaW5hbGx5LCBgaW9fd2FpdGlkYCBpcyBhbHNvIGFuIEFQSSBlbnRyeXBvaW50IGFzc29jaWF0ZWQgd2l0aCBgSU9SSU5HX09QX1dBSVRJRGAuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBGb3J0dW5hdGVseSwgYElPX1VSSU5HYCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gdGhhdCYjMzk7cyBhIHBsdXMuIGBFUE9MTGAgaXMgYWxzbyB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgYEZVVEVYYCBhcyB3ZWxsLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgbWFqb3JpdHkgb2YgcG90ZW50aWFsIHByZS1yZXF1aXNpdGVzLgoKSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBgaW9fZXZlbnRmZF9yZWdpc3RlcmAsIGxldCYjMzk7cyBjaGVjayBpdCBvdXQgaW4gYGlvX3VyaW5nL2V2ZW50ZmQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2V2ZW50ZmRfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvZXZlbnRmZC5jPTc2PXZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKVxuLS1cbmlvX3VyaW5nL2V2ZW50ZmQuYy0xMTktXG5pb191cmluZy9ldmVudGZkLmM6MTIwOmludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuaW9fdXJpbmcvZXZlbnRmZC5jLTEyMS1cdFx0XHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYylcbi0tXG5pb191cmluZy9ldmVudGZkLmg9Mz1zdHJ1Y3QgaW9fcmluZ19jdHg7XG5pb191cmluZy9ldmVudGZkLmg6NDppbnQgaW9fZXZlbnRmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbmlvX3VyaW5nL2V2ZW50ZmQuaC01LVx0XHRcdHVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTtcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTc1MD1zdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTgwNC1cdFx0XHRicmVhaztcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6ODA1Olx0XHRyZXQgPSBpb19ldmVudGZkX3JlZ2lzdGVyKGN0eCwgYXJnLCAwKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODA2LVx0XHRicmVhaztcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTgxMC1cdFx0XHRicmVhaztcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6ODExOlx0XHRyZXQgPSBpb19ldmVudGZkX3JlZ2lzdGVyKGN0eCwgYXJnLCAxKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODEyLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBEZWZlcnJlZCBFdmVudGZkIFNpZ25hbGluZyBpbiBpb191cmluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIGB0YXNrX3dvcmtgIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyIGhhcyB0aGUgcG90ZW50aWFsIHRvIGltcGFjdCBjb3JlIGlvX3VyaW5nIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXRleCB3YWl0LCBwb2xsLCBhbmQgd2FpdGlkIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIHRoZXkmIzM5O3JlIGludGVyYWN0aW5nIHdpdGggZXZlbnRmZCBub3RpZmljYXRpb25zLiBUaGVzZSBhcmUgY3JpdGljYWwgYXJlYXMgd2hlcmUgZGVmZXJyZWQgc2lnbmFsaW5nIGNvdWxkIGludHJvZHVjZSByZWdyZXNzaW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBldmVuIG5hc3R5IGRlYWRsb2Nrcy4KCk15IHBsYW4gaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGVzZSBpb191cmluZyBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBpb19ldmVudGZkX3JlZ2lzdGVyYCwgYGlvX2Z1dGV4X3dhaXRgLCBgaW9fZnV0ZXh2X3dhaXRgLCBgaW9fcG9sbF9hZGRgLCBhbmQgYGlvX3dhaXRpZGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNvdmVyYWdlIG9mIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLgoKSSYjMzk7bGwgZW5hYmxlIHRoZSBmb2xsb3dpbmcga2VybmVsIGNvbmZpZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIG15IGZ1enppbmcgY2FtcGFpZ246IGBJT19VUklOR2AsIGBFVkVOVEZEYCwgYEZVVEVYYCwgYW5kIGBFUE9MTGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCByaWdodCBjb25maWcgbmFtZXMgdGhvdWdoLiBJIGNhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVWRU5URkQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4Nzg9Y29uZmlnIFRJTUVSRkRcbi0tXG5pbml0L0tjb25maWctMTg4Ni1cbmluaXQvS2NvbmZpZzoxODg3OmNvbmZpZyBFVkVOVEZEXG5pbml0L0tjb25maWctMTg4OC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVBPTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcbi0tXG5pbml0L0tjb25maWctMTg2MS1cbmluaXQvS2NvbmZpZzoxODYyOmNvbmZpZyBFUE9MTFxuaW5pdC9LY29uZmlnLTE4NjMtXHRib29sIFwmIzM0O0VuYWJsZSBldmVudHBvbGwgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlVURVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4MjQ9Y29uZmlnIEJBU0VfU01BTExcbi0tXG5pbml0L0tjb25maWctMTgzMC1cbmluaXQvS2NvbmZpZzoxODMxOmNvbmZpZyBGVVRFWFxuaW5pdC9LY29uZmlnLTE4MzItXHRib29sIFwmIzM0O0VuYWJsZSBmdXRleCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZy0xODQwLVxuaW5pdC9LY29uZmlnOjE4NDE6Y29uZmlnIEZVVEVYX1BJXG5pbml0L0tjb25maWctMTg0Mi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTg0NS1cbmluaXQvS2NvbmZpZzoxODQ2OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODQ3LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xODUwLVxuaW5pdC9LY29uZmlnOjE4NTE6Y29uZmlnIEZVVEVYX01QT0xcbmluaXQvS2NvbmZpZy0xODUyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZz0xODU2PWNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbi0tXG5pbml0L0tjb25maWctMTg1OC1cbmluaXQvS2NvbmZpZzoxODU5OmNvbmZpZyBGVVRFWF9ST0JVU1RfVU5MT0NLXG5pbml0L0tjb25maWctMTg2MC1cdGRlZl9ib29sIEZVVEVYIFx1MDAyNlx1MDAyNiBIQVZFX0dFTkVSSUNfVkRTTyBcdTAwMjZcdTAwMjYgR0VORVJJQ19JUlFfRU5UUlkgXHUwMDI2XHUwMDI2IFJTRVEgXHUwMDI2XHUwMDI2IEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3NAoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIG1ldGljdWxvdXNseSByZXZpZXdlZCB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIHllcywgZXZlcnl0aGluZyBjaGVja3Mgb3V0IGZyb20gbXkgcGVyc3BlY3RpdmUuIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUsIGJ1dCBJIGFsd2F5cyB0YWtlIGEgc2Vjb25kIGxvb2suIExldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgb3BlcmF0aW9ucyBpbiBwbGF5LgoKUmlnaHQsIHRoZSBwYXRjaCBpcyBtYWtpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9uczogYGlvX2Z1dGV4X3dha2V2X2ZuYCBpcyB0cmFuc2l0aW9uaW5nIHRvIGBpb19mdXRleHZfd2FpdGAsIGBpb19mdXRleF93YWtlX2ZuYCBpcyBiZWNvbWluZyBgaW9fZnV0ZXhfd2FpdGAsIGBpb19wb2xsX3dha2VgIGlzIGV2b2x2aW5nIGludG8gYGlvX3BvbGxfYWRkYCwgYW5kIGBpb19wb2xsZnJlZV93YWtlYCBpcyBhbHNvIGJlY29taW5nIGBpb19wb2xsX2FkZGAgYW5kIGZpbmFsbHkgYGlvX3dhaXRpZF93YWl0YCBpcyBjaGFuZ2luZyBpbnRvIGBpb193YWl0aWRgLiBUaGF0IGNvbmZpcm1zIHRoYXQgdGhlIGNydWNpYWwgc3ltYm9scyBhcmUgYmVpbmcgYXBwcm9wcmlhdGVseSB1cGRhdGVkIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcuCgpXaXRoIHRoYXQgY29uZmlybWF0aW9uLCBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fZnV0ZXh2X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fcG9sbF9hZGQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fZnV0ZXh2X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fcG9sbF9hZGQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IGxvY2sgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MgdGhyb3VnaCBlcG9sbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJkMDRkNzQ3NGVlZmEwODUwNjU4YzY4YjIwOTMyZDBlNmFmNTExMjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAyMzo0ODoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaAppbmRleCBhMmM2MjNhNjdhMjUxLi5mNmU5MGNjNjRhMWYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCkBAIC0yMCw2ICYjNDM7MjAsMTQgQEAgZW51bSB7CiAJICogSXQmIzM5O3MgYWxzbyBpZ25vcmVkIHVubGVzcyBJT1JJTkdfU0VUVVBfREVGRVJfVEFTS1JVTiBpcyBzZXQuCiAJICovCiAJSU9VX0ZfVFdRX0xBWllfV0FLRQkJCT0gMSwKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0IHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLCB3aGVyZQomIzQzOwkgKiBhbiBhcmJpdHJhcnkgcHJvdmlkZXIgd2FpdHF1ZXVlIGxvY2sgaXMgaGVsZC4gU2lnbmFsaW5nIHRoZSBDUSByaW5nCiYjNDM7CSAqIGV2ZW50ZmQgaW5saW5lIGZyb20gdGhlcmUgY2FuIHJlY3Vyc2UgYmFjayBpbnRvIHRoYXQgbG9jayB0aHJvdWdoCiYjNDM7CSAqIGVwb2xsLCBzbyB0aGUgZXZlbnRmZCBzaWduYWwgbXVzdCBiZSBkZWZlcnJlZC4KJiM0MzsJICovCiYjNDM7CUlPVV9GX1RXUV9JTl9XQUtFCQkJPSAyLAogfTsKIAogZW51bSBpb191cmluZ19jbWRfZmxhZ3MgewpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZXZlbnRmZC5jIGIvaW9fdXJpbmcvZXZlbnRmZC5jCmluZGV4IGQ2NTZjYzJhMGI5YmEuLjYzZmU2ZTVkNzliYWQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9ldmVudGZkLmMKQEAgLTUxLDkgJiM0Mzs1MSw5IEBAIHN0YXRpYyB2b2lkIGlvX2V2ZW50ZmRfZG9fc2lnbmFsKHN0cnVjdCByY3VfaGVhZCAqcmN1KQogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FsbGVyIHNob3VsZCBwdXQgdGhlIGV2X2ZkIHJlZmVyZW5jZSwgZmFsc2UgaWYgbm90LgogICovCi1zdGF0aWMgYm9vbCBfX2lvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpCiYjNDM7c3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkLCBib29sIGRlZmVyKQogewotCWlmIChldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHsKJiM0MzsJaWYgKCFkZWZlciAmYW1wOyZhbXA7IGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkgewogCQlldmVudGZkX3NpZ25hbF9tYXNrKGV2X2ZkLSZndDtjcV9ldl9mZCwgRVBPTExfVVJJTkdfV0FLRSk7CiAJCXJldHVybiB0cnVlOwogCX0KQEAgLTczLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBib29sIGlvX2V2ZW50ZmRfdHJpZ2dlcihzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKQogCXJldHVybiAhZXZfZmQtJmd0O2V2ZW50ZmRfYXN5bmMgfHwgaW9fd3FfY3VycmVudF9pc193b3JrZXIoKTsKIH0KIAotdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpCiYjNDM7dm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpCiB7CiAJYm9vbCBza2lwID0gZmFsc2U7CiAJc3RydWN0IGlvX2V2X2ZkICpldl9mZDsKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpCiAJCXNwaW5fdW5sb2NrKCZhbXA7Y3R4LSZndDtjb21wbGV0aW9uX2xvY2spOwogCX0KIAotCWlmIChza2lwIHx8IF9faW9fZXZlbnRmZF9zaWduYWwoZXZfZmQpKQomIzQzOwlpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkLCBkZWZlcikpCiAJCWlvX2V2ZW50ZmRfcHV0KGV2X2ZkKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZXZlbnRmZC5oIGIvaW9fdXJpbmcvZXZlbnRmZC5oCmluZGV4IDQwMGVkYTRhNDE2NWEuLmU5NjVkODBkOWZkYzYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuaAomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9ldmVudGZkLmgKQEAgLTUsNCAmIzQzOzUsNCBAQCBpbnQgaW9fZXZlbnRmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZywKIAkJCXVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTsKIGludCBpb19ldmVudGZkX3VucmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpOwogCi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCk7CiYjNDM7dm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXguYyBiL2lvX3VyaW5nL2Z1dGV4LmMKaW5kZXggZjBkODBhNDQ0ZjQ1ZS4uZWFlZTE0MjQyYTNhMyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvZnV0ZXguYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9mdXRleC5jCkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2V2X2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSkKIAogCWlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7CiAJcmVxLSZndDtpb190YXNrX3dvcmsuZnVuYyA9IGlvX2Z1dGV4dl9jb21wbGV0ZTsKLQlpb19yZXFfdGFza193b3JrX2FkZChyZXEpOwomIzQzOwlfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpOwogfQogCiBpbnQgaW9fZnV0ZXh2X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKQEAgLTIzNyw3ICYjNDM7MjM3LDcgQEAgc3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZV9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpCiAKIAlpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApOwogCXJlcS0mZ3Q7aW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTsKLQlpb19yZXFfdGFza193b3JrX2FkZChyZXEpOwomIzQzOwlfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpOwogfQogCiBpbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvX3VyaW5nLmMgYi9pb191cmluZy9pb191cmluZy5jCmluZGV4IDRjODNhOTRiNGJkYzMuLjc2ZjA0OWUyOWFhMmUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvaW9fdXJpbmcuYwpAQCAtNDc1LDcgJiM0Mzs0NzUsNyBAQCB2b2lkIF9faW9fY29tbWl0X2NxcmluZ19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCkKIAlpZiAoY3R4LSZndDtpbnRfZmxhZ3MgJmFtcDsgSU9fUklOR19GX09GRl9USU1FT1VUX1VTRUQpCiAJCWlvX2ZsdXNoX3RpbWVvdXRzKGN0eCk7CiAJaWYgKGN0eC0mZ3Q7aW50X2ZsYWdzICZhbXA7IElPX1JJTkdfRl9IQVNfRVZGRCkKLQkJaW9fZXZlbnRmZF9zaWduYWwoY3R4LCB0cnVlKTsKJiM0MzsJCWlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgdHJ1ZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb19jcV9sb2NrKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KQpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcG9sbC5jIGIvaW9fdXJpbmcvcG9sbC5jCmluZGV4IDAyMDRhZmZkYzMwOGMuLjU0NDdhN2MyNGRjZTYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3BvbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9wb2xsLmMKQEAgLTIwOCw5ICYjNDM7MjA4LDkgQEAgZW51bSB7CiAJSU9VX1BPTExfUkVRVUVVRSA9IDQsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spCiYjNDM7c3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrLCB1bnNpZ25lZCB0d19mbGFncykKIHsKLQl1bnNpZ25lZCBmbGFncyA9IDA7CiYjNDM7CXVuc2lnbmVkIGZsYWdzID0gdHdfZmxhZ3M7CiAKIAlpb19yZXFfc2V0X3JlcyhyZXEsIG1hc2ssIDApOwogCXJlcS0mZ3Q7aW9fdGFza193b3JrLmZ1bmMgPSBpb19wb2xsX3Rhc2tfZnVuYzsKQEAgLTIxOCwxNCAmIzQzOzIxOCwxNSBAQCBzdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spCiAJdHJhY2VfaW9fdXJpbmdfdGFza19hZGQocmVxLCBtYXNrKTsKIAogCWlmICghKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfUE9MTF9OT19MQVpZKSkKLQkJZmxhZ3MgPSBJT1VfRl9UV1FfTEFaWV9XQUtFOwomIzQzOwkJZmxhZ3MgfD0gSU9VX0ZfVFdRX0xBWllfV0FLRTsKIAlfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXMsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIHR3X2ZsYWdzKQogewogCWlmIChpb19wb2xsX2dldF9vd25lcnNoaXAocmVxKSkKLQkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMpOwomIzQzOwkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMsIHR3X2ZsYWdzKTsKIH0KIAogLyoKQEAgLTM0NCw3ICYjNDM7MzQ1LDcgQEAgdm9pZCBpb19wb2xsX3Rhc2tfZnVuYyhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAlpZiAocmV0ID09IElPVV9QT0xMX05PX0FDVElPTikgewogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChyZXQgPT0gSU9VX1BPTExfUkVRVUVVRSkgewotCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDApOwomIzQzOwkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTsKIAkJcmV0dXJuOwogCX0KIAlpb19wb2xsX3JlbW92ZV9lbnRyaWVzKHJlcSk7CkBAIC0zODMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyB2b2lkIGlvX3BvbGxfY2FuY2VsX3JlcShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKIHsKIAlpb19wb2xsX21hcmtfY2FuY2VsbGVkKHJlcSk7CiAJLyoga2ljayB0dywgd2hpY2ggc2hvdWxkIGNvbXBsZXRlIHRoZSByZXF1ZXN0ICovCi0JaW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7CiYjNDM7CWlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApOwogfQogCiAjZGVmaW5lIElPX0FTWU5DX1BPTExfQ09NTU9OCShFUE9MTE9ORVNIT1QgfCBFUE9MTFBSSSkKQEAgLTM5Miw3ICYjNDM7MzkzLDcgQEAgc3RhdGljIF9fY29sZCBpbnQgaW9fcG9sbGZyZWVfd2FrZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX3BvbGwgKnBvbGwpCiB7CiAJaW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpOwogCS8qIHdlIGhhdmUgdG8ga2ljayB0dyBpbiBjYXNlIGl0JiMzOTtzIG5vdCBhbHJlYWR5ICovCi0JaW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7CiYjNDM7CWlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIElPVV9GX1RXUV9JTl9XQUtFKTsKIAlpb19wb2xsX3JlbW92ZV93YWl0cShwb2xsKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTQzMCw3ICYjNDM7NDMxLDcgQEAgc3RhdGljIGludCBpb19wb2xsX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLAogCQkJZWxzZQogCQkJCXJlcS0mZ3Q7ZmxhZ3MgJmFtcDs9IH5SRVFfRl9TSU5HTEVfUE9MTDsKIAkJfQotCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2spOwomIzQzOwkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7CiAJfQogCXJldHVybiAxOwogfQpAQCAtNjE4LDcgJiM0Mzs2MTksNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAogCWlmIChtYXNrICZhbXA7JmFtcDsgKHBvbGwtJmd0O2V2ZW50cyAmYW1wOyBFUE9MTEVUKSAmYW1wOyZhbXA7CiAJICAgIGlvX3BvbGxfY2FuX2ZpbmlzaF9pbmxpbmUocmVxLCBpcHQpKSB7Ci0JCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgbWFzayk7CiYjNDM7CQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2ssIDApOwogCQlyZXR1cm4gMDsKIAl9CiAJaW9fbmFwaV9hZGQocmVxKTsKQEAgLTYyOSw3ICYjNDM7NjMwLDcgQEAgc3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJCSAqIHBvbGwgd2FzIHdha2VuIHVwLCBxdWV1ZSB1cCBhIHR3LCBpdCYjMzk7bGwgZGVhbCB3aXRoIGl0LgogCQkgKi8KIAkJaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7cmVxLSZndDtwb2xsX3JlZnMsIDEsIDApICE9IDEpCi0JCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDApOwomIzQzOwkJCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgMCk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdHcuYyBiL2lvX3VyaW5nL3R3LmMKaW5kZXggYTRjODcyODcwZDgxYy4uYmY0ZTVhYTVjMmU3ZSAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvdHcuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy90dy5jCkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHZvaWQgaW9fcmVxX2xvY2FsX3dvcmtfYWRkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBmbGFncykKIAlpZiAobXBzY3FfcHVzaCgmYW1wO2N0eC0mZ3Q7d29ya19saXN0LCAmYW1wO3JlcS0mZ3Q7aW9fdGFza193b3JrLm5vZGUpKSB7CiAJCWlvX2N0eF9tYXJrX3Rhc2tydW4oY3R4KTsKIAkJaWYgKGRhdGFfcmFjZShjdHgtJmd0O2ludF9mbGFncykgJmFtcDsgSU9fUklOR19GX0hBU19FVkZEKQotCQkJaW9fZXZlbnRmZF9zaWduYWwoY3R4LCBmYWxzZSk7CiYjNDM7CQkJaW9fZXZlbnRmZF9zaWduYWwoY3R4LCBmYWxzZSwgZmxhZ3MgJmFtcDsgSU9VX0ZfVFdRX0lOX1dBS0UpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jCmluZGV4IDMyZjY4ZmQ3ZmNkZGEuLjc2YWYxMjliYThjYWQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3dhaXRpZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3dhaXRpZC5jCkBAIC0yNTMsNyAmIzQzOzI1Myw3IEBAIHN0YXRpYyBpbnQgaW9fd2FpdGlkX3dhaXQoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsCiAJCXJldHVybiAxOwogCiAJcmVxLSZndDtpb190YXNrX3dvcmsuZnVuYyA9IGlvX3dhaXRpZF9jYjsKLQlpb19yZXFfdGFza193b3JrX2FkZChyZXEpOwomIzQzOwlfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpOwogCXJldHVybiAxOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDgzCgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDc0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nYCB0aGF0IGludHJvZHVjZXMgYElPVV9GX1RXUV9JTl9XQUtFYCBhbmQgbW9kaWZpZXMgYGlvX2V2ZW50ZmRfc2lnbmFsYCB0byBhY2NlcHQgYSBgZGVmZXJgIHBhcmFtZXRlci4gVGhlIGZpbGVzIGFmZmVjdGVkIGFyZSBgaW9fdXJpbmcvZXZlbnRmZC5jYCwgYGlvX3VyaW5nL2Z1dGV4LmNgLCBgaW9fdXJpbmcvaW9fdXJpbmcuY2AsIGBpb191cmluZy9wb2xsLmNgLCBgaW9fdXJpbmcvdHcuY2AsIGFuZCBgaW9fdXJpbmcvd2FpdGlkLmNgLiBNeSBqb2IgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgc3BlY2lmaWNhbGx5IGlmIGl0IGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczoKCiogICBXZSYjMzk7dmUgYWRkZWQgYElPVV9GX1RXUV9JTl9XQUtFYCB0byB0aGUgZW51bSBpbiBgaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oYC4gU2ltcGxlIGVub3VnaC4KKiAgIGBfX2lvX2V2ZW50ZmRfc2lnbmFsYCBub3cgdGFrZXMgYSBgZGVmZXJgIGJvb2xlYW4uIElmIGBkZWZlcmAgaXMgdHJ1ZSwgdGhlIHNpZ25hbCBtYXNrIGlzIHNraXBwZWQsIGFuZCBpdCByZXR1cm5zIGZhbHNlLiBUaGlzIGlzIGEgY3J1Y2lhbCBjb250cm9sIGZsb3cgY2hhbmdlLgoqICAgYGlvX2V2ZW50ZmRfc2lnbmFsYCBub3cgYWxzbyB0YWtlcyBgZGVmZXJgIGFuZCBwYXNzZXMgaXQgYWxvbmcuCiogICBgaW9fZnV0ZXhfd2FrZXZfZm5gIGFuZCBgaW9fZnV0ZXhfd2FrZV9mbmAgYXJlIHVzaW5nIGBfX2lvX3JlcV90YXNrX3dvcmtfYWRkYCB3aXRoIGBJT1VfRl9UV1FfSU5fV0FLRWAuCiogICBgaW9fcG9sbF9leGVjdXRlYCBhbmQgYF9faW9fcG9sbF9leGVjdXRlYCBub3cgdXNlIGB0d19mbGFnc2Agd2l0aCBgX19pb19yZXFfdGFza193b3JrX2FkZGAuCiogICBgaW9fcG9sbF93YWtlYCwgYGlvX3BvbGxmcmVlX3dha2VgIG5vdyBwYXNzIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gYF9faW9fcG9sbF9leGVjdXRlYC4KKiAgIGBpb19yZXFfbG9jYWxfd29ya19hZGRgIHBhc3NlcyBgZmxhZ3MgJmFtcDsgSU9VX0ZfVFdRX0lOX1dBS0VgIGFzIGBkZWZlcmAgdG8gYGlvX2V2ZW50ZmRfc2lnbmFsYC4KKiAgIGBpb193YWl0aWRfd2FpdGAgdXNlcyBgX19pb19yZXFfdGFza193b3JrX2FkZGAgd2l0aCBgSU9VX0ZfVFdRX0lOX1dBS0VgLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGF2b2lkaW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIGJ5IGRlZmVycmluZyB0aGUgYGV2ZW50ZmRgIHNpZ25hbGluZyB3aGVuIHRhc2sgd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgcmVjdXJzaW5nIGJhY2sgaW50byB0aGUgd2FpdHF1ZXVlIGxvY2sgdGhyb3VnaCBlcG9sbCwgc28gaXQmIzM5O3MgYSBsb2NraW5nL2RlYWRsb2NrIGZpeCwgcHVyZSBhbmQgc2ltcGxlLgoKQ3J1Y2lhbGx5LCBpdCAqKmRvZXNuJiMzOTt0KiogaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLiBJdCBhbHNvIGRvZXNuJiMzOTt0IGNoYW5nZSBhbnl0aGluZyBhYm91dCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nLiBJdOKAmXMgc3RyaWN0bHkgYWJvdXQgKndoZW4qIGFuIGV2ZW50ZmQgaXMgc2lnbmFsZWQsIGRlZmVycmluZyBpdCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzICh3aXRoIHRoZSBgSU9VX0ZfVFdRX0lOX1dBS0VgIGZsYWcpLgoKR2l2ZW4gdGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgbW9kaWZpY2F0aW9uIGRlc2lnbmVkIHRvIHByZXZlbnQgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MsIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBzdWNoIGFzIGRlYWRsb2NrcyBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBJJiMzOTttIHJlYXNvbmFibHkgY2VydGFpbiB0aGVyZSBpcyBubyBuZXcsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4KCkxldCBtZSBkb3VibGUtY2hlY2suIE9rYXksIGBkZWZlcmAgaXMganVzdCBhIGJvb2xlYW4uIGBJT1VfRl9UV1FfSU5fV0FLRWAgaXMgYSBjb25zdGFudC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3RzIG9yIGZpZWxkcyBiZWluZyBhZGRlZCB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgY29waWVkIHRvIHVzZXJzcGFjZS4gV2UgYXJlIG5vdCBtb2RpZnlpbmcgYm91bmRzIGNoZWNrcywgbm9yIGFyZSB3ZSBhbGxvY2F0aW5nIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAsIGFuZCBJIHdpbGwgZG9jdW1lbnQgdGhpcyByYXRpb25hbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGlzIHB1cmVseSBhIGNvbnRyb2wgZmxvdyBhbmQgbG9ja2luZyBjaGFuZ2UgZGVzaWduZWQgdG8gcHJldmVudCBsb2NrIHJlY3Vyc2lvbiBhbmQgZGVhZGxvY2tzIHRocm91Z2ggZXBvbGwuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IGxvY2sgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MgdGhyb3VnaCBlcG9sbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjI4Ljg0MzQ5MDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5NjY5MzEyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJFUE9MTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2V2ZW50ZmRfcmVnaXN0ZXJcIixcbiAgICBcImlvX2Z1dGV4X3dhaXRcIixcbiAgICBcImlvX2Z1dGV4dl93YWl0XCIsXG4gICAgXCJpb19wb2xsX2FkZFwiLFxuICAgIFwiaW9fd2FpdGlkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgY2hhbmdlIGRlc2lnbmVkIHRvIHByZXZlbnQgbG9jayByZWN1cnNpb24gYW5kIGRlYWRsb2NrcyB0aHJvdWdoIGVwb2xsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLCBzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhpcyBhZmZlY3RzIGNvcmUgaW9fdXJpbmcgb3BlcmF0aW9ucyB0aGF0IHVzZSB3YWl0cXVldWVzLCBzdWNoIGFzIGZ1dGV4IHdhaXQsIHBvbGwsIGFuZCB3YWl0aWQsIHdoZW4gY29tYmluZWQgd2l0aCBldmVudGZkIG5vdGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlc2Ugc3BlY2lmaWMgb3BlcmF0aW9ucyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBkZWZlcnJlZCBzaWduYWxpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjI4Ljg0MzQ5NTIwMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMjczMDIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkMDRkNzQ3NGVlZmEwODUwNjU4YzY4YjIwOTMyZDBlNmFmNTExMjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMTUgMjM6NDg6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXFxuaW5kZXggYTJjNjIzYTY3YTI1MS4uZjZlOTBjYzY0YTFmMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcXG5AQCAtMjAsNiArMjAsMTQgQEAgZW51bSB7XFxuIFxcdCAqIEl0J3MgYWxzbyBpZ25vcmVkIHVubGVzcyBJT1JJTkdfU0VUVVBfREVGRVJfVEFTS1JVTiBpcyBzZXQuXFxuIFxcdCAqL1xcbiBcXHRJT1VfRl9UV1FfTEFaWV9XQUtFXFx0XFx0XFx0PSAxLFxcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLCB3aGVyZVxcbitcXHQgKiBhbiBhcmJpdHJhcnkgcHJvdmlkZXIgd2FpdHF1ZXVlIGxvY2sgaXMgaGVsZC4gU2lnbmFsaW5nIHRoZSBDUSByaW5nXFxuK1xcdCAqIGV2ZW50ZmQgaW5saW5lIGZyb20gdGhlcmUgY2FuIHJlY3Vyc2UgYmFjayBpbnRvIHRoYXQgbG9jayB0aHJvdWdoXFxuK1xcdCAqIGVwb2xsLCBzbyB0aGUgZXZlbnRmZCBzaWduYWwgbXVzdCBiZSBkZWZlcnJlZC5cXG4rXFx0ICovXFxuK1xcdElPVV9GX1RXUV9JTl9XQUtFXFx0XFx0XFx0PSAyLFxcbiB9O1xcbiBcXG4gZW51bSBpb191cmluZ19jbWRfZmxhZ3Mge1xcbmRpZmYgLS1naXQgYS9pb191cmluZy9ldmVudGZkLmMgYi9pb191cmluZy9ldmVudGZkLmNcXG5pbmRleCBkNjU2Y2MyYTBiOWJhLi42M2ZlNmU1ZDc5YmFkIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuY1xcbisrKyBiL2lvX3VyaW5nL2V2ZW50ZmQuY1xcbkBAIC01MSw5ICs1MSw5IEBAIHN0YXRpYyB2b2lkIGlvX2V2ZW50ZmRfZG9fc2lnbmFsKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbiAvKlxcbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgcHV0IHRoZSBldl9mZCByZWZlcmVuY2UsIGZhbHNlIGlmIG5vdC5cXG4gICovXFxuLXN0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZClcXG4rc3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkLCBib29sIGRlZmVyKVxcbiB7XFxuLVxcdGlmIChldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHtcXG4rXFx0aWYgKCFkZWZlciBcXHUwMDI2XFx1MDAyNiBldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHtcXG4gXFx0XFx0ZXZlbnRmZF9zaWduYWxfbWFzayhldl9mZC1cXHUwMDNlY3FfZXZfZmQsIEVQT0xMX1VSSU5HX1dBS0UpO1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBib29sIGlvX2V2ZW50ZmRfdHJpZ2dlcihzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKVxcbiBcXHRyZXR1cm4gIWV2X2ZkLVxcdTAwM2VldmVudGZkX2FzeW5jIHx8IGlvX3dxX2N1cnJlbnRfaXNfd29ya2VyKCk7XFxuIH1cXG4gXFxuLXZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50KVxcbit2b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCwgYm9vbCBkZWZlcilcXG4ge1xcbiBcXHRib29sIHNraXAgPSBmYWxzZTtcXG4gXFx0c3RydWN0IGlvX2V2X2ZkICpldl9mZDtcXG5AQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50KVxcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wbGV0aW9uX2xvY2spO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkKSlcXG4rXFx0aWYgKHNraXAgfHwgX19pb19ldmVudGZkX3NpZ25hbChldl9mZCwgZGVmZXIpKVxcbiBcXHRcXHRpb19ldmVudGZkX3B1dChldl9mZCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuaCBiL2lvX3VyaW5nL2V2ZW50ZmQuaFxcbmluZGV4IDQwMGVkYTRhNDE2NWEuLmU5NjVkODBkOWZkYzYgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvZXZlbnRmZC5oXFxuKysrIGIvaW9fdXJpbmcvZXZlbnRmZC5oXFxuQEAgLTUsNCArNSw0IEBAIGludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYyk7XFxuIGludCBpb19ldmVudGZkX3VucmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbiBcXG4tdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpO1xcbit2b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCwgYm9vbCBkZWZlcik7XFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jXFxuaW5kZXggZjBkODBhNDQ0ZjQ1ZS4uZWFlZTE0MjQyYTNhMyAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9mdXRleC5jXFxuKysrIGIvaW9fdXJpbmcvZnV0ZXguY1xcbkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZXZfZm4oc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKVxcbiBcXG4gXFx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcXG4gXFx0cmVxLVxcdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX2Z1dGV4dl9jb21wbGV0ZTtcXG4tXFx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcXG4rXFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTtcXG4gfVxcbiBcXG4gaW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcXG4gXFxuIFxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XFxuIFxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcXG4tXFx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcXG4rXFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTtcXG4gfVxcbiBcXG4gaW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvX3VyaW5nLmMgYi9pb191cmluZy9pb191cmluZy5jXFxuaW5kZXggNGM4M2E5NGI0YmRjMy4uNzZmMDQ5ZTI5YWEyZSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9pb191cmluZy5jXFxuKysrIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xcbkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuIFxcdGlmIChjdHgtXFx1MDAzZWludF9mbGFncyBcXHUwMDI2IElPX1JJTkdfRl9PRkZfVElNRU9VVF9VU0VEKVxcbiBcXHRcXHRpb19mbHVzaF90aW1lb3V0cyhjdHgpO1xcbiBcXHRpZiAoY3R4LVxcdTAwM2VpbnRfZmxhZ3MgXFx1MDAyNiBJT19SSU5HX0ZfSEFTX0VWRkQpXFxuLVxcdFxcdGlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgdHJ1ZSk7XFxuK1xcdFxcdGlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgdHJ1ZSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb19jcV9sb2NrKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbmRpZmYgLS1naXQgYS9pb191cmluZy9wb2xsLmMgYi9pb191cmluZy9wb2xsLmNcXG5pbmRleCAwMjA0YWZmZGMzMDhjLi41NDQ3YTdjMjRkY2U2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3BvbGwuY1xcbisrKyBiL2lvX3VyaW5nL3BvbGwuY1xcbkBAIC0yMDgsOSArMjA4LDkgQEAgZW51bSB7XFxuIFxcdElPVV9QT0xMX1JFUVVFVUUgPSA0LFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKVxcbitzdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2ssIHVuc2lnbmVkIHR3X2ZsYWdzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGZsYWdzID0gMDtcXG4rXFx0dW5zaWduZWQgZmxhZ3MgPSB0d19mbGFncztcXG4gXFxuIFxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgbWFzaywgMCk7XFxuIFxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19wb2xsX3Rhc2tfZnVuYztcXG5AQCAtMjE4LDE0ICsyMTgsMTUgQEAgc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKVxcbiBcXHR0cmFjZV9pb191cmluZ190YXNrX2FkZChyZXEsIG1hc2spO1xcbiBcXG4gXFx0aWYgKCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX1BPTExfTk9fTEFaWSkpXFxuLVxcdFxcdGZsYWdzID0gSU9VX0ZfVFdRX0xBWllfV0FLRTtcXG4rXFx0XFx0ZmxhZ3MgfD0gSU9VX0ZfVFdRX0xBWllfV0FLRTtcXG4gXFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIGZsYWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJlcylcXG4rc3RhdGljIGlubGluZSB2b2lkIGlvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJlcyxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgdHdfZmxhZ3MpXFxuIHtcXG4gXFx0aWYgKGlvX3BvbGxfZ2V0X293bmVyc2hpcChyZXEpKVxcbi1cXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIHJlcyk7XFxuK1xcdFxcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzLCB0d19mbGFncyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTM0NCw3ICszNDUsNyBAQCB2b2lkIGlvX3BvbGxfdGFza19mdW5jKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbiBcXHRpZiAocmV0ID09IElPVV9QT0xMX05PX0FDVElPTikge1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH0gZWxzZSBpZiAocmV0ID09IElPVV9QT0xMX1JFUVVFVUUpIHtcXG4tXFx0XFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcXG4rXFx0XFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcdGlvX3BvbGxfcmVtb3ZlX2VudHJpZXMocmVxKTtcXG5AQCAtMzgzLDcgKzM4NCw3IEBAIHN0YXRpYyB2b2lkIGlvX3BvbGxfY2FuY2VsX3JlcShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4ge1xcbiBcXHRpb19wb2xsX21hcmtfY2FuY2VsbGVkKHJlcSk7XFxuIFxcdC8qIGtpY2sgdHcsIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB0aGUgcmVxdWVzdCAqL1xcbi1cXHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcXG4rXFx0aW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgMCk7XFxuIH1cXG4gXFxuICNkZWZpbmUgSU9fQVNZTkNfUE9MTF9DT01NT05cXHQoRVBPTExPTkVTSE9UIHwgRVBPTExQUkkpXFxuQEAgLTM5Miw3ICszOTMsNyBAQCBzdGF0aWMgX19jb2xkIGludCBpb19wb2xsZnJlZV93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fcG9sbCAqcG9sbClcXG4ge1xcbiBcXHRpb19wb2xsX21hcmtfY2FuY2VsbGVkKHJlcSk7XFxuIFxcdC8qIHdlIGhhdmUgdG8ga2ljayB0dyBpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkgKi9cXG4tXFx0aW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7XFxuK1xcdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIElPVV9GX1RXUV9JTl9XQUtFKTtcXG4gXFx0aW9fcG9sbF9yZW1vdmVfd2FpdHEocG9sbCk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuQEAgLTQzMCw3ICs0MzEsNyBAQCBzdGF0aWMgaW50IGlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UkVRX0ZfU0lOR0xFX1BPTEw7XFxuIFxcdFxcdH1cXG4tXFx0XFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcXG4rXFx0XFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG5AQCAtNjE4LDcgKzYxOSw3IEBAIHN0YXRpYyBpbnQgX19pb19hcm1fcG9sbF9oYW5kbGVyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXG4gXFx0aWYgKG1hc2sgXFx1MDAyNlxcdTAwMjYgKHBvbGwtXFx1MDAzZWV2ZW50cyBcXHUwMDI2IEVQT0xMRVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBpb19wb2xsX2Nhbl9maW5pc2hfaW5saW5lKHJlcSwgaXB0KSkge1xcbi1cXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2spO1xcbitcXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2ssIDApO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRpb19uYXBpX2FkZChyZXEpO1xcbkBAIC02MjksNyArNjMwLDcgQEAgc3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuIFxcdFxcdCAqIHBvbGwgd2FzIHdha2VuIHVwLCBxdWV1ZSB1cCBhIHR3LCBpdCdsbCBkZWFsIHdpdGggaXQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoYXRvbWljX2NtcHhjaGcoXFx1MDAyNnJlcS1cXHUwMDNlcG9sbF9yZWZzLCAxLCAwKSAhPSAxKVxcbi1cXHRcXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xcbitcXHRcXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3R3LmMgYi9pb191cmluZy90dy5jXFxuaW5kZXggYTRjODcyODcwZDgxYy4uYmY0ZTVhYTVjMmU3ZSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy90dy5jXFxuKysrIGIvaW9fdXJpbmcvdHcuY1xcbkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBpb19yZXFfbG9jYWxfd29ya19hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGZsYWdzKVxcbiBcXHRpZiAobXBzY3FfcHVzaChcXHUwMDI2Y3R4LVxcdTAwM2V3b3JrX2xpc3QsIFxcdTAwMjZyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5ub2RlKSkge1xcbiBcXHRcXHRpb19jdHhfbWFya190YXNrcnVuKGN0eCk7XFxuIFxcdFxcdGlmIChkYXRhX3JhY2UoY3R4LVxcdTAwM2VpbnRfZmxhZ3MpIFxcdTAwMjYgSU9fUklOR19GX0hBU19FVkZEKVxcbi1cXHRcXHRcXHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlKTtcXG4rXFx0XFx0XFx0aW9fZXZlbnRmZF9zaWduYWwoY3R4LCBmYWxzZSwgZmxhZ3MgXFx1MDAyNiBJT1VfRl9UV1FfSU5fV0FLRSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3dhaXRpZC5jIGIvaW9fdXJpbmcvd2FpdGlkLmNcXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi43NmFmMTI5YmE4Y2FkIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3dhaXRpZC5jXFxuKysrIGIvaW9fdXJpbmcvd2FpdGlkLmNcXG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgaW9fd2FpdGlkX3dhaXQoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG4gXFx0cmVxLVxcdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX3dhaXRpZF9jYjtcXG4tXFx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcXG4rXFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTtcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjMwLjI0Njg4NTYyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY1Njc1NDQ0NzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJFVkVOVEZEXCIsXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19ldmVudGZkX3JlZ2lzdGVyXCIsXG4gICAgXCJpb19mdXRleF93YWl0XCIsXG4gICAgXCJpb19mdXRleHZfd2FpdFwiLFxuICAgIFwiaW9fcG9sbF9hZGRcIixcbiAgICBcImlvX3dhaXRpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmQwNGQ3NDc0ZWVmYTA4NTA2NThjNjhiMjA5MzJkMGU2YWY1MTEyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDIzOjQ4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5pbmRleCBhMmM2MjNhNjdhMjUxLi5mNmU5MGNjNjRhMWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbkBAIC0yMCw2ICsyMCwxNCBAQCBlbnVtIHtcbiBcdCAqIEl0J3MgYWxzbyBpZ25vcmVkIHVubGVzcyBJT1JJTkdfU0VUVVBfREVGRVJfVEFTS1JVTiBpcyBzZXQuXG4gXHQgKi9cbiBcdElPVV9GX1RXUV9MQVpZX1dBS0VcdFx0XHQ9IDEsXG4rXG4rXHQvKlxuK1x0ICogU2V0IHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLCB3aGVyZVxuK1x0ICogYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGlzIGhlbGQuIFNpZ25hbGluZyB0aGUgQ1EgcmluZ1xuK1x0ICogZXZlbnRmZCBpbmxpbmUgZnJvbSB0aGVyZSBjYW4gcmVjdXJzZSBiYWNrIGludG8gdGhhdCBsb2NrIHRocm91Z2hcbitcdCAqIGVwb2xsLCBzbyB0aGUgZXZlbnRmZCBzaWduYWwgbXVzdCBiZSBkZWZlcnJlZC5cbitcdCAqL1xuK1x0SU9VX0ZfVFdRX0lOX1dBS0VcdFx0XHQ9IDIsXG4gfTtcbiBcbiBlbnVtIGlvX3VyaW5nX2NtZF9mbGFncyB7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZXZlbnRmZC5jIGIvaW9fdXJpbmcvZXZlbnRmZC5jXG5pbmRleCBkNjU2Y2MyYTBiOWJhLi42M2ZlNmU1ZDc5YmFkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZXZlbnRmZC5jXG4rKysgYi9pb191cmluZy9ldmVudGZkLmNcbkBAIC01MSw5ICs1MSw5IEBAIHN0YXRpYyB2b2lkIGlvX2V2ZW50ZmRfZG9fc2lnbmFsKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIC8qXG4gICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHB1dCB0aGUgZXZfZmQgcmVmZXJlbmNlLCBmYWxzZSBpZiBub3QuXG4gICovXG4tc3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKVxuK3N0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZCwgYm9vbCBkZWZlcilcbiB7XG4tXHRpZiAoZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4rXHRpZiAoIWRlZmVyIFx1MDAyNlx1MDAyNiBldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHtcbiBcdFx0ZXZlbnRmZF9zaWduYWxfbWFzayhldl9mZC1cdTAwM2VjcV9ldl9mZCwgRVBPTExfVVJJTkdfV0FLRSk7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGJvb2wgaW9fZXZlbnRmZF90cmlnZ2VyKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXG4gXHRyZXR1cm4gIWV2X2ZkLVx1MDAzZWV2ZW50ZmRfYXN5bmMgfHwgaW9fd3FfY3VycmVudF9pc193b3JrZXIoKTtcbiB9XG4gXG4tdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpXG4rdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpXG4ge1xuIFx0Ym9vbCBza2lwID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkO1xuQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudClcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jayk7XG4gXHR9XG4gXG4tXHRpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkKSlcbitcdGlmIChza2lwIHx8IF9faW9fZXZlbnRmZF9zaWduYWwoZXZfZmQsIGRlZmVyKSlcbiBcdFx0aW9fZXZlbnRmZF9wdXQoZXZfZmQpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pb191cmluZy9ldmVudGZkLmggYi9pb191cmluZy9ldmVudGZkLmhcbmluZGV4IDQwMGVkYTRhNDE2NWEuLmU5NjVkODBkOWZkYzYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9ldmVudGZkLmhcbisrKyBiL2lvX3VyaW5nL2V2ZW50ZmQuaFxuQEAgLTUsNCArNSw0IEBAIGludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdHVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTtcbiBpbnQgaW9fZXZlbnRmZF91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcbiBcbi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCk7XG4rdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jXG5pbmRleCBmMGQ4MGE0NDRmNDVlLi5lYWVlMTQyNDJhM2EzIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZnV0ZXguY1xuKysrIGIvaW9fdXJpbmcvZnV0ZXguY1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtldl9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpXG4gXG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xuLVx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbitcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gfVxuIFxuIGludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcbi1cdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4rXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIH1cbiBcbiBpbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuaW5kZXggNGM4M2E5NGI0YmRjMy4uNzZmMDQ5ZTI5YWEyZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmNcbisrKyBiL2lvX3VyaW5nL2lvX3VyaW5nLmNcbkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX09GRl9USU1FT1VUX1VTRUQpXG4gXHRcdGlvX2ZsdXNoX3RpbWVvdXRzKGN0eCk7XG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX0hBU19FVkZEKVxuLVx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUpO1xuK1x0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fY3FfbG9jayhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmRpZmYgLS1naXQgYS9pb191cmluZy9wb2xsLmMgYi9pb191cmluZy9wb2xsLmNcbmluZGV4IDAyMDRhZmZkYzMwOGMuLjU0NDdhN2MyNGRjZTYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9wb2xsLmNcbisrKyBiL2lvX3VyaW5nL3BvbGwuY1xuQEAgLTIwOCw5ICsyMDgsOSBAQCBlbnVtIHtcbiBcdElPVV9QT0xMX1JFUVVFVUUgPSA0LFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKVxuK3N0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaywgdW5zaWduZWQgdHdfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgZmxhZ3MgPSAwO1xuK1x0dW5zaWduZWQgZmxhZ3MgPSB0d19mbGFncztcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgbWFzaywgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19wb2xsX3Rhc2tfZnVuYztcbkBAIC0yMTgsMTQgKzIxOCwxNSBAQCBzdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spXG4gXHR0cmFjZV9pb191cmluZ190YXNrX2FkZChyZXEsIG1hc2spO1xuIFxuIFx0aWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9QT0xMX05PX0xBWlkpKVxuLVx0XHRmbGFncyA9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4rXHRcdGZsYWdzIHw9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4gXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXMsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCB0d19mbGFncylcbiB7XG4gXHRpZiAoaW9fcG9sbF9nZXRfb3duZXJzaGlwKHJlcSkpXG4tXHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMsIHR3X2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC0zNDQsNyArMzQ1LDcgQEAgdm9pZCBpb19wb2xsX3Rhc2tfZnVuYyhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdGlmIChyZXQgPT0gSU9VX1BPTExfTk9fQUNUSU9OKSB7XG4gXHRcdHJldHVybjtcbiBcdH0gZWxzZSBpZiAocmV0ID09IElPVV9QT0xMX1JFUVVFVUUpIHtcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFx0aW9fcG9sbF9yZW1vdmVfZW50cmllcyhyZXEpO1xuQEAgLTM4Myw3ICszODQsNyBAQCBzdGF0aWMgdm9pZCBpb19wb2xsX2NhbmNlbF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4ge1xuIFx0aW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpO1xuIFx0Lyoga2ljayB0dywgd2hpY2ggc2hvdWxkIGNvbXBsZXRlIHRoZSByZXF1ZXN0ICovXG4tXHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbitcdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xuIH1cbiBcbiAjZGVmaW5lIElPX0FTWU5DX1BPTExfQ09NTU9OXHQoRVBPTExPTkVTSE9UIHwgRVBPTExQUkkpXG5AQCAtMzkyLDcgKzM5Myw3IEBAIHN0YXRpYyBfX2NvbGQgaW50IGlvX3BvbGxmcmVlX3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19wb2xsICpwb2xsKVxuIHtcbiBcdGlvX3BvbGxfbWFya19jYW5jZWxsZWQocmVxKTtcbiBcdC8qIHdlIGhhdmUgdG8ga2ljayB0dyBpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkgKi9cbi1cdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xuK1x0aW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIFx0aW9fcG9sbF9yZW1vdmVfd2FpdHEocG9sbCk7XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNDMwLDcgKzQzMSw3IEBAIHN0YXRpYyBpbnQgaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYyxcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UkVRX0ZfU0lOR0xFX1BPTEw7XG4gXHRcdH1cbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNjE4LDcgKzYxOSw3IEBAIHN0YXRpYyBpbnQgX19pb19hcm1fcG9sbF9oYW5kbGVyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFxuIFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2IChwb2xsLVx1MDAzZWV2ZW50cyBcdTAwMjYgRVBPTExFVCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaW9fcG9sbF9jYW5fZmluaXNoX2lubGluZShyZXEsIGlwdCkpIHtcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCAwKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpb19uYXBpX2FkZChyZXEpO1xuQEAgLTYyOSw3ICs2MzAsNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0ICogcG9sbCB3YXMgd2FrZW4gdXAsIHF1ZXVlIHVwIGEgdHcsIGl0J2xsIGRlYWwgd2l0aCBpdC5cbiBcdFx0ICovXG4gXHRcdGlmIChhdG9taWNfY21weGNoZyhcdTAwMjZyZXEtXHUwMDNlcG9sbF9yZWZzLCAxLCAwKSAhPSAxKVxuLVx0XHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7XG4rXHRcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pb191cmluZy90dy5jIGIvaW9fdXJpbmcvdHcuY1xuaW5kZXggYTRjODcyODcwZDgxYy4uYmY0ZTVhYTVjMmU3ZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3R3LmNcbisrKyBiL2lvX3VyaW5nL3R3LmNcbkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBpb19yZXFfbG9jYWxfd29ya19hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGZsYWdzKVxuIFx0aWYgKG1wc2NxX3B1c2goXHUwMDI2Y3R4LVx1MDAzZXdvcmtfbGlzdCwgXHUwMDI2cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5ub2RlKSkge1xuIFx0XHRpb19jdHhfbWFya190YXNrcnVuKGN0eCk7XG4gXHRcdGlmIChkYXRhX3JhY2UoY3R4LVx1MDAzZWludF9mbGFncykgXHUwMDI2IElPX1JJTkdfRl9IQVNfRVZGRClcbi1cdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlKTtcbitcdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlLCBmbGFncyBcdTAwMjYgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIFx0fVxuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi43NmFmMTI5YmE4Y2FkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbisrKyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgaW9fd2FpdGlkX3dhaXQoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fd2FpdGlkX2NiO1xuLVx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbitcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0ODozMC4yNDY4ODgyOTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzI1OTIxMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIGBpb191cmluZ2Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYGV2ZW50ZmRgLCBgZnV0ZXhgLCBgcG9sbGAsIGB0d2AsIGFuZCBgd2FpdGlkYC4gSXQncyBhZGRpbmcgdGhpcyBuZXcgZmxhZywgYElPVV9GX1RXUV9JTl9XQUtFYCwgd2hpY2ggbG9va3MgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gYSB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoZSBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCBwb3RlbnRpYWwgbG9jayByZWN1cnNpb24gaXNzdWVzIHRocm91Z2ggZXBvbGwuIFRoaXMgaXMgY29yZSBpb191cmluZyBsb2dpYywgc28gaXQncyB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGFuZCBpZiBpdCdzIGZ1enotd29ydGh5LiBHaXZlbiB0aGF0IGBpb191cmluZ2AgaXMgaGVhdmlseSBmdXp6ZWQgaW4gZ2VuZXJhbCwgYW5kIEkga25vdyBpdCdzIGEgaG90IHRhcmdldCBmb3IgYnVnIGh1bnRpbmcsIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzIGlzIGluZGVlZCBhIGZydWl0ZnVsIGFyZWEgdG8gZXhwbG9yZSB3aXRoIGZ1enppbmcuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gV2UgaGF2ZTogYGlvX2V2ZW50ZmRfc2lnbmFsYCwgYGlvX2Z1dGV4dl9wcmVwYCAodGhvdWdoIG5vdCBkaXJlY3RseSBtb2RpZmllZCwgdGhlIHJlbGF0ZWQgYGlvX2Z1dGV4X3dha2V2X2ZuYCBhbmQgYGlvX2Z1dGV4X3dha2VfZm5gIGFyZSksIGBpb19wb2xsX2V4ZWN1dGVgIC8gYF9faW9fcG9sbF9leGVjdXRlYCwgYGlvX3BvbGxfd2FrZWAsIGBpb19wb2xsZnJlZV93YWtlYCwgYGlvX3JlcV9sb2NhbF93b3JrX2FkZGAsIGFuZCBgaW9fd2FpdGlkX3dhaXRgLlxuXG5UaGUgZ29hbCBpcyB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSWRlYWxseSwgSSdtIGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gYGlvX2V2ZW50ZmRfc2lnbmFsYCBpc24ndCBhIHN5c2NhbGwsIGJ1dCBpdCdzIGFuIEFQSSwgc28gaXQncyBhIGNhbmRpZGF0ZS4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgbGV0J3MgcHJpb3JpdGl6ZSBzeXNjYWxscyBhbmQgb3BlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZmVhdHVyZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByZWxhdGVkIGBpb191cmluZ2Agb3BlcmF0aW9uczogYElPUklOR19PUF9QT0xMX0FERGAsIGBJT1JJTkdfT1BfRlVURVhfV0FJVGAsIGBJT1JJTkdfT1BfRlVURVhfV0FLRWAsIGBJT1JJTkdfT1BfV0FJVElEYCwgYW5kIGBpb19ldmVudGZkX3JlZ2lzdGVyYC4gVGltZSB0byBncmVwIHRoZSBjb2RlIGZvciBpbnN0YW5jZXMgb2YgdGhlc2UgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcmVsZXZhbnQgY2FsbCBwYXRocyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTA4NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjM3Ljk3MjgxMTk3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgyMzI2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpIGlvX2V2ZW50ZmRfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvZXZlbnRmZC5jPTc2PXZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKVxcbi0tXFxuaW9fdXJpbmcvZXZlbnRmZC5jLTExOS1cXG5pb191cmluZy9ldmVudGZkLmM6MTIwOmludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxcbmlvX3VyaW5nL2V2ZW50ZmQuYy0xMjEtXFx0XFx0XFx0dW5zaWduZWQgaW50IGV2ZW50ZmRfYXN5bmMpXFxuLS1cXG5pb191cmluZy9ldmVudGZkLmg9Mz1zdHJ1Y3QgaW9fcmluZ19jdHg7XFxuaW9fdXJpbmcvZXZlbnRmZC5oOjQ6aW50IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuaW9fdXJpbmcvZXZlbnRmZC5oLTUtXFx0XFx0XFx0dW5zaWduZWQgaW50IGV2ZW50ZmRfYXN5bmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0ODo0MC4yNTUxNDMwODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIzNTE1MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipQcm9iaW5nIHRoZSBJL08gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHN5c3RlbSBjYWxscy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBrZXJuZWwgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIEkvTyBzdWJzeXN0ZW0uIGBpb19mdXRleHZfd2FpdGAgYW5kIGBpb19mdXRleHZfd2FrZWAgYXJlIGltbWVkaWF0ZWx5IGludHJpZ3VpbmcuIFRoZXkgc3Ryb25nbHkgc3VnZ2VzdCBhIGZ1dGV4LWJhc2VkIGltcGxlbWVudGF0aW9uIGZvciBJL08gY29tcGxldGlvbiBzaWduYWxpbmcsIGxpa2VseSBsZXZlcmFnaW5nIHZlY3Rvcml6ZWQgb3BlcmF0aW9ucyBmb3IgZWZmaWNpZW5jeS4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSB0byB1bmRlcnN0YW5kLCBlc3BlY2lhbGx5IGluIHRlcm1zIG9mIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmdXRleCBvcGVyYXRpb25zIHRpZSBpbnRvIHRoZSBvdmVyYWxsIGV2ZW50IGxvb3AuXG5cblRoZW4sIHRoZXJlJ3MgYGlvX3BvbGxfYWRkYC4gVGhpcyBzY3JlYW1zIFwiZXBvbGwtbGlrZVwiIG9yIFwia3F1ZXVlLWxpa2VcIiBmdW5jdGlvbmFsaXR5LCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpzcGVjaWZpY3MqIG9mIGl0cyBpbnRlcmZhY2UuIElzIGl0IHJlZ2lzdGVyaW5nIGZpbGUgZGVzY3JpcHRvcnMsIEkvTyBjb21wbGV0aW9uIHBvcnRzLCBvciBzb21ldGhpbmcgbW9yZSBhYnN0cmFjdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2NhbGFiaWxpdHkgYW5kIHRoZSB0eXBlcyBvZiBJL08gb3BlcmF0aW9ucyBpdCBzdXBwb3J0cz9cblxuRmluYWxseSwgYGlvX3dhaXRpZF9wcmVwYCBhbmQgYGlvX3dhaXRpZGAuIFRoZXNlIGFyZSBwb2ludGluZyB0b3dhcmRzIGFzeW5jaHJvbm91cyBJL08gd2l0aCBwcm9jZXNzL3RocmVhZCBJRCBtYW5hZ2VtZW50IGFuZCBJL08gY29tcGxldGlvbiBzaWduYWxpbmcuIEkgbmVlZCB0byBhc2NlcnRhaW4gaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZS4gQXJlIHRoZXkgdXNlZCBmb3Igd2FpdGluZyBvbiBjaGlsZHJlbiBwcm9jZXNzZXMnIEkvTyBjb21wbGV0aW9uLCBvciBkbyB0aGV5IG9mZmVyIG1vcmUgZ2VuZXJhbGl6ZWQgc2lnbmFsaW5nIGNhcGFiaWxpdGllcywgc2ltaWxhciB0byBgd2FpdGlkYCBidXQgc3RyZWFtbGluZWQgZm9yIEkvTyBjb250ZXh0cz8gSXMgdGhlcmUgb3ZlcmxhcCB3aXRoIGBpb19wb2xsX2FkZGAgb3IgYXJlIHRoZXkgaW5kZXBlbmRlbnQgbWVjaGFuaXNtcz8gSSdtIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcnBsYXkgaGVyZSwgYW5kIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhvcm91Z2hseSB0byBkZXZlbG9wIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIHRoZWlyIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzExLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDg6NDMuOTc4NjYwMTc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDgxNDE4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkgaW9fZnV0ZXh2X3dhaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvZnV0ZXguYz0yMzA9c3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZV9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpXFxuLS1cXG5pb191cmluZy9mdXRleC5jLTI0Mi1cXG5pb191cmluZy9mdXRleC5jOjI0MzppbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9mdXRleC5jLTI0NC17XFxuLS1cXG5pb191cmluZy9mdXRleC5oPTg9aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvZnV0ZXguaDo5OmludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9mdXRleC5oLTEwLWludCBpb19mdXRleF93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0ODo0Ni4zMjY4MTAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NDkxOTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGlvX3dhaXRpZGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGN1cnJlbnQgc2l0dWF0aW9uIGRlbWFuZHMgYSBkZWVwZXIgbG9vaywgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gdmVyaWZ5IGBpb193YWl0aWRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIGhhbmRsaW5nIHByb2Nlc3MgSS9PIGFuZCBpdHMgYmVoYXZpb3Igd2lsbCBiZSBjZW50cmFsIHRvIHJlc29sdmluZyB0aGUgaXNzdWUgYXQgaGFuZC4gVW5kZXJzdGFuZGluZyBob3cgYGlvX3dhaXRpZGAgaXMgZnVuY3Rpb25pbmfigJRvciBtYWxmdW5jdGlvbmluZ+KAlGlzIGEgcHJpbWFyeSBpbnZlc3RpZ2F0aXZlIGF2ZW51ZS4gV2hhdCBpcyB0aGUgc3RhdGUgb2YgYGlvX3dhaXRpZGA/IEFyZSB0aGVyZSB1bmV4cGVjdGVkIHJldHVybiB2YWx1ZXM/IFdoYXQgYXJlIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIGl0PyBUaGUgbnVhbmNlcyBvZiBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIGFyZSBlc3NlbnRpYWwgZGV0YWlscyB0byBlc3RhYmxpc2ggaGVyZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDg6NDkuMzExNzMyMjUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzI3NjQ1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkgaW9fd2FpdGlkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3dhaXRpZC5jPTE0Nj1zdGF0aWMgYm9vbCBfX2lvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xNjYtXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTY3OmludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL3dhaXRpZC5jLTE2OC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jPTIzNj1zdGF0aWMgaW50IGlvX3dhaXRpZF93YWl0KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtMjU5LVxcbmlvX3VyaW5nL3dhaXRpZC5jOjI2MDppbnQgaW9fd2FpdGlkX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy93YWl0aWQuYy0yNjEte1xcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtMjgxLVxcbmlvX3VyaW5nL3dhaXRpZC5jOjI4MjppbnQgaW9fd2FpdGlkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvd2FpdGlkLmMtMjgzLXtcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5oPTU9c3RydWN0IGlvX3dhaXRpZF9hc3luYyB7XFxuLS1cXG5pb191cmluZy93YWl0aWQuaC05LVxcbmlvX3VyaW5nL3dhaXRpZC5oOjEwOmludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcXG5pb191cmluZy93YWl0aWQuaDoxMTppbnQgaW9fd2FpdGlkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL3dhaXRpZC5oOjEyOmludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL3dhaXRpZC5oLTEzLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDg6NTEuNDQ0NTAxNzgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNjUxNTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW9fcG9sbF9hZGRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBcIkxldCdzIGNoZWNrIGBpb19wb2xsX2FkZGAuXCIgVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBJdCBtZWFucyBJJ20gbm90IGp1c3QgZ2xvc3Npbmcgb3ZlciB0aGluZ3M7IEknbSBnb2luZyB0byBhY3R1YWxseSAqZXhhbWluZSogdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpb19wb2xsX2FkZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MsIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgSS9PIHBvbGxpbmcgZnJhbWV3b3JrLCBhbmQgd2hhdCBwb3RlbnRpYWwgZ290Y2hhcyBtaWdodCBleGlzdC4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yOlxuXG4qICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBwb2xsaW5nIHN0cnVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIGx1cmtpbmc/IE11dGV4ZXMsIHJlYWQvd3JpdGUgbG9ja3MsIGF0b21pYyBvcGVyYXRpb25zLi4uIEkgbmVlZCB0byBzZWUgdGhlIGRldGFpbHMuXG4qICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIERvZXMgaXQgcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZm9yIHRoZSBwb2xsIGVudHJpZXM/IExlYWtzIGFyZSB1bmFjY2VwdGFibGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgZG91YmxlLWZyZWVzIG9yIHVzZS1hZnRlci1mcmVlcy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGNoZWNraW5nPyBEb2VzIGl0IGhhbmRsZSBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcnMsIG91dC1vZi1tZW1vcnkgY29uZGl0aW9ucywgYW5kIG90aGVyIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseT8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIHByb3BhZ2F0aW9uP1xuKiAgICoqUGVyZm9ybWFuY2U6KiogV2hhdCBpcyB0aGUgb3ZlcmhlYWQgb2YgdGhpcyBmdW5jdGlvbj8gRG9lcyBpdCBzY2FsZSB3ZWxsIHVuZGVyIGhlYXZ5IGxvYWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzPyBBbW9ydGl6ZWQgY29tcGxleGl0eSBpcyBpbXBvcnRhbnQuXG4qICAgKipJbnRlZ3JhdGlvbjoqKiBIb3cgZG9lcyB0aGlzIHJlbGF0ZSB0byB0aGluZ3MgbGlrZSBgaW9fcG9sbF9yZW1vdmVgIGFuZCB0aGUgY29yZSBldmVudCBsb29wPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEkgd2lsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgdGhhdCBhZmZlY3QgbG9jayBvcmRlcmluZywgYW5kIHRoZSB1c2FnZSBvZiBnbG9iYWwgdmFyaWFibGVzLlxuKiAgICoqUG9ydGFiaWxpdHk6KiogSXMgaXQgd3JpdHRlbiBpbiBhIHdheSB0aGF0IHdpbGwgd29yayB3aXRoIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zPyBJIHdpbGwgYmUgdGhpbmtpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBzeXN0ZW0gY2FsbHMsIGFuZCBob3cgdGhleSBtYXkgYmUgaW1wbGVtZW50ZWQgYWNyb3NzIGRpZmZlcmVudCBPU3MuXG5cblVsdGltYXRlbHksIEknbSBob3BpbmcgdG8gY29uZmlybSB0aGF0IGl0J3Mgd2VsbC1kZXNpZ25lZCwgZWZmaWNpZW50LCBhbmQgcm9idXN0LiBJdCdzIHRoZSBidWlsZGluZyBibG9jayBmb3IgcmVsaWFibGUgSS9PLCBzbyBJJ20gcHV0dGluZyBpdCB1bmRlciB0aGUgbWljcm9zY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjU1LjQ3MTAxOTUwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NDI5ODEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKSBpb19wb2xsX2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9wb2xsLmM9ODU0PWludCBpb19wb2xsX3JlbW92ZV9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9wb2xsLmMtODgzLVxcbmlvX3VyaW5nL3BvbGwuYzo4ODQ6aW50IGlvX3BvbGxfYWRkX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9wb2xsLmMtODg1LXtcXG4tLVxcbmlvX3VyaW5nL3BvbGwuYy05MDAtXFxuaW9fdXJpbmcvcG9sbC5jOjkwMTppbnQgaW9fcG9sbF9hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9wb2xsLmMtOTAyLXtcXG4tLVxcbmlvX3VyaW5nL3BvbGwuaD0zMD1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9tdWx0aXNob3RfcmV0cnkoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy9wb2xsLmgtMzQtXFxuaW9fdXJpbmcvcG9sbC5oOjM1OmludCBpb19wb2xsX2FkZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xcbmlvX3VyaW5nL3BvbGwuaDozNjppbnQgaW9fcG9sbF9hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvcG9sbC5oLTM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0ODo1Ny42MjUzMjQwNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1NzcwMDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGlvX3VyaW5nYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgYSB0cmlja3kgcmVjdXJzaW9uIGlzc3VlIHdpdGhpbiBgaW9fdXJpbmdgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgZXZlbnRmZCBzaWduYWxpbmcgaW50ZXJhY3RzIHdpdGggd2FpdHF1ZXVlIHdha2V1cHMuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgdGhlIHNpZ25hbGluZyBmcm9tIGRpdmluZyBiYWNrIGludG8gdGhlIHdhaXRxdWV1ZSBsb2NrLCBwb3RlbnRpYWxseSB0aHJvdWdoIG1lY2hhbmlzbXMgbGlrZSBgZXBvbGxgLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgdGFyZ2V0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkaXJlY3RseTogYGlvX2V2ZW50ZmRfc2lnbmFsYCwgYW5kIHRoZSB3YWl0cXVldWUgY2FsbGJhY2sgZnVuY3Rpb25zOiBgaW9fZnV0ZXhfd2FrZXZfZm5gLCBgaW9fZnV0ZXhfd2FrZV9mbmAsIGBpb19wb2xsX3dha2VgLCBgaW9fcG9sbGZyZWVfd2FrZWAsIGBpb193YWl0aWRfd2FpdGAsIGFuZCBhbHNvIGBpb19yZXFfbG9jYWxfd29ya19hZGRgLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzZW5zZSBvZiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS5cblxuRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgcHJvYmxlbWF0aWMgd2FrZXVwcyBhcmUgdGllZCB0byBgaW9fZnV0ZXh2X3dhaXRgIC8gYGlvX2Z1dGV4X3dhaXRgLCBgaW9fcG9sbF9hZGRgLCBhbmQgYGlvX3dhaXRpZGAsIHBsdXMsIG9mIGNvdXJzZSwgdGhlIGBpb19ldmVudGZkX3JlZ2lzdGVyYC4gVGhpcyBtYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGVzZSBhcmUgYWxsIHBvaW50cyB3aGVyZSB3ZSBtaWdodCBleHBlY3QgdG8gaGF2ZSBhIHdhaXRxdWV1ZSBlbnRyeSB0aGF0IGlzIHRyaWdnZXJlZCBieSBhIHVzZXItc3BhY2UgZXZlbnQuXG5cbkknbSB0aGlua2luZywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBpb19mdXRleF93YWl0YCBhbmQgc2VlIGhvdyB0aGlzIHBhdGNoIGFjdHVhbGx5IG1vZGlmaWVzIHRoYXQuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgdGhlIGRlZmVycmVkIHNpZ25hbGluZyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQzMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OTowMi43ODMwMjY1NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTIyMzc5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkgaW9fZnV0ZXhfd2FpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9mdXRleC5jPTEyNz1pbnQgaW9fZnV0ZXhfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0xNTQtXFxuaW9fdXJpbmcvZnV0ZXguYzoxNTU6aW50IGlvX2Z1dGV4X3dhaXRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTU2LXtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmM9MjQzPWludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yOTUtXFxuaW9fdXJpbmcvZnV0ZXguYzoyOTY6aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9mdXRleC5jLTI5Ny17XFxuLS1cXG5pb191cmluZy9mdXRleC5oPTU9aW50IGlvX2Z1dGV4X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvZnV0ZXguaDo2OmludCBpb19mdXRleF93YWl0X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvZnV0ZXguaC03LWludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcXG5pb191cmluZy9mdXRleC5oOjg6aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvZnV0ZXguaC05LWludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6MDQuOTM1MjY4MzgyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzg0ODk2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKklPX1VyaW5nIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBpb191cmluZyBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBjb25maWcgZmxhZyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXMgZGVmaW5pdGVseSBgSU9fVVJJTkdgLiBCdXQsIGtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyBvZnRlbiBnbywgaXQncyBuZXZlciB0aGF0IHNpbXBsZSwgcmlnaHQ/IE15IG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlbid0IGFueSBvdGhlciBzdWJ0bHkgbGlua2VkIGZsYWdzIG9yIHNldHRpbmdzIHRoYXQgYXJlIGVxdWFsbHkgY3JpdGljYWwuIEEgY29tcHJlaGVuc2l2ZSByZXZpZXcgaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgcG90ZW50aWFsbHkgdml0YWwgZm9yIGZ1bGwgYW5kIHByb3BlciBlbmFibGVtZW50LiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggdXAgZnJvbnQgYW5kIGF2b2lkIHNvbWUgbmFzdHkgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuIExldCdzIHNlZSB3aGF0IGVsc2UgaXMgbHVya2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDE2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6MDguMTczNzYwNjE0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwMjkzODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNC1cXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxNi1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzNi1cXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5MzgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OTowOS42MzQwNTkwMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MDY5OTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgSS9PIFJpbmcgUmVhY2hhYmlsaXR5KipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgYGlvX3VyaW5nYCByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc2VlIGhvdyBhY2Nlc3NpYmxlIHRoZXkgYXJlLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gYGlvX2V2ZW50ZmRfcmVnaXN0ZXJgLCBgaW9fZnV0ZXhfd2FpdGAsIGBpb19mdXRleHZfd2FpdGAsIGBpb19wb2xsX2FkZGAsIGFuZCBgaW9fd2FpdGlkYC4gRmlyc3QsIEkgd2FudCB0byBtYWtlIHN1cmUgdGhleSdyZSBhY3R1YWxseSBlbnRyeXBvaW50cy5cblxuQWxyaWdodCwgZ29vZCwgYGlvX2V2ZW50ZmRfcmVnaXN0ZXJgIGlzIGluZGVlZCByZWFjaGFibGU7IGl0IGhvb2tzIGRpcmVjdGx5IGludG8gYElPUklOR19SRUdJU1RFUl9FVkVOVEZEYC4gTmV4dCwgYGlvX2Z1dGV4X3dhaXRgIGlzIHRoZXJlLCBhcyBhIHZhbGlkIGVudHJ5cG9pbnQgZm9yIGBJT1JJTkdfT1BfRlVURVhfV0FJVGAuIEFuZCB0aGUgdmVjdG9yIHZlcnNpb24sIGBpb19mdXRleHZfd2FpdGAsIGlzIGFsc28gYW4gQVBJIGVudHJ5cG9pbnQgdGllZCB0byBgSU9SSU5HX09QX0ZVVEVYX1dBSVRWYC4gTW92aW5nIG9uLCBgaW9fcG9sbF9hZGRgIGlzIGFsc28gcmVhY2hhYmxlIHZpYSBgSU9SSU5HX09QX1BPTExfQUREYC4gRmluYWxseSwgYGlvX3dhaXRpZGAgaXMgYWxzbyBhbiBBUEkgZW50cnlwb2ludCBhc3NvY2lhdGVkIHdpdGggYElPUklOR19PUF9XQUlUSURgLlxuXG5Ob3csIGxldCdzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZvcnR1bmF0ZWx5LCBgSU9fVVJJTkdgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyB0aGF0J3MgYSBwbHVzLiBgRVBPTExgIGlzIGFsc28gdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGBGVVRFWGAgYXMgd2VsbC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIG1ham9yaXR5IG9mIHBvdGVudGlhbCBwcmUtcmVxdWlzaXRlcy5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBgaW9fZXZlbnRmZF9yZWdpc3RlcmAsIGxldCdzIGNoZWNrIGl0IG91dCBpbiBgaW9fdXJpbmcvZXZlbnRmZC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OToxNC43NzQ3NjA0NjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODMxNDc5MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fZXZlbnRmZF9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9ldmVudGZkLmM9NzY9dm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpXFxuLS1cXG5pb191cmluZy9ldmVudGZkLmMtMTE5LVxcbmlvX3VyaW5nL2V2ZW50ZmQuYzoxMjA6aW50IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuaW9fdXJpbmcvZXZlbnRmZC5jLTEyMS1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYylcXG4tLVxcbmlvX3VyaW5nL2V2ZW50ZmQuaD0zPXN0cnVjdCBpb19yaW5nX2N0eDtcXG5pb191cmluZy9ldmVudGZkLmg6NDppbnQgaW9fZXZlbnRmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG5pb191cmluZy9ldmVudGZkLmgtNS1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYyk7XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jPTc1MD1zdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODA0LVxcdFxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6ODA1OlxcdFxcdHJldCA9IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoY3R4LCBhcmcsIDApO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODA2LVxcdFxcdGJyZWFrO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy04MTAtXFx0XFx0XFx0YnJlYWs7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo4MTE6XFx0XFx0cmV0ID0gaW9fZXZlbnRmZF9yZWdpc3RlcihjdHgsIGFyZywgMSk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy04MTItXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjE2LjI1NzkxMjczM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc3Nzk3ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgRGVmZXJyZWQgRXZlbnRmZCBTaWduYWxpbmcgaW4gaW9fdXJpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIGB0YXNrX3dvcmtgIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyIGhhcyB0aGUgcG90ZW50aWFsIHRvIGltcGFjdCBjb3JlIGlvX3VyaW5nIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGZ1dGV4IHdhaXQsIHBvbGwsIGFuZCB3YWl0aWQgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IHdoZW4gdGhleSdyZSBpbnRlcmFjdGluZyB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gVGhlc2UgYXJlIGNyaXRpY2FsIGFyZWFzIHdoZXJlIGRlZmVycmVkIHNpZ25hbGluZyBjb3VsZCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMsIHJhY2UgY29uZGl0aW9ucywgb3IgZXZlbiBuYXN0eSBkZWFkbG9ja3MuXG5cbk15IHBsYW4gaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGVzZSBpb191cmluZyBvcGVyYXRpb25zLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYGlvX2V2ZW50ZmRfcmVnaXN0ZXJgLCBgaW9fZnV0ZXhfd2FpdGAsIGBpb19mdXRleHZfd2FpdGAsIGBpb19wb2xsX2FkZGAsIGFuZCBgaW9fd2FpdGlkYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY292ZXJhZ2Ugb2YgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuXG5cbkknbGwgZW5hYmxlIHRoZSBmb2xsb3dpbmcga2VybmVsIGNvbmZpZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIG15IGZ1enppbmcgY2FtcGFpZ246IGBJT19VUklOR2AsIGBFVkVOVEZEYCwgYEZVVEVYYCwgYW5kIGBFUE9MTGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCByaWdodCBjb25maWcgbmFtZXMgdGhvdWdoLiBJIGNhbid0IGJlIHRvbyBjYXJlZnVsIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3OSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OToyMS4zMzU3MTM4OTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODU4NjA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVWRU5URkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4Nzg9Y29uZmlnIFRJTUVSRkRcXG4tLVxcbmluaXQvS2NvbmZpZy0xODg2LVxcbmluaXQvS2NvbmZpZzoxODg3OmNvbmZpZyBFVkVOVEZEXFxuaW5pdC9LY29uZmlnLTE4ODgtXFx0Ym9vbCBcXFwiRW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjIyLjgyMTU3OTQyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODAzNDI4ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTE1NTMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjI0LjYyNTAxMDY0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5ODU2MjgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVBPTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xODYxLVxcbmluaXQvS2NvbmZpZzoxODYyOmNvbmZpZyBFUE9MTFxcbmluaXQvS2NvbmZpZy0xODYzLVxcdGJvb2wgXFxcIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjI3LjMyMzU3Nzk4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDc1NDQwODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTE2NTAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjI5Ljc5OTAyMTExMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NjIxNDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVURVhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4MjQ9Y29uZmlnIEJBU0VfU01BTExcXG4tLVxcbmluaXQvS2NvbmZpZy0xODMwLVxcbmluaXQvS2NvbmZpZzoxODMxOmNvbmZpZyBGVVRFWFxcbmluaXQvS2NvbmZpZy0xODMyLVxcdGJvb2wgXFxcIkVuYWJsZSBmdXRleCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZy0xODQwLVxcbmluaXQvS2NvbmZpZzoxODQxOmNvbmZpZyBGVVRFWF9QSVxcbmluaXQvS2NvbmZpZy0xODQyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xODQ1LVxcbmluaXQvS2NvbmZpZzoxODQ2OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG5pbml0L0tjb25maWctMTg0Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTg1MC1cXG5pbml0L0tjb25maWc6MTg1MTpjb25maWcgRlVURVhfTVBPTFxcbmluaXQvS2NvbmZpZy0xODUyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZz0xODU2PWNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xODU4LVxcbmluaXQvS2NvbmZpZzoxODU5OmNvbmZpZyBGVVRFWF9ST0JVU1RfVU5MT0NLXFxuaW5pdC9LY29uZmlnLTE4NjAtXFx0ZGVmX2Jvb2wgRlVURVggXFx1MDAyNlxcdTAwMjYgSEFWRV9HRU5FUklDX1ZEU08gXFx1MDAyNlxcdTAwMjYgR0VORVJJQ19JUlFfRU5UUlkgXFx1MDAyNlxcdTAwMjYgUlNFUSBcXHUwMDI2XFx1MDAyNiBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6MzEuMjY1MjQwMDcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODExNzU2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBtZXRpY3Vsb3VzbHkgcmV2aWV3ZWQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCB5ZXMsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCBmcm9tIG15IHBlcnNwZWN0aXZlLiBJJ20gc2F0aXNmaWVkIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUsIGJ1dCBJIGFsd2F5cyB0YWtlIGEgc2Vjb25kIGxvb2suIExldCdzIGp1c3QgY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIGFuZCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIG9wZXJhdGlvbnMgaW4gcGxheS5cblxuUmlnaHQsIHRoZSBwYXRjaCBpcyBtYWtpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9uczogYGlvX2Z1dGV4X3dha2V2X2ZuYCBpcyB0cmFuc2l0aW9uaW5nIHRvIGBpb19mdXRleHZfd2FpdGAsIGBpb19mdXRleF93YWtlX2ZuYCBpcyBiZWNvbWluZyBgaW9fZnV0ZXhfd2FpdGAsIGBpb19wb2xsX3dha2VgIGlzIGV2b2x2aW5nIGludG8gYGlvX3BvbGxfYWRkYCwgYW5kIGBpb19wb2xsZnJlZV93YWtlYCBpcyBhbHNvIGJlY29taW5nIGBpb19wb2xsX2FkZGAgYW5kIGZpbmFsbHkgYGlvX3dhaXRpZF93YWl0YCBpcyBjaGFuZ2luZyBpbnRvIGBpb193YWl0aWRgLiBUaGF0IGNvbmZpcm1zIHRoYXQgdGhlIGNydWNpYWwgc3ltYm9scyBhcmUgYmVpbmcgYXBwcm9wcmlhdGVseSB1cGRhdGVkIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcuXG5cbldpdGggdGhhdCBjb25maXJtYXRpb24sIEknbSByZWFkeSB0byBwcm9jZWVkLiBUaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTc0LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OTozNS44NDY0MTgzMjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTkwODUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJFUE9MTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2V2ZW50ZmRfcmVnaXN0ZXJcIixcbiAgICBcImlvX2Z1dGV4X3dhaXRcIixcbiAgICBcImlvX2Z1dGV4dl93YWl0XCIsXG4gICAgXCJpb19wb2xsX2FkZFwiLFxuICAgIFwiaW9fd2FpdGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgYWZmZWN0cyBjb3JlIGlvX3VyaW5nIG9wZXJhdGlvbnMgdGhhdCB1c2Ugd2FpdHF1ZXVlcywgc3VjaCBhcyBmdXRleCB3YWl0LCBwb2xsLCBhbmQgd2FpdGlkLCB3aGVuIGNvbWJpbmVkIHdpdGggZXZlbnRmZCBub3RpZmljYXRpb25zLiBGdXp6aW5nIHRoZXNlIHNwZWNpZmljIG9wZXJhdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZGVmZXJyZWQgc2lnbmFsaW5nIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJFVkVOVEZEXCIsXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19ldmVudGZkX3JlZ2lzdGVyXCIsXG4gICAgXCJpb19mdXRleF93YWl0XCIsXG4gICAgXCJpb19mdXRleHZfd2FpdFwiLFxuICAgIFwiaW9fcG9sbF9hZGRcIixcbiAgICBcImlvX3dhaXRpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6MzUuOTIyMzM0NjgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4ODA3Njc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjM1LjkyMjgxNDEyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjg4NzU5MjQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IGxvY2sgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MgdGhyb3VnaCBlcG9sbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmQwNGQ3NDc0ZWVmYTA4NTA2NThjNjhiMjA5MzJkMGU2YWY1MTEyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDIzOjQ4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5pbmRleCBhMmM2MjNhNjdhMjUxLi5mNmU5MGNjNjRhMWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbkBAIC0yMCw2ICsyMCwxNCBAQCBlbnVtIHtcbiBcdCAqIEl0J3MgYWxzbyBpZ25vcmVkIHVubGVzcyBJT1JJTkdfU0VUVVBfREVGRVJfVEFTS1JVTiBpcyBzZXQuXG4gXHQgKi9cbiBcdElPVV9GX1RXUV9MQVpZX1dBS0VcdFx0XHQ9IDEsXG4rXG4rXHQvKlxuK1x0ICogU2V0IHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLCB3aGVyZVxuK1x0ICogYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGlzIGhlbGQuIFNpZ25hbGluZyB0aGUgQ1EgcmluZ1xuK1x0ICogZXZlbnRmZCBpbmxpbmUgZnJvbSB0aGVyZSBjYW4gcmVjdXJzZSBiYWNrIGludG8gdGhhdCBsb2NrIHRocm91Z2hcbitcdCAqIGVwb2xsLCBzbyB0aGUgZXZlbnRmZCBzaWduYWwgbXVzdCBiZSBkZWZlcnJlZC5cbitcdCAqL1xuK1x0SU9VX0ZfVFdRX0lOX1dBS0VcdFx0XHQ9IDIsXG4gfTtcbiBcbiBlbnVtIGlvX3VyaW5nX2NtZF9mbGFncyB7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZXZlbnRmZC5jIGIvaW9fdXJpbmcvZXZlbnRmZC5jXG5pbmRleCBkNjU2Y2MyYTBiOWJhLi42M2ZlNmU1ZDc5YmFkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZXZlbnRmZC5jXG4rKysgYi9pb191cmluZy9ldmVudGZkLmNcbkBAIC01MSw5ICs1MSw5IEBAIHN0YXRpYyB2b2lkIGlvX2V2ZW50ZmRfZG9fc2lnbmFsKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIC8qXG4gICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHB1dCB0aGUgZXZfZmQgcmVmZXJlbmNlLCBmYWxzZSBpZiBub3QuXG4gICovXG4tc3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKVxuK3N0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZCwgYm9vbCBkZWZlcilcbiB7XG4tXHRpZiAoZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4rXHRpZiAoIWRlZmVyIFx1MDAyNlx1MDAyNiBldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHtcbiBcdFx0ZXZlbnRmZF9zaWduYWxfbWFzayhldl9mZC1cdTAwM2VjcV9ldl9mZCwgRVBPTExfVVJJTkdfV0FLRSk7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGJvb2wgaW9fZXZlbnRmZF90cmlnZ2VyKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXG4gXHRyZXR1cm4gIWV2X2ZkLVx1MDAzZWV2ZW50ZmRfYXN5bmMgfHwgaW9fd3FfY3VycmVudF9pc193b3JrZXIoKTtcbiB9XG4gXG4tdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpXG4rdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpXG4ge1xuIFx0Ym9vbCBza2lwID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkO1xuQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudClcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jayk7XG4gXHR9XG4gXG4tXHRpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkKSlcbitcdGlmIChza2lwIHx8IF9faW9fZXZlbnRmZF9zaWduYWwoZXZfZmQsIGRlZmVyKSlcbiBcdFx0aW9fZXZlbnRmZF9wdXQoZXZfZmQpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pb191cmluZy9ldmVudGZkLmggYi9pb191cmluZy9ldmVudGZkLmhcbmluZGV4IDQwMGVkYTRhNDE2NWEuLmU5NjVkODBkOWZkYzYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9ldmVudGZkLmhcbisrKyBiL2lvX3VyaW5nL2V2ZW50ZmQuaFxuQEAgLTUsNCArNSw0IEBAIGludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdHVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTtcbiBpbnQgaW9fZXZlbnRmZF91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcbiBcbi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCk7XG4rdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jXG5pbmRleCBmMGQ4MGE0NDRmNDVlLi5lYWVlMTQyNDJhM2EzIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZnV0ZXguY1xuKysrIGIvaW9fdXJpbmcvZnV0ZXguY1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtldl9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpXG4gXG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xuLVx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbitcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gfVxuIFxuIGludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcbi1cdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4rXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIH1cbiBcbiBpbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuaW5kZXggNGM4M2E5NGI0YmRjMy4uNzZmMDQ5ZTI5YWEyZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmNcbisrKyBiL2lvX3VyaW5nL2lvX3VyaW5nLmNcbkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX09GRl9USU1FT1VUX1VTRUQpXG4gXHRcdGlvX2ZsdXNoX3RpbWVvdXRzKGN0eCk7XG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX0hBU19FVkZEKVxuLVx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUpO1xuK1x0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fY3FfbG9jayhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmRpZmYgLS1naXQgYS9pb191cmluZy9wb2xsLmMgYi9pb191cmluZy9wb2xsLmNcbmluZGV4IDAyMDRhZmZkYzMwOGMuLjU0NDdhN2MyNGRjZTYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9wb2xsLmNcbisrKyBiL2lvX3VyaW5nL3BvbGwuY1xuQEAgLTIwOCw5ICsyMDgsOSBAQCBlbnVtIHtcbiBcdElPVV9QT0xMX1JFUVVFVUUgPSA0LFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKVxuK3N0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaywgdW5zaWduZWQgdHdfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgZmxhZ3MgPSAwO1xuK1x0dW5zaWduZWQgZmxhZ3MgPSB0d19mbGFncztcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgbWFzaywgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19wb2xsX3Rhc2tfZnVuYztcbkBAIC0yMTgsMTQgKzIxOCwxNSBAQCBzdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spXG4gXHR0cmFjZV9pb191cmluZ190YXNrX2FkZChyZXEsIG1hc2spO1xuIFxuIFx0aWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9QT0xMX05PX0xBWlkpKVxuLVx0XHRmbGFncyA9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4rXHRcdGZsYWdzIHw9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4gXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXMsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCB0d19mbGFncylcbiB7XG4gXHRpZiAoaW9fcG9sbF9nZXRfb3duZXJzaGlwKHJlcSkpXG4tXHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMsIHR3X2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC0zNDQsNyArMzQ1LDcgQEAgdm9pZCBpb19wb2xsX3Rhc2tfZnVuYyhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdGlmIChyZXQgPT0gSU9VX1BPTExfTk9fQUNUSU9OKSB7XG4gXHRcdHJldHVybjtcbiBcdH0gZWxzZSBpZiAocmV0ID09IElPVV9QT0xMX1JFUVVFVUUpIHtcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFx0aW9fcG9sbF9yZW1vdmVfZW50cmllcyhyZXEpO1xuQEAgLTM4Myw3ICszODQsNyBAQCBzdGF0aWMgdm9pZCBpb19wb2xsX2NhbmNlbF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4ge1xuIFx0aW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpO1xuIFx0Lyoga2ljayB0dywgd2hpY2ggc2hvdWxkIGNvbXBsZXRlIHRoZSByZXF1ZXN0ICovXG4tXHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbitcdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xuIH1cbiBcbiAjZGVmaW5lIElPX0FTWU5DX1BPTExfQ09NTU9OXHQoRVBPTExPTkVTSE9UIHwgRVBPTExQUkkpXG5AQCAtMzkyLDcgKzM5Myw3IEBAIHN0YXRpYyBfX2NvbGQgaW50IGlvX3BvbGxmcmVlX3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19wb2xsICpwb2xsKVxuIHtcbiBcdGlvX3BvbGxfbWFya19jYW5jZWxsZWQocmVxKTtcbiBcdC8qIHdlIGhhdmUgdG8ga2ljayB0dyBpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkgKi9cbi1cdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xuK1x0aW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIFx0aW9fcG9sbF9yZW1vdmVfd2FpdHEocG9sbCk7XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNDMwLDcgKzQzMSw3IEBAIHN0YXRpYyBpbnQgaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYyxcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UkVRX0ZfU0lOR0xFX1BPTEw7XG4gXHRcdH1cbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNjE4LDcgKzYxOSw3IEBAIHN0YXRpYyBpbnQgX19pb19hcm1fcG9sbF9oYW5kbGVyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFxuIFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2IChwb2xsLVx1MDAzZWV2ZW50cyBcdTAwMjYgRVBPTExFVCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaW9fcG9sbF9jYW5fZmluaXNoX2lubGluZShyZXEsIGlwdCkpIHtcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCAwKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpb19uYXBpX2FkZChyZXEpO1xuQEAgLTYyOSw3ICs2MzAsNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0ICogcG9sbCB3YXMgd2FrZW4gdXAsIHF1ZXVlIHVwIGEgdHcsIGl0J2xsIGRlYWwgd2l0aCBpdC5cbiBcdFx0ICovXG4gXHRcdGlmIChhdG9taWNfY21weGNoZyhcdTAwMjZyZXEtXHUwMDNlcG9sbF9yZWZzLCAxLCAwKSAhPSAxKVxuLVx0XHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7XG4rXHRcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pb191cmluZy90dy5jIGIvaW9fdXJpbmcvdHcuY1xuaW5kZXggYTRjODcyODcwZDgxYy4uYmY0ZTVhYTVjMmU3ZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3R3LmNcbisrKyBiL2lvX3VyaW5nL3R3LmNcbkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBpb19yZXFfbG9jYWxfd29ya19hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGZsYWdzKVxuIFx0aWYgKG1wc2NxX3B1c2goXHUwMDI2Y3R4LVx1MDAzZXdvcmtfbGlzdCwgXHUwMDI2cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5ub2RlKSkge1xuIFx0XHRpb19jdHhfbWFya190YXNrcnVuKGN0eCk7XG4gXHRcdGlmIChkYXRhX3JhY2UoY3R4LVx1MDAzZWludF9mbGFncykgXHUwMDI2IElPX1JJTkdfRl9IQVNfRVZGRClcbi1cdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlKTtcbitcdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlLCBmbGFncyBcdTAwMjYgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIFx0fVxuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi43NmFmMTI5YmE4Y2FkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbisrKyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgaW9fd2FpdGlkX3dhaXQoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fd2FpdGlkX2NiO1xuLVx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbitcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OTozNS45MjI4MTQ5MzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4ODc1NjI3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgaW9fdXJpbmdgIHRoYXQgaW50cm9kdWNlcyBgSU9VX0ZfVFdRX0lOX1dBS0VgIGFuZCBtb2RpZmllcyBgaW9fZXZlbnRmZF9zaWduYWxgIHRvIGFjY2VwdCBhIGBkZWZlcmAgcGFyYW1ldGVyLiBUaGUgZmlsZXMgYWZmZWN0ZWQgYXJlIGBpb191cmluZy9ldmVudGZkLmNgLCBgaW9fdXJpbmcvZnV0ZXguY2AsIGBpb191cmluZy9pb191cmluZy5jYCwgYGlvX3VyaW5nL3BvbGwuY2AsIGBpb191cmluZy90dy5jYCwgYW5kIGBpb191cmluZy93YWl0aWQuY2AuIE15IGpvYiBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBzcGVjaWZpY2FsbHkgaWYgaXQgaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczpcblxuKiAgIFdlJ3ZlIGFkZGVkIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gdGhlIGVudW0gaW4gYGluY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaGAuIFNpbXBsZSBlbm91Z2guXG4qICAgYF9faW9fZXZlbnRmZF9zaWduYWxgIG5vdyB0YWtlcyBhIGBkZWZlcmAgYm9vbGVhbi4gSWYgYGRlZmVyYCBpcyB0cnVlLCB0aGUgc2lnbmFsIG1hc2sgaXMgc2tpcHBlZCwgYW5kIGl0IHJldHVybnMgZmFsc2UuIFRoaXMgaXMgYSBjcnVjaWFsIGNvbnRyb2wgZmxvdyBjaGFuZ2UuXG4qICAgYGlvX2V2ZW50ZmRfc2lnbmFsYCBub3cgYWxzbyB0YWtlcyBgZGVmZXJgIGFuZCBwYXNzZXMgaXQgYWxvbmcuXG4qICAgYGlvX2Z1dGV4X3dha2V2X2ZuYCBhbmQgYGlvX2Z1dGV4X3dha2VfZm5gIGFyZSB1c2luZyBgX19pb19yZXFfdGFza193b3JrX2FkZGAgd2l0aCBgSU9VX0ZfVFdRX0lOX1dBS0VgLlxuKiAgIGBpb19wb2xsX2V4ZWN1dGVgIGFuZCBgX19pb19wb2xsX2V4ZWN1dGVgIG5vdyB1c2UgYHR3X2ZsYWdzYCB3aXRoIGBfX2lvX3JlcV90YXNrX3dvcmtfYWRkYC5cbiogICBgaW9fcG9sbF93YWtlYCwgYGlvX3BvbGxmcmVlX3dha2VgIG5vdyBwYXNzIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gYF9faW9fcG9sbF9leGVjdXRlYC5cbiogICBgaW9fcmVxX2xvY2FsX3dvcmtfYWRkYCBwYXNzZXMgYGZsYWdzIFx1MDAyNiBJT1VfRl9UV1FfSU5fV0FLRWAgYXMgYGRlZmVyYCB0byBgaW9fZXZlbnRmZF9zaWduYWxgLlxuKiAgIGBpb193YWl0aWRfd2FpdGAgdXNlcyBgX19pb19yZXFfdGFza193b3JrX2FkZGAgd2l0aCBgSU9VX0ZfVFdRX0lOX1dBS0VgLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgYXZvaWRpbmcgYSBwb3RlbnRpYWwgZGVhZGxvY2sgYnkgZGVmZXJyaW5nIHRoZSBgZXZlbnRmZGAgc2lnbmFsaW5nIHdoZW4gdGFzayB3b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGUgZ29hbCBpcyB0byBhdm9pZCByZWN1cnNpbmcgYmFjayBpbnRvIHRoZSB3YWl0cXVldWUgbG9jayB0aHJvdWdoIGVwb2xsLCBzbyBpdCdzIGEgbG9ja2luZy9kZWFkbG9jayBmaXgsIHB1cmUgYW5kIHNpbXBsZS5cblxuQ3J1Y2lhbGx5LCBpdCAqKmRvZXNuJ3QqKiBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgYWJvdXQgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZy4gSXTigJlzIHN0cmljdGx5IGFib3V0ICp3aGVuKiBhbiBldmVudGZkIGlzIHNpZ25hbGVkLCBkZWZlcnJpbmcgaXQgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAod2l0aCB0aGUgYElPVV9GX1RXUV9JTl9XQUtFYCBmbGFnKS5cblxuR2l2ZW4gdGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgbW9kaWZpY2F0aW9uIGRlc2lnbmVkIHRvIHByZXZlbnQgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MsIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBzdWNoIGFzIGRlYWRsb2NrcyBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBJJ20gcmVhc29uYWJseSBjZXJ0YWluIHRoZXJlIGlzIG5vIG5ldywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBoZXJlLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCBgZGVmZXJgIGlzIGp1c3QgYSBib29sZWFuLiBgSU9VX0ZfVFdRX0lOX1dBS0VgIGlzIGEgY29uc3RhbnQuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0cyBvciBmaWVsZHMgYmVpbmcgYWRkZWQgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIFdlIGFyZSBub3QgbW9kaWZ5aW5nIGJvdW5kcyBjaGVja3MsIG5vciBhcmUgd2UgYWxsb2NhdGluZyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAsIGFuZCBJIHdpbGwgZG9jdW1lbnQgdGhpcyByYXRpb25hbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODMsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6NDguODEwMzgyMDE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgY2hhbmdlIGRlc2lnbmVkIHRvIHByZXZlbnQgbG9jayByZWN1cnNpb24gYW5kIGRlYWRsb2NrcyB0aHJvdWdoIGVwb2xsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLCBzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgY2hhbmdlIGRlc2lnbmVkIHRvIHByZXZlbnQgbG9jayByZWN1cnNpb24gYW5kIGRlYWRsb2NrcyB0aHJvdWdoIGVwb2xsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLCBzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow86kgb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-15 23:08:34 +0000 UTC FinishedAt: 2026-08-15 23:49:50 +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": "3f3a6a16bbe8bde76532d9415438f8cdef439e5d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "EVENTFD", "FUTEX", "EPOLL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "3f3a6a16bbe8bde76532d9415438f8cdef439e5d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING", "EVENTFD", "FUTEX", "EPOLL" ], "series_id": "2b498d0f-13eb-428d-8e25-2cdb06eeda4f" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_eventfd_register", "io_futex_wait", "io_futexv_wait", "io_poll_add", "io_waitid" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fZnV0ZXh2X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fcG9sbF9hZGQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IGxvY2sgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MgdGhyb3VnaCBlcG9sbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZDA0ZDc0NzRlZWZhMDg1MDY1OGM2OGIyMDkzMmQwZTZhZjUxMTIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMTUgMjM6NDg6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5pbmRleCBhMmM2MjNhNjdhMjUxLi5mNmU5MGNjNjRhMWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbkBAIC0yMCw2ICYjNDM7MjAsMTQgQEAgZW51bSB7XG4gXHQgKiBJdCYjMzk7cyBhbHNvIGlnbm9yZWQgdW5sZXNzIElPUklOR19TRVRVUF9ERUZFUl9UQVNLUlVOIGlzIHNldC5cbiBcdCAqL1xuIFx0SU9VX0ZfVFdRX0xBWllfV0FLRVx0XHRcdD0gMSxcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIsIHdoZXJlXG4mIzQzO1x0ICogYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGlzIGhlbGQuIFNpZ25hbGluZyB0aGUgQ1EgcmluZ1xuJiM0MztcdCAqIGV2ZW50ZmQgaW5saW5lIGZyb20gdGhlcmUgY2FuIHJlY3Vyc2UgYmFjayBpbnRvIHRoYXQgbG9jayB0aHJvdWdoXG4mIzQzO1x0ICogZXBvbGwsIHNvIHRoZSBldmVudGZkIHNpZ25hbCBtdXN0IGJlIGRlZmVycmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdElPVV9GX1RXUV9JTl9XQUtFXHRcdFx0PSAyLFxuIH07XG4gXG4gZW51bSBpb191cmluZ19jbWRfZmxhZ3Mge1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuYyBiL2lvX3VyaW5nL2V2ZW50ZmQuY1xuaW5kZXggZDY1NmNjMmEwYjliYS4uNjNmZTZlNWQ3OWJhZCAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZXZlbnRmZC5jXG5AQCAtNTEsOSAmIzQzOzUxLDkgQEAgc3RhdGljIHZvaWQgaW9fZXZlbnRmZF9kb19zaWduYWwoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gLypcbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgcHV0IHRoZSBldl9mZCByZWZlcmVuY2UsIGZhbHNlIGlmIG5vdC5cbiAgKi9cbi1zdGF0aWMgYm9vbCBfX2lvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXG4mIzQzO3N0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZCwgYm9vbCBkZWZlcilcbiB7XG4tXHRpZiAoZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4mIzQzO1x0aWYgKCFkZWZlciBcdTAwMjZcdTAwMjYgZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4gXHRcdGV2ZW50ZmRfc2lnbmFsX21hc2soZXZfZmQtXHUwMDNlY3FfZXZfZmQsIEVQT0xMX1VSSU5HX1dBS0UpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdGF0aWMgYm9vbCBpb19ldmVudGZkX3RyaWdnZXIoc3RydWN0IGlvX2V2X2ZkICpldl9mZClcbiBcdHJldHVybiAhZXZfZmQtXHUwMDNlZXZlbnRmZF9hc3luYyB8fCBpb193cV9jdXJyZW50X2lzX3dvcmtlcigpO1xuIH1cbiBcbi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudClcbiYjNDM7dm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpXG4ge1xuIFx0Ym9vbCBza2lwID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkO1xuQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpXG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2Vjb21wbGV0aW9uX2xvY2spO1xuIFx0fVxuIFxuLVx0aWYgKHNraXAgfHwgX19pb19ldmVudGZkX3NpZ25hbChldl9mZCkpXG4mIzQzO1x0aWYgKHNraXAgfHwgX19pb19ldmVudGZkX3NpZ25hbChldl9mZCwgZGVmZXIpKVxuIFx0XHRpb19ldmVudGZkX3B1dChldl9mZCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuaCBiL2lvX3VyaW5nL2V2ZW50ZmQuaFxuaW5kZXggNDAwZWRhNGE0MTY1YS4uZTk2NWQ4MGQ5ZmRjNiAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZXZlbnRmZC5oXG5AQCAtNSw0ICYjNDM7NSw0IEBAIGludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdHVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTtcbiBpbnQgaW9fZXZlbnRmZF91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcbiBcbi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCk7XG4mIzQzO3ZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKTtcbmRpZmYgLS1naXQgYS9pb191cmluZy9mdXRleC5jIGIvaW9fdXJpbmcvZnV0ZXguY1xuaW5kZXggZjBkODBhNDQ0ZjQ1ZS4uZWFlZTE0MjQyYTNhMyAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2Z1dGV4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2Z1dGV4LmNcbkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2V2X2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleHZfY29tcGxldGU7XG4tXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xuJiM0MztcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gfVxuIFxuIGludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuQEAgLTIzNyw3ICYjNDM7MjM3LDcgQEAgc3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZV9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpXG4gXG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXhfY29tcGxldGU7XG4tXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xuJiM0MztcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gfVxuIFxuIGludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvX3VyaW5nLmMgYi9pb191cmluZy9pb191cmluZy5jXG5pbmRleCA0YzgzYTk0YjRiZGMzLi43NmYwNDllMjlhYTJlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvaW9fdXJpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuQEAgLTQ3NSw3ICYjNDM7NDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX09GRl9USU1FT1VUX1VTRUQpXG4gXHRcdGlvX2ZsdXNoX3RpbWVvdXRzKGN0eCk7XG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX0hBU19FVkZEKVxuLVx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUpO1xuJiM0MztcdFx0aW9fZXZlbnRmZF9zaWduYWwoY3R4LCB0cnVlLCBmYWxzZSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvX2NxX2xvY2soc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcG9sbC5jIGIvaW9fdXJpbmcvcG9sbC5jXG5pbmRleCAwMjA0YWZmZGMzMDhjLi41NDQ3YTdjMjRkY2U2IDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvcG9sbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9wb2xsLmNcbkBAIC0yMDgsOSAmIzQzOzIwOCw5IEBAIGVudW0ge1xuIFx0SU9VX1BPTExfUkVRVUVVRSA9IDQsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spXG4mIzQzO3N0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaywgdW5zaWduZWQgdHdfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgZmxhZ3MgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGZsYWdzID0gdHdfZmxhZ3M7XG4gXG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIG1hc2ssIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fcG9sbF90YXNrX2Z1bmM7XG5AQCAtMjE4LDE0ICYjNDM7MjE4LDE1IEBAIHN0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaylcbiBcdHRyYWNlX2lvX3VyaW5nX3Rhc2tfYWRkKHJlcSwgbWFzayk7XG4gXG4gXHRpZiAoIShyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX1BPTExfTk9fTEFaWSkpXG4tXHRcdGZsYWdzID0gSU9VX0ZfVFdRX0xBWllfV0FLRTtcbiYjNDM7XHRcdGZsYWdzIHw9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4gXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIHR3X2ZsYWdzKVxuIHtcbiBcdGlmIChpb19wb2xsX2dldF9vd25lcnNoaXAocmVxKSlcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMpO1xuJiM0MztcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMsIHR3X2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC0zNDQsNyAmIzQzOzM0NSw3IEBAIHZvaWQgaW9fcG9sbF90YXNrX2Z1bmMoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRpZiAocmV0ID09IElPVV9QT0xMX05PX0FDVElPTikge1xuIFx0XHRyZXR1cm47XG4gXHR9IGVsc2UgaWYgKHJldCA9PSBJT1VfUE9MTF9SRVFVRVVFKSB7XG4tXHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7XG4mIzQzO1x0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXHRpb19wb2xsX3JlbW92ZV9lbnRyaWVzKHJlcSk7XG5AQCAtMzgzLDcgJiM0MzszODQsNyBAQCBzdGF0aWMgdm9pZCBpb19wb2xsX2NhbmNlbF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4ge1xuIFx0aW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpO1xuIFx0Lyoga2ljayB0dywgd2hpY2ggc2hvdWxkIGNvbXBsZXRlIHRoZSByZXF1ZXN0ICovXG4tXHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbiYjNDM7XHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiB9XG4gXG4gI2RlZmluZSBJT19BU1lOQ19QT0xMX0NPTU1PTlx0KEVQT0xMT05FU0hPVCB8IEVQT0xMUFJJKVxuQEAgLTM5Miw3ICYjNDM7MzkzLDcgQEAgc3RhdGljIF9fY29sZCBpbnQgaW9fcG9sbGZyZWVfd2FrZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX3BvbGwgKnBvbGwpXG4ge1xuIFx0aW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpO1xuIFx0Lyogd2UgaGF2ZSB0byBraWNrIHR3IGluIGNhc2UgaXQmIzM5O3Mgbm90IGFscmVhZHkgKi9cbi1cdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xuJiM0MztcdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIElPVV9GX1RXUV9JTl9XQUtFKTtcbiBcdGlvX3BvbGxfcmVtb3ZlX3dhaXRxKHBvbGwpO1xuIFx0cmV0dXJuIDE7XG4gfVxuQEAgLTQzMCw3ICYjNDM7NDMxLDcgQEAgc3RhdGljIGludCBpb19wb2xsX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLFxuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdHJlcS1cdTAwM2VmbGFncyBcdTAwMjY9IH5SRVFfRl9TSU5HTEVfUE9MTDtcbiBcdFx0fVxuLVx0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2spO1xuJiM0MztcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNjE4LDcgJiM0Mzs2MTksNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcbiBcdGlmIChtYXNrIFx1MDAyNlx1MDAyNiAocG9sbC1cdTAwM2VldmVudHMgXHUwMDI2IEVQT0xMRVQpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlvX3BvbGxfY2FuX2ZpbmlzaF9pbmxpbmUocmVxLCBpcHQpKSB7XG4tXHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgbWFzayk7XG4mIzQzO1x0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2ssIDApO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGlvX25hcGlfYWRkKHJlcSk7XG5AQCAtNjI5LDcgJiM0Mzs2MzAsNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0ICogcG9sbCB3YXMgd2FrZW4gdXAsIHF1ZXVlIHVwIGEgdHcsIGl0JiMzOTtsbCBkZWFsIHdpdGggaXQuXG4gXHRcdCAqL1xuIFx0XHRpZiAoYXRvbWljX2NtcHhjaGcoXHUwMDI2cmVxLVx1MDAzZXBvbGxfcmVmcywgMSwgMCkgIT0gMSlcbi1cdFx0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xuJiM0MztcdFx0XHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3R3LmMgYi9pb191cmluZy90dy5jXG5pbmRleCBhNGM4NzI4NzBkODFjLi5iZjRlNWFhNWMyZTdlIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvdHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdHcuY1xuQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgdm9pZCBpb19yZXFfbG9jYWxfd29ya19hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGZsYWdzKVxuIFx0aWYgKG1wc2NxX3B1c2goXHUwMDI2Y3R4LVx1MDAzZXdvcmtfbGlzdCwgXHUwMDI2cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5ub2RlKSkge1xuIFx0XHRpb19jdHhfbWFya190YXNrcnVuKGN0eCk7XG4gXHRcdGlmIChkYXRhX3JhY2UoY3R4LVx1MDAzZWludF9mbGFncykgXHUwMDI2IElPX1JJTkdfRl9IQVNfRVZGRClcbi1cdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlKTtcbiYjNDM7XHRcdFx0aW9fZXZlbnRmZF9zaWduYWwoY3R4LCBmYWxzZSwgZmxhZ3MgXHUwMDI2IElPVV9GX1RXUV9JTl9XQUtFKTtcbiBcdH1cbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvd2FpdGlkLmMgYi9pb191cmluZy93YWl0aWQuY1xuaW5kZXggMzJmNjhmZDdmY2RkYS4uNzZhZjEyOWJhOGNhZCAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3dhaXRpZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy93YWl0aWQuY1xuQEAgLTI1Myw3ICYjNDM7MjUzLDcgQEAgc3RhdGljIGludCBpb193YWl0aWRfd2FpdChzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSxcbiBcdFx0cmV0dXJuIDE7XG4gXG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb193YWl0aWRfY2I7XG4tXHRpb19yZXFfdGFza193b3JrX2FkZChyZXEpO1xuJiM0MztcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fZnV0ZXh2X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fcG9sbF9hZGQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZDA0ZDc0NzRlZWZhMDg1MDY1OGM2OGIyMDkzMmQwZTZhZjUxMTIyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMTUgMjM6NDg6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKaW5kZXggYTJjNjIzYTY3YTI1MS4uZjZlOTBjYzY0YTFmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaApAQCAtMjAsNiAmIzQzOzIwLDE0IEBAIGVudW0gewogCSAqIEl0JiMzOTtzIGFsc28gaWdub3JlZCB1bmxlc3MgSU9SSU5HX1NFVFVQX0RFRkVSX1RBU0tSVU4gaXMgc2V0LgogCSAqLwogCUlPVV9GX1RXUV9MQVpZX1dBS0UJCQk9IDEsCiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNldCB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlciwgd2hlcmUKJiM0MzsJICogYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGlzIGhlbGQuIFNpZ25hbGluZyB0aGUgQ1EgcmluZwomIzQzOwkgKiBldmVudGZkIGlubGluZSBmcm9tIHRoZXJlIGNhbiByZWN1cnNlIGJhY2sgaW50byB0aGF0IGxvY2sgdGhyb3VnaAomIzQzOwkgKiBlcG9sbCwgc28gdGhlIGV2ZW50ZmQgc2lnbmFsIG11c3QgYmUgZGVmZXJyZWQuCiYjNDM7CSAqLwomIzQzOwlJT1VfRl9UV1FfSU5fV0FLRQkJCT0gMiwKIH07CiAKIGVudW0gaW9fdXJpbmdfY21kX2ZsYWdzIHsKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuYyBiL2lvX3VyaW5nL2V2ZW50ZmQuYwppbmRleCBkNjU2Y2MyYTBiOWJhLi42M2ZlNmU1ZDc5YmFkIDEwMDY0NAotLS0gYS9pb191cmluZy9ldmVudGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZXZlbnRmZC5jCkBAIC01MSw5ICYjNDM7NTEsOSBAQCBzdGF0aWMgdm9pZCBpb19ldmVudGZkX2RvX3NpZ25hbChzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKIC8qCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgcHV0IHRoZSBldl9mZCByZWZlcmVuY2UsIGZhbHNlIGlmIG5vdC4KICAqLwotc3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKQomIzQzO3N0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZCwgYm9vbCBkZWZlcikKIHsKLQlpZiAoZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7CiYjNDM7CWlmICghZGVmZXIgJmFtcDsmYW1wOyBldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHsKIAkJZXZlbnRmZF9zaWduYWxfbWFzayhldl9mZC0mZ3Q7Y3FfZXZfZmQsIEVQT0xMX1VSSU5HX1dBS0UpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC03Myw3ICYjNDM7NzMsNyBAQCBzdGF0aWMgYm9vbCBpb19ldmVudGZkX3RyaWdnZXIoc3RydWN0IGlvX2V2X2ZkICpldl9mZCkKIAlyZXR1cm4gIWV2X2ZkLSZndDtldmVudGZkX2FzeW5jIHx8IGlvX3dxX2N1cnJlbnRfaXNfd29ya2VyKCk7CiB9CiAKLXZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50KQomIzQzO3ZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKQogewogCWJvb2wgc2tpcCA9IGZhbHNlOwogCXN0cnVjdCBpb19ldl9mZCAqZXZfZmQ7CkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50KQogCQlzcGluX3VubG9jaygmYW1wO2N0eC0mZ3Q7Y29tcGxldGlvbl9sb2NrKTsKIAl9CiAKLQlpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkKSkKJiM0MzsJaWYgKHNraXAgfHwgX19pb19ldmVudGZkX3NpZ25hbChldl9mZCwgZGVmZXIpKQogCQlpb19ldmVudGZkX3B1dChldl9mZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuaCBiL2lvX3VyaW5nL2V2ZW50ZmQuaAppbmRleCA0MDBlZGE0YTQxNjVhLi5lOTY1ZDgwZDlmZGM2IDEwMDY0NAotLS0gYS9pb191cmluZy9ldmVudGZkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZXZlbnRmZC5oCkBAIC01LDQgJiM0Mzs1LDQgQEAgaW50IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsCiAJCQl1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYyk7CiBpbnQgaW9fZXZlbnRmZF91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTsKIAotdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpOwomIzQzO3ZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKTsKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jCmluZGV4IGYwZDgwYTQ0NGY0NWUuLmVhZWUxNDI0MmEzYTMgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2Z1dGV4LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvZnV0ZXguYwpAQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtldl9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpCiAKIAlpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApOwogCXJlcS0mZ3Q7aW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleHZfY29tcGxldGU7Ci0JaW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTsKJiM0MzsJX19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTsKIH0KIAogaW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCkBAIC0yMzcsNyAmIzQzOzIzNyw3IEBAIHN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2VfZm4oc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKQogCiAJaW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTsKIAlyZXEtJmd0O2lvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXhfY29tcGxldGU7Ci0JaW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTsKJiM0MzsJX19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTsKIH0KIAogaW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuYwppbmRleCA0YzgzYTk0YjRiZGMzLi43NmYwNDllMjlhYTJlIDEwMDY0NAotLS0gYS9pb191cmluZy9pb191cmluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL2lvX3VyaW5nLmMKQEAgLTQ3NSw3ICYjNDM7NDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpCiAJaWYgKGN0eC0mZ3Q7aW50X2ZsYWdzICZhbXA7IElPX1JJTkdfRl9PRkZfVElNRU9VVF9VU0VEKQogCQlpb19mbHVzaF90aW1lb3V0cyhjdHgpOwogCWlmIChjdHgtJmd0O2ludF9mbGFncyAmYW1wOyBJT19SSU5HX0ZfSEFTX0VWRkQpCi0JCWlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgdHJ1ZSk7CiYjNDM7CQlpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUsIGZhbHNlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9fY3FfbG9jayhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCkKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3BvbGwuYyBiL2lvX3VyaW5nL3BvbGwuYwppbmRleCAwMjA0YWZmZGMzMDhjLi41NDQ3YTdjMjRkY2U2IDEwMDY0NAotLS0gYS9pb191cmluZy9wb2xsLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvcG9sbC5jCkBAIC0yMDgsOSAmIzQzOzIwOCw5IEBAIGVudW0gewogCUlPVV9QT0xMX1JFUVVFVUUgPSA0LAogfTsKIAotc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKQomIzQzO3N0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaywgdW5zaWduZWQgdHdfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgZmxhZ3MgPSAwOwomIzQzOwl1bnNpZ25lZCBmbGFncyA9IHR3X2ZsYWdzOwogCiAJaW9fcmVxX3NldF9yZXMocmVxLCBtYXNrLCAwKTsKIAlyZXEtJmd0O2lvX3Rhc2tfd29yay5mdW5jID0gaW9fcG9sbF90YXNrX2Z1bmM7CkBAIC0yMTgsMTQgJiM0MzsyMTgsMTUgQEAgc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKQogCXRyYWNlX2lvX3VyaW5nX3Rhc2tfYWRkKHJlcSwgbWFzayk7CiAKIAlpZiAoIShyZXEtJmd0O2ZsYWdzICZhbXA7IFJFUV9GX1BPTExfTk9fTEFaWSkpCi0JCWZsYWdzID0gSU9VX0ZfVFdRX0xBWllfV0FLRTsKJiM0MzsJCWZsYWdzIHw9IElPVV9GX1RXUV9MQVpZX1dBS0U7CiAJX19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGlvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJlcykKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzLAomIzQzOwkJCQkgICB1bnNpZ25lZCB0d19mbGFncykKIHsKIAlpZiAoaW9fcG9sbF9nZXRfb3duZXJzaGlwKHJlcSkpCi0JCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzKTsKJiM0MzsJCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzLCB0d19mbGFncyk7CiB9CiAKIC8qCkBAIC0zNDQsNyAmIzQzOzM0NSw3IEBAIHZvaWQgaW9fcG9sbF90YXNrX2Z1bmMoc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJaWYgKHJldCA9PSBJT1VfUE9MTF9OT19BQ1RJT04pIHsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAocmV0ID09IElPVV9QT0xMX1JFUVVFVUUpIHsKLQkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTsKJiM0MzsJCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgMCk7CiAJCXJldHVybjsKIAl9CiAJaW9fcG9sbF9yZW1vdmVfZW50cmllcyhyZXEpOwpAQCAtMzgzLDcgJiM0MzszODQsNyBAQCBzdGF0aWMgdm9pZCBpb19wb2xsX2NhbmNlbF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpCiB7CiAJaW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpOwogCS8qIGtpY2sgdHcsIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB0aGUgcmVxdWVzdCAqLwotCWlvX3BvbGxfZXhlY3V0ZShyZXEsIDApOwomIzQzOwlpb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTsKIH0KIAogI2RlZmluZSBJT19BU1lOQ19QT0xMX0NPTU1PTgkoRVBPTExPTkVTSE9UIHwgRVBPTExQUkkpCkBAIC0zOTIsNyAmIzQzOzM5Myw3IEBAIHN0YXRpYyBfX2NvbGQgaW50IGlvX3BvbGxmcmVlX3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19wb2xsICpwb2xsKQogewogCWlvX3BvbGxfbWFya19jYW5jZWxsZWQocmVxKTsKIAkvKiB3ZSBoYXZlIHRvIGtpY2sgdHcgaW4gY2FzZSBpdCYjMzk7cyBub3QgYWxyZWFkeSAqLwotCWlvX3BvbGxfZXhlY3V0ZShyZXEsIDApOwomIzQzOwlpb19wb2xsX2V4ZWN1dGUocmVxLCAwLCBJT1VfRl9UV1FfSU5fV0FLRSk7CiAJaW9fcG9sbF9yZW1vdmVfd2FpdHEocG9sbCk7CiAJcmV0dXJuIDE7CiB9CkBAIC00MzAsNyAmIzQzOzQzMSw3IEBAIHN0YXRpYyBpbnQgaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywKIAkJCWVsc2UKIAkJCQlyZXEtJmd0O2ZsYWdzICZhbXA7PSB+UkVRX0ZfU0lOR0xFX1BPTEw7CiAJCX0KLQkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTsKJiM0MzsJCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgbWFzaywgSU9VX0ZfVFdRX0lOX1dBS0UpOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTYxOCw3ICYjNDM7NjE5LDcgQEAgc3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsCiAKIAlpZiAobWFzayAmYW1wOyZhbXA7IChwb2xsLSZndDtldmVudHMgJmFtcDsgRVBPTExFVCkgJmFtcDsmYW1wOwogCSAgICBpb19wb2xsX2Nhbl9maW5pc2hfaW5saW5lKHJlcSwgaXB0KSkgewotCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2spOwomIzQzOwkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCAwKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlvX25hcGlfYWRkKHJlcSk7CkBAIC02MjksNyAmIzQzOzYzMCw3IEBAIHN0YXRpYyBpbnQgX19pb19hcm1fcG9sbF9oYW5kbGVyKHN0cnVjdCBpb19raW9jYiAqcmVxLAogCQkgKiBwb2xsIHdhcyB3YWtlbiB1cCwgcXVldWUgdXAgYSB0dywgaXQmIzM5O2xsIGRlYWwgd2l0aCBpdC4KIAkJICovCiAJCWlmIChhdG9taWNfY21weGNoZygmYW1wO3JlcS0mZ3Q7cG9sbF9yZWZzLCAxLCAwKSAhPSAxKQotCQkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTsKJiM0MzsJCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3R3LmMgYi9pb191cmluZy90dy5jCmluZGV4IGE0Yzg3Mjg3MGQ4MWMuLmJmNGU1YWE1YzJlN2UgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3R3LmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvdHcuYwpAQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCB2b2lkIGlvX3JlcV9sb2NhbF93b3JrX2FkZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgZmxhZ3MpCiAJaWYgKG1wc2NxX3B1c2goJmFtcDtjdHgtJmd0O3dvcmtfbGlzdCwgJmFtcDtyZXEtJmd0O2lvX3Rhc2tfd29yay5ub2RlKSkgewogCQlpb19jdHhfbWFya190YXNrcnVuKGN0eCk7CiAJCWlmIChkYXRhX3JhY2UoY3R4LSZndDtpbnRfZmxhZ3MpICZhbXA7IElPX1JJTkdfRl9IQVNfRVZGRCkKLQkJCWlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgZmFsc2UpOwomIzQzOwkJCWlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgZmFsc2UsIGZsYWdzICZhbXA7IElPVV9GX1RXUV9JTl9XQUtFKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvd2FpdGlkLmMgYi9pb191cmluZy93YWl0aWQuYwppbmRleCAzMmY2OGZkN2ZjZGRhLi43NmFmMTI5YmE4Y2FkIDEwMDY0NAotLS0gYS9pb191cmluZy93YWl0aWQuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy93YWl0aWQuYwpAQCAtMjUzLDcgJiM0MzsyNTMsNyBAQCBzdGF0aWMgaW50IGlvX3dhaXRpZF93YWl0KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLAogCQlyZXR1cm4gMTsKIAogCXJlcS0mZ3Q7aW9fdGFza193b3JrLmZ1bmMgPSBpb193YWl0aWRfY2I7Ci0JaW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTsKJiM0MzsJX19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTsKIAlyZXR1cm4gMTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDg2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0b3VjaGluZyBgZXZlbnRmZGAsIGBmdXRleGAsIGBwb2xsYCwgYHR3YCwgYW5kIGB3YWl0aWRgLiBJdCYjMzk7cyBhZGRpbmcgdGhpcyBuZXcgZmxhZywgYElPVV9GX1RXUV9JTl9XQUtFYCwgd2hpY2ggbG9va3MgbGlrZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIGEgdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHByZXZlbnQgcG90ZW50aWFsIGxvY2sgcmVjdXJzaW9uIGlzc3VlcyB0aHJvdWdoIGVwb2xsLiBUaGlzIGlzIGNvcmUgaW9fdXJpbmcgbG9naWMsIHNvIGl0JiMzOTtzIHdvcnRoIGEgY2xvc2VyIGxvb2suCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGFuZCBpZiBpdCYjMzk7cyBmdXp6LXdvcnRoeS4gR2l2ZW4gdGhhdCBgaW9fdXJpbmdgIGlzIGhlYXZpbHkgZnV6emVkIGluIGdlbmVyYWwsIGFuZCBJIGtub3cgaXQmIzM5O3MgYSBob3QgdGFyZ2V0IGZvciBidWcgaHVudGluZywgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzIGlzIGluZGVlZCBhIGZydWl0ZnVsIGFyZWEgdG8gZXhwbG9yZSB3aXRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLiBXZSBoYXZlOiBgaW9fZXZlbnRmZF9zaWduYWxgLCBgaW9fZnV0ZXh2X3ByZXBgICh0aG91Z2ggbm90IGRpcmVjdGx5IG1vZGlmaWVkLCB0aGUgcmVsYXRlZCBgaW9fZnV0ZXhfd2FrZXZfZm5gIGFuZCBgaW9fZnV0ZXhfd2FrZV9mbmAgYXJlKSwgYGlvX3BvbGxfZXhlY3V0ZWAgLyBgX19pb19wb2xsX2V4ZWN1dGVgLCBgaW9fcG9sbF93YWtlYCwgYGlvX3BvbGxmcmVlX3dha2VgLCBgaW9fcmVxX2xvY2FsX3dvcmtfYWRkYCwgYW5kIGBpb193YWl0aWRfd2FpdGAuCgpUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSWRlYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIGBpb19ldmVudGZkX3NpZ25hbGAgaXNuJiMzOTt0IGEgc3lzY2FsbCwgYnV0IGl0JiMzOTtzIGFuIEFQSSwgc28gaXQmIzM5O3MgYSBjYW5kaWRhdGUuIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMsIGxldCYjMzk7cyBwcmlvcml0aXplIHN5c2NhbGxzIGFuZCBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSByZWxhdGVkIGBpb191cmluZ2Agb3BlcmF0aW9uczogYElPUklOR19PUF9QT0xMX0FERGAsIGBJT1JJTkdfT1BfRlVURVhfV0FJVGAsIGBJT1JJTkdfT1BfRlVURVhfV0FLRWAsIGBJT1JJTkdfT1BfV0FJVElEYCwgYW5kIGBpb19ldmVudGZkX3JlZ2lzdGVyYC4gVGltZSB0byBncmVwIHRoZSBjb2RlIGZvciBpbnN0YW5jZXMgb2YgdGhlc2UgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcmVsZXZhbnQgY2FsbCBwYXRocyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2V2ZW50ZmQuYz03Nj12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCwgYm9vbCBkZWZlcilcbi0tXG5pb191cmluZy9ldmVudGZkLmMtMTE5LVxuaW9fdXJpbmcvZXZlbnRmZC5jOjEyMDppbnQgaW9fZXZlbnRmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbmlvX3VyaW5nL2V2ZW50ZmQuYy0xMjEtXHRcdFx0dW5zaWduZWQgaW50IGV2ZW50ZmRfYXN5bmMpXG4tLVxuaW9fdXJpbmcvZXZlbnRmZC5oPTM9c3RydWN0IGlvX3JpbmdfY3R4O1xuaW9fdXJpbmcvZXZlbnRmZC5oOjQ6aW50IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXG5pb191cmluZy9ldmVudGZkLmgtNS1cdFx0XHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMxMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKlByb2JpbmcgdGhlIEkvTyBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBzeXN0ZW0gY2FsbHMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlc2Uga2VybmVsIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBJL08gc3Vic3lzdGVtLiBgaW9fZnV0ZXh2X3dhaXRgIGFuZCBgaW9fZnV0ZXh2X3dha2VgIGFyZSBpbW1lZGlhdGVseSBpbnRyaWd1aW5nLiBUaGV5IHN0cm9uZ2x5IHN1Z2dlc3QgYSBmdXRleC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBmb3IgSS9PIGNvbXBsZXRpb24gc2lnbmFsaW5nLCBsaWtlbHkgbGV2ZXJhZ2luZyB2ZWN0b3JpemVkIG9wZXJhdGlvbnMgZm9yIGVmZmljaWVuY3kuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgdG8gdW5kZXJzdGFuZCwgZXNwZWNpYWxseSBpbiB0ZXJtcyBvZiBjb25jdXJyZW5jeSBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcG9pbnRzLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZnV0ZXggb3BlcmF0aW9ucyB0aWUgaW50byB0aGUgb3ZlcmFsbCBldmVudCBsb29wLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGlvX3BvbGxfYWRkYC4gVGhpcyBzY3JlYW1zICYjMzQ7ZXBvbGwtbGlrZSYjMzQ7IG9yICYjMzQ7a3F1ZXVlLWxpa2UmIzM0OyBmdW5jdGlvbmFsaXR5LCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpzcGVjaWZpY3MqIG9mIGl0cyBpbnRlcmZhY2UuIElzIGl0IHJlZ2lzdGVyaW5nIGZpbGUgZGVzY3JpcHRvcnMsIEkvTyBjb21wbGV0aW9uIHBvcnRzLCBvciBzb21ldGhpbmcgbW9yZSBhYnN0cmFjdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2NhbGFiaWxpdHkgYW5kIHRoZSB0eXBlcyBvZiBJL08gb3BlcmF0aW9ucyBpdCBzdXBwb3J0cz8KCkZpbmFsbHksIGBpb193YWl0aWRfcHJlcGAgYW5kIGBpb193YWl0aWRgLiBUaGVzZSBhcmUgcG9pbnRpbmcgdG93YXJkcyBhc3luY2hyb25vdXMgSS9PIHdpdGggcHJvY2Vzcy90aHJlYWQgSUQgbWFuYWdlbWVudCBhbmQgSS9PIGNvbXBsZXRpb24gc2lnbmFsaW5nLiBJIG5lZWQgdG8gYXNjZXJ0YWluIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIEFyZSB0aGV5IHVzZWQgZm9yIHdhaXRpbmcgb24gY2hpbGRyZW4gcHJvY2Vzc2VzJiMzOTsgSS9PIGNvbXBsZXRpb24sIG9yIGRvIHRoZXkgb2ZmZXIgbW9yZSBnZW5lcmFsaXplZCBzaWduYWxpbmcgY2FwYWJpbGl0aWVzLCBzaW1pbGFyIHRvIGB3YWl0aWRgIGJ1dCBzdHJlYW1saW5lZCBmb3IgSS9PIGNvbnRleHRzPyBJcyB0aGVyZSBvdmVybGFwIHdpdGggYGlvX3BvbGxfYWRkYCBvciBhcmUgdGhleSBpbmRlcGVuZGVudCBtZWNoYW5pc21zPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcnBsYXkgaGVyZSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRob3JvdWdobHkgdG8gZGV2ZWxvcCBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiB0aGVpciBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBpb19mdXRleHZfd2FpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9mdXRleC5jPTIzMD1zdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcbi0tXG5pb191cmluZy9mdXRleC5jLTI0Mi1cbmlvX3VyaW5nL2Z1dGV4LmM6MjQzOmludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvZnV0ZXguYy0yNDQte1xuLS1cbmlvX3VyaW5nL2Z1dGV4Lmg9OD1pbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6OTppbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9mdXRleC5oLTEwLWludCBpb19mdXRleF93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGlvX3dhaXRpZGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBjdXJyZW50IHNpdHVhdGlvbiBkZW1hbmRzIGEgZGVlcGVyIGxvb2ssIHNvIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHRvIHZlcmlmeSBgaW9fd2FpdGlkYC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gaGFuZGxpbmcgcHJvY2VzcyBJL08gYW5kIGl0cyBiZWhhdmlvciB3aWxsIGJlIGNlbnRyYWwgdG8gcmVzb2x2aW5nIHRoZSBpc3N1ZSBhdCBoYW5kLiBVbmRlcnN0YW5kaW5nIGhvdyBgaW9fd2FpdGlkYCBpcyBmdW5jdGlvbmluZ+KAlG9yIG1hbGZ1bmN0aW9uaW5n4oCUaXMgYSBwcmltYXJ5IGludmVzdGlnYXRpdmUgYXZlbnVlLiBXaGF0IGlzIHRoZSBzdGF0ZSBvZiBgaW9fd2FpdGlkYD8gQXJlIHRoZXJlIHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlcz8gV2hhdCBhcmUgdGhlIGFyZ3VtZW50cyBiZWluZyBwYXNzZWQgdG8gaXQ/IFRoZSBudWFuY2VzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UgYXJlIGVzc2VudGlhbCBkZXRhaWxzIHRvIGVzdGFibGlzaCBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBpb193YWl0aWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvd2FpdGlkLmM9MTQ2PXN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbi0tXG5pb191cmluZy93YWl0aWQuYy0xNjYtXG5pb191cmluZy93YWl0aWQuYzoxNjc6aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy93YWl0aWQuYy0xNjgtXHRcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jPTIzNj1zdGF0aWMgaW50IGlvX3dhaXRpZF93YWl0KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTI1OS1cbmlvX3VyaW5nL3dhaXRpZC5jOjI2MDppbnQgaW9fd2FpdGlkX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbmlvX3VyaW5nL3dhaXRpZC5jLTI2MS17XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtMjgxLVxuaW9fdXJpbmcvd2FpdGlkLmM6MjgyOmludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmlvX3VyaW5nL3dhaXRpZC5jLTI4My17XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmg9NT1zdHJ1Y3QgaW9fd2FpdGlkX2FzeW5jIHtcbi0tXG5pb191cmluZy93YWl0aWQuaC05LVxuaW9fdXJpbmcvd2FpdGlkLmg6MTA6aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvd2FpdGlkLmg6MTE6aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL3dhaXRpZC5oOjEyOmludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuaW9fdXJpbmcvd2FpdGlkLmgtMTMtXHRcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9fcG9sbF9hZGRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGlvX3BvbGxfYWRkYC4mIzM0OyBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBJdCBtZWFucyBJJiMzOTttIG5vdCBqdXN0IGdsb3NzaW5nIG92ZXIgdGhpbmdzOyBJJiMzOTttIGdvaW5nIHRvIGFjdHVhbGx5ICpleGFtaW5lKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlvX3BvbGxfYWRkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcywgaG93IGl0IGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBJL08gcG9sbGluZyBmcmFtZXdvcmssIGFuZCB3aGF0IHBvdGVudGlhbCBnb3RjaGFzIG1pZ2h0IGV4aXN0LiBJJiMzOTttIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yOgoKKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBkb2VzIGl0IGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgcG9sbGluZyBzdHJ1Y3R1cmVzPyBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucyBsdXJraW5nPyBNdXRleGVzLCByZWFkL3dyaXRlIGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucy4uLiBJIG5lZWQgdG8gc2VlIHRoZSBkZXRhaWxzLgoqICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIERvZXMgaXQgcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZm9yIHRoZSBwb2xsIGVudHJpZXM/IExlYWtzIGFyZSB1bmFjY2VwdGFibGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgZG91YmxlLWZyZWVzIG9yIHVzZS1hZnRlci1mcmVlcy4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgY2hlY2tpbmc/IERvZXMgaXQgaGFuZGxlIGludmFsaWQgZmlsZSBkZXNjcmlwdG9ycywgb3V0LW9mLW1lbW9yeSBjb25kaXRpb25zLCBhbmQgb3RoZXIgZWRnZSBjYXNlcyBncmFjZWZ1bGx5PyBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgcHJvcGFnYXRpb24/CiogICAqKlBlcmZvcm1hbmNlOioqIFdoYXQgaXMgdGhlIG92ZXJoZWFkIG9mIHRoaXMgZnVuY3Rpb24/IERvZXMgaXQgc2NhbGUgd2VsbCB1bmRlciBoZWF2eSBsb2FkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcz8gQW1vcnRpemVkIGNvbXBsZXhpdHkgaXMgaW1wb3J0YW50LgoqICAgKipJbnRlZ3JhdGlvbjoqKiBIb3cgZG9lcyB0aGlzIHJlbGF0ZSB0byB0aGluZ3MgbGlrZSBgaW9fcG9sbF9yZW1vdmVgIGFuZCB0aGUgY29yZSBldmVudCBsb29wPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEkgd2lsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgdGhhdCBhZmZlY3QgbG9jayBvcmRlcmluZywgYW5kIHRoZSB1c2FnZSBvZiBnbG9iYWwgdmFyaWFibGVzLgoqICAgKipQb3J0YWJpbGl0eToqKiBJcyBpdCB3cml0dGVuIGluIGEgd2F5IHRoYXQgd2lsbCB3b3JrIHdpdGggb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXM/IEkgd2lsbCBiZSB0aGlua2luZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHN5c3RlbSBjYWxscywgYW5kIGhvdyB0aGV5IG1heSBiZSBpbXBsZW1lbnRlZCBhY3Jvc3MgZGlmZmVyZW50IE9Tcy4KClVsdGltYXRlbHksIEkmIzM5O20gaG9waW5nIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyB3ZWxsLWRlc2lnbmVkLCBlZmZpY2llbnQsIGFuZCByb2J1c3QuIEl0JiMzOTtzIHRoZSBidWlsZGluZyBibG9jayBmb3IgcmVsaWFibGUgSS9PLCBzbyBJJiMzOTttIHB1dHRpbmcgaXQgdW5kZXIgdGhlIG1pY3Jvc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWQpIGlvX3BvbGxfYWRkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3BvbGwuYz04NTQ9aW50IGlvX3BvbGxfcmVtb3ZlX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9wb2xsLmMtODgzLVxuaW9fdXJpbmcvcG9sbC5jOjg4NDppbnQgaW9fcG9sbF9hZGRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuaW9fdXJpbmcvcG9sbC5jLTg4NS17XG4tLVxuaW9fdXJpbmcvcG9sbC5jLTkwMC1cbmlvX3VyaW5nL3BvbGwuYzo5MDE6aW50IGlvX3BvbGxfYWRkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy9wb2xsLmMtOTAyLXtcbi0tXG5pb191cmluZy9wb2xsLmg9MzA9c3RhdGljIGlubGluZSB2b2lkIGlvX3BvbGxfbXVsdGlzaG90X3JldHJ5KHN0cnVjdCBpb19raW9jYiAqcmVxKVxuLS1cbmlvX3VyaW5nL3BvbGwuaC0zNC1cbmlvX3VyaW5nL3BvbGwuaDozNTppbnQgaW9fcG9sbF9hZGRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL3BvbGwuaDozNjppbnQgaW9fcG9sbF9hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9wb2xsLmgtMzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpb191cmluZ2AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBhIHRyaWNreSByZWN1cnNpb24gaXNzdWUgd2l0aGluIGBpb191cmluZ2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGhvdyBldmVudGZkIHNpZ25hbGluZyBpbnRlcmFjdHMgd2l0aCB3YWl0cXVldWUgd2FrZXVwcy4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCB0aGUgc2lnbmFsaW5nIGZyb20gZGl2aW5nIGJhY2sgaW50byB0aGUgd2FpdHF1ZXVlIGxvY2ssIHBvdGVudGlhbGx5IHRocm91Z2ggbWVjaGFuaXNtcyBsaWtlIGBlcG9sbGAuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgdGFyZ2V0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkaXJlY3RseTogYGlvX2V2ZW50ZmRfc2lnbmFsYCwgYW5kIHRoZSB3YWl0cXVldWUgY2FsbGJhY2sgZnVuY3Rpb25zOiBgaW9fZnV0ZXhfd2FrZXZfZm5gLCBgaW9fZnV0ZXhfd2FrZV9mbmAsIGBpb19wb2xsX3dha2VgLCBgaW9fcG9sbGZyZWVfd2FrZWAsIGBpb193YWl0aWRfd2FpdGAsIGFuZCBhbHNvIGBpb19yZXFfbG9jYWxfd29ya19hZGRgLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzZW5zZSBvZiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS4KCkVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIHByb2JsZW1hdGljIHdha2V1cHMgYXJlIHRpZWQgdG8gYGlvX2Z1dGV4dl93YWl0YCAvIGBpb19mdXRleF93YWl0YCwgYGlvX3BvbGxfYWRkYCwgYW5kIGBpb193YWl0aWRgLCBwbHVzLCBvZiBjb3Vyc2UsIHRoZSBgaW9fZXZlbnRmZF9yZWdpc3RlcmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGJlY2F1c2UgdGhlc2UgYXJlIGFsbCBwb2ludHMgd2hlcmUgd2UgbWlnaHQgZXhwZWN0IHRvIGhhdmUgYSB3YWl0cXVldWUgZW50cnkgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgYSB1c2VyLXNwYWNlIGV2ZW50LgoKSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgaW9fZnV0ZXhfd2FpdGAgYW5kIHNlZSBob3cgdGhpcyBwYXRjaCBhY3R1YWxseSBtb2RpZmllcyB0aGF0LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV0YWlscyBvZiB0aGUgZGVmZXJyZWQgc2lnbmFsaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBpb19mdXRleF93YWl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2Z1dGV4LmM9MTI3PWludCBpb19mdXRleF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0xNTQtXG5pb191cmluZy9mdXRleC5jOjE1NTppbnQgaW9fZnV0ZXhfd2FpdF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXG5pb191cmluZy9mdXRleC5jLTE1Ni17XG4tLVxuaW9fdXJpbmcvZnV0ZXguYz0yNDM9aW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvZnV0ZXguYy0yOTUtXG5pb191cmluZy9mdXRleC5jOjI5NjppbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvZnV0ZXguYy0yOTcte1xuLS1cbmlvX3VyaW5nL2Z1dGV4Lmg9NT1pbnQgaW9fZnV0ZXhfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6NjppbnQgaW9fZnV0ZXhfd2FpdF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xuaW9fdXJpbmcvZnV0ZXguaC03LWludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL2Z1dGV4Lmg6ODppbnQgaW9fZnV0ZXhfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL2Z1dGV4LmgtOS1pbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MTYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJT19VcmluZyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBpb191cmluZyBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBjb25maWcgZmxhZyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXMgZGVmaW5pdGVseSBgSU9fVVJJTkdgLiBCdXQsIGtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyBvZnRlbiBnbywgaXQmIzM5O3MgbmV2ZXIgdGhhdCBzaW1wbGUsIHJpZ2h0PyBNeSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gdGhlIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBzdWJ0bHkgbGlua2VkIGZsYWdzIG9yIHNldHRpbmdzIHRoYXQgYXJlIGVxdWFsbHkgY3JpdGljYWwuIEEgY29tcHJlaGVuc2l2ZSByZXZpZXcgaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgc29tZXRoaW5nIHBvdGVudGlhbGx5IHZpdGFsIGZvciBmdWxsIGFuZCBwcm9wZXIgZW5hYmxlbWVudC4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIHVwIGZyb250IGFuZCBhdm9pZCBzb21lIG5hc3R5IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBpcyBsdXJraW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTQtXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzYtXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTkzOC1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmlvX3VyaW5nL0tjb25maWctNS1cbmlvX3VyaW5nL0tjb25maWc6Njpjb25maWcgSU9fVVJJTkdfWkNSWFxuaW9fdXJpbmcvS2NvbmZpZy03LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTItXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcbmlvX3VyaW5nL0tjb25maWctMTQtXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xNy1cbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcbmlvX3VyaW5nL0tjb25maWctMTktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MzMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEkvTyBSaW5nIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgYGlvX3VyaW5nYCByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc2VlIGhvdyBhY2Nlc3NpYmxlIHRoZXkgYXJlLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gYGlvX2V2ZW50ZmRfcmVnaXN0ZXJgLCBgaW9fZnV0ZXhfd2FpdGAsIGBpb19mdXRleHZfd2FpdGAsIGBpb19wb2xsX2FkZGAsIGFuZCBgaW9fd2FpdGlkYC4gRmlyc3QsIEkgd2FudCB0byBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWN0dWFsbHkgZW50cnlwb2ludHMuCgpBbHJpZ2h0LCBnb29kLCBgaW9fZXZlbnRmZF9yZWdpc3RlcmAgaXMgaW5kZWVkIHJlYWNoYWJsZTsgaXQgaG9va3MgZGlyZWN0bHkgaW50byBgSU9SSU5HX1JFR0lTVEVSX0VWRU5URkRgLiBOZXh0LCBgaW9fZnV0ZXhfd2FpdGAgaXMgdGhlcmUsIGFzIGEgdmFsaWQgZW50cnlwb2ludCBmb3IgYElPUklOR19PUF9GVVRFWF9XQUlUYC4gQW5kIHRoZSB2ZWN0b3IgdmVyc2lvbiwgYGlvX2Z1dGV4dl93YWl0YCwgaXMgYWxzbyBhbiBBUEkgZW50cnlwb2ludCB0aWVkIHRvIGBJT1JJTkdfT1BfRlVURVhfV0FJVFZgLiBNb3Zpbmcgb24sIGBpb19wb2xsX2FkZGAgaXMgYWxzbyByZWFjaGFibGUgdmlhIGBJT1JJTkdfT1BfUE9MTF9BRERgLiBGaW5hbGx5LCBgaW9fd2FpdGlkYCBpcyBhbHNvIGFuIEFQSSBlbnRyeXBvaW50IGFzc29jaWF0ZWQgd2l0aCBgSU9SSU5HX09QX1dBSVRJRGAuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBGb3J0dW5hdGVseSwgYElPX1VSSU5HYCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gdGhhdCYjMzk7cyBhIHBsdXMuIGBFUE9MTGAgaXMgYWxzbyB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgYEZVVEVYYCBhcyB3ZWxsLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgbWFqb3JpdHkgb2YgcG90ZW50aWFsIHByZS1yZXF1aXNpdGVzLgoKSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBgaW9fZXZlbnRmZF9yZWdpc3RlcmAsIGxldCYjMzk7cyBjaGVjayBpdCBvdXQgaW4gYGlvX3VyaW5nL2V2ZW50ZmQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2V2ZW50ZmRfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvZXZlbnRmZC5jPTc2PXZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKVxuLS1cbmlvX3VyaW5nL2V2ZW50ZmQuYy0xMTktXG5pb191cmluZy9ldmVudGZkLmM6MTIwOmludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuaW9fdXJpbmcvZXZlbnRmZC5jLTEyMS1cdFx0XHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYylcbi0tXG5pb191cmluZy9ldmVudGZkLmg9Mz1zdHJ1Y3QgaW9fcmluZ19jdHg7XG5pb191cmluZy9ldmVudGZkLmg6NDppbnQgaW9fZXZlbnRmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcbmlvX3VyaW5nL2V2ZW50ZmQuaC01LVx0XHRcdHVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTtcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTc1MD1zdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTgwNC1cdFx0XHRicmVhaztcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6ODA1Olx0XHRyZXQgPSBpb19ldmVudGZkX3JlZ2lzdGVyKGN0eCwgYXJnLCAwKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODA2LVx0XHRicmVhaztcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTgxMC1cdFx0XHRicmVhaztcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6ODExOlx0XHRyZXQgPSBpb19ldmVudGZkX3JlZ2lzdGVyKGN0eCwgYXJnLCAxKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODEyLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBEZWZlcnJlZCBFdmVudGZkIFNpZ25hbGluZyBpbiBpb191cmluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIGB0YXNrX3dvcmtgIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyIGhhcyB0aGUgcG90ZW50aWFsIHRvIGltcGFjdCBjb3JlIGlvX3VyaW5nIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXRleCB3YWl0LCBwb2xsLCBhbmQgd2FpdGlkIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIHRoZXkmIzM5O3JlIGludGVyYWN0aW5nIHdpdGggZXZlbnRmZCBub3RpZmljYXRpb25zLiBUaGVzZSBhcmUgY3JpdGljYWwgYXJlYXMgd2hlcmUgZGVmZXJyZWQgc2lnbmFsaW5nIGNvdWxkIGludHJvZHVjZSByZWdyZXNzaW9ucywgcmFjZSBjb25kaXRpb25zLCBvciBldmVuIG5hc3R5IGRlYWRsb2Nrcy4KCk15IHBsYW4gaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGVzZSBpb191cmluZyBvcGVyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGBpb19ldmVudGZkX3JlZ2lzdGVyYCwgYGlvX2Z1dGV4X3dhaXRgLCBgaW9fZnV0ZXh2X3dhaXRgLCBgaW9fcG9sbF9hZGRgLCBhbmQgYGlvX3dhaXRpZGAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNvdmVyYWdlIG9mIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLgoKSSYjMzk7bGwgZW5hYmxlIHRoZSBmb2xsb3dpbmcga2VybmVsIGNvbmZpZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIG15IGZ1enppbmcgY2FtcGFpZ246IGBJT19VUklOR2AsIGBFVkVOVEZEYCwgYEZVVEVYYCwgYW5kIGBFUE9MTGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCByaWdodCBjb25maWcgbmFtZXMgdGhvdWdoLiBJIGNhbiYjMzk7dCBiZSB0b28gY2FyZWZ1bCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVWRU5URkQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4Nzg9Y29uZmlnIFRJTUVSRkRcbi0tXG5pbml0L0tjb25maWctMTg4Ni1cbmluaXQvS2NvbmZpZzoxODg3OmNvbmZpZyBFVkVOVEZEXG5pbml0L0tjb25maWctMTg4OC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVBPTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcbi0tXG5pbml0L0tjb25maWctMTg2MS1cbmluaXQvS2NvbmZpZzoxODYyOmNvbmZpZyBFUE9MTFxuaW5pdC9LY29uZmlnLTE4NjMtXHRib29sIFwmIzM0O0VuYWJsZSBldmVudHBvbGwgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2NTAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlVURVgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4MjQ9Y29uZmlnIEJBU0VfU01BTExcbi0tXG5pbml0L0tjb25maWctMTgzMC1cbmluaXQvS2NvbmZpZzoxODMxOmNvbmZpZyBGVVRFWFxuaW5pdC9LY29uZmlnLTE4MzItXHRib29sIFwmIzM0O0VuYWJsZSBmdXRleCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZy0xODQwLVxuaW5pdC9LY29uZmlnOjE4NDE6Y29uZmlnIEZVVEVYX1BJXG5pbml0L0tjb25maWctMTg0Mi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTg0NS1cbmluaXQvS2NvbmZpZzoxODQ2OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODQ3LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xODUwLVxuaW5pdC9LY29uZmlnOjE4NTE6Y29uZmlnIEZVVEVYX01QT0xcbmluaXQvS2NvbmZpZy0xODUyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZz0xODU2PWNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbi0tXG5pbml0L0tjb25maWctMTg1OC1cbmluaXQvS2NvbmZpZzoxODU5OmNvbmZpZyBGVVRFWF9ST0JVU1RfVU5MT0NLXG5pbml0L0tjb25maWctMTg2MC1cdGRlZl9ib29sIEZVVEVYIFx1MDAyNlx1MDAyNiBIQVZFX0dFTkVSSUNfVkRTTyBcdTAwMjZcdTAwMjYgR0VORVJJQ19JUlFfRU5UUlkgXHUwMDI2XHUwMDI2IFJTRVEgXHUwMDI2XHUwMDI2IEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk3NAoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIG1ldGljdWxvdXNseSByZXZpZXdlZCB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIHllcywgZXZlcnl0aGluZyBjaGVja3Mgb3V0IGZyb20gbXkgcGVyc3BlY3RpdmUuIEkmIzM5O20gc2F0aXNmaWVkIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUsIGJ1dCBJIGFsd2F5cyB0YWtlIGEgc2Vjb25kIGxvb2suIExldCYjMzk7cyBqdXN0IGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgb3BlcmF0aW9ucyBpbiBwbGF5LgoKUmlnaHQsIHRoZSBwYXRjaCBpcyBtYWtpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9uczogYGlvX2Z1dGV4X3dha2V2X2ZuYCBpcyB0cmFuc2l0aW9uaW5nIHRvIGBpb19mdXRleHZfd2FpdGAsIGBpb19mdXRleF93YWtlX2ZuYCBpcyBiZWNvbWluZyBgaW9fZnV0ZXhfd2FpdGAsIGBpb19wb2xsX3dha2VgIGlzIGV2b2x2aW5nIGludG8gYGlvX3BvbGxfYWRkYCwgYW5kIGBpb19wb2xsZnJlZV93YWtlYCBpcyBhbHNvIGJlY29taW5nIGBpb19wb2xsX2FkZGAgYW5kIGZpbmFsbHkgYGlvX3dhaXRpZF93YWl0YCBpcyBjaGFuZ2luZyBpbnRvIGBpb193YWl0aWRgLiBUaGF0IGNvbmZpcm1zIHRoYXQgdGhlIGNydWNpYWwgc3ltYm9scyBhcmUgYmVpbmcgYXBwcm9wcmlhdGVseSB1cGRhdGVkIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcuCgpXaXRoIHRoYXQgY29uZmlybWF0aW9uLCBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuIFRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fZnV0ZXh2X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fcG9sbF9hZGQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDssCiAgICAmIzM0O0VWRU5URkQmIzM0OywKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19ldmVudGZkX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2lvX2Z1dGV4X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fZnV0ZXh2X3dhaXQmIzM0OywKICAgICYjMzQ7aW9fcG9sbF9hZGQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTUgMjM6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IGxvY2sgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MgdGhyb3VnaCBlcG9sbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJkMDRkNzQ3NGVlZmEwODUwNjU4YzY4YjIwOTMyZDBlNmFmNTExMjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxNSAyMzo0ODoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaAppbmRleCBhMmM2MjNhNjdhMjUxLi5mNmU5MGNjNjRhMWYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCkBAIC0yMCw2ICYjNDM7MjAsMTQgQEAgZW51bSB7CiAJICogSXQmIzM5O3MgYWxzbyBpZ25vcmVkIHVubGVzcyBJT1JJTkdfU0VUVVBfREVGRVJfVEFTS1JVTiBpcyBzZXQuCiAJICovCiAJSU9VX0ZfVFdRX0xBWllfV0FLRQkJCT0gMSwKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2V0IHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLCB3aGVyZQomIzQzOwkgKiBhbiBhcmJpdHJhcnkgcHJvdmlkZXIgd2FpdHF1ZXVlIGxvY2sgaXMgaGVsZC4gU2lnbmFsaW5nIHRoZSBDUSByaW5nCiYjNDM7CSAqIGV2ZW50ZmQgaW5saW5lIGZyb20gdGhlcmUgY2FuIHJlY3Vyc2UgYmFjayBpbnRvIHRoYXQgbG9jayB0aHJvdWdoCiYjNDM7CSAqIGVwb2xsLCBzbyB0aGUgZXZlbnRmZCBzaWduYWwgbXVzdCBiZSBkZWZlcnJlZC4KJiM0MzsJICovCiYjNDM7CUlPVV9GX1RXUV9JTl9XQUtFCQkJPSAyLAogfTsKIAogZW51bSBpb191cmluZ19jbWRfZmxhZ3MgewpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZXZlbnRmZC5jIGIvaW9fdXJpbmcvZXZlbnRmZC5jCmluZGV4IGQ2NTZjYzJhMGI5YmEuLjYzZmU2ZTVkNzliYWQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9ldmVudGZkLmMKQEAgLTUxLDkgJiM0Mzs1MSw5IEBAIHN0YXRpYyB2b2lkIGlvX2V2ZW50ZmRfZG9fc2lnbmFsKHN0cnVjdCByY3VfaGVhZCAqcmN1KQogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FsbGVyIHNob3VsZCBwdXQgdGhlIGV2X2ZkIHJlZmVyZW5jZSwgZmFsc2UgaWYgbm90LgogICovCi1zdGF0aWMgYm9vbCBfX2lvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpCiYjNDM7c3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkLCBib29sIGRlZmVyKQogewotCWlmIChldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHsKJiM0MzsJaWYgKCFkZWZlciAmYW1wOyZhbXA7IGV2ZW50ZmRfc2lnbmFsX2FsbG93ZWQoKSkgewogCQlldmVudGZkX3NpZ25hbF9tYXNrKGV2X2ZkLSZndDtjcV9ldl9mZCwgRVBPTExfVVJJTkdfV0FLRSk7CiAJCXJldHVybiB0cnVlOwogCX0KQEAgLTczLDcgJiM0Mzs3Myw3IEBAIHN0YXRpYyBib29sIGlvX2V2ZW50ZmRfdHJpZ2dlcihzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKQogCXJldHVybiAhZXZfZmQtJmd0O2V2ZW50ZmRfYXN5bmMgfHwgaW9fd3FfY3VycmVudF9pc193b3JrZXIoKTsKIH0KIAotdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpCiYjNDM7dm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpCiB7CiAJYm9vbCBza2lwID0gZmFsc2U7CiAJc3RydWN0IGlvX2V2X2ZkICpldl9mZDsKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpCiAJCXNwaW5fdW5sb2NrKCZhbXA7Y3R4LSZndDtjb21wbGV0aW9uX2xvY2spOwogCX0KIAotCWlmIChza2lwIHx8IF9faW9fZXZlbnRmZF9zaWduYWwoZXZfZmQpKQomIzQzOwlpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkLCBkZWZlcikpCiAJCWlvX2V2ZW50ZmRfcHV0KGV2X2ZkKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZXZlbnRmZC5oIGIvaW9fdXJpbmcvZXZlbnRmZC5oCmluZGV4IDQwMGVkYTRhNDE2NWEuLmU5NjVkODBkOWZkYzYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuaAomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9ldmVudGZkLmgKQEAgLTUsNCAmIzQzOzUsNCBAQCBpbnQgaW9fZXZlbnRmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZywKIAkJCXVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTsKIGludCBpb19ldmVudGZkX3VucmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpOwogCi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCk7CiYjNDM7dm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpOwpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZnV0ZXguYyBiL2lvX3VyaW5nL2Z1dGV4LmMKaW5kZXggZjBkODBhNDQ0ZjQ1ZS4uZWFlZTE0MjQyYTNhMyAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvZnV0ZXguYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9mdXRleC5jCkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIHN0YXRpYyB2b2lkIGlvX2Z1dGV4X3dha2V2X2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSkKIAogCWlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7CiAJcmVxLSZndDtpb190YXNrX3dvcmsuZnVuYyA9IGlvX2Z1dGV4dl9jb21wbGV0ZTsKLQlpb19yZXFfdGFza193b3JrX2FkZChyZXEpOwomIzQzOwlfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpOwogfQogCiBpbnQgaW9fZnV0ZXh2X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKQEAgLTIzNyw3ICYjNDM7MjM3LDcgQEAgc3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZV9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpCiAKIAlpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApOwogCXJlcS0mZ3Q7aW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTsKLQlpb19yZXFfdGFza193b3JrX2FkZChyZXEpOwomIzQzOwlfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpOwogfQogCiBpbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncykKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvX3VyaW5nLmMgYi9pb191cmluZy9pb191cmluZy5jCmluZGV4IDRjODNhOTRiNGJkYzMuLjc2ZjA0OWUyOWFhMmUgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvaW9fdXJpbmcuYwpAQCAtNDc1LDcgJiM0Mzs0NzUsNyBAQCB2b2lkIF9faW9fY29tbWl0X2NxcmluZ19mbHVzaChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCkKIAlpZiAoY3R4LSZndDtpbnRfZmxhZ3MgJmFtcDsgSU9fUklOR19GX09GRl9USU1FT1VUX1VTRUQpCiAJCWlvX2ZsdXNoX3RpbWVvdXRzKGN0eCk7CiAJaWYgKGN0eC0mZ3Q7aW50X2ZsYWdzICZhbXA7IElPX1JJTkdfRl9IQVNfRVZGRCkKLQkJaW9fZXZlbnRmZF9zaWduYWwoY3R4LCB0cnVlKTsKJiM0MzsJCWlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgdHJ1ZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb19jcV9sb2NrKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KQpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcG9sbC5jIGIvaW9fdXJpbmcvcG9sbC5jCmluZGV4IDAyMDRhZmZkYzMwOGMuLjU0NDdhN2MyNGRjZTYgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3BvbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9wb2xsLmMKQEAgLTIwOCw5ICYjNDM7MjA4LDkgQEAgZW51bSB7CiAJSU9VX1BPTExfUkVRVUVVRSA9IDQsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spCiYjNDM7c3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrLCB1bnNpZ25lZCB0d19mbGFncykKIHsKLQl1bnNpZ25lZCBmbGFncyA9IDA7CiYjNDM7CXVuc2lnbmVkIGZsYWdzID0gdHdfZmxhZ3M7CiAKIAlpb19yZXFfc2V0X3JlcyhyZXEsIG1hc2ssIDApOwogCXJlcS0mZ3Q7aW9fdGFza193b3JrLmZ1bmMgPSBpb19wb2xsX3Rhc2tfZnVuYzsKQEAgLTIxOCwxNCAmIzQzOzIxOCwxNSBAQCBzdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spCiAJdHJhY2VfaW9fdXJpbmdfdGFza19hZGQocmVxLCBtYXNrKTsKIAogCWlmICghKHJlcS0mZ3Q7ZmxhZ3MgJmFtcDsgUkVRX0ZfUE9MTF9OT19MQVpZKSkKLQkJZmxhZ3MgPSBJT1VfRl9UV1FfTEFaWV9XQUtFOwomIzQzOwkJZmxhZ3MgfD0gSU9VX0ZfVFdRX0xBWllfV0FLRTsKIAlfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXMsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIHR3X2ZsYWdzKQogewogCWlmIChpb19wb2xsX2dldF9vd25lcnNoaXAocmVxKSkKLQkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMpOwomIzQzOwkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMsIHR3X2ZsYWdzKTsKIH0KIAogLyoKQEAgLTM0NCw3ICYjNDM7MzQ1LDcgQEAgdm9pZCBpb19wb2xsX3Rhc2tfZnVuYyhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAlpZiAocmV0ID09IElPVV9QT0xMX05PX0FDVElPTikgewogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChyZXQgPT0gSU9VX1BPTExfUkVRVUVVRSkgewotCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDApOwomIzQzOwkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTsKIAkJcmV0dXJuOwogCX0KIAlpb19wb2xsX3JlbW92ZV9lbnRyaWVzKHJlcSk7CkBAIC0zODMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyB2b2lkIGlvX3BvbGxfY2FuY2VsX3JlcShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKIHsKIAlpb19wb2xsX21hcmtfY2FuY2VsbGVkKHJlcSk7CiAJLyoga2ljayB0dywgd2hpY2ggc2hvdWxkIGNvbXBsZXRlIHRoZSByZXF1ZXN0ICovCi0JaW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7CiYjNDM7CWlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApOwogfQogCiAjZGVmaW5lIElPX0FTWU5DX1BPTExfQ09NTU9OCShFUE9MTE9ORVNIT1QgfCBFUE9MTFBSSSkKQEAgLTM5Miw3ICYjNDM7MzkzLDcgQEAgc3RhdGljIF9fY29sZCBpbnQgaW9fcG9sbGZyZWVfd2FrZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvX3BvbGwgKnBvbGwpCiB7CiAJaW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpOwogCS8qIHdlIGhhdmUgdG8ga2ljayB0dyBpbiBjYXNlIGl0JiMzOTtzIG5vdCBhbHJlYWR5ICovCi0JaW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7CiYjNDM7CWlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIElPVV9GX1RXUV9JTl9XQUtFKTsKIAlpb19wb2xsX3JlbW92ZV93YWl0cShwb2xsKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTQzMCw3ICYjNDM7NDMxLDcgQEAgc3RhdGljIGludCBpb19wb2xsX3dha2Uoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLAogCQkJZWxzZQogCQkJCXJlcS0mZ3Q7ZmxhZ3MgJmFtcDs9IH5SRVFfRl9TSU5HTEVfUE9MTDsKIAkJfQotCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2spOwomIzQzOwkJX19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7CiAJfQogCXJldHVybiAxOwogfQpAQCAtNjE4LDcgJiM0Mzs2MTksNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwKIAogCWlmIChtYXNrICZhbXA7JmFtcDsgKHBvbGwtJmd0O2V2ZW50cyAmYW1wOyBFUE9MTEVUKSAmYW1wOyZhbXA7CiAJICAgIGlvX3BvbGxfY2FuX2ZpbmlzaF9pbmxpbmUocmVxLCBpcHQpKSB7Ci0JCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgbWFzayk7CiYjNDM7CQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2ssIDApOwogCQlyZXR1cm4gMDsKIAl9CiAJaW9fbmFwaV9hZGQocmVxKTsKQEAgLTYyOSw3ICYjNDM7NjMwLDcgQEAgc3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsCiAJCSAqIHBvbGwgd2FzIHdha2VuIHVwLCBxdWV1ZSB1cCBhIHR3LCBpdCYjMzk7bGwgZGVhbCB3aXRoIGl0LgogCQkgKi8KIAkJaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7cmVxLSZndDtwb2xsX3JlZnMsIDEsIDApICE9IDEpCi0JCQlfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDApOwomIzQzOwkJCV9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgMCk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvdHcuYyBiL2lvX3VyaW5nL3R3LmMKaW5kZXggYTRjODcyODcwZDgxYy4uYmY0ZTVhYTVjMmU3ZSAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvdHcuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy90dy5jCkBAIC0xNzAsNyAmIzQzOzE3MCw3IEBAIHZvaWQgaW9fcmVxX2xvY2FsX3dvcmtfYWRkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBmbGFncykKIAlpZiAobXBzY3FfcHVzaCgmYW1wO2N0eC0mZ3Q7d29ya19saXN0LCAmYW1wO3JlcS0mZ3Q7aW9fdGFza193b3JrLm5vZGUpKSB7CiAJCWlvX2N0eF9tYXJrX3Rhc2tydW4oY3R4KTsKIAkJaWYgKGRhdGFfcmFjZShjdHgtJmd0O2ludF9mbGFncykgJmFtcDsgSU9fUklOR19GX0hBU19FVkZEKQotCQkJaW9fZXZlbnRmZF9zaWduYWwoY3R4LCBmYWxzZSk7CiYjNDM7CQkJaW9fZXZlbnRmZF9zaWduYWwoY3R4LCBmYWxzZSwgZmxhZ3MgJmFtcDsgSU9VX0ZfVFdRX0lOX1dBS0UpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jCmluZGV4IDMyZjY4ZmQ3ZmNkZGEuLjc2YWYxMjliYThjYWQgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3dhaXRpZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3dhaXRpZC5jCkBAIC0yNTMsNyAmIzQzOzI1Myw3IEBAIHN0YXRpYyBpbnQgaW9fd2FpdGlkX3dhaXQoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsCiAJCXJldHVybiAxOwogCiAJcmVxLSZndDtpb190YXNrX3dvcmsuZnVuYyA9IGlvX3dhaXRpZF9jYjsKLQlpb19yZXFfdGFza193b3JrX2FkZChyZXEpOwomIzQzOwlfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpOwogCXJldHVybiAxOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNSAyMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDgzCgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDc0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nYCB0aGF0IGludHJvZHVjZXMgYElPVV9GX1RXUV9JTl9XQUtFYCBhbmQgbW9kaWZpZXMgYGlvX2V2ZW50ZmRfc2lnbmFsYCB0byBhY2NlcHQgYSBgZGVmZXJgIHBhcmFtZXRlci4gVGhlIGZpbGVzIGFmZmVjdGVkIGFyZSBgaW9fdXJpbmcvZXZlbnRmZC5jYCwgYGlvX3VyaW5nL2Z1dGV4LmNgLCBgaW9fdXJpbmcvaW9fdXJpbmcuY2AsIGBpb191cmluZy9wb2xsLmNgLCBgaW9fdXJpbmcvdHcuY2AsIGFuZCBgaW9fdXJpbmcvd2FpdGlkLmNgLiBNeSBqb2IgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgc3BlY2lmaWNhbGx5IGlmIGl0IGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczoKCiogICBXZSYjMzk7dmUgYWRkZWQgYElPVV9GX1RXUV9JTl9XQUtFYCB0byB0aGUgZW51bSBpbiBgaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oYC4gU2ltcGxlIGVub3VnaC4KKiAgIGBfX2lvX2V2ZW50ZmRfc2lnbmFsYCBub3cgdGFrZXMgYSBgZGVmZXJgIGJvb2xlYW4uIElmIGBkZWZlcmAgaXMgdHJ1ZSwgdGhlIHNpZ25hbCBtYXNrIGlzIHNraXBwZWQsIGFuZCBpdCByZXR1cm5zIGZhbHNlLiBUaGlzIGlzIGEgY3J1Y2lhbCBjb250cm9sIGZsb3cgY2hhbmdlLgoqICAgYGlvX2V2ZW50ZmRfc2lnbmFsYCBub3cgYWxzbyB0YWtlcyBgZGVmZXJgIGFuZCBwYXNzZXMgaXQgYWxvbmcuCiogICBgaW9fZnV0ZXhfd2FrZXZfZm5gIGFuZCBgaW9fZnV0ZXhfd2FrZV9mbmAgYXJlIHVzaW5nIGBfX2lvX3JlcV90YXNrX3dvcmtfYWRkYCB3aXRoIGBJT1VfRl9UV1FfSU5fV0FLRWAuCiogICBgaW9fcG9sbF9leGVjdXRlYCBhbmQgYF9faW9fcG9sbF9leGVjdXRlYCBub3cgdXNlIGB0d19mbGFnc2Agd2l0aCBgX19pb19yZXFfdGFza193b3JrX2FkZGAuCiogICBgaW9fcG9sbF93YWtlYCwgYGlvX3BvbGxmcmVlX3dha2VgIG5vdyBwYXNzIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gYF9faW9fcG9sbF9leGVjdXRlYC4KKiAgIGBpb19yZXFfbG9jYWxfd29ya19hZGRgIHBhc3NlcyBgZmxhZ3MgJmFtcDsgSU9VX0ZfVFdRX0lOX1dBS0VgIGFzIGBkZWZlcmAgdG8gYGlvX2V2ZW50ZmRfc2lnbmFsYC4KKiAgIGBpb193YWl0aWRfd2FpdGAgdXNlcyBgX19pb19yZXFfdGFza193b3JrX2FkZGAgd2l0aCBgSU9VX0ZfVFdRX0lOX1dBS0VgLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGF2b2lkaW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIGJ5IGRlZmVycmluZyB0aGUgYGV2ZW50ZmRgIHNpZ25hbGluZyB3aGVuIHRhc2sgd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgcmVjdXJzaW5nIGJhY2sgaW50byB0aGUgd2FpdHF1ZXVlIGxvY2sgdGhyb3VnaCBlcG9sbCwgc28gaXQmIzM5O3MgYSBsb2NraW5nL2RlYWRsb2NrIGZpeCwgcHVyZSBhbmQgc2ltcGxlLgoKQ3J1Y2lhbGx5LCBpdCAqKmRvZXNuJiMzOTt0KiogaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLiBJdCBhbHNvIGRvZXNuJiMzOTt0IGNoYW5nZSBhbnl0aGluZyBhYm91dCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYm91bmRzIGNoZWNraW5nLiBJdOKAmXMgc3RyaWN0bHkgYWJvdXQgKndoZW4qIGFuIGV2ZW50ZmQgaXMgc2lnbmFsZWQsIGRlZmVycmluZyBpdCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzICh3aXRoIHRoZSBgSU9VX0ZfVFdRX0lOX1dBS0VgIGZsYWcpLgoKR2l2ZW4gdGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgbW9kaWZpY2F0aW9uIGRlc2lnbmVkIHRvIHByZXZlbnQgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MsIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBzdWNoIGFzIGRlYWRsb2NrcyBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBJJiMzOTttIHJlYXNvbmFibHkgY2VydGFpbiB0aGVyZSBpcyBubyBuZXcsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgaGVyZS4KCkxldCBtZSBkb3VibGUtY2hlY2suIE9rYXksIGBkZWZlcmAgaXMganVzdCBhIGJvb2xlYW4uIGBJT1VfRl9UV1FfSU5fV0FLRWAgaXMgYSBjb25zdGFudC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3RzIG9yIGZpZWxkcyBiZWluZyBhZGRlZCB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgY29waWVkIHRvIHVzZXJzcGFjZS4gV2UgYXJlIG5vdCBtb2RpZnlpbmcgYm91bmRzIGNoZWNrcywgbm9yIGFyZSB3ZSBhbGxvY2F0aW5nIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAsIGFuZCBJIHdpbGwgZG9jdW1lbnQgdGhpcyByYXRpb25hbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE1IDIzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGlzIHB1cmVseSBhIGNvbnRyb2wgZmxvdyBhbmQgbG9ja2luZyBjaGFuZ2UgZGVzaWduZWQgdG8gcHJldmVudCBsb2NrIHJlY3Vyc2lvbiBhbmQgZGVhZGxvY2tzIHRocm91Z2ggZXBvbGwuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRvZXMgbm90IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UsIHN1Y2ggYXMgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IGxvY2sgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MgdGhyb3VnaCBlcG9sbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjI4Ljg0MzQ5MDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5NjY5MzEyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJFUE9MTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2V2ZW50ZmRfcmVnaXN0ZXJcIixcbiAgICBcImlvX2Z1dGV4X3dhaXRcIixcbiAgICBcImlvX2Z1dGV4dl93YWl0XCIsXG4gICAgXCJpb19wb2xsX2FkZFwiLFxuICAgIFwiaW9fd2FpdGlkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgY2hhbmdlIGRlc2lnbmVkIHRvIHByZXZlbnQgbG9jayByZWN1cnNpb24gYW5kIGRlYWRsb2NrcyB0aHJvdWdoIGVwb2xsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLCBzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhpcyBhZmZlY3RzIGNvcmUgaW9fdXJpbmcgb3BlcmF0aW9ucyB0aGF0IHVzZSB3YWl0cXVldWVzLCBzdWNoIGFzIGZ1dGV4IHdhaXQsIHBvbGwsIGFuZCB3YWl0aWQsIHdoZW4gY29tYmluZWQgd2l0aCBldmVudGZkIG5vdGlmaWNhdGlvbnMuIEZ1enppbmcgdGhlc2Ugc3BlY2lmaWMgb3BlcmF0aW9ucyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBkZWZlcnJlZCBzaWduYWxpbmcgd29ya3MgY29ycmVjdGx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjI4Ljg0MzQ5NTIwMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMjczMDIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJkMDRkNzQ3NGVlZmEwODUwNjU4YzY4YjIwOTMyZDBlNmFmNTExMjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMTUgMjM6NDg6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXFxuaW5kZXggYTJjNjIzYTY3YTI1MS4uZjZlOTBjYzY0YTFmMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcXG5AQCAtMjAsNiArMjAsMTQgQEAgZW51bSB7XFxuIFxcdCAqIEl0J3MgYWxzbyBpZ25vcmVkIHVubGVzcyBJT1JJTkdfU0VUVVBfREVGRVJfVEFTS1JVTiBpcyBzZXQuXFxuIFxcdCAqL1xcbiBcXHRJT1VfRl9UV1FfTEFaWV9XQUtFXFx0XFx0XFx0PSAxLFxcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLCB3aGVyZVxcbitcXHQgKiBhbiBhcmJpdHJhcnkgcHJvdmlkZXIgd2FpdHF1ZXVlIGxvY2sgaXMgaGVsZC4gU2lnbmFsaW5nIHRoZSBDUSByaW5nXFxuK1xcdCAqIGV2ZW50ZmQgaW5saW5lIGZyb20gdGhlcmUgY2FuIHJlY3Vyc2UgYmFjayBpbnRvIHRoYXQgbG9jayB0aHJvdWdoXFxuK1xcdCAqIGVwb2xsLCBzbyB0aGUgZXZlbnRmZCBzaWduYWwgbXVzdCBiZSBkZWZlcnJlZC5cXG4rXFx0ICovXFxuK1xcdElPVV9GX1RXUV9JTl9XQUtFXFx0XFx0XFx0PSAyLFxcbiB9O1xcbiBcXG4gZW51bSBpb191cmluZ19jbWRfZmxhZ3Mge1xcbmRpZmYgLS1naXQgYS9pb191cmluZy9ldmVudGZkLmMgYi9pb191cmluZy9ldmVudGZkLmNcXG5pbmRleCBkNjU2Y2MyYTBiOWJhLi42M2ZlNmU1ZDc5YmFkIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL2V2ZW50ZmQuY1xcbisrKyBiL2lvX3VyaW5nL2V2ZW50ZmQuY1xcbkBAIC01MSw5ICs1MSw5IEBAIHN0YXRpYyB2b2lkIGlvX2V2ZW50ZmRfZG9fc2lnbmFsKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbiAvKlxcbiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlciBzaG91bGQgcHV0IHRoZSBldl9mZCByZWZlcmVuY2UsIGZhbHNlIGlmIG5vdC5cXG4gICovXFxuLXN0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZClcXG4rc3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkLCBib29sIGRlZmVyKVxcbiB7XFxuLVxcdGlmIChldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHtcXG4rXFx0aWYgKCFkZWZlciBcXHUwMDI2XFx1MDAyNiBldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHtcXG4gXFx0XFx0ZXZlbnRmZF9zaWduYWxfbWFzayhldl9mZC1cXHUwMDNlY3FfZXZfZmQsIEVQT0xMX1VSSU5HX1dBS0UpO1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBib29sIGlvX2V2ZW50ZmRfdHJpZ2dlcihzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKVxcbiBcXHRyZXR1cm4gIWV2X2ZkLVxcdTAwM2VldmVudGZkX2FzeW5jIHx8IGlvX3dxX2N1cnJlbnRfaXNfd29ya2VyKCk7XFxuIH1cXG4gXFxuLXZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50KVxcbit2b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCwgYm9vbCBkZWZlcilcXG4ge1xcbiBcXHRib29sIHNraXAgPSBmYWxzZTtcXG4gXFx0c3RydWN0IGlvX2V2X2ZkICpldl9mZDtcXG5AQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50KVxcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wbGV0aW9uX2xvY2spO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkKSlcXG4rXFx0aWYgKHNraXAgfHwgX19pb19ldmVudGZkX3NpZ25hbChldl9mZCwgZGVmZXIpKVxcbiBcXHRcXHRpb19ldmVudGZkX3B1dChldl9mZCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2V2ZW50ZmQuaCBiL2lvX3VyaW5nL2V2ZW50ZmQuaFxcbmluZGV4IDQwMGVkYTRhNDE2NWEuLmU5NjVkODBkOWZkYzYgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvZXZlbnRmZC5oXFxuKysrIGIvaW9fdXJpbmcvZXZlbnRmZC5oXFxuQEAgLTUsNCArNSw0IEBAIGludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYyk7XFxuIGludCBpb19ldmVudGZkX3VucmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpO1xcbiBcXG4tdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpO1xcbit2b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCwgYm9vbCBkZWZlcik7XFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jXFxuaW5kZXggZjBkODBhNDQ0ZjQ1ZS4uZWFlZTE0MjQyYTNhMyAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9mdXRleC5jXFxuKysrIGIvaW9fdXJpbmcvZnV0ZXguY1xcbkBAIC0xODEsNyArMTgxLDcgQEAgc3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZXZfZm4oc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKVxcbiBcXG4gXFx0aW9fcmVxX3NldF9yZXMocmVxLCAwLCAwKTtcXG4gXFx0cmVxLVxcdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX2Z1dGV4dl9jb21wbGV0ZTtcXG4tXFx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcXG4rXFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTtcXG4gfVxcbiBcXG4gaW50IGlvX2Z1dGV4dl9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcXG4gXFxuIFxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XFxuIFxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcXG4tXFx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcXG4rXFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTtcXG4gfVxcbiBcXG4gaW50IGlvX2Z1dGV4dl93YWl0KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2lvX3VyaW5nLmMgYi9pb191cmluZy9pb191cmluZy5jXFxuaW5kZXggNGM4M2E5NGI0YmRjMy4uNzZmMDQ5ZTI5YWEyZSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy9pb191cmluZy5jXFxuKysrIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xcbkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXFxuIFxcdGlmIChjdHgtXFx1MDAzZWludF9mbGFncyBcXHUwMDI2IElPX1JJTkdfRl9PRkZfVElNRU9VVF9VU0VEKVxcbiBcXHRcXHRpb19mbHVzaF90aW1lb3V0cyhjdHgpO1xcbiBcXHRpZiAoY3R4LVxcdTAwM2VpbnRfZmxhZ3MgXFx1MDAyNiBJT19SSU5HX0ZfSEFTX0VWRkQpXFxuLVxcdFxcdGlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgdHJ1ZSk7XFxuK1xcdFxcdGlvX2V2ZW50ZmRfc2lnbmFsKGN0eCwgdHJ1ZSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb19jcV9sb2NrKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbmRpZmYgLS1naXQgYS9pb191cmluZy9wb2xsLmMgYi9pb191cmluZy9wb2xsLmNcXG5pbmRleCAwMjA0YWZmZGMzMDhjLi41NDQ3YTdjMjRkY2U2IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3BvbGwuY1xcbisrKyBiL2lvX3VyaW5nL3BvbGwuY1xcbkBAIC0yMDgsOSArMjA4LDkgQEAgZW51bSB7XFxuIFxcdElPVV9QT0xMX1JFUVVFVUUgPSA0LFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKVxcbitzdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2ssIHVuc2lnbmVkIHR3X2ZsYWdzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGZsYWdzID0gMDtcXG4rXFx0dW5zaWduZWQgZmxhZ3MgPSB0d19mbGFncztcXG4gXFxuIFxcdGlvX3JlcV9zZXRfcmVzKHJlcSwgbWFzaywgMCk7XFxuIFxcdHJlcS1cXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19wb2xsX3Rhc2tfZnVuYztcXG5AQCAtMjE4LDE0ICsyMTgsMTUgQEAgc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKVxcbiBcXHR0cmFjZV9pb191cmluZ190YXNrX2FkZChyZXEsIG1hc2spO1xcbiBcXG4gXFx0aWYgKCEocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX1BPTExfTk9fTEFaWSkpXFxuLVxcdFxcdGZsYWdzID0gSU9VX0ZfVFdRX0xBWllfV0FLRTtcXG4rXFx0XFx0ZmxhZ3MgfD0gSU9VX0ZfVFdRX0xBWllfV0FLRTtcXG4gXFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIGZsYWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGlvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJlcylcXG4rc3RhdGljIGlubGluZSB2b2lkIGlvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJlcyxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgdHdfZmxhZ3MpXFxuIHtcXG4gXFx0aWYgKGlvX3BvbGxfZ2V0X293bmVyc2hpcChyZXEpKVxcbi1cXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIHJlcyk7XFxuK1xcdFxcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzLCB0d19mbGFncyk7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTM0NCw3ICszNDUsNyBAQCB2b2lkIGlvX3BvbGxfdGFza19mdW5jKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbiBcXHRpZiAocmV0ID09IElPVV9QT0xMX05PX0FDVElPTikge1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH0gZWxzZSBpZiAocmV0ID09IElPVV9QT0xMX1JFUVVFVUUpIHtcXG4tXFx0XFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcXG4rXFx0XFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcdGlvX3BvbGxfcmVtb3ZlX2VudHJpZXMocmVxKTtcXG5AQCAtMzgzLDcgKzM4NCw3IEBAIHN0YXRpYyB2b2lkIGlvX3BvbGxfY2FuY2VsX3JlcShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4ge1xcbiBcXHRpb19wb2xsX21hcmtfY2FuY2VsbGVkKHJlcSk7XFxuIFxcdC8qIGtpY2sgdHcsIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB0aGUgcmVxdWVzdCAqL1xcbi1cXHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcXG4rXFx0aW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgMCk7XFxuIH1cXG4gXFxuICNkZWZpbmUgSU9fQVNZTkNfUE9MTF9DT01NT05cXHQoRVBPTExPTkVTSE9UIHwgRVBPTExQUkkpXFxuQEAgLTM5Miw3ICszOTMsNyBAQCBzdGF0aWMgX19jb2xkIGludCBpb19wb2xsZnJlZV93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fcG9sbCAqcG9sbClcXG4ge1xcbiBcXHRpb19wb2xsX21hcmtfY2FuY2VsbGVkKHJlcSk7XFxuIFxcdC8qIHdlIGhhdmUgdG8ga2ljayB0dyBpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkgKi9cXG4tXFx0aW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7XFxuK1xcdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIElPVV9GX1RXUV9JTl9XQUtFKTtcXG4gXFx0aW9fcG9sbF9yZW1vdmVfd2FpdHEocG9sbCk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuQEAgLTQzMCw3ICs0MzEsNyBAQCBzdGF0aWMgaW50IGlvX3BvbGxfd2FrZShzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsXFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+UkVRX0ZfU0lOR0xFX1BPTEw7XFxuIFxcdFxcdH1cXG4tXFx0XFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcXG4rXFx0XFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG5AQCAtNjE4LDcgKzYxOSw3IEBAIHN0YXRpYyBpbnQgX19pb19hcm1fcG9sbF9oYW5kbGVyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbiBcXG4gXFx0aWYgKG1hc2sgXFx1MDAyNlxcdTAwMjYgKHBvbGwtXFx1MDAzZWV2ZW50cyBcXHUwMDI2IEVQT0xMRVQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBpb19wb2xsX2Nhbl9maW5pc2hfaW5saW5lKHJlcSwgaXB0KSkge1xcbi1cXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2spO1xcbitcXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIG1hc2ssIDApO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRpb19uYXBpX2FkZChyZXEpO1xcbkBAIC02MjksNyArNjMwLDcgQEAgc3RhdGljIGludCBfX2lvX2FybV9wb2xsX2hhbmRsZXIoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuIFxcdFxcdCAqIHBvbGwgd2FzIHdha2VuIHVwLCBxdWV1ZSB1cCBhIHR3LCBpdCdsbCBkZWFsIHdpdGggaXQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoYXRvbWljX2NtcHhjaGcoXFx1MDAyNnJlcS1cXHUwMDNlcG9sbF9yZWZzLCAxLCAwKSAhPSAxKVxcbi1cXHRcXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xcbitcXHRcXHRcXHRfX2lvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3R3LmMgYi9pb191cmluZy90dy5jXFxuaW5kZXggYTRjODcyODcwZDgxYy4uYmY0ZTVhYTVjMmU3ZSAxMDA2NDRcXG4tLS0gYS9pb191cmluZy90dy5jXFxuKysrIGIvaW9fdXJpbmcvdHcuY1xcbkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBpb19yZXFfbG9jYWxfd29ya19hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGZsYWdzKVxcbiBcXHRpZiAobXBzY3FfcHVzaChcXHUwMDI2Y3R4LVxcdTAwM2V3b3JrX2xpc3QsIFxcdTAwMjZyZXEtXFx1MDAzZWlvX3Rhc2tfd29yay5ub2RlKSkge1xcbiBcXHRcXHRpb19jdHhfbWFya190YXNrcnVuKGN0eCk7XFxuIFxcdFxcdGlmIChkYXRhX3JhY2UoY3R4LVxcdTAwM2VpbnRfZmxhZ3MpIFxcdTAwMjYgSU9fUklOR19GX0hBU19FVkZEKVxcbi1cXHRcXHRcXHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlKTtcXG4rXFx0XFx0XFx0aW9fZXZlbnRmZF9zaWduYWwoY3R4LCBmYWxzZSwgZmxhZ3MgXFx1MDAyNiBJT1VfRl9UV1FfSU5fV0FLRSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3dhaXRpZC5jIGIvaW9fdXJpbmcvd2FpdGlkLmNcXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi43NmFmMTI5YmE4Y2FkIDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3dhaXRpZC5jXFxuKysrIGIvaW9fdXJpbmcvd2FpdGlkLmNcXG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgaW9fd2FpdGlkX3dhaXQoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG4gXFx0cmVxLVxcdTAwM2Vpb190YXNrX3dvcmsuZnVuYyA9IGlvX3dhaXRpZF9jYjtcXG4tXFx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcXG4rXFx0X19pb19yZXFfdGFza193b3JrX2FkZChyZXEsIElPVV9GX1RXUV9JTl9XQUtFKTtcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjMwLjI0Njg4NTYyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY1Njc1NDQ0NzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJFVkVOVEZEXCIsXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19ldmVudGZkX3JlZ2lzdGVyXCIsXG4gICAgXCJpb19mdXRleF93YWl0XCIsXG4gICAgXCJpb19mdXRleHZfd2FpdFwiLFxuICAgIFwiaW9fcG9sbF9hZGRcIixcbiAgICBcImlvX3dhaXRpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmQwNGQ3NDc0ZWVmYTA4NTA2NThjNjhiMjA5MzJkMGU2YWY1MTEyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDIzOjQ4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5pbmRleCBhMmM2MjNhNjdhMjUxLi5mNmU5MGNjNjRhMWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbkBAIC0yMCw2ICsyMCwxNCBAQCBlbnVtIHtcbiBcdCAqIEl0J3MgYWxzbyBpZ25vcmVkIHVubGVzcyBJT1JJTkdfU0VUVVBfREVGRVJfVEFTS1JVTiBpcyBzZXQuXG4gXHQgKi9cbiBcdElPVV9GX1RXUV9MQVpZX1dBS0VcdFx0XHQ9IDEsXG4rXG4rXHQvKlxuK1x0ICogU2V0IHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLCB3aGVyZVxuK1x0ICogYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGlzIGhlbGQuIFNpZ25hbGluZyB0aGUgQ1EgcmluZ1xuK1x0ICogZXZlbnRmZCBpbmxpbmUgZnJvbSB0aGVyZSBjYW4gcmVjdXJzZSBiYWNrIGludG8gdGhhdCBsb2NrIHRocm91Z2hcbitcdCAqIGVwb2xsLCBzbyB0aGUgZXZlbnRmZCBzaWduYWwgbXVzdCBiZSBkZWZlcnJlZC5cbitcdCAqL1xuK1x0SU9VX0ZfVFdRX0lOX1dBS0VcdFx0XHQ9IDIsXG4gfTtcbiBcbiBlbnVtIGlvX3VyaW5nX2NtZF9mbGFncyB7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZXZlbnRmZC5jIGIvaW9fdXJpbmcvZXZlbnRmZC5jXG5pbmRleCBkNjU2Y2MyYTBiOWJhLi42M2ZlNmU1ZDc5YmFkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZXZlbnRmZC5jXG4rKysgYi9pb191cmluZy9ldmVudGZkLmNcbkBAIC01MSw5ICs1MSw5IEBAIHN0YXRpYyB2b2lkIGlvX2V2ZW50ZmRfZG9fc2lnbmFsKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIC8qXG4gICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHB1dCB0aGUgZXZfZmQgcmVmZXJlbmNlLCBmYWxzZSBpZiBub3QuXG4gICovXG4tc3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKVxuK3N0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZCwgYm9vbCBkZWZlcilcbiB7XG4tXHRpZiAoZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4rXHRpZiAoIWRlZmVyIFx1MDAyNlx1MDAyNiBldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHtcbiBcdFx0ZXZlbnRmZF9zaWduYWxfbWFzayhldl9mZC1cdTAwM2VjcV9ldl9mZCwgRVBPTExfVVJJTkdfV0FLRSk7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGJvb2wgaW9fZXZlbnRmZF90cmlnZ2VyKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXG4gXHRyZXR1cm4gIWV2X2ZkLVx1MDAzZWV2ZW50ZmRfYXN5bmMgfHwgaW9fd3FfY3VycmVudF9pc193b3JrZXIoKTtcbiB9XG4gXG4tdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpXG4rdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpXG4ge1xuIFx0Ym9vbCBza2lwID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkO1xuQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudClcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jayk7XG4gXHR9XG4gXG4tXHRpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkKSlcbitcdGlmIChza2lwIHx8IF9faW9fZXZlbnRmZF9zaWduYWwoZXZfZmQsIGRlZmVyKSlcbiBcdFx0aW9fZXZlbnRmZF9wdXQoZXZfZmQpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pb191cmluZy9ldmVudGZkLmggYi9pb191cmluZy9ldmVudGZkLmhcbmluZGV4IDQwMGVkYTRhNDE2NWEuLmU5NjVkODBkOWZkYzYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9ldmVudGZkLmhcbisrKyBiL2lvX3VyaW5nL2V2ZW50ZmQuaFxuQEAgLTUsNCArNSw0IEBAIGludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdHVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTtcbiBpbnQgaW9fZXZlbnRmZF91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcbiBcbi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCk7XG4rdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jXG5pbmRleCBmMGQ4MGE0NDRmNDVlLi5lYWVlMTQyNDJhM2EzIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZnV0ZXguY1xuKysrIGIvaW9fdXJpbmcvZnV0ZXguY1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtldl9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpXG4gXG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xuLVx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbitcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gfVxuIFxuIGludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcbi1cdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4rXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIH1cbiBcbiBpbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuaW5kZXggNGM4M2E5NGI0YmRjMy4uNzZmMDQ5ZTI5YWEyZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmNcbisrKyBiL2lvX3VyaW5nL2lvX3VyaW5nLmNcbkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX09GRl9USU1FT1VUX1VTRUQpXG4gXHRcdGlvX2ZsdXNoX3RpbWVvdXRzKGN0eCk7XG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX0hBU19FVkZEKVxuLVx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUpO1xuK1x0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fY3FfbG9jayhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmRpZmYgLS1naXQgYS9pb191cmluZy9wb2xsLmMgYi9pb191cmluZy9wb2xsLmNcbmluZGV4IDAyMDRhZmZkYzMwOGMuLjU0NDdhN2MyNGRjZTYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9wb2xsLmNcbisrKyBiL2lvX3VyaW5nL3BvbGwuY1xuQEAgLTIwOCw5ICsyMDgsOSBAQCBlbnVtIHtcbiBcdElPVV9QT0xMX1JFUVVFVUUgPSA0LFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKVxuK3N0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaywgdW5zaWduZWQgdHdfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgZmxhZ3MgPSAwO1xuK1x0dW5zaWduZWQgZmxhZ3MgPSB0d19mbGFncztcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgbWFzaywgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19wb2xsX3Rhc2tfZnVuYztcbkBAIC0yMTgsMTQgKzIxOCwxNSBAQCBzdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spXG4gXHR0cmFjZV9pb191cmluZ190YXNrX2FkZChyZXEsIG1hc2spO1xuIFxuIFx0aWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9QT0xMX05PX0xBWlkpKVxuLVx0XHRmbGFncyA9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4rXHRcdGZsYWdzIHw9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4gXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXMsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCB0d19mbGFncylcbiB7XG4gXHRpZiAoaW9fcG9sbF9nZXRfb3duZXJzaGlwKHJlcSkpXG4tXHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMsIHR3X2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC0zNDQsNyArMzQ1LDcgQEAgdm9pZCBpb19wb2xsX3Rhc2tfZnVuYyhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdGlmIChyZXQgPT0gSU9VX1BPTExfTk9fQUNUSU9OKSB7XG4gXHRcdHJldHVybjtcbiBcdH0gZWxzZSBpZiAocmV0ID09IElPVV9QT0xMX1JFUVVFVUUpIHtcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFx0aW9fcG9sbF9yZW1vdmVfZW50cmllcyhyZXEpO1xuQEAgLTM4Myw3ICszODQsNyBAQCBzdGF0aWMgdm9pZCBpb19wb2xsX2NhbmNlbF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4ge1xuIFx0aW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpO1xuIFx0Lyoga2ljayB0dywgd2hpY2ggc2hvdWxkIGNvbXBsZXRlIHRoZSByZXF1ZXN0ICovXG4tXHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbitcdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xuIH1cbiBcbiAjZGVmaW5lIElPX0FTWU5DX1BPTExfQ09NTU9OXHQoRVBPTExPTkVTSE9UIHwgRVBPTExQUkkpXG5AQCAtMzkyLDcgKzM5Myw3IEBAIHN0YXRpYyBfX2NvbGQgaW50IGlvX3BvbGxmcmVlX3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19wb2xsICpwb2xsKVxuIHtcbiBcdGlvX3BvbGxfbWFya19jYW5jZWxsZWQocmVxKTtcbiBcdC8qIHdlIGhhdmUgdG8ga2ljayB0dyBpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkgKi9cbi1cdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xuK1x0aW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIFx0aW9fcG9sbF9yZW1vdmVfd2FpdHEocG9sbCk7XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNDMwLDcgKzQzMSw3IEBAIHN0YXRpYyBpbnQgaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYyxcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UkVRX0ZfU0lOR0xFX1BPTEw7XG4gXHRcdH1cbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNjE4LDcgKzYxOSw3IEBAIHN0YXRpYyBpbnQgX19pb19hcm1fcG9sbF9oYW5kbGVyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFxuIFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2IChwb2xsLVx1MDAzZWV2ZW50cyBcdTAwMjYgRVBPTExFVCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaW9fcG9sbF9jYW5fZmluaXNoX2lubGluZShyZXEsIGlwdCkpIHtcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCAwKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpb19uYXBpX2FkZChyZXEpO1xuQEAgLTYyOSw3ICs2MzAsNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0ICogcG9sbCB3YXMgd2FrZW4gdXAsIHF1ZXVlIHVwIGEgdHcsIGl0J2xsIGRlYWwgd2l0aCBpdC5cbiBcdFx0ICovXG4gXHRcdGlmIChhdG9taWNfY21weGNoZyhcdTAwMjZyZXEtXHUwMDNlcG9sbF9yZWZzLCAxLCAwKSAhPSAxKVxuLVx0XHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7XG4rXHRcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pb191cmluZy90dy5jIGIvaW9fdXJpbmcvdHcuY1xuaW5kZXggYTRjODcyODcwZDgxYy4uYmY0ZTVhYTVjMmU3ZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3R3LmNcbisrKyBiL2lvX3VyaW5nL3R3LmNcbkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBpb19yZXFfbG9jYWxfd29ya19hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGZsYWdzKVxuIFx0aWYgKG1wc2NxX3B1c2goXHUwMDI2Y3R4LVx1MDAzZXdvcmtfbGlzdCwgXHUwMDI2cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5ub2RlKSkge1xuIFx0XHRpb19jdHhfbWFya190YXNrcnVuKGN0eCk7XG4gXHRcdGlmIChkYXRhX3JhY2UoY3R4LVx1MDAzZWludF9mbGFncykgXHUwMDI2IElPX1JJTkdfRl9IQVNfRVZGRClcbi1cdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlKTtcbitcdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlLCBmbGFncyBcdTAwMjYgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIFx0fVxuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi43NmFmMTI5YmE4Y2FkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbisrKyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgaW9fd2FpdGlkX3dhaXQoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fd2FpdGlkX2NiO1xuLVx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbitcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0ODozMC4yNDY4ODgyOTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzI1OTIxMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW9fdXJpbmcgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIGBpb191cmluZ2Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYGV2ZW50ZmRgLCBgZnV0ZXhgLCBgcG9sbGAsIGB0d2AsIGFuZCBgd2FpdGlkYC4gSXQncyBhZGRpbmcgdGhpcyBuZXcgZmxhZywgYElPVV9GX1RXUV9JTl9XQUtFYCwgd2hpY2ggbG9va3MgbGlrZSBpdCdzIGRlc2lnbmVkIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gYSB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoZSBnb2FsIGhlcmUgaXMgdG8gcHJldmVudCBwb3RlbnRpYWwgbG9jayByZWN1cnNpb24gaXNzdWVzIHRocm91Z2ggZXBvbGwuIFRoaXMgaXMgY29yZSBpb191cmluZyBsb2dpYywgc28gaXQncyB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqIGFuZCBpZiBpdCdzIGZ1enotd29ydGh5LiBHaXZlbiB0aGF0IGBpb191cmluZ2AgaXMgaGVhdmlseSBmdXp6ZWQgaW4gZ2VuZXJhbCwgYW5kIEkga25vdyBpdCdzIGEgaG90IHRhcmdldCBmb3IgYnVnIGh1bnRpbmcsIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzIGlzIGluZGVlZCBhIGZydWl0ZnVsIGFyZWEgdG8gZXhwbG9yZSB3aXRoIGZ1enppbmcuXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gV2UgaGF2ZTogYGlvX2V2ZW50ZmRfc2lnbmFsYCwgYGlvX2Z1dGV4dl9wcmVwYCAodGhvdWdoIG5vdCBkaXJlY3RseSBtb2RpZmllZCwgdGhlIHJlbGF0ZWQgYGlvX2Z1dGV4X3dha2V2X2ZuYCBhbmQgYGlvX2Z1dGV4X3dha2VfZm5gIGFyZSksIGBpb19wb2xsX2V4ZWN1dGVgIC8gYF9faW9fcG9sbF9leGVjdXRlYCwgYGlvX3BvbGxfd2FrZWAsIGBpb19wb2xsZnJlZV93YWtlYCwgYGlvX3JlcV9sb2NhbF93b3JrX2FkZGAsIGFuZCBgaW9fd2FpdGlkX3dhaXRgLlxuXG5UaGUgZ29hbCBpcyB0byBpZGVudGlmeSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gSWRlYWxseSwgSSdtIGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gYGlvX2V2ZW50ZmRfc2lnbmFsYCBpc24ndCBhIHN5c2NhbGwsIGJ1dCBpdCdzIGFuIEFQSSwgc28gaXQncyBhIGNhbmRpZGF0ZS4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgbGV0J3MgcHJpb3JpdGl6ZSBzeXNjYWxscyBhbmQgb3BlcmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZmVhdHVyZXMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByZWxhdGVkIGBpb191cmluZ2Agb3BlcmF0aW9uczogYElPUklOR19PUF9QT0xMX0FERGAsIGBJT1JJTkdfT1BfRlVURVhfV0FJVGAsIGBJT1JJTkdfT1BfRlVURVhfV0FLRWAsIGBJT1JJTkdfT1BfV0FJVElEYCwgYW5kIGBpb19ldmVudGZkX3JlZ2lzdGVyYC4gVGltZSB0byBncmVwIHRoZSBjb2RlIGZvciBpbnN0YW5jZXMgb2YgdGhlc2UgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcmVsZXZhbnQgY2FsbCBwYXRocyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTA4NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjM3Ljk3MjgxMTk3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgyMzI2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpIGlvX2V2ZW50ZmRfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvZXZlbnRmZC5jPTc2PXZvaWQgaW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIGJvb2wgY3FlX2V2ZW50LCBib29sIGRlZmVyKVxcbi0tXFxuaW9fdXJpbmcvZXZlbnRmZC5jLTExOS1cXG5pb191cmluZy9ldmVudGZkLmM6MTIwOmludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxcbmlvX3VyaW5nL2V2ZW50ZmQuYy0xMjEtXFx0XFx0XFx0dW5zaWduZWQgaW50IGV2ZW50ZmRfYXN5bmMpXFxuLS1cXG5pb191cmluZy9ldmVudGZkLmg9Mz1zdHJ1Y3QgaW9fcmluZ19jdHg7XFxuaW9fdXJpbmcvZXZlbnRmZC5oOjQ6aW50IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuaW9fdXJpbmcvZXZlbnRmZC5oLTUtXFx0XFx0XFx0dW5zaWduZWQgaW50IGV2ZW50ZmRfYXN5bmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0ODo0MC4yNTUxNDMwODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIzNTE1MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipQcm9iaW5nIHRoZSBJL08gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHN5c3RlbSBjYWxscy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBrZXJuZWwgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIEkvTyBzdWJzeXN0ZW0uIGBpb19mdXRleHZfd2FpdGAgYW5kIGBpb19mdXRleHZfd2FrZWAgYXJlIGltbWVkaWF0ZWx5IGludHJpZ3VpbmcuIFRoZXkgc3Ryb25nbHkgc3VnZ2VzdCBhIGZ1dGV4LWJhc2VkIGltcGxlbWVudGF0aW9uIGZvciBJL08gY29tcGxldGlvbiBzaWduYWxpbmcsIGxpa2VseSBsZXZlcmFnaW5nIHZlY3Rvcml6ZWQgb3BlcmF0aW9ucyBmb3IgZWZmaWNpZW5jeS4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSB0byB1bmRlcnN0YW5kLCBlc3BlY2lhbGx5IGluIHRlcm1zIG9mIGNvbmN1cnJlbmN5IGFuZCBwb3RlbnRpYWwgY29udGVudGlvbiBwb2ludHMuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmdXRleCBvcGVyYXRpb25zIHRpZSBpbnRvIHRoZSBvdmVyYWxsIGV2ZW50IGxvb3AuXG5cblRoZW4sIHRoZXJlJ3MgYGlvX3BvbGxfYWRkYC4gVGhpcyBzY3JlYW1zIFwiZXBvbGwtbGlrZVwiIG9yIFwia3F1ZXVlLWxpa2VcIiBmdW5jdGlvbmFsaXR5LCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICpzcGVjaWZpY3MqIG9mIGl0cyBpbnRlcmZhY2UuIElzIGl0IHJlZ2lzdGVyaW5nIGZpbGUgZGVzY3JpcHRvcnMsIEkvTyBjb21wbGV0aW9uIHBvcnRzLCBvciBzb21ldGhpbmcgbW9yZSBhYnN0cmFjdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2NhbGFiaWxpdHkgYW5kIHRoZSB0eXBlcyBvZiBJL08gb3BlcmF0aW9ucyBpdCBzdXBwb3J0cz9cblxuRmluYWxseSwgYGlvX3dhaXRpZF9wcmVwYCBhbmQgYGlvX3dhaXRpZGAuIFRoZXNlIGFyZSBwb2ludGluZyB0b3dhcmRzIGFzeW5jaHJvbm91cyBJL08gd2l0aCBwcm9jZXNzL3RocmVhZCBJRCBtYW5hZ2VtZW50IGFuZCBJL08gY29tcGxldGlvbiBzaWduYWxpbmcuIEkgbmVlZCB0byBhc2NlcnRhaW4gaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZS4gQXJlIHRoZXkgdXNlZCBmb3Igd2FpdGluZyBvbiBjaGlsZHJlbiBwcm9jZXNzZXMnIEkvTyBjb21wbGV0aW9uLCBvciBkbyB0aGV5IG9mZmVyIG1vcmUgZ2VuZXJhbGl6ZWQgc2lnbmFsaW5nIGNhcGFiaWxpdGllcywgc2ltaWxhciB0byBgd2FpdGlkYCBidXQgc3RyZWFtbGluZWQgZm9yIEkvTyBjb250ZXh0cz8gSXMgdGhlcmUgb3ZlcmxhcCB3aXRoIGBpb19wb2xsX2FkZGAgb3IgYXJlIHRoZXkgaW5kZXBlbmRlbnQgbWVjaGFuaXNtcz8gSSdtIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBpbnRlcnBsYXkgaGVyZSwgYW5kIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhvcm91Z2hseSB0byBkZXZlbG9wIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIHRoZWlyIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzExLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDg6NDMuOTc4NjYwMTc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDgxNDE4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkgaW9fZnV0ZXh2X3dhaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvZnV0ZXguYz0yMzA9c3RhdGljIHZvaWQgaW9fZnV0ZXhfd2FrZV9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpXFxuLS1cXG5pb191cmluZy9mdXRleC5jLTI0Mi1cXG5pb191cmluZy9mdXRleC5jOjI0MzppbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9mdXRleC5jLTI0NC17XFxuLS1cXG5pb191cmluZy9mdXRleC5oPTg9aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvZnV0ZXguaDo5OmludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9mdXRleC5oLTEwLWludCBpb19mdXRleF93YWtlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0ODo0Ni4zMjY4MTAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NDkxOTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGlvX3dhaXRpZGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIGN1cnJlbnQgc2l0dWF0aW9uIGRlbWFuZHMgYSBkZWVwZXIgbG9vaywgc28gdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gdmVyaWZ5IGBpb193YWl0aWRgLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIGhhbmRsaW5nIHByb2Nlc3MgSS9PIGFuZCBpdHMgYmVoYXZpb3Igd2lsbCBiZSBjZW50cmFsIHRvIHJlc29sdmluZyB0aGUgaXNzdWUgYXQgaGFuZC4gVW5kZXJzdGFuZGluZyBob3cgYGlvX3dhaXRpZGAgaXMgZnVuY3Rpb25pbmfigJRvciBtYWxmdW5jdGlvbmluZ+KAlGlzIGEgcHJpbWFyeSBpbnZlc3RpZ2F0aXZlIGF2ZW51ZS4gV2hhdCBpcyB0aGUgc3RhdGUgb2YgYGlvX3dhaXRpZGA/IEFyZSB0aGVyZSB1bmV4cGVjdGVkIHJldHVybiB2YWx1ZXM/IFdoYXQgYXJlIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIGl0PyBUaGUgbnVhbmNlcyBvZiBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHVzYWdlIGFyZSBlc3NlbnRpYWwgZGV0YWlscyB0byBlc3RhYmxpc2ggaGVyZS4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDg6NDkuMzExNzMyMjUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzI3NjQ1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkgaW9fd2FpdGlkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3dhaXRpZC5jPTE0Nj1zdGF0aWMgYm9vbCBfX2lvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xNjYtXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTY3OmludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL3dhaXRpZC5jLTE2OC1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jPTIzNj1zdGF0aWMgaW50IGlvX3dhaXRpZF93YWl0KHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLFxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtMjU5LVxcbmlvX3VyaW5nL3dhaXRpZC5jOjI2MDppbnQgaW9fd2FpdGlkX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy93YWl0aWQuYy0yNjEte1xcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtMjgxLVxcbmlvX3VyaW5nL3dhaXRpZC5jOjI4MjppbnQgaW9fd2FpdGlkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvd2FpdGlkLmMtMjgzLXtcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5oPTU9c3RydWN0IGlvX3dhaXRpZF9hc3luYyB7XFxuLS1cXG5pb191cmluZy93YWl0aWQuaC05LVxcbmlvX3VyaW5nL3dhaXRpZC5oOjEwOmludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcXG5pb191cmluZy93YWl0aWQuaDoxMTppbnQgaW9fd2FpdGlkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL3dhaXRpZC5oOjEyOmludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL3dhaXRpZC5oLTEzLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDg6NTEuNDQ0NTAxNzgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNjUxNTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaW9fcG9sbF9hZGRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBcIkxldCdzIGNoZWNrIGBpb19wb2xsX2FkZGAuXCIgVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBJdCBtZWFucyBJJ20gbm90IGp1c3QgZ2xvc3Npbmcgb3ZlciB0aGluZ3M7IEknbSBnb2luZyB0byBhY3R1YWxseSAqZXhhbWluZSogdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpb19wb2xsX2FkZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MsIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgSS9PIHBvbGxpbmcgZnJhbWV3b3JrLCBhbmQgd2hhdCBwb3RlbnRpYWwgZ290Y2hhcyBtaWdodCBleGlzdC4gSSdtIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yOlxuXG4qICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBwb2xsaW5nIHN0cnVjdHVyZXM/IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIGx1cmtpbmc/IE11dGV4ZXMsIHJlYWQvd3JpdGUgbG9ja3MsIGF0b21pYyBvcGVyYXRpb25zLi4uIEkgbmVlZCB0byBzZWUgdGhlIGRldGFpbHMuXG4qICAgKipSZXNvdXJjZSBNYW5hZ2VtZW50OioqIERvZXMgaXQgcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZm9yIHRoZSBwb2xsIGVudHJpZXM/IExlYWtzIGFyZSB1bmFjY2VwdGFibGUsIGFuZCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgZG91YmxlLWZyZWVzIG9yIHVzZS1hZnRlci1mcmVlcy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGNoZWNraW5nPyBEb2VzIGl0IGhhbmRsZSBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcnMsIG91dC1vZi1tZW1vcnkgY29uZGl0aW9ucywgYW5kIG90aGVyIGVkZ2UgY2FzZXMgZ3JhY2VmdWxseT8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIHByb3BhZ2F0aW9uP1xuKiAgICoqUGVyZm9ybWFuY2U6KiogV2hhdCBpcyB0aGUgb3ZlcmhlYWQgb2YgdGhpcyBmdW5jdGlvbj8gRG9lcyBpdCBzY2FsZSB3ZWxsIHVuZGVyIGhlYXZ5IGxvYWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzPyBBbW9ydGl6ZWQgY29tcGxleGl0eSBpcyBpbXBvcnRhbnQuXG4qICAgKipJbnRlZ3JhdGlvbjoqKiBIb3cgZG9lcyB0aGlzIHJlbGF0ZSB0byB0aGluZ3MgbGlrZSBgaW9fcG9sbF9yZW1vdmVgIGFuZCB0aGUgY29yZSBldmVudCBsb29wPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3I/IEkgd2lsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgdGhhdCBhZmZlY3QgbG9jayBvcmRlcmluZywgYW5kIHRoZSB1c2FnZSBvZiBnbG9iYWwgdmFyaWFibGVzLlxuKiAgICoqUG9ydGFiaWxpdHk6KiogSXMgaXQgd3JpdHRlbiBpbiBhIHdheSB0aGF0IHdpbGwgd29yayB3aXRoIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zPyBJIHdpbGwgYmUgdGhpbmtpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiBzeXN0ZW0gY2FsbHMsIGFuZCBob3cgdGhleSBtYXkgYmUgaW1wbGVtZW50ZWQgYWNyb3NzIGRpZmZlcmVudCBPU3MuXG5cblVsdGltYXRlbHksIEknbSBob3BpbmcgdG8gY29uZmlybSB0aGF0IGl0J3Mgd2VsbC1kZXNpZ25lZCwgZWZmaWNpZW50LCBhbmQgcm9idXN0LiBJdCdzIHRoZSBidWlsZGluZyBibG9jayBmb3IgcmVsaWFibGUgSS9PLCBzbyBJJ20gcHV0dGluZyBpdCB1bmRlciB0aGUgbWljcm9zY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ4OjU1LjQ3MTAxOTUwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1NDI5ODEzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKSBpb19wb2xsX2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9wb2xsLmM9ODU0PWludCBpb19wb2xsX3JlbW92ZV9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy9wb2xsLmMtODgzLVxcbmlvX3VyaW5nL3BvbGwuYzo4ODQ6aW50IGlvX3BvbGxfYWRkX3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG5pb191cmluZy9wb2xsLmMtODg1LXtcXG4tLVxcbmlvX3VyaW5nL3BvbGwuYy05MDAtXFxuaW9fdXJpbmcvcG9sbC5jOjkwMTppbnQgaW9fcG9sbF9hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9wb2xsLmMtOTAyLXtcXG4tLVxcbmlvX3VyaW5nL3BvbGwuaD0zMD1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9tdWx0aXNob3RfcmV0cnkoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuLS1cXG5pb191cmluZy9wb2xsLmgtMzQtXFxuaW9fdXJpbmcvcG9sbC5oOjM1OmludCBpb19wb2xsX2FkZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xcbmlvX3VyaW5nL3BvbGwuaDozNjppbnQgaW9fcG9sbF9hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvcG9sbC5oLTM3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0ODo1Ny42MjUzMjQwNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1NzcwMDIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGlvX3VyaW5nYCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgYSB0cmlja3kgcmVjdXJzaW9uIGlzc3VlIHdpdGhpbiBgaW9fdXJpbmdgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgZXZlbnRmZCBzaWduYWxpbmcgaW50ZXJhY3RzIHdpdGggd2FpdHF1ZXVlIHdha2V1cHMuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgdGhlIHNpZ25hbGluZyBmcm9tIGRpdmluZyBiYWNrIGludG8gdGhlIHdhaXRxdWV1ZSBsb2NrLCBwb3RlbnRpYWxseSB0aHJvdWdoIG1lY2hhbmlzbXMgbGlrZSBgZXBvbGxgLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgdGFyZ2V0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBkaXJlY3RseTogYGlvX2V2ZW50ZmRfc2lnbmFsYCwgYW5kIHRoZSB3YWl0cXVldWUgY2FsbGJhY2sgZnVuY3Rpb25zOiBgaW9fZnV0ZXhfd2FrZXZfZm5gLCBgaW9fZnV0ZXhfd2FrZV9mbmAsIGBpb19wb2xsX3dha2VgLCBgaW9fcG9sbGZyZWVfd2FrZWAsIGBpb193YWl0aWRfd2FpdGAsIGFuZCBhbHNvIGBpb19yZXFfbG9jYWxfd29ya19hZGRgLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzZW5zZSBvZiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS5cblxuRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgcHJvYmxlbWF0aWMgd2FrZXVwcyBhcmUgdGllZCB0byBgaW9fZnV0ZXh2X3dhaXRgIC8gYGlvX2Z1dGV4X3dhaXRgLCBgaW9fcG9sbF9hZGRgLCBhbmQgYGlvX3dhaXRpZGAsIHBsdXMsIG9mIGNvdXJzZSwgdGhlIGBpb19ldmVudGZkX3JlZ2lzdGVyYC4gVGhpcyBtYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGVzZSBhcmUgYWxsIHBvaW50cyB3aGVyZSB3ZSBtaWdodCBleHBlY3QgdG8gaGF2ZSBhIHdhaXRxdWV1ZSBlbnRyeSB0aGF0IGlzIHRyaWdnZXJlZCBieSBhIHVzZXItc3BhY2UgZXZlbnQuXG5cbkknbSB0aGlua2luZywgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBpb19mdXRleF93YWl0YCBhbmQgc2VlIGhvdyB0aGlzIHBhdGNoIGFjdHVhbGx5IG1vZGlmaWVzIHRoYXQuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgdGhlIGRlZmVycmVkIHNpZ25hbGluZyBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQzMiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OTowMi43ODMwMjY1NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTIyMzc5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkgaW9fZnV0ZXhfd2FpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9mdXRleC5jPTEyNz1pbnQgaW9fZnV0ZXhfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0xNTQtXFxuaW9fdXJpbmcvZnV0ZXguYzoxNTU6aW50IGlvX2Z1dGV4X3dhaXRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxcbmlvX3VyaW5nL2Z1dGV4LmMtMTU2LXtcXG4tLVxcbmlvX3VyaW5nL2Z1dGV4LmM9MjQzPWludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvZnV0ZXguYy0yOTUtXFxuaW9fdXJpbmcvZnV0ZXguYzoyOTY6aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy9mdXRleC5jLTI5Ny17XFxuLS1cXG5pb191cmluZy9mdXRleC5oPTU9aW50IGlvX2Z1dGV4X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvZnV0ZXguaDo2OmludCBpb19mdXRleF93YWl0X3ByZXAoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSk7XFxuaW9fdXJpbmcvZnV0ZXguaC03LWludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcXG5pb191cmluZy9mdXRleC5oOjg6aW50IGlvX2Z1dGV4X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvZnV0ZXguaC05LWludCBpb19mdXRleHZfd2FpdChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6MDQuOTM1MjY4MzgyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzg0ODk2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKklPX1VyaW5nIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBpb191cmluZyBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBjb25maWcgZmxhZyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIHdpdGggaXMgZGVmaW5pdGVseSBgSU9fVVJJTkdgLiBCdXQsIGtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyBvZnRlbiBnbywgaXQncyBuZXZlciB0aGF0IHNpbXBsZSwgcmlnaHQ/IE15IG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlbid0IGFueSBvdGhlciBzdWJ0bHkgbGlua2VkIGZsYWdzIG9yIHNldHRpbmdzIHRoYXQgYXJlIGVxdWFsbHkgY3JpdGljYWwuIEEgY29tcHJlaGVuc2l2ZSByZXZpZXcgaXMgdGhlIG9ubHkgd2F5IHRvIGVuc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgcG90ZW50aWFsbHkgdml0YWwgZm9yIGZ1bGwgYW5kIHByb3BlciBlbmFibGVtZW50LiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggdXAgZnJvbnQgYW5kIGF2b2lkIHNvbWUgbmFzdHkgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUuIExldCdzIHNlZSB3aGF0IGVsc2UgaXMgbHVya2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDE2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6MDguMTczNzYwNjE0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYwMjkzODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkwNz1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNC1cXG5pbml0L0tjb25maWc6MTkxNTpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxNi1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyND1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzNi1cXG5pbml0L0tjb25maWc6MTkzNzpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5MzgtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctNS1cXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcXG5pb191cmluZy9LY29uZmlnLTctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cXG5pb191cmluZy9LY29uZmlnOjEzOmNvbmZpZyBJT19VUklOR19CUEZcXG5pb191cmluZy9LY29uZmlnLTE0LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTctXFxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xcbmlvX3VyaW5nL0tjb25maWctMTktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OTowOS42MzQwNTkwMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0MDY5OTEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgSS9PIFJpbmcgUmVhY2hhYmlsaXR5KipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgYGlvX3VyaW5nYCByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc2VlIGhvdyBhY2Nlc3NpYmxlIHRoZXkgYXJlLiBNeSBmb2N1cyBzaG91bGQgYmUgb24gYGlvX2V2ZW50ZmRfcmVnaXN0ZXJgLCBgaW9fZnV0ZXhfd2FpdGAsIGBpb19mdXRleHZfd2FpdGAsIGBpb19wb2xsX2FkZGAsIGFuZCBgaW9fd2FpdGlkYC4gRmlyc3QsIEkgd2FudCB0byBtYWtlIHN1cmUgdGhleSdyZSBhY3R1YWxseSBlbnRyeXBvaW50cy5cblxuQWxyaWdodCwgZ29vZCwgYGlvX2V2ZW50ZmRfcmVnaXN0ZXJgIGlzIGluZGVlZCByZWFjaGFibGU7IGl0IGhvb2tzIGRpcmVjdGx5IGludG8gYElPUklOR19SRUdJU1RFUl9FVkVOVEZEYC4gTmV4dCwgYGlvX2Z1dGV4X3dhaXRgIGlzIHRoZXJlLCBhcyBhIHZhbGlkIGVudHJ5cG9pbnQgZm9yIGBJT1JJTkdfT1BfRlVURVhfV0FJVGAuIEFuZCB0aGUgdmVjdG9yIHZlcnNpb24sIGBpb19mdXRleHZfd2FpdGAsIGlzIGFsc28gYW4gQVBJIGVudHJ5cG9pbnQgdGllZCB0byBgSU9SSU5HX09QX0ZVVEVYX1dBSVRWYC4gTW92aW5nIG9uLCBgaW9fcG9sbF9hZGRgIGlzIGFsc28gcmVhY2hhYmxlIHZpYSBgSU9SSU5HX09QX1BPTExfQUREYC4gRmluYWxseSwgYGlvX3dhaXRpZGAgaXMgYWxzbyBhbiBBUEkgZW50cnlwb2ludCBhc3NvY2lhdGVkIHdpdGggYElPUklOR19PUF9XQUlUSURgLlxuXG5Ob3csIGxldCdzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEZvcnR1bmF0ZWx5LCBgSU9fVVJJTkdgIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyB0aGF0J3MgYSBwbHVzLiBgRVBPTExgIGlzIGFsc28gdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGBGVVRFWGAgYXMgd2VsbC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIG1ham9yaXR5IG9mIHBvdGVudGlhbCBwcmUtcmVxdWlzaXRlcy5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBhIGxpdHRsZSBkZWVwZXIgaW50byBgaW9fZXZlbnRmZF9yZWdpc3RlcmAsIGxldCdzIGNoZWNrIGl0IG91dCBpbiBgaW9fdXJpbmcvZXZlbnRmZC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OToxNC43NzQ3NjA0NjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODMxNDc5MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fZXZlbnRmZF9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9ldmVudGZkLmM9NzY9dm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpXFxuLS1cXG5pb191cmluZy9ldmVudGZkLmMtMTE5LVxcbmlvX3VyaW5nL2V2ZW50ZmQuYzoxMjA6aW50IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcsXFxuaW9fdXJpbmcvZXZlbnRmZC5jLTEyMS1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYylcXG4tLVxcbmlvX3VyaW5nL2V2ZW50ZmQuaD0zPXN0cnVjdCBpb19yaW5nX2N0eDtcXG5pb191cmluZy9ldmVudGZkLmg6NDppbnQgaW9fZXZlbnRmZF9yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyxcXG5pb191cmluZy9ldmVudGZkLmgtNS1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgZXZlbnRmZF9hc3luYyk7XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jPTc1MD1zdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODA0LVxcdFxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6ODA1OlxcdFxcdHJldCA9IGlvX2V2ZW50ZmRfcmVnaXN0ZXIoY3R4LCBhcmcsIDApO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODA2LVxcdFxcdGJyZWFrO1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy04MTAtXFx0XFx0XFx0YnJlYWs7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo4MTE6XFx0XFx0cmV0ID0gaW9fZXZlbnRmZF9yZWdpc3RlcihjdHgsIGFyZywgMSk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy04MTItXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjE2LjI1NzkxMjczM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc3Nzk3ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgRGVmZXJyZWQgRXZlbnRmZCBTaWduYWxpbmcgaW4gaW9fdXJpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIGB0YXNrX3dvcmtgIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyIGhhcyB0aGUgcG90ZW50aWFsIHRvIGltcGFjdCBjb3JlIGlvX3VyaW5nIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGZ1dGV4IHdhaXQsIHBvbGwsIGFuZCB3YWl0aWQgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IHdoZW4gdGhleSdyZSBpbnRlcmFjdGluZyB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gVGhlc2UgYXJlIGNyaXRpY2FsIGFyZWFzIHdoZXJlIGRlZmVycmVkIHNpZ25hbGluZyBjb3VsZCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMsIHJhY2UgY29uZGl0aW9ucywgb3IgZXZlbiBuYXN0eSBkZWFkbG9ja3MuXG5cbk15IHBsYW4gaXMgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGVzZSBpb191cmluZyBvcGVyYXRpb25zLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYGlvX2V2ZW50ZmRfcmVnaXN0ZXJgLCBgaW9fZnV0ZXhfd2FpdGAsIGBpb19mdXRleHZfd2FpdGAsIGBpb19wb2xsX2FkZGAsIGFuZCBgaW9fd2FpdGlkYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY292ZXJhZ2Ugb2YgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuXG5cbkknbGwgZW5hYmxlIHRoZSBmb2xsb3dpbmcga2VybmVsIGNvbmZpZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgZm9yIG15IGZ1enppbmcgY2FtcGFpZ246IGBJT19VUklOR2AsIGBFVkVOVEZEYCwgYEZVVEVYYCwgYW5kIGBFUE9MTGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCByaWdodCBjb25maWcgbmFtZXMgdGhvdWdoLiBJIGNhbid0IGJlIHRvbyBjYXJlZnVsIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk3OSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OToyMS4zMzU3MTM4OTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODU4NjA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVWRU5URkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4Nzg9Y29uZmlnIFRJTUVSRkRcXG4tLVxcbmluaXQvS2NvbmZpZy0xODg2LVxcbmluaXQvS2NvbmZpZzoxODg3OmNvbmZpZyBFVkVOVEZEXFxuaW5pdC9LY29uZmlnLTE4ODgtXFx0Ym9vbCBcXFwiRW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjIyLjgyMTU3OTQyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODAzNDI4ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTE1NTMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjI0LjYyNTAxMDY0OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY5ODU2MjgxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVBPTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xODYxLVxcbmluaXQvS2NvbmZpZzoxODYyOmNvbmZpZyBFUE9MTFxcbmluaXQvS2NvbmZpZy0xODYzLVxcdGJvb2wgXFxcIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjI3LjMyMzU3Nzk4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDc1NDQwODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTE2NTAsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjI5Ljc5OTAyMTExMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NjIxNDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlVURVhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4MjQ9Y29uZmlnIEJBU0VfU01BTExcXG4tLVxcbmluaXQvS2NvbmZpZy0xODMwLVxcbmluaXQvS2NvbmZpZzoxODMxOmNvbmZpZyBGVVRFWFxcbmluaXQvS2NvbmZpZy0xODMyLVxcdGJvb2wgXFxcIkVuYWJsZSBmdXRleCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4tLVxcbmluaXQvS2NvbmZpZy0xODQwLVxcbmluaXQvS2NvbmZpZzoxODQxOmNvbmZpZyBGVVRFWF9QSVxcbmluaXQvS2NvbmZpZy0xODQyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xODQ1LVxcbmluaXQvS2NvbmZpZzoxODQ2OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG5pbml0L0tjb25maWctMTg0Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTg1MC1cXG5pbml0L0tjb25maWc6MTg1MTpjb25maWcgRlVURVhfTVBPTFxcbmluaXQvS2NvbmZpZy0xODUyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZz0xODU2PWNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xODU4LVxcbmluaXQvS2NvbmZpZzoxODU5OmNvbmZpZyBGVVRFWF9ST0JVU1RfVU5MT0NLXFxuaW5pdC9LY29uZmlnLTE4NjAtXFx0ZGVmX2Jvb2wgRlVURVggXFx1MDAyNlxcdTAwMjYgSEFWRV9HRU5FUklDX1ZEU08gXFx1MDAyNlxcdTAwMjYgR0VORVJJQ19JUlFfRU5UUlkgXFx1MDAyNlxcdTAwMjYgUlNFUSBcXHUwMDI2XFx1MDAyNiBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6MzEuMjY1MjQwMDcyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODExNzU2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBtZXRpY3Vsb3VzbHkgcmV2aWV3ZWQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCB5ZXMsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dCBmcm9tIG15IHBlcnNwZWN0aXZlLiBJJ20gc2F0aXNmaWVkIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUsIGJ1dCBJIGFsd2F5cyB0YWtlIGEgc2Vjb25kIGxvb2suIExldCdzIGp1c3QgY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIGFuZCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIG9wZXJhdGlvbnMgaW4gcGxheS5cblxuUmlnaHQsIHRoZSBwYXRjaCBpcyBtYWtpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9uczogYGlvX2Z1dGV4X3dha2V2X2ZuYCBpcyB0cmFuc2l0aW9uaW5nIHRvIGBpb19mdXRleHZfd2FpdGAsIGBpb19mdXRleF93YWtlX2ZuYCBpcyBiZWNvbWluZyBgaW9fZnV0ZXhfd2FpdGAsIGBpb19wb2xsX3dha2VgIGlzIGV2b2x2aW5nIGludG8gYGlvX3BvbGxfYWRkYCwgYW5kIGBpb19wb2xsZnJlZV93YWtlYCBpcyBhbHNvIGJlY29taW5nIGBpb19wb2xsX2FkZGAgYW5kIGZpbmFsbHkgYGlvX3dhaXRpZF93YWl0YCBpcyBjaGFuZ2luZyBpbnRvIGBpb193YWl0aWRgLiBUaGF0IGNvbmZpcm1zIHRoYXQgdGhlIGNydWNpYWwgc3ltYm9scyBhcmUgYmVpbmcgYXBwcm9wcmlhdGVseSB1cGRhdGVkIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcuXG5cbldpdGggdGhhdCBjb25maXJtYXRpb24sIEknbSByZWFkeSB0byBwcm9jZWVkLiBUaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTc0LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OTozNS44NDY0MTgzMjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTkwODUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJFUE9MTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2V2ZW50ZmRfcmVnaXN0ZXJcIixcbiAgICBcImlvX2Z1dGV4X3dhaXRcIixcbiAgICBcImlvX2Z1dGV4dl93YWl0XCIsXG4gICAgXCJpb19wb2xsX2FkZFwiLFxuICAgIFwiaW9fd2FpdGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgYWZmZWN0cyBjb3JlIGlvX3VyaW5nIG9wZXJhdGlvbnMgdGhhdCB1c2Ugd2FpdHF1ZXVlcywgc3VjaCBhcyBmdXRleCB3YWl0LCBwb2xsLCBhbmQgd2FpdGlkLCB3aGVuIGNvbWJpbmVkIHdpdGggZXZlbnRmZCBub3RpZmljYXRpb25zLiBGdXp6aW5nIHRoZXNlIHNwZWNpZmljIG9wZXJhdGlvbnMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGUgZGVmZXJyZWQgc2lnbmFsaW5nIHdvcmtzIGNvcnJlY3RseSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCIsXG4gICAgXCJFVkVOVEZEXCIsXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19ldmVudGZkX3JlZ2lzdGVyXCIsXG4gICAgXCJpb19mdXRleF93YWl0XCIsXG4gICAgXCJpb19mdXRleHZfd2FpdFwiLFxuICAgIFwiaW9fcG9sbF9hZGRcIixcbiAgICBcImlvX3dhaXRpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmxhZyBgSU9VX0ZfVFdRX0lOX1dBS0VgIHRvIGRlZmVyIGV2ZW50ZmQgc2lnbmFsaW5nIHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGlzIGFmZmVjdHMgY29yZSBpb191cmluZyBvcGVyYXRpb25zIHRoYXQgdXNlIHdhaXRxdWV1ZXMsIHN1Y2ggYXMgZnV0ZXggd2FpdCwgcG9sbCwgYW5kIHdhaXRpZCwgd2hlbiBjb21iaW5lZCB3aXRoIGV2ZW50ZmQgbm90aWZpY2F0aW9ucy4gRnV6emluZyB0aGVzZSBzcGVjaWZpYyBvcGVyYXRpb25zIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIGRlZmVycmVkIHNpZ25hbGluZyB3b3JrcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6MzUuOTIyMzM0NjgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4ODA3Njc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE1VDIzOjQ5OjM1LjkyMjgxNDEyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjg4NzU5MjQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmbGFnIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gZGVmZXIgZXZlbnRmZCBzaWduYWxpbmcgd2hlbiB0YXNrX3dvcmsgaXMgcXVldWVkIGZyb20gYSB3YWl0cXVldWUgd2FrZXVwIGhhbmRsZXIuIFRoaXMgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NraW5nIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IGxvY2sgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MgdGhyb3VnaCBlcG9sbC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG9lcyBub3QgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSwgc3VjaCBhcyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmQwNGQ3NDc0ZWVmYTA4NTA2NThjNjhiMjA5MzJkMGU2YWY1MTEyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDE1IDIzOjQ4OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5pbmRleCBhMmM2MjNhNjdhMjUxLi5mNmU5MGNjNjRhMWYyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbkBAIC0yMCw2ICsyMCwxNCBAQCBlbnVtIHtcbiBcdCAqIEl0J3MgYWxzbyBpZ25vcmVkIHVubGVzcyBJT1JJTkdfU0VUVVBfREVGRVJfVEFTS1JVTiBpcyBzZXQuXG4gXHQgKi9cbiBcdElPVV9GX1RXUV9MQVpZX1dBS0VcdFx0XHQ9IDEsXG4rXG4rXHQvKlxuK1x0ICogU2V0IHdoZW4gdGFza193b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLCB3aGVyZVxuK1x0ICogYW4gYXJiaXRyYXJ5IHByb3ZpZGVyIHdhaXRxdWV1ZSBsb2NrIGlzIGhlbGQuIFNpZ25hbGluZyB0aGUgQ1EgcmluZ1xuK1x0ICogZXZlbnRmZCBpbmxpbmUgZnJvbSB0aGVyZSBjYW4gcmVjdXJzZSBiYWNrIGludG8gdGhhdCBsb2NrIHRocm91Z2hcbitcdCAqIGVwb2xsLCBzbyB0aGUgZXZlbnRmZCBzaWduYWwgbXVzdCBiZSBkZWZlcnJlZC5cbitcdCAqL1xuK1x0SU9VX0ZfVFdRX0lOX1dBS0VcdFx0XHQ9IDIsXG4gfTtcbiBcbiBlbnVtIGlvX3VyaW5nX2NtZF9mbGFncyB7XG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvZXZlbnRmZC5jIGIvaW9fdXJpbmcvZXZlbnRmZC5jXG5pbmRleCBkNjU2Y2MyYTBiOWJhLi42M2ZlNmU1ZDc5YmFkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZXZlbnRmZC5jXG4rKysgYi9pb191cmluZy9ldmVudGZkLmNcbkBAIC01MSw5ICs1MSw5IEBAIHN0YXRpYyB2b2lkIGlvX2V2ZW50ZmRfZG9fc2lnbmFsKHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIC8qXG4gICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHB1dCB0aGUgZXZfZmQgcmVmZXJlbmNlLCBmYWxzZSBpZiBub3QuXG4gICovXG4tc3RhdGljIGJvb2wgX19pb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkKVxuK3N0YXRpYyBib29sIF9faW9fZXZlbnRmZF9zaWduYWwoc3RydWN0IGlvX2V2X2ZkICpldl9mZCwgYm9vbCBkZWZlcilcbiB7XG4tXHRpZiAoZXZlbnRmZF9zaWduYWxfYWxsb3dlZCgpKSB7XG4rXHRpZiAoIWRlZmVyIFx1MDAyNlx1MDAyNiBldmVudGZkX3NpZ25hbF9hbGxvd2VkKCkpIHtcbiBcdFx0ZXZlbnRmZF9zaWduYWxfbWFzayhldl9mZC1cdTAwM2VjcV9ldl9mZCwgRVBPTExfVVJJTkdfV0FLRSk7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGJvb2wgaW9fZXZlbnRmZF90cmlnZ2VyKHN0cnVjdCBpb19ldl9mZCAqZXZfZmQpXG4gXHRyZXR1cm4gIWV2X2ZkLVx1MDAzZWV2ZW50ZmRfYXN5bmMgfHwgaW9fd3FfY3VycmVudF9pc193b3JrZXIoKTtcbiB9XG4gXG4tdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQpXG4rdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpXG4ge1xuIFx0Ym9vbCBza2lwID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaW9fZXZfZmQgKmV2X2ZkO1xuQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudClcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNvbXBsZXRpb25fbG9jayk7XG4gXHR9XG4gXG4tXHRpZiAoc2tpcCB8fCBfX2lvX2V2ZW50ZmRfc2lnbmFsKGV2X2ZkKSlcbitcdGlmIChza2lwIHx8IF9faW9fZXZlbnRmZF9zaWduYWwoZXZfZmQsIGRlZmVyKSlcbiBcdFx0aW9fZXZlbnRmZF9wdXQoZXZfZmQpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pb191cmluZy9ldmVudGZkLmggYi9pb191cmluZy9ldmVudGZkLmhcbmluZGV4IDQwMGVkYTRhNDE2NWEuLmU5NjVkODBkOWZkYzYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9ldmVudGZkLmhcbisrKyBiL2lvX3VyaW5nL2V2ZW50ZmQuaFxuQEAgLTUsNCArNSw0IEBAIGludCBpb19ldmVudGZkX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnLFxuIFx0XHRcdHVuc2lnbmVkIGludCBldmVudGZkX2FzeW5jKTtcbiBpbnQgaW9fZXZlbnRmZF91bnJlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KTtcbiBcbi12b2lkIGlvX2V2ZW50ZmRfc2lnbmFsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBib29sIGNxZV9ldmVudCk7XG4rdm9pZCBpb19ldmVudGZkX3NpZ25hbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgYm9vbCBjcWVfZXZlbnQsIGJvb2wgZGVmZXIpO1xuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL2Z1dGV4LmMgYi9pb191cmluZy9mdXRleC5jXG5pbmRleCBmMGQ4MGE0NDRmNDVlLi5lYWVlMTQyNDJhM2EzIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvZnV0ZXguY1xuKysrIGIvaW9fdXJpbmcvZnV0ZXguY1xuQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtldl9mbihzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpXG4gXG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIDAsIDApO1xuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fZnV0ZXh2X2NvbXBsZXRlO1xuLVx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbitcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gfVxuIFxuIGludCBpb19mdXRleHZfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgdm9pZCBpb19mdXRleF93YWtlX2ZuKHN0cnVjdCB3YWtlX3FfaGVhZCAqd2FrZV9xLCBzdHJ1Y3QgZnV0ZXhfcSAqcSlcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgMCwgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19mdXRleF9jb21wbGV0ZTtcbi1cdGlvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSk7XG4rXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIH1cbiBcbiBpbnQgaW9fZnV0ZXh2X3dhaXQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbmRpZmYgLS1naXQgYS9pb191cmluZy9pb191cmluZy5jIGIvaW9fdXJpbmcvaW9fdXJpbmcuY1xuaW5kZXggNGM4M2E5NGI0YmRjMy4uNzZmMDQ5ZTI5YWEyZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL2lvX3VyaW5nLmNcbisrKyBiL2lvX3VyaW5nL2lvX3VyaW5nLmNcbkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBfX2lvX2NvbW1pdF9jcXJpbmdfZmx1c2goc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgpXG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX09GRl9USU1FT1VUX1VTRUQpXG4gXHRcdGlvX2ZsdXNoX3RpbWVvdXRzKGN0eCk7XG4gXHRpZiAoY3R4LVx1MDAzZWludF9mbGFncyBcdTAwMjYgSU9fUklOR19GX0hBU19FVkZEKVxuLVx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUpO1xuK1x0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIHRydWUsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9faW9fY3FfbG9jayhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmRpZmYgLS1naXQgYS9pb191cmluZy9wb2xsLmMgYi9pb191cmluZy9wb2xsLmNcbmluZGV4IDAyMDRhZmZkYzMwOGMuLjU0NDdhN2MyNGRjZTYgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9wb2xsLmNcbisrKyBiL2lvX3VyaW5nL3BvbGwuY1xuQEAgLTIwOCw5ICsyMDgsOSBAQCBlbnVtIHtcbiBcdElPVV9QT0xMX1JFUVVFVUUgPSA0LFxuIH07XG4gXG4tc3RhdGljIHZvaWQgX19pb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBtYXNrKVxuK3N0YXRpYyB2b2lkIF9faW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgbWFzaywgdW5zaWduZWQgdHdfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgZmxhZ3MgPSAwO1xuK1x0dW5zaWduZWQgZmxhZ3MgPSB0d19mbGFncztcbiBcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgbWFzaywgMCk7XG4gXHRyZXEtXHUwMDNlaW9fdGFza193b3JrLmZ1bmMgPSBpb19wb2xsX3Rhc2tfZnVuYztcbkBAIC0yMTgsMTQgKzIxOCwxNSBAQCBzdGF0aWMgdm9pZCBfX2lvX3BvbGxfZXhlY3V0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IG1hc2spXG4gXHR0cmFjZV9pb191cmluZ190YXNrX2FkZChyZXEsIG1hc2spO1xuIFxuIFx0aWYgKCEocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9QT0xMX05PX0xBWlkpKVxuLVx0XHRmbGFncyA9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4rXHRcdGZsYWdzIHw9IElPVV9GX1RXUV9MQVpZX1dBS0U7XG4gXHRfX2lvX3JlcV90YXNrX3dvcmtfYWRkKHJlcSwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fcG9sbF9leGVjdXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmVzKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19wb2xsX2V4ZWN1dGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXMsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCB0d19mbGFncylcbiB7XG4gXHRpZiAoaW9fcG9sbF9nZXRfb3duZXJzaGlwKHJlcSkpXG4tXHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgcmVzKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCByZXMsIHR3X2ZsYWdzKTtcbiB9XG4gXG4gLypcbkBAIC0zNDQsNyArMzQ1LDcgQEAgdm9pZCBpb19wb2xsX3Rhc2tfZnVuYyhzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdGlmIChyZXQgPT0gSU9VX1BPTExfTk9fQUNUSU9OKSB7XG4gXHRcdHJldHVybjtcbiBcdH0gZWxzZSBpZiAocmV0ID09IElPVV9QT0xMX1JFUVVFVUUpIHtcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFx0aW9fcG9sbF9yZW1vdmVfZW50cmllcyhyZXEpO1xuQEAgLTM4Myw3ICszODQsNyBAQCBzdGF0aWMgdm9pZCBpb19wb2xsX2NhbmNlbF9yZXEoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4ge1xuIFx0aW9fcG9sbF9tYXJrX2NhbmNlbGxlZChyZXEpO1xuIFx0Lyoga2ljayB0dywgd2hpY2ggc2hvdWxkIGNvbXBsZXRlIHRoZSByZXF1ZXN0ICovXG4tXHRpb19wb2xsX2V4ZWN1dGUocmVxLCAwKTtcbitcdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDAsIDApO1xuIH1cbiBcbiAjZGVmaW5lIElPX0FTWU5DX1BPTExfQ09NTU9OXHQoRVBPTExPTkVTSE9UIHwgRVBPTExQUkkpXG5AQCAtMzkyLDcgKzM5Myw3IEBAIHN0YXRpYyBfX2NvbGQgaW50IGlvX3BvbGxmcmVlX3dha2Uoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19wb2xsICpwb2xsKVxuIHtcbiBcdGlvX3BvbGxfbWFya19jYW5jZWxsZWQocmVxKTtcbiBcdC8qIHdlIGhhdmUgdG8ga2ljayB0dyBpbiBjYXNlIGl0J3Mgbm90IGFscmVhZHkgKi9cbi1cdGlvX3BvbGxfZXhlY3V0ZShyZXEsIDApO1xuK1x0aW9fcG9sbF9leGVjdXRlKHJlcSwgMCwgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIFx0aW9fcG9sbF9yZW1vdmVfd2FpdHEocG9sbCk7XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNDMwLDcgKzQzMSw3IEBAIHN0YXRpYyBpbnQgaW9fcG9sbF93YWtlKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYyxcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UkVRX0ZfU0lOR0xFX1BPTEw7XG4gXHRcdH1cbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHR9XG4gXHRyZXR1cm4gMTtcbiB9XG5AQCAtNjE4LDcgKzYxOSw3IEBAIHN0YXRpYyBpbnQgX19pb19hcm1fcG9sbF9oYW5kbGVyKHN0cnVjdCBpb19raW9jYiAqcmVxLFxuIFxuIFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2IChwb2xsLVx1MDAzZWV2ZW50cyBcdTAwMjYgRVBPTExFVCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaW9fcG9sbF9jYW5fZmluaXNoX2lubGluZShyZXEsIGlwdCkpIHtcbi1cdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrKTtcbitcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCBtYXNrLCAwKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRpb19uYXBpX2FkZChyZXEpO1xuQEAgLTYyOSw3ICs2MzAsNyBAQCBzdGF0aWMgaW50IF9faW9fYXJtX3BvbGxfaGFuZGxlcihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbiBcdFx0ICogcG9sbCB3YXMgd2FrZW4gdXAsIHF1ZXVlIHVwIGEgdHcsIGl0J2xsIGRlYWwgd2l0aCBpdC5cbiBcdFx0ICovXG4gXHRcdGlmIChhdG9taWNfY21weGNoZyhcdTAwMjZyZXEtXHUwMDNlcG9sbF9yZWZzLCAxLCAwKSAhPSAxKVxuLVx0XHRcdF9faW9fcG9sbF9leGVjdXRlKHJlcSwgMCk7XG4rXHRcdFx0X19pb19wb2xsX2V4ZWN1dGUocmVxLCAwLCAwKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9pb191cmluZy90dy5jIGIvaW9fdXJpbmcvdHcuY1xuaW5kZXggYTRjODcyODcwZDgxYy4uYmY0ZTVhYTVjMmU3ZSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3R3LmNcbisrKyBiL2lvX3VyaW5nL3R3LmNcbkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBpb19yZXFfbG9jYWxfd29ya19hZGQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGZsYWdzKVxuIFx0aWYgKG1wc2NxX3B1c2goXHUwMDI2Y3R4LVx1MDAzZXdvcmtfbGlzdCwgXHUwMDI2cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5ub2RlKSkge1xuIFx0XHRpb19jdHhfbWFya190YXNrcnVuKGN0eCk7XG4gXHRcdGlmIChkYXRhX3JhY2UoY3R4LVx1MDAzZWludF9mbGFncykgXHUwMDI2IElPX1JJTkdfRl9IQVNfRVZGRClcbi1cdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlKTtcbitcdFx0XHRpb19ldmVudGZkX3NpZ25hbChjdHgsIGZhbHNlLCBmbGFncyBcdTAwMjYgSU9VX0ZfVFdRX0lOX1dBS0UpO1xuIFx0fVxuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi43NmFmMTI5YmE4Y2FkIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbisrKyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgaW9fd2FpdGlkX3dhaXQoc3RydWN0IHdhaXRfcXVldWVfZW50cnkgKndhaXQsIHVuc2lnbmVkIG1vZGUsXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0cmVxLVx1MDAzZWlvX3Rhc2tfd29yay5mdW5jID0gaW9fd2FpdGlkX2NiO1xuLVx0aW9fcmVxX3Rhc2tfd29ya19hZGQocmVxKTtcbitcdF9faW9fcmVxX3Rhc2tfd29ya19hZGQocmVxLCBJT1VfRl9UV1FfSU5fV0FLRSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNVQyMzo0OTozNS45MjI4MTQ5MzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4ODc1NjI3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgaW9fdXJpbmdgIHRoYXQgaW50cm9kdWNlcyBgSU9VX0ZfVFdRX0lOX1dBS0VgIGFuZCBtb2RpZmllcyBgaW9fZXZlbnRmZF9zaWduYWxgIHRvIGFjY2VwdCBhIGBkZWZlcmAgcGFyYW1ldGVyLiBUaGUgZmlsZXMgYWZmZWN0ZWQgYXJlIGBpb191cmluZy9ldmVudGZkLmNgLCBgaW9fdXJpbmcvZnV0ZXguY2AsIGBpb191cmluZy9pb191cmluZy5jYCwgYGlvX3VyaW5nL3BvbGwuY2AsIGBpb191cmluZy90dy5jYCwgYW5kIGBpb191cmluZy93YWl0aWQuY2AuIE15IGpvYiBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2Ugd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBzcGVjaWZpY2FsbHkgaWYgaXQgaW50cm9kdWNlcyBvciBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlczpcblxuKiAgIFdlJ3ZlIGFkZGVkIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gdGhlIGVudW0gaW4gYGluY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaGAuIFNpbXBsZSBlbm91Z2guXG4qICAgYF9faW9fZXZlbnRmZF9zaWduYWxgIG5vdyB0YWtlcyBhIGBkZWZlcmAgYm9vbGVhbi4gSWYgYGRlZmVyYCBpcyB0cnVlLCB0aGUgc2lnbmFsIG1hc2sgaXMgc2tpcHBlZCwgYW5kIGl0IHJldHVybnMgZmFsc2UuIFRoaXMgaXMgYSBjcnVjaWFsIGNvbnRyb2wgZmxvdyBjaGFuZ2UuXG4qICAgYGlvX2V2ZW50ZmRfc2lnbmFsYCBub3cgYWxzbyB0YWtlcyBgZGVmZXJgIGFuZCBwYXNzZXMgaXQgYWxvbmcuXG4qICAgYGlvX2Z1dGV4X3dha2V2X2ZuYCBhbmQgYGlvX2Z1dGV4X3dha2VfZm5gIGFyZSB1c2luZyBgX19pb19yZXFfdGFza193b3JrX2FkZGAgd2l0aCBgSU9VX0ZfVFdRX0lOX1dBS0VgLlxuKiAgIGBpb19wb2xsX2V4ZWN1dGVgIGFuZCBgX19pb19wb2xsX2V4ZWN1dGVgIG5vdyB1c2UgYHR3X2ZsYWdzYCB3aXRoIGBfX2lvX3JlcV90YXNrX3dvcmtfYWRkYC5cbiogICBgaW9fcG9sbF93YWtlYCwgYGlvX3BvbGxmcmVlX3dha2VgIG5vdyBwYXNzIGBJT1VfRl9UV1FfSU5fV0FLRWAgdG8gYF9faW9fcG9sbF9leGVjdXRlYC5cbiogICBgaW9fcmVxX2xvY2FsX3dvcmtfYWRkYCBwYXNzZXMgYGZsYWdzIFx1MDAyNiBJT1VfRl9UV1FfSU5fV0FLRWAgYXMgYGRlZmVyYCB0byBgaW9fZXZlbnRmZF9zaWduYWxgLlxuKiAgIGBpb193YWl0aWRfd2FpdGAgdXNlcyBgX19pb19yZXFfdGFza193b3JrX2FkZGAgd2l0aCBgSU9VX0ZfVFdRX0lOX1dBS0VgLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgYXZvaWRpbmcgYSBwb3RlbnRpYWwgZGVhZGxvY2sgYnkgZGVmZXJyaW5nIHRoZSBgZXZlbnRmZGAgc2lnbmFsaW5nIHdoZW4gdGFzayB3b3JrIGlzIHF1ZXVlZCBmcm9tIGEgd2FpdHF1ZXVlIHdha2V1cCBoYW5kbGVyLiBUaGUgZ29hbCBpcyB0byBhdm9pZCByZWN1cnNpbmcgYmFjayBpbnRvIHRoZSB3YWl0cXVldWUgbG9jayB0aHJvdWdoIGVwb2xsLCBzbyBpdCdzIGEgbG9ja2luZy9kZWFkbG9jayBmaXgsIHB1cmUgYW5kIHNpbXBsZS5cblxuQ3J1Y2lhbGx5LCBpdCAqKmRvZXNuJ3QqKiBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UuIEl0IGFsc28gZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgYWJvdXQgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGJvdW5kcyBjaGVja2luZy4gSXTigJlzIHN0cmljdGx5IGFib3V0ICp3aGVuKiBhbiBldmVudGZkIGlzIHNpZ25hbGVkLCBkZWZlcnJpbmcgaXQgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAod2l0aCB0aGUgYElPVV9GX1RXUV9JTl9XQUtFYCBmbGFnKS5cblxuR2l2ZW4gdGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgbW9kaWZpY2F0aW9uIGRlc2lnbmVkIHRvIHByZXZlbnQgcmVjdXJzaW9uIGFuZCBkZWFkbG9ja3MsIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBzdWNoIGFzIGRlYWRsb2NrcyBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBJJ20gcmVhc29uYWJseSBjZXJ0YWluIHRoZXJlIGlzIG5vIG5ldywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBoZXJlLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCBgZGVmZXJgIGlzIGp1c3QgYSBib29sZWFuLiBgSU9VX0ZfVFdRX0lOX1dBS0VgIGlzIGEgY29uc3RhbnQuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0cyBvciBmaWVsZHMgYmVpbmcgYWRkZWQgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIFdlIGFyZSBub3QgbW9kaWZ5aW5nIGJvdW5kcyBjaGVja3MsIG5vciBhcmUgd2UgYWxsb2NhdGluZyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAsIGFuZCBJIHdpbGwgZG9jdW1lbnQgdGhpcyByYXRpb25hbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwODMsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTVUMjM6NDk6NDguODEwMzgyMDE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgY2hhbmdlIGRlc2lnbmVkIHRvIHByZXZlbnQgbG9jayByZWN1cnNpb24gYW5kIGRlYWRsb2NrcyB0aHJvdWdoIGVwb2xsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLCBzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgYElPVV9GX1RXUV9JTl9XQUtFYCB0byBkZWZlciBldmVudGZkIHNpZ25hbGluZyB3aGVuIHRhc2tfd29yayBpcyBxdWV1ZWQgZnJvbSBhIHdhaXRxdWV1ZSB3YWtldXAgaGFuZGxlci4gVGhpcyBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2tpbmcgY2hhbmdlIGRlc2lnbmVkIHRvIHByZXZlbnQgbG9jayByZWN1cnNpb24gYW5kIGRlYWRsb2NrcyB0aHJvdWdoIGVwb2xsLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkb2VzIG5vdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLCBzdWNoIGFzIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow86kgb[1] Phase: Succeeded StartedAt: 2026-08-15 23:50:00 +0000 UTC FinishedAt: 2026-08-15 23:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-15 23:50:00 +0000 UTC FinishedAt: 2026-08-15 23:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2] Phase: Succeeded StartedAt: 2026-08-15 23:50:00 +0000 UTC FinishedAt: 2026-08-16 03:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-15 23:50:00 +0000 UTC FinishedAt: 2026-08-16 03:30:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-15 23:50:00 +0000 UTC FinishedAt: 2026-08-15 23:50:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-15 23:50:00 +0000 UTC FinishedAt: 2026-08-15 23:50:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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-workflow86kgb/series-workflow86kgb-convert-artifact-2325455393/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-15 23:50:10 +0000 UTC FinishedAt: 2026-08-16 00:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-15 23:50:10 +0000 UTC FinishedAt: 2026-08-16 00:06:47 +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:*6992c362-660a-44ae-b73b-abb17e745167,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-workflow86kgb/series-workflow86kgb-convert-artifact-2325455393/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": "b5e8ae38-7668-4546-92ee-2fd495c30ae7", "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-workflow86kgb/series-workflow86kgb-build-action-1797028175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-15 23:50:10 +0000 UTC FinishedAt: 2026-08-16 00:06:37 +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:*6992c362-660a-44ae-b73b-abb17e745167,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-workflow86kgb/series-workflow86kgb-convert-artifact-2325455393/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": "b5e8ae38-7668-4546-92ee-2fd495c30ae7", "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-workflow86kgb/series-workflow86kgb-build-action-1797028175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:06:47 +0000 UTC FinishedAt: 2026-08-16 00:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:06:47 +0000 UTC FinishedAt: 2026-08-16 00:06:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:06:47 +0000 UTC FinishedAt: 2026-08-16 00:06:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:06:47 +0000 UTC FinishedAt: 2026-08-16 00:06:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-workflow86kgb/series-workflow86kgb-convert-artifact-4115833716/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:06:57 +0000 UTC FinishedAt: 2026-08-16 00:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:06:57 +0000 UTC FinishedAt: 2026-08-16 00:09:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b5e8ae38-7668-4546-92ee-2fd495c30ae7,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-workflow86kgb/series-workflow86kgb-build-action-1797028175/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-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:09:55 +0000 UTC FinishedAt: 2026-08-16 00:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:09:55 +0000 UTC FinishedAt: 2026-08-16 00:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:09:55 +0000 UTC FinishedAt: 2026-08-16 00:26:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:09:55 +0000 UTC FinishedAt: 2026-08-16 00:26:05 +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:*6992c362-660a-44ae-b73b-abb17e745167,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-workflow86kgb/series-workflow86kgb-convert-artifact-4115833716/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": "3d7c8a9d-296c-4376-baf6-c7cef8f34310", "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-workflow86kgb/series-workflow86kgb-build-action-2844907584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:09:55 +0000 UTC FinishedAt: 2026-08-16 00:25:55 +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:*6992c362-660a-44ae-b73b-abb17e745167,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-workflow86kgb/series-workflow86kgb-convert-artifact-4115833716/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": "3d7c8a9d-296c-4376-baf6-c7cef8f34310", "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-workflow86kgb/series-workflow86kgb-build-action-2844907584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:26:05 +0000 UTC FinishedAt: 2026-08-16 00:26:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:26:05 +0000 UTC FinishedAt: 2026-08-16 00:26:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:26:05 +0000 UTC FinishedAt: 2026-08-16 00:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:26:05 +0000 UTC FinishedAt: 2026-08-16 00:29:04 +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:*3d7c8a9d-296c-4376-baf6-c7cef8f34310,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-workflow86kgb/series-workflow86kgb-build-action-2844907584/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-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:14 +0000 UTC FinishedAt: 2026-08-16 03:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:14 +0000 UTC FinishedAt: 2026-08-16 03:30:54 +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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"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:*b5e8ae38-7668-4546-92ee-2fd495c30ae7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d7c8a9d-296c-4376-baf6-c7cef8f34310,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-workflow86kgb/series-workflow86kgb-build-action-1797028175/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-workflow86kgb/series-workflow86kgb-build-action-2844907584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:14 +0000 UTC FinishedAt: 2026-08-16 00:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:14 +0000 UTC FinishedAt: 2026-08-16 00:29:18 +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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"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-workflow86kgb/series-workflow86kgb-convert-artifact-1306566301/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:14 +0000 UTC FinishedAt: 2026-08-16 00:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:14 +0000 UTC FinishedAt: 2026-08-16 00:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:14 +0000 UTC FinishedAt: 2026-08-16 00:29:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:24 +0000 UTC FinishedAt: 2026-08-16 03:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow86kgb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"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_eventfd_register","io_futex_wait","io_futexv_wait","io_poll_add","io_waitid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f3a6a16bbe8bde76532d9415438f8cdef439e5d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING","EVENTFD","FUTEX","EPOLL"],"series_id":"2b498d0f-13eb-428d-8e25-2cdb06eeda4f","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-16 00:29:24 +0000 UTC FinishedAt: 2026-08-16 03:30:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b5e8ae38-7668-4546-92ee-2fd495c30ae7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3d7c8a9d-296c-4376-baf6-c7cef8f34310,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-workflow86kgb/series-workflow86kgb-build-action-1797028175/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-workflow86kgb/series-workflow86kgb-build-action-2844907584/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-workflow86kgb/series-workflow86kgb-convert-artifact-1306566301/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,}